Name: series-workflowqc245 Phase: Succeeded StartedAt: 2026-08-07 10:26:35 +0000 UTC FinishedAt: 2026-08-07 14:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[0] Phase: Succeeded StartedAt: 2026-08-07 10:26:35 +0000 UTC FinishedAt: 2026-08-07 10:31:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 10:26:35 +0000 UTC FinishedAt: 2026-08-07 10:31:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IP6_NF_IPTABLES", "NETFILTER_ADVANCED", "IP6_NF_MATCH_OPTS", "IP6_NF_MATCH_IPV6HEADER", "IP6_NF_MATCH_SRH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IP6_NF_IPTABLES", "NETFILTER_ADVANCED", "IP6_NF_MATCH_OPTS", "IP6_NF_MATCH_IPV6HEADER", "IP6_NF_MATCH_SRH" ], "series_id": "5b6c1a56-7c22-4fbf-83ad-9788e88e10a6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hbh_mt6", "ipv6header_mt6", "srh_mt6", "srh1_mt6" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVA2X05GX0lQVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfT1BUUyYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUiYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfU1JIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGJoX210NiYjMzQ7LAogICAgJiMzNDtpcHY2aGVhZGVyX210NiYjMzQ7LAogICAgJiMzNDtzcmhfbXQ2JiMzNDssCiAgICAmIzM0O3NyaDFfbXQ2JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZWApIHJhdGhlciB0aGFuIGp1c3QgcmV0dXJuaW5nIGZhbHNlIG9yIHByb2NlZWRpbmcgd2l0aCBwYXJzaW5nLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cblxuQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgcGFja2V0IHBhcnNpbmcgYnVncyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIHJlYWRzKSBhcmUgYWRlcXVhdGVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY2IG5ldGZpbHRlciBtYXRjaCBleHRlbnNpb25zIChoYmgsIGlwdjZoZWFkZXIsIHNyaCkgdG8gcHJvcGVybHkgZHJvcCBwYWNrZXRzIHdpdGggbWFsZm9ybWVkIGV4dGVuc2lvbiBoZWFkZXJzIGJ5IHNldHRpbmcgYHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZWAgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyBmYWxzZSAod2hpY2ggd291bGQgYWxsb3cgdGhlIHBhY2tldCB0byBjb250aW51ZSB0cmF2ZXJzYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JrIGZpbHRlcmluZyBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IG1hbGZvcm1lZCBwYWNrZXRzIGFyZSBoYW5kbGVkLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTA1ZjFiOGVjYzIyMDFlYWE1NWUxNDhjZmExYTRiNjg4M2MwM2QwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuaW5kZXggNmQxYTVkMjAyNmE2Ny4uOWYwNGI0ZDhmMTZmZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuQEAgLTYyLDIxICYjNDM7NjIsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0ICAgIE5FWFRIRFJfSE9QIDogTkVYVEhEUl9ERVNULCBOVUxMLCBOVUxMKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuLVx0XHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksIFx1MDAyNl9vcHRzaCk7XG4tXHRpZiAob2ggPT0gTlVMTCkge1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbiYjNDM7XHRpZiAoIW9oKVxuJiM0MztcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aGRybGVuID0gaXB2Nl9vcHRsZW4ob2gpO1xuIFx0aWYgKHNrYi1cdTAwM2VsZW4gLSBwdHIgXHUwMDNjIGhkcmxlbikge1xuLVx0XHQvKiBQYWNrZXQgc21hbGxlciB0aGFuIGl0JiMzOTtzIGxlbmd0aCBmaWVsZCAqL1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdC8qIFBhY2tldCBzbWFsbGVyIHRoYW4gaXRzIGxlbmd0aCBmaWVsZCAqL1xuJiM0MztcdFx0Z290byBob3Rkcm9wO1xuIFx0fVxuIFxuIFx0cHJfZGVidWcoXCYjMzQ7SVB2NiBPUFRTIExFTiAldSAldSBcJiMzNDssIGhkcmxlbiwgb2gtXHUwMDNlaGRybGVuKTtcbkBAIC0xMDQsOCAmIzQzOzEwMSw4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0dHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0dHlwZSksXG4gXHRcdFx0XHRcdFx0XHUwMDI2X29wdHR5cGUpO1xuLVx0XHRcdGlmICh0cCA9PSBOVUxMKVxuLVx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGlmICghdHApXG4mIzQzO1x0XHRcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0XHRcdC8qIFR5cGUgY2hlY2sgKi9cbiBcdFx0XHRpZiAoKnRwICE9IChvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4RkYwMCkgXHUwMDNlXHUwMDNlIDgpIHtcbkBAIC0xMjEsMTIgJiM0MzsxMTgsMTIgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXG4gXHRcdFx0XHQvKiBsZW5ndGggZmllbGQgZXhpc3RzID8gKi9cbiBcdFx0XHRcdGlmIChoZHJsZW4gXHUwMDNjIDIpXG4tXHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRcdFx0bHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIgJiM0MzsgMSxcbiBcdFx0XHRcdFx0XHRcdHNpemVvZihfb3B0bGVuKSxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNl9vcHRsZW4pO1xuLVx0XHRcdFx0aWYgKGxwID09IE5VTEwpXG4tXHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdGlmICghbHApXG4mIzQzO1x0XHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdFx0XHRzcGVjX2xlbiA9IG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHgwMEZGO1xuIFxuIFx0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKSB7XG5AQCAtMTQ0LDEwICYjNDM7MTQxLDEwIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdC8qIFN0ZXAgdG8gdGhlIG5leHQgKi9cbiBcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtsZW4lMDRYXFxuXCYjMzQ7LCBvcHRsZW4pO1xuIFxuLVx0XHRcdGlmICgocHRyIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gb3B0bGVuIHx8IGhkcmxlbiBcdTAwM2Mgb3B0bGVuKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnIgLSAxKSB7XG4mIzQzO1x0XHRcdGlmIChwdHIgXHUwMDNlIHNrYi1cdTAwM2VsZW4gfHwgb3B0bGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gcHRyIHx8XG4mIzQzO1x0XHRcdCAgICBoZHJsZW4gXHUwMDNjIG9wdGxlbikge1xuIFx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7bmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwmIzM0Oyk7XG4tXHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdFx0fVxuIFx0XHRcdHB0ciAmIzQzOz0gb3B0bGVuO1xuIFx0XHRcdGhkcmxlbiAtPSBvcHRsZW47XG5AQCAtMTU5LDYgJiM0MzsxNTYsMTAgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHR9XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0Mztob3Rkcm9wOlxuJiM0MztcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcbmluZGV4IGM1MmZmOTI5YzkzYjMuLmFlZjhmNjlkYTdmYjUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuY1xuQEAgLTI4LDcgJiM0MzsyOCw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8gKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuIFx0dW5zaWduZWQgaW50IHRlbXA7XG4tXHRpbnQgbGVuO1xuIFx0dTggbmV4dGhkcjtcbiBcdHVuc2lnbmVkIGludCBwdHI7XG4gXG5AQCAtMzgsOCAmIzQzOzM3LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0bmV4dGhkciA9IGlwdjZfaGRyKHNrYiktXHUwMDNlbmV4dGhkcjtcbiBcdC8qIHBvaW50ZXIgdG8gdGhlIDFzdCBleHRoZHIgKi9cbiBcdHB0ciA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4tXHQvKiBhdmFpbGFibGUgbGVuZ3RoICovXG4tXHRsZW4gPSBza2ItXHUwMDNlbGVuIC0gcHRyO1xuIFx0dGVtcCA9IDA7XG4gXG4gXHR3aGlsZSAobmZfaXA2X2V4dF9oZHIobmV4dGhkcikpIHtcbkBAIC01Miw5ICYjNDM7NDksNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0dGVtcCB8PSBNQVNLX05PTkU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0LyogSXMgdGhlcmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgbmV4dCBleHQgaGVhZGVyPyAqL1xuLVx0XHRpZiAobGVuIFx1MDAzYyAoaW50KXNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdC8qIEVTUCAtXHUwMDNlIGV2YWx1YXRlICovXG4gXHRcdGlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKSB7XG4gXHRcdFx0dGVtcCB8PSBNQVNLX0VTUDtcbkBAIC05Nyw3ICYjNDM7OTEsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdH1cbiBcbiBcdFx0bmV4dGhkciA9IGhwLVx1MDAzZW5leHRoZHI7XG4tXHRcdGxlbiAtPSBoZHJsZW47XG4gXHRcdHB0ciAmIzQzOz0gaGRybGVuO1xuIFx0XHRpZiAocHRyIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuIFx0XHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmNcbmluZGV4IGRiMGZkNjRkODk4NjIuLjZmY2M0MDEwMmZlM2QgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmNcbkBAIC0yNywyMiAmIzQzOzI3LDI3IEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgX3NyaDtcbiBcdGludCBoZHJsZW4sIHNyaG9mZiA9IDA7XG4mIzQzO1x0aW50IGVycjtcbiBcbi1cdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuJiM0MztcdGVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuJiM0MztcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXHRzcmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzcmhvZmYsIHNpemVvZihfc3JoKSwgXHUwMDI2X3NyaCk7XG4gXHRpZiAoIXNyaClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aGRybGVuID0gaXB2Nl9vcHRsZW4oc3JoKTtcbiBcdGlmIChza2ItXHUwMDNlbGVuIC0gc3Job2ZmIFx1MDAzYyBoZHJsZW4pXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGlmIChzcmgtXHUwMDNldHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0IFx1MDAzZSBzcmgtXHUwMDNlZmlyc3Rfc2VnbWVudClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0LyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi9cbiBcdGlmIChzcmhpbmZvLVx1MDAzZW10X2ZsYWdzIFx1MDAyNiBJUDZUX1NSSF9ORVhUSERSKVxuQEAgLTExMSw2ICYjNDM7MTE2LDEwIEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdFx0IShzcmgtXHUwMDNldGFnID09IHNyaGluZm8tXHUwMDNldGFnKSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0Mztob3Rkcm9wOlxuJiM0MztcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC0xMjEsMjIgJiM0MzsxMzAsMzEgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0c3RydWN0IGluNl9hZGRyIF9wc2lkLCBfbnNpZCwgX2xzaWQ7XG4gXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcbiBcdHN0cnVjdCBpcHY2X3NyX2hkciBfc3JoO1xuJiM0MztcdGludCBlcnI7XG4gXG4tXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbiYjNDM7XHRlcnIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbiYjNDM7XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFx0c3JoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3Job2ZmLCBzaXplb2YoX3NyaCksIFx1MDAyNl9zcmgpO1xuIFx0aWYgKCFzcmgpXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7XG4gXHRpZiAoc2tiLVx1MDAzZWxlbiAtIHNyaG9mZiBcdTAwM2MgaGRybGVuKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRnb3RvIGhvdGRyb3A7XG4gXG4gXHRpZiAoc3JoLVx1MDAzZXR5cGUgIT0gSVBWNl9TUkNSVF9UWVBFXzQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHRpZiAoc2l6ZW9mKCpzcmgpICYjNDM7XG4mIzQzO1x0ICAgICgoc3JoLVx1MDAzZWZpcnN0X3NlZ21lbnQgJiM0MzsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgXHUwMDNlIGhkcmxlbilcbiYjNDM7XHRcdGdvdG8gaG90ZHJvcDtcbiYjNDM7XG4gXHRpZiAoc3JoLVx1MDAzZXNlZ21lbnRzX2xlZnQgXHUwMDNlIHNyaC1cdTAwM2VmaXJzdF9zZWdtZW50KVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRnb3RvIGhvdGRyb3A7XG4gXG4gXHQvKiBOZXh0IEhlYWRlciBtYXRjaGluZyAqL1xuIFx0aWYgKHNyaGluZm8tXHUwMDNlbXRfZmxhZ3MgXHUwMDI2IElQNlRfU1JIX05FWFRIRFIpXG5AQCAtMjA3LDcgJiM0MzsyMjUsNyBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0ICAoKHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0ICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuIFx0XHRwc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHNpZG9mZiwgc2l6ZW9mKF9wc2lkKSwgXHUwMDI2X3BzaWQpO1xuIFx0XHRpZiAoIXBzaWQpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdGlmIChORl9TUkhfSU5WRihzcmhpbmZvLCBJUDZUX1NSSF9JTlZfUFNJRCxcbiBcdFx0XHRcdGlwdjZfbWFza2VkX2FkZHJfY21wKHBzaWQsIFx1MDAyNnNyaGluZm8tXHUwMDNlcHNpZF9tc2ssXG4gXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZzcmhpbmZvLVx1MDAzZXBzaWRfYWRkcikpKVxuQEAgLTIyMiw3ICYjNDM7MjQwLDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdCAgKChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCAtIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuIFx0XHRuc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbnNpZG9mZiwgc2l6ZW9mKF9uc2lkKSwgXHUwMDI2X25zaWQpO1xuIFx0XHRpZiAoIW5zaWQpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdGlmIChORl9TUkhfSU5WRihzcmhpbmZvLCBJUDZUX1NSSF9JTlZfTlNJRCxcbiBcdFx0XHRcdGlwdjZfbWFza2VkX2FkZHJfY21wKG5zaWQsIFx1MDAyNnNyaGluZm8tXHUwMDNlbnNpZF9tc2ssXG4gXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZzcmhpbmZvLVx1MDAzZW5zaWRfYWRkcikpKVxuQEAgLTIzNCwxMyAmIzQzOzI1MiwxNyBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdGxzaWRvZmYgPSBzcmhvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2X3NyX2hkcik7XG4gXHRcdGxzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsc2lkb2ZmLCBzaXplb2YoX2xzaWQpLCBcdTAwMjZfbHNpZCk7XG4gXHRcdGlmICghbHNpZClcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRcdGdvdG8gaG90ZHJvcDtcbiBcdFx0aWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9MU0lELFxuIFx0XHRcdFx0aXB2Nl9tYXNrZWRfYWRkcl9jbXAobHNpZCwgXHUwMDI2c3JoaW5mby1cdTAwM2Vsc2lkX21zayxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnNyaGluZm8tXHUwMDNlbHNpZF9hZGRyKSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0Mztob3Rkcm9wOlxuJiM0MztcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc3JoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUDZfTkZfSVBUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O0lQNl9ORl9NQVRDSF9PUFRTJiMzNDssCiAgICAmIzM0O0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSJiMzNDssCiAgICAmIzM0O0lQNl9ORl9NQVRDSF9TUkgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYmhfbXQ2JiMzNDssCiAgICAmIzM0O2lwdjZoZWFkZXJfbXQ2JiMzNDssCiAgICAmIzM0O3NyaF9tdDYmIzM0OywKICAgICYjMzQ7c3JoMV9tdDYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbWF0Y2ggZXh0ZW5zaW9ucyAoaGJoLCBpcHY2aGVhZGVyLCBzcmgpIHRvIHByb3Blcmx5IGRyb3AgcGFja2V0cyB3aXRoIG1hbGZvcm1lZCBleHRlbnNpb24gaGVhZGVycyBieSBzZXR0aW5nIGBwYXItXHUwMDNlaG90ZHJvcCA9IHRydWVgIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UgKHdoaWNoIHdvdWxkIGFsbG93IHRoZSBwYWNrZXQgdG8gY29udGludWUgdHJhdmVyc2FsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBmaWx0ZXJpbmcgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBtYWxmb3JtZWQgcGFja2V0cyBhcmUgaGFuZGxlZCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDEwNWYxYjhlY2MyMjAxZWFhNTVlMTQ4Y2ZhMWE0YjY4ODNjMDNkMGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEwOjI4OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYwppbmRleCA2ZDFhNWQyMDI2YTY3Li45ZjA0YjRkOGYxNmZmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYwpAQCAtNjIsMjEgJiM0Mzs2MiwxOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCSAgICBORVhUSERSX0hPUCA6IE5FWFRIRFJfREVTVCwgTlVMTCwgTlVMTCk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJaWYgKGVyciAhPSAtRU5PRU5UKQotCQkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKJiM0MzsJCQlnb3RvIGhvdGRyb3A7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksICZhbXA7X29wdHNoKTsKLQlpZiAob2ggPT0gTlVMTCkgewotCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQomIzQzOwlpZiAoIW9oKQomIzQzOwkJZ290byBob3Rkcm9wOwogCiAJaGRybGVuID0gaXB2Nl9vcHRsZW4ob2gpOwogCWlmIChza2ItJmd0O2xlbiAtIHB0ciAmbHQ7IGhkcmxlbikgewotCQkvKiBQYWNrZXQgc21hbGxlciB0aGFuIGl0JiMzOTtzIGxlbmd0aCBmaWVsZCAqLwotCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkvKiBQYWNrZXQgc21hbGxlciB0aGFuIGl0cyBsZW5ndGggZmllbGQgKi8KJiM0MzsJCWdvdG8gaG90ZHJvcDsKIAl9CiAKIAlwcl9kZWJ1ZygmIzM0O0lQdjYgT1BUUyBMRU4gJXUgJXUgJiMzNDssIGhkcmxlbiwgb2gtJmd0O2hkcmxlbik7CkBAIC0xMDQsOCAmIzQzOzEwMSw4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJCWJyZWFrOwogCQkJdHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0dHlwZSksCiAJCQkJCQkmYW1wO19vcHR0eXBlKTsKLQkJCWlmICh0cCA9PSBOVUxMKQotCQkJCWJyZWFrOwomIzQzOwkJCWlmICghdHApCiYjNDM7CQkJCWdvdG8gaG90ZHJvcDsKIAogCQkJLyogVHlwZSBjaGVjayAqLwogCQkJaWYgKCp0cCAhPSAob3B0aW5mby0mZ3Q7b3B0c1t0ZW1wXSAmYW1wOyAweEZGMDApICZndDsmZ3Q7IDgpIHsKQEAgLTEyMSwxMiAmIzQzOzExOCwxMiBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAogCQkJCS8qIGxlbmd0aCBmaWVsZCBleGlzdHMgPyAqLwogCQkJCWlmIChoZHJsZW4gJmx0OyAyKQotCQkJCQlicmVhazsKJiM0MzsJCQkJCWdvdG8gaG90ZHJvcDsKIAkJCQlscCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciAmIzQzOyAxLAogCQkJCQkJCXNpemVvZihfb3B0bGVuKSwKIAkJCQkJCQkmYW1wO19vcHRsZW4pOwotCQkJCWlmIChscCA9PSBOVUxMKQotCQkJCQlicmVhazsKJiM0MzsJCQkJaWYgKCFscCkKJiM0MzsJCQkJCWdvdG8gaG90ZHJvcDsKIAkJCQlzcGVjX2xlbiA9IG9wdGluZm8tJmd0O29wdHNbdGVtcF0gJmFtcDsgMHgwMEZGOwogCiAJCQkJaWYgKHNwZWNfbGVuICE9IDB4MDBGRiAmYW1wOyZhbXA7IHNwZWNfbGVuICE9ICpscCkgewpAQCAtMTQ0LDEwICYjNDM7MTQxLDEwIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJLyogU3RlcCB0byB0aGUgbmV4dCAqLwogCQkJcHJfZGVidWcoJiMzNDtsZW4lMDRYXG4mIzM0Oywgb3B0bGVuKTsKIAotCQkJaWYgKChwdHIgJmd0OyBza2ItJmd0O2xlbiAtIG9wdGxlbiB8fCBoZHJsZW4gJmx0OyBvcHRsZW4pICZhbXA7JmFtcDsKLQkJCSAgICB0ZW1wICZsdDsgb3B0aW5mby0mZ3Q7b3B0c25yIC0gMSkgewomIzQzOwkJCWlmIChwdHIgJmd0OyBza2ItJmd0O2xlbiB8fCBvcHRsZW4gJmd0OyBza2ItJmd0O2xlbiAtIHB0ciB8fAomIzQzOwkJCSAgICBoZHJsZW4gJmx0OyBvcHRsZW4pIHsKIAkJCQlwcl9kZWJ1ZygmIzM0O25ldyBwb2ludGVyIGlzIHRvbyBsYXJnZSFcbiYjMzQ7KTsKLQkJCQlicmVhazsKJiM0MzsJCQkJZ290byBob3Rkcm9wOwogCQkJfQogCQkJcHRyICYjNDM7PSBvcHRsZW47CiAJCQloZHJsZW4gLT0gb3B0bGVuOwpAQCAtMTU5LDYgJiM0MzsxNTYsMTAgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJfQogCiAJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzO2hvdGRyb3A6CiYjNDM7CXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGludCBoYmhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jCmluZGV4IGM1MmZmOTI5YzkzYjMuLmFlZjhmNjlkYTdmYjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMKQEAgLTI4LDcgJiM0MzsyOCw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIHsKIAljb25zdCBzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8gKmluZm8gPSBwYXItJmd0O21hdGNoaW5mbzsKIAl1bnNpZ25lZCBpbnQgdGVtcDsKLQlpbnQgbGVuOwogCXU4IG5leHRoZHI7CiAJdW5zaWduZWQgaW50IHB0cjsKIApAQCAtMzgsOCAmIzQzOzM3LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCW5leHRoZHIgPSBpcHY2X2hkcihza2IpLSZndDtuZXh0aGRyOwogCS8qIHBvaW50ZXIgdG8gdGhlIDFzdCBleHRoZHIgKi8KIAlwdHIgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwotCS8qIGF2YWlsYWJsZSBsZW5ndGggKi8KLQlsZW4gPSBza2ItJmd0O2xlbiAtIHB0cjsKIAl0ZW1wID0gMDsKIAogCXdoaWxlIChuZl9pcDZfZXh0X2hkcihuZXh0aGRyKSkgewpAQCAtNTIsOSAmIzQzOzQ5LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJdGVtcCB8PSBNQVNLX05PTkU7CiAJCQlicmVhazsKIAkJfQotCQkvKiBJcyB0aGVyZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXh0IGV4dCBoZWFkZXI/ICovCi0JCWlmIChsZW4gJmx0OyAoaW50KXNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSkKLQkJCXJldHVybiBmYWxzZTsKIAkJLyogRVNQIC0mZ3Q7IGV2YWx1YXRlICovCiAJCWlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKSB7CiAJCQl0ZW1wIHw9IE1BU0tfRVNQOwpAQCAtOTcsNyAmIzQzOzkxLDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQl9CiAKIAkJbmV4dGhkciA9IGhwLSZndDtuZXh0aGRyOwotCQlsZW4gLT0gaGRybGVuOwogCQlwdHIgJiM0Mzs9IGhkcmxlbjsKIAkJaWYgKHB0ciAmZ3Q7IHNrYi0mZ3Q7bGVuKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jCmluZGV4IGRiMGZkNjRkODk4NjIuLjZmY2M0MDEwMmZlM2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jCkBAIC0yNywyMiAmIzQzOzI3LDI3IEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCXN0cnVjdCBpcHY2X3NyX2hkciAqc3JoOwogCXN0cnVjdCBpcHY2X3NyX2hkciBfc3JoOwogCWludCBoZHJsZW4sIHNyaG9mZiA9IDA7CiYjNDM7CWludCBlcnI7CiAKLQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpICZsdDsgMCkKJiM0MzsJZXJyID0gaXB2Nl9maW5kX2hkcihza2IsICZhbXA7c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJaWYgKGVyciAhPSAtRU5PRU5UKQomIzQzOwkJCWdvdG8gaG90ZHJvcDsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAJc3JoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3Job2ZmLCBzaXplb2YoX3NyaCksICZhbXA7X3NyaCk7CiAJaWYgKCFzcmgpCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCWdvdG8gaG90ZHJvcDsKIAogCWhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7CiAJaWYgKHNrYi0mZ3Q7bGVuIC0gc3Job2ZmICZsdDsgaGRybGVuKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAKIAlpZiAoc3JoLSZndDt0eXBlICE9IElQVjZfU1JDUlRfVFlQRV80KQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoc3JoLSZndDtzZWdtZW50c19sZWZ0ICZndDsgc3JoLSZndDtmaXJzdF9zZWdtZW50KQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAKIAkvKiBOZXh0IEhlYWRlciBtYXRjaGluZyAqLwogCWlmIChzcmhpbmZvLSZndDttdF9mbGFncyAmYW1wOyBJUDZUX1NSSF9ORVhUSERSKQpAQCAtMTExLDYgJiM0MzsxMTYsMTAgQEAgc3RhdGljIGJvb2wgc3JoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCQkJIShzcmgtJmd0O3RhZyA9PSBzcmhpbmZvLSZndDt0YWcpKSkKIAkJCXJldHVybiBmYWxzZTsKIAlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0Mztob3Rkcm9wOgomIzQzOwlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKQEAgLTEyMSwyMiAmIzQzOzEzMCwzMSBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJc3RydWN0IGluNl9hZGRyIF9wc2lkLCBfbnNpZCwgX2xzaWQ7CiAJc3RydWN0IGlwdjZfc3JfaGRyICpzcmg7CiAJc3RydWN0IGlwdjZfc3JfaGRyIF9zcmg7CiYjNDM7CWludCBlcnI7CiAKLQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpICZsdDsgMCkKJiM0MzsJZXJyID0gaXB2Nl9maW5kX2hkcihza2IsICZhbXA7c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJaWYgKGVyciAhPSAtRU5PRU5UKQomIzQzOwkJCWdvdG8gaG90ZHJvcDsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAJc3JoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3Job2ZmLCBzaXplb2YoX3NyaCksICZhbXA7X3NyaCk7CiAJaWYgKCFzcmgpCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCWdvdG8gaG90ZHJvcDsKIAogCWhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7CiAJaWYgKHNrYi0mZ3Q7bGVuIC0gc3Job2ZmICZsdDsgaGRybGVuKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAKIAlpZiAoc3JoLSZndDt0eXBlICE9IElQVjZfU1JDUlRfVFlQRV80KQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJaWYgKHNpemVvZigqc3JoKSAmIzQzOwomIzQzOwkgICAgKChzcmgtJmd0O2ZpcnN0X3NlZ21lbnQgJiM0MzsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgJmd0OyBoZHJsZW4pCiYjNDM7CQlnb3RvIGhvdGRyb3A7CiYjNDM7CiAJaWYgKHNyaC0mZ3Q7c2VnbWVudHNfbGVmdCAmZ3Q7IHNyaC0mZ3Q7Zmlyc3Rfc2VnbWVudCkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJZ290byBob3Rkcm9wOwogCiAJLyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi8KIAlpZiAoc3JoaW5mby0mZ3Q7bXRfZmxhZ3MgJmFtcDsgSVA2VF9TUkhfTkVYVEhEUikKQEAgLTIwNyw3ICYjNDM7MjI1LDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJICAoKHNyaC0mZ3Q7c2VnbWVudHNfbGVmdCAmIzQzOyAxKSAqIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAkJcHNpZCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHBzaWRvZmYsIHNpemVvZihfcHNpZCksICZhbXA7X3BzaWQpOwogCQlpZiAoIXBzaWQpCi0JCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJZ290byBob3Rkcm9wOwogCQlpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX1BTSUQsCiAJCQkJaXB2Nl9tYXNrZWRfYWRkcl9jbXAocHNpZCwgJmFtcDtzcmhpbmZvLSZndDtwc2lkX21zaywKIAkJCQkJCSAgICAgJmFtcDtzcmhpbmZvLSZndDtwc2lkX2FkZHIpKSkKQEAgLTIyMiw3ICYjNDM7MjQwLDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJICAoKHNyaC0mZ3Q7c2VnbWVudHNfbGVmdCAtIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwogCQluc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbnNpZG9mZiwgc2l6ZW9mKF9uc2lkKSwgJmFtcDtfbnNpZCk7CiAJCWlmICghbnNpZCkKLQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQlnb3RvIGhvdGRyb3A7CiAJCWlmIChORl9TUkhfSU5WRihzcmhpbmZvLCBJUDZUX1NSSF9JTlZfTlNJRCwKIAkJCQlpcHY2X21hc2tlZF9hZGRyX2NtcChuc2lkLCAmYW1wO3NyaGluZm8tJmd0O25zaWRfbXNrLAogCQkJCQkJICAgICAmYW1wO3NyaGluZm8tJmd0O25zaWRfYWRkcikpKQpAQCAtMjM0LDEzICYjNDM7MjUyLDE3IEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJbHNpZG9mZiA9IHNyaG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZfc3JfaGRyKTsKIAkJbHNpZCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGxzaWRvZmYsIHNpemVvZihfbHNpZCksICZhbXA7X2xzaWQpOwogCQlpZiAoIWxzaWQpCi0JCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJZ290byBob3Rkcm9wOwogCQlpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX0xTSUQsCiAJCQkJaXB2Nl9tYXNrZWRfYWRkcl9jbXAobHNpZCwgJmFtcDtzcmhpbmZvLSZndDtsc2lkX21zaywKIAkJCQkJCSAgICAgJmFtcDtzcmhpbmZvLSZndDtsc2lkX2FkZHIpKSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7aG90ZHJvcDoKJiM0MzsJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgaW50IHNyaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBgbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNgLCBgbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jYCwgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHJlcGxhY2luZyBgcmV0dXJuIGZhbHNlO2Agd2l0aCBhIGBnb3RvIGhvdGRyb3A7YCBjb25zdHJ1Y3QuIEVzc2VudGlhbGx5LCBpdCBzZXRzIGBwYXItJmd0O2hvdGRyb3AgPSB0cnVlO2AgYmVmb3JlIHJldHVybmluZyBgZmFsc2U7YCBpbiB0aGVzZSBmdW5jdGlvbnMuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0byBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVyIG1hdGNoaW5nLgoKTm93LCB3YWl0IGEgbWludXRlLCBpbiBgaXA2dF9pcHY2aGVhZGVyLmNgLCBJIHNlZSBhIHNpZ25pZmljYW50IGNoYW5nZTogdGhleSYjMzk7dmUgcmVtb3ZlZCB0aGUgYGxlbmAgdmFyaWFibGUgYW5kIGl0cyBib3VuZHMgY2hlY2tzLCBvcHRpbmcgdG8gdXNlIGBwdHIgJmd0OyBza2ItJmd0O2xlbmAgaW5zdGVhZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0Li4uCgpgYGBjCi0JCS8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi8KLQkJaWYgKGxlbiAmbHQ7IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKQotCQkJcmV0dXJuIGZhbHNlOwpgYGAKCkFoLCBpdCYjMzk7cyByZW1vdmVkIHRoaXMuIElzIHRoaXMgc2FmZT8gTGV0IG1lIHNlZS4uLiB5ZXMsIGBza2JfaGVhZGVyX3BvaW50ZXJgIGhhbmRsZXMgdGhlIGJvdW5kcyBjaGVja2luZy4gQW5kIGxvb2tpbmcgYXQgdGhlIGNvZGUgYGlwdjZoZWFkZXJfbXQ2YCB1c2VzIGBocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9oZHIpLCAmYW1wO19oZHIpO2Agd2hpY2ggZG9lcyBpbmRlZWQgaGF2ZSBib3VuZHMgY2hlY2tpbmcuCgpSaWdodCwgc28gdGhlIGludGVudCBoZXJlIGlzIG5vdCBqdXN0IGEgc3RhbmRhcmQgbWF0Y2gtb3Itbm90IG1hdGNoLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgKmRyb3BwaW5nKiBwYWNrZXRzIHdoZW4gdGhlIGhlYWRlcnMgYXJlIG1hbGZvcm1lZCwgaGVuY2UgYGhvdGRyb3BgLiBJbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGBmYWxzZWAgKG1lYW5pbmcgdGhlIHJ1bGUgZG9lc24mIzM5O3QgbWF0Y2ggYW5kIHRoZSBwYWNrZXQgY29udGludWVzIGl0cyBwYXRoKSwgc2V0dGluZyBgcGFyLSZndDtob3Rkcm9wID0gdHJ1ZWAgdGVsbHMgbmV0ZmlsdGVyIHRvIGltbWVkaWF0ZWx5IGRyb3AgdGhlIHBhY2tldCwgYmVjYXVzZSBpdCYjMzk7cyBkZWVtZWQgdG8gYmUgbWFsZm9ybWVkLiBUaGF0IG1ha2VzIHNlbnNlLgoKTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQ6IGBoYmhfbXQ2YCwgYGlwdjZoZWFkZXJfbXQ2YCwgYHNyaF9tdDZgLCBhbmQgYHNyaDFfbXQ2YC4gWWVwLCB0aGVzZSBhcmUgYWxsIHRoZSBtYXRjaCBmdW5jdGlvbnMgZm9yIHRoZSBpcDZ0YWJsZXMvaXA2dCBtb2R1bGVzLiBBbmQgdGhvc2UgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggbmV0ZmlsdGVyIHJ1bGVzLiBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkOiBgSVA2X05GX01BVENIX0hCSGAsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuIExldCYjMzk7cyBjb25maXJtIHRob3NlIGFyZSBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQNl9ORl9NQVRDSF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz05Mz1pZiBJUDZfTkZfSVBUQUJMRVNcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05NS0jIFRoZSBzaW1wbGUgbWF0Y2hlcy5cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjk2OmNvbmZpZyBJUDZfTkZfTUFUQ0hfQUhcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTk3LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDthaFwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMDMtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMDQ6Y29uZmlnIElQNl9ORl9NQVRDSF9FVUk2NFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTA1LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtldWk2NFwmIzM0OyBhZGRyZXNzIGNoZWNrJiMzOTtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIElQNl9ORl9NQVRDSF9GUkFHXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O2ZyYWdcJiMzNDsgRnJhZ21lbnRhdGlvbiBoZWFkZXIgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBJUDZfTkZfTUFUQ0hfT1BUU1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtoYmhcJiMzNDsgaG9wLWJ5LWhvcCBhbmQgXCYjMzQ7ZHN0XCYjMzQ7IG9wdHMgaGVhZGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTEzMS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEzMjpjb25maWcgSVA2X05GX01BVENIX0hMXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O2hsXCYjMzQ7IGhvcGxpbWl0IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE0MC1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjE0MTpjb25maWcgSVA2X05GX01BVENIX0lQVjZIRUFERVJcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7aXB2NmhlYWRlclwmIzM0OyBJUHY2IEV4dGVuc2lvbiBIZWFkZXJzIE1hdGNoJiMzOTtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxNTA6Y29uZmlnIElQNl9ORl9NQVRDSF9NSFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTUxLVx0dHJpc3RhdGUgJiMzOTtcJiMzNDttaFwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNTctXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxNTg6Y29uZmlnIElQNl9ORl9NQVRDSF9SUEZJTFRFUlxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTU5LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtycGZpbHRlclwmIzM0OyByZXZlcnNlIHBhdGggZmlsdGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE2OC1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjE2OTpjb25maWcgSVA2X05GX01BVENIX1JUXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNzAtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O3J0XCYjMzQ7IFJvdXRpbmcgaGVhZGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE3Ny1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjE3ODpjb25maWcgSVA2X05GX01BVENIX1NSSFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTc5LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtzcmhcJiMzNDsgU2VnbWVudCBSb3V0aW5nIGhlYWRlciBtYXRjaCBzdXBwb3J0JiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODY1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczoKCioqRXhhbWluaW5nIElQdjYgTmV0ZmlsdGVyIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIE5ldGZpbHRlciBjb25maWd1cmF0aW9ucyDigJMgYElQNl9ORl9NQVRDSF9PUFRTYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3NvY2lhdGUgYElQNl9ORl9NQVRDSF9PUFRTYCB3aXRoIGhhbmRsaW5nIEhvcC1ieS1Ib3AgKGhiaCkgb3B0aW9ucywgYW5kIHBvc3NpYmx5IERlc3RpbmF0aW9uIE9wdGlvbnMgKGBkc3RgIG9wdHMpIHRvby4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBkZXRhaWxzIGNhbiBiZSB0cmlja3kgYW5kIGEgcXVpY2sgcmVmcmVzaGVyIGlzIGFsd2F5cyBhIGdvb2QgaWRlYS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuCgpUaGVyZWZvcmUsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGVgIGZpbGUuIEl0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBzZXR0bGUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2dF9oYmgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlPTM2PW9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfTUgpICYjNDM7PSBpcDZ0X21oLm9cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfSVA2X05GX01BVENIX09QVFMpICYjNDM7PSBpcDZ0X2hiaC5vXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SUEZJTFRFUikgJiM0Mzs9IGlwNnRfcnBmaWx0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIE5ldGZpbHRlciBkZWZpbmVzIGZvciBJUHY2IG1hdGNoaW5nLiBSaWdodCwgKipOZXR3b3JrIEZpbHRlciBhbmQgSVB2NiBIZWFkZXIgTWF0Y2hlcyoqLiBJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBgSVA2X05GX01BVENIX09QVFNgIGFuZCBgSVA2X05GX01BVENIX0lQVjZIRUFERVJgIGZvciB0aGUgYGlwNnRfaXB2NmhlYWRlci5vYCBtb2R1bGUuIEFuZCwgSSByZWNhbGwgbm93LCBmb3IgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgbW9kdWxlLCBJJiMzOTtsbCBuZWVkIGBJUDZfTkZfTUFUQ0hfU1JIYCBmb3IgYGlwNnRfc3JoLm9gLgoKTm93LCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZWAuIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIGFuZCB2ZXJpZnkgdGhhdCBJIGhhdmUgaWRlbnRpZmllZCBhbGwgcmVsZXZhbnQgZGVmaW5lcyBmb3IgdGhlIHRhc2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2dF9pcHY2aGVhZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfSVA2X05GX01BVENIX0ZSQUcpICYjNDM7PSBpcDZ0X2ZyYWcub1xubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUikgJiM0Mzs9IGlwNnRfaXB2NmhlYWRlci5vXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9NSCkgJiM0Mzs9IGlwNnRfbWgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZ0X3NyaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzk9b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SVCkgJiM0Mzs9IGlwNnRfcnQub1xubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfU1JIKSAmIzQzOz0gaXA2dF9zcmgub1xubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTQxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODU1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKk5ldHdvcmsgRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24gQ29uY2VybnMqKgoKUmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYElQNl9ORl9NQVRDSF9PUFRTYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi5zb21ldGhpbmcgZmVlbHMgb2ZmLiBXaGF0IGFib3V0IGBJUDZfTkZfSVBUQUJMRVNgPyBJdCBoYXMgdG8gYmUgYSBkZXBlbmRlbmN5IGZvciB0aGVzZSBvdGhlciBtYXRjaCBvcHRpb25zLCBkb2VzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSVA2X05GX01BVENIX09QVFNgIHRoZXJlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBJIGNvbnRpbnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVA2X05GX01BVENIX09QVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0xMTQ9Y29uZmlnIElQNl9ORl9NQVRDSF9GUkFHXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBJUDZfTkZfTUFUQ0hfT1BUU1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtoYmhcJiMzNDsgaG9wLWJ5LWhvcCBhbmQgXCYjMzQ7ZHN0XCYjMzQ7IG9wdHMgaGVhZGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGFsd2F5cyBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSB3ZWIgb2YgaW50ZXJjb25uZWN0aW9ucyBhdCBwbGF5IGhlcmUuIEZvcmdldCB0aGUgc3VyZmFjZSBsZXZlbCBmb3IgYSBtb21lbnQ7IEkgbmVlZCB0byBkaWcgZGVlcC4gSSB3YW50IHRvIGlkZW50aWZ5ICpldmVyeSogZGVwZW5kZW5jeSwgYm90aCBleHBsaWNpdCBhbmQgaW1wbGljaXQuIFRoYXQgbWVhbnMgY29uc2lkZXJpbmcgbm90IGp1c3QgdGhlIGRpcmVjdCBsaW5rcywgdGhlIG9idmlvdXMgcmVsYXRpb25zaGlwcywgYnV0IGFsc28gdGhlIGNhc2NhZGluZyBlZmZlY3RzLCB0aGUgcG90ZW50aWFsIHNpZGUtY2hhbm5lbCBpbmZsdWVuY2VzLCBhbmQgYW55IGFzc3VtcHRpb25zIHRoYXQgbWF5IGJlIGJha2VkIGluLiBBcmUgdGhlc2UgZGVwZW5kZW5jaWVzIHdlbGwtZG9jdW1lbnRlZD8gQXJlIHRoZXkgdmVyc2lvbi1sb2NrZWQgYXBwcm9wcmlhdGVseT8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBwb2ludHMgb2YgZmFpbHVyZSwgYW5kIHdoYXQgYXJlIHRoZSBtaXRpZ2F0aW9ucyBpbiBwbGFjZSwgb3IgKm5vdCogaW4gcGxhY2U/IFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgZHJhd2luZyBhIHByZXR0eSBkZXBlbmRlbmN5IGdyYXBoOyBpdCYjMzk7cyBhYm91dCBhbnRpY2lwYXRpbmcgdGhlIGJyZWFraW5nIHBvaW50cywgdGhlIHZ1bG5lcmFiaWxpdGllcywgdGhlIGFyZWFzIHdoZXJlIGEgc2VlbWluZ2x5IG1pbm9yIGNoYW5nZSBjb3VsZCB0cmlnZ2VyIGEgY2F0YXN0cm9waGljIGNhc2NhZGUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHdlYWtlc3QgbGlua3MsIHRoZSBjb21wb25lbnRzIHRoYXQgYXJlIG9wZXJhdGluZyB3aXRob3V0IHN1ZmZpY2llbnQgb3ZlcnNpZ2h0IG9yIHJvYnVzdCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZG93bnN0cmVhbSBpbXBhY3Qgb2YgZWFjaCBwb3RlbnRpYWwgZmFpbHVyZS4gSSYjMzk7bSB0cnlpbmcgdG8gcGljdHVyZSB0aGUgcmlwcGxlIGVmZmVjdCBhbmQgdGhlIG1pdGlnYXRpb24gc3RyYXRlZ2llcyB0aGF0IHdpbGwgYmUgcmVxdWlyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIGRlcGVuZGVuY2llcyBleGlzdCwgd2hhdCB0aGV5IGNvbnRyaWJ1dGUsIGFuZCBpZiB0aGV5JiMzOTtyZSBhY3R1YWxseSAqbmVjZXNzYXJ5Ki4gT2Z0ZW4sIG9wdGltaXphdGlvbiBiZWdpbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XG4gMTIxOlx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDEyMjpcdFxuIDEyMzpcdGNvbmZpZyBJUDZfTkZfTUFUQ0hfT1BUU1xuIDEyNDpcdFx0dHJpc3RhdGUgJiMzOTtcJiMzNDtoYmhcJiMzNDsgaG9wLWJ5LWhvcCBhbmQgXCYjMzQ7ZHN0XCYjMzQ7IG9wdHMgaGVhZGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuIDEyNTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAxMjY6XHRcdGhlbHBcbiAxMjc6XHRcdCAgVGhpcyBhbGxvd3Mgb25lIHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgb24gdGhlIGhvcC1ieS1ob3BcbiAxMjg6XHRcdCAgYW5kIGRlc3RpbmF0aW9uIG9wdGlvbnMgaGVhZGVycyBvZiBhIHBhY2tldC5cbiAxMjk6XHRcbiAxMzA6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMTMxOlx0XG4gMTMyOlx0Y29uZmlnIElQNl9ORl9NQVRDSF9ITFxuIDEzMzpcdFx0dHJpc3RhdGUgJiMzOTtcJiMzNDtobFwmIzM0OyBob3BsaW1pdCBtYXRjaCBzdXBwb3J0JiMzOTtcbiAxMzQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMTM1Olx0XHRzZWxlY3QgTkVURklMVEVSX1hUX01BVENIX0hMXG4gMTM2Olx0XHRoZWxwXG4gMTM3Olx0XHQgIFRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXImIzM5O3MgY29udmVuaWVuY2VcbiAxMzg6XHRcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcbiAxMzk6XHRcdCAgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkxOAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJUHY2IE5ldGZpbHRlciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIElQdjYgTmV0ZmlsdGVyIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGEgZmV3IHRoaW5ncyBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhlIHByZXNlbmNlIG9mIHRoYXQgYE5FVEZJTFRFUl9BRFZBTkNFRGAgb3B0aW9uIGlzIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZWQuIFRoYXQgc2VlbXMgaW1wb3J0YW50LCBnaXZlbiBpdHMgcm9sZSBoZXJlLgoKQWxyaWdodCwgc28gdGhlIGtleSBkZXBlbmRlbmN5IHNlZW1zIHRvIGJlIHRpZWQgdG8gYElQNl9ORl9JUFRBQkxFU2AuIEFzIEkgdW5kZXJzdGFuZCBpdCwgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciB0aGUgZnVuY3Rpb25hbGl0eSB0byBiZSBhdmFpbGFibGUuIEJ1dCBob2xkIG9uLi4uIEl0IHNlZW1zIHRoYXQgYElQNl9ORl9JUFRBQkxFU2AgaXRzZWxmIHJlbGllcyBvbiBgTkVURklMVEVSX1hUQUJMRVNgLiBTbyB0aGF0JiMzOTtzIGFub3RoZXIgcHJlcmVxdWlzaXRlLiBHb3QgaXQuIFNvIGZhciwgdGhlIGRlcGVuZGVudCBtb2R1bGVzIGFyZToKCiogICBgSVA2X05GX0lQVEFCTEVTYAoqICAgYElQNl9ORl9NQVRDSF9PUFRTYAoqICAgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYAoqICAgYElQNl9ORl9NQVRDSF9TUkhgCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvcmUgZnVuY3Rpb25zLCB0aGUgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGFyZToKCiogICBgaGJoX210NmAKKiAgIGBpcHY2aGVhZGVyX210NmAKKiAgIGBzcmhfbXQ2YAoqICAgYHNyaDFfbXQ2YAoKQWgsIEkgc2VlIHRoYXQgYGhiaF9tdDZgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIEJldHRlciBjaGVjayBgaXA2dF9oYmguY2AgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgc2NvcGUuIEkgbmVlZCB0byBiZSBjYXJlZnVsLCBhcyBzdGF0aWMgY2FuIGluZGljYXRlIGlzc3VlcyB3aXRoIGJlaW5nIGxvYWRlZCBhcyBhIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGJoX210NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jPTIzPU1PRFVMRV9BTElBUyhcJiMzNDtpcDZ0X2RzdFwmIzM0Oyk7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtNDAtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzo0MTpzdGF0aWMgc3RydWN0IHh0X21hdGNoIGhiaF9tdDZfcmVnW10gX19yZWFkX21vc3RseTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTQyLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM9NDM9c3RhdGljIGJvb2xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjQ0OmhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtNDUte1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTYwLVx0ZXJyID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnB0cixcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjYxOlx0XHRcdCAgICAocGFyLVx1MDAzZW1hdGNoID09IFx1MDAyNmhiaF9tdDZfcmVnWzBdKSA/XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy02Mi1cdFx0XHQgICAgTkVYVEhEUl9IT1AgOiBORVhUSERSX0RFU1QsIE5VTEwsIE5VTEwpO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE2NC1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE2NTpzdGF0aWMgaW50IGhiaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xNjYte1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE4NS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE4NjpzdGF0aWMgc3RydWN0IHh0X21hdGNoIGhiaF9tdDZfcmVnW10gX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE4Ny1cdHtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE4ODpcdFx0LyogTm90ZSwgaGJoX210NiByZWxpZXMgb24gdGhlIG9yZGVyIG9mIGhiaF9tdDZfcmVnICovXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xODktXHRcdC5uYW1lXHRcdD0gXCYjMzQ7aGJoXCYjMzQ7LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMTkwLVx0XHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MTkxOlx0XHQubWF0Y2hcdFx0PSBoYmhfbXQ2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMTkyLVx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXA2dF9vcHRzKSxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE5MzpcdFx0LmNoZWNrZW50cnlcdD0gaGJoX210Nl9jaGVjayxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE5NC1cdFx0Lm1lXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMTk4LVx0XHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MTk5Olx0XHQubWF0Y2hcdFx0PSBoYmhfbXQ2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjAwLVx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXA2dF9vcHRzKSxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIwMTpcdFx0LmNoZWNrZW50cnlcdD0gaGJoX210Nl9jaGVjayxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIwMi1cdFx0Lm1lXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjA1LVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MjA2OnN0YXRpYyBpbnQgX19pbml0IGhiaF9tdDZfaW5pdCh2b2lkKVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjA3LXtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIwODpcdHJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaGVzKGhiaF9tdDZfcmVnLCBBUlJBWV9TSVpFKGhiaF9tdDZfcmVnKSk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0yMDktfVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjEwLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MjExOnN0YXRpYyB2b2lkIF9fZXhpdCBoYmhfbXQ2X2V4aXQodm9pZClcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIxMi17XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzoyMTM6XHR4dF91bnJlZ2lzdGVyX21hdGNoZXMoaGJoX210Nl9yZWcsIEFSUkFZX1NJWkUoaGJoX210Nl9yZWcpKTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIxNC19XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0yMTUtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzoyMTY6bW9kdWxlX2luaXQoaGJoX210Nl9pbml0KTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIxNzptb2R1bGVfZXhpdChoYmhfbXQ2X2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc4MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN0YXRpYyBGdW5jdGlvbiBRdWVzdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGNsZWFyOiBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGdldCBpbmxpbmVkLiBJbml0aWFsbHksIG15IG1pbmQganVtcGVkIHRvIGBoYmhfbXQ2YC4gQnV0IHdhaXQsIGBoYmhfbXQ2YCAqaXMqIGEgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCBpbiBgeHRfbWF0Y2hgLiBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuLCB0aGUgY29tcGlsZXIgd29uJiMzOTt0IGlubGluZSBpdDsgaXQgKndpbGwqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gU28sIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlmIHdlICpkaWQqIHdhbnQgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHdoZXJlIHdvdWxkIHRoZXkgYmU/IElzIGB4dF9yZWdpc3Rlcl9tYXRjaGVzYCB0aGUgZW50cnk/IE5vLCB0aGUgYWN0dWFsIGVudHJ5IHBvaW50IGZvciBwYWNrZXQgbWF0Y2hpbmcgaXMgcmVhbGx5IG1vcmUgbGlrZSBgaXA2dF9kb190YWJsZWAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBCdXQgYGhiaF9tdDZgIGlzIHRoZSByZWFsIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQgaGVyZS4KClRoaW5raW5nIHRocm91Z2ggaXQgZnVydGhlciwgaWYgYSBmdW5jdGlvbiAqaXMqIHN0YXRpYyBidXQgaXRzIGFkZHJlc3MgaXMgYWN0dWFsbHkgdGFrZW4sIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXTigJlzIHRvdGFsbHkgZmluZSB0byBsaXN0IGl0IGFzIHRoZSBtYWluIGZ1bmN0aW9uIGhlcmUuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBhbnkgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYy4KCk5vcGUuIEFsbCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMgY2FsbGJhY2tzOiBgaGJoX210NmAsIGBpcHY2aGVhZGVyX210NmAsIGBzcmhfbXQ2YCwgYW5kIGBzcmgxX210NmAuIFNpbmNlIHRoZXkmIzM5O3JlIGNhbGxiYWNrcywgdGhleSAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLiBXZSBjYW4gY29uZmlkZW50bHkgbGlzdCB0aGVtLgoKTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBpcDZ0X2lwdjZoZWFkZXIuY2AgYW5kIGBpcDZ0X3NyaC5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZoZWFkZXJfbXQ2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYz0yNj1zdGF0aWMgYm9vbFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjI3OmlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0yOC17XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTExMi1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYzoxMTM6c3RhdGljIGludCBpcHY2aGVhZGVyX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMTQte1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMjQtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTI1OnN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggaXB2NmhlYWRlcl9tdDZfcmVnIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTI2LVx0Lm5hbWVcdFx0PSBcJiMzNDtpcHY2aGVhZGVyXCYjMzQ7LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEyNy1cdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjYsXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTI4Olx0Lm1hdGNoXHRcdD0gaXB2NmhlYWRlcl9tdDYsXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTI5LVx0Lm1hdGNoc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGlwNnRfaXB2NmhlYWRlcl9pbmZvKSxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYzoxMzA6XHQuY2hlY2tlbnRyeVx0PSBpcHY2aGVhZGVyX210Nl9jaGVjayxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMzEtXHQuZGVzdHJveVx0PSBOVUxMLFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMzQtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTM1OnN0YXRpYyBpbnQgX19pbml0IGlwdjZoZWFkZXJfbXQ2X2luaXQodm9pZClcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMzYte1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjEzNzpcdHJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaChcdTAwMjZpcHY2aGVhZGVyX210Nl9yZWcpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEzOC19XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTM5LVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjE0MDpzdGF0aWMgdm9pZCBfX2V4aXQgaXB2NmhlYWRlcl9tdDZfZXhpdCh2b2lkKVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTE0MS17XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTQyOlx0eHRfdW5yZWdpc3Rlcl9tYXRjaChcdTAwMjZpcHY2aGVhZGVyX210Nl9yZWcpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTE0My19XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTQ0LVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjE0NTptb2R1bGVfaW5pdChpcHY2aGVhZGVyX210Nl9pbml0KTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYzoxNDY6bW9kdWxlX2V4aXQoaXB2NmhlYWRlcl9tdDZfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzE5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3JoX210NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTIzLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MjQ6c3RhdGljIGJvb2wgc3JoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0yNS17XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM9MTI1PXN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0yNjctXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzoyNjg6c3RhdGljIGludCBzcmhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMjY5LXtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYz0yODc9c3RhdGljIGludCBzcmgxX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMDUtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMDY6c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBzcmhfbXQ2X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMDctXHR7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzEwLVx0XHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzExOlx0XHQubWF0Y2hcdFx0PSBzcmhfbXQ2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzEyLVx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXA2dF9zcmgpLFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzEzOlx0XHQuY2hlY2tlbnRyeVx0PSBzcmhfbXQ2X2NoZWNrLFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzE0LVx0XHQubWVcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMjYtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMjc6c3RhdGljIGludCBfX2luaXQgc3JoX210Nl9pbml0KHZvaWQpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMjgte1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzI5Olx0cmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMoc3JoX210Nl9yZWcsIEFSUkFZX1NJWkUoc3JoX210Nl9yZWcpKTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzMC19XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMzEtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMzI6c3RhdGljIHZvaWQgX19leGl0IHNyaF9tdDZfZXhpdCh2b2lkKVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzMzLXtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMzNDpcdHh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhzcmhfbXQ2X3JlZywgQVJSQVlfU0laRShzcmhfbXQ2X3JlZykpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzM1LX1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzNi1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMzNzptb2R1bGVfaW5pdChzcmhfbXQ2X2luaXQpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzM4Om1vZHVsZV9leGl0KHNyaF9tdDZfZXhpdCk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBIZWFkZXIgTWF0Y2hpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBpdC4gVGhlIGtleSBmdW5jdGlvbnMgaGVyZSBhcmUgYGhiaF9tdDZgLCBgaXB2NmhlYWRlcl9tdDZgLCBgc3JoX210NmAsIGFuZCBgc3JoMV9tdDZgLiBBbGwgdGhvc2UgYXJlIGNsZWFybHkgc3RhdGljLiBUaGUgaW1wb3J0YW50IGRldGFpbCBpcyBob3cgdGhleSYjMzk7cmUgdXNlZDsgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZCBhcyBjYWxsYmFja3Mgd2l0aGluIGB4dF9tYXRjaGAgc3RydWN0cy4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBub3QgZ29pbmcgdG8gYmUgaW5saW5lZCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIHN5bWJvbCBhbmFseXNpcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGdldCB0aGVtIGxpc3RlZCBwcm9wZXJseSBpbiBGb2N1c1N5bWJvbHMuCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBJIHNlZSBgSVA2X05GX0lQVEFCTEVTYCwgYElQNl9ORl9NQVRDSF9PUFRTYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4gQSBxdWljayB0aG91Z2h0OiBgSVA2X05GX0lQVEFCTEVTYCBsb29rcyBsaWtlIGEgcHJlcmVxdWlzaXRlIGZvciB0aGUgb3RoZXJzLCBsaWtlIGl0IGlzIGEgcGFyZW50IGZlYXR1cmUuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIGBJUDZfTkZfSVBUQUJMRVNgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUDZfTkZfSVBUQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz02PW1lbnUgXCYjMzQ7SVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05LSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3Bcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEwOmNvbmZpZyBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBJUDYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz03Mj1jb25maWcgTkZfTE9HX0lQVjZcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy03OS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjgwOmNvbmZpZyBJUDZfTkZfSVBUQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7SVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk2NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBJUDZfTkZfSVBUQUJMRVMqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJUDZfTkZfSVBUQUJMRVNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyBhcmUgdGllZCB0byBpdC4gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciB0aGUgb2J2aW91czsgSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBpbmNsdWRlcyBub3QganVzdCB0aGUgY29yZSBOZXRmaWx0ZXIgbW9kdWxlcyB0aGF0IGl0IGRpcmVjdGx5IHJlbGllcyB1cG9uLCBidXQgYWxzbyBhbnkgb3RoZXIgY29tcG9uZW50cywgcG90ZW50aWFsbHkgZXZlbiBrZXJuZWwgc3Vic3lzdGVtcywgdGhhdCBtYXkgaW5kaXJlY3RseSBpbmZsdWVuY2Ugb3IgYmUgaW5mbHVlbmNlZCBieSBpdHMgb3BlcmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgZmlsdGVyaW5nLCBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIElQdjYtcmVsYXRlZCBjb21wb25lbnRzLiBJ4oCZbSB0aGlua2luZyBhYm91dCBob3cgYSBtb2R1bGUgbGlrZSBgSVA2X05GX0lQVEFCTEVTYCBhZmZlY3RzIHRoZSBicm9hZGVyIGtlcm5lbCBhcmNoaXRlY3R1cmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBjb25mbGljdHMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGlzIHRvIGFzc2VzcyBpdHMgb3ZlcmFsbCBpbXBhY3QgYW5kIHBvcnRhYmlsaXR5LCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb25zIG9yIG1vZGlmaWNhdGlvbnMuIFRoZSBpbXBsaWNhdGlvbnMgb24gcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHdvdWxkIGFsc28gYmUgc29tZXRoaW5nIHRvIGNvbnNpZGVyLiBVbHRpbWF0ZWx5LCB1bmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBmdW5kYW1lbnRhbCB0byBncmFzcGluZyBpdHMgdHJ1ZSBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBhIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzU6XHRcdHNlbGVjdCBORl9MT0dfU1lTTE9HXG4gIDc2Olx0XHRoZWxwXG4gIDc3Olx0XHQgIFRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXImIzM5O3MgY29udmVuaWVuY2VcbiAgNzg6XHRcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMgQ09ORklHX05GX0xPR19TWVNMT0cuXG4gIDc5Olx0XG4gIDgwOlx0Y29uZmlnIElQNl9ORl9JUFRBQkxFU1xuICA4MTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nKVwmIzM0O1xuICA4MjpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJUFY2XG4gIDgzOlx0XHRzZWxlY3QgTkVURklMVEVSX1hUQUJMRVNcbiAgODQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA4NTpcdFx0aGVscFxuICA4NjpcdFx0ICBpcDZ0YWJsZXMgaXMgYSBnZW5lcmFsLCBleHRlbnNpYmxlIHBhY2tldCBpZGVudGlmaWNhdGlvbiBmcmFtZXdvcmsuXG4gIDg3Olx0XHQgIEN1cnJlbnRseSBvbmx5IHRoZSBwYWNrZXQgZmlsdGVyaW5nIGFuZCBwYWNrZXQgbWFuZ2xpbmcgc3Vic3lzdGVtXG4gIDg4Olx0XHQgIGZvciBJUHY2IHVzZSB0aGlzLCBidXQgY29ubmVjdGlvbiB0cmFja2luZyBpcyBnb2luZyB0byBmb2xsb3cuXG4gIDg5Olx0XHQgIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBlaXRoZXIgb2YgdGhvc2UuXG4gIDkwOlx0XG4gIDkxOlx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICA5MjpcdFxuICA5MzpcdGlmIElQNl9ORl9JUFRBQkxFU1xuICA5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGl0IHJlYWxseSBoaW5nZXMgb24gaG93IElQdjYgYW5kIHRoZSBpbnRlcm5ldCBwcm90b2NvbHMgYXJlIHNldCB1cC4gVG8gZ2V0IHRoZSBmZWF0dXJlcyBJIG5lZWQsIEkmIzM5O20gc2VlaW5nIHRoYXQgSSYjMzk7bGwgbmVlZCB0aGVzZSBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBgSVA2X05GX0lQVEFCTEVTYCwgYElQNl9ORl9NQVRDSF9PUFRTYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4gQnV0IGhvbGQgb24sIGl0IGxvb2tzIGxpa2UgYElQNl9ORl9NQVRDSF9PUFRTYCBpcyBkZXBlbmRlbnQgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRoYXQmIzM5O3MgYSBrZXkgZGVwZW5kZW5jeS4gUmlnaHQsIG5lZWQgdG8gYnJpbmcgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaW50byB0aGUgbWl4LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYWJvdXQgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgdG9vOyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgYWxzbyByZWxpZXMgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRpbWUgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM1Olx0XHRzZWxlY3QgTkVURklMVEVSX1hUX01BVENIX0hMXG4gMTM2Olx0XHRoZWxwXG4gMTM3Olx0XHQgIFRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXImIzM5O3MgY29udmVuaWVuY2VcbiAxMzg6XHRcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcbiAxMzk6XHRcdCAgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC5cbiAxNDA6XHRcbiAxNDE6XHRjb25maWcgSVA2X05GX01BVENIX0lQVjZIRUFERVJcbiAxNDI6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7aXB2NmhlYWRlclwmIzM0OyBJUHY2IEV4dGVuc2lvbiBIZWFkZXJzIE1hdGNoJiMzOTtcbiAxNDM6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDE0NDpcdFx0aGVscFxuIDE0NTpcdFx0ICBUaGlzIG1vZHVsZSBhbGxvd3Mgb25lIHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgdXBvblxuIDE0NjpcdFx0ICB0aGUgaXB2NiBleHRlbnNpb24gaGVhZGVycy5cbiAxNDc6XHRcbiAxNDg6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMTQ5Olx0XG4gMTUwOlx0Y29uZmlnIElQNl9ORl9NQVRDSF9NSFxuIDE1MTpcdFx0dHJpc3RhdGUgJiMzOTtcJiMzNDttaFwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbiAxNTI6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMTUzOlx0XHRoZWxwXG4gMTU0Olx0XHQgIFRoaXMgbW9kdWxlIGFsbG93cyBvbmUgdG8gbWF0Y2ggTUggcGFja2V0cy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IE5ldGZpbHRlciBNYXRjaGluZyBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCBvcHRpb24uIFRoZSBjb2RlIGNsZWFybHkgc3RhdGVzIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCBoYXZlIGEgZGVwZW5kZW5jeSBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgbWF0Y2ggb24gdGhlIElQdjYgaGVhZGVyIGl0c2VsZi4gQnV0IG5vdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBJUDZfTkZfTUFUQ0hfU1JIYC4uLiBkb2VzICp0aGF0KiBzaGFyZSB0aGUgc2FtZSBpbmRlcGVuZGVuY2U/IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgU1JIIChTZWdtZW50IFJvdXRpbmcgSGVhZGVyKSBpcyBtb3JlIHNwZWNpYWxpemVkLiBUaGVyZSBtaWdodCBiZSBzb21lIG1vcmUgY29tcGxleCBmZWF0dXJlcyBpbnZvbHZlZCB0aGVyZSB0aGF0IGFyZSByZWxhdGVkIHRvIGFkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgU1JIIG1hdGNoLiBQZXJoYXBzIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgcmVsZXZhbnQgTmV0ZmlsdGVyIGRvY3VtZW50YXRpb24gb3IgY29kZSBleGFtcGxlcyBpcyBpbiBvcmRlciwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUmIzM5O3Mgbm8gc3VidGxlIGRlcGVuZGVuY3kgSSYjMzk7bSBtaXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGVzZSBmZWF0dXJlcyBiZWhhdmUgYXMgZXhwZWN0ZWQgaW4gY29tcGxleCBmaWx0ZXJpbmcgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7cnRcJiMzNDsgUm91dGluZyBoZWFkZXIgbWF0Y2ggc3VwcG9ydCYjMzk7XG4gMTcxOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDE3MjpcdFx0aGVscFxuIDE3MzpcdFx0ICBydCBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgb24gdGhlIHJvdXRpbmdcbiAxNzQ6XHRcdCAgaGVhZGVyIG9mIHRoZSBwYWNrZXQuXG4gMTc1Olx0XG4gMTc2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDE3NzpcdFxuIDE3ODpcdGNvbmZpZyBJUDZfTkZfTUFUQ0hfU1JIXG4gMTc5Olx0XHR0cmlzdGF0ZSAmIzM5O1wmIzM0O3NyaFwmIzM0OyBTZWdtZW50IFJvdXRpbmcgaGVhZGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuIDE4MDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAxODE6XHRcdGhlbHBcbiAxODI6XHRcdCAgc3JoIG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gbWF0Y2ggcGFja2V0cyBiYXNlZCBvbiB0aGUgc2VnbWVudFxuIDE4MzpcdFx0ICByb3V0aW5nIGhlYWRlciBvZiB0aGUgcGFja2V0LlxuIDE4NDpcdFxuIDE4NTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxODY6XHRcbiAxODc6XHQjIFRoZSB0YXJnZXRzXG4gMTg4Olx0Y29uZmlnIElQNl9ORl9UQVJHRVRfSExcbiAxODk6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7SExcJiMzNDsgaG9wbGltaXQgdGFyZ2V0IHN1cHBvcnQmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg1MgoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiAxMjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyBpbiBOZXRmaWx0ZXIqKgoKT2theSwgc28gYElQNl9ORl9NQVRDSF9TUkhgIGRlZmluaXRlbHkgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4uLiB5ZXAsIGFsbCBwcmVzZW50OiBgSVBWNmAsIGBJUDZfTkZfSVBUQUJMRVNgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYElQNl9ORl9NQVRDSF9PUFRTYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4KClRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSB3YXNuJiMzOTt0IGNvcnJlY3RseSBkcm9wcGluZyBtYWxmb3JtZWQgSVB2NiBleHRlbnNpb24gaGVhZGVyczsgaXQgd2FzIGp1c3QgcmV0dXJuaW5nIGBmYWxzZWAgb24gYSBtYXRjaCBmYWlsdXJlLiBUaGlzIHBhdGNoIGNoYW5nZXMgdGhhdCBiZWhhdmlvci4gUmV0dXJuaW5nIGBmYWxzZWAgb24gYSBtYXRjaCBmYWlsdXJlIGFsbG93cyB0aGUgcGFja2V0IHRvIGNvbnRpbnVlIGFuZCBwb3NzaWJseSB0cmlnZ2VyIGEgdnVsbmVyYWJpbGl0eSwgd2hlcmVhcyBzZXR0aW5nIGBob3Rkcm9wID0gdHJ1ZWAgZHJvcHMgdGhlIHBhY2tldCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYW5kIHNlY3VyZSBiZWhhdmlvci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lIGFjdHVhbGx5LCBzbyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzOiBgaGJoX210NmAsIGBpcHY2aGVhZGVyX210NmAsIGBzcmhfbXQ2YCwgYW5kIGBzcmgxX210NmAuCgpMZXQmIzM5O3MgY2hlY2sgaWYgYGhiaF9tdDZgIGlzIHRoZSBvbmx5IG1hdGNoIGZ1bmN0aW9uIGluIGBpcDZ0X2hiaC5jYC4gWXVwLCB0aGF0JiMzOTtzIHRoZSBvbmUuIFdhaXQsIGBoYmhfbXQ2YCBoYW5kbGVzICpib3RoKiBIb3AtYnktSG9wIGFuZCBEZXN0aW5hdGlvbiBPcHRpb25zIGhlYWRlcnMsIHRoYXQmIzM5O3Mgd2h5IGl0IGlzIGxpc3RlZCBtdWx0aXBsZSB0aW1lcy4gU28gdGhlIGNvZGUgaXMgY29ycmVjdC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byBgaXA2dF9pcHY2aGVhZGVyLmNgLiBPa2F5LCB0aGUgcGF0Y2ggcmVtb3ZlcyBhIGNoZWNrOiBgbGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpYC4gV2h5PyBBaCwgYHNrYl9oZWFkZXJfcG9pbnRlcmAgbm93IHRha2VzIGNhcmUgb2YgdGhhdC4gSXQgd2lsbCBmYWlsIGlmIGBwdHIgJiM0Mzsgc2l6ZW9mKF9oZHIpICZndDsgc2tiLSZndDtsZW5gIGFuZCByZXR1cm4gTlVMTC4gYHNpemVvZihfaGRyKWAgaXMgdGhlIHNhbWUgYXMgYHNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKWAsIHNvIHRoZSBjb2RlIGluIGBza2JfaGVhZGVyX3BvaW50ZXJgIHJlcGxhY2VzIHRoZSBub3cgcmVtb3ZlZCBjaGVjay4gTW9yZSBpbXBvcnRhbnRseSwgaWYgYHNrYl9oZWFkZXJfcG9pbnRlcmAgZmFpbHMsIGl0IG5vdyBzZXRzIGBob3Rkcm9wID0gdHJ1ZWAuIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHJldHVybmVkIGZhbHNlIHdpdGhvdXQgaG90ZHJvcHBpbmcuIFNvIHRoZSBwYXRjaCBtYWtlcyBzdXJlIHRvIHNldCBgaG90ZHJvcCA9IHRydWVgIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQuCgpGaW5hbGx5LCBpbiBgaXA2dF9zcmguY2AsIHRoZSBwYXRjaCBoYW5kbGVzIGVycm9yIGNvZGVzIGZyb20gYGlwdjZfZmluZF9oZHJgLiBOb3csIGlmIGBpcHY2X2ZpbmRfaGRyYCBmYWlscyB3aXRoIGFueXRoaW5nICpvdGhlciogdGhhbiBgLUVOT0VOVGAgKGUuZy4sIGEgbWFsZm9ybWVkIGhlYWRlciksIGl0IGp1bXBzIHRvIGBob3Rkcm9wID0gdHJ1ZWAuIFRoaXMgaXMgYW5vdGhlciBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGVuc3VyZXMgbWFsZm9ybWVkIHBhY2tldHMgYXJlIGRyb3BwZWQgY29ycmVjdGx5LgoKRXZlcnl0aGluZyBsb29rcyBnb29kLiBUaGUgcGF0Y2ggaXMgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nLCBjb3JyZWN0bHkgaGFuZGxpbmcgYW5kIGhvdGRyb3BwaW5nIHBhY2tldHMgd2l0aCBiYWQgaGVhZGVycy4gSSYjMzk7bSByZWFkeSB0byBtYXJrIHRoaXMgYXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVA2X05GX0lQVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfT1BUUyYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUiYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfU1JIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGJoX210NiYjMzQ7LAogICAgJiMzNDtpcHY2aGVhZGVyX210NiYjMzQ7LAogICAgJiMzNDtzcmhfbXQ2JiMzNDssCiAgICAmIzM0O3NyaDFfbXQ2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgbmV0ZmlsdGVyIG1hdGNoIGV4dGVuc2lvbnMgKGhiaCwgaXB2NmhlYWRlciwgc3JoKSB0byBwcm9wZXJseSBkcm9wIHBhY2tldHMgd2l0aCBtYWxmb3JtZWQgZXh0ZW5zaW9uIGhlYWRlcnMgYnkgc2V0dGluZyBgcGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlYCBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGZhbHNlICh3aGljaCB3b3VsZCBhbGxvdyB0aGUgcGFja2V0IHRvIGNvbnRpbnVlIHRyYXZlcnNhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgZmlsdGVyaW5nIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgbWFsZm9ybWVkIHBhY2tldHMgYXJlIGhhbmRsZWQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVA2X05GX0lQVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfT1BUUyYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUiYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfU1JIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGJoX210NiYjMzQ7LAogICAgJiMzNDtpcHY2aGVhZGVyX210NiYjMzQ7LAogICAgJiMzNDtzcmhfbXQ2JiMzNDssCiAgICAmIzM0O3NyaDFfbXQ2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgbmV0ZmlsdGVyIG1hdGNoIGV4dGVuc2lvbnMgKGhiaCwgaXB2NmhlYWRlciwgc3JoKSB0byBwcm9wZXJseSBkcm9wIHBhY2tldHMgd2l0aCBtYWxmb3JtZWQgZXh0ZW5zaW9uIGhlYWRlcnMgYnkgc2V0dGluZyBgcGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlYCBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGZhbHNlICh3aGljaCB3b3VsZCBhbGxvdyB0aGUgcGFja2V0IHRvIGNvbnRpbnVlIHRyYXZlcnNhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgZmlsdGVyaW5nIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgbWFsZm9ybWVkIHBhY2tldHMgYXJlIGhhbmRsZWQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZWApIHJhdGhlciB0aGFuIGp1c3QgcmV0dXJuaW5nIGZhbHNlIG9yIHByb2NlZWRpbmcgd2l0aCBwYXJzaW5nLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cblxuQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgcGFja2V0IHBhcnNpbmcgYnVncyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIHJlYWRzKSBhcmUgYWRlcXVhdGVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMDVmMWI4ZWNjMjIwMWVhYTU1ZTE0OGNmYTFhNGI2ODgzYzAzZDBmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMDoyODo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKaW5kZXggNmQxYTVkMjAyNmE2Ny4uOWYwNGI0ZDhmMTZmZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKQEAgLTYyLDIxICYjNDM7NjIsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCQkgICAgTkVYVEhEUl9IT1AgOiBORVhUSERSX0RFU1QsIE5VTEwsIE5VTEwpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCWlmIChlcnIgIT0gLUVOT0VOVCkKLQkJCXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiYjNDM7CQkJZ290byBob3Rkcm9wOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJb2ggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0c2gpLCAmYW1wO19vcHRzaCk7Ci0JaWYgKG9oID09IE5VTEwpIHsKLQkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KJiM0MzsJaWYgKCFvaCkKJiM0MzsJCWdvdG8gaG90ZHJvcDsKIAogCWhkcmxlbiA9IGlwdjZfb3B0bGVuKG9oKTsKIAlpZiAoc2tiLSZndDtsZW4gLSBwdHIgJmx0OyBoZHJsZW4pIHsKLQkJLyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdCYjMzk7cyBsZW5ndGggZmllbGQgKi8KLQkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJLyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdHMgbGVuZ3RoIGZpZWxkICovCiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAJfQogCiAJcHJfZGVidWcoJiMzNDtJUHY2IE9QVFMgTEVOICV1ICV1ICYjMzQ7LCBoZHJsZW4sIG9oLSZndDtoZHJsZW4pOwpAQCAtMTA0LDggJiM0MzsxMDEsOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCQlicmVhazsKIAkJCXRwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX29wdHR5cGUpLAogCQkJCQkJJmFtcDtfb3B0dHlwZSk7Ci0JCQlpZiAodHAgPT0gTlVMTCkKLQkJCQlicmVhazsKJiM0MzsJCQlpZiAoIXRwKQomIzQzOwkJCQlnb3RvIGhvdGRyb3A7CiAKIAkJCS8qIFR5cGUgY2hlY2sgKi8KIAkJCWlmICgqdHAgIT0gKG9wdGluZm8tJmd0O29wdHNbdGVtcF0gJmFtcDsgMHhGRjAwKSAmZ3Q7Jmd0OyA4KSB7CkBAIC0xMjEsMTIgJiM0MzsxMTgsMTIgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAKIAkJCQkvKiBsZW5ndGggZmllbGQgZXhpc3RzID8gKi8KIAkJCQlpZiAoaGRybGVuICZsdDsgMikKLQkJCQkJYnJlYWs7CiYjNDM7CQkJCQlnb3RvIGhvdGRyb3A7CiAJCQkJbHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIgJiM0MzsgMSwKIAkJCQkJCQlzaXplb2YoX29wdGxlbiksCiAJCQkJCQkJJmFtcDtfb3B0bGVuKTsKLQkJCQlpZiAobHAgPT0gTlVMTCkKLQkJCQkJYnJlYWs7CiYjNDM7CQkJCWlmICghbHApCiYjNDM7CQkJCQlnb3RvIGhvdGRyb3A7CiAJCQkJc3BlY19sZW4gPSBvcHRpbmZvLSZndDtvcHRzW3RlbXBdICZhbXA7IDB4MDBGRjsKIAogCQkJCWlmIChzcGVjX2xlbiAhPSAweDAwRkYgJmFtcDsmYW1wOyBzcGVjX2xlbiAhPSAqbHApIHsKQEAgLTE0NCwxMCAmIzQzOzE0MSwxMCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCS8qIFN0ZXAgdG8gdGhlIG5leHQgKi8KIAkJCXByX2RlYnVnKCYjMzQ7bGVuJTA0WFxuJiMzNDssIG9wdGxlbik7CiAKLQkJCWlmICgocHRyICZndDsgc2tiLSZndDtsZW4gLSBvcHRsZW4gfHwgaGRybGVuICZsdDsgb3B0bGVuKSAmYW1wOyZhbXA7Ci0JCQkgICAgdGVtcCAmbHQ7IG9wdGluZm8tJmd0O29wdHNuciAtIDEpIHsKJiM0MzsJCQlpZiAocHRyICZndDsgc2tiLSZndDtsZW4gfHwgb3B0bGVuICZndDsgc2tiLSZndDtsZW4gLSBwdHIgfHwKJiM0MzsJCQkgICAgaGRybGVuICZsdDsgb3B0bGVuKSB7CiAJCQkJcHJfZGVidWcoJiMzNDtuZXcgcG9pbnRlciBpcyB0b28gbGFyZ2UhXG4mIzM0Oyk7Ci0JCQkJYnJlYWs7CiYjNDM7CQkJCWdvdG8gaG90ZHJvcDsKIAkJCX0KIAkJCXB0ciAmIzQzOz0gb3B0bGVuOwogCQkJaGRybGVuIC09IG9wdGxlbjsKQEAgLTE1OSw2ICYjNDM7MTU2LDEwIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCX0KIAogCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0Mztob3Rkcm9wOgomIzQzOwlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYwppbmRleCBjNTJmZjkyOWM5M2IzLi5hZWY4ZjY5ZGE3ZmI1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jCkBAIC0yOCw3ICYjNDM7MjgsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiB7CiAJY29uc3Qgc3RydWN0IGlwNnRfaXB2NmhlYWRlcl9pbmZvICppbmZvID0gcGFyLSZndDttYXRjaGluZm87CiAJdW5zaWduZWQgaW50IHRlbXA7Ci0JaW50IGxlbjsKIAl1OCBuZXh0aGRyOwogCXVuc2lnbmVkIGludCBwdHI7CiAKQEAgLTM4LDggJiM0MzszNyw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAluZXh0aGRyID0gaXB2Nl9oZHIoc2tiKS0mZ3Q7bmV4dGhkcjsKIAkvKiBwb2ludGVyIHRvIHRoZSAxc3QgZXh0aGRyICovCiAJcHRyID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKLQkvKiBhdmFpbGFibGUgbGVuZ3RoICovCi0JbGVuID0gc2tiLSZndDtsZW4gLSBwdHI7CiAJdGVtcCA9IDA7CiAKIAl3aGlsZSAobmZfaXA2X2V4dF9oZHIobmV4dGhkcikpIHsKQEAgLTUyLDkgJiM0Mzs0OSw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCXRlbXAgfD0gTUFTS19OT05FOwogCQkJYnJlYWs7CiAJCX0KLQkJLyogSXMgdGhlcmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgbmV4dCBleHQgaGVhZGVyPyAqLwotCQlpZiAobGVuICZsdDsgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpCi0JCQlyZXR1cm4gZmFsc2U7CiAJCS8qIEVTUCAtJmd0OyBldmFsdWF0ZSAqLwogCQlpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkgewogCQkJdGVtcCB8PSBNQVNLX0VTUDsKQEAgLTk3LDcgJiM0Mzs5MSw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJfQogCiAJCW5leHRoZHIgPSBocC0mZ3Q7bmV4dGhkcjsKLQkJbGVuIC09IGhkcmxlbjsKIAkJcHRyICYjNDM7PSBoZHJsZW47CiAJCWlmIChwdHIgJmd0OyBza2ItJmd0O2xlbikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYwppbmRleCBkYjBmZDY0ZDg5ODYyLi42ZmNjNDAxMDJmZTNkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYwpAQCAtMjcsMjIgJiM0MzsyNywyNyBAQCBzdGF0aWMgYm9vbCBzcmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAlzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDsKIAlzdHJ1Y3QgaXB2Nl9zcl9oZHIgX3NyaDsKIAlpbnQgaGRybGVuLCBzcmhvZmYgPSAwOwomIzQzOwlpbnQgZXJyOwogCi0JaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO3NyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSAmbHQ7IDApCiYjNDM7CWVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO3NyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCWlmIChlcnIgIT0gLUVOT0VOVCkKJiM0MzsJCQlnb3RvIGhvdGRyb3A7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCXNyaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNyaG9mZiwgc2l6ZW9mKF9zcmgpLCAmYW1wO19zcmgpOwogCWlmICghc3JoKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAKIAloZHJsZW4gPSBpcHY2X29wdGxlbihzcmgpOwogCWlmIChza2ItJmd0O2xlbiAtIHNyaG9mZiAmbHQ7IGhkcmxlbikKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJZ290byBob3Rkcm9wOwogCiAJaWYgKHNyaC0mZ3Q7dHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKHNyaC0mZ3Q7c2VnbWVudHNfbGVmdCAmZ3Q7IHNyaC0mZ3Q7Zmlyc3Rfc2VnbWVudCkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJZ290byBob3Rkcm9wOwogCiAJLyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi8KIAlpZiAoc3JoaW5mby0mZ3Q7bXRfZmxhZ3MgJmFtcDsgSVA2VF9TUkhfTkVYVEhEUikKQEAgLTExMSw2ICYjNDM7MTE2LDEwIEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJCSEoc3JoLSZndDt0YWcgPT0gc3JoaW5mby0mZ3Q7dGFnKSkpCiAJCQlyZXR1cm4gZmFsc2U7CiAJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7aG90ZHJvcDoKJiM0MzsJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCkBAIC0xMjEsMjIgJiM0MzsxMzAsMzEgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCXN0cnVjdCBpbjZfYWRkciBfcHNpZCwgX25zaWQsIF9sc2lkOwogCXN0cnVjdCBpcHY2X3NyX2hkciAqc3JoOwogCXN0cnVjdCBpcHY2X3NyX2hkciBfc3JoOwomIzQzOwlpbnQgZXJyOwogCi0JaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO3NyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSAmbHQ7IDApCiYjNDM7CWVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO3NyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCWlmIChlcnIgIT0gLUVOT0VOVCkKJiM0MzsJCQlnb3RvIGhvdGRyb3A7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCXNyaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNyaG9mZiwgc2l6ZW9mKF9zcmgpLCAmYW1wO19zcmgpOwogCWlmICghc3JoKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAKIAloZHJsZW4gPSBpcHY2X29wdGxlbihzcmgpOwogCWlmIChza2ItJmd0O2xlbiAtIHNyaG9mZiAmbHQ7IGhkcmxlbikKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJZ290byBob3Rkcm9wOwogCiAJaWYgKHNyaC0mZ3Q7dHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNCkKIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWlmIChzaXplb2YoKnNyaCkgJiM0MzsKJiM0MzsJICAgICgoc3JoLSZndDtmaXJzdF9zZWdtZW50ICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICZndDsgaGRybGVuKQomIzQzOwkJZ290byBob3Rkcm9wOwomIzQzOwogCWlmIChzcmgtJmd0O3NlZ21lbnRzX2xlZnQgJmd0OyBzcmgtJmd0O2ZpcnN0X3NlZ21lbnQpCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCWdvdG8gaG90ZHJvcDsKIAogCS8qIE5leHQgSGVhZGVyIG1hdGNoaW5nICovCiAJaWYgKHNyaGluZm8tJmd0O210X2ZsYWdzICZhbXA7IElQNlRfU1JIX05FWFRIRFIpCkBAIC0yMDcsNyAmIzQzOzIyNSw3IEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCSAgKChzcmgtJmd0O3NlZ21lbnRzX2xlZnQgJiM0MzsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CiAJCXBzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwc2lkb2ZmLCBzaXplb2YoX3BzaWQpLCAmYW1wO19wc2lkKTsKIAkJaWYgKCFwc2lkKQotCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCWdvdG8gaG90ZHJvcDsKIAkJaWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9QU0lELAogCQkJCWlwdjZfbWFza2VkX2FkZHJfY21wKHBzaWQsICZhbXA7c3JoaW5mby0mZ3Q7cHNpZF9tc2ssCiAJCQkJCQkgICAgICZhbXA7c3JoaW5mby0mZ3Q7cHNpZF9hZGRyKSkpCkBAIC0yMjIsNyAmIzQzOzI0MCw3IEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCSAgKChzcmgtJmd0O3NlZ21lbnRzX2xlZnQgLSAxKSAqIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAkJbnNpZCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG5zaWRvZmYsIHNpemVvZihfbnNpZCksICZhbXA7X25zaWQpOwogCQlpZiAoIW5zaWQpCi0JCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJZ290byBob3Rkcm9wOwogCQlpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX05TSUQsCiAJCQkJaXB2Nl9tYXNrZWRfYWRkcl9jbXAobnNpZCwgJmFtcDtzcmhpbmZvLSZndDtuc2lkX21zaywKIAkJCQkJCSAgICAgJmFtcDtzcmhpbmZvLSZndDtuc2lkX2FkZHIpKSkKQEAgLTIzNCwxMyAmIzQzOzI1MiwxNyBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCWxzaWRvZmYgPSBzcmhvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2X3NyX2hkcik7CiAJCWxzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsc2lkb2ZmLCBzaXplb2YoX2xzaWQpLCAmYW1wO19sc2lkKTsKIAkJaWYgKCFsc2lkKQotCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCWdvdG8gaG90ZHJvcDsKIAkJaWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9MU0lELAogCQkJCWlwdjZfbWFza2VkX2FkZHJfY21wKGxzaWQsICZhbXA7c3JoaW5mby0mZ3Q7bHNpZF9tc2ssCiAJCQkJCQkgICAgICZhbXA7c3JoaW5mby0mZ3Q7bHNpZF9hZGRyKSkpCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCXJldHVybiB0cnVlOwomIzQzOwomIzQzO2hvdGRyb3A6CiYjNDM7CXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGludCBzcmhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA0NQoJCQkJCQkJb3V0cHV0OiAyNDcKCQkJCQkJCXRob3VnaHRzOiAxMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIElQdjYgTmV0ZmlsdGVyIFBhdGNoIGZvciBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGZvY3VzZWQgb24gaGFyZGVuaW5nIHRoZSBwYWNrZXQgcGFyc2luZyBsb2dpYyB3aXRoaW4gdGhlIElQdjYgbmV0ZmlsdGVyIGV4dGVuc2lvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgaXA2dF9oYmguY2AsIGBpcDZ0X2lwdjZoZWFkZXIuY2AsIGFuZCBgaXA2dF9zcmguY2AuIFRoZSBvdmVyd2hlbG1pbmcgcGF0dGVybiBoZXJlIGlzIHRoZSByZXBsYWNlbWVudCBvZiB2YXJpb3VzIGBpZmAgY2hlY2tzIHdpdGggYGdvdG8gaG90ZHJvcDtgIHN0YXRlbWVudHMsIGFuZCB0aGUgYWRkaXRpb24gb2YgYSBuZXcgY2hlY2sgaW4gYGlwNnRfc3JoLmNgLiBBbGwgdGhlc2UgY2hhbmdlcyBlc3NlbnRpYWxseSByZWZpbmUgdGhlIGVycm9yIGhhbmRsaW5nIGluIHRoZXNlIG1vZHVsZXMgd2hlbiBkZWFsaW5nIHdpdGggSVB2NiBleHRlbnNpb24gaGVhZGVycy4KCkluIGBpcDZ0X2hiaC5jYCwgaXQgc2VlbXMgd2UmIzM5O3JlIHRpZ2h0ZW5pbmcgdXAgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGFuZCBlbnN1cmluZyB0aGUgcGFja2V0IGxlbmd0aCBpcyBzdWZmaWNpZW50IGZvciB0aGUgaGVhZGVyIHNpemVzIHdlJiMzOTtyZSBleHBlY3RpbmcuIFNpbWlsYXJseSwgaW4gYGlwNnRfc3JoLmNgLCB0aGVyZSYjMzk7cyBhIGNvbmNlcnRlZCBlZmZvcnQgdG8gdmFsaWRhdGUgdGhlIFNlcmlhbCBSb3V0aW5nIEhlYWRlciYjMzk7cyBzdHJ1Y3R1cmUgYW5kIHNlZ21lbnQgbGVuZ3Rocy4gVGhlIHJlbW92YWwgb2YgdGhlIGBsZW5gIHZhcmlhYmxlIGFuZCB0aGUgcmVkdW5kYW50IGNoZWNrIGluIGBpcDZ0X2lwdjZoZWFkZXIuY2AgaXMgaW50ZXJlc3RpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gc3VwZXJzZWRlZCBieSB0aGUgcm9idXN0IGhhbmRsaW5nIG9mIGBza2JfaGVhZGVyX3BvaW50ZXJgLiBUaGF0JiMzOTtzIGdvb2QsIGxlc3MgcmVkdW5kYW50IGNvZGUuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIG1vcmUgYWdncmVzc2l2ZSBwYWNrZXQgZHJvcHBpbmcgd2hlbiBtYWxmb3JtZWQgaGVhZGVycyBhcmUgZGV0ZWN0ZWQuIFdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUgaXMgbm90IGludHJvZHVjaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG9ubHkgZm9jdXMgaXMgYmV0dGVyIGJvdW5kcyBjaGVja2luZyB0byBlbnN1cmUgdGhhdCBwYWNrZXRzIGNvbmZvcm0gdG8gdGhlIGV4cGVjdGVkIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBmb3JtYXRzLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgYWJvdXQgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBpbnRyb2R1Y2VkLiBUaGUgcGFja2V0IGRhdGEgaXRzZWxmIGlzIGNvbWluZyBmcm9tIHRoZSBuZXR3b3JrIGRyaXZlciwgaXQgaGFzIHRvIGJlIGluaXRpYWxpemVkIGJ5IHRoZSBzZW5kZXIuIFRoZSBhZGRlZCBjaGVjayBgc2l6ZW9mKCpzcmgpICYjNDM7ICgoc3JoLSZndDtmaXJzdF9zZWdtZW50ICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICZndDsgaGRybGVuYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgcmVhZHMgKndpdGhpbiogdGhlIHBhY2tldC4gV2hpbGUgS0FTQU4gd291bGQgY2F0Y2ggb3V0LW9mLWJvdW5kcyByZWFkcyBmcm9tIHRoZSBgc2tiYCwgaW4gdGhpcyBjYXNlLCB0aGUgYHNrYmAgbWlnaHQgaGF2ZSBleHRyYSBkYXRhIGFwcGVuZGVkLCBhbmQgd2UmIzM5O3JlIGVuc3VyaW5nIHdlIGRvbiYjMzk7dCByZWFkIGJleW9uZCB0aGUgZXh0ZW5zaW9uIGhlYWRlciBpbnRvIGdhcmJhZ2UgZGF0YSBpbiB0aGUgc2FtZSBgc2tiYC4gVGhhdCYjMzk7cyBhIGxvZ2ljIGJ1ZyBvciBhIHJlYWQgb2YgcGFja2V0LWludGVybmFsIGdhcmJhZ2UsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGF0IGh5cG90aGVzaXMuIExvb2tpbmcgYXQgdGhlIHVzYWdlIG9mIGBza2JfaGVhZGVyX3BvaW50ZXJgLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHVzZWQgdG8gY29weSBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzLCBzdWNoIGFzIGBfc3JoYCwgYF9wc2lkYCwgZXRjLiBUaGlzIGxvb2tzIGZpbmUuIElmIGl0IGZhaWxzLCBpdCByZXR1cm5zIE5VTEwuIElmIGl0IHN1Y2NlZWRzLCBpdCByZXR1cm5zIGVpdGhlciBhIHBvaW50ZXIgdG8gdGhlIGxpbmVhciBkYXRhIChpZiBwb3NzaWJsZSkgb3IgYSBjb3B5IGluIGEgZnVsbHkgcG9wdWxhdGVkIGxvY2FsIGJ1ZmZlci4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgYW4gdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZSBiZWluZyByZXR1cm5lZC4gU28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRoYXQgd2UgY2FuIGhhdmUgYW4gdW5pbml0aWFsaXplZCByZWFkIGhlcmUuCgpUaGVyZWZvcmUsIHNpbmNlIHRoaXMgcGF0Y2ggaXMgbm90IGludHJvZHVjaW5nIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFdlIG9ubHkgbmVlZCB0byB1c2UgS0FTQU4uIFRoZXNlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaGFyZGVuaW5nIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwYXJzaW5nLCBhbmQgdGhlc2UgZml4ZXMgcmVsYXRlIHRvIGxvZ2ljIGJ1Z3MsIHdpdGggYW55IHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGJlaW5nIGNvbmZpbmVkIHRvIHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYgYW5kIGFscmVhZHkgcHJvdGVjdGVkIHdpdGggS0FTQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgbmV0ZmlsdGVyIG1vZHVsZXMgKGlwNnRfaGJoLCBpcDZ0X2lwdjZoZWFkZXIsIGlwNnRfc3JoKSB0byBpbXByb3ZlIHBhY2tldCBwYXJzaW5nIGFuZCBib3VuZHMgY2hlY2tpbmcuIEl0IGVuc3VyZXMgdGhhdCBtYWxmb3JtZWQgcGFja2V0cyB3aXRoIGludmFsaWQgZXh0ZW5zaW9uIGhlYWRlciBsZW5ndGhzIG9yIHNlZ21lbnQgY291bnRzIGFyZSBjb3JyZWN0bHkgZHJvcHBlZCAodmlhIGBwYXItXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikgZGF0YSwgd2hpY2ggY29uc2lzdHMgb2YgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrIChub3QgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5KS4gVGhlIGZ1bmN0aW9ucyB1c2UgYHNrYl9oZWFkZXJfcG9pbnRlcigpYCwgd2hpY2ggc2FmZWx5IGNvcGllcyBwYWNrZXQgZGF0YSBpbnRvIGxvY2FsIHN0YWNrIHZhcmlhYmxlcyBvciByZXR1cm5zIGEgZGlyZWN0IHBvaW50ZXIsIHJldHVybmluZyBOVUxMIGlmIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoIGV4Y2VlZHMgdGhlIHNrYiBsZW5ndGguIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlza3Mgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkuXG5cbkFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIHBhY2tldCBwYXJzaW5nIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyByZWFkcykgYXJlIGFkZXF1YXRlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgbmV0ZmlsdGVyIG1vZHVsZXMgKGlwNnRfaGJoLCBpcDZ0X2lwdjZoZWFkZXIsIGlwNnRfc3JoKSB0byBpbXByb3ZlIHBhY2tldCBwYXJzaW5nIGFuZCBib3VuZHMgY2hlY2tpbmcuIEl0IGVuc3VyZXMgdGhhdCBtYWxmb3JtZWQgcGFja2V0cyB3aXRoIGludmFsaWQgZXh0ZW5zaW9uIGhlYWRlciBsZW5ndGhzIG9yIHNlZ21lbnQgY291bnRzIGFyZSBjb3JyZWN0bHkgZHJvcHBlZCAodmlhIGBwYXItXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikgZGF0YSwgd2hpY2ggY29uc2lzdHMgb2YgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrIChub3QgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5KS4gVGhlIGZ1bmN0aW9ucyB1c2UgYHNrYl9oZWFkZXJfcG9pbnRlcigpYCwgd2hpY2ggc2FmZWx5IGNvcGllcyBwYWNrZXQgZGF0YSBpbnRvIGxvY2FsIHN0YWNrIHZhcmlhYmxlcyBvciByZXR1cm5zIGEgZGlyZWN0IHBvaW50ZXIsIHJldHVybmluZyBOVUxMIGlmIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoIGV4Y2VlZHMgdGhlIHNrYiBsZW5ndGguIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlza3Mgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkuXG5cbkFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIHBhY2tldCBwYXJzaW5nIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyByZWFkcykgYXJlIGFkZXF1YXRlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjg6NTYuMzU1OTU5NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg0OTkyMDk0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVA2X05GX0lQVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIklQNl9ORl9NQVRDSF9PUFRTXCIsXG4gICAgXCJJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUlwiLFxuICAgIFwiSVA2X05GX01BVENIX1NSSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhiaF9tdDZcIixcbiAgICBcImlwdjZoZWFkZXJfbXQ2XCIsXG4gICAgXCJzcmhfbXQ2XCIsXG4gICAgXCJzcmgxX210NlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cXG5cXG5BbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBwYWNrZXQgcGFyc2luZyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgcmVhZHMpIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbWF0Y2ggZXh0ZW5zaW9ucyAoaGJoLCBpcHY2aGVhZGVyLCBzcmgpIHRvIHByb3Blcmx5IGRyb3AgcGFja2V0cyB3aXRoIG1hbGZvcm1lZCBleHRlbnNpb24gaGVhZGVycyBieSBzZXR0aW5nIGBwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlYCBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGZhbHNlICh3aGljaCB3b3VsZCBhbGxvdyB0aGUgcGFja2V0IHRvIGNvbnRpbnVlIHRyYXZlcnNhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgZmlsdGVyaW5nIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgbWFsZm9ybWVkIHBhY2tldHMgYXJlIGhhbmRsZWQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI4OjU2LjM1NTk2NTI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjMyOTY5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMDVmMWI4ZWNjMjIwMWVhYTU1ZTE0OGNmYTFhNGI2ODgzYzAzZDBmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xcbmluZGV4IDZkMWE1ZDIwMjZhNjcuLjlmMDRiNGQ4ZjE2ZmYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xcbkBAIC02MiwyMSArNjIsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdFxcdFxcdCAgICBORVhUSERSX0hPUCA6IE5FWFRIRFJfREVTVCwgTlVMTCwgTlVMTCk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGlmIChlcnIgIT0gLUVOT0VOVClcXG4tXFx0XFx0XFx0cGFyLVxcdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdG9oID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX29wdHNoKSwgXFx1MDAyNl9vcHRzaCk7XFxuLVxcdGlmIChvaCA9PSBOVUxMKSB7XFxuLVxcdFxcdHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWU7XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fVxcbitcXHRpZiAoIW9oKVxcbitcXHRcXHRnb3RvIGhvdGRyb3A7XFxuIFxcbiBcXHRoZHJsZW4gPSBpcHY2X29wdGxlbihvaCk7XFxuIFxcdGlmIChza2ItXFx1MDAzZWxlbiAtIHB0ciBcXHUwMDNjIGhkcmxlbikge1xcbi1cXHRcXHQvKiBQYWNrZXQgc21hbGxlciB0aGFuIGl0J3MgbGVuZ3RoIGZpZWxkICovXFxuLVxcdFxcdHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWU7XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0LyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdHMgbGVuZ3RoIGZpZWxkICovXFxuK1xcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0fVxcbiBcXG4gXFx0cHJfZGVidWcoXFxcIklQdjYgT1BUUyBMRU4gJXUgJXUgXFxcIiwgaGRybGVuLCBvaC1cXHUwMDNlaGRybGVuKTtcXG5AQCAtMTA0LDggKzEwMSw4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0dHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0dHlwZSksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZfb3B0dHlwZSk7XFxuLVxcdFxcdFxcdGlmICh0cCA9PSBOVUxMKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0aWYgKCF0cClcXG4rXFx0XFx0XFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXG4gXFx0XFx0XFx0LyogVHlwZSBjaGVjayAqL1xcbiBcXHRcXHRcXHRpZiAoKnRwICE9IChvcHRpbmZvLVxcdTAwM2VvcHRzW3RlbXBdIFxcdTAwMjYgMHhGRjAwKSBcXHUwMDNlXFx1MDAzZSA4KSB7XFxuQEAgLTEyMSwxMiArMTE4LDEyIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXG4gXFx0XFx0XFx0XFx0LyogbGVuZ3RoIGZpZWxkIGV4aXN0cyA/ICovXFxuIFxcdFxcdFxcdFxcdGlmIChoZHJsZW4gXFx1MDAzYyAyKVxcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXHRcXHRcXHRcXHRscCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciArIDEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihfb3B0bGVuKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNl9vcHRsZW4pO1xcbi1cXHRcXHRcXHRcXHRpZiAobHAgPT0gTlVMTClcXG4tXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdGlmICghbHApXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0XFx0XFx0XFx0c3BlY19sZW4gPSBvcHRpbmZvLVxcdTAwM2VvcHRzW3RlbXBdIFxcdTAwMjYgMHgwMEZGO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcXHUwMDI2XFx1MDAyNiBzcGVjX2xlbiAhPSAqbHApIHtcXG5AQCAtMTQ0LDEwICsxNDEsMTAgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdFxcdFxcdC8qIFN0ZXAgdG8gdGhlIG5leHQgKi9cXG4gXFx0XFx0XFx0cHJfZGVidWcoXFxcImxlbiUwNFhcXFxcblxcXCIsIG9wdGxlbik7XFxuIFxcbi1cXHRcXHRcXHRpZiAoKHB0ciBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuIC0gb3B0bGVuIHx8IGhkcmxlbiBcXHUwMDNjIG9wdGxlbikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIHRlbXAgXFx1MDAzYyBvcHRpbmZvLVxcdTAwM2VvcHRzbnIgLSAxKSB7XFxuK1xcdFxcdFxcdGlmIChwdHIgXFx1MDAzZSBza2ItXFx1MDAzZWxlbiB8fCBvcHRsZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbiAtIHB0ciB8fFxcbitcXHRcXHRcXHQgICAgaGRybGVuIFxcdTAwM2Mgb3B0bGVuKSB7XFxuIFxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCJuZXcgcG9pbnRlciBpcyB0b28gbGFyZ2UhXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRwdHIgKz0gb3B0bGVuO1xcbiBcXHRcXHRcXHRoZHJsZW4gLT0gb3B0bGVuO1xcbkBAIC0xNTksNiArMTU2LDEwIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitob3Rkcm9wOlxcbitcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jXFxuaW5kZXggYzUyZmY5MjljOTNiMy4uYWVmOGY2OWRhN2ZiNSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcXG5AQCAtMjgsNyArMjgsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGlwNnRfaXB2NmhlYWRlcl9pbmZvICppbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxuIFxcdHVuc2lnbmVkIGludCB0ZW1wO1xcbi1cXHRpbnQgbGVuO1xcbiBcXHR1OCBuZXh0aGRyO1xcbiBcXHR1bnNpZ25lZCBpbnQgcHRyO1xcbiBcXG5AQCAtMzgsOCArMzcsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdG5leHRoZHIgPSBpcHY2X2hkcihza2IpLVxcdTAwM2VuZXh0aGRyO1xcbiBcXHQvKiBwb2ludGVyIHRvIHRoZSAxc3QgZXh0aGRyICovXFxuIFxcdHB0ciA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuLVxcdC8qIGF2YWlsYWJsZSBsZW5ndGggKi9cXG4tXFx0bGVuID0gc2tiLVxcdTAwM2VsZW4gLSBwdHI7XFxuIFxcdHRlbXAgPSAwO1xcbiBcXG4gXFx0d2hpbGUgKG5mX2lwNl9leHRfaGRyKG5leHRoZHIpKSB7XFxuQEAgLTUyLDkgKzQ5LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRcXHR0ZW1wIHw9IE1BU0tfTk9ORTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4tXFx0XFx0LyogSXMgdGhlcmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgbmV4dCBleHQgaGVhZGVyPyAqL1xcbi1cXHRcXHRpZiAobGVuIFxcdTAwM2MgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpXFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0LyogRVNQIC1cXHUwMDNlIGV2YWx1YXRlICovXFxuIFxcdFxcdGlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKSB7XFxuIFxcdFxcdFxcdHRlbXAgfD0gTUFTS19FU1A7XFxuQEAgLTk3LDcgKzkxLDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRuZXh0aGRyID0gaHAtXFx1MDAzZW5leHRoZHI7XFxuLVxcdFxcdGxlbiAtPSBoZHJsZW47XFxuIFxcdFxcdHB0ciArPSBoZHJsZW47XFxuIFxcdFxcdGlmIChwdHIgXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmNcXG5pbmRleCBkYjBmZDY0ZDg5ODYyLi42ZmNjNDAxMDJmZTNkIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jXFxuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmNcXG5AQCAtMjcsMjIgKzI3LDI3IEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4gXFx0c3RydWN0IGlwdjZfc3JfaGRyIF9zcmg7XFxuIFxcdGludCBoZHJsZW4sIHNyaG9mZiA9IDA7XFxuK1xcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbitcXHRlcnIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRU5PRU5UKVxcbitcXHRcXHRcXHRnb3RvIGhvdGRyb3A7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXHRzcmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzcmhvZmYsIHNpemVvZihfc3JoKSwgXFx1MDAyNl9zcmgpO1xcbiBcXHRpZiAoIXNyaClcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRnb3RvIGhvdGRyb3A7XFxuIFxcbiBcXHRoZHJsZW4gPSBpcHY2X29wdGxlbihzcmgpO1xcbiBcXHRpZiAoc2tiLVxcdTAwM2VsZW4gLSBzcmhvZmYgXFx1MDAzYyBoZHJsZW4pXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXG4gXFx0aWYgKHNyaC1cXHUwMDNldHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0aWYgKHNyaC1cXHUwMDNlc2VnbWVudHNfbGVmdCBcXHUwMDNlIHNyaC1cXHUwMDNlZmlyc3Rfc2VnbWVudClcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRnb3RvIGhvdGRyb3A7XFxuIFxcbiBcXHQvKiBOZXh0IEhlYWRlciBtYXRjaGluZyAqL1xcbiBcXHRpZiAoc3JoaW5mby1cXHUwMDNlbXRfZmxhZ3MgXFx1MDAyNiBJUDZUX1NSSF9ORVhUSERSKVxcbkBAIC0xMTEsNiArMTE2LDEwIEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRcXHRcXHQhKHNyaC1cXHUwMDNldGFnID09IHNyaGluZm8tXFx1MDAzZXRhZykpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdHJldHVybiB0cnVlO1xcbitcXG4raG90ZHJvcDpcXG4rXFx0cGFyLVxcdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuQEAgLTEyMSwyMiArMTMwLDMxIEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0c3RydWN0IGluNl9hZGRyIF9wc2lkLCBfbnNpZCwgX2xzaWQ7XFxuIFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiBcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgX3NyaDtcXG4rXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcXHUwMDNjIDApXFxuK1xcdGVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCBcXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRpZiAoZXJyICE9IC1FTk9FTlQpXFxuK1xcdFxcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuIFxcdHNyaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNyaG9mZiwgc2l6ZW9mKF9zcmgpLCBcXHUwMDI2X3NyaCk7XFxuIFxcdGlmICghc3JoKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFxuIFxcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7XFxuIFxcdGlmIChza2ItXFx1MDAzZWxlbiAtIHNyaG9mZiBcXHUwMDNjIGhkcmxlbilcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRnb3RvIGhvdGRyb3A7XFxuIFxcbiBcXHRpZiAoc3JoLVxcdTAwM2V0eXBlICE9IElQVjZfU1JDUlRfVFlQRV80KVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHRpZiAoc2l6ZW9mKCpzcmgpICtcXG4rXFx0ICAgICgoc3JoLVxcdTAwM2VmaXJzdF9zZWdtZW50ICsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgXFx1MDAzZSBoZHJsZW4pXFxuK1xcdFxcdGdvdG8gaG90ZHJvcDtcXG4rXFxuIFxcdGlmIChzcmgtXFx1MDAzZXNlZ21lbnRzX2xlZnQgXFx1MDAzZSBzcmgtXFx1MDAzZWZpcnN0X3NlZ21lbnQpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXG4gXFx0LyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi9cXG4gXFx0aWYgKHNyaGluZm8tXFx1MDAzZW10X2ZsYWdzIFxcdTAwMjYgSVA2VF9TUkhfTkVYVEhEUilcXG5AQCAtMjA3LDcgKzIyNSw3IEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0XFx0ICAoKHNyaC1cXHUwMDNlc2VnbWVudHNfbGVmdCArIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xcbiBcXHRcXHRwc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHNpZG9mZiwgc2l6ZW9mKF9wc2lkKSwgXFx1MDAyNl9wc2lkKTtcXG4gXFx0XFx0aWYgKCFwc2lkKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0XFx0aWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9QU0lELFxcbiBcXHRcXHRcXHRcXHRpcHY2X21hc2tlZF9hZGRyX2NtcChwc2lkLCBcXHUwMDI2c3JoaW5mby1cXHUwMDNlcHNpZF9tc2ssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNyaGluZm8tXFx1MDAzZXBzaWRfYWRkcikpKVxcbkBAIC0yMjIsNyArMjQwLDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRcXHQgICgoc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0IC0gMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7XFxuIFxcdFxcdG5zaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBuc2lkb2ZmLCBzaXplb2YoX25zaWQpLCBcXHUwMDI2X25zaWQpO1xcbiBcXHRcXHRpZiAoIW5zaWQpXFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXHRcXHRpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX05TSUQsXFxuIFxcdFxcdFxcdFxcdGlwdjZfbWFza2VkX2FkZHJfY21wKG5zaWQsIFxcdTAwMjZzcmhpbmZvLVxcdTAwM2Vuc2lkX21zayxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c3JoaW5mby1cXHUwMDNlbnNpZF9hZGRyKSkpXFxuQEAgLTIzNCwxMyArMjUyLDE3IEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0bHNpZG9mZiA9IHNyaG9mZiArIHNpemVvZihzdHJ1Y3QgaXB2Nl9zcl9oZHIpO1xcbiBcXHRcXHRsc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbHNpZG9mZiwgc2l6ZW9mKF9sc2lkKSwgXFx1MDAyNl9sc2lkKTtcXG4gXFx0XFx0aWYgKCFsc2lkKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0XFx0aWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9MU0lELFxcbiBcXHRcXHRcXHRcXHRpcHY2X21hc2tlZF9hZGRyX2NtcChsc2lkLCBcXHUwMDI2c3JoaW5mby1cXHUwMDNlbHNpZF9tc2ssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNyaGluZm8tXFx1MDAzZWxzaWRfYWRkcikpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuK1xcbitob3Rkcm9wOlxcbitcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc3JoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjg6NTYuODc5OTk4MTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTExMTc2NTc3NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQNl9ORl9JUFRBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJJUDZfTkZfTUFUQ0hfT1BUU1wiLFxuICAgIFwiSVA2X05GX01BVENIX0lQVjZIRUFERVJcIixcbiAgICBcIklQNl9ORl9NQVRDSF9TUkhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYmhfbXQ2XCIsXG4gICAgXCJpcHY2aGVhZGVyX210NlwiLFxuICAgIFwic3JoX210NlwiLFxuICAgIFwic3JoMV9tdDZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IG5ldGZpbHRlciBtYXRjaCBleHRlbnNpb25zIChoYmgsIGlwdjZoZWFkZXIsIHNyaCkgdG8gcHJvcGVybHkgZHJvcCBwYWNrZXRzIHdpdGggbWFsZm9ybWVkIGV4dGVuc2lvbiBoZWFkZXJzIGJ5IHNldHRpbmcgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UgKHdoaWNoIHdvdWxkIGFsbG93IHRoZSBwYWNrZXQgdG8gY29udGludWUgdHJhdmVyc2FsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBmaWx0ZXJpbmcgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBtYWxmb3JtZWQgcGFja2V0cyBhcmUgaGFuZGxlZCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTA1ZjFiOGVjYzIyMDFlYWE1NWUxNDhjZmExYTRiNjg4M2MwM2QwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG5pbmRleCA2ZDFhNWQyMDI2YTY3Li45ZjA0YjRkOGYxNmZmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG5AQCAtNjIsMjEgKzYyLDE4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdCAgICBORVhUSERSX0hPUCA6IE5FWFRIRFJfREVTVCwgTlVMTCwgTlVMTCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbi1cdFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksIFx1MDAyNl9vcHRzaCk7XG4tXHRpZiAob2ggPT0gTlVMTCkge1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbitcdGlmICghb2gpXG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKG9oKTtcbiBcdGlmIChza2ItXHUwMDNlbGVuIC0gcHRyIFx1MDAzYyBoZHJsZW4pIHtcbi1cdFx0LyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdCdzIGxlbmd0aCBmaWVsZCAqL1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0LyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdHMgbGVuZ3RoIGZpZWxkICovXG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcdH1cbiBcbiBcdHByX2RlYnVnKFwiSVB2NiBPUFRTIExFTiAldSAldSBcIiwgaGRybGVuLCBvaC1cdTAwM2VoZHJsZW4pO1xuQEAgLTEwNCw4ICsxMDEsOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdHRwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX29wdHR5cGUpLFxuIFx0XHRcdFx0XHRcdFx1MDAyNl9vcHR0eXBlKTtcbi1cdFx0XHRpZiAodHAgPT0gTlVMTClcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmICghdHApXG4rXHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXG4gXHRcdFx0LyogVHlwZSBjaGVjayAqL1xuIFx0XHRcdGlmICgqdHAgIT0gKG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHhGRjAwKSBcdTAwM2VcdTAwM2UgOCkge1xuQEAgLTEyMSwxMiArMTE4LDEyIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFxuIFx0XHRcdFx0LyogbGVuZ3RoIGZpZWxkIGV4aXN0cyA/ICovXG4gXHRcdFx0XHRpZiAoaGRybGVuIFx1MDAzYyAyKVxuLVx0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRcdFx0bHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIgKyAxLFxuIFx0XHRcdFx0XHRcdFx0c2l6ZW9mKF9vcHRsZW4pLFxuIFx0XHRcdFx0XHRcdFx0XHUwMDI2X29wdGxlbik7XG4tXHRcdFx0XHRpZiAobHAgPT0gTlVMTClcbi1cdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHRpZiAoIWxwKVxuK1x0XHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdFx0XHRzcGVjX2xlbiA9IG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHgwMEZGO1xuIFxuIFx0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKSB7XG5AQCAtMTQ0LDEwICsxNDEsMTAgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0LyogU3RlcCB0byB0aGUgbmV4dCAqL1xuIFx0XHRcdHByX2RlYnVnKFwibGVuJTA0WFxcblwiLCBvcHRsZW4pO1xuIFxuLVx0XHRcdGlmICgocHRyIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gb3B0bGVuIHx8IGhkcmxlbiBcdTAwM2Mgb3B0bGVuKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnIgLSAxKSB7XG4rXHRcdFx0aWYgKHB0ciBcdTAwM2Ugc2tiLVx1MDAzZWxlbiB8fCBvcHRsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBwdHIgfHxcbitcdFx0XHQgICAgaGRybGVuIFx1MDAzYyBvcHRsZW4pIHtcbiBcdFx0XHRcdHByX2RlYnVnKFwibmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwiKTtcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRcdH1cbiBcdFx0XHRwdHIgKz0gb3B0bGVuO1xuIFx0XHRcdGhkcmxlbiAtPSBvcHRsZW47XG5AQCAtMTU5LDYgKzE1NiwxMCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdHJldHVybiBmYWxzZTtcbitcbitob3Rkcm9wOlxuK1x0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhiaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jXG5pbmRleCBjNTJmZjkyOWM5M2IzLi5hZWY4ZjY5ZGE3ZmI1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcbkBAIC0yOCw3ICsyOCw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8gKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuIFx0dW5zaWduZWQgaW50IHRlbXA7XG4tXHRpbnQgbGVuO1xuIFx0dTggbmV4dGhkcjtcbiBcdHVuc2lnbmVkIGludCBwdHI7XG4gXG5AQCAtMzgsOCArMzcsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRuZXh0aGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VuZXh0aGRyO1xuIFx0LyogcG9pbnRlciB0byB0aGUgMXN0IGV4dGhkciAqL1xuIFx0cHRyID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbi1cdC8qIGF2YWlsYWJsZSBsZW5ndGggKi9cbi1cdGxlbiA9IHNrYi1cdTAwM2VsZW4gLSBwdHI7XG4gXHR0ZW1wID0gMDtcbiBcbiBcdHdoaWxlIChuZl9pcDZfZXh0X2hkcihuZXh0aGRyKSkge1xuQEAgLTUyLDkgKzQ5LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdHRlbXAgfD0gTUFTS19OT05FO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdC8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi9cbi1cdFx0aWYgKGxlbiBcdTAwM2MgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHQvKiBFU1AgLVx1MDAzZSBldmFsdWF0ZSAqL1xuIFx0XHRpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkge1xuIFx0XHRcdHRlbXAgfD0gTUFTS19FU1A7XG5AQCAtOTcsNyArOTEsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdH1cbiBcbiBcdFx0bmV4dGhkciA9IGhwLVx1MDAzZW5leHRoZHI7XG4tXHRcdGxlbiAtPSBoZHJsZW47XG4gXHRcdHB0ciArPSBoZHJsZW47XG4gXHRcdGlmIChwdHIgXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY1xuaW5kZXggZGIwZmQ2NGQ4OTg2Mi4uNmZjYzQwMTAyZmUzZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY1xuQEAgLTI3LDIyICsyNywyNyBAQCBzdGF0aWMgYm9vbCBzcmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIFx0c3RydWN0IGlwdjZfc3JfaGRyIF9zcmg7XG4gXHRpbnQgaGRybGVuLCBzcmhvZmYgPSAwO1xuK1x0aW50IGVycjtcbiBcbi1cdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuK1x0ZXJyID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKTtcbitcdGlmIChlcnIgXHUwMDNjIDApIHtcbitcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuK1x0XHRcdGdvdG8gaG90ZHJvcDtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFx0c3JoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3Job2ZmLCBzaXplb2YoX3NyaCksIFx1MDAyNl9zcmgpO1xuIFx0aWYgKCFzcmgpXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aGRybGVuID0gaXB2Nl9vcHRsZW4oc3JoKTtcbiBcdGlmIChza2ItXHUwMDNlbGVuIC0gc3Job2ZmIFx1MDAzYyBoZHJsZW4pXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aWYgKHNyaC1cdTAwM2V0eXBlICE9IElQVjZfU1JDUlRfVFlQRV80KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoc3JoLVx1MDAzZXNlZ21lbnRzX2xlZnQgXHUwMDNlIHNyaC1cdTAwM2VmaXJzdF9zZWdtZW50KVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdC8qIE5leHQgSGVhZGVyIG1hdGNoaW5nICovXG4gXHRpZiAoc3JoaW5mby1cdTAwM2VtdF9mbGFncyBcdTAwMjYgSVA2VF9TUkhfTkVYVEhEUilcbkBAIC0xMTEsNiArMTE2LDEwIEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdFx0IShzcmgtXHUwMDNldGFnID09IHNyaGluZm8tXHUwMDNldGFnKSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4rXG4raG90ZHJvcDpcbitcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuQEAgLTEyMSwyMiArMTMwLDMxIEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdHN0cnVjdCBpbjZfYWRkciBfcHNpZCwgX25zaWQsIF9sc2lkO1xuIFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgX3NyaDtcbitcdGludCBlcnI7XG4gXG4tXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbitcdGVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbitcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcdHNyaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNyaG9mZiwgc2l6ZW9mKF9zcmgpLCBcdTAwMjZfc3JoKTtcbiBcdGlmICghc3JoKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7XG4gXHRpZiAoc2tiLVx1MDAzZWxlbiAtIHNyaG9mZiBcdTAwM2MgaGRybGVuKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGlmIChzcmgtXHUwMDNldHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0aWYgKHNpemVvZigqc3JoKSArXG4rXHQgICAgKChzcmgtXHUwMDNlZmlyc3Rfc2VnbWVudCArIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIFx1MDAzZSBoZHJsZW4pXG4rXHRcdGdvdG8gaG90ZHJvcDtcbitcbiBcdGlmIChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCBcdTAwM2Ugc3JoLVx1MDAzZWZpcnN0X3NlZ21lbnQpXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0LyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi9cbiBcdGlmIChzcmhpbmZvLVx1MDAzZW10X2ZsYWdzIFx1MDAyNiBJUDZUX1NSSF9ORVhUSERSKVxuQEAgLTIwNyw3ICsyMjUsNyBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0ICAoKHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0ICsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7XG4gXHRcdHBzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwc2lkb2ZmLCBzaXplb2YoX3BzaWQpLCBcdTAwMjZfcHNpZCk7XG4gXHRcdGlmICghcHNpZClcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX1BTSUQsXG4gXHRcdFx0XHRpcHY2X21hc2tlZF9hZGRyX2NtcChwc2lkLCBcdTAwMjZzcmhpbmZvLVx1MDAzZXBzaWRfbXNrLFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2c3JoaW5mby1cdTAwM2Vwc2lkX2FkZHIpKSlcbkBAIC0yMjIsNyArMjQwLDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdCAgKChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCAtIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuIFx0XHRuc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbnNpZG9mZiwgc2l6ZW9mKF9uc2lkKSwgXHUwMDI2X25zaWQpO1xuIFx0XHRpZiAoIW5zaWQpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGdvdG8gaG90ZHJvcDtcbiBcdFx0aWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9OU0lELFxuIFx0XHRcdFx0aXB2Nl9tYXNrZWRfYWRkcl9jbXAobnNpZCwgXHUwMDI2c3JoaW5mby1cdTAwM2Vuc2lkX21zayxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnNyaGluZm8tXHUwMDNlbnNpZF9hZGRyKSkpXG5AQCAtMjM0LDEzICsyNTIsMTcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRsc2lkb2ZmID0gc3Job2ZmICsgc2l6ZW9mKHN0cnVjdCBpcHY2X3NyX2hkcik7XG4gXHRcdGxzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsc2lkb2ZmLCBzaXplb2YoX2xzaWQpLCBcdTAwMjZfbHNpZCk7XG4gXHRcdGlmICghbHNpZClcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX0xTSUQsXG4gXHRcdFx0XHRpcHY2X21hc2tlZF9hZGRyX2NtcChsc2lkLCBcdTAwMjZzcmhpbmZvLVx1MDAzZWxzaWRfbXNrLFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2c3JoaW5mby1cdTAwM2Vsc2lkX2FkZHIpKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbitcbitob3Rkcm9wOlxuK1x0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNyaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyODo1Ni44Nzk5OTkyNDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODMxMzk0NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldGZpbHRlciBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jYCwgYG5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuY2AsIGFuZCBgbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSByZXBsYWNpbmcgYHJldHVybiBmYWxzZTtgIHdpdGggYSBgZ290byBob3Rkcm9wO2AgY29uc3RydWN0LiBFc3NlbnRpYWxseSwgaXQgc2V0cyBgcGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO2AgYmVmb3JlIHJldHVybmluZyBgZmFsc2U7YCBpbiB0aGVzZSBmdW5jdGlvbnMuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0byBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVyIG1hdGNoaW5nLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIGluIGBpcDZ0X2lwdjZoZWFkZXIuY2AsIEkgc2VlIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiB0aGV5J3ZlIHJlbW92ZWQgdGhlIGBsZW5gIHZhcmlhYmxlIGFuZCBpdHMgYm91bmRzIGNoZWNrcywgb3B0aW5nIHRvIHVzZSBgcHRyIFx1MDAzZSBza2ItXHUwMDNlbGVuYCBpbnN0ZWFkLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuLi5cblxuYGBgY1xuLVx0XHQvKiBJcyB0aGVyZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXh0IGV4dCBoZWFkZXI/ICovXG4tXHRcdGlmIChsZW4gXHUwMDNjIChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbmBgYFxuXG5BaCwgaXQncyByZW1vdmVkIHRoaXMuIElzIHRoaXMgc2FmZT8gTGV0IG1lIHNlZS4uLiB5ZXMsIGBza2JfaGVhZGVyX3BvaW50ZXJgIGhhbmRsZXMgdGhlIGJvdW5kcyBjaGVja2luZy4gQW5kIGxvb2tpbmcgYXQgdGhlIGNvZGUgYGlwdjZoZWFkZXJfbXQ2YCB1c2VzIGBocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9oZHIpLCBcdTAwMjZfaGRyKTtgIHdoaWNoIGRvZXMgaW5kZWVkIGhhdmUgYm91bmRzIGNoZWNraW5nLlxuXG5SaWdodCwgc28gdGhlIGludGVudCBoZXJlIGlzIG5vdCBqdXN0IGEgc3RhbmRhcmQgbWF0Y2gtb3Itbm90IG1hdGNoLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgKmRyb3BwaW5nKiBwYWNrZXRzIHdoZW4gdGhlIGhlYWRlcnMgYXJlIG1hbGZvcm1lZCwgaGVuY2UgYGhvdGRyb3BgLiBJbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGBmYWxzZWAgKG1lYW5pbmcgdGhlIHJ1bGUgZG9lc24ndCBtYXRjaCBhbmQgdGhlIHBhY2tldCBjb250aW51ZXMgaXRzIHBhdGgpLCBzZXR0aW5nIGBwYXItXHUwMDNlaG90ZHJvcCA9IHRydWVgIHRlbGxzIG5ldGZpbHRlciB0byBpbW1lZGlhdGVseSBkcm9wIHRoZSBwYWNrZXQsIGJlY2F1c2UgaXQncyBkZWVtZWQgdG8gYmUgbWFsZm9ybWVkLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZDogYGhiaF9tdDZgLCBgaXB2NmhlYWRlcl9tdDZgLCBgc3JoX210NmAsIGFuZCBgc3JoMV9tdDZgLiBZZXAsIHRoZXNlIGFyZSBhbGwgdGhlIG1hdGNoIGZ1bmN0aW9ucyBmb3IgdGhlIGlwNnRhYmxlcy9pcDZ0IG1vZHVsZXMuIEFuZCB0aG9zZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBuZXRmaWx0ZXIgcnVsZXMuIEkganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBJUDZfTkZfTUFUQ0hfSEJIYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4gTGV0J3MgY29uZmlybSB0aG9zZSBhcmUgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MDUuNzExMzk2NTIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTc2OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUDZfTkZfTUFUQ0hfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTkzPWlmIElQNl9ORl9JUFRBQkxFU1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctOTUtIyBUaGUgc2ltcGxlIG1hdGNoZXMuXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6OTY6Y29uZmlnIElQNl9ORl9NQVRDSF9BSFxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTk3LVxcdHRyaXN0YXRlICdcXFwiYWhcXFwiIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMDMtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTA0OmNvbmZpZyBJUDZfTkZfTUFUQ0hfRVVJNjRcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgJ1xcXCJldWk2NFxcXCIgYWRkcmVzcyBjaGVjaydcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTExMy1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIElQNl9ORl9NQVRDSF9GUkFHXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTE1LVxcdHRyaXN0YXRlICdcXFwiZnJhZ1xcXCIgRnJhZ21lbnRhdGlvbiBoZWFkZXIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIElQNl9ORl9NQVRDSF9PUFRTXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTI0LVxcdHRyaXN0YXRlICdcXFwiaGJoXFxcIiBob3AtYnktaG9wIGFuZCBcXFwiZHN0XFxcIiBvcHRzIGhlYWRlciBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTMxLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEzMjpjb25maWcgSVA2X05GX01BVENIX0hMXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTMzLVxcdHRyaXN0YXRlICdcXFwiaGxcXFwiIGhvcGxpbWl0IG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNDAtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTQxOmNvbmZpZyBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSAnXFxcImlwdjZoZWFkZXJcXFwiIElQdjYgRXh0ZW5zaW9uIEhlYWRlcnMgTWF0Y2gnXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTUwOmNvbmZpZyBJUDZfTkZfTUFUQ0hfTUhcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgJ1xcXCJtaFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE1Ny1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxNTg6Y29uZmlnIElQNl9ORl9NQVRDSF9SUEZJTFRFUlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSAnXFxcInJwZmlsdGVyXFxcIiByZXZlcnNlIHBhdGggZmlsdGVyIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTY5OmNvbmZpZyBJUDZfTkZfTUFUQ0hfUlRcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNzAtXFx0dHJpc3RhdGUgJ1xcXCJydFxcXCIgUm91dGluZyBoZWFkZXIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE3Ny1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxNzg6Y29uZmlnIElQNl9ORl9NQVRDSF9TUkhcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNzktXFx0dHJpc3RhdGUgJ1xcXCJzcmhcXFwiIFNlZ21lbnQgUm91dGluZyBoZWFkZXIgbWF0Y2ggc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MDUuNzc1MzgzMjI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NzUyNzk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXM6XG5cbioqRXhhbWluaW5nIElQdjYgTmV0ZmlsdGVyIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbnMg4oCTIGBJUDZfTkZfTUFUQ0hfT1BUU2AsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzb2NpYXRlIGBJUDZfTkZfTUFUQ0hfT1BUU2Agd2l0aCBoYW5kbGluZyBIb3AtYnktSG9wIChoYmgpIG9wdGlvbnMsIGFuZCBwb3NzaWJseSBEZXN0aW5hdGlvbiBPcHRpb25zIChgZHN0YCBvcHRzKSB0b28uIEJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgZGV0YWlscyBjYW4gYmUgdHJpY2t5IGFuZCBhIHF1aWNrIHJlZnJlc2hlciBpcyBhbHdheXMgYSBnb29kIGlkZWEuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuXG5cblRoZXJlZm9yZSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZWAgZmlsZS4gSXQncyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhhdCBzaG91bGQgc2V0dGxlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODY1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MDkuOTQyOTEzODMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MDExOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNnRfaGJoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU9MzY9b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9NSCkgKz0gaXA2dF9taC5vXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUykgKz0gaXA2dF9oYmgub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfSVA2X05GX01BVENIX1JQRklMVEVSKSArPSBpcDZ0X3JwZmlsdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTAuMDA4OTMxOTkxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyMzk0NTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJJ20gcHJldHR5IHN1cmUgSSd2ZSBnb3QgdGhpcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIE5ldGZpbHRlciBkZWZpbmVzIGZvciBJUHY2IG1hdGNoaW5nLiBSaWdodCwgKipOZXR3b3JrIEZpbHRlciBhbmQgSVB2NiBIZWFkZXIgTWF0Y2hlcyoqLiBJJ20gZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIGBJUDZfTkZfTUFUQ0hfT1BUU2AgYW5kIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAgZm9yIHRoZSBgaXA2dF9pcHY2aGVhZGVyLm9gIG1vZHVsZS4gQW5kLCBJIHJlY2FsbCBub3csIGZvciB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciBtb2R1bGUsIEknbGwgbmVlZCBgSVA2X05GX01BVENIX1NSSGAgZm9yIGBpcDZ0X3NyaC5vYC5cblxuTm93LCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlYC4gSXQncyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IHRoYXQgSSBoYXZlIGlkZW50aWZpZWQgYWxsIHJlbGV2YW50IGRlZmluZXMgZm9yIHRoZSB0YXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjk0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTQuODMyODgwMDk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDU0ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNnRfaXB2NmhlYWRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRykgKz0gaXA2dF9mcmFnLm9cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSKSArPSBpcDZ0X2lwdjZoZWFkZXIub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0zNi1vYmotJChDT05GSUdfSVA2X05GX01BVENIX01IKSArPSBpcDZ0X21oLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTQuOTEwOTQwNTMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk0ODE5Njc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjc3MjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjE2Ljg1OTE0MDEyNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MzY3MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNnRfc3JoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzk9b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SVCkgKz0gaXA2dF9ydC5vXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfU1JIKSArPSBpcDZ0X3NyaC5vXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOToxNi45Njc1MTYwMTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU3OTY4NzU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk5ldHdvcmsgRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24gQ29uY2VybnMqKlxuXG5SaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBJUDZfTkZfTUFUQ0hfT1BUU2AsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuIEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uc29tZXRoaW5nIGZlZWxzIG9mZi4gV2hhdCBhYm91dCBgSVA2X05GX0lQVEFCTEVTYD8gSXQgaGFzIHRvIGJlIGEgZGVwZW5kZW5jeSBmb3IgdGhlc2Ugb3RoZXIgbWF0Y2ggb3B0aW9ucywgZG9lc24ndCBpdD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSVA2X05GX01BVENIX09QVFNgIHRoZXJlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBJIGNvbnRpbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MjEuNTQ3MjA3NTIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg2MjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVA2X05GX01BVENIX09QVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MTE0PWNvbmZpZyBJUDZfTkZfTUFUQ0hfRlJBR1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgSVA2X05GX01BVENIX09QVFNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXFx0dHJpc3RhdGUgJ1xcXCJoYmhcXFwiIGhvcC1ieS1ob3AgYW5kIFxcXCJkc3RcXFwiIG9wdHMgaGVhZGVyIG1hdGNoIHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjIxLjYxMjA3NTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE2MjU2Nzk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgYWx3YXlzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIHdlYiBvZiBpbnRlcmNvbm5lY3Rpb25zIGF0IHBsYXkgaGVyZS4gRm9yZ2V0IHRoZSBzdXJmYWNlIGxldmVsIGZvciBhIG1vbWVudDsgSSBuZWVkIHRvIGRpZyBkZWVwLiBJIHdhbnQgdG8gaWRlbnRpZnkgKmV2ZXJ5KiBkZXBlbmRlbmN5LCBib3RoIGV4cGxpY2l0IGFuZCBpbXBsaWNpdC4gVGhhdCBtZWFucyBjb25zaWRlcmluZyBub3QganVzdCB0aGUgZGlyZWN0IGxpbmtzLCB0aGUgb2J2aW91cyByZWxhdGlvbnNoaXBzLCBidXQgYWxzbyB0aGUgY2FzY2FkaW5nIGVmZmVjdHMsIHRoZSBwb3RlbnRpYWwgc2lkZS1jaGFubmVsIGluZmx1ZW5jZXMsIGFuZCBhbnkgYXNzdW1wdGlvbnMgdGhhdCBtYXkgYmUgYmFrZWQgaW4uIEFyZSB0aGVzZSBkZXBlbmRlbmNpZXMgd2VsbC1kb2N1bWVudGVkPyBBcmUgdGhleSB2ZXJzaW9uLWxvY2tlZCBhcHByb3ByaWF0ZWx5PyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlLCBhbmQgd2hhdCBhcmUgdGhlIG1pdGlnYXRpb25zIGluIHBsYWNlLCBvciAqbm90KiBpbiBwbGFjZT8gVGhpcyBpc24ndCBqdXN0IGFib3V0IGRyYXdpbmcgYSBwcmV0dHkgZGVwZW5kZW5jeSBncmFwaDsgaXQncyBhYm91dCBhbnRpY2lwYXRpbmcgdGhlIGJyZWFraW5nIHBvaW50cywgdGhlIHZ1bG5lcmFiaWxpdGllcywgdGhlIGFyZWFzIHdoZXJlIGEgc2VlbWluZ2x5IG1pbm9yIGNoYW5nZSBjb3VsZCB0cmlnZ2VyIGEgY2F0YXN0cm9waGljIGNhc2NhZGUuIEknbSBsb29raW5nIGZvciB0aGUgd2Vha2VzdCBsaW5rcywgdGhlIGNvbXBvbmVudHMgdGhhdCBhcmUgb3BlcmF0aW5nIHdpdGhvdXQgc3VmZmljaWVudCBvdmVyc2lnaHQgb3Igcm9idXN0IGVycm9yIGhhbmRsaW5nLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRvd25zdHJlYW0gaW1wYWN0IG9mIGVhY2ggcG90ZW50aWFsIGZhaWx1cmUuIEknbSB0cnlpbmcgdG8gcGljdHVyZSB0aGUgcmlwcGxlIGVmZmVjdCBhbmQgdGhlIG1pdGlnYXRpb24gc3RyYXRlZ2llcyB0aGF0IHdpbGwgYmUgcmVxdWlyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIGRlcGVuZGVuY2llcyBleGlzdCwgd2hhdCB0aGV5IGNvbnRyaWJ1dGUsIGFuZCBpZiB0aGV5J3JlIGFjdHVhbGx5ICpuZWNlc3NhcnkqLiBPZnRlbiwgb3B0aW1pemF0aW9uIGJlZ2lucyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOToyNy43NzQ2NDYzNTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcbiAxMjE6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTIyOlxcdFxcbiAxMjM6XFx0Y29uZmlnIElQNl9ORl9NQVRDSF9PUFRTXFxuIDEyNDpcXHRcXHR0cmlzdGF0ZSAnXFxcImhiaFxcXCIgaG9wLWJ5LWhvcCBhbmQgXFxcImRzdFxcXCIgb3B0cyBoZWFkZXIgbWF0Y2ggc3VwcG9ydCdcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDEyNjpcXHRcXHRoZWxwXFxuIDEyNzpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBob3AtYnktaG9wXFxuIDEyODpcXHRcXHQgIGFuZCBkZXN0aW5hdGlvbiBvcHRpb25zIGhlYWRlcnMgb2YgYSBwYWNrZXQuXFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEzMTpcXHRcXG4gMTMyOlxcdGNvbmZpZyBJUDZfTkZfTUFUQ0hfSExcXG4gMTMzOlxcdFxcdHRyaXN0YXRlICdcXFwiaGxcXFwiIGhvcGxpbWl0IG1hdGNoIHN1cHBvcnQnXFxuIDEzNDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAxMzU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9YVF9NQVRDSF9ITFxcbiAxMzY6XFx0XFx0aGVscFxcbiAxMzc6XFx0XFx0ICBUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2VcXG4gMTM4OlxcdFxcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcXG4gMTM5OlxcdFxcdCAgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MjcuNzc0NzA1NDg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MjM3NDA4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSVB2NiBOZXRmaWx0ZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgSVB2NiBOZXRmaWx0ZXIgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmZXcgdGhpbmdzIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIHRoaXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGUgcHJlc2VuY2Ugb2YgdGhhdCBgTkVURklMVEVSX0FEVkFOQ0VEYCBvcHRpb24gaXMgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlZC4gVGhhdCBzZWVtcyBpbXBvcnRhbnQsIGdpdmVuIGl0cyByb2xlIGhlcmUuXG5cbkFscmlnaHQsIHNvIHRoZSBrZXkgZGVwZW5kZW5jeSBzZWVtcyB0byBiZSB0aWVkIHRvIGBJUDZfTkZfSVBUQUJMRVNgLiBBcyBJIHVuZGVyc3RhbmQgaXQsIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gYmUgYXZhaWxhYmxlLiBCdXQgaG9sZCBvbi4uLiBJdCBzZWVtcyB0aGF0IGBJUDZfTkZfSVBUQUJMRVNgIGl0c2VsZiByZWxpZXMgb24gYE5FVEZJTFRFUl9YVEFCTEVTYC4gU28gdGhhdCdzIGFub3RoZXIgcHJlcmVxdWlzaXRlLiBHb3QgaXQuIFNvIGZhciwgdGhlIGRlcGVuZGVudCBtb2R1bGVzIGFyZTpcblxuKiAgIGBJUDZfTkZfSVBUQUJMRVNgXG4qICAgYElQNl9ORl9NQVRDSF9PUFRTYFxuKiAgIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmBcbiogICBgSVA2X05GX01BVENIX1NSSGBcblxuTm93LCBsb29raW5nIGF0IHRoZSBjb3JlIGZ1bmN0aW9ucywgdGhlIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBhcmU6XG5cbiogICBgaGJoX210NmBcbiogICBgaXB2NmhlYWRlcl9tdDZgXG4qICAgYHNyaF9tdDZgXG4qICAgYHNyaDFfbXQ2YFxuXG5BaCwgSSBzZWUgdGhhdCBgaGJoX210NmAgaXMgbWFya2VkIGFzIHN0YXRpYy4gQmV0dGVyIGNoZWNrIGBpcDZ0X2hiaC5jYCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBzY29wZS4gSSBuZWVkIHRvIGJlIGNhcmVmdWwsIGFzIHN0YXRpYyBjYW4gaW5kaWNhdGUgaXNzdWVzIHdpdGggYmVpbmcgbG9hZGVkIGFzIGEgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTE4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MzMuNDk4NDUwNTExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTAwNDk2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYmhfbXQ2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jPTIzPU1PRFVMRV9BTElBUyhcXFwiaXA2dF9kc3RcXFwiKTtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTQwLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjQxOnN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggaGJoX210Nl9yZWdbXSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTQyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jPTQzPXN0YXRpYyBib29sXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6NDQ6aGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtNDUte1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtNjAtXFx0ZXJyID0gaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZwdHIsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6NjE6XFx0XFx0XFx0ICAgIChwYXItXFx1MDAzZW1hdGNoID09IFxcdTAwMjZoYmhfbXQ2X3JlZ1swXSkgP1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTYyLVxcdFxcdFxcdCAgICBORVhUSERSX0hPUCA6IE5FWFRIRFJfREVTVCwgTlVMTCwgTlVMTCk7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xNjQtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MTY1OnN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xNjYte1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMTg1LVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE4NjpzdGF0aWMgc3RydWN0IHh0X21hdGNoIGhiaF9tdDZfcmVnW10gX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xODctXFx0e1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE4ODpcXHRcXHQvKiBOb3RlLCBoYmhfbXQ2IHJlbGllcyBvbiB0aGUgb3JkZXIgb2YgaGJoX210Nl9yZWcgKi9cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xODktXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJoYmhcXFwiLFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE5MC1cXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MTkxOlxcdFxcdC5tYXRjaFxcdFxcdD0gaGJoX210NixcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xOTItXFx0XFx0Lm1hdGNoc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBpcDZ0X29wdHMpLFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE5MzpcXHRcXHQuY2hlY2tlbnRyeVxcdD0gaGJoX210Nl9jaGVjayxcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xOTQtXFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE5OC1cXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MTk5OlxcdFxcdC5tYXRjaFxcdFxcdD0gaGJoX210NixcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0yMDAtXFx0XFx0Lm1hdGNoc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBpcDZ0X29wdHMpLFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIwMTpcXHRcXHQuY2hlY2tlbnRyeVxcdD0gaGJoX210Nl9jaGVjayxcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0yMDItXFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIwNS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzoyMDY6c3RhdGljIGludCBfX2luaXQgaGJoX210Nl9pbml0KHZvaWQpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjA3LXtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzoyMDg6XFx0cmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMoaGJoX210Nl9yZWcsIEFSUkFZX1NJWkUoaGJoX210Nl9yZWcpKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0yMDktfVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIxMC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzoyMTE6c3RhdGljIHZvaWQgX19leGl0IGhiaF9tdDZfZXhpdCh2b2lkKVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIxMi17XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MjEzOlxcdHh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhoYmhfbXQ2X3JlZywgQVJSQVlfU0laRShoYmhfbXQ2X3JlZykpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIxNC19XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjE1LVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIxNjptb2R1bGVfaW5pdChoYmhfbXQ2X2luaXQpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIxNzptb2R1bGVfZXhpdChoYmhfbXQ2X2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTozMy41NzM0NjE1OTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQyODMxMTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0YXRpYyBGdW5jdGlvbiBRdWVzdGlvbioqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgY2xlYXI6IGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgZ2V0IGlubGluZWQuIEluaXRpYWxseSwgbXkgbWluZCBqdW1wZWQgdG8gYGhiaF9tdDZgLiBCdXQgd2FpdCwgYGhiaF9tdDZgICppcyogYSBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkIGluIGB4dF9tYXRjaGAuIEJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIHRoZSBjb21waWxlciB3b24ndCBpbmxpbmUgaXQ7IGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFNvLCB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpZiB3ZSAqZGlkKiB3YW50IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCB3aGVyZSB3b3VsZCB0aGV5IGJlPyBJcyBgeHRfcmVnaXN0ZXJfbWF0Y2hlc2AgdGhlIGVudHJ5PyBObywgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBmb3IgcGFja2V0IG1hdGNoaW5nIGlzIHJlYWxseSBtb3JlIGxpa2UgYGlwNnRfZG9fdGFibGVgLCBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0IGBoYmhfbXQ2YCBpcyB0aGUgcmVhbCBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgbW9kaWZpZWQgaGVyZS5cblxuVGhpbmtpbmcgdGhyb3VnaCBpdCBmdXJ0aGVyLCBpZiBhIGZ1bmN0aW9uICppcyogc3RhdGljIGJ1dCBpdHMgYWRkcmVzcyBpcyBhY3R1YWxseSB0YWtlbiwgaXQgKndvbid0KiBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIGl04oCZcyB0b3RhbGx5IGZpbmUgdG8gbGlzdCBpdCBhcyB0aGUgbWFpbiBmdW5jdGlvbiBoZXJlLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBhbnkgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYy5cblxuTm9wZS4gQWxsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBjYWxsYmFja3M6IGBoYmhfbXQ2YCwgYGlwdjZoZWFkZXJfbXQ2YCwgYHNyaF9tdDZgLCBhbmQgYHNyaDFfbXQ2YC4gU2luY2UgdGhleSdyZSBjYWxsYmFja3MsIHRoZXkgKndvbid0KiBiZSBpbmxpbmVkLiBXZSBjYW4gY29uZmlkZW50bHkgbGlzdCB0aGVtLlxuXG5MZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayBgaXA2dF9pcHY2aGVhZGVyLmNgIGFuZCBgaXA2dF9zcmguY2AgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc4MiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo0MS4wMDE3NzYxNDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NDc1MTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2aGVhZGVyX210NlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jPTI2PXN0YXRpYyBib29sXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjI3OmlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMjgte1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTExMi1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTEzOnN0YXRpYyBpbnQgaXB2NmhlYWRlcl9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTExNC17XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTI0LVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYzoxMjU6c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBpcHY2aGVhZGVyX210Nl9yZWcgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTI2LVxcdC5uYW1lXFx0XFx0PSBcXFwiaXB2NmhlYWRlclxcXCIsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEyNy1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjEyODpcXHQubWF0Y2hcXHRcXHQ9IGlwdjZoZWFkZXJfbXQ2LFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMjktXFx0Lm1hdGNoc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2lwdjZoZWFkZXJfaW5mbyksXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjEzMDpcXHQuY2hlY2tlbnRyeVxcdD0gaXB2NmhlYWRlcl9tdDZfY2hlY2ssXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEzMS1cXHQuZGVzdHJveVxcdD0gTlVMTCxcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMzQtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjEzNTpzdGF0aWMgaW50IF9faW5pdCBpcHY2aGVhZGVyX210Nl9pbml0KHZvaWQpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEzNi17XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjEzNzpcXHRyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goXFx1MDAyNmlwdjZoZWFkZXJfbXQ2X3JlZyk7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEzOC19XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEzOS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTQwOnN0YXRpYyB2b2lkIF9fZXhpdCBpcHY2aGVhZGVyX210Nl9leGl0KHZvaWQpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTE0MS17XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjE0MjpcXHR4dF91bnJlZ2lzdGVyX21hdGNoKFxcdTAwMjZpcHY2aGVhZGVyX210Nl9yZWcpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xNDMtfVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xNDQtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjE0NTptb2R1bGVfaW5pdChpcHY2aGVhZGVyX210Nl9pbml0KTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTQ2Om1vZHVsZV9leGl0KGlwdjZoZWFkZXJfbXQ2X2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo0MS4zNTY1MzUxMjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE5NDU1MTc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEyMzE5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo0OC41NTEwODk0MDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDI2MjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcmhfbXQ2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTIzLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjI0OnN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTI1LXtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jPTEyNT1zdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0yNjctXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MjY4OnN0YXRpYyBpbnQgc3JoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0yNjkte1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM9Mjg3PXN0YXRpYyBpbnQgc3JoMV9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMDUtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzA2OnN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggc3JoX210Nl9yZWdbXSBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMwNy1cXHR7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMTAtXFx0XFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMxMTpcXHRcXHQubWF0Y2hcXHRcXHQ9IHNyaF9tdDYsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzEyLVxcdFxcdC5tYXRjaHNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgaXA2dF9zcmgpLFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMxMzpcXHRcXHQuY2hlY2tlbnRyeVxcdD0gc3JoX210Nl9jaGVjayxcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMTQtXFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMyNi1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMjc6c3RhdGljIGludCBfX2luaXQgc3JoX210Nl9pbml0KHZvaWQpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzI4LXtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMjk6XFx0cmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMoc3JoX210Nl9yZWcsIEFSUkFZX1NJWkUoc3JoX210Nl9yZWcpKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMzAtfVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzMS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMzI6c3RhdGljIHZvaWQgX19leGl0IHNyaF9tdDZfZXhpdCh2b2lkKVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzMy17XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzM0OlxcdHh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhzcmhfbXQ2X3JlZywgQVJSQVlfU0laRShzcmhfbXQ2X3JlZykpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzNS19XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzM2LVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMzNzptb2R1bGVfaW5pdChzcmhfbXQ2X2luaXQpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMzODptb2R1bGVfZXhpdChzcmhfbXQ2X2V4aXQpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NDguNjYxMzU3MTA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDg5NzQxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IEhlYWRlciBNYXRjaGluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBpdC4gVGhlIGtleSBmdW5jdGlvbnMgaGVyZSBhcmUgYGhiaF9tdDZgLCBgaXB2NmhlYWRlcl9tdDZgLCBgc3JoX210NmAsIGFuZCBgc3JoMV9tdDZgLiBBbGwgdGhvc2UgYXJlIGNsZWFybHkgc3RhdGljLiBUaGUgaW1wb3J0YW50IGRldGFpbCBpcyBob3cgdGhleSdyZSB1c2VkOyB0aGV5J3JlIHJlZ2lzdGVyZWQgYXMgY2FsbGJhY2tzIHdpdGhpbiBgeHRfbWF0Y2hgIHN0cnVjdHMuIFRoYXQgbWVhbnMgdGhleSdyZSBub3QgZ29pbmcgdG8gYmUgaW5saW5lZCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIHN5bWJvbCBhbmFseXNpcy4gSSdsbCBtYWtlIHN1cmUgdG8gZ2V0IHRoZW0gbGlzdGVkIHByb3Blcmx5IGluIEZvY3VzU3ltYm9scy5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucywgSSBzZWUgYElQNl9ORl9JUFRBQkxFU2AsIGBJUDZfTkZfTUFUQ0hfT1BUU2AsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuIEEgcXVpY2sgdGhvdWdodDogYElQNl9ORl9JUFRBQkxFU2AgbG9va3MgbGlrZSBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIG90aGVycywgbGlrZSBpdCBpcyBhIHBhcmVudCBmZWF0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBgSVA2X05GX0lQVEFCTEVTYCBpdHNlbGYgaGFzIGFueSBkZXBlbmRlbmNpZXMuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzI2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjU0LjM3MDMzMzU4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMDE3NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUDZfTkZfSVBUQUJMRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9Nj1tZW51IFxcXCJJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTktIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEwOmNvbmZpZyBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBJUDYgdGFibGVzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz03Mj1jb25maWcgTkZfTE9HX0lQVjZcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTc5LVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjgwOmNvbmZpZyBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXHR0cmlzdGF0ZSBcXFwiSVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NTQuNDcxMzU1NTA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY0MzI4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBJUDZfTkZfSVBUQUJMRVMqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElQNl9ORl9JUFRBQkxFU2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGFyZSB0aWVkIHRvIGl0LiBJJ20gbm90IGp1c3QgbG9va2luZyBmb3IgdGhlIG9idmlvdXM7IEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaW5jbHVkZXMgbm90IGp1c3QgdGhlIGNvcmUgTmV0ZmlsdGVyIG1vZHVsZXMgdGhhdCBpdCBkaXJlY3RseSByZWxpZXMgdXBvbiwgYnV0IGFsc28gYW55IG90aGVyIGNvbXBvbmVudHMsIHBvdGVudGlhbGx5IGV2ZW4ga2VybmVsIHN1YnN5c3RlbXMsIHRoYXQgbWF5IGluZGlyZWN0bHkgaW5mbHVlbmNlIG9yIGJlIGluZmx1ZW5jZWQgYnkgaXRzIG9wZXJhdGlvbi4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgZmlsdGVyaW5nLCBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIElQdjYtcmVsYXRlZCBjb21wb25lbnRzLiBJ4oCZbSB0aGlua2luZyBhYm91dCBob3cgYSBtb2R1bGUgbGlrZSBgSVA2X05GX0lQVEFCTEVTYCBhZmZlY3RzIHRoZSBicm9hZGVyIGtlcm5lbCBhcmNoaXRlY3R1cmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBjb25mbGljdHMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbGwgbmVlZCB0byBrbm93IHRoaXMgdG8gYXNzZXNzIGl0cyBvdmVyYWxsIGltcGFjdCBhbmQgcG9ydGFiaWxpdHksIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgb3IgbW9kaWZpY2F0aW9ucy4gVGhlIGltcGxpY2F0aW9ucyBvbiBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgd291bGQgYWxzbyBiZSBzb21ldGhpbmcgdG8gY29uc2lkZXIuIFVsdGltYXRlbHksIHVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGZ1bmRhbWVudGFsIHRvIGdyYXNwaW5nIGl0cyB0cnVlIGZ1bmN0aW9uIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIGEgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk2NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjU4LjYxNzgxMjQ1M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzU6XFx0XFx0c2VsZWN0IE5GX0xPR19TWVNMT0dcXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlXFxuICA3ODpcXHRcXHQgIChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzIENPTkZJR19ORl9MT0dfU1lTTE9HLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgSVA2X05GX0lQVEFCTEVTXFxuICA4MTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nKVxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJUFY2XFxuICA4MzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX1hUQUJMRVNcXG4gIDg0OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAgODU6XFx0XFx0aGVscFxcbiAgODY6XFx0XFx0ICBpcDZ0YWJsZXMgaXMgYSBnZW5lcmFsLCBleHRlbnNpYmxlIHBhY2tldCBpZGVudGlmaWNhdGlvbiBmcmFtZXdvcmsuXFxuICA4NzpcXHRcXHQgIEN1cnJlbnRseSBvbmx5IHRoZSBwYWNrZXQgZmlsdGVyaW5nIGFuZCBwYWNrZXQgbWFuZ2xpbmcgc3Vic3lzdGVtXFxuICA4ODpcXHRcXHQgIGZvciBJUHY2IHVzZSB0aGlzLCBidXQgY29ubmVjdGlvbiB0cmFja2luZyBpcyBnb2luZyB0byBmb2xsb3cuXFxuICA4OTpcXHRcXHQgIFNheSAnWScgb3IgJ00nIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGVpdGhlciBvZiB0aG9zZS5cXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDkyOlxcdFxcbiAgOTM6XFx0aWYgSVA2X05GX0lQVEFCTEVTXFxuICA5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NTguNjE3OTIyNDczWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzMwNzE0ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGl0IHJlYWxseSBoaW5nZXMgb24gaG93IElQdjYgYW5kIHRoZSBpbnRlcm5ldCBwcm90b2NvbHMgYXJlIHNldCB1cC4gVG8gZ2V0IHRoZSBmZWF0dXJlcyBJIG5lZWQsIEknbSBzZWVpbmcgdGhhdCBJJ2xsIG5lZWQgdGhlc2UgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYElQNl9ORl9JUFRBQkxFU2AsIGBJUDZfTkZfTUFUQ0hfT1BUU2AsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuIEJ1dCBob2xkIG9uLCBpdCBsb29rcyBsaWtlIGBJUDZfTkZfTUFUQ0hfT1BUU2AgaXMgZGVwZW5kZW50IG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBUaGF0J3MgYSBrZXkgZGVwZW5kZW5jeS4gUmlnaHQsIG5lZWQgdG8gYnJpbmcgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaW50byB0aGUgbWl4LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYWJvdXQgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgdG9vOyBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCBhbHNvIHJlbGllcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYC4gVGltZSB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjE4Ljk0ODY0MTM0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9YVF9NQVRDSF9ITFxcbiAxMzY6XFx0XFx0aGVscFxcbiAxMzc6XFx0XFx0ICBUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2VcXG4gMTM4OlxcdFxcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcXG4gMTM5OlxcdFxcdCAgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC5cXG4gMTQwOlxcdFxcbiAxNDE6XFx0Y29uZmlnIElQNl9ORl9NQVRDSF9JUFY2SEVBREVSXFxuIDE0MjpcXHRcXHR0cmlzdGF0ZSAnXFxcImlwdjZoZWFkZXJcXFwiIElQdjYgRXh0ZW5zaW9uIEhlYWRlcnMgTWF0Y2gnXFxuIDE0MzpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gMTQ0OlxcdFxcdGhlbHBcXG4gMTQ1OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWxsb3dzIG9uZSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIHVwb25cXG4gMTQ2OlxcdFxcdCAgdGhlIGlwdjYgZXh0ZW5zaW9uIGhlYWRlcnMuXFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0OTpcXHRcXG4gMTUwOlxcdGNvbmZpZyBJUDZfTkZfTUFUQ0hfTUhcXG4gMTUxOlxcdFxcdHRyaXN0YXRlICdcXFwibWhcXFwiIG1hdGNoIHN1cHBvcnQnXFxuIDE1MjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAxNTM6XFx0XFx0aGVscFxcbiAxNTQ6XFx0XFx0ICBUaGlzIG1vZHVsZSBhbGxvd3Mgb25lIHRvIG1hdGNoIE1IIHBhY2tldHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjE4Ljk0ODc2MDczWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTc1NzczNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBOZXRmaWx0ZXIgTWF0Y2hpbmcgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBgSVA2X05GX01BVENIX0lQVjZIRUFERVJgIG9wdGlvbi4gVGhlIGNvZGUgY2xlYXJseSBzdGF0ZXMgdGhhdCB0aGlzIGRvZXNuJ3QgaGF2ZSBhIGRlcGVuZGVuY3kgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJdCdzIGEgZnVuZGFtZW50YWwgbWF0Y2ggb24gdGhlIElQdjYgaGVhZGVyIGl0c2VsZi4gQnV0IG5vdyBJJ20gdGhpbmtpbmcgYWJvdXQgYElQNl9ORl9NQVRDSF9TUkhgLi4uIGRvZXMgKnRoYXQqIHNoYXJlIHRoZSBzYW1lIGluZGVwZW5kZW5jZT8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIGlzIG1vcmUgc3BlY2lhbGl6ZWQuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgbW9yZSBjb21wbGV4IGZlYXR1cmVzIGludm9sdmVkIHRoZXJlIHRoYXQgYXJlIHJlbGF0ZWQgdG8gYWR2YW5jZWQgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBTUkggbWF0Y2guIFBlcmhhcHMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSByZWxldmFudCBOZXRmaWx0ZXIgZG9jdW1lbnRhdGlvbiBvciBjb2RlIGV4YW1wbGVzIGlzIGluIG9yZGVyLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGVyZSdzIG5vIHN1YnRsZSBkZXBlbmRlbmN5IEknbSBtaXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGVzZSBmZWF0dXJlcyBiZWhhdmUgYXMgZXhwZWN0ZWQgaW4gY29tcGxleCBmaWx0ZXJpbmcgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6MjUuOTA2MzQyOTE5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFx0dHJpc3RhdGUgJ1xcXCJydFxcXCIgUm91dGluZyBoZWFkZXIgbWF0Y2ggc3VwcG9ydCdcXG4gMTcxOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDE3MjpcXHRcXHRoZWxwXFxuIDE3MzpcXHRcXHQgIHJ0IG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gbWF0Y2ggcGFja2V0cyBiYXNlZCBvbiB0aGUgcm91dGluZ1xcbiAxNzQ6XFx0XFx0ICBoZWFkZXIgb2YgdGhlIHBhY2tldC5cXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTc3OlxcdFxcbiAxNzg6XFx0Y29uZmlnIElQNl9ORl9NQVRDSF9TUkhcXG4gMTc5OlxcdFxcdHRyaXN0YXRlICdcXFwic3JoXFxcIiBTZWdtZW50IFJvdXRpbmcgaGVhZGVyIG1hdGNoIHN1cHBvcnQnXFxuIDE4MDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAxODE6XFx0XFx0aGVscFxcbiAxODI6XFx0XFx0ICBzcmggbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBzZWdtZW50XFxuIDE4MzpcXHRcXHQgIHJvdXRpbmcgaGVhZGVyIG9mIHRoZSBwYWNrZXQuXFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE4NjpcXHRcXG4gMTg3OlxcdCMgVGhlIHRhcmdldHNcXG4gMTg4OlxcdGNvbmZpZyBJUDZfTkZfVEFSR0VUX0hMXFxuIDE4OTpcXHRcXHR0cmlzdGF0ZSAnXFxcIkhMXFxcIiBob3BsaW1pdCB0YXJnZXQgc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6MjUuOTA2NDU0NDU5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxOTkwMjQwOTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyBpbiBOZXRmaWx0ZXIqKlxuXG5Pa2F5LCBzbyBgSVA2X05GX01BVENIX1NSSGAgZGVmaW5pdGVseSBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgLCB0aGF0J3MgYSBnaXZlbi4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuLi4geWVwLCBhbGwgcHJlc2VudDogYElQVjZgLCBgSVA2X05GX0lQVEFCTEVTYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBJUDZfTkZfTUFUQ0hfT1BUU2AsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuXG5cblRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSB3YXNuJ3QgY29ycmVjdGx5IGRyb3BwaW5nIG1hbGZvcm1lZCBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzOyBpdCB3YXMganVzdCByZXR1cm5pbmcgYGZhbHNlYCBvbiBhIG1hdGNoIGZhaWx1cmUuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGF0IGJlaGF2aW9yLiBSZXR1cm5pbmcgYGZhbHNlYCBvbiBhIG1hdGNoIGZhaWx1cmUgYWxsb3dzIHRoZSBwYWNrZXQgdG8gY29udGludWUgYW5kIHBvc3NpYmx5IHRyaWdnZXIgYSB2dWxuZXJhYmlsaXR5LCB3aGVyZWFzIHNldHRpbmcgYGhvdGRyb3AgPSB0cnVlYCBkcm9wcyB0aGUgcGFja2V0LCB3aGljaCBpcyB0aGUgY29ycmVjdCBhbmQgc2VjdXJlIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUgYWN0dWFsbHksIHNvIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9sczogYGhiaF9tdDZgLCBgaXB2NmhlYWRlcl9tdDZgLCBgc3JoX210NmAsIGFuZCBgc3JoMV9tdDZgLlxuXG5MZXQncyBjaGVjayBpZiBgaGJoX210NmAgaXMgdGhlIG9ubHkgbWF0Y2ggZnVuY3Rpb24gaW4gYGlwNnRfaGJoLmNgLiBZdXAsIHRoYXQncyB0aGUgb25lLiBXYWl0LCBgaGJoX210NmAgaGFuZGxlcyAqYm90aCogSG9wLWJ5LUhvcCBhbmQgRGVzdGluYXRpb24gT3B0aW9ucyBoZWFkZXJzLCB0aGF0J3Mgd2h5IGl0IGlzIGxpc3RlZCBtdWx0aXBsZSB0aW1lcy4gU28gdGhlIGNvZGUgaXMgY29ycmVjdC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gYGlwNnRfaXB2NmhlYWRlci5jYC4gT2theSwgdGhlIHBhdGNoIHJlbW92ZXMgYSBjaGVjazogYGxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpYC4gV2h5PyBBaCwgYHNrYl9oZWFkZXJfcG9pbnRlcmAgbm93IHRha2VzIGNhcmUgb2YgdGhhdC4gSXQgd2lsbCBmYWlsIGlmIGBwdHIgKyBzaXplb2YoX2hkcikgXHUwMDNlIHNrYi1cdTAwM2VsZW5gIGFuZCByZXR1cm4gTlVMTC4gYHNpemVvZihfaGRyKWAgaXMgdGhlIHNhbWUgYXMgYHNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKWAsIHNvIHRoZSBjb2RlIGluIGBza2JfaGVhZGVyX3BvaW50ZXJgIHJlcGxhY2VzIHRoZSBub3cgcmVtb3ZlZCBjaGVjay4gTW9yZSBpbXBvcnRhbnRseSwgaWYgYHNrYl9oZWFkZXJfcG9pbnRlcmAgZmFpbHMsIGl0IG5vdyBzZXRzIGBob3Rkcm9wID0gdHJ1ZWAuIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHJldHVybmVkIGZhbHNlIHdpdGhvdXQgaG90ZHJvcHBpbmcuIFNvIHRoZSBwYXRjaCBtYWtlcyBzdXJlIHRvIHNldCBgaG90ZHJvcCA9IHRydWVgIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQuXG5cbkZpbmFsbHksIGluIGBpcDZ0X3NyaC5jYCwgdGhlIHBhdGNoIGhhbmRsZXMgZXJyb3IgY29kZXMgZnJvbSBgaXB2Nl9maW5kX2hkcmAuIE5vdywgaWYgYGlwdjZfZmluZF9oZHJgIGZhaWxzIHdpdGggYW55dGhpbmcgKm90aGVyKiB0aGFuIGAtRU5PRU5UYCAoZS5nLiwgYSBtYWxmb3JtZWQgaGVhZGVyKSwgaXQganVtcHMgdG8gYGhvdGRyb3AgPSB0cnVlYC4gVGhpcyBpcyBhbm90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZW5zdXJlcyBtYWxmb3JtZWQgcGFja2V0cyBhcmUgZHJvcHBlZCBjb3JyZWN0bHkuXG5cbkV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gVGhlIHBhdGNoIGlzIGRvaW5nIHRoZSByaWdodCB0aGluZywgY29ycmVjdGx5IGhhbmRsaW5nIGFuZCBob3Rkcm9wcGluZyBwYWNrZXRzIHdpdGggYmFkIGhlYWRlcnMuIEknbSByZWFkeSB0byBtYXJrIHRoaXMgYXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NTIsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjQ3Ljg5NjY5ODE2NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTg3NDUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVA2X05GX0lQVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIklQNl9ORl9NQVRDSF9PUFRTXCIsXG4gICAgXCJJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUlwiLFxuICAgIFwiSVA2X05GX01BVENIX1NSSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhiaF9tdDZcIixcbiAgICBcImlwdjZoZWFkZXJfbXQ2XCIsXG4gICAgXCJzcmhfbXQ2XCIsXG4gICAgXCJzcmgxX210NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgbmV0ZmlsdGVyIG1hdGNoIGV4dGVuc2lvbnMgKGhiaCwgaXB2NmhlYWRlciwgc3JoKSB0byBwcm9wZXJseSBkcm9wIHBhY2tldHMgd2l0aCBtYWxmb3JtZWQgZXh0ZW5zaW9uIGhlYWRlcnMgYnkgc2V0dGluZyBgcGFyLVxcdTAwM2Vob3Rkcm9wID0gdHJ1ZWAgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyBmYWxzZSAod2hpY2ggd291bGQgYWxsb3cgdGhlIHBhY2tldCB0byBjb250aW51ZSB0cmF2ZXJzYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JrIGZpbHRlcmluZyBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IG1hbGZvcm1lZCBwYWNrZXRzIGFyZSBoYW5kbGVkLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQNl9ORl9JUFRBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJJUDZfTkZfTUFUQ0hfT1BUU1wiLFxuICAgIFwiSVA2X05GX01BVENIX0lQVjZIRUFERVJcIixcbiAgICBcIklQNl9ORl9NQVRDSF9TUkhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYmhfbXQ2XCIsXG4gICAgXCJpcHY2aGVhZGVyX210NlwiLFxuICAgIFwic3JoX210NlwiLFxuICAgIFwic3JoMV9tdDZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IG5ldGZpbHRlciBtYXRjaCBleHRlbnNpb25zIChoYmgsIGlwdjZoZWFkZXIsIHNyaCkgdG8gcHJvcGVybHkgZHJvcCBwYWNrZXRzIHdpdGggbWFsZm9ybWVkIGV4dGVuc2lvbiBoZWFkZXJzIGJ5IHNldHRpbmcgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UgKHdoaWNoIHdvdWxkIGFsbG93IHRoZSBwYWNrZXQgdG8gY29udGludWUgdHJhdmVyc2FsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBmaWx0ZXJpbmcgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBtYWxmb3JtZWQgcGFja2V0cyBhcmUgaGFuZGxlZCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6NDguMDU2NTc5NTQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5ODU4MDkzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjQ4LjA1NzE1Mjc1MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjc5ODAwNDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cXG5cXG5BbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBwYWNrZXQgcGFyc2luZyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgcmVhZHMpIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTA1ZjFiOGVjYzIyMDFlYWE1NWUxNDhjZmExYTRiNjg4M2MwM2QwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG5pbmRleCA2ZDFhNWQyMDI2YTY3Li45ZjA0YjRkOGYxNmZmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG5AQCAtNjIsMjEgKzYyLDE4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdCAgICBORVhUSERSX0hPUCA6IE5FWFRIRFJfREVTVCwgTlVMTCwgTlVMTCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbi1cdFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksIFx1MDAyNl9vcHRzaCk7XG4tXHRpZiAob2ggPT0gTlVMTCkge1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbitcdGlmICghb2gpXG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKG9oKTtcbiBcdGlmIChza2ItXHUwMDNlbGVuIC0gcHRyIFx1MDAzYyBoZHJsZW4pIHtcbi1cdFx0LyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdCdzIGxlbmd0aCBmaWVsZCAqL1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0LyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdHMgbGVuZ3RoIGZpZWxkICovXG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcdH1cbiBcbiBcdHByX2RlYnVnKFwiSVB2NiBPUFRTIExFTiAldSAldSBcIiwgaGRybGVuLCBvaC1cdTAwM2VoZHJsZW4pO1xuQEAgLTEwNCw4ICsxMDEsOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdHRwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX29wdHR5cGUpLFxuIFx0XHRcdFx0XHRcdFx1MDAyNl9vcHR0eXBlKTtcbi1cdFx0XHRpZiAodHAgPT0gTlVMTClcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmICghdHApXG4rXHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXG4gXHRcdFx0LyogVHlwZSBjaGVjayAqL1xuIFx0XHRcdGlmICgqdHAgIT0gKG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHhGRjAwKSBcdTAwM2VcdTAwM2UgOCkge1xuQEAgLTEyMSwxMiArMTE4LDEyIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFxuIFx0XHRcdFx0LyogbGVuZ3RoIGZpZWxkIGV4aXN0cyA/ICovXG4gXHRcdFx0XHRpZiAoaGRybGVuIFx1MDAzYyAyKVxuLVx0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRcdFx0bHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIgKyAxLFxuIFx0XHRcdFx0XHRcdFx0c2l6ZW9mKF9vcHRsZW4pLFxuIFx0XHRcdFx0XHRcdFx0XHUwMDI2X29wdGxlbik7XG4tXHRcdFx0XHRpZiAobHAgPT0gTlVMTClcbi1cdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHRpZiAoIWxwKVxuK1x0XHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdFx0XHRzcGVjX2xlbiA9IG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHgwMEZGO1xuIFxuIFx0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKSB7XG5AQCAtMTQ0LDEwICsxNDEsMTAgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0LyogU3RlcCB0byB0aGUgbmV4dCAqL1xuIFx0XHRcdHByX2RlYnVnKFwibGVuJTA0WFxcblwiLCBvcHRsZW4pO1xuIFxuLVx0XHRcdGlmICgocHRyIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gb3B0bGVuIHx8IGhkcmxlbiBcdTAwM2Mgb3B0bGVuKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnIgLSAxKSB7XG4rXHRcdFx0aWYgKHB0ciBcdTAwM2Ugc2tiLVx1MDAzZWxlbiB8fCBvcHRsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBwdHIgfHxcbitcdFx0XHQgICAgaGRybGVuIFx1MDAzYyBvcHRsZW4pIHtcbiBcdFx0XHRcdHByX2RlYnVnKFwibmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwiKTtcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRcdH1cbiBcdFx0XHRwdHIgKz0gb3B0bGVuO1xuIFx0XHRcdGhkcmxlbiAtPSBvcHRsZW47XG5AQCAtMTU5LDYgKzE1NiwxMCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdHJldHVybiBmYWxzZTtcbitcbitob3Rkcm9wOlxuK1x0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhiaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jXG5pbmRleCBjNTJmZjkyOWM5M2IzLi5hZWY4ZjY5ZGE3ZmI1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcbkBAIC0yOCw3ICsyOCw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8gKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuIFx0dW5zaWduZWQgaW50IHRlbXA7XG4tXHRpbnQgbGVuO1xuIFx0dTggbmV4dGhkcjtcbiBcdHVuc2lnbmVkIGludCBwdHI7XG4gXG5AQCAtMzgsOCArMzcsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRuZXh0aGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VuZXh0aGRyO1xuIFx0LyogcG9pbnRlciB0byB0aGUgMXN0IGV4dGhkciAqL1xuIFx0cHRyID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbi1cdC8qIGF2YWlsYWJsZSBsZW5ndGggKi9cbi1cdGxlbiA9IHNrYi1cdTAwM2VsZW4gLSBwdHI7XG4gXHR0ZW1wID0gMDtcbiBcbiBcdHdoaWxlIChuZl9pcDZfZXh0X2hkcihuZXh0aGRyKSkge1xuQEAgLTUyLDkgKzQ5LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdHRlbXAgfD0gTUFTS19OT05FO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdC8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi9cbi1cdFx0aWYgKGxlbiBcdTAwM2MgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHQvKiBFU1AgLVx1MDAzZSBldmFsdWF0ZSAqL1xuIFx0XHRpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkge1xuIFx0XHRcdHRlbXAgfD0gTUFTS19FU1A7XG5AQCAtOTcsNyArOTEsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdH1cbiBcbiBcdFx0bmV4dGhkciA9IGhwLVx1MDAzZW5leHRoZHI7XG4tXHRcdGxlbiAtPSBoZHJsZW47XG4gXHRcdHB0ciArPSBoZHJsZW47XG4gXHRcdGlmIChwdHIgXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY1xuaW5kZXggZGIwZmQ2NGQ4OTg2Mi4uNmZjYzQwMTAyZmUzZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY1xuQEAgLTI3LDIyICsyNywyNyBAQCBzdGF0aWMgYm9vbCBzcmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIFx0c3RydWN0IGlwdjZfc3JfaGRyIF9zcmg7XG4gXHRpbnQgaGRybGVuLCBzcmhvZmYgPSAwO1xuK1x0aW50IGVycjtcbiBcbi1cdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuK1x0ZXJyID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKTtcbitcdGlmIChlcnIgXHUwMDNjIDApIHtcbitcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuK1x0XHRcdGdvdG8gaG90ZHJvcDtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFx0c3JoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3Job2ZmLCBzaXplb2YoX3NyaCksIFx1MDAyNl9zcmgpO1xuIFx0aWYgKCFzcmgpXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aGRybGVuID0gaXB2Nl9vcHRsZW4oc3JoKTtcbiBcdGlmIChza2ItXHUwMDNlbGVuIC0gc3Job2ZmIFx1MDAzYyBoZHJsZW4pXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aWYgKHNyaC1cdTAwM2V0eXBlICE9IElQVjZfU1JDUlRfVFlQRV80KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoc3JoLVx1MDAzZXNlZ21lbnRzX2xlZnQgXHUwMDNlIHNyaC1cdTAwM2VmaXJzdF9zZWdtZW50KVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdC8qIE5leHQgSGVhZGVyIG1hdGNoaW5nICovXG4gXHRpZiAoc3JoaW5mby1cdTAwM2VtdF9mbGFncyBcdTAwMjYgSVA2VF9TUkhfTkVYVEhEUilcbkBAIC0xMTEsNiArMTE2LDEwIEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdFx0IShzcmgtXHUwMDNldGFnID09IHNyaGluZm8tXHUwMDNldGFnKSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4rXG4raG90ZHJvcDpcbitcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuQEAgLTEyMSwyMiArMTMwLDMxIEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdHN0cnVjdCBpbjZfYWRkciBfcHNpZCwgX25zaWQsIF9sc2lkO1xuIFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgX3NyaDtcbitcdGludCBlcnI7XG4gXG4tXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbitcdGVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbitcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcdHNyaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNyaG9mZiwgc2l6ZW9mKF9zcmgpLCBcdTAwMjZfc3JoKTtcbiBcdGlmICghc3JoKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7XG4gXHRpZiAoc2tiLVx1MDAzZWxlbiAtIHNyaG9mZiBcdTAwM2MgaGRybGVuKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGlmIChzcmgtXHUwMDNldHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0aWYgKHNpemVvZigqc3JoKSArXG4rXHQgICAgKChzcmgtXHUwMDNlZmlyc3Rfc2VnbWVudCArIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIFx1MDAzZSBoZHJsZW4pXG4rXHRcdGdvdG8gaG90ZHJvcDtcbitcbiBcdGlmIChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCBcdTAwM2Ugc3JoLVx1MDAzZWZpcnN0X3NlZ21lbnQpXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0LyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi9cbiBcdGlmIChzcmhpbmZvLVx1MDAzZW10X2ZsYWdzIFx1MDAyNiBJUDZUX1NSSF9ORVhUSERSKVxuQEAgLTIwNyw3ICsyMjUsNyBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0ICAoKHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0ICsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7XG4gXHRcdHBzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwc2lkb2ZmLCBzaXplb2YoX3BzaWQpLCBcdTAwMjZfcHNpZCk7XG4gXHRcdGlmICghcHNpZClcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX1BTSUQsXG4gXHRcdFx0XHRpcHY2X21hc2tlZF9hZGRyX2NtcChwc2lkLCBcdTAwMjZzcmhpbmZvLVx1MDAzZXBzaWRfbXNrLFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2c3JoaW5mby1cdTAwM2Vwc2lkX2FkZHIpKSlcbkBAIC0yMjIsNyArMjQwLDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdCAgKChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCAtIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuIFx0XHRuc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbnNpZG9mZiwgc2l6ZW9mKF9uc2lkKSwgXHUwMDI2X25zaWQpO1xuIFx0XHRpZiAoIW5zaWQpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGdvdG8gaG90ZHJvcDtcbiBcdFx0aWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9OU0lELFxuIFx0XHRcdFx0aXB2Nl9tYXNrZWRfYWRkcl9jbXAobnNpZCwgXHUwMDI2c3JoaW5mby1cdTAwM2Vuc2lkX21zayxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnNyaGluZm8tXHUwMDNlbnNpZF9hZGRyKSkpXG5AQCAtMjM0LDEzICsyNTIsMTcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRsc2lkb2ZmID0gc3Job2ZmICsgc2l6ZW9mKHN0cnVjdCBpcHY2X3NyX2hkcik7XG4gXHRcdGxzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsc2lkb2ZmLCBzaXplb2YoX2xzaWQpLCBcdTAwMjZfbHNpZCk7XG4gXHRcdGlmICghbHNpZClcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX0xTSUQsXG4gXHRcdFx0XHRpcHY2X21hc2tlZF9hZGRyX2NtcChsc2lkLCBcdTAwMjZzcmhpbmZvLVx1MDAzZWxzaWRfbXNrLFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2c3JoaW5mby1cdTAwM2Vsc2lkX2FkZHIpKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbitcbitob3Rkcm9wOlxuK1x0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNyaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDozMDo0OC4wNTcxNTQwMTFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3OTc5ODQzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSVB2NiBOZXRmaWx0ZXIgUGF0Y2ggZm9yIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGZvY3VzZWQgb24gaGFyZGVuaW5nIHRoZSBwYWNrZXQgcGFyc2luZyBsb2dpYyB3aXRoaW4gdGhlIElQdjYgbmV0ZmlsdGVyIGV4dGVuc2lvbnMuIFNwZWNpZmljYWxseSwgSSdtIHNlZWluZyBjaGFuZ2VzIGluIGBpcDZ0X2hiaC5jYCwgYGlwNnRfaXB2NmhlYWRlci5jYCwgYW5kIGBpcDZ0X3NyaC5jYC4gVGhlIG92ZXJ3aGVsbWluZyBwYXR0ZXJuIGhlcmUgaXMgdGhlIHJlcGxhY2VtZW50IG9mIHZhcmlvdXMgYGlmYCBjaGVja3Mgd2l0aCBgZ290byBob3Rkcm9wO2Agc3RhdGVtZW50cywgYW5kIHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBjaGVjayBpbiBgaXA2dF9zcmguY2AuIEFsbCB0aGVzZSBjaGFuZ2VzIGVzc2VudGlhbGx5IHJlZmluZSB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlc2UgbW9kdWxlcyB3aGVuIGRlYWxpbmcgd2l0aCBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLlxuXG5JbiBgaXA2dF9oYmguY2AsIGl0IHNlZW1zIHdlJ3JlIHRpZ2h0ZW5pbmcgdXAgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGFuZCBlbnN1cmluZyB0aGUgcGFja2V0IGxlbmd0aCBpcyBzdWZmaWNpZW50IGZvciB0aGUgaGVhZGVyIHNpemVzIHdlJ3JlIGV4cGVjdGluZy4gU2ltaWxhcmx5LCBpbiBgaXA2dF9zcmguY2AsIHRoZXJlJ3MgYSBjb25jZXJ0ZWQgZWZmb3J0IHRvIHZhbGlkYXRlIHRoZSBTZXJpYWwgUm91dGluZyBIZWFkZXIncyBzdHJ1Y3R1cmUgYW5kIHNlZ21lbnQgbGVuZ3Rocy4gVGhlIHJlbW92YWwgb2YgdGhlIGBsZW5gIHZhcmlhYmxlIGFuZCB0aGUgcmVkdW5kYW50IGNoZWNrIGluIGBpcDZ0X2lwdjZoZWFkZXIuY2AgaXMgaW50ZXJlc3RpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYmVlbiBzdXBlcnNlZGVkIGJ5IHRoZSByb2J1c3QgaGFuZGxpbmcgb2YgYHNrYl9oZWFkZXJfcG9pbnRlcmAuIFRoYXQncyBnb29kLCBsZXNzIHJlZHVuZGFudCBjb2RlLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIG1vcmUgYWdncmVzc2l2ZSBwYWNrZXQgZHJvcHBpbmcgd2hlbiBtYWxmb3JtZWQgaGVhZGVycyBhcmUgZGV0ZWN0ZWQuIFdoYXQncyBoYXBwZW5pbmcgaGVyZSBpcyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24gb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgb25seSBmb2N1cyBpcyBiZXR0ZXIgYm91bmRzIGNoZWNraW5nIHRvIGVuc3VyZSB0aGF0IHBhY2tldHMgY29uZm9ybSB0byB0aGUgZXhwZWN0ZWQgSVB2NiBleHRlbnNpb24gaGVhZGVyIGZvcm1hdHMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFib3V0IGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgaW50cm9kdWNlZC4gVGhlIHBhY2tldCBkYXRhIGl0c2VsZiBpcyBjb21pbmcgZnJvbSB0aGUgbmV0d29yayBkcml2ZXIsIGl0IGhhcyB0byBiZSBpbml0aWFsaXplZCBieSB0aGUgc2VuZGVyLiBUaGUgYWRkZWQgY2hlY2sgYHNpemVvZigqc3JoKSArICgoc3JoLVx1MDAzZWZpcnN0X3NlZ21lbnQgKyAxKSAqIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSBcdTAwM2UgaGRybGVuYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgcmVhZHMgKndpdGhpbiogdGhlIHBhY2tldC4gV2hpbGUgS0FTQU4gd291bGQgY2F0Y2ggb3V0LW9mLWJvdW5kcyByZWFkcyBmcm9tIHRoZSBgc2tiYCwgaW4gdGhpcyBjYXNlLCB0aGUgYHNrYmAgbWlnaHQgaGF2ZSBleHRyYSBkYXRhIGFwcGVuZGVkLCBhbmQgd2UncmUgZW5zdXJpbmcgd2UgZG9uJ3QgcmVhZCBiZXlvbmQgdGhlIGV4dGVuc2lvbiBoZWFkZXIgaW50byBnYXJiYWdlIGRhdGEgaW4gdGhlIHNhbWUgYHNrYmAuIFRoYXQncyBhIGxvZ2ljIGJ1ZyBvciBhIHJlYWQgb2YgcGFja2V0LWludGVybmFsIGdhcmJhZ2UsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzLiBMb29raW5nIGF0IHRoZSB1c2FnZSBvZiBgc2tiX2hlYWRlcl9wb2ludGVyYCwgaXQgbG9va3MgbGlrZSBpdCdzIHVzZWQgdG8gY29weSBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzLCBzdWNoIGFzIGBfc3JoYCwgYF9wc2lkYCwgZXRjLiBUaGlzIGxvb2tzIGZpbmUuIElmIGl0IGZhaWxzLCBpdCByZXR1cm5zIE5VTEwuIElmIGl0IHN1Y2NlZWRzLCBpdCByZXR1cm5zIGVpdGhlciBhIHBvaW50ZXIgdG8gdGhlIGxpbmVhciBkYXRhIChpZiBwb3NzaWJsZSkgb3IgYSBjb3B5IGluIGEgZnVsbHkgcG9wdWxhdGVkIGxvY2FsIGJ1ZmZlci4gVGhlcmVmb3JlLCB0aGVyZSdzIGFic29sdXRlbHkgbm8gcmlzayBvZiBhbiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlIGJlaW5nIHJldHVybmVkLiBTbyB0aGVyZSdzIG5vIHdheSB0aGF0IHdlIGNhbiBoYXZlIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCBoZXJlLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoaXMgcGF0Y2ggaXMgbm90IGludHJvZHVjaW5nIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFdlIG9ubHkgbmVlZCB0byB1c2UgS0FTQU4uIFRoZXNlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaGFyZGVuaW5nIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwYXJzaW5nLCBhbmQgdGhlc2UgZml4ZXMgcmVsYXRlIHRvIGxvZ2ljIGJ1Z3MsIHdpdGggYW55IHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGJlaW5nIGNvbmZpbmVkIHRvIHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYgYW5kIGFscmVhZHkgcHJvdGVjdGVkIHdpdGggS0FTQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNDUsIk91dHB1dFRva2VucyI6MjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMxOjA0Ljg1NTE0MTIwNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cXG5cXG5BbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBwYWNrZXQgcGFyc2luZyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgcmVhZHMpIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cXG5cXG5BbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBwYWNrZXQgcGFyc2luZyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgcmVhZHMpIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqc245[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 10:26:35 +0000 UTC FinishedAt: 2026-08-07 10:31:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IP6_NF_IPTABLES", "NETFILTER_ADVANCED", "IP6_NF_MATCH_OPTS", "IP6_NF_MATCH_IPV6HEADER", "IP6_NF_MATCH_SRH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IP6_NF_IPTABLES", "NETFILTER_ADVANCED", "IP6_NF_MATCH_OPTS", "IP6_NF_MATCH_IPV6HEADER", "IP6_NF_MATCH_SRH" ], "series_id": "5b6c1a56-7c22-4fbf-83ad-9788e88e10a6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hbh_mt6", "ipv6header_mt6", "srh_mt6", "srh1_mt6" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVA2X05GX0lQVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfT1BUUyYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUiYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfU1JIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGJoX210NiYjMzQ7LAogICAgJiMzNDtpcHY2aGVhZGVyX210NiYjMzQ7LAogICAgJiMzNDtzcmhfbXQ2JiMzNDssCiAgICAmIzM0O3NyaDFfbXQ2JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZWApIHJhdGhlciB0aGFuIGp1c3QgcmV0dXJuaW5nIGZhbHNlIG9yIHByb2NlZWRpbmcgd2l0aCBwYXJzaW5nLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cblxuQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgcGFja2V0IHBhcnNpbmcgYnVncyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIHJlYWRzKSBhcmUgYWRlcXVhdGVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY2IG5ldGZpbHRlciBtYXRjaCBleHRlbnNpb25zIChoYmgsIGlwdjZoZWFkZXIsIHNyaCkgdG8gcHJvcGVybHkgZHJvcCBwYWNrZXRzIHdpdGggbWFsZm9ybWVkIGV4dGVuc2lvbiBoZWFkZXJzIGJ5IHNldHRpbmcgYHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZWAgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyBmYWxzZSAod2hpY2ggd291bGQgYWxsb3cgdGhlIHBhY2tldCB0byBjb250aW51ZSB0cmF2ZXJzYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JrIGZpbHRlcmluZyBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IG1hbGZvcm1lZCBwYWNrZXRzIGFyZSBoYW5kbGVkLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTA1ZjFiOGVjYzIyMDFlYWE1NWUxNDhjZmExYTRiNjg4M2MwM2QwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuaW5kZXggNmQxYTVkMjAyNmE2Ny4uOWYwNGI0ZDhmMTZmZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuQEAgLTYyLDIxICYjNDM7NjIsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0ICAgIE5FWFRIRFJfSE9QIDogTkVYVEhEUl9ERVNULCBOVUxMLCBOVUxMKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuLVx0XHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksIFx1MDAyNl9vcHRzaCk7XG4tXHRpZiAob2ggPT0gTlVMTCkge1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbiYjNDM7XHRpZiAoIW9oKVxuJiM0MztcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aGRybGVuID0gaXB2Nl9vcHRsZW4ob2gpO1xuIFx0aWYgKHNrYi1cdTAwM2VsZW4gLSBwdHIgXHUwMDNjIGhkcmxlbikge1xuLVx0XHQvKiBQYWNrZXQgc21hbGxlciB0aGFuIGl0JiMzOTtzIGxlbmd0aCBmaWVsZCAqL1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdC8qIFBhY2tldCBzbWFsbGVyIHRoYW4gaXRzIGxlbmd0aCBmaWVsZCAqL1xuJiM0MztcdFx0Z290byBob3Rkcm9wO1xuIFx0fVxuIFxuIFx0cHJfZGVidWcoXCYjMzQ7SVB2NiBPUFRTIExFTiAldSAldSBcJiMzNDssIGhkcmxlbiwgb2gtXHUwMDNlaGRybGVuKTtcbkBAIC0xMDQsOCAmIzQzOzEwMSw4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0dHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0dHlwZSksXG4gXHRcdFx0XHRcdFx0XHUwMDI2X29wdHR5cGUpO1xuLVx0XHRcdGlmICh0cCA9PSBOVUxMKVxuLVx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGlmICghdHApXG4mIzQzO1x0XHRcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0XHRcdC8qIFR5cGUgY2hlY2sgKi9cbiBcdFx0XHRpZiAoKnRwICE9IChvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4RkYwMCkgXHUwMDNlXHUwMDNlIDgpIHtcbkBAIC0xMjEsMTIgJiM0MzsxMTgsMTIgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXG4gXHRcdFx0XHQvKiBsZW5ndGggZmllbGQgZXhpc3RzID8gKi9cbiBcdFx0XHRcdGlmIChoZHJsZW4gXHUwMDNjIDIpXG4tXHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRcdFx0bHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIgJiM0MzsgMSxcbiBcdFx0XHRcdFx0XHRcdHNpemVvZihfb3B0bGVuKSxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNl9vcHRsZW4pO1xuLVx0XHRcdFx0aWYgKGxwID09IE5VTEwpXG4tXHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdGlmICghbHApXG4mIzQzO1x0XHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdFx0XHRzcGVjX2xlbiA9IG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHgwMEZGO1xuIFxuIFx0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKSB7XG5AQCAtMTQ0LDEwICYjNDM7MTQxLDEwIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdC8qIFN0ZXAgdG8gdGhlIG5leHQgKi9cbiBcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtsZW4lMDRYXFxuXCYjMzQ7LCBvcHRsZW4pO1xuIFxuLVx0XHRcdGlmICgocHRyIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gb3B0bGVuIHx8IGhkcmxlbiBcdTAwM2Mgb3B0bGVuKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnIgLSAxKSB7XG4mIzQzO1x0XHRcdGlmIChwdHIgXHUwMDNlIHNrYi1cdTAwM2VsZW4gfHwgb3B0bGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gcHRyIHx8XG4mIzQzO1x0XHRcdCAgICBoZHJsZW4gXHUwMDNjIG9wdGxlbikge1xuIFx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7bmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwmIzM0Oyk7XG4tXHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdFx0fVxuIFx0XHRcdHB0ciAmIzQzOz0gb3B0bGVuO1xuIFx0XHRcdGhkcmxlbiAtPSBvcHRsZW47XG5AQCAtMTU5LDYgJiM0MzsxNTYsMTAgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHR9XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0Mztob3Rkcm9wOlxuJiM0MztcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcbmluZGV4IGM1MmZmOTI5YzkzYjMuLmFlZjhmNjlkYTdmYjUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuY1xuQEAgLTI4LDcgJiM0MzsyOCw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8gKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuIFx0dW5zaWduZWQgaW50IHRlbXA7XG4tXHRpbnQgbGVuO1xuIFx0dTggbmV4dGhkcjtcbiBcdHVuc2lnbmVkIGludCBwdHI7XG4gXG5AQCAtMzgsOCAmIzQzOzM3LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0bmV4dGhkciA9IGlwdjZfaGRyKHNrYiktXHUwMDNlbmV4dGhkcjtcbiBcdC8qIHBvaW50ZXIgdG8gdGhlIDFzdCBleHRoZHIgKi9cbiBcdHB0ciA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4tXHQvKiBhdmFpbGFibGUgbGVuZ3RoICovXG4tXHRsZW4gPSBza2ItXHUwMDNlbGVuIC0gcHRyO1xuIFx0dGVtcCA9IDA7XG4gXG4gXHR3aGlsZSAobmZfaXA2X2V4dF9oZHIobmV4dGhkcikpIHtcbkBAIC01Miw5ICYjNDM7NDksNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0dGVtcCB8PSBNQVNLX05PTkU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0LyogSXMgdGhlcmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgbmV4dCBleHQgaGVhZGVyPyAqL1xuLVx0XHRpZiAobGVuIFx1MDAzYyAoaW50KXNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdC8qIEVTUCAtXHUwMDNlIGV2YWx1YXRlICovXG4gXHRcdGlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKSB7XG4gXHRcdFx0dGVtcCB8PSBNQVNLX0VTUDtcbkBAIC05Nyw3ICYjNDM7OTEsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdH1cbiBcbiBcdFx0bmV4dGhkciA9IGhwLVx1MDAzZW5leHRoZHI7XG4tXHRcdGxlbiAtPSBoZHJsZW47XG4gXHRcdHB0ciAmIzQzOz0gaGRybGVuO1xuIFx0XHRpZiAocHRyIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuIFx0XHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmNcbmluZGV4IGRiMGZkNjRkODk4NjIuLjZmY2M0MDEwMmZlM2QgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmNcbkBAIC0yNywyMiAmIzQzOzI3LDI3IEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgX3NyaDtcbiBcdGludCBoZHJsZW4sIHNyaG9mZiA9IDA7XG4mIzQzO1x0aW50IGVycjtcbiBcbi1cdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuJiM0MztcdGVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuJiM0MztcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXHRzcmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzcmhvZmYsIHNpemVvZihfc3JoKSwgXHUwMDI2X3NyaCk7XG4gXHRpZiAoIXNyaClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aGRybGVuID0gaXB2Nl9vcHRsZW4oc3JoKTtcbiBcdGlmIChza2ItXHUwMDNlbGVuIC0gc3Job2ZmIFx1MDAzYyBoZHJsZW4pXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGlmIChzcmgtXHUwMDNldHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0IFx1MDAzZSBzcmgtXHUwMDNlZmlyc3Rfc2VnbWVudClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0LyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi9cbiBcdGlmIChzcmhpbmZvLVx1MDAzZW10X2ZsYWdzIFx1MDAyNiBJUDZUX1NSSF9ORVhUSERSKVxuQEAgLTExMSw2ICYjNDM7MTE2LDEwIEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdFx0IShzcmgtXHUwMDNldGFnID09IHNyaGluZm8tXHUwMDNldGFnKSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0Mztob3Rkcm9wOlxuJiM0MztcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC0xMjEsMjIgJiM0MzsxMzAsMzEgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0c3RydWN0IGluNl9hZGRyIF9wc2lkLCBfbnNpZCwgX2xzaWQ7XG4gXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcbiBcdHN0cnVjdCBpcHY2X3NyX2hkciBfc3JoO1xuJiM0MztcdGludCBlcnI7XG4gXG4tXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbiYjNDM7XHRlcnIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbiYjNDM7XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFx0c3JoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3Job2ZmLCBzaXplb2YoX3NyaCksIFx1MDAyNl9zcmgpO1xuIFx0aWYgKCFzcmgpXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7XG4gXHRpZiAoc2tiLVx1MDAzZWxlbiAtIHNyaG9mZiBcdTAwM2MgaGRybGVuKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRnb3RvIGhvdGRyb3A7XG4gXG4gXHRpZiAoc3JoLVx1MDAzZXR5cGUgIT0gSVBWNl9TUkNSVF9UWVBFXzQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHRpZiAoc2l6ZW9mKCpzcmgpICYjNDM7XG4mIzQzO1x0ICAgICgoc3JoLVx1MDAzZWZpcnN0X3NlZ21lbnQgJiM0MzsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgXHUwMDNlIGhkcmxlbilcbiYjNDM7XHRcdGdvdG8gaG90ZHJvcDtcbiYjNDM7XG4gXHRpZiAoc3JoLVx1MDAzZXNlZ21lbnRzX2xlZnQgXHUwMDNlIHNyaC1cdTAwM2VmaXJzdF9zZWdtZW50KVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRnb3RvIGhvdGRyb3A7XG4gXG4gXHQvKiBOZXh0IEhlYWRlciBtYXRjaGluZyAqL1xuIFx0aWYgKHNyaGluZm8tXHUwMDNlbXRfZmxhZ3MgXHUwMDI2IElQNlRfU1JIX05FWFRIRFIpXG5AQCAtMjA3LDcgJiM0MzsyMjUsNyBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0ICAoKHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0ICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuIFx0XHRwc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHNpZG9mZiwgc2l6ZW9mKF9wc2lkKSwgXHUwMDI2X3BzaWQpO1xuIFx0XHRpZiAoIXBzaWQpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdGlmIChORl9TUkhfSU5WRihzcmhpbmZvLCBJUDZUX1NSSF9JTlZfUFNJRCxcbiBcdFx0XHRcdGlwdjZfbWFza2VkX2FkZHJfY21wKHBzaWQsIFx1MDAyNnNyaGluZm8tXHUwMDNlcHNpZF9tc2ssXG4gXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZzcmhpbmZvLVx1MDAzZXBzaWRfYWRkcikpKVxuQEAgLTIyMiw3ICYjNDM7MjQwLDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdCAgKChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCAtIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuIFx0XHRuc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbnNpZG9mZiwgc2l6ZW9mKF9uc2lkKSwgXHUwMDI2X25zaWQpO1xuIFx0XHRpZiAoIW5zaWQpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdGlmIChORl9TUkhfSU5WRihzcmhpbmZvLCBJUDZUX1NSSF9JTlZfTlNJRCxcbiBcdFx0XHRcdGlwdjZfbWFza2VkX2FkZHJfY21wKG5zaWQsIFx1MDAyNnNyaGluZm8tXHUwMDNlbnNpZF9tc2ssXG4gXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZzcmhpbmZvLVx1MDAzZW5zaWRfYWRkcikpKVxuQEAgLTIzNCwxMyAmIzQzOzI1MiwxNyBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdGxzaWRvZmYgPSBzcmhvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2X3NyX2hkcik7XG4gXHRcdGxzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsc2lkb2ZmLCBzaXplb2YoX2xzaWQpLCBcdTAwMjZfbHNpZCk7XG4gXHRcdGlmICghbHNpZClcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRcdGdvdG8gaG90ZHJvcDtcbiBcdFx0aWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9MU0lELFxuIFx0XHRcdFx0aXB2Nl9tYXNrZWRfYWRkcl9jbXAobHNpZCwgXHUwMDI2c3JoaW5mby1cdTAwM2Vsc2lkX21zayxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnNyaGluZm8tXHUwMDNlbHNpZF9hZGRyKSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0Mztob3Rkcm9wOlxuJiM0MztcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc3JoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUDZfTkZfSVBUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O0lQNl9ORl9NQVRDSF9PUFRTJiMzNDssCiAgICAmIzM0O0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSJiMzNDssCiAgICAmIzM0O0lQNl9ORl9NQVRDSF9TUkgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYmhfbXQ2JiMzNDssCiAgICAmIzM0O2lwdjZoZWFkZXJfbXQ2JiMzNDssCiAgICAmIzM0O3NyaF9tdDYmIzM0OywKICAgICYjMzQ7c3JoMV9tdDYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbWF0Y2ggZXh0ZW5zaW9ucyAoaGJoLCBpcHY2aGVhZGVyLCBzcmgpIHRvIHByb3Blcmx5IGRyb3AgcGFja2V0cyB3aXRoIG1hbGZvcm1lZCBleHRlbnNpb24gaGVhZGVycyBieSBzZXR0aW5nIGBwYXItXHUwMDNlaG90ZHJvcCA9IHRydWVgIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UgKHdoaWNoIHdvdWxkIGFsbG93IHRoZSBwYWNrZXQgdG8gY29udGludWUgdHJhdmVyc2FsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBmaWx0ZXJpbmcgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBtYWxmb3JtZWQgcGFja2V0cyBhcmUgaGFuZGxlZCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDEwNWYxYjhlY2MyMjAxZWFhNTVlMTQ4Y2ZhMWE0YjY4ODNjMDNkMGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEwOjI4OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYwppbmRleCA2ZDFhNWQyMDI2YTY3Li45ZjA0YjRkOGYxNmZmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYwpAQCAtNjIsMjEgJiM0Mzs2MiwxOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCSAgICBORVhUSERSX0hPUCA6IE5FWFRIRFJfREVTVCwgTlVMTCwgTlVMTCk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJaWYgKGVyciAhPSAtRU5PRU5UKQotCQkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKJiM0MzsJCQlnb3RvIGhvdGRyb3A7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksICZhbXA7X29wdHNoKTsKLQlpZiAob2ggPT0gTlVMTCkgewotCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQomIzQzOwlpZiAoIW9oKQomIzQzOwkJZ290byBob3Rkcm9wOwogCiAJaGRybGVuID0gaXB2Nl9vcHRsZW4ob2gpOwogCWlmIChza2ItJmd0O2xlbiAtIHB0ciAmbHQ7IGhkcmxlbikgewotCQkvKiBQYWNrZXQgc21hbGxlciB0aGFuIGl0JiMzOTtzIGxlbmd0aCBmaWVsZCAqLwotCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkvKiBQYWNrZXQgc21hbGxlciB0aGFuIGl0cyBsZW5ndGggZmllbGQgKi8KJiM0MzsJCWdvdG8gaG90ZHJvcDsKIAl9CiAKIAlwcl9kZWJ1ZygmIzM0O0lQdjYgT1BUUyBMRU4gJXUgJXUgJiMzNDssIGhkcmxlbiwgb2gtJmd0O2hkcmxlbik7CkBAIC0xMDQsOCAmIzQzOzEwMSw4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJCWJyZWFrOwogCQkJdHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0dHlwZSksCiAJCQkJCQkmYW1wO19vcHR0eXBlKTsKLQkJCWlmICh0cCA9PSBOVUxMKQotCQkJCWJyZWFrOwomIzQzOwkJCWlmICghdHApCiYjNDM7CQkJCWdvdG8gaG90ZHJvcDsKIAogCQkJLyogVHlwZSBjaGVjayAqLwogCQkJaWYgKCp0cCAhPSAob3B0aW5mby0mZ3Q7b3B0c1t0ZW1wXSAmYW1wOyAweEZGMDApICZndDsmZ3Q7IDgpIHsKQEAgLTEyMSwxMiAmIzQzOzExOCwxMiBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAogCQkJCS8qIGxlbmd0aCBmaWVsZCBleGlzdHMgPyAqLwogCQkJCWlmIChoZHJsZW4gJmx0OyAyKQotCQkJCQlicmVhazsKJiM0MzsJCQkJCWdvdG8gaG90ZHJvcDsKIAkJCQlscCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciAmIzQzOyAxLAogCQkJCQkJCXNpemVvZihfb3B0bGVuKSwKIAkJCQkJCQkmYW1wO19vcHRsZW4pOwotCQkJCWlmIChscCA9PSBOVUxMKQotCQkJCQlicmVhazsKJiM0MzsJCQkJaWYgKCFscCkKJiM0MzsJCQkJCWdvdG8gaG90ZHJvcDsKIAkJCQlzcGVjX2xlbiA9IG9wdGluZm8tJmd0O29wdHNbdGVtcF0gJmFtcDsgMHgwMEZGOwogCiAJCQkJaWYgKHNwZWNfbGVuICE9IDB4MDBGRiAmYW1wOyZhbXA7IHNwZWNfbGVuICE9ICpscCkgewpAQCAtMTQ0LDEwICYjNDM7MTQxLDEwIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJLyogU3RlcCB0byB0aGUgbmV4dCAqLwogCQkJcHJfZGVidWcoJiMzNDtsZW4lMDRYXG4mIzM0Oywgb3B0bGVuKTsKIAotCQkJaWYgKChwdHIgJmd0OyBza2ItJmd0O2xlbiAtIG9wdGxlbiB8fCBoZHJsZW4gJmx0OyBvcHRsZW4pICZhbXA7JmFtcDsKLQkJCSAgICB0ZW1wICZsdDsgb3B0aW5mby0mZ3Q7b3B0c25yIC0gMSkgewomIzQzOwkJCWlmIChwdHIgJmd0OyBza2ItJmd0O2xlbiB8fCBvcHRsZW4gJmd0OyBza2ItJmd0O2xlbiAtIHB0ciB8fAomIzQzOwkJCSAgICBoZHJsZW4gJmx0OyBvcHRsZW4pIHsKIAkJCQlwcl9kZWJ1ZygmIzM0O25ldyBwb2ludGVyIGlzIHRvbyBsYXJnZSFcbiYjMzQ7KTsKLQkJCQlicmVhazsKJiM0MzsJCQkJZ290byBob3Rkcm9wOwogCQkJfQogCQkJcHRyICYjNDM7PSBvcHRsZW47CiAJCQloZHJsZW4gLT0gb3B0bGVuOwpAQCAtMTU5LDYgJiM0MzsxNTYsMTAgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJfQogCiAJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzO2hvdGRyb3A6CiYjNDM7CXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGludCBoYmhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jCmluZGV4IGM1MmZmOTI5YzkzYjMuLmFlZjhmNjlkYTdmYjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMKQEAgLTI4LDcgJiM0MzsyOCw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIHsKIAljb25zdCBzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8gKmluZm8gPSBwYXItJmd0O21hdGNoaW5mbzsKIAl1bnNpZ25lZCBpbnQgdGVtcDsKLQlpbnQgbGVuOwogCXU4IG5leHRoZHI7CiAJdW5zaWduZWQgaW50IHB0cjsKIApAQCAtMzgsOCAmIzQzOzM3LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCW5leHRoZHIgPSBpcHY2X2hkcihza2IpLSZndDtuZXh0aGRyOwogCS8qIHBvaW50ZXIgdG8gdGhlIDFzdCBleHRoZHIgKi8KIAlwdHIgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwotCS8qIGF2YWlsYWJsZSBsZW5ndGggKi8KLQlsZW4gPSBza2ItJmd0O2xlbiAtIHB0cjsKIAl0ZW1wID0gMDsKIAogCXdoaWxlIChuZl9pcDZfZXh0X2hkcihuZXh0aGRyKSkgewpAQCAtNTIsOSAmIzQzOzQ5LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJdGVtcCB8PSBNQVNLX05PTkU7CiAJCQlicmVhazsKIAkJfQotCQkvKiBJcyB0aGVyZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXh0IGV4dCBoZWFkZXI/ICovCi0JCWlmIChsZW4gJmx0OyAoaW50KXNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKSkKLQkJCXJldHVybiBmYWxzZTsKIAkJLyogRVNQIC0mZ3Q7IGV2YWx1YXRlICovCiAJCWlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKSB7CiAJCQl0ZW1wIHw9IE1BU0tfRVNQOwpAQCAtOTcsNyAmIzQzOzkxLDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQl9CiAKIAkJbmV4dGhkciA9IGhwLSZndDtuZXh0aGRyOwotCQlsZW4gLT0gaGRybGVuOwogCQlwdHIgJiM0Mzs9IGhkcmxlbjsKIAkJaWYgKHB0ciAmZ3Q7IHNrYi0mZ3Q7bGVuKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jCmluZGV4IGRiMGZkNjRkODk4NjIuLjZmY2M0MDEwMmZlM2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jCkBAIC0yNywyMiAmIzQzOzI3LDI3IEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCXN0cnVjdCBpcHY2X3NyX2hkciAqc3JoOwogCXN0cnVjdCBpcHY2X3NyX2hkciBfc3JoOwogCWludCBoZHJsZW4sIHNyaG9mZiA9IDA7CiYjNDM7CWludCBlcnI7CiAKLQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpICZsdDsgMCkKJiM0MzsJZXJyID0gaXB2Nl9maW5kX2hkcihza2IsICZhbXA7c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJaWYgKGVyciAhPSAtRU5PRU5UKQomIzQzOwkJCWdvdG8gaG90ZHJvcDsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAJc3JoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3Job2ZmLCBzaXplb2YoX3NyaCksICZhbXA7X3NyaCk7CiAJaWYgKCFzcmgpCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCWdvdG8gaG90ZHJvcDsKIAogCWhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7CiAJaWYgKHNrYi0mZ3Q7bGVuIC0gc3Job2ZmICZsdDsgaGRybGVuKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAKIAlpZiAoc3JoLSZndDt0eXBlICE9IElQVjZfU1JDUlRfVFlQRV80KQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoc3JoLSZndDtzZWdtZW50c19sZWZ0ICZndDsgc3JoLSZndDtmaXJzdF9zZWdtZW50KQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAKIAkvKiBOZXh0IEhlYWRlciBtYXRjaGluZyAqLwogCWlmIChzcmhpbmZvLSZndDttdF9mbGFncyAmYW1wOyBJUDZUX1NSSF9ORVhUSERSKQpAQCAtMTExLDYgJiM0MzsxMTYsMTAgQEAgc3RhdGljIGJvb2wgc3JoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCQkJIShzcmgtJmd0O3RhZyA9PSBzcmhpbmZvLSZndDt0YWcpKSkKIAkJCXJldHVybiBmYWxzZTsKIAlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0Mztob3Rkcm9wOgomIzQzOwlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKQEAgLTEyMSwyMiAmIzQzOzEzMCwzMSBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJc3RydWN0IGluNl9hZGRyIF9wc2lkLCBfbnNpZCwgX2xzaWQ7CiAJc3RydWN0IGlwdjZfc3JfaGRyICpzcmg7CiAJc3RydWN0IGlwdjZfc3JfaGRyIF9zcmg7CiYjNDM7CWludCBlcnI7CiAKLQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpICZsdDsgMCkKJiM0MzsJZXJyID0gaXB2Nl9maW5kX2hkcihza2IsICZhbXA7c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJaWYgKGVyciAhPSAtRU5PRU5UKQomIzQzOwkJCWdvdG8gaG90ZHJvcDsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAJc3JoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3Job2ZmLCBzaXplb2YoX3NyaCksICZhbXA7X3NyaCk7CiAJaWYgKCFzcmgpCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCWdvdG8gaG90ZHJvcDsKIAogCWhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7CiAJaWYgKHNrYi0mZ3Q7bGVuIC0gc3Job2ZmICZsdDsgaGRybGVuKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAKIAlpZiAoc3JoLSZndDt0eXBlICE9IElQVjZfU1JDUlRfVFlQRV80KQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJaWYgKHNpemVvZigqc3JoKSAmIzQzOwomIzQzOwkgICAgKChzcmgtJmd0O2ZpcnN0X3NlZ21lbnQgJiM0MzsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgJmd0OyBoZHJsZW4pCiYjNDM7CQlnb3RvIGhvdGRyb3A7CiYjNDM7CiAJaWYgKHNyaC0mZ3Q7c2VnbWVudHNfbGVmdCAmZ3Q7IHNyaC0mZ3Q7Zmlyc3Rfc2VnbWVudCkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJZ290byBob3Rkcm9wOwogCiAJLyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi8KIAlpZiAoc3JoaW5mby0mZ3Q7bXRfZmxhZ3MgJmFtcDsgSVA2VF9TUkhfTkVYVEhEUikKQEAgLTIwNyw3ICYjNDM7MjI1LDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJICAoKHNyaC0mZ3Q7c2VnbWVudHNfbGVmdCAmIzQzOyAxKSAqIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAkJcHNpZCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHBzaWRvZmYsIHNpemVvZihfcHNpZCksICZhbXA7X3BzaWQpOwogCQlpZiAoIXBzaWQpCi0JCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJZ290byBob3Rkcm9wOwogCQlpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX1BTSUQsCiAJCQkJaXB2Nl9tYXNrZWRfYWRkcl9jbXAocHNpZCwgJmFtcDtzcmhpbmZvLSZndDtwc2lkX21zaywKIAkJCQkJCSAgICAgJmFtcDtzcmhpbmZvLSZndDtwc2lkX2FkZHIpKSkKQEAgLTIyMiw3ICYjNDM7MjQwLDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJICAoKHNyaC0mZ3Q7c2VnbWVudHNfbGVmdCAtIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwogCQluc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbnNpZG9mZiwgc2l6ZW9mKF9uc2lkKSwgJmFtcDtfbnNpZCk7CiAJCWlmICghbnNpZCkKLQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQlnb3RvIGhvdGRyb3A7CiAJCWlmIChORl9TUkhfSU5WRihzcmhpbmZvLCBJUDZUX1NSSF9JTlZfTlNJRCwKIAkJCQlpcHY2X21hc2tlZF9hZGRyX2NtcChuc2lkLCAmYW1wO3NyaGluZm8tJmd0O25zaWRfbXNrLAogCQkJCQkJICAgICAmYW1wO3NyaGluZm8tJmd0O25zaWRfYWRkcikpKQpAQCAtMjM0LDEzICYjNDM7MjUyLDE3IEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJbHNpZG9mZiA9IHNyaG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZfc3JfaGRyKTsKIAkJbHNpZCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGxzaWRvZmYsIHNpemVvZihfbHNpZCksICZhbXA7X2xzaWQpOwogCQlpZiAoIWxzaWQpCi0JCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJZ290byBob3Rkcm9wOwogCQlpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX0xTSUQsCiAJCQkJaXB2Nl9tYXNrZWRfYWRkcl9jbXAobHNpZCwgJmFtcDtzcmhpbmZvLSZndDtsc2lkX21zaywKIAkJCQkJCSAgICAgJmFtcDtzcmhpbmZvLSZndDtsc2lkX2FkZHIpKSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7aG90ZHJvcDoKJiM0MzsJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgaW50IHNyaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBgbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNgLCBgbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jYCwgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHJlcGxhY2luZyBgcmV0dXJuIGZhbHNlO2Agd2l0aCBhIGBnb3RvIGhvdGRyb3A7YCBjb25zdHJ1Y3QuIEVzc2VudGlhbGx5LCBpdCBzZXRzIGBwYXItJmd0O2hvdGRyb3AgPSB0cnVlO2AgYmVmb3JlIHJldHVybmluZyBgZmFsc2U7YCBpbiB0aGVzZSBmdW5jdGlvbnMuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0byBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVyIG1hdGNoaW5nLgoKTm93LCB3YWl0IGEgbWludXRlLCBpbiBgaXA2dF9pcHY2aGVhZGVyLmNgLCBJIHNlZSBhIHNpZ25pZmljYW50IGNoYW5nZTogdGhleSYjMzk7dmUgcmVtb3ZlZCB0aGUgYGxlbmAgdmFyaWFibGUgYW5kIGl0cyBib3VuZHMgY2hlY2tzLCBvcHRpbmcgdG8gdXNlIGBwdHIgJmd0OyBza2ItJmd0O2xlbmAgaW5zdGVhZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0Li4uCgpgYGBjCi0JCS8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi8KLQkJaWYgKGxlbiAmbHQ7IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKQotCQkJcmV0dXJuIGZhbHNlOwpgYGAKCkFoLCBpdCYjMzk7cyByZW1vdmVkIHRoaXMuIElzIHRoaXMgc2FmZT8gTGV0IG1lIHNlZS4uLiB5ZXMsIGBza2JfaGVhZGVyX3BvaW50ZXJgIGhhbmRsZXMgdGhlIGJvdW5kcyBjaGVja2luZy4gQW5kIGxvb2tpbmcgYXQgdGhlIGNvZGUgYGlwdjZoZWFkZXJfbXQ2YCB1c2VzIGBocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9oZHIpLCAmYW1wO19oZHIpO2Agd2hpY2ggZG9lcyBpbmRlZWQgaGF2ZSBib3VuZHMgY2hlY2tpbmcuCgpSaWdodCwgc28gdGhlIGludGVudCBoZXJlIGlzIG5vdCBqdXN0IGEgc3RhbmRhcmQgbWF0Y2gtb3Itbm90IG1hdGNoLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgKmRyb3BwaW5nKiBwYWNrZXRzIHdoZW4gdGhlIGhlYWRlcnMgYXJlIG1hbGZvcm1lZCwgaGVuY2UgYGhvdGRyb3BgLiBJbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGBmYWxzZWAgKG1lYW5pbmcgdGhlIHJ1bGUgZG9lc24mIzM5O3QgbWF0Y2ggYW5kIHRoZSBwYWNrZXQgY29udGludWVzIGl0cyBwYXRoKSwgc2V0dGluZyBgcGFyLSZndDtob3Rkcm9wID0gdHJ1ZWAgdGVsbHMgbmV0ZmlsdGVyIHRvIGltbWVkaWF0ZWx5IGRyb3AgdGhlIHBhY2tldCwgYmVjYXVzZSBpdCYjMzk7cyBkZWVtZWQgdG8gYmUgbWFsZm9ybWVkLiBUaGF0IG1ha2VzIHNlbnNlLgoKTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQ6IGBoYmhfbXQ2YCwgYGlwdjZoZWFkZXJfbXQ2YCwgYHNyaF9tdDZgLCBhbmQgYHNyaDFfbXQ2YC4gWWVwLCB0aGVzZSBhcmUgYWxsIHRoZSBtYXRjaCBmdW5jdGlvbnMgZm9yIHRoZSBpcDZ0YWJsZXMvaXA2dCBtb2R1bGVzLiBBbmQgdGhvc2UgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggbmV0ZmlsdGVyIHJ1bGVzLiBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkOiBgSVA2X05GX01BVENIX0hCSGAsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuIExldCYjMzk7cyBjb25maXJtIHRob3NlIGFyZSBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQNl9ORl9NQVRDSF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz05Mz1pZiBJUDZfTkZfSVBUQUJMRVNcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05NS0jIFRoZSBzaW1wbGUgbWF0Y2hlcy5cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjk2OmNvbmZpZyBJUDZfTkZfTUFUQ0hfQUhcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTk3LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDthaFwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMDMtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMDQ6Y29uZmlnIElQNl9ORl9NQVRDSF9FVUk2NFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTA1LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtldWk2NFwmIzM0OyBhZGRyZXNzIGNoZWNrJiMzOTtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIElQNl9ORl9NQVRDSF9GUkFHXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O2ZyYWdcJiMzNDsgRnJhZ21lbnRhdGlvbiBoZWFkZXIgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBJUDZfTkZfTUFUQ0hfT1BUU1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtoYmhcJiMzNDsgaG9wLWJ5LWhvcCBhbmQgXCYjMzQ7ZHN0XCYjMzQ7IG9wdHMgaGVhZGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTEzMS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEzMjpjb25maWcgSVA2X05GX01BVENIX0hMXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O2hsXCYjMzQ7IGhvcGxpbWl0IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE0MC1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjE0MTpjb25maWcgSVA2X05GX01BVENIX0lQVjZIRUFERVJcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7aXB2NmhlYWRlclwmIzM0OyBJUHY2IEV4dGVuc2lvbiBIZWFkZXJzIE1hdGNoJiMzOTtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxNTA6Y29uZmlnIElQNl9ORl9NQVRDSF9NSFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTUxLVx0dHJpc3RhdGUgJiMzOTtcJiMzNDttaFwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNTctXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxNTg6Y29uZmlnIElQNl9ORl9NQVRDSF9SUEZJTFRFUlxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTU5LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtycGZpbHRlclwmIzM0OyByZXZlcnNlIHBhdGggZmlsdGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE2OC1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjE2OTpjb25maWcgSVA2X05GX01BVENIX1JUXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNzAtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O3J0XCYjMzQ7IFJvdXRpbmcgaGVhZGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE3Ny1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjE3ODpjb25maWcgSVA2X05GX01BVENIX1NSSFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTc5LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtzcmhcJiMzNDsgU2VnbWVudCBSb3V0aW5nIGhlYWRlciBtYXRjaCBzdXBwb3J0JiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODY1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczoKCioqRXhhbWluaW5nIElQdjYgTmV0ZmlsdGVyIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIE5ldGZpbHRlciBjb25maWd1cmF0aW9ucyDigJMgYElQNl9ORl9NQVRDSF9PUFRTYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3NvY2lhdGUgYElQNl9ORl9NQVRDSF9PUFRTYCB3aXRoIGhhbmRsaW5nIEhvcC1ieS1Ib3AgKGhiaCkgb3B0aW9ucywgYW5kIHBvc3NpYmx5IERlc3RpbmF0aW9uIE9wdGlvbnMgKGBkc3RgIG9wdHMpIHRvby4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBkZXRhaWxzIGNhbiBiZSB0cmlja3kgYW5kIGEgcXVpY2sgcmVmcmVzaGVyIGlzIGFsd2F5cyBhIGdvb2QgaWRlYS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuCgpUaGVyZWZvcmUsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGVgIGZpbGUuIEl0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBzZXR0bGUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2dF9oYmgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlPTM2PW9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfTUgpICYjNDM7PSBpcDZ0X21oLm9cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfSVA2X05GX01BVENIX09QVFMpICYjNDM7PSBpcDZ0X2hiaC5vXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SUEZJTFRFUikgJiM0Mzs9IGlwNnRfcnBmaWx0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIE5ldGZpbHRlciBkZWZpbmVzIGZvciBJUHY2IG1hdGNoaW5nLiBSaWdodCwgKipOZXR3b3JrIEZpbHRlciBhbmQgSVB2NiBIZWFkZXIgTWF0Y2hlcyoqLiBJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBgSVA2X05GX01BVENIX09QVFNgIGFuZCBgSVA2X05GX01BVENIX0lQVjZIRUFERVJgIGZvciB0aGUgYGlwNnRfaXB2NmhlYWRlci5vYCBtb2R1bGUuIEFuZCwgSSByZWNhbGwgbm93LCBmb3IgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgbW9kdWxlLCBJJiMzOTtsbCBuZWVkIGBJUDZfTkZfTUFUQ0hfU1JIYCBmb3IgYGlwNnRfc3JoLm9gLgoKTm93LCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZWAuIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIGFuZCB2ZXJpZnkgdGhhdCBJIGhhdmUgaWRlbnRpZmllZCBhbGwgcmVsZXZhbnQgZGVmaW5lcyBmb3IgdGhlIHRhc2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2dF9pcHY2aGVhZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfSVA2X05GX01BVENIX0ZSQUcpICYjNDM7PSBpcDZ0X2ZyYWcub1xubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUikgJiM0Mzs9IGlwNnRfaXB2NmhlYWRlci5vXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9NSCkgJiM0Mzs9IGlwNnRfbWgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZ0X3NyaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzk9b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SVCkgJiM0Mzs9IGlwNnRfcnQub1xubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfU1JIKSAmIzQzOz0gaXA2dF9zcmgub1xubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTQxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODU1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKk5ldHdvcmsgRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24gQ29uY2VybnMqKgoKUmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYElQNl9ORl9NQVRDSF9PUFRTYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi5zb21ldGhpbmcgZmVlbHMgb2ZmLiBXaGF0IGFib3V0IGBJUDZfTkZfSVBUQUJMRVNgPyBJdCBoYXMgdG8gYmUgYSBkZXBlbmRlbmN5IGZvciB0aGVzZSBvdGhlciBtYXRjaCBvcHRpb25zLCBkb2VzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSVA2X05GX01BVENIX09QVFNgIHRoZXJlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBJIGNvbnRpbnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVA2X05GX01BVENIX09QVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0xMTQ9Y29uZmlnIElQNl9ORl9NQVRDSF9GUkFHXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBJUDZfTkZfTUFUQ0hfT1BUU1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtoYmhcJiMzNDsgaG9wLWJ5LWhvcCBhbmQgXCYjMzQ7ZHN0XCYjMzQ7IG9wdHMgaGVhZGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGFsd2F5cyBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSB3ZWIgb2YgaW50ZXJjb25uZWN0aW9ucyBhdCBwbGF5IGhlcmUuIEZvcmdldCB0aGUgc3VyZmFjZSBsZXZlbCBmb3IgYSBtb21lbnQ7IEkgbmVlZCB0byBkaWcgZGVlcC4gSSB3YW50IHRvIGlkZW50aWZ5ICpldmVyeSogZGVwZW5kZW5jeSwgYm90aCBleHBsaWNpdCBhbmQgaW1wbGljaXQuIFRoYXQgbWVhbnMgY29uc2lkZXJpbmcgbm90IGp1c3QgdGhlIGRpcmVjdCBsaW5rcywgdGhlIG9idmlvdXMgcmVsYXRpb25zaGlwcywgYnV0IGFsc28gdGhlIGNhc2NhZGluZyBlZmZlY3RzLCB0aGUgcG90ZW50aWFsIHNpZGUtY2hhbm5lbCBpbmZsdWVuY2VzLCBhbmQgYW55IGFzc3VtcHRpb25zIHRoYXQgbWF5IGJlIGJha2VkIGluLiBBcmUgdGhlc2UgZGVwZW5kZW5jaWVzIHdlbGwtZG9jdW1lbnRlZD8gQXJlIHRoZXkgdmVyc2lvbi1sb2NrZWQgYXBwcm9wcmlhdGVseT8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBwb2ludHMgb2YgZmFpbHVyZSwgYW5kIHdoYXQgYXJlIHRoZSBtaXRpZ2F0aW9ucyBpbiBwbGFjZSwgb3IgKm5vdCogaW4gcGxhY2U/IFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgZHJhd2luZyBhIHByZXR0eSBkZXBlbmRlbmN5IGdyYXBoOyBpdCYjMzk7cyBhYm91dCBhbnRpY2lwYXRpbmcgdGhlIGJyZWFraW5nIHBvaW50cywgdGhlIHZ1bG5lcmFiaWxpdGllcywgdGhlIGFyZWFzIHdoZXJlIGEgc2VlbWluZ2x5IG1pbm9yIGNoYW5nZSBjb3VsZCB0cmlnZ2VyIGEgY2F0YXN0cm9waGljIGNhc2NhZGUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHdlYWtlc3QgbGlua3MsIHRoZSBjb21wb25lbnRzIHRoYXQgYXJlIG9wZXJhdGluZyB3aXRob3V0IHN1ZmZpY2llbnQgb3ZlcnNpZ2h0IG9yIHJvYnVzdCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZG93bnN0cmVhbSBpbXBhY3Qgb2YgZWFjaCBwb3RlbnRpYWwgZmFpbHVyZS4gSSYjMzk7bSB0cnlpbmcgdG8gcGljdHVyZSB0aGUgcmlwcGxlIGVmZmVjdCBhbmQgdGhlIG1pdGlnYXRpb24gc3RyYXRlZ2llcyB0aGF0IHdpbGwgYmUgcmVxdWlyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIGRlcGVuZGVuY2llcyBleGlzdCwgd2hhdCB0aGV5IGNvbnRyaWJ1dGUsIGFuZCBpZiB0aGV5JiMzOTtyZSBhY3R1YWxseSAqbmVjZXNzYXJ5Ki4gT2Z0ZW4sIG9wdGltaXphdGlvbiBiZWdpbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XG4gMTIxOlx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDEyMjpcdFxuIDEyMzpcdGNvbmZpZyBJUDZfTkZfTUFUQ0hfT1BUU1xuIDEyNDpcdFx0dHJpc3RhdGUgJiMzOTtcJiMzNDtoYmhcJiMzNDsgaG9wLWJ5LWhvcCBhbmQgXCYjMzQ7ZHN0XCYjMzQ7IG9wdHMgaGVhZGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuIDEyNTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAxMjY6XHRcdGhlbHBcbiAxMjc6XHRcdCAgVGhpcyBhbGxvd3Mgb25lIHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgb24gdGhlIGhvcC1ieS1ob3BcbiAxMjg6XHRcdCAgYW5kIGRlc3RpbmF0aW9uIG9wdGlvbnMgaGVhZGVycyBvZiBhIHBhY2tldC5cbiAxMjk6XHRcbiAxMzA6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMTMxOlx0XG4gMTMyOlx0Y29uZmlnIElQNl9ORl9NQVRDSF9ITFxuIDEzMzpcdFx0dHJpc3RhdGUgJiMzOTtcJiMzNDtobFwmIzM0OyBob3BsaW1pdCBtYXRjaCBzdXBwb3J0JiMzOTtcbiAxMzQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMTM1Olx0XHRzZWxlY3QgTkVURklMVEVSX1hUX01BVENIX0hMXG4gMTM2Olx0XHRoZWxwXG4gMTM3Olx0XHQgIFRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXImIzM5O3MgY29udmVuaWVuY2VcbiAxMzg6XHRcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcbiAxMzk6XHRcdCAgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkxOAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJUHY2IE5ldGZpbHRlciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIElQdjYgTmV0ZmlsdGVyIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGEgZmV3IHRoaW5ncyBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhlIHByZXNlbmNlIG9mIHRoYXQgYE5FVEZJTFRFUl9BRFZBTkNFRGAgb3B0aW9uIGlzIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZWQuIFRoYXQgc2VlbXMgaW1wb3J0YW50LCBnaXZlbiBpdHMgcm9sZSBoZXJlLgoKQWxyaWdodCwgc28gdGhlIGtleSBkZXBlbmRlbmN5IHNlZW1zIHRvIGJlIHRpZWQgdG8gYElQNl9ORl9JUFRBQkxFU2AuIEFzIEkgdW5kZXJzdGFuZCBpdCwgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciB0aGUgZnVuY3Rpb25hbGl0eSB0byBiZSBhdmFpbGFibGUuIEJ1dCBob2xkIG9uLi4uIEl0IHNlZW1zIHRoYXQgYElQNl9ORl9JUFRBQkxFU2AgaXRzZWxmIHJlbGllcyBvbiBgTkVURklMVEVSX1hUQUJMRVNgLiBTbyB0aGF0JiMzOTtzIGFub3RoZXIgcHJlcmVxdWlzaXRlLiBHb3QgaXQuIFNvIGZhciwgdGhlIGRlcGVuZGVudCBtb2R1bGVzIGFyZToKCiogICBgSVA2X05GX0lQVEFCTEVTYAoqICAgYElQNl9ORl9NQVRDSF9PUFRTYAoqICAgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYAoqICAgYElQNl9ORl9NQVRDSF9TUkhgCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvcmUgZnVuY3Rpb25zLCB0aGUgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGFyZToKCiogICBgaGJoX210NmAKKiAgIGBpcHY2aGVhZGVyX210NmAKKiAgIGBzcmhfbXQ2YAoqICAgYHNyaDFfbXQ2YAoKQWgsIEkgc2VlIHRoYXQgYGhiaF9tdDZgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIEJldHRlciBjaGVjayBgaXA2dF9oYmguY2AgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgc2NvcGUuIEkgbmVlZCB0byBiZSBjYXJlZnVsLCBhcyBzdGF0aWMgY2FuIGluZGljYXRlIGlzc3VlcyB3aXRoIGJlaW5nIGxvYWRlZCBhcyBhIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGJoX210NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jPTIzPU1PRFVMRV9BTElBUyhcJiMzNDtpcDZ0X2RzdFwmIzM0Oyk7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtNDAtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzo0MTpzdGF0aWMgc3RydWN0IHh0X21hdGNoIGhiaF9tdDZfcmVnW10gX19yZWFkX21vc3RseTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTQyLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM9NDM9c3RhdGljIGJvb2xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjQ0OmhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtNDUte1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTYwLVx0ZXJyID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnB0cixcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjYxOlx0XHRcdCAgICAocGFyLVx1MDAzZW1hdGNoID09IFx1MDAyNmhiaF9tdDZfcmVnWzBdKSA/XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy02Mi1cdFx0XHQgICAgTkVYVEhEUl9IT1AgOiBORVhUSERSX0RFU1QsIE5VTEwsIE5VTEwpO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE2NC1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE2NTpzdGF0aWMgaW50IGhiaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xNjYte1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE4NS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE4NjpzdGF0aWMgc3RydWN0IHh0X21hdGNoIGhiaF9tdDZfcmVnW10gX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE4Ny1cdHtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE4ODpcdFx0LyogTm90ZSwgaGJoX210NiByZWxpZXMgb24gdGhlIG9yZGVyIG9mIGhiaF9tdDZfcmVnICovXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xODktXHRcdC5uYW1lXHRcdD0gXCYjMzQ7aGJoXCYjMzQ7LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMTkwLVx0XHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MTkxOlx0XHQubWF0Y2hcdFx0PSBoYmhfbXQ2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMTkyLVx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXA2dF9vcHRzKSxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE5MzpcdFx0LmNoZWNrZW50cnlcdD0gaGJoX210Nl9jaGVjayxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE5NC1cdFx0Lm1lXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMTk4LVx0XHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MTk5Olx0XHQubWF0Y2hcdFx0PSBoYmhfbXQ2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjAwLVx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXA2dF9vcHRzKSxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIwMTpcdFx0LmNoZWNrZW50cnlcdD0gaGJoX210Nl9jaGVjayxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIwMi1cdFx0Lm1lXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjA1LVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MjA2OnN0YXRpYyBpbnQgX19pbml0IGhiaF9tdDZfaW5pdCh2b2lkKVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjA3LXtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIwODpcdHJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaGVzKGhiaF9tdDZfcmVnLCBBUlJBWV9TSVpFKGhiaF9tdDZfcmVnKSk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0yMDktfVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjEwLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MjExOnN0YXRpYyB2b2lkIF9fZXhpdCBoYmhfbXQ2X2V4aXQodm9pZClcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIxMi17XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzoyMTM6XHR4dF91bnJlZ2lzdGVyX21hdGNoZXMoaGJoX210Nl9yZWcsIEFSUkFZX1NJWkUoaGJoX210Nl9yZWcpKTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIxNC19XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0yMTUtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzoyMTY6bW9kdWxlX2luaXQoaGJoX210Nl9pbml0KTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIxNzptb2R1bGVfZXhpdChoYmhfbXQ2X2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc4MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN0YXRpYyBGdW5jdGlvbiBRdWVzdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGNsZWFyOiBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGdldCBpbmxpbmVkLiBJbml0aWFsbHksIG15IG1pbmQganVtcGVkIHRvIGBoYmhfbXQ2YC4gQnV0IHdhaXQsIGBoYmhfbXQ2YCAqaXMqIGEgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCBpbiBgeHRfbWF0Y2hgLiBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuLCB0aGUgY29tcGlsZXIgd29uJiMzOTt0IGlubGluZSBpdDsgaXQgKndpbGwqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gU28sIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlmIHdlICpkaWQqIHdhbnQgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHdoZXJlIHdvdWxkIHRoZXkgYmU/IElzIGB4dF9yZWdpc3Rlcl9tYXRjaGVzYCB0aGUgZW50cnk/IE5vLCB0aGUgYWN0dWFsIGVudHJ5IHBvaW50IGZvciBwYWNrZXQgbWF0Y2hpbmcgaXMgcmVhbGx5IG1vcmUgbGlrZSBgaXA2dF9kb190YWJsZWAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBCdXQgYGhiaF9tdDZgIGlzIHRoZSByZWFsIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQgaGVyZS4KClRoaW5raW5nIHRocm91Z2ggaXQgZnVydGhlciwgaWYgYSBmdW5jdGlvbiAqaXMqIHN0YXRpYyBidXQgaXRzIGFkZHJlc3MgaXMgYWN0dWFsbHkgdGFrZW4sIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXTigJlzIHRvdGFsbHkgZmluZSB0byBsaXN0IGl0IGFzIHRoZSBtYWluIGZ1bmN0aW9uIGhlcmUuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBhbnkgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYy4KCk5vcGUuIEFsbCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMgY2FsbGJhY2tzOiBgaGJoX210NmAsIGBpcHY2aGVhZGVyX210NmAsIGBzcmhfbXQ2YCwgYW5kIGBzcmgxX210NmAuIFNpbmNlIHRoZXkmIzM5O3JlIGNhbGxiYWNrcywgdGhleSAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLiBXZSBjYW4gY29uZmlkZW50bHkgbGlzdCB0aGVtLgoKTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBpcDZ0X2lwdjZoZWFkZXIuY2AgYW5kIGBpcDZ0X3NyaC5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZoZWFkZXJfbXQ2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYz0yNj1zdGF0aWMgYm9vbFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjI3OmlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0yOC17XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTExMi1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYzoxMTM6c3RhdGljIGludCBpcHY2aGVhZGVyX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMTQte1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMjQtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTI1OnN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggaXB2NmhlYWRlcl9tdDZfcmVnIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTI2LVx0Lm5hbWVcdFx0PSBcJiMzNDtpcHY2aGVhZGVyXCYjMzQ7LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEyNy1cdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjYsXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTI4Olx0Lm1hdGNoXHRcdD0gaXB2NmhlYWRlcl9tdDYsXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTI5LVx0Lm1hdGNoc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGlwNnRfaXB2NmhlYWRlcl9pbmZvKSxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYzoxMzA6XHQuY2hlY2tlbnRyeVx0PSBpcHY2aGVhZGVyX210Nl9jaGVjayxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMzEtXHQuZGVzdHJveVx0PSBOVUxMLFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMzQtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTM1OnN0YXRpYyBpbnQgX19pbml0IGlwdjZoZWFkZXJfbXQ2X2luaXQodm9pZClcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMzYte1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjEzNzpcdHJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaChcdTAwMjZpcHY2aGVhZGVyX210Nl9yZWcpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEzOC19XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTM5LVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjE0MDpzdGF0aWMgdm9pZCBfX2V4aXQgaXB2NmhlYWRlcl9tdDZfZXhpdCh2b2lkKVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTE0MS17XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTQyOlx0eHRfdW5yZWdpc3Rlcl9tYXRjaChcdTAwMjZpcHY2aGVhZGVyX210Nl9yZWcpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTE0My19XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTQ0LVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjE0NTptb2R1bGVfaW5pdChpcHY2aGVhZGVyX210Nl9pbml0KTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYzoxNDY6bW9kdWxlX2V4aXQoaXB2NmhlYWRlcl9tdDZfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzE5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3JoX210NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTIzLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MjQ6c3RhdGljIGJvb2wgc3JoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0yNS17XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM9MTI1PXN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0yNjctXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzoyNjg6c3RhdGljIGludCBzcmhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMjY5LXtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYz0yODc9c3RhdGljIGludCBzcmgxX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMDUtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMDY6c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBzcmhfbXQ2X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMDctXHR7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzEwLVx0XHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzExOlx0XHQubWF0Y2hcdFx0PSBzcmhfbXQ2LFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzEyLVx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXA2dF9zcmgpLFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzEzOlx0XHQuY2hlY2tlbnRyeVx0PSBzcmhfbXQ2X2NoZWNrLFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzE0LVx0XHQubWVcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMjYtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMjc6c3RhdGljIGludCBfX2luaXQgc3JoX210Nl9pbml0KHZvaWQpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMjgte1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzI5Olx0cmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMoc3JoX210Nl9yZWcsIEFSUkFZX1NJWkUoc3JoX210Nl9yZWcpKTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzMC19XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMzEtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMzI6c3RhdGljIHZvaWQgX19leGl0IHNyaF9tdDZfZXhpdCh2b2lkKVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzMzLXtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMzNDpcdHh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhzcmhfbXQ2X3JlZywgQVJSQVlfU0laRShzcmhfbXQ2X3JlZykpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzM1LX1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzNi1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMzNzptb2R1bGVfaW5pdChzcmhfbXQ2X2luaXQpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzM4Om1vZHVsZV9leGl0KHNyaF9tdDZfZXhpdCk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBIZWFkZXIgTWF0Y2hpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBpdC4gVGhlIGtleSBmdW5jdGlvbnMgaGVyZSBhcmUgYGhiaF9tdDZgLCBgaXB2NmhlYWRlcl9tdDZgLCBgc3JoX210NmAsIGFuZCBgc3JoMV9tdDZgLiBBbGwgdGhvc2UgYXJlIGNsZWFybHkgc3RhdGljLiBUaGUgaW1wb3J0YW50IGRldGFpbCBpcyBob3cgdGhleSYjMzk7cmUgdXNlZDsgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZCBhcyBjYWxsYmFja3Mgd2l0aGluIGB4dF9tYXRjaGAgc3RydWN0cy4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBub3QgZ29pbmcgdG8gYmUgaW5saW5lZCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIHN5bWJvbCBhbmFseXNpcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGdldCB0aGVtIGxpc3RlZCBwcm9wZXJseSBpbiBGb2N1c1N5bWJvbHMuCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBJIHNlZSBgSVA2X05GX0lQVEFCTEVTYCwgYElQNl9ORl9NQVRDSF9PUFRTYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4gQSBxdWljayB0aG91Z2h0OiBgSVA2X05GX0lQVEFCTEVTYCBsb29rcyBsaWtlIGEgcHJlcmVxdWlzaXRlIGZvciB0aGUgb3RoZXJzLCBsaWtlIGl0IGlzIGEgcGFyZW50IGZlYXR1cmUuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIGBJUDZfTkZfSVBUQUJMRVNgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUDZfTkZfSVBUQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz02PW1lbnUgXCYjMzQ7SVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy05LSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3Bcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEwOmNvbmZpZyBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBJUDYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz03Mj1jb25maWcgTkZfTE9HX0lQVjZcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy03OS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjgwOmNvbmZpZyBJUDZfTkZfSVBUQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7SVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk2NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBJUDZfTkZfSVBUQUJMRVMqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJUDZfTkZfSVBUQUJMRVNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyBhcmUgdGllZCB0byBpdC4gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciB0aGUgb2J2aW91czsgSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBpbmNsdWRlcyBub3QganVzdCB0aGUgY29yZSBOZXRmaWx0ZXIgbW9kdWxlcyB0aGF0IGl0IGRpcmVjdGx5IHJlbGllcyB1cG9uLCBidXQgYWxzbyBhbnkgb3RoZXIgY29tcG9uZW50cywgcG90ZW50aWFsbHkgZXZlbiBrZXJuZWwgc3Vic3lzdGVtcywgdGhhdCBtYXkgaW5kaXJlY3RseSBpbmZsdWVuY2Ugb3IgYmUgaW5mbHVlbmNlZCBieSBpdHMgb3BlcmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgZmlsdGVyaW5nLCBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIElQdjYtcmVsYXRlZCBjb21wb25lbnRzLiBJ4oCZbSB0aGlua2luZyBhYm91dCBob3cgYSBtb2R1bGUgbGlrZSBgSVA2X05GX0lQVEFCTEVTYCBhZmZlY3RzIHRoZSBicm9hZGVyIGtlcm5lbCBhcmNoaXRlY3R1cmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBjb25mbGljdHMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGlzIHRvIGFzc2VzcyBpdHMgb3ZlcmFsbCBpbXBhY3QgYW5kIHBvcnRhYmlsaXR5LCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb25zIG9yIG1vZGlmaWNhdGlvbnMuIFRoZSBpbXBsaWNhdGlvbnMgb24gcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHdvdWxkIGFsc28gYmUgc29tZXRoaW5nIHRvIGNvbnNpZGVyLiBVbHRpbWF0ZWx5LCB1bmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBmdW5kYW1lbnRhbCB0byBncmFzcGluZyBpdHMgdHJ1ZSBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBhIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzU6XHRcdHNlbGVjdCBORl9MT0dfU1lTTE9HXG4gIDc2Olx0XHRoZWxwXG4gIDc3Olx0XHQgIFRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXImIzM5O3MgY29udmVuaWVuY2VcbiAgNzg6XHRcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMgQ09ORklHX05GX0xPR19TWVNMT0cuXG4gIDc5Olx0XG4gIDgwOlx0Y29uZmlnIElQNl9ORl9JUFRBQkxFU1xuICA4MTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nKVwmIzM0O1xuICA4MjpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJUFY2XG4gIDgzOlx0XHRzZWxlY3QgTkVURklMVEVSX1hUQUJMRVNcbiAgODQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA4NTpcdFx0aGVscFxuICA4NjpcdFx0ICBpcDZ0YWJsZXMgaXMgYSBnZW5lcmFsLCBleHRlbnNpYmxlIHBhY2tldCBpZGVudGlmaWNhdGlvbiBmcmFtZXdvcmsuXG4gIDg3Olx0XHQgIEN1cnJlbnRseSBvbmx5IHRoZSBwYWNrZXQgZmlsdGVyaW5nIGFuZCBwYWNrZXQgbWFuZ2xpbmcgc3Vic3lzdGVtXG4gIDg4Olx0XHQgIGZvciBJUHY2IHVzZSB0aGlzLCBidXQgY29ubmVjdGlvbiB0cmFja2luZyBpcyBnb2luZyB0byBmb2xsb3cuXG4gIDg5Olx0XHQgIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBlaXRoZXIgb2YgdGhvc2UuXG4gIDkwOlx0XG4gIDkxOlx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICA5MjpcdFxuICA5MzpcdGlmIElQNl9ORl9JUFRBQkxFU1xuICA5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGl0IHJlYWxseSBoaW5nZXMgb24gaG93IElQdjYgYW5kIHRoZSBpbnRlcm5ldCBwcm90b2NvbHMgYXJlIHNldCB1cC4gVG8gZ2V0IHRoZSBmZWF0dXJlcyBJIG5lZWQsIEkmIzM5O20gc2VlaW5nIHRoYXQgSSYjMzk7bGwgbmVlZCB0aGVzZSBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBgSVA2X05GX0lQVEFCTEVTYCwgYElQNl9ORl9NQVRDSF9PUFRTYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4gQnV0IGhvbGQgb24sIGl0IGxvb2tzIGxpa2UgYElQNl9ORl9NQVRDSF9PUFRTYCBpcyBkZXBlbmRlbnQgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRoYXQmIzM5O3MgYSBrZXkgZGVwZW5kZW5jeS4gUmlnaHQsIG5lZWQgdG8gYnJpbmcgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaW50byB0aGUgbWl4LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYWJvdXQgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgdG9vOyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgYWxzbyByZWxpZXMgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRpbWUgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM1Olx0XHRzZWxlY3QgTkVURklMVEVSX1hUX01BVENIX0hMXG4gMTM2Olx0XHRoZWxwXG4gMTM3Olx0XHQgIFRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXImIzM5O3MgY29udmVuaWVuY2VcbiAxMzg6XHRcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcbiAxMzk6XHRcdCAgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC5cbiAxNDA6XHRcbiAxNDE6XHRjb25maWcgSVA2X05GX01BVENIX0lQVjZIRUFERVJcbiAxNDI6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7aXB2NmhlYWRlclwmIzM0OyBJUHY2IEV4dGVuc2lvbiBIZWFkZXJzIE1hdGNoJiMzOTtcbiAxNDM6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDE0NDpcdFx0aGVscFxuIDE0NTpcdFx0ICBUaGlzIG1vZHVsZSBhbGxvd3Mgb25lIHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgdXBvblxuIDE0NjpcdFx0ICB0aGUgaXB2NiBleHRlbnNpb24gaGVhZGVycy5cbiAxNDc6XHRcbiAxNDg6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMTQ5Olx0XG4gMTUwOlx0Y29uZmlnIElQNl9ORl9NQVRDSF9NSFxuIDE1MTpcdFx0dHJpc3RhdGUgJiMzOTtcJiMzNDttaFwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbiAxNTI6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMTUzOlx0XHRoZWxwXG4gMTU0Olx0XHQgIFRoaXMgbW9kdWxlIGFsbG93cyBvbmUgdG8gbWF0Y2ggTUggcGFja2V0cy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBJUHY2IE5ldGZpbHRlciBNYXRjaGluZyBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCBvcHRpb24uIFRoZSBjb2RlIGNsZWFybHkgc3RhdGVzIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCBoYXZlIGEgZGVwZW5kZW5jeSBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgbWF0Y2ggb24gdGhlIElQdjYgaGVhZGVyIGl0c2VsZi4gQnV0IG5vdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBJUDZfTkZfTUFUQ0hfU1JIYC4uLiBkb2VzICp0aGF0KiBzaGFyZSB0aGUgc2FtZSBpbmRlcGVuZGVuY2U/IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgU1JIIChTZWdtZW50IFJvdXRpbmcgSGVhZGVyKSBpcyBtb3JlIHNwZWNpYWxpemVkLiBUaGVyZSBtaWdodCBiZSBzb21lIG1vcmUgY29tcGxleCBmZWF0dXJlcyBpbnZvbHZlZCB0aGVyZSB0aGF0IGFyZSByZWxhdGVkIHRvIGFkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgU1JIIG1hdGNoLiBQZXJoYXBzIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgcmVsZXZhbnQgTmV0ZmlsdGVyIGRvY3VtZW50YXRpb24gb3IgY29kZSBleGFtcGxlcyBpcyBpbiBvcmRlciwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUmIzM5O3Mgbm8gc3VidGxlIGRlcGVuZGVuY3kgSSYjMzk7bSBtaXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGVzZSBmZWF0dXJlcyBiZWhhdmUgYXMgZXhwZWN0ZWQgaW4gY29tcGxleCBmaWx0ZXJpbmcgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7cnRcJiMzNDsgUm91dGluZyBoZWFkZXIgbWF0Y2ggc3VwcG9ydCYjMzk7XG4gMTcxOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDE3MjpcdFx0aGVscFxuIDE3MzpcdFx0ICBydCBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgb24gdGhlIHJvdXRpbmdcbiAxNzQ6XHRcdCAgaGVhZGVyIG9mIHRoZSBwYWNrZXQuXG4gMTc1Olx0XG4gMTc2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDE3NzpcdFxuIDE3ODpcdGNvbmZpZyBJUDZfTkZfTUFUQ0hfU1JIXG4gMTc5Olx0XHR0cmlzdGF0ZSAmIzM5O1wmIzM0O3NyaFwmIzM0OyBTZWdtZW50IFJvdXRpbmcgaGVhZGVyIG1hdGNoIHN1cHBvcnQmIzM5O1xuIDE4MDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAxODE6XHRcdGhlbHBcbiAxODI6XHRcdCAgc3JoIG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gbWF0Y2ggcGFja2V0cyBiYXNlZCBvbiB0aGUgc2VnbWVudFxuIDE4MzpcdFx0ICByb3V0aW5nIGhlYWRlciBvZiB0aGUgcGFja2V0LlxuIDE4NDpcdFxuIDE4NTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxODY6XHRcbiAxODc6XHQjIFRoZSB0YXJnZXRzXG4gMTg4Olx0Y29uZmlnIElQNl9ORl9UQVJHRVRfSExcbiAxODk6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7SExcJiMzNDsgaG9wbGltaXQgdGFyZ2V0IHN1cHBvcnQmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg1MgoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiAxMjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyBpbiBOZXRmaWx0ZXIqKgoKT2theSwgc28gYElQNl9ORl9NQVRDSF9TUkhgIGRlZmluaXRlbHkgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4uLiB5ZXAsIGFsbCBwcmVzZW50OiBgSVBWNmAsIGBJUDZfTkZfSVBUQUJMRVNgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYElQNl9ORl9NQVRDSF9PUFRTYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4KClRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSB3YXNuJiMzOTt0IGNvcnJlY3RseSBkcm9wcGluZyBtYWxmb3JtZWQgSVB2NiBleHRlbnNpb24gaGVhZGVyczsgaXQgd2FzIGp1c3QgcmV0dXJuaW5nIGBmYWxzZWAgb24gYSBtYXRjaCBmYWlsdXJlLiBUaGlzIHBhdGNoIGNoYW5nZXMgdGhhdCBiZWhhdmlvci4gUmV0dXJuaW5nIGBmYWxzZWAgb24gYSBtYXRjaCBmYWlsdXJlIGFsbG93cyB0aGUgcGFja2V0IHRvIGNvbnRpbnVlIGFuZCBwb3NzaWJseSB0cmlnZ2VyIGEgdnVsbmVyYWJpbGl0eSwgd2hlcmVhcyBzZXR0aW5nIGBob3Rkcm9wID0gdHJ1ZWAgZHJvcHMgdGhlIHBhY2tldCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYW5kIHNlY3VyZSBiZWhhdmlvci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lIGFjdHVhbGx5LCBzbyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzOiBgaGJoX210NmAsIGBpcHY2aGVhZGVyX210NmAsIGBzcmhfbXQ2YCwgYW5kIGBzcmgxX210NmAuCgpMZXQmIzM5O3MgY2hlY2sgaWYgYGhiaF9tdDZgIGlzIHRoZSBvbmx5IG1hdGNoIGZ1bmN0aW9uIGluIGBpcDZ0X2hiaC5jYC4gWXVwLCB0aGF0JiMzOTtzIHRoZSBvbmUuIFdhaXQsIGBoYmhfbXQ2YCBoYW5kbGVzICpib3RoKiBIb3AtYnktSG9wIGFuZCBEZXN0aW5hdGlvbiBPcHRpb25zIGhlYWRlcnMsIHRoYXQmIzM5O3Mgd2h5IGl0IGlzIGxpc3RlZCBtdWx0aXBsZSB0aW1lcy4gU28gdGhlIGNvZGUgaXMgY29ycmVjdC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byBgaXA2dF9pcHY2aGVhZGVyLmNgLiBPa2F5LCB0aGUgcGF0Y2ggcmVtb3ZlcyBhIGNoZWNrOiBgbGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpYC4gV2h5PyBBaCwgYHNrYl9oZWFkZXJfcG9pbnRlcmAgbm93IHRha2VzIGNhcmUgb2YgdGhhdC4gSXQgd2lsbCBmYWlsIGlmIGBwdHIgJiM0Mzsgc2l6ZW9mKF9oZHIpICZndDsgc2tiLSZndDtsZW5gIGFuZCByZXR1cm4gTlVMTC4gYHNpemVvZihfaGRyKWAgaXMgdGhlIHNhbWUgYXMgYHNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKWAsIHNvIHRoZSBjb2RlIGluIGBza2JfaGVhZGVyX3BvaW50ZXJgIHJlcGxhY2VzIHRoZSBub3cgcmVtb3ZlZCBjaGVjay4gTW9yZSBpbXBvcnRhbnRseSwgaWYgYHNrYl9oZWFkZXJfcG9pbnRlcmAgZmFpbHMsIGl0IG5vdyBzZXRzIGBob3Rkcm9wID0gdHJ1ZWAuIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHJldHVybmVkIGZhbHNlIHdpdGhvdXQgaG90ZHJvcHBpbmcuIFNvIHRoZSBwYXRjaCBtYWtlcyBzdXJlIHRvIHNldCBgaG90ZHJvcCA9IHRydWVgIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQuCgpGaW5hbGx5LCBpbiBgaXA2dF9zcmguY2AsIHRoZSBwYXRjaCBoYW5kbGVzIGVycm9yIGNvZGVzIGZyb20gYGlwdjZfZmluZF9oZHJgLiBOb3csIGlmIGBpcHY2X2ZpbmRfaGRyYCBmYWlscyB3aXRoIGFueXRoaW5nICpvdGhlciogdGhhbiBgLUVOT0VOVGAgKGUuZy4sIGEgbWFsZm9ybWVkIGhlYWRlciksIGl0IGp1bXBzIHRvIGBob3Rkcm9wID0gdHJ1ZWAuIFRoaXMgaXMgYW5vdGhlciBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGVuc3VyZXMgbWFsZm9ybWVkIHBhY2tldHMgYXJlIGRyb3BwZWQgY29ycmVjdGx5LgoKRXZlcnl0aGluZyBsb29rcyBnb29kLiBUaGUgcGF0Y2ggaXMgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nLCBjb3JyZWN0bHkgaGFuZGxpbmcgYW5kIGhvdGRyb3BwaW5nIHBhY2tldHMgd2l0aCBiYWQgaGVhZGVycy4gSSYjMzk7bSByZWFkeSB0byBtYXJrIHRoaXMgYXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVA2X05GX0lQVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfT1BUUyYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUiYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfU1JIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGJoX210NiYjMzQ7LAogICAgJiMzNDtpcHY2aGVhZGVyX210NiYjMzQ7LAogICAgJiMzNDtzcmhfbXQ2JiMzNDssCiAgICAmIzM0O3NyaDFfbXQ2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgbmV0ZmlsdGVyIG1hdGNoIGV4dGVuc2lvbnMgKGhiaCwgaXB2NmhlYWRlciwgc3JoKSB0byBwcm9wZXJseSBkcm9wIHBhY2tldHMgd2l0aCBtYWxmb3JtZWQgZXh0ZW5zaW9uIGhlYWRlcnMgYnkgc2V0dGluZyBgcGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlYCBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGZhbHNlICh3aGljaCB3b3VsZCBhbGxvdyB0aGUgcGFja2V0IHRvIGNvbnRpbnVlIHRyYXZlcnNhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgZmlsdGVyaW5nIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgbWFsZm9ybWVkIHBhY2tldHMgYXJlIGhhbmRsZWQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVA2X05GX0lQVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfT1BUUyYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUiYjMzQ7LAogICAgJiMzNDtJUDZfTkZfTUFUQ0hfU1JIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGJoX210NiYjMzQ7LAogICAgJiMzNDtpcHY2aGVhZGVyX210NiYjMzQ7LAogICAgJiMzNDtzcmhfbXQ2JiMzNDssCiAgICAmIzM0O3NyaDFfbXQ2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgbmV0ZmlsdGVyIG1hdGNoIGV4dGVuc2lvbnMgKGhiaCwgaXB2NmhlYWRlciwgc3JoKSB0byBwcm9wZXJseSBkcm9wIHBhY2tldHMgd2l0aCBtYWxmb3JtZWQgZXh0ZW5zaW9uIGhlYWRlcnMgYnkgc2V0dGluZyBgcGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlYCBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGZhbHNlICh3aGljaCB3b3VsZCBhbGxvdyB0aGUgcGFja2V0IHRvIGNvbnRpbnVlIHRyYXZlcnNhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgZmlsdGVyaW5nIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgbWFsZm9ybWVkIHBhY2tldHMgYXJlIGhhbmRsZWQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZWApIHJhdGhlciB0aGFuIGp1c3QgcmV0dXJuaW5nIGZhbHNlIG9yIHByb2NlZWRpbmcgd2l0aCBwYXJzaW5nLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cblxuQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgcGFja2V0IHBhcnNpbmcgYnVncyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIHJlYWRzKSBhcmUgYWRlcXVhdGVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMDVmMWI4ZWNjMjIwMWVhYTU1ZTE0OGNmYTFhNGI2ODgzYzAzZDBmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMDoyODo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKaW5kZXggNmQxYTVkMjAyNmE2Ny4uOWYwNGI0ZDhmMTZmZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKQEAgLTYyLDIxICYjNDM7NjIsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCQkgICAgTkVYVEhEUl9IT1AgOiBORVhUSERSX0RFU1QsIE5VTEwsIE5VTEwpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCWlmIChlcnIgIT0gLUVOT0VOVCkKLQkJCXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiYjNDM7CQkJZ290byBob3Rkcm9wOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJb2ggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0c2gpLCAmYW1wO19vcHRzaCk7Ci0JaWYgKG9oID09IE5VTEwpIHsKLQkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KJiM0MzsJaWYgKCFvaCkKJiM0MzsJCWdvdG8gaG90ZHJvcDsKIAogCWhkcmxlbiA9IGlwdjZfb3B0bGVuKG9oKTsKIAlpZiAoc2tiLSZndDtsZW4gLSBwdHIgJmx0OyBoZHJsZW4pIHsKLQkJLyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdCYjMzk7cyBsZW5ndGggZmllbGQgKi8KLQkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJLyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdHMgbGVuZ3RoIGZpZWxkICovCiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAJfQogCiAJcHJfZGVidWcoJiMzNDtJUHY2IE9QVFMgTEVOICV1ICV1ICYjMzQ7LCBoZHJsZW4sIG9oLSZndDtoZHJsZW4pOwpAQCAtMTA0LDggJiM0MzsxMDEsOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCQlicmVhazsKIAkJCXRwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX29wdHR5cGUpLAogCQkJCQkJJmFtcDtfb3B0dHlwZSk7Ci0JCQlpZiAodHAgPT0gTlVMTCkKLQkJCQlicmVhazsKJiM0MzsJCQlpZiAoIXRwKQomIzQzOwkJCQlnb3RvIGhvdGRyb3A7CiAKIAkJCS8qIFR5cGUgY2hlY2sgKi8KIAkJCWlmICgqdHAgIT0gKG9wdGluZm8tJmd0O29wdHNbdGVtcF0gJmFtcDsgMHhGRjAwKSAmZ3Q7Jmd0OyA4KSB7CkBAIC0xMjEsMTIgJiM0MzsxMTgsMTIgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAKIAkJCQkvKiBsZW5ndGggZmllbGQgZXhpc3RzID8gKi8KIAkJCQlpZiAoaGRybGVuICZsdDsgMikKLQkJCQkJYnJlYWs7CiYjNDM7CQkJCQlnb3RvIGhvdGRyb3A7CiAJCQkJbHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIgJiM0MzsgMSwKIAkJCQkJCQlzaXplb2YoX29wdGxlbiksCiAJCQkJCQkJJmFtcDtfb3B0bGVuKTsKLQkJCQlpZiAobHAgPT0gTlVMTCkKLQkJCQkJYnJlYWs7CiYjNDM7CQkJCWlmICghbHApCiYjNDM7CQkJCQlnb3RvIGhvdGRyb3A7CiAJCQkJc3BlY19sZW4gPSBvcHRpbmZvLSZndDtvcHRzW3RlbXBdICZhbXA7IDB4MDBGRjsKIAogCQkJCWlmIChzcGVjX2xlbiAhPSAweDAwRkYgJmFtcDsmYW1wOyBzcGVjX2xlbiAhPSAqbHApIHsKQEAgLTE0NCwxMCAmIzQzOzE0MSwxMCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCS8qIFN0ZXAgdG8gdGhlIG5leHQgKi8KIAkJCXByX2RlYnVnKCYjMzQ7bGVuJTA0WFxuJiMzNDssIG9wdGxlbik7CiAKLQkJCWlmICgocHRyICZndDsgc2tiLSZndDtsZW4gLSBvcHRsZW4gfHwgaGRybGVuICZsdDsgb3B0bGVuKSAmYW1wOyZhbXA7Ci0JCQkgICAgdGVtcCAmbHQ7IG9wdGluZm8tJmd0O29wdHNuciAtIDEpIHsKJiM0MzsJCQlpZiAocHRyICZndDsgc2tiLSZndDtsZW4gfHwgb3B0bGVuICZndDsgc2tiLSZndDtsZW4gLSBwdHIgfHwKJiM0MzsJCQkgICAgaGRybGVuICZsdDsgb3B0bGVuKSB7CiAJCQkJcHJfZGVidWcoJiMzNDtuZXcgcG9pbnRlciBpcyB0b28gbGFyZ2UhXG4mIzM0Oyk7Ci0JCQkJYnJlYWs7CiYjNDM7CQkJCWdvdG8gaG90ZHJvcDsKIAkJCX0KIAkJCXB0ciAmIzQzOz0gb3B0bGVuOwogCQkJaGRybGVuIC09IG9wdGxlbjsKQEAgLTE1OSw2ICYjNDM7MTU2LDEwIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCX0KIAogCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0Mztob3Rkcm9wOgomIzQzOwlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYwppbmRleCBjNTJmZjkyOWM5M2IzLi5hZWY4ZjY5ZGE3ZmI1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jCkBAIC0yOCw3ICYjNDM7MjgsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiB7CiAJY29uc3Qgc3RydWN0IGlwNnRfaXB2NmhlYWRlcl9pbmZvICppbmZvID0gcGFyLSZndDttYXRjaGluZm87CiAJdW5zaWduZWQgaW50IHRlbXA7Ci0JaW50IGxlbjsKIAl1OCBuZXh0aGRyOwogCXVuc2lnbmVkIGludCBwdHI7CiAKQEAgLTM4LDggJiM0MzszNyw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAluZXh0aGRyID0gaXB2Nl9oZHIoc2tiKS0mZ3Q7bmV4dGhkcjsKIAkvKiBwb2ludGVyIHRvIHRoZSAxc3QgZXh0aGRyICovCiAJcHRyID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKLQkvKiBhdmFpbGFibGUgbGVuZ3RoICovCi0JbGVuID0gc2tiLSZndDtsZW4gLSBwdHI7CiAJdGVtcCA9IDA7CiAKIAl3aGlsZSAobmZfaXA2X2V4dF9oZHIobmV4dGhkcikpIHsKQEAgLTUyLDkgJiM0Mzs0OSw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCXRlbXAgfD0gTUFTS19OT05FOwogCQkJYnJlYWs7CiAJCX0KLQkJLyogSXMgdGhlcmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgbmV4dCBleHQgaGVhZGVyPyAqLwotCQlpZiAobGVuICZsdDsgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpCi0JCQlyZXR1cm4gZmFsc2U7CiAJCS8qIEVTUCAtJmd0OyBldmFsdWF0ZSAqLwogCQlpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkgewogCQkJdGVtcCB8PSBNQVNLX0VTUDsKQEAgLTk3LDcgJiM0Mzs5MSw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJfQogCiAJCW5leHRoZHIgPSBocC0mZ3Q7bmV4dGhkcjsKLQkJbGVuIC09IGhkcmxlbjsKIAkJcHRyICYjNDM7PSBoZHJsZW47CiAJCWlmIChwdHIgJmd0OyBza2ItJmd0O2xlbikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYwppbmRleCBkYjBmZDY0ZDg5ODYyLi42ZmNjNDAxMDJmZTNkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYwpAQCAtMjcsMjIgJiM0MzsyNywyNyBAQCBzdGF0aWMgYm9vbCBzcmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAlzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDsKIAlzdHJ1Y3QgaXB2Nl9zcl9oZHIgX3NyaDsKIAlpbnQgaGRybGVuLCBzcmhvZmYgPSAwOwomIzQzOwlpbnQgZXJyOwogCi0JaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO3NyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSAmbHQ7IDApCiYjNDM7CWVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO3NyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCWlmIChlcnIgIT0gLUVOT0VOVCkKJiM0MzsJCQlnb3RvIGhvdGRyb3A7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCXNyaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNyaG9mZiwgc2l6ZW9mKF9zcmgpLCAmYW1wO19zcmgpOwogCWlmICghc3JoKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAKIAloZHJsZW4gPSBpcHY2X29wdGxlbihzcmgpOwogCWlmIChza2ItJmd0O2xlbiAtIHNyaG9mZiAmbHQ7IGhkcmxlbikKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJZ290byBob3Rkcm9wOwogCiAJaWYgKHNyaC0mZ3Q7dHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKHNyaC0mZ3Q7c2VnbWVudHNfbGVmdCAmZ3Q7IHNyaC0mZ3Q7Zmlyc3Rfc2VnbWVudCkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJZ290byBob3Rkcm9wOwogCiAJLyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi8KIAlpZiAoc3JoaW5mby0mZ3Q7bXRfZmxhZ3MgJmFtcDsgSVA2VF9TUkhfTkVYVEhEUikKQEAgLTExMSw2ICYjNDM7MTE2LDEwIEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJCSEoc3JoLSZndDt0YWcgPT0gc3JoaW5mby0mZ3Q7dGFnKSkpCiAJCQlyZXR1cm4gZmFsc2U7CiAJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7aG90ZHJvcDoKJiM0MzsJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCkBAIC0xMjEsMjIgJiM0MzsxMzAsMzEgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCXN0cnVjdCBpbjZfYWRkciBfcHNpZCwgX25zaWQsIF9sc2lkOwogCXN0cnVjdCBpcHY2X3NyX2hkciAqc3JoOwogCXN0cnVjdCBpcHY2X3NyX2hkciBfc3JoOwomIzQzOwlpbnQgZXJyOwogCi0JaWYgKGlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO3NyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSAmbHQ7IDApCiYjNDM7CWVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO3NyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCWlmIChlcnIgIT0gLUVOT0VOVCkKJiM0MzsJCQlnb3RvIGhvdGRyb3A7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCXNyaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNyaG9mZiwgc2l6ZW9mKF9zcmgpLCAmYW1wO19zcmgpOwogCWlmICghc3JoKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlnb3RvIGhvdGRyb3A7CiAKIAloZHJsZW4gPSBpcHY2X29wdGxlbihzcmgpOwogCWlmIChza2ItJmd0O2xlbiAtIHNyaG9mZiAmbHQ7IGhkcmxlbikKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJZ290byBob3Rkcm9wOwogCiAJaWYgKHNyaC0mZ3Q7dHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNCkKIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWlmIChzaXplb2YoKnNyaCkgJiM0MzsKJiM0MzsJICAgICgoc3JoLSZndDtmaXJzdF9zZWdtZW50ICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICZndDsgaGRybGVuKQomIzQzOwkJZ290byBob3Rkcm9wOwomIzQzOwogCWlmIChzcmgtJmd0O3NlZ21lbnRzX2xlZnQgJmd0OyBzcmgtJmd0O2ZpcnN0X3NlZ21lbnQpCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCWdvdG8gaG90ZHJvcDsKIAogCS8qIE5leHQgSGVhZGVyIG1hdGNoaW5nICovCiAJaWYgKHNyaGluZm8tJmd0O210X2ZsYWdzICZhbXA7IElQNlRfU1JIX05FWFRIRFIpCkBAIC0yMDcsNyAmIzQzOzIyNSw3IEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCSAgKChzcmgtJmd0O3NlZ21lbnRzX2xlZnQgJiM0MzsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CiAJCXBzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwc2lkb2ZmLCBzaXplb2YoX3BzaWQpLCAmYW1wO19wc2lkKTsKIAkJaWYgKCFwc2lkKQotCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCWdvdG8gaG90ZHJvcDsKIAkJaWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9QU0lELAogCQkJCWlwdjZfbWFza2VkX2FkZHJfY21wKHBzaWQsICZhbXA7c3JoaW5mby0mZ3Q7cHNpZF9tc2ssCiAJCQkJCQkgICAgICZhbXA7c3JoaW5mby0mZ3Q7cHNpZF9hZGRyKSkpCkBAIC0yMjIsNyAmIzQzOzI0MCw3IEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCSAgKChzcmgtJmd0O3NlZ21lbnRzX2xlZnQgLSAxKSAqIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAkJbnNpZCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG5zaWRvZmYsIHNpemVvZihfbnNpZCksICZhbXA7X25zaWQpOwogCQlpZiAoIW5zaWQpCi0JCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJZ290byBob3Rkcm9wOwogCQlpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX05TSUQsCiAJCQkJaXB2Nl9tYXNrZWRfYWRkcl9jbXAobnNpZCwgJmFtcDtzcmhpbmZvLSZndDtuc2lkX21zaywKIAkJCQkJCSAgICAgJmFtcDtzcmhpbmZvLSZndDtuc2lkX2FkZHIpKSkKQEAgLTIzNCwxMyAmIzQzOzI1MiwxNyBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCWxzaWRvZmYgPSBzcmhvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2X3NyX2hkcik7CiAJCWxzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsc2lkb2ZmLCBzaXplb2YoX2xzaWQpLCAmYW1wO19sc2lkKTsKIAkJaWYgKCFsc2lkKQotCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCWdvdG8gaG90ZHJvcDsKIAkJaWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9MU0lELAogCQkJCWlwdjZfbWFza2VkX2FkZHJfY21wKGxzaWQsICZhbXA7c3JoaW5mby0mZ3Q7bHNpZF9tc2ssCiAJCQkJCQkgICAgICZhbXA7c3JoaW5mby0mZ3Q7bHNpZF9hZGRyKSkpCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCXJldHVybiB0cnVlOwomIzQzOwomIzQzO2hvdGRyb3A6CiYjNDM7CXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGludCBzcmhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA0NQoJCQkJCQkJb3V0cHV0OiAyNDcKCQkJCQkJCXRob3VnaHRzOiAxMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIElQdjYgTmV0ZmlsdGVyIFBhdGNoIGZvciBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGZvY3VzZWQgb24gaGFyZGVuaW5nIHRoZSBwYWNrZXQgcGFyc2luZyBsb2dpYyB3aXRoaW4gdGhlIElQdjYgbmV0ZmlsdGVyIGV4dGVuc2lvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgaXA2dF9oYmguY2AsIGBpcDZ0X2lwdjZoZWFkZXIuY2AsIGFuZCBgaXA2dF9zcmguY2AuIFRoZSBvdmVyd2hlbG1pbmcgcGF0dGVybiBoZXJlIGlzIHRoZSByZXBsYWNlbWVudCBvZiB2YXJpb3VzIGBpZmAgY2hlY2tzIHdpdGggYGdvdG8gaG90ZHJvcDtgIHN0YXRlbWVudHMsIGFuZCB0aGUgYWRkaXRpb24gb2YgYSBuZXcgY2hlY2sgaW4gYGlwNnRfc3JoLmNgLiBBbGwgdGhlc2UgY2hhbmdlcyBlc3NlbnRpYWxseSByZWZpbmUgdGhlIGVycm9yIGhhbmRsaW5nIGluIHRoZXNlIG1vZHVsZXMgd2hlbiBkZWFsaW5nIHdpdGggSVB2NiBleHRlbnNpb24gaGVhZGVycy4KCkluIGBpcDZ0X2hiaC5jYCwgaXQgc2VlbXMgd2UmIzM5O3JlIHRpZ2h0ZW5pbmcgdXAgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGFuZCBlbnN1cmluZyB0aGUgcGFja2V0IGxlbmd0aCBpcyBzdWZmaWNpZW50IGZvciB0aGUgaGVhZGVyIHNpemVzIHdlJiMzOTtyZSBleHBlY3RpbmcuIFNpbWlsYXJseSwgaW4gYGlwNnRfc3JoLmNgLCB0aGVyZSYjMzk7cyBhIGNvbmNlcnRlZCBlZmZvcnQgdG8gdmFsaWRhdGUgdGhlIFNlcmlhbCBSb3V0aW5nIEhlYWRlciYjMzk7cyBzdHJ1Y3R1cmUgYW5kIHNlZ21lbnQgbGVuZ3Rocy4gVGhlIHJlbW92YWwgb2YgdGhlIGBsZW5gIHZhcmlhYmxlIGFuZCB0aGUgcmVkdW5kYW50IGNoZWNrIGluIGBpcDZ0X2lwdjZoZWFkZXIuY2AgaXMgaW50ZXJlc3RpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gc3VwZXJzZWRlZCBieSB0aGUgcm9idXN0IGhhbmRsaW5nIG9mIGBza2JfaGVhZGVyX3BvaW50ZXJgLiBUaGF0JiMzOTtzIGdvb2QsIGxlc3MgcmVkdW5kYW50IGNvZGUuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIG1vcmUgYWdncmVzc2l2ZSBwYWNrZXQgZHJvcHBpbmcgd2hlbiBtYWxmb3JtZWQgaGVhZGVycyBhcmUgZGV0ZWN0ZWQuIFdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUgaXMgbm90IGludHJvZHVjaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG9ubHkgZm9jdXMgaXMgYmV0dGVyIGJvdW5kcyBjaGVja2luZyB0byBlbnN1cmUgdGhhdCBwYWNrZXRzIGNvbmZvcm0gdG8gdGhlIGV4cGVjdGVkIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBmb3JtYXRzLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgYWJvdXQgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBpbnRyb2R1Y2VkLiBUaGUgcGFja2V0IGRhdGEgaXRzZWxmIGlzIGNvbWluZyBmcm9tIHRoZSBuZXR3b3JrIGRyaXZlciwgaXQgaGFzIHRvIGJlIGluaXRpYWxpemVkIGJ5IHRoZSBzZW5kZXIuIFRoZSBhZGRlZCBjaGVjayBgc2l6ZW9mKCpzcmgpICYjNDM7ICgoc3JoLSZndDtmaXJzdF9zZWdtZW50ICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICZndDsgaGRybGVuYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgcmVhZHMgKndpdGhpbiogdGhlIHBhY2tldC4gV2hpbGUgS0FTQU4gd291bGQgY2F0Y2ggb3V0LW9mLWJvdW5kcyByZWFkcyBmcm9tIHRoZSBgc2tiYCwgaW4gdGhpcyBjYXNlLCB0aGUgYHNrYmAgbWlnaHQgaGF2ZSBleHRyYSBkYXRhIGFwcGVuZGVkLCBhbmQgd2UmIzM5O3JlIGVuc3VyaW5nIHdlIGRvbiYjMzk7dCByZWFkIGJleW9uZCB0aGUgZXh0ZW5zaW9uIGhlYWRlciBpbnRvIGdhcmJhZ2UgZGF0YSBpbiB0aGUgc2FtZSBgc2tiYC4gVGhhdCYjMzk7cyBhIGxvZ2ljIGJ1ZyBvciBhIHJlYWQgb2YgcGFja2V0LWludGVybmFsIGdhcmJhZ2UsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGF0IGh5cG90aGVzaXMuIExvb2tpbmcgYXQgdGhlIHVzYWdlIG9mIGBza2JfaGVhZGVyX3BvaW50ZXJgLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHVzZWQgdG8gY29weSBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzLCBzdWNoIGFzIGBfc3JoYCwgYF9wc2lkYCwgZXRjLiBUaGlzIGxvb2tzIGZpbmUuIElmIGl0IGZhaWxzLCBpdCByZXR1cm5zIE5VTEwuIElmIGl0IHN1Y2NlZWRzLCBpdCByZXR1cm5zIGVpdGhlciBhIHBvaW50ZXIgdG8gdGhlIGxpbmVhciBkYXRhIChpZiBwb3NzaWJsZSkgb3IgYSBjb3B5IGluIGEgZnVsbHkgcG9wdWxhdGVkIGxvY2FsIGJ1ZmZlci4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgYW4gdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZSBiZWluZyByZXR1cm5lZC4gU28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRoYXQgd2UgY2FuIGhhdmUgYW4gdW5pbml0aWFsaXplZCByZWFkIGhlcmUuCgpUaGVyZWZvcmUsIHNpbmNlIHRoaXMgcGF0Y2ggaXMgbm90IGludHJvZHVjaW5nIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFdlIG9ubHkgbmVlZCB0byB1c2UgS0FTQU4uIFRoZXNlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaGFyZGVuaW5nIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwYXJzaW5nLCBhbmQgdGhlc2UgZml4ZXMgcmVsYXRlIHRvIGxvZ2ljIGJ1Z3MsIHdpdGggYW55IHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGJlaW5nIGNvbmZpbmVkIHRvIHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYgYW5kIGFscmVhZHkgcHJvdGVjdGVkIHdpdGggS0FTQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgbmV0ZmlsdGVyIG1vZHVsZXMgKGlwNnRfaGJoLCBpcDZ0X2lwdjZoZWFkZXIsIGlwNnRfc3JoKSB0byBpbXByb3ZlIHBhY2tldCBwYXJzaW5nIGFuZCBib3VuZHMgY2hlY2tpbmcuIEl0IGVuc3VyZXMgdGhhdCBtYWxmb3JtZWQgcGFja2V0cyB3aXRoIGludmFsaWQgZXh0ZW5zaW9uIGhlYWRlciBsZW5ndGhzIG9yIHNlZ21lbnQgY291bnRzIGFyZSBjb3JyZWN0bHkgZHJvcHBlZCAodmlhIGBwYXItXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikgZGF0YSwgd2hpY2ggY29uc2lzdHMgb2YgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrIChub3QgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5KS4gVGhlIGZ1bmN0aW9ucyB1c2UgYHNrYl9oZWFkZXJfcG9pbnRlcigpYCwgd2hpY2ggc2FmZWx5IGNvcGllcyBwYWNrZXQgZGF0YSBpbnRvIGxvY2FsIHN0YWNrIHZhcmlhYmxlcyBvciByZXR1cm5zIGEgZGlyZWN0IHBvaW50ZXIsIHJldHVybmluZyBOVUxMIGlmIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoIGV4Y2VlZHMgdGhlIHNrYiBsZW5ndGguIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlza3Mgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkuXG5cbkFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIHBhY2tldCBwYXJzaW5nIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyByZWFkcykgYXJlIGFkZXF1YXRlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgbmV0ZmlsdGVyIG1vZHVsZXMgKGlwNnRfaGJoLCBpcDZ0X2lwdjZoZWFkZXIsIGlwNnRfc3JoKSB0byBpbXByb3ZlIHBhY2tldCBwYXJzaW5nIGFuZCBib3VuZHMgY2hlY2tpbmcuIEl0IGVuc3VyZXMgdGhhdCBtYWxmb3JtZWQgcGFja2V0cyB3aXRoIGludmFsaWQgZXh0ZW5zaW9uIGhlYWRlciBsZW5ndGhzIG9yIHNlZ21lbnQgY291bnRzIGFyZSBjb3JyZWN0bHkgZHJvcHBlZCAodmlhIGBwYXItXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIgKHNrYikgZGF0YSwgd2hpY2ggY29uc2lzdHMgb2YgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrIChub3QgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5KS4gVGhlIGZ1bmN0aW9ucyB1c2UgYHNrYl9oZWFkZXJfcG9pbnRlcigpYCwgd2hpY2ggc2FmZWx5IGNvcGllcyBwYWNrZXQgZGF0YSBpbnRvIGxvY2FsIHN0YWNrIHZhcmlhYmxlcyBvciByZXR1cm5zIGEgZGlyZWN0IHBvaW50ZXIsIHJldHVybmluZyBOVUxMIGlmIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoIGV4Y2VlZHMgdGhlIHNrYiBsZW5ndGguIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlza3Mgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkuXG5cbkFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIHBhY2tldCBwYXJzaW5nIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyByZWFkcykgYXJlIGFkZXF1YXRlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjg6NTYuMzU1OTU5NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg0OTkyMDk0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVA2X05GX0lQVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIklQNl9ORl9NQVRDSF9PUFRTXCIsXG4gICAgXCJJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUlwiLFxuICAgIFwiSVA2X05GX01BVENIX1NSSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhiaF9tdDZcIixcbiAgICBcImlwdjZoZWFkZXJfbXQ2XCIsXG4gICAgXCJzcmhfbXQ2XCIsXG4gICAgXCJzcmgxX210NlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cXG5cXG5BbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBwYWNrZXQgcGFyc2luZyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgcmVhZHMpIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbWF0Y2ggZXh0ZW5zaW9ucyAoaGJoLCBpcHY2aGVhZGVyLCBzcmgpIHRvIHByb3Blcmx5IGRyb3AgcGFja2V0cyB3aXRoIG1hbGZvcm1lZCBleHRlbnNpb24gaGVhZGVycyBieSBzZXR0aW5nIGBwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlYCBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGZhbHNlICh3aGljaCB3b3VsZCBhbGxvdyB0aGUgcGFja2V0IHRvIGNvbnRpbnVlIHRyYXZlcnNhbCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgZmlsdGVyaW5nIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgbWFsZm9ybWVkIHBhY2tldHMgYXJlIGhhbmRsZWQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI4OjU2LjM1NTk2NTI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjMyOTY5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMDVmMWI4ZWNjMjIwMWVhYTU1ZTE0OGNmYTFhNGI2ODgzYzAzZDBmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xcbmluZGV4IDZkMWE1ZDIwMjZhNjcuLjlmMDRiNGQ4ZjE2ZmYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xcbkBAIC02MiwyMSArNjIsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdFxcdFxcdCAgICBORVhUSERSX0hPUCA6IE5FWFRIRFJfREVTVCwgTlVMTCwgTlVMTCk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGlmIChlcnIgIT0gLUVOT0VOVClcXG4tXFx0XFx0XFx0cGFyLVxcdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdG9oID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX29wdHNoKSwgXFx1MDAyNl9vcHRzaCk7XFxuLVxcdGlmIChvaCA9PSBOVUxMKSB7XFxuLVxcdFxcdHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWU7XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fVxcbitcXHRpZiAoIW9oKVxcbitcXHRcXHRnb3RvIGhvdGRyb3A7XFxuIFxcbiBcXHRoZHJsZW4gPSBpcHY2X29wdGxlbihvaCk7XFxuIFxcdGlmIChza2ItXFx1MDAzZWxlbiAtIHB0ciBcXHUwMDNjIGhkcmxlbikge1xcbi1cXHRcXHQvKiBQYWNrZXQgc21hbGxlciB0aGFuIGl0J3MgbGVuZ3RoIGZpZWxkICovXFxuLVxcdFxcdHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWU7XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0LyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdHMgbGVuZ3RoIGZpZWxkICovXFxuK1xcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0fVxcbiBcXG4gXFx0cHJfZGVidWcoXFxcIklQdjYgT1BUUyBMRU4gJXUgJXUgXFxcIiwgaGRybGVuLCBvaC1cXHUwMDNlaGRybGVuKTtcXG5AQCAtMTA0LDggKzEwMSw4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0dHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIsIHNpemVvZihfb3B0dHlwZSksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZfb3B0dHlwZSk7XFxuLVxcdFxcdFxcdGlmICh0cCA9PSBOVUxMKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0aWYgKCF0cClcXG4rXFx0XFx0XFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXG4gXFx0XFx0XFx0LyogVHlwZSBjaGVjayAqL1xcbiBcXHRcXHRcXHRpZiAoKnRwICE9IChvcHRpbmZvLVxcdTAwM2VvcHRzW3RlbXBdIFxcdTAwMjYgMHhGRjAwKSBcXHUwMDNlXFx1MDAzZSA4KSB7XFxuQEAgLTEyMSwxMiArMTE4LDEyIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXG4gXFx0XFx0XFx0XFx0LyogbGVuZ3RoIGZpZWxkIGV4aXN0cyA/ICovXFxuIFxcdFxcdFxcdFxcdGlmIChoZHJsZW4gXFx1MDAzYyAyKVxcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXHRcXHRcXHRcXHRscCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciArIDEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihfb3B0bGVuKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNl9vcHRsZW4pO1xcbi1cXHRcXHRcXHRcXHRpZiAobHAgPT0gTlVMTClcXG4tXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdGlmICghbHApXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0XFx0XFx0XFx0c3BlY19sZW4gPSBvcHRpbmZvLVxcdTAwM2VvcHRzW3RlbXBdIFxcdTAwMjYgMHgwMEZGO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcXHUwMDI2XFx1MDAyNiBzcGVjX2xlbiAhPSAqbHApIHtcXG5AQCAtMTQ0LDEwICsxNDEsMTAgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdFxcdFxcdC8qIFN0ZXAgdG8gdGhlIG5leHQgKi9cXG4gXFx0XFx0XFx0cHJfZGVidWcoXFxcImxlbiUwNFhcXFxcblxcXCIsIG9wdGxlbik7XFxuIFxcbi1cXHRcXHRcXHRpZiAoKHB0ciBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuIC0gb3B0bGVuIHx8IGhkcmxlbiBcXHUwMDNjIG9wdGxlbikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIHRlbXAgXFx1MDAzYyBvcHRpbmZvLVxcdTAwM2VvcHRzbnIgLSAxKSB7XFxuK1xcdFxcdFxcdGlmIChwdHIgXFx1MDAzZSBza2ItXFx1MDAzZWxlbiB8fCBvcHRsZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbiAtIHB0ciB8fFxcbitcXHRcXHRcXHQgICAgaGRybGVuIFxcdTAwM2Mgb3B0bGVuKSB7XFxuIFxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCJuZXcgcG9pbnRlciBpcyB0b28gbGFyZ2UhXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRwdHIgKz0gb3B0bGVuO1xcbiBcXHRcXHRcXHRoZHJsZW4gLT0gb3B0bGVuO1xcbkBAIC0xNTksNiArMTU2LDEwIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitob3Rkcm9wOlxcbitcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jXFxuaW5kZXggYzUyZmY5MjljOTNiMy4uYWVmOGY2OWRhN2ZiNSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcXG5AQCAtMjgsNyArMjgsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGlwNnRfaXB2NmhlYWRlcl9pbmZvICppbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxuIFxcdHVuc2lnbmVkIGludCB0ZW1wO1xcbi1cXHRpbnQgbGVuO1xcbiBcXHR1OCBuZXh0aGRyO1xcbiBcXHR1bnNpZ25lZCBpbnQgcHRyO1xcbiBcXG5AQCAtMzgsOCArMzcsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdG5leHRoZHIgPSBpcHY2X2hkcihza2IpLVxcdTAwM2VuZXh0aGRyO1xcbiBcXHQvKiBwb2ludGVyIHRvIHRoZSAxc3QgZXh0aGRyICovXFxuIFxcdHB0ciA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuLVxcdC8qIGF2YWlsYWJsZSBsZW5ndGggKi9cXG4tXFx0bGVuID0gc2tiLVxcdTAwM2VsZW4gLSBwdHI7XFxuIFxcdHRlbXAgPSAwO1xcbiBcXG4gXFx0d2hpbGUgKG5mX2lwNl9leHRfaGRyKG5leHRoZHIpKSB7XFxuQEAgLTUyLDkgKzQ5LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRcXHR0ZW1wIHw9IE1BU0tfTk9ORTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4tXFx0XFx0LyogSXMgdGhlcmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgbmV4dCBleHQgaGVhZGVyPyAqL1xcbi1cXHRcXHRpZiAobGVuIFxcdTAwM2MgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpXFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0LyogRVNQIC1cXHUwMDNlIGV2YWx1YXRlICovXFxuIFxcdFxcdGlmIChuZXh0aGRyID09IE5FWFRIRFJfRVNQKSB7XFxuIFxcdFxcdFxcdHRlbXAgfD0gTUFTS19FU1A7XFxuQEAgLTk3LDcgKzkxLDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRuZXh0aGRyID0gaHAtXFx1MDAzZW5leHRoZHI7XFxuLVxcdFxcdGxlbiAtPSBoZHJsZW47XFxuIFxcdFxcdHB0ciArPSBoZHJsZW47XFxuIFxcdFxcdGlmIChwdHIgXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmNcXG5pbmRleCBkYjBmZDY0ZDg5ODYyLi42ZmNjNDAxMDJmZTNkIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jXFxuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmNcXG5AQCAtMjcsMjIgKzI3LDI3IEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4gXFx0c3RydWN0IGlwdjZfc3JfaGRyIF9zcmg7XFxuIFxcdGludCBoZHJsZW4sIHNyaG9mZiA9IDA7XFxuK1xcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbitcXHRlcnIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRU5PRU5UKVxcbitcXHRcXHRcXHRnb3RvIGhvdGRyb3A7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXHRzcmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzcmhvZmYsIHNpemVvZihfc3JoKSwgXFx1MDAyNl9zcmgpO1xcbiBcXHRpZiAoIXNyaClcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRnb3RvIGhvdGRyb3A7XFxuIFxcbiBcXHRoZHJsZW4gPSBpcHY2X29wdGxlbihzcmgpO1xcbiBcXHRpZiAoc2tiLVxcdTAwM2VsZW4gLSBzcmhvZmYgXFx1MDAzYyBoZHJsZW4pXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXG4gXFx0aWYgKHNyaC1cXHUwMDNldHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0aWYgKHNyaC1cXHUwMDNlc2VnbWVudHNfbGVmdCBcXHUwMDNlIHNyaC1cXHUwMDNlZmlyc3Rfc2VnbWVudClcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRnb3RvIGhvdGRyb3A7XFxuIFxcbiBcXHQvKiBOZXh0IEhlYWRlciBtYXRjaGluZyAqL1xcbiBcXHRpZiAoc3JoaW5mby1cXHUwMDNlbXRfZmxhZ3MgXFx1MDAyNiBJUDZUX1NSSF9ORVhUSERSKVxcbkBAIC0xMTEsNiArMTE2LDEwIEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRcXHRcXHQhKHNyaC1cXHUwMDNldGFnID09IHNyaGluZm8tXFx1MDAzZXRhZykpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdHJldHVybiB0cnVlO1xcbitcXG4raG90ZHJvcDpcXG4rXFx0cGFyLVxcdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuQEAgLTEyMSwyMiArMTMwLDMxIEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0c3RydWN0IGluNl9hZGRyIF9wc2lkLCBfbnNpZCwgX2xzaWQ7XFxuIFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiBcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgX3NyaDtcXG4rXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcXHUwMDNjIDApXFxuK1xcdGVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCBcXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRpZiAoZXJyICE9IC1FTk9FTlQpXFxuK1xcdFxcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuIFxcdHNyaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNyaG9mZiwgc2l6ZW9mKF9zcmgpLCBcXHUwMDI2X3NyaCk7XFxuIFxcdGlmICghc3JoKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFxuIFxcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7XFxuIFxcdGlmIChza2ItXFx1MDAzZWxlbiAtIHNyaG9mZiBcXHUwMDNjIGhkcmxlbilcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRnb3RvIGhvdGRyb3A7XFxuIFxcbiBcXHRpZiAoc3JoLVxcdTAwM2V0eXBlICE9IElQVjZfU1JDUlRfVFlQRV80KVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHRpZiAoc2l6ZW9mKCpzcmgpICtcXG4rXFx0ICAgICgoc3JoLVxcdTAwM2VmaXJzdF9zZWdtZW50ICsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgXFx1MDAzZSBoZHJsZW4pXFxuK1xcdFxcdGdvdG8gaG90ZHJvcDtcXG4rXFxuIFxcdGlmIChzcmgtXFx1MDAzZXNlZ21lbnRzX2xlZnQgXFx1MDAzZSBzcmgtXFx1MDAzZWZpcnN0X3NlZ21lbnQpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXG4gXFx0LyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi9cXG4gXFx0aWYgKHNyaGluZm8tXFx1MDAzZW10X2ZsYWdzIFxcdTAwMjYgSVA2VF9TUkhfTkVYVEhEUilcXG5AQCAtMjA3LDcgKzIyNSw3IEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0XFx0ICAoKHNyaC1cXHUwMDNlc2VnbWVudHNfbGVmdCArIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xcbiBcXHRcXHRwc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHNpZG9mZiwgc2l6ZW9mKF9wc2lkKSwgXFx1MDAyNl9wc2lkKTtcXG4gXFx0XFx0aWYgKCFwc2lkKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0XFx0aWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9QU0lELFxcbiBcXHRcXHRcXHRcXHRpcHY2X21hc2tlZF9hZGRyX2NtcChwc2lkLCBcXHUwMDI2c3JoaW5mby1cXHUwMDNlcHNpZF9tc2ssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNyaGluZm8tXFx1MDAzZXBzaWRfYWRkcikpKVxcbkBAIC0yMjIsNyArMjQwLDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRcXHQgICgoc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0IC0gMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7XFxuIFxcdFxcdG5zaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBuc2lkb2ZmLCBzaXplb2YoX25zaWQpLCBcXHUwMDI2X25zaWQpO1xcbiBcXHRcXHRpZiAoIW5zaWQpXFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0XFx0Z290byBob3Rkcm9wO1xcbiBcXHRcXHRpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX05TSUQsXFxuIFxcdFxcdFxcdFxcdGlwdjZfbWFza2VkX2FkZHJfY21wKG5zaWQsIFxcdTAwMjZzcmhpbmZvLVxcdTAwM2Vuc2lkX21zayxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c3JoaW5mby1cXHUwMDNlbnNpZF9hZGRyKSkpXFxuQEAgLTIzNCwxMyArMjUyLDE3IEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0bHNpZG9mZiA9IHNyaG9mZiArIHNpemVvZihzdHJ1Y3QgaXB2Nl9zcl9oZHIpO1xcbiBcXHRcXHRsc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbHNpZG9mZiwgc2l6ZW9mKF9sc2lkKSwgXFx1MDAyNl9sc2lkKTtcXG4gXFx0XFx0aWYgKCFsc2lkKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdGdvdG8gaG90ZHJvcDtcXG4gXFx0XFx0aWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9MU0lELFxcbiBcXHRcXHRcXHRcXHRpcHY2X21hc2tlZF9hZGRyX2NtcChsc2lkLCBcXHUwMDI2c3JoaW5mby1cXHUwMDNlbHNpZF9tc2ssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNyaGluZm8tXFx1MDAzZWxzaWRfYWRkcikpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuK1xcbitob3Rkcm9wOlxcbitcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc3JoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjg6NTYuODc5OTk4MTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTExMTc2NTc3NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQNl9ORl9JUFRBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJJUDZfTkZfTUFUQ0hfT1BUU1wiLFxuICAgIFwiSVA2X05GX01BVENIX0lQVjZIRUFERVJcIixcbiAgICBcIklQNl9ORl9NQVRDSF9TUkhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYmhfbXQ2XCIsXG4gICAgXCJpcHY2aGVhZGVyX210NlwiLFxuICAgIFwic3JoX210NlwiLFxuICAgIFwic3JoMV9tdDZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IG5ldGZpbHRlciBtYXRjaCBleHRlbnNpb25zIChoYmgsIGlwdjZoZWFkZXIsIHNyaCkgdG8gcHJvcGVybHkgZHJvcCBwYWNrZXRzIHdpdGggbWFsZm9ybWVkIGV4dGVuc2lvbiBoZWFkZXJzIGJ5IHNldHRpbmcgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UgKHdoaWNoIHdvdWxkIGFsbG93IHRoZSBwYWNrZXQgdG8gY29udGludWUgdHJhdmVyc2FsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBmaWx0ZXJpbmcgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBtYWxmb3JtZWQgcGFja2V0cyBhcmUgaGFuZGxlZCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTA1ZjFiOGVjYzIyMDFlYWE1NWUxNDhjZmExYTRiNjg4M2MwM2QwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG5pbmRleCA2ZDFhNWQyMDI2YTY3Li45ZjA0YjRkOGYxNmZmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG5AQCAtNjIsMjEgKzYyLDE4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdCAgICBORVhUSERSX0hPUCA6IE5FWFRIRFJfREVTVCwgTlVMTCwgTlVMTCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbi1cdFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksIFx1MDAyNl9vcHRzaCk7XG4tXHRpZiAob2ggPT0gTlVMTCkge1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbitcdGlmICghb2gpXG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKG9oKTtcbiBcdGlmIChza2ItXHUwMDNlbGVuIC0gcHRyIFx1MDAzYyBoZHJsZW4pIHtcbi1cdFx0LyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdCdzIGxlbmd0aCBmaWVsZCAqL1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0LyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdHMgbGVuZ3RoIGZpZWxkICovXG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcdH1cbiBcbiBcdHByX2RlYnVnKFwiSVB2NiBPUFRTIExFTiAldSAldSBcIiwgaGRybGVuLCBvaC1cdTAwM2VoZHJsZW4pO1xuQEAgLTEwNCw4ICsxMDEsOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdHRwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX29wdHR5cGUpLFxuIFx0XHRcdFx0XHRcdFx1MDAyNl9vcHR0eXBlKTtcbi1cdFx0XHRpZiAodHAgPT0gTlVMTClcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmICghdHApXG4rXHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXG4gXHRcdFx0LyogVHlwZSBjaGVjayAqL1xuIFx0XHRcdGlmICgqdHAgIT0gKG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHhGRjAwKSBcdTAwM2VcdTAwM2UgOCkge1xuQEAgLTEyMSwxMiArMTE4LDEyIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFxuIFx0XHRcdFx0LyogbGVuZ3RoIGZpZWxkIGV4aXN0cyA/ICovXG4gXHRcdFx0XHRpZiAoaGRybGVuIFx1MDAzYyAyKVxuLVx0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRcdFx0bHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIgKyAxLFxuIFx0XHRcdFx0XHRcdFx0c2l6ZW9mKF9vcHRsZW4pLFxuIFx0XHRcdFx0XHRcdFx0XHUwMDI2X29wdGxlbik7XG4tXHRcdFx0XHRpZiAobHAgPT0gTlVMTClcbi1cdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHRpZiAoIWxwKVxuK1x0XHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdFx0XHRzcGVjX2xlbiA9IG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHgwMEZGO1xuIFxuIFx0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKSB7XG5AQCAtMTQ0LDEwICsxNDEsMTAgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0LyogU3RlcCB0byB0aGUgbmV4dCAqL1xuIFx0XHRcdHByX2RlYnVnKFwibGVuJTA0WFxcblwiLCBvcHRsZW4pO1xuIFxuLVx0XHRcdGlmICgocHRyIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gb3B0bGVuIHx8IGhkcmxlbiBcdTAwM2Mgb3B0bGVuKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnIgLSAxKSB7XG4rXHRcdFx0aWYgKHB0ciBcdTAwM2Ugc2tiLVx1MDAzZWxlbiB8fCBvcHRsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBwdHIgfHxcbitcdFx0XHQgICAgaGRybGVuIFx1MDAzYyBvcHRsZW4pIHtcbiBcdFx0XHRcdHByX2RlYnVnKFwibmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwiKTtcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRcdH1cbiBcdFx0XHRwdHIgKz0gb3B0bGVuO1xuIFx0XHRcdGhkcmxlbiAtPSBvcHRsZW47XG5AQCAtMTU5LDYgKzE1NiwxMCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdHJldHVybiBmYWxzZTtcbitcbitob3Rkcm9wOlxuK1x0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhiaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jXG5pbmRleCBjNTJmZjkyOWM5M2IzLi5hZWY4ZjY5ZGE3ZmI1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcbkBAIC0yOCw3ICsyOCw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8gKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuIFx0dW5zaWduZWQgaW50IHRlbXA7XG4tXHRpbnQgbGVuO1xuIFx0dTggbmV4dGhkcjtcbiBcdHVuc2lnbmVkIGludCBwdHI7XG4gXG5AQCAtMzgsOCArMzcsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRuZXh0aGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VuZXh0aGRyO1xuIFx0LyogcG9pbnRlciB0byB0aGUgMXN0IGV4dGhkciAqL1xuIFx0cHRyID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbi1cdC8qIGF2YWlsYWJsZSBsZW5ndGggKi9cbi1cdGxlbiA9IHNrYi1cdTAwM2VsZW4gLSBwdHI7XG4gXHR0ZW1wID0gMDtcbiBcbiBcdHdoaWxlIChuZl9pcDZfZXh0X2hkcihuZXh0aGRyKSkge1xuQEAgLTUyLDkgKzQ5LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdHRlbXAgfD0gTUFTS19OT05FO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdC8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi9cbi1cdFx0aWYgKGxlbiBcdTAwM2MgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHQvKiBFU1AgLVx1MDAzZSBldmFsdWF0ZSAqL1xuIFx0XHRpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkge1xuIFx0XHRcdHRlbXAgfD0gTUFTS19FU1A7XG5AQCAtOTcsNyArOTEsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdH1cbiBcbiBcdFx0bmV4dGhkciA9IGhwLVx1MDAzZW5leHRoZHI7XG4tXHRcdGxlbiAtPSBoZHJsZW47XG4gXHRcdHB0ciArPSBoZHJsZW47XG4gXHRcdGlmIChwdHIgXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY1xuaW5kZXggZGIwZmQ2NGQ4OTg2Mi4uNmZjYzQwMTAyZmUzZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY1xuQEAgLTI3LDIyICsyNywyNyBAQCBzdGF0aWMgYm9vbCBzcmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIFx0c3RydWN0IGlwdjZfc3JfaGRyIF9zcmg7XG4gXHRpbnQgaGRybGVuLCBzcmhvZmYgPSAwO1xuK1x0aW50IGVycjtcbiBcbi1cdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuK1x0ZXJyID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKTtcbitcdGlmIChlcnIgXHUwMDNjIDApIHtcbitcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuK1x0XHRcdGdvdG8gaG90ZHJvcDtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFx0c3JoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3Job2ZmLCBzaXplb2YoX3NyaCksIFx1MDAyNl9zcmgpO1xuIFx0aWYgKCFzcmgpXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aGRybGVuID0gaXB2Nl9vcHRsZW4oc3JoKTtcbiBcdGlmIChza2ItXHUwMDNlbGVuIC0gc3Job2ZmIFx1MDAzYyBoZHJsZW4pXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aWYgKHNyaC1cdTAwM2V0eXBlICE9IElQVjZfU1JDUlRfVFlQRV80KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoc3JoLVx1MDAzZXNlZ21lbnRzX2xlZnQgXHUwMDNlIHNyaC1cdTAwM2VmaXJzdF9zZWdtZW50KVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdC8qIE5leHQgSGVhZGVyIG1hdGNoaW5nICovXG4gXHRpZiAoc3JoaW5mby1cdTAwM2VtdF9mbGFncyBcdTAwMjYgSVA2VF9TUkhfTkVYVEhEUilcbkBAIC0xMTEsNiArMTE2LDEwIEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdFx0IShzcmgtXHUwMDNldGFnID09IHNyaGluZm8tXHUwMDNldGFnKSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4rXG4raG90ZHJvcDpcbitcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuQEAgLTEyMSwyMiArMTMwLDMxIEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdHN0cnVjdCBpbjZfYWRkciBfcHNpZCwgX25zaWQsIF9sc2lkO1xuIFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgX3NyaDtcbitcdGludCBlcnI7XG4gXG4tXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbitcdGVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbitcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcdHNyaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNyaG9mZiwgc2l6ZW9mKF9zcmgpLCBcdTAwMjZfc3JoKTtcbiBcdGlmICghc3JoKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7XG4gXHRpZiAoc2tiLVx1MDAzZWxlbiAtIHNyaG9mZiBcdTAwM2MgaGRybGVuKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGlmIChzcmgtXHUwMDNldHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0aWYgKHNpemVvZigqc3JoKSArXG4rXHQgICAgKChzcmgtXHUwMDNlZmlyc3Rfc2VnbWVudCArIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIFx1MDAzZSBoZHJsZW4pXG4rXHRcdGdvdG8gaG90ZHJvcDtcbitcbiBcdGlmIChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCBcdTAwM2Ugc3JoLVx1MDAzZWZpcnN0X3NlZ21lbnQpXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0LyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi9cbiBcdGlmIChzcmhpbmZvLVx1MDAzZW10X2ZsYWdzIFx1MDAyNiBJUDZUX1NSSF9ORVhUSERSKVxuQEAgLTIwNyw3ICsyMjUsNyBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0ICAoKHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0ICsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7XG4gXHRcdHBzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwc2lkb2ZmLCBzaXplb2YoX3BzaWQpLCBcdTAwMjZfcHNpZCk7XG4gXHRcdGlmICghcHNpZClcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX1BTSUQsXG4gXHRcdFx0XHRpcHY2X21hc2tlZF9hZGRyX2NtcChwc2lkLCBcdTAwMjZzcmhpbmZvLVx1MDAzZXBzaWRfbXNrLFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2c3JoaW5mby1cdTAwM2Vwc2lkX2FkZHIpKSlcbkBAIC0yMjIsNyArMjQwLDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdCAgKChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCAtIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuIFx0XHRuc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbnNpZG9mZiwgc2l6ZW9mKF9uc2lkKSwgXHUwMDI2X25zaWQpO1xuIFx0XHRpZiAoIW5zaWQpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGdvdG8gaG90ZHJvcDtcbiBcdFx0aWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9OU0lELFxuIFx0XHRcdFx0aXB2Nl9tYXNrZWRfYWRkcl9jbXAobnNpZCwgXHUwMDI2c3JoaW5mby1cdTAwM2Vuc2lkX21zayxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnNyaGluZm8tXHUwMDNlbnNpZF9hZGRyKSkpXG5AQCAtMjM0LDEzICsyNTIsMTcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRsc2lkb2ZmID0gc3Job2ZmICsgc2l6ZW9mKHN0cnVjdCBpcHY2X3NyX2hkcik7XG4gXHRcdGxzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsc2lkb2ZmLCBzaXplb2YoX2xzaWQpLCBcdTAwMjZfbHNpZCk7XG4gXHRcdGlmICghbHNpZClcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX0xTSUQsXG4gXHRcdFx0XHRpcHY2X21hc2tlZF9hZGRyX2NtcChsc2lkLCBcdTAwMjZzcmhpbmZvLVx1MDAzZWxzaWRfbXNrLFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2c3JoaW5mby1cdTAwM2Vsc2lkX2FkZHIpKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbitcbitob3Rkcm9wOlxuK1x0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNyaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyODo1Ni44Nzk5OTkyNDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODMxMzk0NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldGZpbHRlciBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jYCwgYG5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuY2AsIGFuZCBgbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSByZXBsYWNpbmcgYHJldHVybiBmYWxzZTtgIHdpdGggYSBgZ290byBob3Rkcm9wO2AgY29uc3RydWN0LiBFc3NlbnRpYWxseSwgaXQgc2V0cyBgcGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO2AgYmVmb3JlIHJldHVybmluZyBgZmFsc2U7YCBpbiB0aGVzZSBmdW5jdGlvbnMuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0byBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVyIG1hdGNoaW5nLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIGluIGBpcDZ0X2lwdjZoZWFkZXIuY2AsIEkgc2VlIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiB0aGV5J3ZlIHJlbW92ZWQgdGhlIGBsZW5gIHZhcmlhYmxlIGFuZCBpdHMgYm91bmRzIGNoZWNrcywgb3B0aW5nIHRvIHVzZSBgcHRyIFx1MDAzZSBza2ItXHUwMDNlbGVuYCBpbnN0ZWFkLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuLi5cblxuYGBgY1xuLVx0XHQvKiBJcyB0aGVyZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXh0IGV4dCBoZWFkZXI/ICovXG4tXHRcdGlmIChsZW4gXHUwMDNjIChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbmBgYFxuXG5BaCwgaXQncyByZW1vdmVkIHRoaXMuIElzIHRoaXMgc2FmZT8gTGV0IG1lIHNlZS4uLiB5ZXMsIGBza2JfaGVhZGVyX3BvaW50ZXJgIGhhbmRsZXMgdGhlIGJvdW5kcyBjaGVja2luZy4gQW5kIGxvb2tpbmcgYXQgdGhlIGNvZGUgYGlwdjZoZWFkZXJfbXQ2YCB1c2VzIGBocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9oZHIpLCBcdTAwMjZfaGRyKTtgIHdoaWNoIGRvZXMgaW5kZWVkIGhhdmUgYm91bmRzIGNoZWNraW5nLlxuXG5SaWdodCwgc28gdGhlIGludGVudCBoZXJlIGlzIG5vdCBqdXN0IGEgc3RhbmRhcmQgbWF0Y2gtb3Itbm90IG1hdGNoLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgKmRyb3BwaW5nKiBwYWNrZXRzIHdoZW4gdGhlIGhlYWRlcnMgYXJlIG1hbGZvcm1lZCwgaGVuY2UgYGhvdGRyb3BgLiBJbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGBmYWxzZWAgKG1lYW5pbmcgdGhlIHJ1bGUgZG9lc24ndCBtYXRjaCBhbmQgdGhlIHBhY2tldCBjb250aW51ZXMgaXRzIHBhdGgpLCBzZXR0aW5nIGBwYXItXHUwMDNlaG90ZHJvcCA9IHRydWVgIHRlbGxzIG5ldGZpbHRlciB0byBpbW1lZGlhdGVseSBkcm9wIHRoZSBwYWNrZXQsIGJlY2F1c2UgaXQncyBkZWVtZWQgdG8gYmUgbWFsZm9ybWVkLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZDogYGhiaF9tdDZgLCBgaXB2NmhlYWRlcl9tdDZgLCBgc3JoX210NmAsIGFuZCBgc3JoMV9tdDZgLiBZZXAsIHRoZXNlIGFyZSBhbGwgdGhlIG1hdGNoIGZ1bmN0aW9ucyBmb3IgdGhlIGlwNnRhYmxlcy9pcDZ0IG1vZHVsZXMuIEFuZCB0aG9zZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBuZXRmaWx0ZXIgcnVsZXMuIEkganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBJUDZfTkZfTUFUQ0hfSEJIYCwgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgYW5kIGBJUDZfTkZfTUFUQ0hfU1JIYC4gTGV0J3MgY29uZmlybSB0aG9zZSBhcmUgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MDUuNzExMzk2NTIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTc2OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUDZfTkZfTUFUQ0hfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTkzPWlmIElQNl9ORl9JUFRBQkxFU1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctOTUtIyBUaGUgc2ltcGxlIG1hdGNoZXMuXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6OTY6Y29uZmlnIElQNl9ORl9NQVRDSF9BSFxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTk3LVxcdHRyaXN0YXRlICdcXFwiYWhcXFwiIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMDMtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTA0OmNvbmZpZyBJUDZfTkZfTUFUQ0hfRVVJNjRcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgJ1xcXCJldWk2NFxcXCIgYWRkcmVzcyBjaGVjaydcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTExMy1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIElQNl9ORl9NQVRDSF9GUkFHXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTE1LVxcdHRyaXN0YXRlICdcXFwiZnJhZ1xcXCIgRnJhZ21lbnRhdGlvbiBoZWFkZXIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIElQNl9ORl9NQVRDSF9PUFRTXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTI0LVxcdHRyaXN0YXRlICdcXFwiaGJoXFxcIiBob3AtYnktaG9wIGFuZCBcXFwiZHN0XFxcIiBvcHRzIGhlYWRlciBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTMxLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEzMjpjb25maWcgSVA2X05GX01BVENIX0hMXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTMzLVxcdHRyaXN0YXRlICdcXFwiaGxcXFwiIGhvcGxpbWl0IG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNDAtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTQxOmNvbmZpZyBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSAnXFxcImlwdjZoZWFkZXJcXFwiIElQdjYgRXh0ZW5zaW9uIEhlYWRlcnMgTWF0Y2gnXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTUwOmNvbmZpZyBJUDZfTkZfTUFUQ0hfTUhcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgJ1xcXCJtaFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE1Ny1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxNTg6Y29uZmlnIElQNl9ORl9NQVRDSF9SUEZJTFRFUlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSAnXFxcInJwZmlsdGVyXFxcIiByZXZlcnNlIHBhdGggZmlsdGVyIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6MTY5OmNvbmZpZyBJUDZfTkZfTUFUQ0hfUlRcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNzAtXFx0dHJpc3RhdGUgJ1xcXCJydFxcXCIgUm91dGluZyBoZWFkZXIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTE3Ny1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoxNzg6Y29uZmlnIElQNl9ORl9NQVRDSF9TUkhcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xNzktXFx0dHJpc3RhdGUgJ1xcXCJzcmhcXFwiIFNlZ21lbnQgUm91dGluZyBoZWFkZXIgbWF0Y2ggc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MDUuNzc1MzgzMjI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NzUyNzk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXM6XG5cbioqRXhhbWluaW5nIElQdjYgTmV0ZmlsdGVyIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbnMg4oCTIGBJUDZfTkZfTUFUQ0hfT1BUU2AsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzb2NpYXRlIGBJUDZfTkZfTUFUQ0hfT1BUU2Agd2l0aCBoYW5kbGluZyBIb3AtYnktSG9wIChoYmgpIG9wdGlvbnMsIGFuZCBwb3NzaWJseSBEZXN0aW5hdGlvbiBPcHRpb25zIChgZHN0YCBvcHRzKSB0b28uIEJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgZGV0YWlscyBjYW4gYmUgdHJpY2t5IGFuZCBhIHF1aWNrIHJlZnJlc2hlciBpcyBhbHdheXMgYSBnb29kIGlkZWEuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuXG5cblRoZXJlZm9yZSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZWAgZmlsZS4gSXQncyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhhdCBzaG91bGQgc2V0dGxlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODY1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MDkuOTQyOTEzODMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MDExOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNnRfaGJoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU9MzY9b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9NSCkgKz0gaXA2dF9taC5vXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUykgKz0gaXA2dF9oYmgub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfSVA2X05GX01BVENIX1JQRklMVEVSKSArPSBpcDZ0X3JwZmlsdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTAuMDA4OTMxOTkxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyMzk0NTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJJ20gcHJldHR5IHN1cmUgSSd2ZSBnb3QgdGhpcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIE5ldGZpbHRlciBkZWZpbmVzIGZvciBJUHY2IG1hdGNoaW5nLiBSaWdodCwgKipOZXR3b3JrIEZpbHRlciBhbmQgSVB2NiBIZWFkZXIgTWF0Y2hlcyoqLiBJJ20gZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIGBJUDZfTkZfTUFUQ0hfT1BUU2AgYW5kIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAgZm9yIHRoZSBgaXA2dF9pcHY2aGVhZGVyLm9gIG1vZHVsZS4gQW5kLCBJIHJlY2FsbCBub3csIGZvciB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciBtb2R1bGUsIEknbGwgbmVlZCBgSVA2X05GX01BVENIX1NSSGAgZm9yIGBpcDZ0X3NyaC5vYC5cblxuTm93LCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlYC4gSXQncyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IHRoYXQgSSBoYXZlIGlkZW50aWZpZWQgYWxsIHJlbGV2YW50IGRlZmluZXMgZm9yIHRoZSB0YXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjk0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTQuODMyODgwMDk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDU0ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNnRfaXB2NmhlYWRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRykgKz0gaXA2dF9mcmFnLm9cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSKSArPSBpcDZ0X2lwdjZoZWFkZXIub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0zNi1vYmotJChDT05GSUdfSVA2X05GX01BVENIX01IKSArPSBpcDZ0X21oLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTQuOTEwOTQwNTMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk0ODE5Njc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjc3MjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjE2Ljg1OTE0MDEyNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MzY3MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNnRfc3JoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzk9b2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SVCkgKz0gaXA2dF9ydC5vXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfU1JIKSArPSBpcDZ0X3NyaC5vXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOToxNi45Njc1MTYwMTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU3OTY4NzU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk5ldHdvcmsgRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24gQ29uY2VybnMqKlxuXG5SaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBJUDZfTkZfTUFUQ0hfT1BUU2AsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuIEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uc29tZXRoaW5nIGZlZWxzIG9mZi4gV2hhdCBhYm91dCBgSVA2X05GX0lQVEFCTEVTYD8gSXQgaGFzIHRvIGJlIGEgZGVwZW5kZW5jeSBmb3IgdGhlc2Ugb3RoZXIgbWF0Y2ggb3B0aW9ucywgZG9lc24ndCBpdD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSVA2X05GX01BVENIX09QVFNgIHRoZXJlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBJIGNvbnRpbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MjEuNTQ3MjA3NTIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg2MjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVA2X05GX01BVENIX09QVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MTE0PWNvbmZpZyBJUDZfTkZfTUFUQ0hfRlJBR1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgSVA2X05GX01BVENIX09QVFNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXFx0dHJpc3RhdGUgJ1xcXCJoYmhcXFwiIGhvcC1ieS1ob3AgYW5kIFxcXCJkc3RcXFwiIG9wdHMgaGVhZGVyIG1hdGNoIHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjIxLjYxMjA3NTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE2MjU2Nzk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgYWx3YXlzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIHdlYiBvZiBpbnRlcmNvbm5lY3Rpb25zIGF0IHBsYXkgaGVyZS4gRm9yZ2V0IHRoZSBzdXJmYWNlIGxldmVsIGZvciBhIG1vbWVudDsgSSBuZWVkIHRvIGRpZyBkZWVwLiBJIHdhbnQgdG8gaWRlbnRpZnkgKmV2ZXJ5KiBkZXBlbmRlbmN5LCBib3RoIGV4cGxpY2l0IGFuZCBpbXBsaWNpdC4gVGhhdCBtZWFucyBjb25zaWRlcmluZyBub3QganVzdCB0aGUgZGlyZWN0IGxpbmtzLCB0aGUgb2J2aW91cyByZWxhdGlvbnNoaXBzLCBidXQgYWxzbyB0aGUgY2FzY2FkaW5nIGVmZmVjdHMsIHRoZSBwb3RlbnRpYWwgc2lkZS1jaGFubmVsIGluZmx1ZW5jZXMsIGFuZCBhbnkgYXNzdW1wdGlvbnMgdGhhdCBtYXkgYmUgYmFrZWQgaW4uIEFyZSB0aGVzZSBkZXBlbmRlbmNpZXMgd2VsbC1kb2N1bWVudGVkPyBBcmUgdGhleSB2ZXJzaW9uLWxvY2tlZCBhcHByb3ByaWF0ZWx5PyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlLCBhbmQgd2hhdCBhcmUgdGhlIG1pdGlnYXRpb25zIGluIHBsYWNlLCBvciAqbm90KiBpbiBwbGFjZT8gVGhpcyBpc24ndCBqdXN0IGFib3V0IGRyYXdpbmcgYSBwcmV0dHkgZGVwZW5kZW5jeSBncmFwaDsgaXQncyBhYm91dCBhbnRpY2lwYXRpbmcgdGhlIGJyZWFraW5nIHBvaW50cywgdGhlIHZ1bG5lcmFiaWxpdGllcywgdGhlIGFyZWFzIHdoZXJlIGEgc2VlbWluZ2x5IG1pbm9yIGNoYW5nZSBjb3VsZCB0cmlnZ2VyIGEgY2F0YXN0cm9waGljIGNhc2NhZGUuIEknbSBsb29raW5nIGZvciB0aGUgd2Vha2VzdCBsaW5rcywgdGhlIGNvbXBvbmVudHMgdGhhdCBhcmUgb3BlcmF0aW5nIHdpdGhvdXQgc3VmZmljaWVudCBvdmVyc2lnaHQgb3Igcm9idXN0IGVycm9yIGhhbmRsaW5nLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRvd25zdHJlYW0gaW1wYWN0IG9mIGVhY2ggcG90ZW50aWFsIGZhaWx1cmUuIEknbSB0cnlpbmcgdG8gcGljdHVyZSB0aGUgcmlwcGxlIGVmZmVjdCBhbmQgdGhlIG1pdGlnYXRpb24gc3RyYXRlZ2llcyB0aGF0IHdpbGwgYmUgcmVxdWlyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIGRlcGVuZGVuY2llcyBleGlzdCwgd2hhdCB0aGV5IGNvbnRyaWJ1dGUsIGFuZCBpZiB0aGV5J3JlIGFjdHVhbGx5ICpuZWNlc3NhcnkqLiBPZnRlbiwgb3B0aW1pemF0aW9uIGJlZ2lucyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOToyNy43NzQ2NDYzNTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcbiAxMjE6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTIyOlxcdFxcbiAxMjM6XFx0Y29uZmlnIElQNl9ORl9NQVRDSF9PUFRTXFxuIDEyNDpcXHRcXHR0cmlzdGF0ZSAnXFxcImhiaFxcXCIgaG9wLWJ5LWhvcCBhbmQgXFxcImRzdFxcXCIgb3B0cyBoZWFkZXIgbWF0Y2ggc3VwcG9ydCdcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDEyNjpcXHRcXHRoZWxwXFxuIDEyNzpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBob3AtYnktaG9wXFxuIDEyODpcXHRcXHQgIGFuZCBkZXN0aW5hdGlvbiBvcHRpb25zIGhlYWRlcnMgb2YgYSBwYWNrZXQuXFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEzMTpcXHRcXG4gMTMyOlxcdGNvbmZpZyBJUDZfTkZfTUFUQ0hfSExcXG4gMTMzOlxcdFxcdHRyaXN0YXRlICdcXFwiaGxcXFwiIGhvcGxpbWl0IG1hdGNoIHN1cHBvcnQnXFxuIDEzNDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAxMzU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9YVF9NQVRDSF9ITFxcbiAxMzY6XFx0XFx0aGVscFxcbiAxMzc6XFx0XFx0ICBUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2VcXG4gMTM4OlxcdFxcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcXG4gMTM5OlxcdFxcdCAgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MjcuNzc0NzA1NDg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MjM3NDA4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSVB2NiBOZXRmaWx0ZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgSVB2NiBOZXRmaWx0ZXIgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmZXcgdGhpbmdzIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIHRoaXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGUgcHJlc2VuY2Ugb2YgdGhhdCBgTkVURklMVEVSX0FEVkFOQ0VEYCBvcHRpb24gaXMgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlZC4gVGhhdCBzZWVtcyBpbXBvcnRhbnQsIGdpdmVuIGl0cyByb2xlIGhlcmUuXG5cbkFscmlnaHQsIHNvIHRoZSBrZXkgZGVwZW5kZW5jeSBzZWVtcyB0byBiZSB0aWVkIHRvIGBJUDZfTkZfSVBUQUJMRVNgLiBBcyBJIHVuZGVyc3RhbmQgaXQsIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gYmUgYXZhaWxhYmxlLiBCdXQgaG9sZCBvbi4uLiBJdCBzZWVtcyB0aGF0IGBJUDZfTkZfSVBUQUJMRVNgIGl0c2VsZiByZWxpZXMgb24gYE5FVEZJTFRFUl9YVEFCTEVTYC4gU28gdGhhdCdzIGFub3RoZXIgcHJlcmVxdWlzaXRlLiBHb3QgaXQuIFNvIGZhciwgdGhlIGRlcGVuZGVudCBtb2R1bGVzIGFyZTpcblxuKiAgIGBJUDZfTkZfSVBUQUJMRVNgXG4qICAgYElQNl9ORl9NQVRDSF9PUFRTYFxuKiAgIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmBcbiogICBgSVA2X05GX01BVENIX1NSSGBcblxuTm93LCBsb29raW5nIGF0IHRoZSBjb3JlIGZ1bmN0aW9ucywgdGhlIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBhcmU6XG5cbiogICBgaGJoX210NmBcbiogICBgaXB2NmhlYWRlcl9tdDZgXG4qICAgYHNyaF9tdDZgXG4qICAgYHNyaDFfbXQ2YFxuXG5BaCwgSSBzZWUgdGhhdCBgaGJoX210NmAgaXMgbWFya2VkIGFzIHN0YXRpYy4gQmV0dGVyIGNoZWNrIGBpcDZ0X2hiaC5jYCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBzY29wZS4gSSBuZWVkIHRvIGJlIGNhcmVmdWwsIGFzIHN0YXRpYyBjYW4gaW5kaWNhdGUgaXNzdWVzIHdpdGggYmVpbmcgbG9hZGVkIGFzIGEgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTE4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MzMuNDk4NDUwNTExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTAwNDk2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYmhfbXQ2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jPTIzPU1PRFVMRV9BTElBUyhcXFwiaXA2dF9kc3RcXFwiKTtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTQwLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjQxOnN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggaGJoX210Nl9yZWdbXSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTQyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jPTQzPXN0YXRpYyBib29sXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6NDQ6aGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtNDUte1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtNjAtXFx0ZXJyID0gaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZwdHIsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6NjE6XFx0XFx0XFx0ICAgIChwYXItXFx1MDAzZW1hdGNoID09IFxcdTAwMjZoYmhfbXQ2X3JlZ1swXSkgP1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTYyLVxcdFxcdFxcdCAgICBORVhUSERSX0hPUCA6IE5FWFRIRFJfREVTVCwgTlVMTCwgTlVMTCk7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xNjQtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MTY1OnN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xNjYte1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMTg1LVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE4NjpzdGF0aWMgc3RydWN0IHh0X21hdGNoIGhiaF9tdDZfcmVnW10gX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xODctXFx0e1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE4ODpcXHRcXHQvKiBOb3RlLCBoYmhfbXQ2IHJlbGllcyBvbiB0aGUgb3JkZXIgb2YgaGJoX210Nl9yZWcgKi9cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xODktXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJoYmhcXFwiLFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE5MC1cXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MTkxOlxcdFxcdC5tYXRjaFxcdFxcdD0gaGJoX210NixcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xOTItXFx0XFx0Lm1hdGNoc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBpcDZ0X29wdHMpLFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjE5MzpcXHRcXHQuY2hlY2tlbnRyeVxcdD0gaGJoX210Nl9jaGVjayxcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0xOTQtXFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTE5OC1cXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MTk5OlxcdFxcdC5tYXRjaFxcdFxcdD0gaGJoX210NixcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0yMDAtXFx0XFx0Lm1hdGNoc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBpcDZ0X29wdHMpLFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIwMTpcXHRcXHQuY2hlY2tlbnRyeVxcdD0gaGJoX210Nl9jaGVjayxcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0yMDItXFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIwNS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzoyMDY6c3RhdGljIGludCBfX2luaXQgaGJoX210Nl9pbml0KHZvaWQpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjA3LXtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzoyMDg6XFx0cmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMoaGJoX210Nl9yZWcsIEFSUkFZX1NJWkUoaGJoX210Nl9yZWcpKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYy0yMDktfVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIxMC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYzoyMTE6c3RhdGljIHZvaWQgX19leGl0IGhiaF9tdDZfZXhpdCh2b2lkKVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIxMi17XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmM6MjEzOlxcdHh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhoYmhfbXQ2X3JlZywgQVJSQVlfU0laRShoYmhfbXQ2X3JlZykpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jLTIxNC19XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMtMjE1LVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIxNjptb2R1bGVfaW5pdChoYmhfbXQ2X2luaXQpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jOjIxNzptb2R1bGVfZXhpdChoYmhfbXQ2X2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTozMy41NzM0NjE1OTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQyODMxMTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0YXRpYyBGdW5jdGlvbiBRdWVzdGlvbioqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgY2xlYXI6IGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgZ2V0IGlubGluZWQuIEluaXRpYWxseSwgbXkgbWluZCBqdW1wZWQgdG8gYGhiaF9tdDZgLiBCdXQgd2FpdCwgYGhiaF9tdDZgICppcyogYSBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkIGluIGB4dF9tYXRjaGAuIEJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIHRoZSBjb21waWxlciB3b24ndCBpbmxpbmUgaXQ7IGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFNvLCB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpZiB3ZSAqZGlkKiB3YW50IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCB3aGVyZSB3b3VsZCB0aGV5IGJlPyBJcyBgeHRfcmVnaXN0ZXJfbWF0Y2hlc2AgdGhlIGVudHJ5PyBObywgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBmb3IgcGFja2V0IG1hdGNoaW5nIGlzIHJlYWxseSBtb3JlIGxpa2UgYGlwNnRfZG9fdGFibGVgLCBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0IGBoYmhfbXQ2YCBpcyB0aGUgcmVhbCBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgbW9kaWZpZWQgaGVyZS5cblxuVGhpbmtpbmcgdGhyb3VnaCBpdCBmdXJ0aGVyLCBpZiBhIGZ1bmN0aW9uICppcyogc3RhdGljIGJ1dCBpdHMgYWRkcmVzcyBpcyBhY3R1YWxseSB0YWtlbiwgaXQgKndvbid0KiBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIGl04oCZcyB0b3RhbGx5IGZpbmUgdG8gbGlzdCBpdCBhcyB0aGUgbWFpbiBmdW5jdGlvbiBoZXJlLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBhbnkgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYy5cblxuTm9wZS4gQWxsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBjYWxsYmFja3M6IGBoYmhfbXQ2YCwgYGlwdjZoZWFkZXJfbXQ2YCwgYHNyaF9tdDZgLCBhbmQgYHNyaDFfbXQ2YC4gU2luY2UgdGhleSdyZSBjYWxsYmFja3MsIHRoZXkgKndvbid0KiBiZSBpbmxpbmVkLiBXZSBjYW4gY29uZmlkZW50bHkgbGlzdCB0aGVtLlxuXG5MZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayBgaXA2dF9pcHY2aGVhZGVyLmNgIGFuZCBgaXA2dF9zcmguY2AgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc4MiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo0MS4wMDE3NzYxNDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NDc1MTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2aGVhZGVyX210NlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jPTI2PXN0YXRpYyBib29sXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjI3OmlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMjgte1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTExMi1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTEzOnN0YXRpYyBpbnQgaXB2NmhlYWRlcl9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTExNC17XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTI0LVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYzoxMjU6c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBpcHY2aGVhZGVyX210Nl9yZWcgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMtMTI2LVxcdC5uYW1lXFx0XFx0PSBcXFwiaXB2NmhlYWRlclxcXCIsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEyNy1cXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjEyODpcXHQubWF0Y2hcXHRcXHQ9IGlwdjZoZWFkZXJfbXQ2LFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMjktXFx0Lm1hdGNoc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2lwdjZoZWFkZXJfaW5mbyksXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjEzMDpcXHQuY2hlY2tlbnRyeVxcdD0gaXB2NmhlYWRlcl9tdDZfY2hlY2ssXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEzMS1cXHQuZGVzdHJveVxcdD0gTlVMTCxcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xMzQtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjEzNTpzdGF0aWMgaW50IF9faW5pdCBpcHY2aGVhZGVyX210Nl9pbml0KHZvaWQpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEzNi17XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjEzNzpcXHRyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goXFx1MDAyNmlwdjZoZWFkZXJfbXQ2X3JlZyk7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEzOC19XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTEzOS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTQwOnN0YXRpYyB2b2lkIF9fZXhpdCBpcHY2aGVhZGVyX210Nl9leGl0KHZvaWQpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jLTE0MS17XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjE0MjpcXHR4dF91bnJlZ2lzdGVyX21hdGNoKFxcdTAwMjZpcHY2aGVhZGVyX210Nl9yZWcpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xNDMtfVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYy0xNDQtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jOjE0NTptb2R1bGVfaW5pdChpcHY2aGVhZGVyX210Nl9pbml0KTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmM6MTQ2Om1vZHVsZV9leGl0KGlwdjZoZWFkZXJfbXQ2X2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo0MS4zNTY1MzUxMjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE5NDU1MTc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEyMzE5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo0OC41NTEwODk0MDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDI2MjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcmhfbXQ2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTIzLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjI0OnN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTI1LXtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jPTEyNT1zdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0yNjctXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MjY4OnN0YXRpYyBpbnQgc3JoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0yNjkte1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM9Mjg3PXN0YXRpYyBpbnQgc3JoMV9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMDUtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzA2OnN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggc3JoX210Nl9yZWdbXSBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMwNy1cXHR7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMTAtXFx0XFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMxMTpcXHRcXHQubWF0Y2hcXHRcXHQ9IHNyaF9tdDYsXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzEyLVxcdFxcdC5tYXRjaHNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgaXA2dF9zcmgpLFxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMxMzpcXHRcXHQuY2hlY2tlbnRyeVxcdD0gc3JoX210Nl9jaGVjayxcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMTQtXFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMyNi1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMjc6c3RhdGljIGludCBfX2luaXQgc3JoX210Nl9pbml0KHZvaWQpXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzI4LXtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMjk6XFx0cmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMoc3JoX210Nl9yZWcsIEFSUkFZX1NJWkUoc3JoX210Nl9yZWcpKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYy0zMzAtfVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzMS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguYzozMzI6c3RhdGljIHZvaWQgX19leGl0IHNyaF9tdDZfZXhpdCh2b2lkKVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzMy17XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmM6MzM0OlxcdHh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhzcmhfbXQ2X3JlZywgQVJSQVlfU0laRShzcmhfbXQ2X3JlZykpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzNS19XFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMtMzM2LVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMzNzptb2R1bGVfaW5pdChzcmhfbXQ2X2luaXQpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jOjMzODptb2R1bGVfZXhpdChzcmhfbXQ2X2V4aXQpO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jLTMzOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NDguNjYxMzU3MTA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDg5NzQxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IEhlYWRlciBNYXRjaGluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBpdC4gVGhlIGtleSBmdW5jdGlvbnMgaGVyZSBhcmUgYGhiaF9tdDZgLCBgaXB2NmhlYWRlcl9tdDZgLCBgc3JoX210NmAsIGFuZCBgc3JoMV9tdDZgLiBBbGwgdGhvc2UgYXJlIGNsZWFybHkgc3RhdGljLiBUaGUgaW1wb3J0YW50IGRldGFpbCBpcyBob3cgdGhleSdyZSB1c2VkOyB0aGV5J3JlIHJlZ2lzdGVyZWQgYXMgY2FsbGJhY2tzIHdpdGhpbiBgeHRfbWF0Y2hgIHN0cnVjdHMuIFRoYXQgbWVhbnMgdGhleSdyZSBub3QgZ29pbmcgdG8gYmUgaW5saW5lZCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIHN5bWJvbCBhbmFseXNpcy4gSSdsbCBtYWtlIHN1cmUgdG8gZ2V0IHRoZW0gbGlzdGVkIHByb3Blcmx5IGluIEZvY3VzU3ltYm9scy5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucywgSSBzZWUgYElQNl9ORl9JUFRBQkxFU2AsIGBJUDZfTkZfTUFUQ0hfT1BUU2AsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuIEEgcXVpY2sgdGhvdWdodDogYElQNl9ORl9JUFRBQkxFU2AgbG9va3MgbGlrZSBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIG90aGVycywgbGlrZSBpdCBpcyBhIHBhcmVudCBmZWF0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBgSVA2X05GX0lQVEFCTEVTYCBpdHNlbGYgaGFzIGFueSBkZXBlbmRlbmNpZXMuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzI2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjU0LjM3MDMzMzU4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMDE3NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUDZfTkZfSVBUQUJMRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9Nj1tZW51IFxcXCJJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTktIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjEwOmNvbmZpZyBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBJUDYgdGFibGVzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz03Mj1jb25maWcgTkZfTE9HX0lQVjZcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTc5LVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjgwOmNvbmZpZyBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXHR0cmlzdGF0ZSBcXFwiSVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NTQuNDcxMzU1NTA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY0MzI4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBJUDZfTkZfSVBUQUJMRVMqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElQNl9ORl9JUFRBQkxFU2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGFyZSB0aWVkIHRvIGl0LiBJJ20gbm90IGp1c3QgbG9va2luZyBmb3IgdGhlIG9idmlvdXM7IEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaW5jbHVkZXMgbm90IGp1c3QgdGhlIGNvcmUgTmV0ZmlsdGVyIG1vZHVsZXMgdGhhdCBpdCBkaXJlY3RseSByZWxpZXMgdXBvbiwgYnV0IGFsc28gYW55IG90aGVyIGNvbXBvbmVudHMsIHBvdGVudGlhbGx5IGV2ZW4ga2VybmVsIHN1YnN5c3RlbXMsIHRoYXQgbWF5IGluZGlyZWN0bHkgaW5mbHVlbmNlIG9yIGJlIGluZmx1ZW5jZWQgYnkgaXRzIG9wZXJhdGlvbi4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgZmlsdGVyaW5nLCBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIElQdjYtcmVsYXRlZCBjb21wb25lbnRzLiBJ4oCZbSB0aGlua2luZyBhYm91dCBob3cgYSBtb2R1bGUgbGlrZSBgSVA2X05GX0lQVEFCTEVTYCBhZmZlY3RzIHRoZSBicm9hZGVyIGtlcm5lbCBhcmNoaXRlY3R1cmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBjb25mbGljdHMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbGwgbmVlZCB0byBrbm93IHRoaXMgdG8gYXNzZXNzIGl0cyBvdmVyYWxsIGltcGFjdCBhbmQgcG9ydGFiaWxpdHksIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgb3IgbW9kaWZpY2F0aW9ucy4gVGhlIGltcGxpY2F0aW9ucyBvbiBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgd291bGQgYWxzbyBiZSBzb21ldGhpbmcgdG8gY29uc2lkZXIuIFVsdGltYXRlbHksIHVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGZ1bmRhbWVudGFsIHRvIGdyYXNwaW5nIGl0cyB0cnVlIGZ1bmN0aW9uIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIGEgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk2NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjU4LjYxNzgxMjQ1M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzU6XFx0XFx0c2VsZWN0IE5GX0xPR19TWVNMT0dcXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlXFxuICA3ODpcXHRcXHQgIChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzIENPTkZJR19ORl9MT0dfU1lTTE9HLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgSVA2X05GX0lQVEFCTEVTXFxuICA4MTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nKVxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJUFY2XFxuICA4MzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX1hUQUJMRVNcXG4gIDg0OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAgODU6XFx0XFx0aGVscFxcbiAgODY6XFx0XFx0ICBpcDZ0YWJsZXMgaXMgYSBnZW5lcmFsLCBleHRlbnNpYmxlIHBhY2tldCBpZGVudGlmaWNhdGlvbiBmcmFtZXdvcmsuXFxuICA4NzpcXHRcXHQgIEN1cnJlbnRseSBvbmx5IHRoZSBwYWNrZXQgZmlsdGVyaW5nIGFuZCBwYWNrZXQgbWFuZ2xpbmcgc3Vic3lzdGVtXFxuICA4ODpcXHRcXHQgIGZvciBJUHY2IHVzZSB0aGlzLCBidXQgY29ubmVjdGlvbiB0cmFja2luZyBpcyBnb2luZyB0byBmb2xsb3cuXFxuICA4OTpcXHRcXHQgIFNheSAnWScgb3IgJ00nIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGVpdGhlciBvZiB0aG9zZS5cXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDkyOlxcdFxcbiAgOTM6XFx0aWYgSVA2X05GX0lQVEFCTEVTXFxuICA5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NTguNjE3OTIyNDczWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzMwNzE0ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGl0IHJlYWxseSBoaW5nZXMgb24gaG93IElQdjYgYW5kIHRoZSBpbnRlcm5ldCBwcm90b2NvbHMgYXJlIHNldCB1cC4gVG8gZ2V0IHRoZSBmZWF0dXJlcyBJIG5lZWQsIEknbSBzZWVpbmcgdGhhdCBJJ2xsIG5lZWQgdGhlc2UgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYElQNl9ORl9JUFRBQkxFU2AsIGBJUDZfTkZfTUFUQ0hfT1BUU2AsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuIEJ1dCBob2xkIG9uLCBpdCBsb29rcyBsaWtlIGBJUDZfTkZfTUFUQ0hfT1BUU2AgaXMgZGVwZW5kZW50IG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBUaGF0J3MgYSBrZXkgZGVwZW5kZW5jeS4gUmlnaHQsIG5lZWQgdG8gYnJpbmcgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaW50byB0aGUgbWl4LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYWJvdXQgYElQNl9ORl9NQVRDSF9JUFY2SEVBREVSYCwgdG9vOyBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCBhbHNvIHJlbGllcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYC4gVGltZSB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjE4Ljk0ODY0MTM0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9YVF9NQVRDSF9ITFxcbiAxMzY6XFx0XFx0aGVscFxcbiAxMzc6XFx0XFx0ICBUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2VcXG4gMTM4OlxcdFxcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcXG4gMTM5OlxcdFxcdCAgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITC5cXG4gMTQwOlxcdFxcbiAxNDE6XFx0Y29uZmlnIElQNl9ORl9NQVRDSF9JUFY2SEVBREVSXFxuIDE0MjpcXHRcXHR0cmlzdGF0ZSAnXFxcImlwdjZoZWFkZXJcXFwiIElQdjYgRXh0ZW5zaW9uIEhlYWRlcnMgTWF0Y2gnXFxuIDE0MzpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gMTQ0OlxcdFxcdGhlbHBcXG4gMTQ1OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWxsb3dzIG9uZSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIHVwb25cXG4gMTQ2OlxcdFxcdCAgdGhlIGlwdjYgZXh0ZW5zaW9uIGhlYWRlcnMuXFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0OTpcXHRcXG4gMTUwOlxcdGNvbmZpZyBJUDZfTkZfTUFUQ0hfTUhcXG4gMTUxOlxcdFxcdHRyaXN0YXRlICdcXFwibWhcXFwiIG1hdGNoIHN1cHBvcnQnXFxuIDE1MjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAxNTM6XFx0XFx0aGVscFxcbiAxNTQ6XFx0XFx0ICBUaGlzIG1vZHVsZSBhbGxvd3Mgb25lIHRvIG1hdGNoIE1IIHBhY2tldHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjE4Ljk0ODc2MDczWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTc1NzczNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBOZXRmaWx0ZXIgTWF0Y2hpbmcgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBgSVA2X05GX01BVENIX0lQVjZIRUFERVJgIG9wdGlvbi4gVGhlIGNvZGUgY2xlYXJseSBzdGF0ZXMgdGhhdCB0aGlzIGRvZXNuJ3QgaGF2ZSBhIGRlcGVuZGVuY3kgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJdCdzIGEgZnVuZGFtZW50YWwgbWF0Y2ggb24gdGhlIElQdjYgaGVhZGVyIGl0c2VsZi4gQnV0IG5vdyBJJ20gdGhpbmtpbmcgYWJvdXQgYElQNl9ORl9NQVRDSF9TUkhgLi4uIGRvZXMgKnRoYXQqIHNoYXJlIHRoZSBzYW1lIGluZGVwZW5kZW5jZT8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIGlzIG1vcmUgc3BlY2lhbGl6ZWQuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgbW9yZSBjb21wbGV4IGZlYXR1cmVzIGludm9sdmVkIHRoZXJlIHRoYXQgYXJlIHJlbGF0ZWQgdG8gYWR2YW5jZWQgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBTUkggbWF0Y2guIFBlcmhhcHMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSByZWxldmFudCBOZXRmaWx0ZXIgZG9jdW1lbnRhdGlvbiBvciBjb2RlIGV4YW1wbGVzIGlzIGluIG9yZGVyLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGVyZSdzIG5vIHN1YnRsZSBkZXBlbmRlbmN5IEknbSBtaXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGVzZSBmZWF0dXJlcyBiZWhhdmUgYXMgZXhwZWN0ZWQgaW4gY29tcGxleCBmaWx0ZXJpbmcgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6MjUuOTA2MzQyOTE5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFx0dHJpc3RhdGUgJ1xcXCJydFxcXCIgUm91dGluZyBoZWFkZXIgbWF0Y2ggc3VwcG9ydCdcXG4gMTcxOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDE3MjpcXHRcXHRoZWxwXFxuIDE3MzpcXHRcXHQgIHJ0IG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gbWF0Y2ggcGFja2V0cyBiYXNlZCBvbiB0aGUgcm91dGluZ1xcbiAxNzQ6XFx0XFx0ICBoZWFkZXIgb2YgdGhlIHBhY2tldC5cXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTc3OlxcdFxcbiAxNzg6XFx0Y29uZmlnIElQNl9ORl9NQVRDSF9TUkhcXG4gMTc5OlxcdFxcdHRyaXN0YXRlICdcXFwic3JoXFxcIiBTZWdtZW50IFJvdXRpbmcgaGVhZGVyIG1hdGNoIHN1cHBvcnQnXFxuIDE4MDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAxODE6XFx0XFx0aGVscFxcbiAxODI6XFx0XFx0ICBzcmggbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBzZWdtZW50XFxuIDE4MzpcXHRcXHQgIHJvdXRpbmcgaGVhZGVyIG9mIHRoZSBwYWNrZXQuXFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE4NjpcXHRcXG4gMTg3OlxcdCMgVGhlIHRhcmdldHNcXG4gMTg4OlxcdGNvbmZpZyBJUDZfTkZfVEFSR0VUX0hMXFxuIDE4OTpcXHRcXHR0cmlzdGF0ZSAnXFxcIkhMXFxcIiBob3BsaW1pdCB0YXJnZXQgc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6MjUuOTA2NDU0NDU5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxOTkwMjQwOTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyBpbiBOZXRmaWx0ZXIqKlxuXG5Pa2F5LCBzbyBgSVA2X05GX01BVENIX1NSSGAgZGVmaW5pdGVseSBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgLCB0aGF0J3MgYSBnaXZlbi4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuLi4geWVwLCBhbGwgcHJlc2VudDogYElQVjZgLCBgSVA2X05GX0lQVEFCTEVTYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBJUDZfTkZfTUFUQ0hfT1BUU2AsIGBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUmAsIGFuZCBgSVA2X05GX01BVENIX1NSSGAuXG5cblRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSB3YXNuJ3QgY29ycmVjdGx5IGRyb3BwaW5nIG1hbGZvcm1lZCBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzOyBpdCB3YXMganVzdCByZXR1cm5pbmcgYGZhbHNlYCBvbiBhIG1hdGNoIGZhaWx1cmUuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGF0IGJlaGF2aW9yLiBSZXR1cm5pbmcgYGZhbHNlYCBvbiBhIG1hdGNoIGZhaWx1cmUgYWxsb3dzIHRoZSBwYWNrZXQgdG8gY29udGludWUgYW5kIHBvc3NpYmx5IHRyaWdnZXIgYSB2dWxuZXJhYmlsaXR5LCB3aGVyZWFzIHNldHRpbmcgYGhvdGRyb3AgPSB0cnVlYCBkcm9wcyB0aGUgcGFja2V0LCB3aGljaCBpcyB0aGUgY29ycmVjdCBhbmQgc2VjdXJlIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUgYWN0dWFsbHksIHNvIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9sczogYGhiaF9tdDZgLCBgaXB2NmhlYWRlcl9tdDZgLCBgc3JoX210NmAsIGFuZCBgc3JoMV9tdDZgLlxuXG5MZXQncyBjaGVjayBpZiBgaGJoX210NmAgaXMgdGhlIG9ubHkgbWF0Y2ggZnVuY3Rpb24gaW4gYGlwNnRfaGJoLmNgLiBZdXAsIHRoYXQncyB0aGUgb25lLiBXYWl0LCBgaGJoX210NmAgaGFuZGxlcyAqYm90aCogSG9wLWJ5LUhvcCBhbmQgRGVzdGluYXRpb24gT3B0aW9ucyBoZWFkZXJzLCB0aGF0J3Mgd2h5IGl0IGlzIGxpc3RlZCBtdWx0aXBsZSB0aW1lcy4gU28gdGhlIGNvZGUgaXMgY29ycmVjdC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gYGlwNnRfaXB2NmhlYWRlci5jYC4gT2theSwgdGhlIHBhdGNoIHJlbW92ZXMgYSBjaGVjazogYGxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpYC4gV2h5PyBBaCwgYHNrYl9oZWFkZXJfcG9pbnRlcmAgbm93IHRha2VzIGNhcmUgb2YgdGhhdC4gSXQgd2lsbCBmYWlsIGlmIGBwdHIgKyBzaXplb2YoX2hkcikgXHUwMDNlIHNrYi1cdTAwM2VsZW5gIGFuZCByZXR1cm4gTlVMTC4gYHNpemVvZihfaGRyKWAgaXMgdGhlIHNhbWUgYXMgYHNpemVvZihzdHJ1Y3QgaXB2Nl9vcHRfaGRyKWAsIHNvIHRoZSBjb2RlIGluIGBza2JfaGVhZGVyX3BvaW50ZXJgIHJlcGxhY2VzIHRoZSBub3cgcmVtb3ZlZCBjaGVjay4gTW9yZSBpbXBvcnRhbnRseSwgaWYgYHNrYl9oZWFkZXJfcG9pbnRlcmAgZmFpbHMsIGl0IG5vdyBzZXRzIGBob3Rkcm9wID0gdHJ1ZWAuIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHJldHVybmVkIGZhbHNlIHdpdGhvdXQgaG90ZHJvcHBpbmcuIFNvIHRoZSBwYXRjaCBtYWtlcyBzdXJlIHRvIHNldCBgaG90ZHJvcCA9IHRydWVgIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQuXG5cbkZpbmFsbHksIGluIGBpcDZ0X3NyaC5jYCwgdGhlIHBhdGNoIGhhbmRsZXMgZXJyb3IgY29kZXMgZnJvbSBgaXB2Nl9maW5kX2hkcmAuIE5vdywgaWYgYGlwdjZfZmluZF9oZHJgIGZhaWxzIHdpdGggYW55dGhpbmcgKm90aGVyKiB0aGFuIGAtRU5PRU5UYCAoZS5nLiwgYSBtYWxmb3JtZWQgaGVhZGVyKSwgaXQganVtcHMgdG8gYGhvdGRyb3AgPSB0cnVlYC4gVGhpcyBpcyBhbm90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZW5zdXJlcyBtYWxmb3JtZWQgcGFja2V0cyBhcmUgZHJvcHBlZCBjb3JyZWN0bHkuXG5cbkV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gVGhlIHBhdGNoIGlzIGRvaW5nIHRoZSByaWdodCB0aGluZywgY29ycmVjdGx5IGhhbmRsaW5nIGFuZCBob3Rkcm9wcGluZyBwYWNrZXRzIHdpdGggYmFkIGhlYWRlcnMuIEknbSByZWFkeSB0byBtYXJrIHRoaXMgYXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NTIsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjQ3Ljg5NjY5ODE2NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTg3NDUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVA2X05GX0lQVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIklQNl9ORl9NQVRDSF9PUFRTXCIsXG4gICAgXCJJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUlwiLFxuICAgIFwiSVA2X05GX01BVENIX1NSSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhiaF9tdDZcIixcbiAgICBcImlwdjZoZWFkZXJfbXQ2XCIsXG4gICAgXCJzcmhfbXQ2XCIsXG4gICAgXCJzcmgxX210NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgbmV0ZmlsdGVyIG1hdGNoIGV4dGVuc2lvbnMgKGhiaCwgaXB2NmhlYWRlciwgc3JoKSB0byBwcm9wZXJseSBkcm9wIHBhY2tldHMgd2l0aCBtYWxmb3JtZWQgZXh0ZW5zaW9uIGhlYWRlcnMgYnkgc2V0dGluZyBgcGFyLVxcdTAwM2Vob3Rkcm9wID0gdHJ1ZWAgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyBmYWxzZSAod2hpY2ggd291bGQgYWxsb3cgdGhlIHBhY2tldCB0byBjb250aW51ZSB0cmF2ZXJzYWwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JrIGZpbHRlcmluZyBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IG1hbGZvcm1lZCBwYWNrZXRzIGFyZSBoYW5kbGVkLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQNl9ORl9JUFRBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJJUDZfTkZfTUFUQ0hfT1BUU1wiLFxuICAgIFwiSVA2X05GX01BVENIX0lQVjZIRUFERVJcIixcbiAgICBcIklQNl9ORl9NQVRDSF9TUkhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYmhfbXQ2XCIsXG4gICAgXCJpcHY2aGVhZGVyX210NlwiLFxuICAgIFwic3JoX210NlwiLFxuICAgIFwic3JoMV9tdDZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IG5ldGZpbHRlciBtYXRjaCBleHRlbnNpb25zIChoYmgsIGlwdjZoZWFkZXIsIHNyaCkgdG8gcHJvcGVybHkgZHJvcCBwYWNrZXRzIHdpdGggbWFsZm9ybWVkIGV4dGVuc2lvbiBoZWFkZXJzIGJ5IHNldHRpbmcgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UgKHdoaWNoIHdvdWxkIGFsbG93IHRoZSBwYWNrZXQgdG8gY29udGludWUgdHJhdmVyc2FsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBmaWx0ZXJpbmcgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBtYWxmb3JtZWQgcGFja2V0cyBhcmUgaGFuZGxlZCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6NDguMDU2NTc5NTQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5ODU4MDkzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjQ4LjA1NzE1Mjc1MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjc5ODAwNDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cXG5cXG5BbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBwYWNrZXQgcGFyc2luZyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgcmVhZHMpIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTA1ZjFiOGVjYzIyMDFlYWE1NWUxNDhjZmExYTRiNjg4M2MwM2QwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG5pbmRleCA2ZDFhNWQyMDI2YTY3Li45ZjA0YjRkOGYxNmZmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG5AQCAtNjIsMjEgKzYyLDE4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdCAgICBORVhUSERSX0hPUCA6IE5FWFRIRFJfREVTVCwgTlVMTCwgTlVMTCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbi1cdFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRvaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHB0ciwgc2l6ZW9mKF9vcHRzaCksIFx1MDAyNl9vcHRzaCk7XG4tXHRpZiAob2ggPT0gTlVMTCkge1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbitcdGlmICghb2gpXG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKG9oKTtcbiBcdGlmIChza2ItXHUwMDNlbGVuIC0gcHRyIFx1MDAzYyBoZHJsZW4pIHtcbi1cdFx0LyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdCdzIGxlbmd0aCBmaWVsZCAqL1xuLVx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0LyogUGFja2V0IHNtYWxsZXIgdGhhbiBpdHMgbGVuZ3RoIGZpZWxkICovXG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcdH1cbiBcbiBcdHByX2RlYnVnKFwiSVB2NiBPUFRTIExFTiAldSAldSBcIiwgaGRybGVuLCBvaC1cdTAwM2VoZHJsZW4pO1xuQEAgLTEwNCw4ICsxMDEsOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdHRwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHRyLCBzaXplb2YoX29wdHR5cGUpLFxuIFx0XHRcdFx0XHRcdFx1MDAyNl9vcHR0eXBlKTtcbi1cdFx0XHRpZiAodHAgPT0gTlVMTClcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmICghdHApXG4rXHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXG4gXHRcdFx0LyogVHlwZSBjaGVjayAqL1xuIFx0XHRcdGlmICgqdHAgIT0gKG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHhGRjAwKSBcdTAwM2VcdTAwM2UgOCkge1xuQEAgLTEyMSwxMiArMTE4LDEyIEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFxuIFx0XHRcdFx0LyogbGVuZ3RoIGZpZWxkIGV4aXN0cyA/ICovXG4gXHRcdFx0XHRpZiAoaGRybGVuIFx1MDAzYyAyKVxuLVx0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRcdFx0bHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwdHIgKyAxLFxuIFx0XHRcdFx0XHRcdFx0c2l6ZW9mKF9vcHRsZW4pLFxuIFx0XHRcdFx0XHRcdFx0XHUwMDI2X29wdGxlbik7XG4tXHRcdFx0XHRpZiAobHAgPT0gTlVMTClcbi1cdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHRpZiAoIWxwKVxuK1x0XHRcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdFx0XHRzcGVjX2xlbiA9IG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHgwMEZGO1xuIFxuIFx0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKSB7XG5AQCAtMTQ0LDEwICsxNDEsMTAgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0LyogU3RlcCB0byB0aGUgbmV4dCAqL1xuIFx0XHRcdHByX2RlYnVnKFwibGVuJTA0WFxcblwiLCBvcHRsZW4pO1xuIFxuLVx0XHRcdGlmICgocHRyIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gb3B0bGVuIHx8IGhkcmxlbiBcdTAwM2Mgb3B0bGVuKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnIgLSAxKSB7XG4rXHRcdFx0aWYgKHB0ciBcdTAwM2Ugc2tiLVx1MDAzZWxlbiB8fCBvcHRsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBwdHIgfHxcbitcdFx0XHQgICAgaGRybGVuIFx1MDAzYyBvcHRsZW4pIHtcbiBcdFx0XHRcdHByX2RlYnVnKFwibmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwiKTtcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRcdH1cbiBcdFx0XHRwdHIgKz0gb3B0bGVuO1xuIFx0XHRcdGhkcmxlbiAtPSBvcHRsZW47XG5AQCAtMTU5LDYgKzE1NiwxMCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdHJldHVybiBmYWxzZTtcbitcbitob3Rkcm9wOlxuK1x0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhiaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jXG5pbmRleCBjNTJmZjkyOWM5M2IzLi5hZWY4ZjY5ZGE3ZmI1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmNcbkBAIC0yOCw3ICsyOCw2IEBAIGlwdjZoZWFkZXJfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8gKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuIFx0dW5zaWduZWQgaW50IHRlbXA7XG4tXHRpbnQgbGVuO1xuIFx0dTggbmV4dGhkcjtcbiBcdHVuc2lnbmVkIGludCBwdHI7XG4gXG5AQCAtMzgsOCArMzcsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRuZXh0aGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VuZXh0aGRyO1xuIFx0LyogcG9pbnRlciB0byB0aGUgMXN0IGV4dGhkciAqL1xuIFx0cHRyID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbi1cdC8qIGF2YWlsYWJsZSBsZW5ndGggKi9cbi1cdGxlbiA9IHNrYi1cdTAwM2VsZW4gLSBwdHI7XG4gXHR0ZW1wID0gMDtcbiBcbiBcdHdoaWxlIChuZl9pcDZfZXh0X2hkcihuZXh0aGRyKSkge1xuQEAgLTUyLDkgKzQ5LDYgQEAgaXB2NmhlYWRlcl9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdHRlbXAgfD0gTUFTS19OT05FO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdC8qIElzIHRoZXJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIG5leHQgZXh0IGhlYWRlcj8gKi9cbi1cdFx0aWYgKGxlbiBcdTAwM2MgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHQvKiBFU1AgLVx1MDAzZSBldmFsdWF0ZSAqL1xuIFx0XHRpZiAobmV4dGhkciA9PSBORVhUSERSX0VTUCkge1xuIFx0XHRcdHRlbXAgfD0gTUFTS19FU1A7XG5AQCAtOTcsNyArOTEsNiBAQCBpcHY2aGVhZGVyX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdH1cbiBcbiBcdFx0bmV4dGhkciA9IGhwLVx1MDAzZW5leHRoZHI7XG4tXHRcdGxlbiAtPSBoZHJsZW47XG4gXHRcdHB0ciArPSBoZHJsZW47XG4gXHRcdGlmIChwdHIgXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfc3JoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY1xuaW5kZXggZGIwZmQ2NGQ4OTg2Mi4uNmZjYzQwMTAyZmUzZCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3NyaC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9zcmguY1xuQEAgLTI3LDIyICsyNywyNyBAQCBzdGF0aWMgYm9vbCBzcmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIFx0c3RydWN0IGlwdjZfc3JfaGRyIF9zcmg7XG4gXHRpbnQgaGRybGVuLCBzcmhvZmYgPSAwO1xuK1x0aW50IGVycjtcbiBcbi1cdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuK1x0ZXJyID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKTtcbitcdGlmIChlcnIgXHUwMDNjIDApIHtcbitcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuK1x0XHRcdGdvdG8gaG90ZHJvcDtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFx0c3JoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3Job2ZmLCBzaXplb2YoX3NyaCksIFx1MDAyNl9zcmgpO1xuIFx0aWYgKCFzcmgpXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aGRybGVuID0gaXB2Nl9vcHRsZW4oc3JoKTtcbiBcdGlmIChza2ItXHUwMDNlbGVuIC0gc3Job2ZmIFx1MDAzYyBoZHJsZW4pXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0aWYgKHNyaC1cdTAwM2V0eXBlICE9IElQVjZfU1JDUlRfVFlQRV80KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoc3JoLVx1MDAzZXNlZ21lbnRzX2xlZnQgXHUwMDNlIHNyaC1cdTAwM2VmaXJzdF9zZWdtZW50KVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdC8qIE5leHQgSGVhZGVyIG1hdGNoaW5nICovXG4gXHRpZiAoc3JoaW5mby1cdTAwM2VtdF9mbGFncyBcdTAwMjYgSVA2VF9TUkhfTkVYVEhEUilcbkBAIC0xMTEsNiArMTE2LDEwIEBAIHN0YXRpYyBib29sIHNyaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdFx0IShzcmgtXHUwMDNldGFnID09IHNyaGluZm8tXHUwMDNldGFnKSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4rXG4raG90ZHJvcDpcbitcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuQEAgLTEyMSwyMiArMTMwLDMxIEBAIHN0YXRpYyBib29sIHNyaDFfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdHN0cnVjdCBpbjZfYWRkciBfcHNpZCwgX25zaWQsIF9sc2lkO1xuIFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgX3NyaDtcbitcdGludCBlcnI7XG4gXG4tXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbitcdGVyciA9IGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbitcdFx0XHRnb3RvIGhvdGRyb3A7XG4gXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcdHNyaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNyaG9mZiwgc2l6ZW9mKF9zcmgpLCBcdTAwMjZfc3JoKTtcbiBcdGlmICghc3JoKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKHNyaCk7XG4gXHRpZiAoc2tiLVx1MDAzZWxlbiAtIHNyaG9mZiBcdTAwM2MgaGRybGVuKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGdvdG8gaG90ZHJvcDtcbiBcbiBcdGlmIChzcmgtXHUwMDNldHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0aWYgKHNpemVvZigqc3JoKSArXG4rXHQgICAgKChzcmgtXHUwMDNlZmlyc3Rfc2VnbWVudCArIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIFx1MDAzZSBoZHJsZW4pXG4rXHRcdGdvdG8gaG90ZHJvcDtcbitcbiBcdGlmIChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCBcdTAwM2Ugc3JoLVx1MDAzZWZpcnN0X3NlZ21lbnQpXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0Z290byBob3Rkcm9wO1xuIFxuIFx0LyogTmV4dCBIZWFkZXIgbWF0Y2hpbmcgKi9cbiBcdGlmIChzcmhpbmZvLVx1MDAzZW10X2ZsYWdzIFx1MDAyNiBJUDZUX1NSSF9ORVhUSERSKVxuQEAgLTIwNyw3ICsyMjUsNyBAQCBzdGF0aWMgYm9vbCBzcmgxX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0ICAoKHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0ICsgMSkgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7XG4gXHRcdHBzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwc2lkb2ZmLCBzaXplb2YoX3BzaWQpLCBcdTAwMjZfcHNpZCk7XG4gXHRcdGlmICghcHNpZClcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX1BTSUQsXG4gXHRcdFx0XHRpcHY2X21hc2tlZF9hZGRyX2NtcChwc2lkLCBcdTAwMjZzcmhpbmZvLVx1MDAzZXBzaWRfbXNrLFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2c3JoaW5mby1cdTAwM2Vwc2lkX2FkZHIpKSlcbkBAIC0yMjIsNyArMjQwLDcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRcdCAgKChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCAtIDEpICogc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xuIFx0XHRuc2lkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbnNpZG9mZiwgc2l6ZW9mKF9uc2lkKSwgXHUwMDI2X25zaWQpO1xuIFx0XHRpZiAoIW5zaWQpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGdvdG8gaG90ZHJvcDtcbiBcdFx0aWYgKE5GX1NSSF9JTlZGKHNyaGluZm8sIElQNlRfU1JIX0lOVl9OU0lELFxuIFx0XHRcdFx0aXB2Nl9tYXNrZWRfYWRkcl9jbXAobnNpZCwgXHUwMDI2c3JoaW5mby1cdTAwM2Vuc2lkX21zayxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnNyaGluZm8tXHUwMDNlbnNpZF9hZGRyKSkpXG5AQCAtMjM0LDEzICsyNTIsMTcgQEAgc3RhdGljIGJvb2wgc3JoMV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRsc2lkb2ZmID0gc3Job2ZmICsgc2l6ZW9mKHN0cnVjdCBpcHY2X3NyX2hkcik7XG4gXHRcdGxzaWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsc2lkb2ZmLCBzaXplb2YoX2xzaWQpLCBcdTAwMjZfbHNpZCk7XG4gXHRcdGlmICghbHNpZClcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0Z290byBob3Rkcm9wO1xuIFx0XHRpZiAoTkZfU1JIX0lOVkYoc3JoaW5mbywgSVA2VF9TUkhfSU5WX0xTSUQsXG4gXHRcdFx0XHRpcHY2X21hc2tlZF9hZGRyX2NtcChsc2lkLCBcdTAwMjZzcmhpbmZvLVx1MDAzZWxzaWRfbXNrLFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2c3JoaW5mby1cdTAwM2Vsc2lkX2FkZHIpKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbitcbitob3Rkcm9wOlxuK1x0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNyaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDozMDo0OC4wNTcxNTQwMTFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3OTc5ODQzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSVB2NiBOZXRmaWx0ZXIgUGF0Y2ggZm9yIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGZvY3VzZWQgb24gaGFyZGVuaW5nIHRoZSBwYWNrZXQgcGFyc2luZyBsb2dpYyB3aXRoaW4gdGhlIElQdjYgbmV0ZmlsdGVyIGV4dGVuc2lvbnMuIFNwZWNpZmljYWxseSwgSSdtIHNlZWluZyBjaGFuZ2VzIGluIGBpcDZ0X2hiaC5jYCwgYGlwNnRfaXB2NmhlYWRlci5jYCwgYW5kIGBpcDZ0X3NyaC5jYC4gVGhlIG92ZXJ3aGVsbWluZyBwYXR0ZXJuIGhlcmUgaXMgdGhlIHJlcGxhY2VtZW50IG9mIHZhcmlvdXMgYGlmYCBjaGVja3Mgd2l0aCBgZ290byBob3Rkcm9wO2Agc3RhdGVtZW50cywgYW5kIHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBjaGVjayBpbiBgaXA2dF9zcmguY2AuIEFsbCB0aGVzZSBjaGFuZ2VzIGVzc2VudGlhbGx5IHJlZmluZSB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlc2UgbW9kdWxlcyB3aGVuIGRlYWxpbmcgd2l0aCBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLlxuXG5JbiBgaXA2dF9oYmguY2AsIGl0IHNlZW1zIHdlJ3JlIHRpZ2h0ZW5pbmcgdXAgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGFuZCBlbnN1cmluZyB0aGUgcGFja2V0IGxlbmd0aCBpcyBzdWZmaWNpZW50IGZvciB0aGUgaGVhZGVyIHNpemVzIHdlJ3JlIGV4cGVjdGluZy4gU2ltaWxhcmx5LCBpbiBgaXA2dF9zcmguY2AsIHRoZXJlJ3MgYSBjb25jZXJ0ZWQgZWZmb3J0IHRvIHZhbGlkYXRlIHRoZSBTZXJpYWwgUm91dGluZyBIZWFkZXIncyBzdHJ1Y3R1cmUgYW5kIHNlZ21lbnQgbGVuZ3Rocy4gVGhlIHJlbW92YWwgb2YgdGhlIGBsZW5gIHZhcmlhYmxlIGFuZCB0aGUgcmVkdW5kYW50IGNoZWNrIGluIGBpcDZ0X2lwdjZoZWFkZXIuY2AgaXMgaW50ZXJlc3RpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYmVlbiBzdXBlcnNlZGVkIGJ5IHRoZSByb2J1c3QgaGFuZGxpbmcgb2YgYHNrYl9oZWFkZXJfcG9pbnRlcmAuIFRoYXQncyBnb29kLCBsZXNzIHJlZHVuZGFudCBjb2RlLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIG1vcmUgYWdncmVzc2l2ZSBwYWNrZXQgZHJvcHBpbmcgd2hlbiBtYWxmb3JtZWQgaGVhZGVycyBhcmUgZGV0ZWN0ZWQuIFdoYXQncyBoYXBwZW5pbmcgaGVyZSBpcyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24gb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgb25seSBmb2N1cyBpcyBiZXR0ZXIgYm91bmRzIGNoZWNraW5nIHRvIGVuc3VyZSB0aGF0IHBhY2tldHMgY29uZm9ybSB0byB0aGUgZXhwZWN0ZWQgSVB2NiBleHRlbnNpb24gaGVhZGVyIGZvcm1hdHMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFib3V0IGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgaW50cm9kdWNlZC4gVGhlIHBhY2tldCBkYXRhIGl0c2VsZiBpcyBjb21pbmcgZnJvbSB0aGUgbmV0d29yayBkcml2ZXIsIGl0IGhhcyB0byBiZSBpbml0aWFsaXplZCBieSB0aGUgc2VuZGVyLiBUaGUgYWRkZWQgY2hlY2sgYHNpemVvZigqc3JoKSArICgoc3JoLVx1MDAzZWZpcnN0X3NlZ21lbnQgKyAxKSAqIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSBcdTAwM2UgaGRybGVuYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgcmVhZHMgKndpdGhpbiogdGhlIHBhY2tldC4gV2hpbGUgS0FTQU4gd291bGQgY2F0Y2ggb3V0LW9mLWJvdW5kcyByZWFkcyBmcm9tIHRoZSBgc2tiYCwgaW4gdGhpcyBjYXNlLCB0aGUgYHNrYmAgbWlnaHQgaGF2ZSBleHRyYSBkYXRhIGFwcGVuZGVkLCBhbmQgd2UncmUgZW5zdXJpbmcgd2UgZG9uJ3QgcmVhZCBiZXlvbmQgdGhlIGV4dGVuc2lvbiBoZWFkZXIgaW50byBnYXJiYWdlIGRhdGEgaW4gdGhlIHNhbWUgYHNrYmAuIFRoYXQncyBhIGxvZ2ljIGJ1ZyBvciBhIHJlYWQgb2YgcGFja2V0LWludGVybmFsIGdhcmJhZ2UsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzLiBMb29raW5nIGF0IHRoZSB1c2FnZSBvZiBgc2tiX2hlYWRlcl9wb2ludGVyYCwgaXQgbG9va3MgbGlrZSBpdCdzIHVzZWQgdG8gY29weSBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzLCBzdWNoIGFzIGBfc3JoYCwgYF9wc2lkYCwgZXRjLiBUaGlzIGxvb2tzIGZpbmUuIElmIGl0IGZhaWxzLCBpdCByZXR1cm5zIE5VTEwuIElmIGl0IHN1Y2NlZWRzLCBpdCByZXR1cm5zIGVpdGhlciBhIHBvaW50ZXIgdG8gdGhlIGxpbmVhciBkYXRhIChpZiBwb3NzaWJsZSkgb3IgYSBjb3B5IGluIGEgZnVsbHkgcG9wdWxhdGVkIGxvY2FsIGJ1ZmZlci4gVGhlcmVmb3JlLCB0aGVyZSdzIGFic29sdXRlbHkgbm8gcmlzayBvZiBhbiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlIGJlaW5nIHJldHVybmVkLiBTbyB0aGVyZSdzIG5vIHdheSB0aGF0IHdlIGNhbiBoYXZlIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCBoZXJlLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoaXMgcGF0Y2ggaXMgbm90IGludHJvZHVjaW5nIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFdlIG9ubHkgbmVlZCB0byB1c2UgS0FTQU4uIFRoZXNlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaGFyZGVuaW5nIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVyaW5nIHBhY2tldCBwYXJzaW5nLCBhbmQgdGhlc2UgZml4ZXMgcmVsYXRlIHRvIGxvZ2ljIGJ1Z3MsIHdpdGggYW55IHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGJlaW5nIGNvbmZpbmVkIHRvIHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYgYW5kIGFscmVhZHkgcHJvdGVjdGVkIHdpdGggS0FTQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNDUsIk91dHB1dFRva2VucyI6MjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMxOjA0Ljg1NTE0MTIwNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cXG5cXG5BbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBwYWNrZXQgcGFyc2luZyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgcmVhZHMpIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBuZXRmaWx0ZXIgbW9kdWxlcyAoaXA2dF9oYmgsIGlwNnRfaXB2NmhlYWRlciwgaXA2dF9zcmgpIHRvIGltcHJvdmUgcGFja2V0IHBhcnNpbmcgYW5kIGJvdW5kcyBjaGVja2luZy4gSXQgZW5zdXJlcyB0aGF0IG1hbGZvcm1lZCBwYWNrZXRzIHdpdGggaW52YWxpZCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aHMgb3Igc2VnbWVudCBjb3VudHMgYXJlIGNvcnJlY3RseSBkcm9wcGVkICh2aWEgYHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWVgKSByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyBmYWxzZSBvciBwcm9jZWVkaW5nIHdpdGggcGFyc2luZy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdpdGhpbiB0aGUgc29ja2V0IGJ1ZmZlciAoc2tiKSBkYXRhLCB3aGljaCBjb25zaXN0cyBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgKG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkpLiBUaGUgZnVuY3Rpb25zIHVzZSBgc2tiX2hlYWRlcl9wb2ludGVyKClgLCB3aGljaCBzYWZlbHkgY29waWVzIHBhY2tldCBkYXRhIGludG8gbG9jYWwgc3RhY2sgdmFyaWFibGVzIG9yIHJldHVybnMgYSBkaXJlY3QgcG9pbnRlciwgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggZXhjZWVkcyB0aGUgc2tiIGxlbmd0aC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeS5cXG5cXG5BbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBwYWNrZXQgcGFyc2luZyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgcmVhZHMpIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqc245[1] Phase: Succeeded StartedAt: 2026-08-07 10:31:21 +0000 UTC FinishedAt: 2026-08-07 10:31:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 10:31:21 +0000 UTC FinishedAt: 2026-08-07 10:31:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2] Phase: Succeeded StartedAt: 2026-08-07 10:31:21 +0000 UTC FinishedAt: 2026-08-07 14:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 10:31:21 +0000 UTC FinishedAt: 2026-08-07 14:14:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 10:31:21 +0000 UTC FinishedAt: 2026-08-07 10:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 10:31:21 +0000 UTC FinishedAt: 2026-08-07 10:31:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowqc245/series-workflowqc245-convert-artifact-3709157890/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 10:31:31 +0000 UTC FinishedAt: 2026-08-07 10:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 10:31:31 +0000 UTC FinishedAt: 2026-08-07 10:50:37 +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:*0a91057b-ff65-413e-aa23-13361f889b1c,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-workflowqc245/series-workflowqc245-convert-artifact-3709157890/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": "e6eb3209-34b8-4b19-b04e-996071922365", "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-workflowqc245/series-workflowqc245-build-action-1089786048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 10:31:31 +0000 UTC FinishedAt: 2026-08-07 10:50:27 +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:*0a91057b-ff65-413e-aa23-13361f889b1c,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-workflowqc245/series-workflowqc245-convert-artifact-3709157890/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": "e6eb3209-34b8-4b19-b04e-996071922365", "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-workflowqc245/series-workflowqc245-build-action-1089786048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 10:50:37 +0000 UTC FinishedAt: 2026-08-07 10:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 10:50:37 +0000 UTC FinishedAt: 2026-08-07 10:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 10:50:37 +0000 UTC FinishedAt: 2026-08-07 10:50:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 10:50:37 +0000 UTC FinishedAt: 2026-08-07 10:50:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowqc245/series-workflowqc245-convert-artifact-668352093/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 10:50:59 +0000 UTC FinishedAt: 2026-08-07 10:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 10:50:59 +0000 UTC FinishedAt: 2026-08-07 10:53:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e6eb3209-34b8-4b19-b04e-996071922365,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-workflowqc245/series-workflowqc245-build-action-1089786048/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-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 10:53:31 +0000 UTC FinishedAt: 2026-08-07 10:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 10:53:31 +0000 UTC FinishedAt: 2026-08-07 10:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 10:53:31 +0000 UTC FinishedAt: 2026-08-07 11:10:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 10:53:31 +0000 UTC FinishedAt: 2026-08-07 11:10:21 +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:*0a91057b-ff65-413e-aa23-13361f889b1c,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-workflowqc245/series-workflowqc245-convert-artifact-668352093/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": "502c8b1e-e2c0-4825-a1b1-be93815132c3", "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-workflowqc245/series-workflowqc245-build-action-1395359545/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 10:53:31 +0000 UTC FinishedAt: 2026-08-07 11:10:11 +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:*0a91057b-ff65-413e-aa23-13361f889b1c,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-workflowqc245/series-workflowqc245-convert-artifact-668352093/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": "502c8b1e-e2c0-4825-a1b1-be93815132c3", "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-workflowqc245/series-workflowqc245-build-action-1395359545/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 11:10:21 +0000 UTC FinishedAt: 2026-08-07 11:10:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 11:10:21 +0000 UTC FinishedAt: 2026-08-07 11:10:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 11:10:21 +0000 UTC FinishedAt: 2026-08-07 11:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 11:10:21 +0000 UTC FinishedAt: 2026-08-07 11:12:23 +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:*502c8b1e-e2c0-4825-a1b1-be93815132c3,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-workflowqc245/series-workflowqc245-build-action-1395359545/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-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 11:12:33 +0000 UTC FinishedAt: 2026-08-07 14:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 11:12:33 +0000 UTC FinishedAt: 2026-08-07 14:14:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"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:*e6eb3209-34b8-4b19-b04e-996071922365,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*502c8b1e-e2c0-4825-a1b1-be93815132c3,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-workflowqc245/series-workflowqc245-build-action-1089786048/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-workflowqc245/series-workflowqc245-build-action-1395359545/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 11:12:33 +0000 UTC FinishedAt: 2026-08-07 11:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 11:12:33 +0000 UTC FinishedAt: 2026-08-07 11:12:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"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-workflowqc245/series-workflowqc245-convert-artifact-3546290402/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 11:12:33 +0000 UTC FinishedAt: 2026-08-07 11:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 11:12:33 +0000 UTC FinishedAt: 2026-08-07 11:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 11:12:33 +0000 UTC FinishedAt: 2026-08-07 11:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 11:12:43 +0000 UTC FinishedAt: 2026-08-07 14:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc245[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hbh_mt6","ipv6header_mt6","srh_mt6","srh1_mt6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP6_NF_IPTABLES","NETFILTER_ADVANCED","IP6_NF_MATCH_OPTS","IP6_NF_MATCH_IPV6HEADER","IP6_NF_MATCH_SRH"],"series_id":"5b6c1a56-7c22-4fbf-83ad-9788e88e10a6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 11:12:43 +0000 UTC FinishedAt: 2026-08-07 14:14:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e6eb3209-34b8-4b19-b04e-996071922365,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*502c8b1e-e2c0-4825-a1b1-be93815132c3,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-workflowqc245/series-workflowqc245-build-action-1089786048/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-workflowqc245/series-workflowqc245-build-action-1395359545/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-workflowqc245/series-workflowqc245-convert-artifact-3546290402/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,}