Name: series-workflowgrb2h Phase: Succeeded StartedAt: 2026-08-09 09:32:32 +0000 UTC FinishedAt: 2026-08-09 13:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[0] Phase: Succeeded StartedAt: 2026-08-09 09:32:32 +0000 UTC FinishedAt: 2026-08-09 10:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[0].run-triage Phase: Succeeded StartedAt: 2026-08-09 09:32:32 +0000 UTC FinishedAt: 2026-08-09 10:02:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_GRED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_GRED" ], "series_id": "6a39de4c-af73-496d-879d-02b13d2fd105" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gred_enqueue", "gred_change", "gred_init" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA5IDA5OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0dSRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtncmVkX2VucXVldWUmIzM0OywKICAgICYjMzQ7Z3JlZF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7Z3JlZF9pbml0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBidWcgaW4gYGdyZWRfZW5xdWV1ZWAgYnkgY2FzdGluZyBgc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgYGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpYCB0byBgdTY0YCBiZWZvcmUgYWRkaW5nIGBxZGlzY19wa3RfbGVuKHNrYilgLiBUaGlzIHByZXZlbnRzIHRoZSBzdW0gZnJvbSB3cmFwcGluZyBhcm91bmQgYW5kIGluY29ycmVjdGx5IGJ5cGFzc2luZyB0aGUgcXVldWUgbGltaXQgY2hlY2sgKGBcdTAwM2M9IHNjaC1cdTAwM2VsaW1pdGApLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBxdWV1ZSBsaW1pdCBiZWluZyBleGNlZWRlZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgR1JFRCBxZGlzYyBlbnF1ZXVlIGZ1bmN0aW9uIGJ5IGNhc3RpbmcgdGhlIGJhY2tsb2cgdG8gdTY0IGJlZm9yZSBhZGRpbmcgdGhlIHBhY2tldCBsZW5ndGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDk6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MjU4OTc2YmZiMWFkNTk2ZWM3ZTIzZjM1YWU4ZjJhOTQyNjc3NDk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAwOTo1Mjo0OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dyZWQuYyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jXG5pbmRleCBmY2MxYTRjMDM2MzYyLi5mMDRmNDI1YzZjNDQ5IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9ncmVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jXG5AQCAtMTc5LDcgJiM0MzsxNzksNyBAQCBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiBcdFx0XHQgKiBpZiBubyBkZWZhdWx0IERQIGhhcyBiZWVuIGNvbmZpZ3VyZWQuIFRoaXNcbiBcdFx0XHQgKiBhbGxvd3MgZm9yIERQIGZsb3dzIHRvIGJlIGxlZnQgdW50b3VjaGVkLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmIChsaWtlbHkoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nICYjNDM7IHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9XG4mIzQzO1x0XHRcdGlmIChsaWtlbHkoKHU2NClzY2gtXHUwMDNlcXN0YXRzLmJhY2tsb2cgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz1cbiBcdFx0XHRcdFx0c2NoLVx1MDAzZWxpbWl0KSlcbiBcdFx0XHRcdHJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpO1xuIFx0XHRcdGVsc2VcbkBAIC0yNDQsNyAmIzQzOzI0NCw3IEBAIHN0YXRpYyBpbnQgZ3JlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmIChncmVkX2JhY2tsb2codCwgcSwgc2NoKSAmIzQzOyBxZGlzY19wa3RfbGVuKHNrYikgXHUwMDNjPSBxLVx1MDAzZWxpbWl0KSB7XG4mIzQzO1x0aWYgKCh1NjQpZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaCkgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz0gcS1cdTAwM2VsaW1pdCkge1xuIFx0XHRxLVx1MDAzZWJhY2tsb2cgJiM0Mzs9IHFkaXNjX3BrdF9sZW4oc2tiKTtcbiBcdFx0cmV0dXJuIHFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDk6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0dSRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtncmVkX2VucXVldWUmIzM0OywKICAgICYjMzQ7Z3JlZF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7Z3JlZF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIEdSRUQgcWRpc2MgZW5xdWV1ZSBmdW5jdGlvbiBieSBjYXN0aW5nIHRoZSBiYWNrbG9nIHRvIHU2NCBiZWZvcmUgYWRkaW5nIHRoZSBwYWNrZXQgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI1ODk3NmJmYjFhZDU5NmVjN2UyM2YzNWFlOGYyYTk0MjY3NzQ5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDkgMDk6NTI6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dyZWQuYyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jCmluZGV4IGZjYzFhNGMwMzYzNjIuLmYwNGY0MjVjNmM0NDkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ3JlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jCkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHN0YXRpYyBpbnQgZ3JlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLAogCQkJICogaWYgbm8gZGVmYXVsdCBEUCBoYXMgYmVlbiBjb25maWd1cmVkLiBUaGlzCiAJCQkgKiBhbGxvd3MgZm9yIERQIGZsb3dzIHRvIGJlIGxlZnQgdW50b3VjaGVkLgogCQkJICovCi0JCQlpZiAobGlrZWx5KHNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2cgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpICZsdDs9CiYjNDM7CQkJaWYgKGxpa2VseSgodTY0KXNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2cgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpICZsdDs9CiAJCQkJCXNjaC0mZ3Q7bGltaXQpKQogCQkJCXJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpOwogCQkJZWxzZQpAQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpICYjNDM7IHFkaXNjX3BrdF9sZW4oc2tiKSAmbHQ7PSBxLSZndDtsaW1pdCkgewomIzQzOwlpZiAoKHU2NClncmVkX2JhY2tsb2codCwgcSwgc2NoKSAmIzQzOyBxZGlzY19wa3RfbGVuKHNrYikgJmx0Oz0gcS0mZ3Q7bGltaXQpIHsKIAkJcS0mZ3Q7YmFja2xvZyAmIzQzOz0gcWRpc2NfcGt0X2xlbihza2IpOwogCQlyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgR1JFRCBQYXRjaCBmb3IgUG90ZW50aWFsIE92ZXJmbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvc2NoZWQvc2NoX2dyZWQuY2AuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWUsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgYmFja2xvZyBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIEdSRUQgcXVldWluZyBkaXNjaXBsaW5lLiBUaGUgY29yZSBvZiB0aGUgZml4IGlzIGEgdHlwZSBjYXN0OyB0aGV5JiMzOTtyZSBjb252ZXJ0aW5nIGJvdGggYHNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2dgIGFuZCB0aGUgcmVzdWx0IG9mIGBncmVkX2JhY2tsb2codCwgcSwgc2NoKWAgdG8gYHU2NGAgYmVmb3JlIGFkZGluZyB0aGUgcGFja2V0IGxlbmd0aCwgYHFkaXNjX3BrdF9sZW4oc2tiKWAuIFRoaXMgaXMgY2xlYXJseSBhaW1lZCBhdCBwcmV2ZW50aW5nIGFuIGludGVnZXIgb3ZlcmZsb3cgd2hlbiB0aGlzIHN1bSBpcyBjb21wYXJlZCBhZ2FpbnN0IGBzY2gtJmd0O2xpbWl0YCBvciBgcS0mZ3Q7bGltaXRgIGluIHRoZSBHUkVEIGVucXVldWUgbG9naWMuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIGlzIGluIGBncmVkX2VucXVldWVgIHdpdGhpbiB0aGUgZmlsZSBgbmV0L3NjaGVkL3NjaF9ncmVkLmNgLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYnV0IGFueSBuZXR3b3JrIHNjaGVkdWxlciBjaGFuZ2UgcmVxdWlyZXMgY2FyZWZ1bCByZXZpZXcuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY2xlYXIgYXR0ZW1wdCB0byBoYXJkZW4gdGhlIEdlbmVyYWxpemVkIFJhbmRvbSBFYXJseSBEZXRlY3Rpb24gaW1wbGVtZW50YXRpb24uCgpJIG5lZWQgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgR1JFRC4gVGhlIGVhc2llc3QgcGF0aCBpcyB0byBzZWFyY2ggZm9yIGBzY2hfZ3JlZC5vYCBpbiB0aGUgYG5ldC9zY2hlZC9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBwcm9jZXNzIG9mIEdSRUQuIFRoaXMgd2lsbCBnaXZlIG1lIGNvbnRleHQgZm9yIGl0cyB1c2FnZSBhbmQgaG93IGl0IGlzIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoX2dyZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL01ha2VmaWxlPTM3PW9iai0kKENPTkZJR19ORVRfU0NIX1JFRClcdCYjNDM7PSBzY2hfcmVkLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTozODpvYmotJChDT05GSUdfTkVUX1NDSF9HUkVEKVx0JiM0Mzs9IHNjaF9ncmVkLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS0zOS1vYmotJChDT05GSUdfTkVUX1NDSF9JTkdSRVNTKVx0JiM0Mzs9IHNjaF9pbmdyZXNzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgbmV0d29ya2luZywgYW5kIGZyYW1pbmcgaXQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpbnZvbHZlcyBgQ09ORklHX05FVF9TQ0hfR1JFRGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gaXRzIGRlZmluaXRpb24uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhpcyBmZWF0dXJlIGJldHRlci4gTGV0IG1lIHF1aWNrbHkganVtcCBpbnRvIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZ28tdG8gbG9jYXRpb24gZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBzY2hlZHVsaW5nLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBORVRfU0NIX0dSRURgIHdpdGhpbiB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0IGRldGFpbHMgZW1lcmdlIHJlZ2FyZGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCByZXZpZXcgaXRzIGRlcGVuZGVuY2llcyBhbmQgZ2VuZXJhbCBkZXNjcmlwdGlvbiB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQsIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBhcmUsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHN1aXRhYmxlIGZvciB0aGUgZ2l2ZW4gYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0dSRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0xNzI9Y29uZmlnIE5FVF9TQ0hfVEFQUklPXG4tLVxubmV0L3NjaGVkL0tjb25maWctMTgzLVxubmV0L3NjaGVkL0tjb25maWc6MTg0OmNvbmZpZyBORVRfU0NIX0dSRURcbm5ldC9zY2hlZC9LY29uZmlnLTE4NS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgTkVUX1NDSF9HUkVEKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBgTkVUX1NDSF9HUkVEYC4uLiB3aGF0JiMzOTtzIGl0cyBkZXBlbmRlbmN5IGZvb3RwcmludCBsb29raW5nIGxpa2U/JiMzNDsgQmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBtYWtpbmcgY2hhbmdlcyBvciBjb25zaWRlcmluZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aGluZyAqcmVsaWVzKiBvbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBuZXR3b3JraW5nIHNjaGVkdWxpbmcgY29tcG9uZW50IGhlcmUsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGludGVyd292ZW4gd2l0aCBhIGZldyBjcnVjaWFsIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IG1lbnRhbGx5IHRyYWNpbmcgdGhhdCBkZXBlbmRlbmN5IGdyYXBoOiBJcyBpdCB0aWVkIHRvIHNwZWNpZmljIHF1ZXVpbmcgZGlzY2lwbGluZXM/IERvZXMgaXQgcmVxdWlyZSBzdXBwb3J0IGZyb20gcGFydGljdWxhciBuZXR3b3JrIGRyaXZlcnMgb3IgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXM/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRoYXQgaXQgaW5oZXJlbnRseSBuZWVkcyB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IEFueXRoaW5nIHJlbGF0ZWQgdG8gUW9TPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgc291cmNlIHRyZWUsIGFuZCB0aGVuIG1heWJlIHNlYXJjaGluZyB0aHJvdWdoIGNvbW1pdCBsb2dzIGZvciBhbnl0aGluZyBtZW50aW9uaW5nIHJlbGF0ZWQgZmVhdHVyZXMgb3Igb3RoZXIgc3Vic3lzdGVtcyB3aGljaCB3ZXJlIG1vZGlmaWVkIGFyb3VuZCB0aGUgc2FtZSB0aW1lLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgaW50ZXJmYWNlcyBpbnZvbHZlZCB0byB1bmRlcnN0YW5kIHRoZSBkb3duc3RyZWFtIGltcGFjdCBvZiBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4NDpcdGNvbmZpZyBORVRfU0NIX0dSRURcbiAxODU6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcJiMzNDtcbiAxODY6XHRcdGhlbHBcbiAxODc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvblxuIDE4ODpcdFx0ICAoR1JFRCkgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtIGZvciBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzXG4gMTg5Olx0XHQgIChzZWUgdGhlIHRvcCBvZiBcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfcmVkLmNcdTAwM2UgZm9yIGRldGFpbHMgYW5kXG4gMTkwOlx0XHQgIHJlZmVyZW5jZXMgYWJvdXQgdGhlIGFsZ29yaXRobSkuXG4gMTkxOlx0XG4gMTkyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxOTM6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ncmVkLlxuIDE5NDpcdFxuIDE5NTpcdGNvbmZpZyBORVRfU0NIX05FVEVNXG4gMTk2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGVtdWxhdG9yIChORVRFTSlcJiMzNDtcbiAxOTc6XHRcdGhlbHBcbiAxOTg6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW11bGF0ZSBuZXR3b3JrIGRlbGF5LCBsb3NzLCBhbmQgcGFja2V0XG4gMTk5Olx0XHQgIHJlLW9yZGVyaW5nLiBUaGlzIGlzIG9mdGVuIHVzZWZ1bCB0byBzaW11bGF0ZSBuZXR3b3JrcyB3aGVuXG4gMjAwOlx0XHQgIHRlc3RpbmcgYXBwbGljYXRpb25zIG9yIHByb3RvY29scy5cbiAyMDE6XHRcbiAyMDI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDIwMzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfbmV0ZW0uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGdyZWRfZW5xdWV1ZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGdyZWRfZW5xdWV1ZWAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jaWVzIHRvIHdvcnJ5IGFib3V0IOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjb2RlLiBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYsICYjMzQ7Z3JlZF9lbnF1ZXVlLCYjMzQ7IGltcGxpZXMgYSByb2xlIGluIHF1ZXVpbmcsIGxpa2VseSB3aXRoaW4gYSBHZW5lcmFsaXplZCBSYW5kb20gRWFybHkgRGV0ZWN0aW9uIChHUkVEKSBjb250ZXh0LgoKTXkgaW1tZWRpYXRlIG5leHQgcXVlc3Rpb24gaXMgd2hldGhlciBgZ3JlZF9lbnF1ZXVlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVzLCB0aGUgc2lnbmF0dXJlIGNsZWFybHkgaW5kaWNhdGVzIGBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKWAuIEJlaW5nIHN0YXRpYyBzdWdnZXN0cyB0aGF0IGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIG1pZ2h0IG1ha2UgdHJhY2tpbmcgaXRzIHVzYWdlIGEgbGl0dGxlIG1vcmUgZm9jdXNlZC4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBTaW5jZSBpdCYjMzk7cyBzdGF0aWMsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0IGRpcmVjdGx5LiBBbHRlcm5hdGl2ZWx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiBpcyBwZXJoYXBzIGFzc2lnbmVkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYSBsYXJnZXIgc3RydWN0dXJlLiBJZiBpdCBpcyBhc3NpZ25lZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIEkgbmVlZCB0byBrbm93IHRoZSBzdHJ1Y3QgaW4gd2hpY2ggaXQmIzM5O3MgYXNzaWduZWQuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB3aGVyZSB0aGF0IHN0cnVjdCBpdHNlbGYgaXMgdXNlZCwgYW5kIGhvdyBgZ3JlZF9lbnF1ZXVlYCBmaXRzIGludG8gdGhlIGdyZWF0ZXIgcGljdHVyZSBvZiBkYXRhIGVucXVldWVpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gd2hhdGV2ZXIgUWRpc2MgdGhpcyBpcyBtYW5hZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3JlZF9lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9ncmVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9ncmVkLmM9MTUyPXN0YXRpYyBib29sIGdyZWRfcGVyX3ZxX3JlZF9mbGFnc191c2VkKHN0cnVjdCBncmVkX3NjaGVkICp0YWJsZSlcbi0tXG5uZXQvc2NoZWQvc2NoX2dyZWQuYy0xNjQtXG5uZXQvc2NoZWQvc2NoX2dyZWQuYzoxNjU6c3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX2dyZWQuYy0xNjYtXHRcdFx0c3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuLS1cbm5ldC9zY2hlZC9zY2hfZ3JlZC5jPTkyMT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBncmVkX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfZ3JlZC5jLTkyMy1cdC5wcml2X3NpemVcdD1cdHNpemVvZihzdHJ1Y3QgZ3JlZF9zY2hlZCksXG5uZXQvc2NoZWQvc2NoX2dyZWQuYzo5MjQ6XHQuZW5xdWV1ZVx0PVx0Z3JlZF9lbnF1ZXVlLFxubmV0L3NjaGVkL3NjaF9ncmVkLmMtOTI1LVx0LmRlcXVldWVcdD1cdGdyZWRfZGVxdWV1ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdSRUQgUWRpc2MgRW5xdWV1ZSBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBHUkVEIHFkaXNjLCBhbmQgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBlbnF1ZXVpbmcgcGFja2V0cyBpcyBjbGVhcmx5IGFzc2lnbmVkIHRvIGBncmVkX3FkaXNjX29wcy5lbnF1ZXVlYC4gVGhhdCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgZ3JlZF9xZGlzY19vcHNgIGlzIHJlZ2lzdGVyZWQgdXNpbmcgYHJlZ2lzdGVyX3FkaXNjKCZhbXA7Z3JlZF9xZGlzY19vcHMpYC4gU28sIGBncmVkX2VucXVldWVgIGlzIHRoZSBmdW5jdGlvbiB3ZSB3YW50LgoKV2FpdCwgbm93IEkgcmVtZW1iZXIgdGhlIHN0YXRpYyB2cy4gbm9uLXN0YXRpYyBmdW5jdGlvbiBpc3N1ZS4gU2luY2UgYGdyZWRfZW5xdWV1ZWAgaXMgKnN0YXRpYyosIGl0IG5vcm1hbGx5IHdvdWxkbiYjMzk7dCBiZSBleHBvcnRlZCBhcyBhIHN5bWJvbC4gVGhhdCBjYW4gY29tcGxpY2F0ZSBmdXp6aW5nLCB0aG91Z2ggc3RhdGljIGZ1bmN0aW9ucyAqY2FuKiBiZSBmdXp6ZWQgaWYgdGhleSYjMzk7cmUgbm90IGlubGluZWQuIElkZWFsbHksIHdlIHdhbnQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBBUEkgZW50cnkgcG9pbnRzIHRvIHRoZSBjb2RlLiBIb3dldmVyLCBJIHRoaW5rIGBncmVkX2VucXVldWVgIGdldHMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCBsaWtlbHkgKndvbiYjMzk7dCogYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kLgoKV2FpdCBhIHNlY29uZC4gVGhlIHByb21wdCBtZW50aW9uZWQgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFNpbmNlIGBncmVkX2VucXVldWVgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgKmlzKiBub24taW5saW5lZCwgYW5kIHRoZXJlZm9yZSBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhhdCBzYXRpc2ZpZXMgdGhlIGNyaXRlcmlhLgoKSG93ZXZlciwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHRoZSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIGBncmVkX3FkaXNjX29wc2AsIGp1c3QgdG8gYmUgY29tcGxldGUuIEkgc2hvdWxkIGxvb2sgZm9yIGBncmVkX2luaXRgLCBgZ3JlZF9jaGFuZ2VgLCBgZ3JlZF9kdW1wYCwgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIGFzIG90aGVyIGVudHJ5IHBvaW50cyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gYGdyZWRfcWRpc2Nfb3BzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2dyZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTIxOlx0c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgZ3JlZF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbiA5MjI6XHRcdC5pZFx0XHQ9XHRcJiMzNDtncmVkXCYjMzQ7LFxuIDkyMzpcdFx0LnByaXZfc2l6ZVx0PVx0c2l6ZW9mKHN0cnVjdCBncmVkX3NjaGVkKSxcbiA5MjQ6XHRcdC5lbnF1ZXVlXHQ9XHRncmVkX2VucXVldWUsXG4gOTI1Olx0XHQuZGVxdWV1ZVx0PVx0Z3JlZF9kZXF1ZXVlLFxuIDkyNjpcdFx0LnBlZWtcdFx0PVx0cWRpc2NfcGVla19oZWFkLFxuIDkyNzpcdFx0LmluaXRcdFx0PVx0Z3JlZF9pbml0LFxuIDkyODpcdFx0LnJlc2V0XHRcdD1cdGdyZWRfcmVzZXQsXG4gOTI5Olx0XHQuZGVzdHJveVx0PVx0Z3JlZF9kZXN0cm95LFxuIDkzMDpcdFx0LmNoYW5nZVx0XHQ9XHRncmVkX2NoYW5nZSxcbiA5MzE6XHRcdC5kdW1wXHRcdD1cdGdyZWRfZHVtcCxcbiA5MzI6XHRcdC5vd25lclx0XHQ9XHRUSElTX01PRFVMRSxcbiA5MzM6XHR9O1xuIDkzNDpcdE1PRFVMRV9BTElBU19ORVRfU0NIKFwmIzM0O2dyZWRcJiMzNDspO1xuIDkzNTpcdFxuIDkzNjpcdHN0YXRpYyBpbnQgX19pbml0IGdyZWRfbW9kdWxlX2luaXQodm9pZClcbiA5Mzc6XHR7XG4gOTM4Olx0XHRyZXR1cm4gcmVnaXN0ZXJfcWRpc2MoXHUwMDI2Z3JlZF9xZGlzY19vcHMpO1xuIDkzOTpcdH1cbiA5NDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBgZ3JlZF9lbnF1ZXVlYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5wb2ludGVkIGBncmVkX2VucXVldWVgIGFzIHRoZSBrZXkgZnVuY3Rpb24gZm9yIHRoaXMgYW5hbHlzaXMuIEl0JiMzOTtzIHBlcmZlY3QgYmVjYXVzZSBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQgYW5kLCBjcml0aWNhbGx5LCBpdCYjMzk7cyBub3QgaW5saW5lZCwgd2hpY2ggc2ltcGxpZmllcyB0cmFja2luZyBpdCBkb3duLiBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSwgc28gdGhhdCBrZWVwcyB0aGUgc2NvcGUgcHJldHR5IG1hbmFnZWFibGUuIFdhaXQsIGlzIGBncmVkX2VucXVldWVgIGV2ZW4gc3RhdGljPyBZZXMsIGl0IGlzLCBidXQgdGhhdCYjMzk7cyBhbHJpZ2h0IGJlY2F1c2UgaXQgc2VydmVzIGFzIHRoZSBBUEkgZW50cnkgcG9pbnQgZm9yIHRoZSBxZGlzYyBvcGVyYXRpb25zLCBzbyBpdHMgdXNlIGlzIGNydWNpYWwuIERlZmluaXRlbHkgZ29pbmcgd2l0aCBgZ3JlZF9lbnF1ZXVlYCBhcyBteSBzdGFydGluZyBwb2ludC4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9TQ0hfR1JFRGAuIEkgbmVlZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIHBhcmVudCBjb25maWcgcmVxdWlyZW1lbnRzLiBSaWdodCwgYE5FVF9TQ0hfR1JFRGAgbGl2ZXMgdW5kZXIgYG1lbnVjb25maWcgTkVUX1NDSEVEYC4gR29vZCwgSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgTkVUX1NDSEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWctNS1cbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcbm5ldC9zY2hlZC9LY29uZmlnLTctXHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODAyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBpdCYjMzk7cyBjbGVhciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgc2NoZWR1bGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYE5FVF9TQ0hFRGAgaXMgZGVmaW5pdGVseSBhIGtleSBmYWN0b3IgaGVyZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGFuZCB3aGF0IEkgYXV0b21hdGljYWxseSBiZWdpbiB0byB0aGluayBhYm91dCwgaXMgZGl2aW5nIGludG8gYE5FVF9TQ0hFRGAmIzM5O3MgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgcmVseSBvbiB0aGlzIG1vZHVsZSwgb3Igd2hhdCB0aGlzIG1vZHVsZSByZWxpZXMgb24uIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgYE5FVF9TQ0hFRGAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgYXJjaGl0ZWN0dXJlIGlzIGNydWNpYWwgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zIHRvIHVuZm9sZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvbmZpZ3VyYXRpb246CgoqKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtZW51Y29uZmlnYCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgTkVUX1NDSEVEYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgbmV0d29yayBzY2hlZHVsZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgc2VjdGlvbiBmdWxseSBiZWZvcmUgbW92aW5nIG9uLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmQgb24gYW55IG90aGVyIGZlYXR1cmVzIG9yIHNldHRpbmdzIHdpdGhpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzIG9yIGlmIGVuYWJsaW5nIHRoaXMgb3B0aW9uIGF1dG9tYXRpY2FsbHkgcHVsbHMgaW4gb3RoZXIgcmVsYXRlZCBtb2R1bGVzLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCB0byBhdm9pZCBjb25maWd1cmF0aW9uIGNvbmZsaWN0cyBvciB0byBlbnN1cmUgSSYjMzk7dmUgZW5hYmxlZCBldmVyeXRoaW5nIG5lY2Vzc2FyeSBmb3IgdGhlIHNjaGVkdWxlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBrZXJuZWwgbmV0d29yayBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUX1NDSEVEXG4gICA3Olx0XHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuICAgODpcdFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xuICAxMTpcdFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXG4gIDEyOlx0XHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXG4gIDEzOlx0XHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xuICAxNDpcdFx0ICBcJiMzNDtmYWlybHlcJiMzNDsgaGF2ZSBiZWVuIHByb3Bvc2VkLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxuICAxNzpcdFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cbiAgMTk6XHRcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgMjA6XHRcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTIKCQkJCQkJCW91dHB1dDogMTEzCgkJCQkJCQl0aG91Z2h0czogNDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEdSRUQgUXVldWUgRGlzY2lwbGluZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIHRoZSBHUkVEIHF1ZXVlIGRpc2NpcGxpbmUuIFRoZSBwcm9tcHQgc3RyZXNzZXMgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGFpbWluZyBmb3IgYSBsZXNzIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5OiBgTkVUX1NDSEVEYCBhbmQgYE5FVF9TQ0hfR1JFRGAgc2VlbSB0byBiZSB0aGUgcmVsZXZhbnQgb25lczsgbm8gZGVwZW5kZW5jaWVzIHRoZXJlLgoKTm93LCB0aGUgYnVnIGlzIGRlZmluaXRlbHkgd2l0aGluIGBncmVkX2VucXVldWVgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGF2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucyBsaWtlIHRoaXMgdG8gc2F0aXNmeSB0aGUgcHJvbXB0LiBCdXQsIGlzIGBncmVkX2VucXVldWVgICpyZWFsbHkqIGdlbmVyaWM/IE5vLCBpdOKAmXMgc3BlY2lmaWMgdG8gR1JFRCwgb25seSB1c2VkIHdoZW4gR1JFRCBpcyBjb25maWd1cmVkIGFuZCBhY3RpdmVseSBwcm9jZXNzaW5nIHBhY2tldHMuIFNvLCBpdCYjMzk7cyBub3QgbGlrZSBgX19kZXZfcXVldWVfeG1pdGAgb3IgYGlwX3JjdmAsIHdoaWNoIGFyZSB1YmlxdWl0b3VzIGluIG5ldHdvcmsgcHJvY2Vzc2luZy4KClRoZSBpc3N1ZSBpcyB0aGF0IGlmIEkgKmRvbiYjMzk7dCogZnV6eiBgZ3JlZF9lbnF1ZXVlYCwgSSBtaWdodCBjb21wbGV0ZWx5IG1pc3MgdGhlIG92ZXJmbG93IHRoYXQgdGhlIHBhdGNoIGZpeGVzLiBBbmQsIHRvIHRyaWdnZXIgdGhlIG92ZXJmbG93LCBwYWNrZXRzIG5lZWQgdG8gYmUgZW5xdWV1ZWQuIFRodXMsIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGluY2x1ZGUgYGdyZWRfZW5xdWV1ZWAuIFRvIG1ha2Ugc3VyZSB0aGUgcWRpc2MgaXMgcHJvcGVybHkgc2V0IHVwLCBhbmQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgb2YgdGhlIGZ1enppbmcsIEkmIzM5O2xsIGFsc28gaW5jbHVkZSBgZ3JlZF9jaGFuZ2VgIGFuZCBgZ3JlZF9pbml0YC4gVGhlc2UgY29udHJvbC1wYXRoIGZ1bmN0aW9ucyBzaG91bGQgaGVscCB0byBnZXQgdGhlIEdSRUQgcWRpc2MgaW5pdGlhbGl6ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBpbmNyZWFzaW5nIHRoZSBjb3ZlcmFnZS4KCkxvb2tpbmcgYmFjayBhdCB0aGUgcGF0Y2g6CmBgYGMKLQkJCWlmIChsaWtlbHkoc2NoLSZndDtxc3RhdHMuYmFja2xvZyAmIzQzOyBxZGlzY19wa3RfbGVuKHNrYikgJmx0Oz0KJiM0MzsJCQlpZiAobGlrZWx5KCh1NjQpc2NoLSZndDtxc3RhdHMuYmFja2xvZyAmIzQzOyBxZGlzY19wa3RfbGVuKHNrYikgJmx0Oz0KIAkJCQkJc2NoLSZndDtsaW1pdCkpCmBgYApUaGF0JiMzOTtzIGEgZGlyZWN0IGZ1bmN0aW9uYWwgZml4IGZvciB0aGUgb3ZlcmZsb3csIHNvIGl0IGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBhcHByb2FjaDoKCiogICBDb25maWdzOiBgTkVUX1NDSEVEYCwgYE5FVF9TQ0hfR1JFRGAKKiAgIEZvY3VzIHN5bWJvbHM6IGBncmVkX2VucXVldWVgLCBgZ3JlZF9jaGFuZ2VgLCBgZ3JlZF9pbml0YAoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9HUkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3JlZF9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2dyZWRfY2hhbmdlJiMzNDssCiAgICAmIzM0O2dyZWRfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBHUkVEIHFkaXNjIGVucXVldWUgZnVuY3Rpb24gYnkgY2FzdGluZyB0aGUgYmFja2xvZyB0byB1NjQgYmVmb3JlIGFkZGluZyB0aGUgcGFja2V0IGxlbmd0aC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfR1JFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dyZWRfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtncmVkX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtncmVkX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgR1JFRCBxZGlzYyBlbnF1ZXVlIGZ1bmN0aW9uIGJ5IGNhc3RpbmcgdGhlIGJhY2tsb2cgdG8gdTY0IGJlZm9yZSBhZGRpbmcgdGhlIHBhY2tldCBsZW5ndGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBidWcgaW4gYGdyZWRfZW5xdWV1ZWAgYnkgY2FzdGluZyBgc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgYGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpYCB0byBgdTY0YCBiZWZvcmUgYWRkaW5nIGBxZGlzY19wa3RfbGVuKHNrYilgLiBUaGlzIHByZXZlbnRzIHRoZSBzdW0gZnJvbSB3cmFwcGluZyBhcm91bmQgYW5kIGluY29ycmVjdGx5IGJ5cGFzc2luZyB0aGUgcXVldWUgbGltaXQgY2hlY2sgKGBcdTAwM2M9IHNjaC1cdTAwM2VsaW1pdGApLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBxdWV1ZSBsaW1pdCBiZWluZyBleGNlZWRlZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI1ODk3NmJmYjFhZDU5NmVjN2UyM2YzNWFlOGYyYTk0MjY3NzQ5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDkgMDk6NTI6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dyZWQuYyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jCmluZGV4IGZjYzFhNGMwMzYzNjIuLmYwNGY0MjVjNmM0NDkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ3JlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jCkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHN0YXRpYyBpbnQgZ3JlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLAogCQkJICogaWYgbm8gZGVmYXVsdCBEUCBoYXMgYmVlbiBjb25maWd1cmVkLiBUaGlzCiAJCQkgKiBhbGxvd3MgZm9yIERQIGZsb3dzIHRvIGJlIGxlZnQgdW50b3VjaGVkLgogCQkJICovCi0JCQlpZiAobGlrZWx5KHNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2cgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpICZsdDs9CiYjNDM7CQkJaWYgKGxpa2VseSgodTY0KXNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2cgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpICZsdDs9CiAJCQkJCXNjaC0mZ3Q7bGltaXQpKQogCQkJCXJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpOwogCQkJZWxzZQpAQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpICYjNDM7IHFkaXNjX3BrdF9sZW4oc2tiKSAmbHQ7PSBxLSZndDtsaW1pdCkgewomIzQzOwlpZiAoKHU2NClncmVkX2JhY2tsb2codCwgcSwgc2NoKSAmIzQzOyBxZGlzY19wa3RfbGVuKHNrYikgJmx0Oz0gcS0mZ3Q7bGltaXQpIHsKIAkJcS0mZ3Q7YmFja2xvZyAmIzQzOz0gcWRpc2NfcGt0X2xlbihza2IpOwogCQlyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcyCgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDYxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdSRUQgUXVldWVpbmcgRGlzY2lwbGluZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9zY2hfZ3JlZC5jYCwgYW5kIGl0JiMzOTtzIG1ha2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBmaXggaXMgY2FzdGluZyBgc2NoLSZndDtxc3RhdHMuYmFja2xvZ2AgYW5kIHRoZSByZXN1bHQgb2YgYGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpYCB0byBgdTY0YCBiZWZvcmUgYWRkaW5nIGBxZGlzY19wa3RfbGVuKHNrYilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgaW50ZWdlciBvdmVyZmxvdyBwcmV2ZW50aW9uISYjMzQ7IFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFja2V0IHNpemVzIGFuZCBxdWV1ZSBiYWNrbG9ncywgd2hpY2ggY2FuIGFkZCB1cCwgYW5kIGlmIHdlJiMzOTtyZSBub3QgY2FyZWZ1bCwgd2UgY2FuIGVuZCB1cCB3aXRoIGEgd3JhcC1hcm91bmQuCgpNeSBmaXJzdCBjaGVjayB3YXMgbWFraW5nIHN1cmUgSSB1bmRlcnN0b29kIHRoZSB0eXBlcyBpbnZvbHZlZCwgYmVjYXVzZSB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHZ1bG5lcmFiaWxpdHkuIEkgZG91YmxlLWNoZWNrZWQgdGhlIGRlZmluaXRpb24gb2YgYHNjaC0mZ3Q7bGltaXRgIChpdCYjMzk7cyBhIGB1MzJgKSwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLgoKVGhlIGxvZ2ljIGhlcmUgaXMgcHJldHR5IGNsZWFyOiB3aXRob3V0IHRoZSBgdTY0YCBjYXN0LCB0aGUgYHUzMmAgYWRkaXRpb24gb2YgdGhlIGJhY2tsb2cgYW5kIHBhY2tldCBsZW5ndGggY291bGQgb3ZlcmZsb3csIHdyYXBwaW5nIGFyb3VuZCB0byBhIHNtYWxsIHZhbHVlLiBUaGF0IG1lYW5zIHdlJiMzOTtkIGJ5cGFzcyB0aGUgcXVldWUgbGltaXQuIFdpdGggdGhlIGNhc3QsIHRoZSBzdW0gaXMgZXZhbHVhdGVkIGFzIGEgYHU2NGAsIHNvIHRoYXQgd3JhcC1hcm91bmQgaXMgcHJldmVudGVkLiBUaGUgY29tcGFyaXNvbiBhZ2FpbnN0IHRoZSBgdTMyYCBsaW1pdCBzdGlsbCB3b3JrcyBhcyBpbnRlbmRlZC4gVGhpcyBlbnN1cmVzIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUuIEl0JiMzOTtzIGEgbG9naWMgYnVnIGFuZCBhbiBpbnRlZ2VyIG92ZXJmbG93IGZpeCwgcGxhaW4gYW5kIHNpbXBsZS4KCk5vdywgbXkgbWluZCBuYXR1cmFsbHkgZ29lcyB0byBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBzbyBJIHF1aWNrbHkgYXNzZXNzIGlmIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhcyBhbnkgcm9sZSBoZXJlLiBCdXQgbm8sIHRoaXMgaXMgKnB1cmVseSogYWJvdXQgaW50ZWdlciBvdmVyZmxvdyBhbmQgcXVldWUgbGltaXRzLiBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBpcyB0aGUgdG9vbCB0aGF0IGNhbiBjYXRjaCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBLQVNBTiAqbWlnaHQqIGNhdGNoIGFuIG92ZXJmbG93IGlmIHRoZSBpbmNvcnJlY3QgbGltaXQgY2hlY2sgbGVhZHMgdG8gYSBtZW1vcnkgY29ycnVwdGlvbiwgYnV0IEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLgoKSSBkb3VibGUtY2hlY2tlZDogYHNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2dgIGlzIGB1MzJgLCBgcWRpc2NfcGt0X2xlbihza2IpYCBpcyBgdTMyYCwgdGhlaXIgc3VtICp3aWxsKiBvdmVyZmxvdywgaWYgbm90IGNhc3QgdG8gYHU2NGAgZmlyc3QuCgpTbywgaW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBhbiBpbXBvcnRhbnQgaW50ZWdlciBvdmVyZmxvdyBmaXgsIGFuZCBpdCBoYXMgbm8gY29ubmVjdGlvbiB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIGl0JiMzOTtzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBidWcgaW4gYGdyZWRfZW5xdWV1ZWAgYnkgY2FzdGluZyBgc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgYGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpYCB0byBgdTY0YCBiZWZvcmUgYWRkaW5nIGBxZGlzY19wa3RfbGVuKHNrYilgLiBUaGlzIHByZXZlbnRzIHRoZSBzdW0gZnJvbSB3cmFwcGluZyBhcm91bmQgYW5kIGluY29ycmVjdGx5IGJ5cGFzc2luZyB0aGUgcXVldWUgbGltaXQgY2hlY2sgKGBcdTAwM2M9IHNjaC1cdTAwM2VsaW1pdGApLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBxdWV1ZSBsaW1pdCBiZWluZyBleGNlZWRlZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgYnVnIGluIGBncmVkX2VucXVldWVgIGJ5IGNhc3RpbmcgYHNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZ2AgYW5kIGBncmVkX2JhY2tsb2codCwgcSwgc2NoKWAgdG8gYHU2NGAgYmVmb3JlIGFkZGluZyBgcWRpc2NfcGt0X2xlbihza2IpYC4gVGhpcyBwcmV2ZW50cyB0aGUgc3VtIGZyb20gd3JhcHBpbmcgYXJvdW5kIGFuZCBpbmNvcnJlY3RseSBieXBhc3NpbmcgdGhlIHF1ZXVlIGxpbWl0IGNoZWNrIChgXHUwMDNjPSBzY2gtXHUwMDNlbGltaXRgKS4gVGhpcyBpcyBhIGxvZ2ljL2ludGVnZXIgb3ZlcmZsb3cgZml4IHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgcXVldWUgbGltaXQgYmVpbmcgZXhjZWVkZWQgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA5OjUyOjQ5LjA4ODM4OTIyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NzEwMDY4Njg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfR1JFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdyZWRfZW5xdWV1ZVwiLFxuICAgIFwiZ3JlZF9jaGFuZ2VcIixcbiAgICBcImdyZWRfaW5pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBidWcgaW4gYGdyZWRfZW5xdWV1ZWAgYnkgY2FzdGluZyBgc2NoLVxcdTAwM2Vxc3RhdHMuYmFja2xvZ2AgYW5kIGBncmVkX2JhY2tsb2codCwgcSwgc2NoKWAgdG8gYHU2NGAgYmVmb3JlIGFkZGluZyBgcWRpc2NfcGt0X2xlbihza2IpYC4gVGhpcyBwcmV2ZW50cyB0aGUgc3VtIGZyb20gd3JhcHBpbmcgYXJvdW5kIGFuZCBpbmNvcnJlY3RseSBieXBhc3NpbmcgdGhlIHF1ZXVlIGxpbWl0IGNoZWNrIChgXFx1MDAzYz0gc2NoLVxcdTAwM2VsaW1pdGApLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBxdWV1ZSBsaW1pdCBiZWluZyBleGNlZWRlZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBHUkVEIHFkaXNjIGVucXVldWUgZnVuY3Rpb24gYnkgY2FzdGluZyB0aGUgYmFja2xvZyB0byB1NjQgYmVmb3JlIGFkZGluZyB0aGUgcGFja2V0IGxlbmd0aC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDk6NTI6NDkuMDg4Mzk1NTA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc2OTUyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MjU4OTc2YmZiMWFkNTk2ZWM3ZTIzZjM1YWU4ZjJhOTQyNjc3NDk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDkgMDk6NTI6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9ncmVkLmMgYi9uZXQvc2NoZWQvc2NoX2dyZWQuY1xcbmluZGV4IGZjYzFhNGMwMzYzNjIuLmYwNGY0MjVjNmM0NDkgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9ncmVkLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX2dyZWQuY1xcbkBAIC0xNzksNyArMTc5LDcgQEAgc3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIFxcdFxcdFxcdCAqIGlmIG5vIGRlZmF1bHQgRFAgaGFzIGJlZW4gY29uZmlndXJlZC4gVGhpc1xcbiBcXHRcXHRcXHQgKiBhbGxvd3MgZm9yIERQIGZsb3dzIHRvIGJlIGxlZnQgdW50b3VjaGVkLlxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKGxpa2VseShzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nICsgcWRpc2NfcGt0X2xlbihza2IpIFxcdTAwM2M9XFxuK1xcdFxcdFxcdGlmIChsaWtlbHkoKHU2NClzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nICsgcWRpc2NfcGt0X2xlbihza2IpIFxcdTAwM2M9XFxuIFxcdFxcdFxcdFxcdFxcdHNjaC1cXHUwMDNlbGltaXQpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaCkgKyBxZGlzY19wa3RfbGVuKHNrYikgXFx1MDAzYz0gcS1cXHUwMDNlbGltaXQpIHtcXG4rXFx0aWYgKCh1NjQpZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaCkgKyBxZGlzY19wa3RfbGVuKHNrYikgXFx1MDAzYz0gcS1cXHUwMDNlbGltaXQpIHtcXG4gXFx0XFx0cS1cXHUwMDNlYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7XFxuIFxcdFxcdHJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA5OjUyOjQ5LjUzNjgxNzk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTU0MzE2ODA1NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9HUkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3JlZF9lbnF1ZXVlXCIsXG4gICAgXCJncmVkX2NoYW5nZVwiLFxuICAgIFwiZ3JlZF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgR1JFRCBxZGlzYyBlbnF1ZXVlIGZ1bmN0aW9uIGJ5IGNhc3RpbmcgdGhlIGJhY2tsb2cgdG8gdTY0IGJlZm9yZSBhZGRpbmcgdGhlIHBhY2tldCBsZW5ndGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUyNTg5NzZiZmIxYWQ1OTZlYzdlMjNmMzVhZThmMmE5NDI2Nzc0OTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyA5IDA5OjUyOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9ncmVkLmMgYi9uZXQvc2NoZWQvc2NoX2dyZWQuY1xuaW5kZXggZmNjMWE0YzAzNjM2Mi4uZjA0ZjQyNWM2YzQ0OSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZ3JlZC5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2dyZWQuY1xuQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiBcdFx0XHQgKiBpZiBubyBkZWZhdWx0IERQIGhhcyBiZWVuIGNvbmZpZ3VyZWQuIFRoaXNcbiBcdFx0XHQgKiBhbGxvd3MgZm9yIERQIGZsb3dzIHRvIGJlIGxlZnQgdW50b3VjaGVkLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmIChsaWtlbHkoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nICsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz1cbitcdFx0XHRpZiAobGlrZWx5KCh1NjQpc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nICsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz1cbiBcdFx0XHRcdFx0c2NoLVx1MDAzZWxpbWl0KSlcbiBcdFx0XHRcdHJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpO1xuIFx0XHRcdGVsc2VcbkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpICsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz0gcS1cdTAwM2VsaW1pdCkge1xuK1x0aWYgKCh1NjQpZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaCkgKyBxZGlzY19wa3RfbGVuKHNrYikgXHUwMDNjPSBxLVx1MDAzZWxpbWl0KSB7XG4gXHRcdHEtXHUwMDNlYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7XG4gXHRcdHJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDk6NTI6NDkuNTM2ODE5MTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjU1Mjg3OTkwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgR1JFRCBQYXRjaCBmb3IgUG90ZW50aWFsIE92ZXJmbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvc2NoZWQvc2NoX2dyZWQuY2AuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWUsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgYmFja2xvZyBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIEdSRUQgcXVldWluZyBkaXNjaXBsaW5lLiBUaGUgY29yZSBvZiB0aGUgZml4IGlzIGEgdHlwZSBjYXN0OyB0aGV5J3JlIGNvbnZlcnRpbmcgYm90aCBgc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgdGhlIHJlc3VsdCBvZiBgZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaClgIHRvIGB1NjRgIGJlZm9yZSBhZGRpbmcgdGhlIHBhY2tldCBsZW5ndGgsIGBxZGlzY19wa3RfbGVuKHNrYilgLiBUaGlzIGlzIGNsZWFybHkgYWltZWQgYXQgcHJldmVudGluZyBhbiBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gdGhpcyBzdW0gaXMgY29tcGFyZWQgYWdhaW5zdCBgc2NoLVx1MDAzZWxpbWl0YCBvciBgcS1cdTAwM2VsaW1pdGAgaW4gdGhlIEdSRUQgZW5xdWV1ZSBsb2dpYy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBgZ3JlZF9lbnF1ZXVlYCB3aXRoaW4gdGhlIGZpbGUgYG5ldC9zY2hlZC9zY2hfZ3JlZC5jYC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIGJ1dCBhbnkgbmV0d29yayBzY2hlZHVsZXIgY2hhbmdlIHJlcXVpcmVzIGNhcmVmdWwgcmV2aWV3LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY2xlYXIgYXR0ZW1wdCB0byBoYXJkZW4gdGhlIEdlbmVyYWxpemVkIFJhbmRvbSBFYXJseSBEZXRlY3Rpb24gaW1wbGVtZW50YXRpb24uXG5cbkkgbmVlZCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBHUkVELiBUaGUgZWFzaWVzdCBwYXRoIGlzIHRvIHNlYXJjaCBmb3IgYHNjaF9ncmVkLm9gIGluIHRoZSBgbmV0L3NjaGVkL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3Mgb2YgR1JFRC4gVGhpcyB3aWxsIGdpdmUgbWUgY29udGV4dCBmb3IgaXRzIHVzYWdlIGFuZCBob3cgaXQgaXMgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA5OjU2OjM1LjA2NTYyMTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2NjQyNDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjaF9ncmVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9Mzc9b2JqLSQoQ09ORklHX05FVF9TQ0hfUkVEKVxcdCs9IHNjaF9yZWQub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTozODpvYmotJChDT05GSUdfTkVUX1NDSF9HUkVEKVxcdCs9IHNjaF9ncmVkLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtMzktb2JqLSQoQ09ORklHX05FVF9TQ0hfSU5HUkVTUylcXHQrPSBzY2hfaW5ncmVzcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA5OjU2OjM1LjQ3MjI3NTM2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDAzNDQ5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmtpbmcsIGFuZCBmcmFtaW5nIGl0IGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGludm9sdmVzIGBDT05GSUdfTkVUX1NDSF9HUkVEYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgZGVmaW5pdGlvbi4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcyB0byB1bmRlcnN0YW5kIHRoaXMgZmVhdHVyZSBiZXR0ZXIuIExldCBtZSBxdWlja2x5IGp1bXAgaW50byB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gbG9jYXRpb24gZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBzY2hlZHVsaW5nLiBJJ2xsIHNlYXJjaCBmb3IgYE5FVF9TQ0hfR1JFRGAgd2l0aGluIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgZGV0YWlscyBlbWVyZ2UgcmVnYXJkaW5nIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24uIEZyb20gdGhlcmUsIEknbGwgcmV2aWV3IGl0cyBkZXBlbmRlbmNpZXMgYW5kIGdlbmVyYWwgZGVzY3JpcHRpb24gdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYXJlLCBhbmQgd2hldGhlciBpdCdzIHN1aXRhYmxlIGZvciB0aGUgZ2l2ZW4gYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDk6NTY6MzkuMDcyNjIzNTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNjc4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfR1JFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0xNzI9Y29uZmlnIE5FVF9TQ0hfVEFQUklPXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xODMtXFxubmV0L3NjaGVkL0tjb25maWc6MTg0OmNvbmZpZyBORVRfU0NIX0dSRURcXG5uZXQvc2NoZWQvS2NvbmZpZy0xODUtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA5OjU2OjM5LjExNzc5ODUwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTMzNjQxNDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgTkVUX1NDSF9HUkVEKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYE5FVF9TQ0hfR1JFRGAuLi4gd2hhdCdzIGl0cyBkZXBlbmRlbmN5IGZvb3RwcmludCBsb29raW5nIGxpa2U/XCIgQmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBtYWtpbmcgY2hhbmdlcyBvciBjb25zaWRlcmluZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aGluZyAqcmVsaWVzKiBvbi4gV2UncmUgdGFsa2luZyBhYm91dCBhIG5ldHdvcmtpbmcgc2NoZWR1bGluZyBjb21wb25lbnQgaGVyZSwgc28gaXQncyBwcm9iYWJseSBpbnRlcndvdmVuIHdpdGggYSBmZXcgY3J1Y2lhbCBrZXJuZWwgc3Vic3lzdGVtcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IG1lbnRhbGx5IHRyYWNpbmcgdGhhdCBkZXBlbmRlbmN5IGdyYXBoOiBJcyBpdCB0aWVkIHRvIHNwZWNpZmljIHF1ZXVpbmcgZGlzY2lwbGluZXM/IERvZXMgaXQgcmVxdWlyZSBzdXBwb3J0IGZyb20gcGFydGljdWxhciBuZXR3b3JrIGRyaXZlcnMgb3IgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXM/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRoYXQgaXQgaW5oZXJlbnRseSBuZWVkcyB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IEFueXRoaW5nIHJlbGF0ZWQgdG8gUW9TPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBzb3VyY2UgdHJlZSwgYW5kIHRoZW4gbWF5YmUgc2VhcmNoaW5nIHRocm91Z2ggY29tbWl0IGxvZ3MgZm9yIGFueXRoaW5nIG1lbnRpb25pbmcgcmVsYXRlZCBmZWF0dXJlcyBvciBvdGhlciBzdWJzeXN0ZW1zIHdoaWNoIHdlcmUgbW9kaWZpZWQgYXJvdW5kIHRoZSBzYW1lIHRpbWUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBpbnRlcmZhY2VzIGludm9sdmVkIHRvIHVuZGVyc3RhbmQgdGhlIGRvd25zdHJlYW0gaW1wYWN0IG9mIG1vZGlmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMDowMToyNC40NTQyMTY0MTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTg0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTg0OlxcdGNvbmZpZyBORVRfU0NIX0dSRURcXG4gMTg1OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFJhbmRvbSBFYXJseSBEZXRlY3Rpb24gKEdSRUQpXFxcIlxcbiAxODY6XFx0XFx0aGVscFxcbiAxODc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgR2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uXFxuIDE4ODpcXHRcXHQgIChHUkVEKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0gZm9yIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXNcXG4gMTg5OlxcdFxcdCAgKHNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfcmVkLmNcXHUwMDNlIGZvciBkZXRhaWxzIGFuZFxcbiAxOTA6XFx0XFx0ICByZWZlcmVuY2VzIGFib3V0IHRoZSBhbGdvcml0aG0pLlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gMTkzOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ncmVkLlxcbiAxOTQ6XFx0XFxuIDE5NTpcXHRjb25maWcgTkVUX1NDSF9ORVRFTVxcbiAxOTY6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgZW11bGF0b3IgKE5FVEVNKVxcXCJcXG4gMTk3OlxcdFxcdGhlbHBcXG4gMTk4OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW11bGF0ZSBuZXR3b3JrIGRlbGF5LCBsb3NzLCBhbmQgcGFja2V0XFxuIDE5OTpcXHRcXHQgIHJlLW9yZGVyaW5nLiBUaGlzIGlzIG9mdGVuIHVzZWZ1bCB0byBzaW11bGF0ZSBuZXR3b3JrcyB3aGVuXFxuIDIwMDpcXHRcXHQgIHRlc3RpbmcgYXBwbGljYXRpb25zIG9yIHByb3RvY29scy5cXG4gMjAxOlxcdFxcbiAyMDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDIwMzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9uZXRlbS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDE6MjQuNDU0MzgyMzc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyNjgyNDczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBncmVkX2VucXVldWVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZ3JlZF9lbnF1ZXVlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdG8gd29ycnkgYWJvdXQg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29kZS4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLCBcImdyZWRfZW5xdWV1ZSxcIiBpbXBsaWVzIGEgcm9sZSBpbiBxdWV1aW5nLCBsaWtlbHkgd2l0aGluIGEgR2VuZXJhbGl6ZWQgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRCkgY29udGV4dC5cblxuTXkgaW1tZWRpYXRlIG5leHQgcXVlc3Rpb24gaXMgd2hldGhlciBgZ3JlZF9lbnF1ZXVlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVzLCB0aGUgc2lnbmF0dXJlIGNsZWFybHkgaW5kaWNhdGVzIGBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKWAuIEJlaW5nIHN0YXRpYyBzdWdnZXN0cyB0aGF0IGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIG1pZ2h0IG1ha2UgdHJhY2tpbmcgaXRzIHVzYWdlIGEgbGl0dGxlIG1vcmUgZm9jdXNlZC5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIFNpbmNlIGl0J3Mgc3RhdGljLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBpdCBkaXJlY3RseS4gQWx0ZXJuYXRpdmVseSwgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiBpcyBwZXJoYXBzIGFzc2lnbmVkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYSBsYXJnZXIgc3RydWN0dXJlLiBJZiBpdCBpcyBhc3NpZ25lZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIEkgbmVlZCB0byBrbm93IHRoZSBzdHJ1Y3QgaW4gd2hpY2ggaXQncyBhc3NpZ25lZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIHRoYXQgc3RydWN0IGl0c2VsZiBpcyB1c2VkLCBhbmQgaG93IGBncmVkX2VucXVldWVgIGZpdHMgaW50byB0aGUgZ3JlYXRlciBwaWN0dXJlIG9mIGRhdGEgZW5xdWV1ZWluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB3aGF0ZXZlciBRZGlzYyB0aGlzIGlzIG1hbmFnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzA4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMDowMToyOS44ODEyMDk5MjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTgwOTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJncmVkX2VucXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9ncmVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9ncmVkLmM9MTUyPXN0YXRpYyBib29sIGdyZWRfcGVyX3ZxX3JlZF9mbGFnc191c2VkKHN0cnVjdCBncmVkX3NjaGVkICp0YWJsZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ3JlZC5jLTE2NC1cXG5uZXQvc2NoZWQvc2NoX2dyZWQuYzoxNjU6c3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF9ncmVkLmMtMTY2LVxcdFxcdFxcdHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ3JlZC5jPTkyMT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBncmVkX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9ncmVkLmMtOTIzLVxcdC5wcml2X3NpemVcXHQ9XFx0c2l6ZW9mKHN0cnVjdCBncmVkX3NjaGVkKSxcXG5uZXQvc2NoZWQvc2NoX2dyZWQuYzo5MjQ6XFx0LmVucXVldWVcXHQ9XFx0Z3JlZF9lbnF1ZXVlLFxcbm5ldC9zY2hlZC9zY2hfZ3JlZC5jLTkyNS1cXHQuZGVxdWV1ZVxcdD1cXHRncmVkX2RlcXVldWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEwOjAxOjI5Ljk4NzAyMzkzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjI3MzA1MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1JFRCBRZGlzYyBFbnF1ZXVlIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBHUkVEIHFkaXNjLCBhbmQgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBlbnF1ZXVpbmcgcGFja2V0cyBpcyBjbGVhcmx5IGFzc2lnbmVkIHRvIGBncmVkX3FkaXNjX29wcy5lbnF1ZXVlYC4gVGhhdCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgZ3JlZF9xZGlzY19vcHNgIGlzIHJlZ2lzdGVyZWQgdXNpbmcgYHJlZ2lzdGVyX3FkaXNjKFx1MDAyNmdyZWRfcWRpc2Nfb3BzKWAuIFNvLCBgZ3JlZF9lbnF1ZXVlYCBpcyB0aGUgZnVuY3Rpb24gd2Ugd2FudC5cblxuV2FpdCwgbm93IEkgcmVtZW1iZXIgdGhlIHN0YXRpYyB2cy4gbm9uLXN0YXRpYyBmdW5jdGlvbiBpc3N1ZS4gU2luY2UgYGdyZWRfZW5xdWV1ZWAgaXMgKnN0YXRpYyosIGl0IG5vcm1hbGx5IHdvdWxkbid0IGJlIGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaGF0IGNhbiBjb21wbGljYXRlIGZ1enppbmcsIHRob3VnaCBzdGF0aWMgZnVuY3Rpb25zICpjYW4qIGJlIGZ1enplZCBpZiB0aGV5J3JlIG5vdCBpbmxpbmVkLiBJZGVhbGx5LCB3ZSB3YW50IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciB0aGUgQVBJIGVudHJ5IHBvaW50cyB0byB0aGUgY29kZS4gSG93ZXZlciwgSSB0aGluayBgZ3JlZF9lbnF1ZXVlYCBnZXRzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQgbGlrZWx5ICp3b24ndCogYmUgaW5saW5lZC4gVGhhdCdzIGdvb2QuXG5cbldhaXQgYSBzZWNvbmQuIFRoZSBwcm9tcHQgbWVudGlvbmVkIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTaW5jZSBgZ3JlZF9lbnF1ZXVlYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0ICppcyogbm9uLWlubGluZWQsIGFuZCB0aGVyZWZvcmUgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQgc2F0aXNmaWVzIHRoZSBjcml0ZXJpYS5cblxuSG93ZXZlciwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHRoZSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIGBncmVkX3FkaXNjX29wc2AsIGp1c3QgdG8gYmUgY29tcGxldGUuIEkgc2hvdWxkIGxvb2sgZm9yIGBncmVkX2luaXRgLCBgZ3JlZF9jaGFuZ2VgLCBgZ3JlZF9kdW1wYCwgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIGFzIG90aGVyIGVudHJ5IHBvaW50cyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50LiBMZXQncyBzZWUgd2hhdCdzIGluIGBncmVkX3FkaXNjX29wc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDE6MzguNjE0MzMzNjAzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2dyZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MjEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MjE6XFx0c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgZ3JlZF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4gOTIyOlxcdFxcdC5pZFxcdFxcdD1cXHRcXFwiZ3JlZFxcXCIsXFxuIDkyMzpcXHRcXHQucHJpdl9zaXplXFx0PVxcdHNpemVvZihzdHJ1Y3QgZ3JlZF9zY2hlZCksXFxuIDkyNDpcXHRcXHQuZW5xdWV1ZVxcdD1cXHRncmVkX2VucXVldWUsXFxuIDkyNTpcXHRcXHQuZGVxdWV1ZVxcdD1cXHRncmVkX2RlcXVldWUsXFxuIDkyNjpcXHRcXHQucGVla1xcdFxcdD1cXHRxZGlzY19wZWVrX2hlYWQsXFxuIDkyNzpcXHRcXHQuaW5pdFxcdFxcdD1cXHRncmVkX2luaXQsXFxuIDkyODpcXHRcXHQucmVzZXRcXHRcXHQ9XFx0Z3JlZF9yZXNldCxcXG4gOTI5OlxcdFxcdC5kZXN0cm95XFx0PVxcdGdyZWRfZGVzdHJveSxcXG4gOTMwOlxcdFxcdC5jaGFuZ2VcXHRcXHQ9XFx0Z3JlZF9jaGFuZ2UsXFxuIDkzMTpcXHRcXHQuZHVtcFxcdFxcdD1cXHRncmVkX2R1bXAsXFxuIDkzMjpcXHRcXHQub3duZXJcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxuIDkzMzpcXHR9O1xcbiA5MzQ6XFx0TU9EVUxFX0FMSUFTX05FVF9TQ0goXFxcImdyZWRcXFwiKTtcXG4gOTM1OlxcdFxcbiA5MzY6XFx0c3RhdGljIGludCBfX2luaXQgZ3JlZF9tb2R1bGVfaW5pdCh2b2lkKVxcbiA5Mzc6XFx0e1xcbiA5Mzg6XFx0XFx0cmV0dXJuIHJlZ2lzdGVyX3FkaXNjKFxcdTAwMjZncmVkX3FkaXNjX29wcyk7XFxuIDkzOTpcXHR9XFxuIDk0MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDE6MzguNjE0NTI5NjYzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzM3NjU4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gYGdyZWRfZW5xdWV1ZWAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbnBvaW50ZWQgYGdyZWRfZW5xdWV1ZWAgYXMgdGhlIGtleSBmdW5jdGlvbiBmb3IgdGhpcyBhbmFseXNpcy4gSXQncyBwZXJmZWN0IGJlY2F1c2UgaXQncyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQgYW5kLCBjcml0aWNhbGx5LCBpdCdzIG5vdCBpbmxpbmVkLCB3aGljaCBzaW1wbGlmaWVzIHRyYWNraW5nIGl0IGRvd24uIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUsIHNvIHRoYXQga2VlcHMgdGhlIHNjb3BlIHByZXR0eSBtYW5hZ2VhYmxlLiBXYWl0LCBpcyBgZ3JlZF9lbnF1ZXVlYCBldmVuIHN0YXRpYz8gWWVzLCBpdCBpcywgYnV0IHRoYXQncyBhbHJpZ2h0IGJlY2F1c2UgaXQgc2VydmVzIGFzIHRoZSBBUEkgZW50cnkgcG9pbnQgZm9yIHRoZSBxZGlzYyBvcGVyYXRpb25zLCBzbyBpdHMgdXNlIGlzIGNydWNpYWwuIERlZmluaXRlbHkgZ29pbmcgd2l0aCBgZ3JlZF9lbnF1ZXVlYCBhcyBteSBzdGFydGluZyBwb2ludC5cblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgTkVUX1NDSF9HUkVEYC4gSSBuZWVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBwYXJlbnQgY29uZmlnIHJlcXVpcmVtZW50cy4gUmlnaHQsIGBORVRfU0NIX0dSRURgIGxpdmVzIHVuZGVyIGBtZW51Y29uZmlnIE5FVF9TQ0hFRGAuIEdvb2QsIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMDowMTo0My41ODgyOTgyNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3OTQ2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkVUX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnLTUtXFxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxcbm5ldC9zY2hlZC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMDowMTo0My42ODYyNDkxNzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3OTQzMTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5IGZyb20gbXkgcGVyc3BlY3RpdmUsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGl0J3MgY2xlYXIgd2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgc2NoZWR1bGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYE5FVF9TQ0hFRGAgaXMgZGVmaW5pdGVseSBhIGtleSBmYWN0b3IgaGVyZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGFuZCB3aGF0IEkgYXV0b21hdGljYWxseSBiZWdpbiB0byB0aGluayBhYm91dCwgaXMgZGl2aW5nIGludG8gYE5FVF9TQ0hFRGAncyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyByZWx5IG9uIHRoaXMgbW9kdWxlLCBvciB3aGF0IHRoaXMgbW9kdWxlIHJlbGllcyBvbi4gVW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGhvdyBgTkVUX1NDSEVEYCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbmV0d29yayBhcmNoaXRlY3R1cmUgaXMgY3J1Y2lhbCBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMgdG8gdW5mb2xkLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODAyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDE6NTEuNzY1NjgzNjU5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4NjgwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDE6NTEuODc1NTU2OTA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjc4MTkyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvbmZpZ3VyYXRpb246XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0d29yayBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtZW51Y29uZmlnYCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgTkVUX1NDSEVEYC4gUmlnaHQsIHRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBuZXR3b3JrIHNjaGVkdWxlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBzZWN0aW9uIGZ1bGx5IGJlZm9yZSBtb3Zpbmcgb24uIE5vdyB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZCBvbiBhbnkgb3RoZXIgZmVhdHVyZXMgb3Igc2V0dGluZ3Mgd2l0aGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHByZXJlcXVpc2l0ZXMgb3IgaWYgZW5hYmxpbmcgdGhpcyBvcHRpb24gYXV0b21hdGljYWxseSBwdWxscyBpbiBvdGhlciByZWxhdGVkIG1vZHVsZXMuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIHRvIGF2b2lkIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzIG9yIHRvIGVuc3VyZSBJJ3ZlIGVuYWJsZWQgZXZlcnl0aGluZyBuZWNlc3NhcnkgZm9yIHRoZSBzY2hlZHVsZXIgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlIGludG8ga2VybmVsIG5ldHdvcmsgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEwOjAxOjU2LjAwMzM3OTU3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEwOjAxOjU2LjAwMzU3Mjk1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Njg2Mjc2MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEdSRUQgUXVldWUgRGlzY2lwbGluZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyB0aGUgR1JFRCBxdWV1ZSBkaXNjaXBsaW5lLiBUaGUgcHJvbXB0IHN0cmVzc2VzIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBhaW1pbmcgZm9yIGEgbGVzcyBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb24uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5OiBgTkVUX1NDSEVEYCBhbmQgYE5FVF9TQ0hfR1JFRGAgc2VlbSB0byBiZSB0aGUgcmVsZXZhbnQgb25lczsgbm8gZGVwZW5kZW5jaWVzIHRoZXJlLlxuXG5Ob3csIHRoZSBidWcgaXMgZGVmaW5pdGVseSB3aXRoaW4gYGdyZWRfZW5xdWV1ZWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zIGxpa2UgdGhpcyB0byBzYXRpc2Z5IHRoZSBwcm9tcHQuIEJ1dCwgaXMgYGdyZWRfZW5xdWV1ZWAgKnJlYWxseSogZ2VuZXJpYz8gTm8sIGl04oCZcyBzcGVjaWZpYyB0byBHUkVELCBvbmx5IHVzZWQgd2hlbiBHUkVEIGlzIGNvbmZpZ3VyZWQgYW5kIGFjdGl2ZWx5IHByb2Nlc3NpbmcgcGFja2V0cy4gU28sIGl0J3Mgbm90IGxpa2UgYF9fZGV2X3F1ZXVlX3htaXRgIG9yIGBpcF9yY3ZgLCB3aGljaCBhcmUgdWJpcXVpdG91cyBpbiBuZXR3b3JrIHByb2Nlc3NpbmcuXG5cblRoZSBpc3N1ZSBpcyB0aGF0IGlmIEkgKmRvbid0KiBmdXp6IGBncmVkX2VucXVldWVgLCBJIG1pZ2h0IGNvbXBsZXRlbHkgbWlzcyB0aGUgb3ZlcmZsb3cgdGhhdCB0aGUgcGF0Y2ggZml4ZXMuIEFuZCwgdG8gdHJpZ2dlciB0aGUgb3ZlcmZsb3csIHBhY2tldHMgbmVlZCB0byBiZSBlbnF1ZXVlZC4gVGh1cywgaXQncyBjcml0aWNhbCB0byBpbmNsdWRlIGBncmVkX2VucXVldWVgLiBUbyBtYWtlIHN1cmUgdGhlIHFkaXNjIGlzIHByb3Blcmx5IHNldCB1cCwgYW5kIHRvIGJyb2FkZW4gdGhlIHNjb3BlIG9mIHRoZSBmdXp6aW5nLCBJJ2xsIGFsc28gaW5jbHVkZSBgZ3JlZF9jaGFuZ2VgIGFuZCBgZ3JlZF9pbml0YC4gVGhlc2UgY29udHJvbC1wYXRoIGZ1bmN0aW9ucyBzaG91bGQgaGVscCB0byBnZXQgdGhlIEdSRUQgcWRpc2MgaW5pdGlhbGl6ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBpbmNyZWFzaW5nIHRoZSBjb3ZlcmFnZS5cblxuTG9va2luZyBiYWNrIGF0IHRoZSBwYXRjaDpcbmBgYGNcbi1cdFx0XHRpZiAobGlrZWx5KHNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZyArIHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9XG4rXHRcdFx0aWYgKGxpa2VseSgodTY0KXNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZyArIHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9XG4gXHRcdFx0XHRcdHNjaC1cdTAwM2VsaW1pdCkpXG5gYGBcblRoYXQncyBhIGRpcmVjdCBmdW5jdGlvbmFsIGZpeCBmb3IgdGhlIG92ZXJmbG93LCBzbyBpdCBpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBhcHByb2FjaDpcblxuKiAgIENvbmZpZ3M6IGBORVRfU0NIRURgLCBgTkVUX1NDSF9HUkVEYFxuKiAgIEZvY3VzIHN5bWJvbHM6IGBncmVkX2VucXVldWVgLCBgZ3JlZF9jaGFuZ2VgLCBgZ3JlZF9pbml0YFxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU5MiwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMDowMjowMy42ODk4NTEzOTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM3NjY3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9HUkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3JlZF9lbnF1ZXVlXCIsXG4gICAgXCJncmVkX2NoYW5nZVwiLFxuICAgIFwiZ3JlZF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgR1JFRCBxZGlzYyBlbnF1ZXVlIGZ1bmN0aW9uIGJ5IGNhc3RpbmcgdGhlIGJhY2tsb2cgdG8gdTY0IGJlZm9yZSBhZGRpbmcgdGhlIHBhY2tldCBsZW5ndGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0dSRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJncmVkX2VucXVldWVcIixcbiAgICBcImdyZWRfY2hhbmdlXCIsXG4gICAgXCJncmVkX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBHUkVEIHFkaXNjIGVucXVldWUgZnVuY3Rpb24gYnkgY2FzdGluZyB0aGUgYmFja2xvZyB0byB1NjQgYmVmb3JlIGFkZGluZyB0aGUgcGFja2V0IGxlbmd0aC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDI6MDMuODUzNjI5MDI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMzNTQzNjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEwOjAyOjAzLjg1NDc3NjQ3NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjMzNDI4NDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBidWcgaW4gYGdyZWRfZW5xdWV1ZWAgYnkgY2FzdGluZyBgc2NoLVxcdTAwM2Vxc3RhdHMuYmFja2xvZ2AgYW5kIGBncmVkX2JhY2tsb2codCwgcSwgc2NoKWAgdG8gYHU2NGAgYmVmb3JlIGFkZGluZyBgcWRpc2NfcGt0X2xlbihza2IpYC4gVGhpcyBwcmV2ZW50cyB0aGUgc3VtIGZyb20gd3JhcHBpbmcgYXJvdW5kIGFuZCBpbmNvcnJlY3RseSBieXBhc3NpbmcgdGhlIHF1ZXVlIGxpbWl0IGNoZWNrIChgXFx1MDAzYz0gc2NoLVxcdTAwM2VsaW1pdGApLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBxdWV1ZSBsaW1pdCBiZWluZyBleGNlZWRlZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjU4OTc2YmZiMWFkNTk2ZWM3ZTIzZjM1YWU4ZjJhOTQyNjc3NDk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAwOTo1Mjo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ3JlZC5jIGIvbmV0L3NjaGVkL3NjaF9ncmVkLmNcbmluZGV4IGZjYzFhNGMwMzYzNjIuLmYwNGY0MjVjNmM0NDkgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2dyZWQuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9ncmVkLmNcbkBAIC0xNzksNyArMTc5LDcgQEAgc3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdFx0ICogaWYgbm8gZGVmYXVsdCBEUCBoYXMgYmVlbiBjb25maWd1cmVkLiBUaGlzXG4gXHRcdFx0ICogYWxsb3dzIGZvciBEUCBmbG93cyB0byBiZSBsZWZ0IHVudG91Y2hlZC5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAobGlrZWx5KHNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZyArIHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9XG4rXHRcdFx0aWYgKGxpa2VseSgodTY0KXNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZyArIHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9XG4gXHRcdFx0XHRcdHNjaC1cdTAwM2VsaW1pdCkpXG4gXHRcdFx0XHRyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTtcbiBcdFx0XHRlbHNlXG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyBpbnQgZ3JlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmIChncmVkX2JhY2tsb2codCwgcSwgc2NoKSArIHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9IHEtXHUwMDNlbGltaXQpIHtcbitcdGlmICgodTY0KWdyZWRfYmFja2xvZyh0LCBxLCBzY2gpICsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz0gcS1cdTAwM2VsaW1pdCkge1xuIFx0XHRxLVx1MDAzZWJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihza2IpO1xuIFx0XHRyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEwOjAyOjAzLjg1NDc3OTc3NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMzNDI1ODE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdSRUQgUXVldWVpbmcgRGlzY2lwbGluZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvc2NoZWQvc2NoX2dyZWQuY2AsIGFuZCBpdCdzIG1ha2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBmaXggaXMgY2FzdGluZyBgc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgdGhlIHJlc3VsdCBvZiBgZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaClgIHRvIGB1NjRgIGJlZm9yZSBhZGRpbmcgYHFkaXNjX3BrdF9sZW4oc2tiKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFoLCBpbnRlZ2VyIG92ZXJmbG93IHByZXZlbnRpb24hXCIgV2UncmUgZGVhbGluZyB3aXRoIHBhY2tldCBzaXplcyBhbmQgcXVldWUgYmFja2xvZ3MsIHdoaWNoIGNhbiBhZGQgdXAsIGFuZCBpZiB3ZSdyZSBub3QgY2FyZWZ1bCwgd2UgY2FuIGVuZCB1cCB3aXRoIGEgd3JhcC1hcm91bmQuXG5cbk15IGZpcnN0IGNoZWNrIHdhcyBtYWtpbmcgc3VyZSBJIHVuZGVyc3Rvb2QgdGhlIHR5cGVzIGludm9sdmVkLCBiZWNhdXNlIHRoYXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB2dWxuZXJhYmlsaXR5LiBJIGRvdWJsZS1jaGVja2VkIHRoZSBkZWZpbml0aW9uIG9mIGBzY2gtXHUwMDNlbGltaXRgIChpdCdzIGEgYHUzMmApLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIuXG5cblRoZSBsb2dpYyBoZXJlIGlzIHByZXR0eSBjbGVhcjogd2l0aG91dCB0aGUgYHU2NGAgY2FzdCwgdGhlIGB1MzJgIGFkZGl0aW9uIG9mIHRoZSBiYWNrbG9nIGFuZCBwYWNrZXQgbGVuZ3RoIGNvdWxkIG92ZXJmbG93LCB3cmFwcGluZyBhcm91bmQgdG8gYSBzbWFsbCB2YWx1ZS4gVGhhdCBtZWFucyB3ZSdkIGJ5cGFzcyB0aGUgcXVldWUgbGltaXQuIFdpdGggdGhlIGNhc3QsIHRoZSBzdW0gaXMgZXZhbHVhdGVkIGFzIGEgYHU2NGAsIHNvIHRoYXQgd3JhcC1hcm91bmQgaXMgcHJldmVudGVkLiBUaGUgY29tcGFyaXNvbiBhZ2FpbnN0IHRoZSBgdTMyYCBsaW1pdCBzdGlsbCB3b3JrcyBhcyBpbnRlbmRlZC4gVGhpcyBlbnN1cmVzIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUuIEl0J3MgYSBsb2dpYyBidWcgYW5kIGFuIGludGVnZXIgb3ZlcmZsb3cgZml4LCBwbGFpbiBhbmQgc2ltcGxlLlxuXG5Ob3csIG15IG1pbmQgbmF0dXJhbGx5IGdvZXMgdG8gcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc28gSSBxdWlja2x5IGFzc2VzcyBpZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXMgYW55IHJvbGUgaGVyZS4gQnV0IG5vLCB0aGlzIGlzICpwdXJlbHkqIGFib3V0IGludGVnZXIgb3ZlcmZsb3cgYW5kIHF1ZXVlIGxpbWl0cy4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBpcyB0aGUgdG9vbCB0aGF0IGNhbiBjYXRjaCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBLQVNBTiAqbWlnaHQqIGNhdGNoIGFuIG92ZXJmbG93IGlmIHRoZSBpbmNvcnJlY3QgbGltaXQgY2hlY2sgbGVhZHMgdG8gYSBtZW1vcnkgY29ycnVwdGlvbiwgYnV0IEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuXG5cbkkgZG91YmxlLWNoZWNrZWQ6IGBzY2gtXHUwMDNlcXN0YXRzLmJhY2tsb2dgIGlzIGB1MzJgLCBgcWRpc2NfcGt0X2xlbihza2IpYCBpcyBgdTMyYCwgdGhlaXIgc3VtICp3aWxsKiBvdmVyZmxvdywgaWYgbm90IGNhc3QgdG8gYHU2NGAgZmlyc3QuXG5cblNvLCBpbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIGFuIGltcG9ydGFudCBpbnRlZ2VyIG92ZXJmbG93IGZpeCwgYW5kIGl0IGhhcyBubyBjb25uZWN0aW9uIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGJlY2F1c2UgaXQncyBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzIsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDI6MTYuMTg5MDQxMTM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGJ1ZyBpbiBgZ3JlZF9lbnF1ZXVlYCBieSBjYXN0aW5nIGBzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgYGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpYCB0byBgdTY0YCBiZWZvcmUgYWRkaW5nIGBxZGlzY19wa3RfbGVuKHNrYilgLiBUaGlzIHByZXZlbnRzIHRoZSBzdW0gZnJvbSB3cmFwcGluZyBhcm91bmQgYW5kIGluY29ycmVjdGx5IGJ5cGFzc2luZyB0aGUgcXVldWUgbGltaXQgY2hlY2sgKGBcXHUwMDNjPSBzY2gtXFx1MDAzZWxpbWl0YCkuIFRoaXMgaXMgYSBsb2dpYy9pbnRlZ2VyIG92ZXJmbG93IGZpeCB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gcmVzdWx0aW5nIGZyb20gdGhlIHF1ZXVlIGxpbWl0IGJlaW5nIGV4Y2VlZGVkIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgYnVnIGluIGBncmVkX2VucXVldWVgIGJ5IGNhc3RpbmcgYHNjaC1cXHUwMDNlcXN0YXRzLmJhY2tsb2dgIGFuZCBgZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaClgIHRvIGB1NjRgIGJlZm9yZSBhZGRpbmcgYHFkaXNjX3BrdF9sZW4oc2tiKWAuIFRoaXMgcHJldmVudHMgdGhlIHN1bSBmcm9tIHdyYXBwaW5nIGFyb3VuZCBhbmQgaW5jb3JyZWN0bHkgYnlwYXNzaW5nIHRoZSBxdWV1ZSBsaW1pdCBjaGVjayAoYFxcdTAwM2M9IHNjaC1cXHUwMDNlbGltaXRgKS4gVGhpcyBpcyBhIGxvZ2ljL2ludGVnZXIgb3ZlcmZsb3cgZml4IHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgcXVldWUgbGltaXQgYmVpbmcgZXhjZWVkZWQgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowgrb2h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-09 09:32:32 +0000 UTC FinishedAt: 2026-08-09 10:02:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_GRED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_GRED" ], "series_id": "6a39de4c-af73-496d-879d-02b13d2fd105" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gred_enqueue", "gred_change", "gred_init" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA5IDA5OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0dSRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtncmVkX2VucXVldWUmIzM0OywKICAgICYjMzQ7Z3JlZF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7Z3JlZF9pbml0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBidWcgaW4gYGdyZWRfZW5xdWV1ZWAgYnkgY2FzdGluZyBgc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgYGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpYCB0byBgdTY0YCBiZWZvcmUgYWRkaW5nIGBxZGlzY19wa3RfbGVuKHNrYilgLiBUaGlzIHByZXZlbnRzIHRoZSBzdW0gZnJvbSB3cmFwcGluZyBhcm91bmQgYW5kIGluY29ycmVjdGx5IGJ5cGFzc2luZyB0aGUgcXVldWUgbGltaXQgY2hlY2sgKGBcdTAwM2M9IHNjaC1cdTAwM2VsaW1pdGApLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBxdWV1ZSBsaW1pdCBiZWluZyBleGNlZWRlZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgR1JFRCBxZGlzYyBlbnF1ZXVlIGZ1bmN0aW9uIGJ5IGNhc3RpbmcgdGhlIGJhY2tsb2cgdG8gdTY0IGJlZm9yZSBhZGRpbmcgdGhlIHBhY2tldCBsZW5ndGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDk6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MjU4OTc2YmZiMWFkNTk2ZWM3ZTIzZjM1YWU4ZjJhOTQyNjc3NDk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAwOTo1Mjo0OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dyZWQuYyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jXG5pbmRleCBmY2MxYTRjMDM2MzYyLi5mMDRmNDI1YzZjNDQ5IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9ncmVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jXG5AQCAtMTc5LDcgJiM0MzsxNzksNyBAQCBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiBcdFx0XHQgKiBpZiBubyBkZWZhdWx0IERQIGhhcyBiZWVuIGNvbmZpZ3VyZWQuIFRoaXNcbiBcdFx0XHQgKiBhbGxvd3MgZm9yIERQIGZsb3dzIHRvIGJlIGxlZnQgdW50b3VjaGVkLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmIChsaWtlbHkoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nICYjNDM7IHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9XG4mIzQzO1x0XHRcdGlmIChsaWtlbHkoKHU2NClzY2gtXHUwMDNlcXN0YXRzLmJhY2tsb2cgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz1cbiBcdFx0XHRcdFx0c2NoLVx1MDAzZWxpbWl0KSlcbiBcdFx0XHRcdHJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpO1xuIFx0XHRcdGVsc2VcbkBAIC0yNDQsNyAmIzQzOzI0NCw3IEBAIHN0YXRpYyBpbnQgZ3JlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmIChncmVkX2JhY2tsb2codCwgcSwgc2NoKSAmIzQzOyBxZGlzY19wa3RfbGVuKHNrYikgXHUwMDNjPSBxLVx1MDAzZWxpbWl0KSB7XG4mIzQzO1x0aWYgKCh1NjQpZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaCkgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz0gcS1cdTAwM2VsaW1pdCkge1xuIFx0XHRxLVx1MDAzZWJhY2tsb2cgJiM0Mzs9IHFkaXNjX3BrdF9sZW4oc2tiKTtcbiBcdFx0cmV0dXJuIHFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDk6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0dSRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtncmVkX2VucXVldWUmIzM0OywKICAgICYjMzQ7Z3JlZF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7Z3JlZF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIEdSRUQgcWRpc2MgZW5xdWV1ZSBmdW5jdGlvbiBieSBjYXN0aW5nIHRoZSBiYWNrbG9nIHRvIHU2NCBiZWZvcmUgYWRkaW5nIHRoZSBwYWNrZXQgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI1ODk3NmJmYjFhZDU5NmVjN2UyM2YzNWFlOGYyYTk0MjY3NzQ5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDkgMDk6NTI6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dyZWQuYyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jCmluZGV4IGZjYzFhNGMwMzYzNjIuLmYwNGY0MjVjNmM0NDkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ3JlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jCkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHN0YXRpYyBpbnQgZ3JlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLAogCQkJICogaWYgbm8gZGVmYXVsdCBEUCBoYXMgYmVlbiBjb25maWd1cmVkLiBUaGlzCiAJCQkgKiBhbGxvd3MgZm9yIERQIGZsb3dzIHRvIGJlIGxlZnQgdW50b3VjaGVkLgogCQkJICovCi0JCQlpZiAobGlrZWx5KHNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2cgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpICZsdDs9CiYjNDM7CQkJaWYgKGxpa2VseSgodTY0KXNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2cgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpICZsdDs9CiAJCQkJCXNjaC0mZ3Q7bGltaXQpKQogCQkJCXJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpOwogCQkJZWxzZQpAQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpICYjNDM7IHFkaXNjX3BrdF9sZW4oc2tiKSAmbHQ7PSBxLSZndDtsaW1pdCkgewomIzQzOwlpZiAoKHU2NClncmVkX2JhY2tsb2codCwgcSwgc2NoKSAmIzQzOyBxZGlzY19wa3RfbGVuKHNrYikgJmx0Oz0gcS0mZ3Q7bGltaXQpIHsKIAkJcS0mZ3Q7YmFja2xvZyAmIzQzOz0gcWRpc2NfcGt0X2xlbihza2IpOwogCQlyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgR1JFRCBQYXRjaCBmb3IgUG90ZW50aWFsIE92ZXJmbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvc2NoZWQvc2NoX2dyZWQuY2AuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWUsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgYmFja2xvZyBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIEdSRUQgcXVldWluZyBkaXNjaXBsaW5lLiBUaGUgY29yZSBvZiB0aGUgZml4IGlzIGEgdHlwZSBjYXN0OyB0aGV5JiMzOTtyZSBjb252ZXJ0aW5nIGJvdGggYHNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2dgIGFuZCB0aGUgcmVzdWx0IG9mIGBncmVkX2JhY2tsb2codCwgcSwgc2NoKWAgdG8gYHU2NGAgYmVmb3JlIGFkZGluZyB0aGUgcGFja2V0IGxlbmd0aCwgYHFkaXNjX3BrdF9sZW4oc2tiKWAuIFRoaXMgaXMgY2xlYXJseSBhaW1lZCBhdCBwcmV2ZW50aW5nIGFuIGludGVnZXIgb3ZlcmZsb3cgd2hlbiB0aGlzIHN1bSBpcyBjb21wYXJlZCBhZ2FpbnN0IGBzY2gtJmd0O2xpbWl0YCBvciBgcS0mZ3Q7bGltaXRgIGluIHRoZSBHUkVEIGVucXVldWUgbG9naWMuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIGlzIGluIGBncmVkX2VucXVldWVgIHdpdGhpbiB0aGUgZmlsZSBgbmV0L3NjaGVkL3NjaF9ncmVkLmNgLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYnV0IGFueSBuZXR3b3JrIHNjaGVkdWxlciBjaGFuZ2UgcmVxdWlyZXMgY2FyZWZ1bCByZXZpZXcuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY2xlYXIgYXR0ZW1wdCB0byBoYXJkZW4gdGhlIEdlbmVyYWxpemVkIFJhbmRvbSBFYXJseSBEZXRlY3Rpb24gaW1wbGVtZW50YXRpb24uCgpJIG5lZWQgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgR1JFRC4gVGhlIGVhc2llc3QgcGF0aCBpcyB0byBzZWFyY2ggZm9yIGBzY2hfZ3JlZC5vYCBpbiB0aGUgYG5ldC9zY2hlZC9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBwcm9jZXNzIG9mIEdSRUQuIFRoaXMgd2lsbCBnaXZlIG1lIGNvbnRleHQgZm9yIGl0cyB1c2FnZSBhbmQgaG93IGl0IGlzIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoX2dyZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL01ha2VmaWxlPTM3PW9iai0kKENPTkZJR19ORVRfU0NIX1JFRClcdCYjNDM7PSBzY2hfcmVkLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTozODpvYmotJChDT05GSUdfTkVUX1NDSF9HUkVEKVx0JiM0Mzs9IHNjaF9ncmVkLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS0zOS1vYmotJChDT05GSUdfTkVUX1NDSF9JTkdSRVNTKVx0JiM0Mzs9IHNjaF9pbmdyZXNzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgbmV0d29ya2luZywgYW5kIGZyYW1pbmcgaXQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpbnZvbHZlcyBgQ09ORklHX05FVF9TQ0hfR1JFRGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gaXRzIGRlZmluaXRpb24uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhpcyBmZWF0dXJlIGJldHRlci4gTGV0IG1lIHF1aWNrbHkganVtcCBpbnRvIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZ28tdG8gbG9jYXRpb24gZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBzY2hlZHVsaW5nLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBORVRfU0NIX0dSRURgIHdpdGhpbiB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0IGRldGFpbHMgZW1lcmdlIHJlZ2FyZGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCByZXZpZXcgaXRzIGRlcGVuZGVuY2llcyBhbmQgZ2VuZXJhbCBkZXNjcmlwdGlvbiB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQsIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBhcmUsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHN1aXRhYmxlIGZvciB0aGUgZ2l2ZW4gYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0dSRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0xNzI9Y29uZmlnIE5FVF9TQ0hfVEFQUklPXG4tLVxubmV0L3NjaGVkL0tjb25maWctMTgzLVxubmV0L3NjaGVkL0tjb25maWc6MTg0OmNvbmZpZyBORVRfU0NIX0dSRURcbm5ldC9zY2hlZC9LY29uZmlnLTE4NS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgTkVUX1NDSF9HUkVEKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBgTkVUX1NDSF9HUkVEYC4uLiB3aGF0JiMzOTtzIGl0cyBkZXBlbmRlbmN5IGZvb3RwcmludCBsb29raW5nIGxpa2U/JiMzNDsgQmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBtYWtpbmcgY2hhbmdlcyBvciBjb25zaWRlcmluZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aGluZyAqcmVsaWVzKiBvbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBuZXR3b3JraW5nIHNjaGVkdWxpbmcgY29tcG9uZW50IGhlcmUsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGludGVyd292ZW4gd2l0aCBhIGZldyBjcnVjaWFsIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IG1lbnRhbGx5IHRyYWNpbmcgdGhhdCBkZXBlbmRlbmN5IGdyYXBoOiBJcyBpdCB0aWVkIHRvIHNwZWNpZmljIHF1ZXVpbmcgZGlzY2lwbGluZXM/IERvZXMgaXQgcmVxdWlyZSBzdXBwb3J0IGZyb20gcGFydGljdWxhciBuZXR3b3JrIGRyaXZlcnMgb3IgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXM/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRoYXQgaXQgaW5oZXJlbnRseSBuZWVkcyB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IEFueXRoaW5nIHJlbGF0ZWQgdG8gUW9TPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgc291cmNlIHRyZWUsIGFuZCB0aGVuIG1heWJlIHNlYXJjaGluZyB0aHJvdWdoIGNvbW1pdCBsb2dzIGZvciBhbnl0aGluZyBtZW50aW9uaW5nIHJlbGF0ZWQgZmVhdHVyZXMgb3Igb3RoZXIgc3Vic3lzdGVtcyB3aGljaCB3ZXJlIG1vZGlmaWVkIGFyb3VuZCB0aGUgc2FtZSB0aW1lLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgaW50ZXJmYWNlcyBpbnZvbHZlZCB0byB1bmRlcnN0YW5kIHRoZSBkb3duc3RyZWFtIGltcGFjdCBvZiBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4NDpcdGNvbmZpZyBORVRfU0NIX0dSRURcbiAxODU6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcJiMzNDtcbiAxODY6XHRcdGhlbHBcbiAxODc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvblxuIDE4ODpcdFx0ICAoR1JFRCkgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtIGZvciBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzXG4gMTg5Olx0XHQgIChzZWUgdGhlIHRvcCBvZiBcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfcmVkLmNcdTAwM2UgZm9yIGRldGFpbHMgYW5kXG4gMTkwOlx0XHQgIHJlZmVyZW5jZXMgYWJvdXQgdGhlIGFsZ29yaXRobSkuXG4gMTkxOlx0XG4gMTkyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxOTM6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ncmVkLlxuIDE5NDpcdFxuIDE5NTpcdGNvbmZpZyBORVRfU0NIX05FVEVNXG4gMTk2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGVtdWxhdG9yIChORVRFTSlcJiMzNDtcbiAxOTc6XHRcdGhlbHBcbiAxOTg6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW11bGF0ZSBuZXR3b3JrIGRlbGF5LCBsb3NzLCBhbmQgcGFja2V0XG4gMTk5Olx0XHQgIHJlLW9yZGVyaW5nLiBUaGlzIGlzIG9mdGVuIHVzZWZ1bCB0byBzaW11bGF0ZSBuZXR3b3JrcyB3aGVuXG4gMjAwOlx0XHQgIHRlc3RpbmcgYXBwbGljYXRpb25zIG9yIHByb3RvY29scy5cbiAyMDE6XHRcbiAyMDI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDIwMzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfbmV0ZW0uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGdyZWRfZW5xdWV1ZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGdyZWRfZW5xdWV1ZWAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jaWVzIHRvIHdvcnJ5IGFib3V0IOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjb2RlLiBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYsICYjMzQ7Z3JlZF9lbnF1ZXVlLCYjMzQ7IGltcGxpZXMgYSByb2xlIGluIHF1ZXVpbmcsIGxpa2VseSB3aXRoaW4gYSBHZW5lcmFsaXplZCBSYW5kb20gRWFybHkgRGV0ZWN0aW9uIChHUkVEKSBjb250ZXh0LgoKTXkgaW1tZWRpYXRlIG5leHQgcXVlc3Rpb24gaXMgd2hldGhlciBgZ3JlZF9lbnF1ZXVlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVzLCB0aGUgc2lnbmF0dXJlIGNsZWFybHkgaW5kaWNhdGVzIGBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKWAuIEJlaW5nIHN0YXRpYyBzdWdnZXN0cyB0aGF0IGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIG1pZ2h0IG1ha2UgdHJhY2tpbmcgaXRzIHVzYWdlIGEgbGl0dGxlIG1vcmUgZm9jdXNlZC4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBTaW5jZSBpdCYjMzk7cyBzdGF0aWMsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0IGRpcmVjdGx5LiBBbHRlcm5hdGl2ZWx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiBpcyBwZXJoYXBzIGFzc2lnbmVkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYSBsYXJnZXIgc3RydWN0dXJlLiBJZiBpdCBpcyBhc3NpZ25lZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIEkgbmVlZCB0byBrbm93IHRoZSBzdHJ1Y3QgaW4gd2hpY2ggaXQmIzM5O3MgYXNzaWduZWQuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB3aGVyZSB0aGF0IHN0cnVjdCBpdHNlbGYgaXMgdXNlZCwgYW5kIGhvdyBgZ3JlZF9lbnF1ZXVlYCBmaXRzIGludG8gdGhlIGdyZWF0ZXIgcGljdHVyZSBvZiBkYXRhIGVucXVldWVpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gd2hhdGV2ZXIgUWRpc2MgdGhpcyBpcyBtYW5hZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3JlZF9lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9ncmVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9ncmVkLmM9MTUyPXN0YXRpYyBib29sIGdyZWRfcGVyX3ZxX3JlZF9mbGFnc191c2VkKHN0cnVjdCBncmVkX3NjaGVkICp0YWJsZSlcbi0tXG5uZXQvc2NoZWQvc2NoX2dyZWQuYy0xNjQtXG5uZXQvc2NoZWQvc2NoX2dyZWQuYzoxNjU6c3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX2dyZWQuYy0xNjYtXHRcdFx0c3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuLS1cbm5ldC9zY2hlZC9zY2hfZ3JlZC5jPTkyMT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBncmVkX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfZ3JlZC5jLTkyMy1cdC5wcml2X3NpemVcdD1cdHNpemVvZihzdHJ1Y3QgZ3JlZF9zY2hlZCksXG5uZXQvc2NoZWQvc2NoX2dyZWQuYzo5MjQ6XHQuZW5xdWV1ZVx0PVx0Z3JlZF9lbnF1ZXVlLFxubmV0L3NjaGVkL3NjaF9ncmVkLmMtOTI1LVx0LmRlcXVldWVcdD1cdGdyZWRfZGVxdWV1ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdSRUQgUWRpc2MgRW5xdWV1ZSBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBHUkVEIHFkaXNjLCBhbmQgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBlbnF1ZXVpbmcgcGFja2V0cyBpcyBjbGVhcmx5IGFzc2lnbmVkIHRvIGBncmVkX3FkaXNjX29wcy5lbnF1ZXVlYC4gVGhhdCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgZ3JlZF9xZGlzY19vcHNgIGlzIHJlZ2lzdGVyZWQgdXNpbmcgYHJlZ2lzdGVyX3FkaXNjKCZhbXA7Z3JlZF9xZGlzY19vcHMpYC4gU28sIGBncmVkX2VucXVldWVgIGlzIHRoZSBmdW5jdGlvbiB3ZSB3YW50LgoKV2FpdCwgbm93IEkgcmVtZW1iZXIgdGhlIHN0YXRpYyB2cy4gbm9uLXN0YXRpYyBmdW5jdGlvbiBpc3N1ZS4gU2luY2UgYGdyZWRfZW5xdWV1ZWAgaXMgKnN0YXRpYyosIGl0IG5vcm1hbGx5IHdvdWxkbiYjMzk7dCBiZSBleHBvcnRlZCBhcyBhIHN5bWJvbC4gVGhhdCBjYW4gY29tcGxpY2F0ZSBmdXp6aW5nLCB0aG91Z2ggc3RhdGljIGZ1bmN0aW9ucyAqY2FuKiBiZSBmdXp6ZWQgaWYgdGhleSYjMzk7cmUgbm90IGlubGluZWQuIElkZWFsbHksIHdlIHdhbnQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBBUEkgZW50cnkgcG9pbnRzIHRvIHRoZSBjb2RlLiBIb3dldmVyLCBJIHRoaW5rIGBncmVkX2VucXVldWVgIGdldHMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCBsaWtlbHkgKndvbiYjMzk7dCogYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kLgoKV2FpdCBhIHNlY29uZC4gVGhlIHByb21wdCBtZW50aW9uZWQgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFNpbmNlIGBncmVkX2VucXVldWVgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgKmlzKiBub24taW5saW5lZCwgYW5kIHRoZXJlZm9yZSBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhhdCBzYXRpc2ZpZXMgdGhlIGNyaXRlcmlhLgoKSG93ZXZlciwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHRoZSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIGBncmVkX3FkaXNjX29wc2AsIGp1c3QgdG8gYmUgY29tcGxldGUuIEkgc2hvdWxkIGxvb2sgZm9yIGBncmVkX2luaXRgLCBgZ3JlZF9jaGFuZ2VgLCBgZ3JlZF9kdW1wYCwgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIGFzIG90aGVyIGVudHJ5IHBvaW50cyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gYGdyZWRfcWRpc2Nfb3BzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2dyZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTIxOlx0c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgZ3JlZF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbiA5MjI6XHRcdC5pZFx0XHQ9XHRcJiMzNDtncmVkXCYjMzQ7LFxuIDkyMzpcdFx0LnByaXZfc2l6ZVx0PVx0c2l6ZW9mKHN0cnVjdCBncmVkX3NjaGVkKSxcbiA5MjQ6XHRcdC5lbnF1ZXVlXHQ9XHRncmVkX2VucXVldWUsXG4gOTI1Olx0XHQuZGVxdWV1ZVx0PVx0Z3JlZF9kZXF1ZXVlLFxuIDkyNjpcdFx0LnBlZWtcdFx0PVx0cWRpc2NfcGVla19oZWFkLFxuIDkyNzpcdFx0LmluaXRcdFx0PVx0Z3JlZF9pbml0LFxuIDkyODpcdFx0LnJlc2V0XHRcdD1cdGdyZWRfcmVzZXQsXG4gOTI5Olx0XHQuZGVzdHJveVx0PVx0Z3JlZF9kZXN0cm95LFxuIDkzMDpcdFx0LmNoYW5nZVx0XHQ9XHRncmVkX2NoYW5nZSxcbiA5MzE6XHRcdC5kdW1wXHRcdD1cdGdyZWRfZHVtcCxcbiA5MzI6XHRcdC5vd25lclx0XHQ9XHRUSElTX01PRFVMRSxcbiA5MzM6XHR9O1xuIDkzNDpcdE1PRFVMRV9BTElBU19ORVRfU0NIKFwmIzM0O2dyZWRcJiMzNDspO1xuIDkzNTpcdFxuIDkzNjpcdHN0YXRpYyBpbnQgX19pbml0IGdyZWRfbW9kdWxlX2luaXQodm9pZClcbiA5Mzc6XHR7XG4gOTM4Olx0XHRyZXR1cm4gcmVnaXN0ZXJfcWRpc2MoXHUwMDI2Z3JlZF9xZGlzY19vcHMpO1xuIDkzOTpcdH1cbiA5NDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBgZ3JlZF9lbnF1ZXVlYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5wb2ludGVkIGBncmVkX2VucXVldWVgIGFzIHRoZSBrZXkgZnVuY3Rpb24gZm9yIHRoaXMgYW5hbHlzaXMuIEl0JiMzOTtzIHBlcmZlY3QgYmVjYXVzZSBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQgYW5kLCBjcml0aWNhbGx5LCBpdCYjMzk7cyBub3QgaW5saW5lZCwgd2hpY2ggc2ltcGxpZmllcyB0cmFja2luZyBpdCBkb3duLiBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSwgc28gdGhhdCBrZWVwcyB0aGUgc2NvcGUgcHJldHR5IG1hbmFnZWFibGUuIFdhaXQsIGlzIGBncmVkX2VucXVldWVgIGV2ZW4gc3RhdGljPyBZZXMsIGl0IGlzLCBidXQgdGhhdCYjMzk7cyBhbHJpZ2h0IGJlY2F1c2UgaXQgc2VydmVzIGFzIHRoZSBBUEkgZW50cnkgcG9pbnQgZm9yIHRoZSBxZGlzYyBvcGVyYXRpb25zLCBzbyBpdHMgdXNlIGlzIGNydWNpYWwuIERlZmluaXRlbHkgZ29pbmcgd2l0aCBgZ3JlZF9lbnF1ZXVlYCBhcyBteSBzdGFydGluZyBwb2ludC4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9TQ0hfR1JFRGAuIEkgbmVlZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIHBhcmVudCBjb25maWcgcmVxdWlyZW1lbnRzLiBSaWdodCwgYE5FVF9TQ0hfR1JFRGAgbGl2ZXMgdW5kZXIgYG1lbnVjb25maWcgTkVUX1NDSEVEYC4gR29vZCwgSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgTkVUX1NDSEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWctNS1cbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcbm5ldC9zY2hlZC9LY29uZmlnLTctXHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODAyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBpdCYjMzk7cyBjbGVhciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgc2NoZWR1bGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYE5FVF9TQ0hFRGAgaXMgZGVmaW5pdGVseSBhIGtleSBmYWN0b3IgaGVyZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGFuZCB3aGF0IEkgYXV0b21hdGljYWxseSBiZWdpbiB0byB0aGluayBhYm91dCwgaXMgZGl2aW5nIGludG8gYE5FVF9TQ0hFRGAmIzM5O3MgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgcmVseSBvbiB0aGlzIG1vZHVsZSwgb3Igd2hhdCB0aGlzIG1vZHVsZSByZWxpZXMgb24uIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgYE5FVF9TQ0hFRGAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgYXJjaGl0ZWN0dXJlIGlzIGNydWNpYWwgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zIHRvIHVuZm9sZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvbmZpZ3VyYXRpb246CgoqKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtZW51Y29uZmlnYCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgTkVUX1NDSEVEYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgbmV0d29yayBzY2hlZHVsZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgc2VjdGlvbiBmdWxseSBiZWZvcmUgbW92aW5nIG9uLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmQgb24gYW55IG90aGVyIGZlYXR1cmVzIG9yIHNldHRpbmdzIHdpdGhpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzIG9yIGlmIGVuYWJsaW5nIHRoaXMgb3B0aW9uIGF1dG9tYXRpY2FsbHkgcHVsbHMgaW4gb3RoZXIgcmVsYXRlZCBtb2R1bGVzLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCB0byBhdm9pZCBjb25maWd1cmF0aW9uIGNvbmZsaWN0cyBvciB0byBlbnN1cmUgSSYjMzk7dmUgZW5hYmxlZCBldmVyeXRoaW5nIG5lY2Vzc2FyeSBmb3IgdGhlIHNjaGVkdWxlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBrZXJuZWwgbmV0d29yayBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUX1NDSEVEXG4gICA3Olx0XHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuICAgODpcdFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xuICAxMTpcdFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXG4gIDEyOlx0XHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXG4gIDEzOlx0XHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xuICAxNDpcdFx0ICBcJiMzNDtmYWlybHlcJiMzNDsgaGF2ZSBiZWVuIHByb3Bvc2VkLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxuICAxNzpcdFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cbiAgMTk6XHRcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgMjA6XHRcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTIKCQkJCQkJCW91dHB1dDogMTEzCgkJCQkJCQl0aG91Z2h0czogNDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEdSRUQgUXVldWUgRGlzY2lwbGluZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIHRoZSBHUkVEIHF1ZXVlIGRpc2NpcGxpbmUuIFRoZSBwcm9tcHQgc3RyZXNzZXMgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGFpbWluZyBmb3IgYSBsZXNzIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5OiBgTkVUX1NDSEVEYCBhbmQgYE5FVF9TQ0hfR1JFRGAgc2VlbSB0byBiZSB0aGUgcmVsZXZhbnQgb25lczsgbm8gZGVwZW5kZW5jaWVzIHRoZXJlLgoKTm93LCB0aGUgYnVnIGlzIGRlZmluaXRlbHkgd2l0aGluIGBncmVkX2VucXVldWVgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGF2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucyBsaWtlIHRoaXMgdG8gc2F0aXNmeSB0aGUgcHJvbXB0LiBCdXQsIGlzIGBncmVkX2VucXVldWVgICpyZWFsbHkqIGdlbmVyaWM/IE5vLCBpdOKAmXMgc3BlY2lmaWMgdG8gR1JFRCwgb25seSB1c2VkIHdoZW4gR1JFRCBpcyBjb25maWd1cmVkIGFuZCBhY3RpdmVseSBwcm9jZXNzaW5nIHBhY2tldHMuIFNvLCBpdCYjMzk7cyBub3QgbGlrZSBgX19kZXZfcXVldWVfeG1pdGAgb3IgYGlwX3JjdmAsIHdoaWNoIGFyZSB1YmlxdWl0b3VzIGluIG5ldHdvcmsgcHJvY2Vzc2luZy4KClRoZSBpc3N1ZSBpcyB0aGF0IGlmIEkgKmRvbiYjMzk7dCogZnV6eiBgZ3JlZF9lbnF1ZXVlYCwgSSBtaWdodCBjb21wbGV0ZWx5IG1pc3MgdGhlIG92ZXJmbG93IHRoYXQgdGhlIHBhdGNoIGZpeGVzLiBBbmQsIHRvIHRyaWdnZXIgdGhlIG92ZXJmbG93LCBwYWNrZXRzIG5lZWQgdG8gYmUgZW5xdWV1ZWQuIFRodXMsIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGluY2x1ZGUgYGdyZWRfZW5xdWV1ZWAuIFRvIG1ha2Ugc3VyZSB0aGUgcWRpc2MgaXMgcHJvcGVybHkgc2V0IHVwLCBhbmQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgb2YgdGhlIGZ1enppbmcsIEkmIzM5O2xsIGFsc28gaW5jbHVkZSBgZ3JlZF9jaGFuZ2VgIGFuZCBgZ3JlZF9pbml0YC4gVGhlc2UgY29udHJvbC1wYXRoIGZ1bmN0aW9ucyBzaG91bGQgaGVscCB0byBnZXQgdGhlIEdSRUQgcWRpc2MgaW5pdGlhbGl6ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBpbmNyZWFzaW5nIHRoZSBjb3ZlcmFnZS4KCkxvb2tpbmcgYmFjayBhdCB0aGUgcGF0Y2g6CmBgYGMKLQkJCWlmIChsaWtlbHkoc2NoLSZndDtxc3RhdHMuYmFja2xvZyAmIzQzOyBxZGlzY19wa3RfbGVuKHNrYikgJmx0Oz0KJiM0MzsJCQlpZiAobGlrZWx5KCh1NjQpc2NoLSZndDtxc3RhdHMuYmFja2xvZyAmIzQzOyBxZGlzY19wa3RfbGVuKHNrYikgJmx0Oz0KIAkJCQkJc2NoLSZndDtsaW1pdCkpCmBgYApUaGF0JiMzOTtzIGEgZGlyZWN0IGZ1bmN0aW9uYWwgZml4IGZvciB0aGUgb3ZlcmZsb3csIHNvIGl0IGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBhcHByb2FjaDoKCiogICBDb25maWdzOiBgTkVUX1NDSEVEYCwgYE5FVF9TQ0hfR1JFRGAKKiAgIEZvY3VzIHN5bWJvbHM6IGBncmVkX2VucXVldWVgLCBgZ3JlZF9jaGFuZ2VgLCBgZ3JlZF9pbml0YAoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9HUkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3JlZF9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2dyZWRfY2hhbmdlJiMzNDssCiAgICAmIzM0O2dyZWRfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBHUkVEIHFkaXNjIGVucXVldWUgZnVuY3Rpb24gYnkgY2FzdGluZyB0aGUgYmFja2xvZyB0byB1NjQgYmVmb3JlIGFkZGluZyB0aGUgcGFja2V0IGxlbmd0aC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfR1JFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dyZWRfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtncmVkX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtncmVkX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgR1JFRCBxZGlzYyBlbnF1ZXVlIGZ1bmN0aW9uIGJ5IGNhc3RpbmcgdGhlIGJhY2tsb2cgdG8gdTY0IGJlZm9yZSBhZGRpbmcgdGhlIHBhY2tldCBsZW5ndGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEwOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBidWcgaW4gYGdyZWRfZW5xdWV1ZWAgYnkgY2FzdGluZyBgc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgYGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpYCB0byBgdTY0YCBiZWZvcmUgYWRkaW5nIGBxZGlzY19wa3RfbGVuKHNrYilgLiBUaGlzIHByZXZlbnRzIHRoZSBzdW0gZnJvbSB3cmFwcGluZyBhcm91bmQgYW5kIGluY29ycmVjdGx5IGJ5cGFzc2luZyB0aGUgcXVldWUgbGltaXQgY2hlY2sgKGBcdTAwM2M9IHNjaC1cdTAwM2VsaW1pdGApLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBxdWV1ZSBsaW1pdCBiZWluZyBleGNlZWRlZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI1ODk3NmJmYjFhZDU5NmVjN2UyM2YzNWFlOGYyYTk0MjY3NzQ5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDkgMDk6NTI6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dyZWQuYyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jCmluZGV4IGZjYzFhNGMwMzYzNjIuLmYwNGY0MjVjNmM0NDkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ3JlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZ3JlZC5jCkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHN0YXRpYyBpbnQgZ3JlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLAogCQkJICogaWYgbm8gZGVmYXVsdCBEUCBoYXMgYmVlbiBjb25maWd1cmVkLiBUaGlzCiAJCQkgKiBhbGxvd3MgZm9yIERQIGZsb3dzIHRvIGJlIGxlZnQgdW50b3VjaGVkLgogCQkJICovCi0JCQlpZiAobGlrZWx5KHNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2cgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpICZsdDs9CiYjNDM7CQkJaWYgKGxpa2VseSgodTY0KXNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2cgJiM0MzsgcWRpc2NfcGt0X2xlbihza2IpICZsdDs9CiAJCQkJCXNjaC0mZ3Q7bGltaXQpKQogCQkJCXJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpOwogCQkJZWxzZQpAQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpICYjNDM7IHFkaXNjX3BrdF9sZW4oc2tiKSAmbHQ7PSBxLSZndDtsaW1pdCkgewomIzQzOwlpZiAoKHU2NClncmVkX2JhY2tsb2codCwgcSwgc2NoKSAmIzQzOyBxZGlzY19wa3RfbGVuKHNrYikgJmx0Oz0gcS0mZ3Q7bGltaXQpIHsKIAkJcS0mZ3Q7YmFja2xvZyAmIzQzOz0gcWRpc2NfcGt0X2xlbihza2IpOwogCQlyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcyCgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDYxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdSRUQgUXVldWVpbmcgRGlzY2lwbGluZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9zY2hfZ3JlZC5jYCwgYW5kIGl0JiMzOTtzIG1ha2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBmaXggaXMgY2FzdGluZyBgc2NoLSZndDtxc3RhdHMuYmFja2xvZ2AgYW5kIHRoZSByZXN1bHQgb2YgYGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpYCB0byBgdTY0YCBiZWZvcmUgYWRkaW5nIGBxZGlzY19wa3RfbGVuKHNrYilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgaW50ZWdlciBvdmVyZmxvdyBwcmV2ZW50aW9uISYjMzQ7IFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFja2V0IHNpemVzIGFuZCBxdWV1ZSBiYWNrbG9ncywgd2hpY2ggY2FuIGFkZCB1cCwgYW5kIGlmIHdlJiMzOTtyZSBub3QgY2FyZWZ1bCwgd2UgY2FuIGVuZCB1cCB3aXRoIGEgd3JhcC1hcm91bmQuCgpNeSBmaXJzdCBjaGVjayB3YXMgbWFraW5nIHN1cmUgSSB1bmRlcnN0b29kIHRoZSB0eXBlcyBpbnZvbHZlZCwgYmVjYXVzZSB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHZ1bG5lcmFiaWxpdHkuIEkgZG91YmxlLWNoZWNrZWQgdGhlIGRlZmluaXRpb24gb2YgYHNjaC0mZ3Q7bGltaXRgIChpdCYjMzk7cyBhIGB1MzJgKSwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLgoKVGhlIGxvZ2ljIGhlcmUgaXMgcHJldHR5IGNsZWFyOiB3aXRob3V0IHRoZSBgdTY0YCBjYXN0LCB0aGUgYHUzMmAgYWRkaXRpb24gb2YgdGhlIGJhY2tsb2cgYW5kIHBhY2tldCBsZW5ndGggY291bGQgb3ZlcmZsb3csIHdyYXBwaW5nIGFyb3VuZCB0byBhIHNtYWxsIHZhbHVlLiBUaGF0IG1lYW5zIHdlJiMzOTtkIGJ5cGFzcyB0aGUgcXVldWUgbGltaXQuIFdpdGggdGhlIGNhc3QsIHRoZSBzdW0gaXMgZXZhbHVhdGVkIGFzIGEgYHU2NGAsIHNvIHRoYXQgd3JhcC1hcm91bmQgaXMgcHJldmVudGVkLiBUaGUgY29tcGFyaXNvbiBhZ2FpbnN0IHRoZSBgdTMyYCBsaW1pdCBzdGlsbCB3b3JrcyBhcyBpbnRlbmRlZC4gVGhpcyBlbnN1cmVzIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUuIEl0JiMzOTtzIGEgbG9naWMgYnVnIGFuZCBhbiBpbnRlZ2VyIG92ZXJmbG93IGZpeCwgcGxhaW4gYW5kIHNpbXBsZS4KCk5vdywgbXkgbWluZCBuYXR1cmFsbHkgZ29lcyB0byBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBzbyBJIHF1aWNrbHkgYXNzZXNzIGlmIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhcyBhbnkgcm9sZSBoZXJlLiBCdXQgbm8sIHRoaXMgaXMgKnB1cmVseSogYWJvdXQgaW50ZWdlciBvdmVyZmxvdyBhbmQgcXVldWUgbGltaXRzLiBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBpcyB0aGUgdG9vbCB0aGF0IGNhbiBjYXRjaCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBLQVNBTiAqbWlnaHQqIGNhdGNoIGFuIG92ZXJmbG93IGlmIHRoZSBpbmNvcnJlY3QgbGltaXQgY2hlY2sgbGVhZHMgdG8gYSBtZW1vcnkgY29ycnVwdGlvbiwgYnV0IEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLgoKSSBkb3VibGUtY2hlY2tlZDogYHNjaC0mZ3Q7cXN0YXRzLmJhY2tsb2dgIGlzIGB1MzJgLCBgcWRpc2NfcGt0X2xlbihza2IpYCBpcyBgdTMyYCwgdGhlaXIgc3VtICp3aWxsKiBvdmVyZmxvdywgaWYgbm90IGNhc3QgdG8gYHU2NGAgZmlyc3QuCgpTbywgaW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBhbiBpbXBvcnRhbnQgaW50ZWdlciBvdmVyZmxvdyBmaXgsIGFuZCBpdCBoYXMgbm8gY29ubmVjdGlvbiB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIGl0JiMzOTtzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBidWcgaW4gYGdyZWRfZW5xdWV1ZWAgYnkgY2FzdGluZyBgc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgYGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpYCB0byBgdTY0YCBiZWZvcmUgYWRkaW5nIGBxZGlzY19wa3RfbGVuKHNrYilgLiBUaGlzIHByZXZlbnRzIHRoZSBzdW0gZnJvbSB3cmFwcGluZyBhcm91bmQgYW5kIGluY29ycmVjdGx5IGJ5cGFzc2luZyB0aGUgcXVldWUgbGltaXQgY2hlY2sgKGBcdTAwM2M9IHNjaC1cdTAwM2VsaW1pdGApLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBxdWV1ZSBsaW1pdCBiZWluZyBleGNlZWRlZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgYnVnIGluIGBncmVkX2VucXVldWVgIGJ5IGNhc3RpbmcgYHNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZ2AgYW5kIGBncmVkX2JhY2tsb2codCwgcSwgc2NoKWAgdG8gYHU2NGAgYmVmb3JlIGFkZGluZyBgcWRpc2NfcGt0X2xlbihza2IpYC4gVGhpcyBwcmV2ZW50cyB0aGUgc3VtIGZyb20gd3JhcHBpbmcgYXJvdW5kIGFuZCBpbmNvcnJlY3RseSBieXBhc3NpbmcgdGhlIHF1ZXVlIGxpbWl0IGNoZWNrIChgXHUwMDNjPSBzY2gtXHUwMDNlbGltaXRgKS4gVGhpcyBpcyBhIGxvZ2ljL2ludGVnZXIgb3ZlcmZsb3cgZml4IHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgcXVldWUgbGltaXQgYmVpbmcgZXhjZWVkZWQgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA5OjUyOjQ5LjA4ODM4OTIyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NzEwMDY4Njg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfR1JFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdyZWRfZW5xdWV1ZVwiLFxuICAgIFwiZ3JlZF9jaGFuZ2VcIixcbiAgICBcImdyZWRfaW5pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBidWcgaW4gYGdyZWRfZW5xdWV1ZWAgYnkgY2FzdGluZyBgc2NoLVxcdTAwM2Vxc3RhdHMuYmFja2xvZ2AgYW5kIGBncmVkX2JhY2tsb2codCwgcSwgc2NoKWAgdG8gYHU2NGAgYmVmb3JlIGFkZGluZyBgcWRpc2NfcGt0X2xlbihza2IpYC4gVGhpcyBwcmV2ZW50cyB0aGUgc3VtIGZyb20gd3JhcHBpbmcgYXJvdW5kIGFuZCBpbmNvcnJlY3RseSBieXBhc3NpbmcgdGhlIHF1ZXVlIGxpbWl0IGNoZWNrIChgXFx1MDAzYz0gc2NoLVxcdTAwM2VsaW1pdGApLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBxdWV1ZSBsaW1pdCBiZWluZyBleGNlZWRlZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBHUkVEIHFkaXNjIGVucXVldWUgZnVuY3Rpb24gYnkgY2FzdGluZyB0aGUgYmFja2xvZyB0byB1NjQgYmVmb3JlIGFkZGluZyB0aGUgcGFja2V0IGxlbmd0aC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDk6NTI6NDkuMDg4Mzk1NTA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc2OTUyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MjU4OTc2YmZiMWFkNTk2ZWM3ZTIzZjM1YWU4ZjJhOTQyNjc3NDk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDkgMDk6NTI6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9ncmVkLmMgYi9uZXQvc2NoZWQvc2NoX2dyZWQuY1xcbmluZGV4IGZjYzFhNGMwMzYzNjIuLmYwNGY0MjVjNmM0NDkgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9ncmVkLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX2dyZWQuY1xcbkBAIC0xNzksNyArMTc5LDcgQEAgc3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIFxcdFxcdFxcdCAqIGlmIG5vIGRlZmF1bHQgRFAgaGFzIGJlZW4gY29uZmlndXJlZC4gVGhpc1xcbiBcXHRcXHRcXHQgKiBhbGxvd3MgZm9yIERQIGZsb3dzIHRvIGJlIGxlZnQgdW50b3VjaGVkLlxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKGxpa2VseShzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nICsgcWRpc2NfcGt0X2xlbihza2IpIFxcdTAwM2M9XFxuK1xcdFxcdFxcdGlmIChsaWtlbHkoKHU2NClzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nICsgcWRpc2NfcGt0X2xlbihza2IpIFxcdTAwM2M9XFxuIFxcdFxcdFxcdFxcdFxcdHNjaC1cXHUwMDNlbGltaXQpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaCkgKyBxZGlzY19wa3RfbGVuKHNrYikgXFx1MDAzYz0gcS1cXHUwMDNlbGltaXQpIHtcXG4rXFx0aWYgKCh1NjQpZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaCkgKyBxZGlzY19wa3RfbGVuKHNrYikgXFx1MDAzYz0gcS1cXHUwMDNlbGltaXQpIHtcXG4gXFx0XFx0cS1cXHUwMDNlYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7XFxuIFxcdFxcdHJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA5OjUyOjQ5LjUzNjgxNzk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTU0MzE2ODA1NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9HUkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3JlZF9lbnF1ZXVlXCIsXG4gICAgXCJncmVkX2NoYW5nZVwiLFxuICAgIFwiZ3JlZF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgR1JFRCBxZGlzYyBlbnF1ZXVlIGZ1bmN0aW9uIGJ5IGNhc3RpbmcgdGhlIGJhY2tsb2cgdG8gdTY0IGJlZm9yZSBhZGRpbmcgdGhlIHBhY2tldCBsZW5ndGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUyNTg5NzZiZmIxYWQ1OTZlYzdlMjNmMzVhZThmMmE5NDI2Nzc0OTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyA5IDA5OjUyOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9ncmVkLmMgYi9uZXQvc2NoZWQvc2NoX2dyZWQuY1xuaW5kZXggZmNjMWE0YzAzNjM2Mi4uZjA0ZjQyNWM2YzQ0OSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZ3JlZC5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2dyZWQuY1xuQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiBcdFx0XHQgKiBpZiBubyBkZWZhdWx0IERQIGhhcyBiZWVuIGNvbmZpZ3VyZWQuIFRoaXNcbiBcdFx0XHQgKiBhbGxvd3MgZm9yIERQIGZsb3dzIHRvIGJlIGxlZnQgdW50b3VjaGVkLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmIChsaWtlbHkoc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nICsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz1cbitcdFx0XHRpZiAobGlrZWx5KCh1NjQpc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nICsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz1cbiBcdFx0XHRcdFx0c2NoLVx1MDAzZWxpbWl0KSlcbiBcdFx0XHRcdHJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpO1xuIFx0XHRcdGVsc2VcbkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpICsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz0gcS1cdTAwM2VsaW1pdCkge1xuK1x0aWYgKCh1NjQpZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaCkgKyBxZGlzY19wa3RfbGVuKHNrYikgXHUwMDNjPSBxLVx1MDAzZWxpbWl0KSB7XG4gXHRcdHEtXHUwMDNlYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7XG4gXHRcdHJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDk6NTI6NDkuNTM2ODE5MTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjU1Mjg3OTkwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgR1JFRCBQYXRjaCBmb3IgUG90ZW50aWFsIE92ZXJmbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBuZXQvc2NoZWQvc2NoX2dyZWQuY2AuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWUsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgYmFja2xvZyBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIEdSRUQgcXVldWluZyBkaXNjaXBsaW5lLiBUaGUgY29yZSBvZiB0aGUgZml4IGlzIGEgdHlwZSBjYXN0OyB0aGV5J3JlIGNvbnZlcnRpbmcgYm90aCBgc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgdGhlIHJlc3VsdCBvZiBgZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaClgIHRvIGB1NjRgIGJlZm9yZSBhZGRpbmcgdGhlIHBhY2tldCBsZW5ndGgsIGBxZGlzY19wa3RfbGVuKHNrYilgLiBUaGlzIGlzIGNsZWFybHkgYWltZWQgYXQgcHJldmVudGluZyBhbiBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gdGhpcyBzdW0gaXMgY29tcGFyZWQgYWdhaW5zdCBgc2NoLVx1MDAzZWxpbWl0YCBvciBgcS1cdTAwM2VsaW1pdGAgaW4gdGhlIEdSRUQgZW5xdWV1ZSBsb2dpYy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBgZ3JlZF9lbnF1ZXVlYCB3aXRoaW4gdGhlIGZpbGUgYG5ldC9zY2hlZC9zY2hfZ3JlZC5jYC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIGJ1dCBhbnkgbmV0d29yayBzY2hlZHVsZXIgY2hhbmdlIHJlcXVpcmVzIGNhcmVmdWwgcmV2aWV3LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY2xlYXIgYXR0ZW1wdCB0byBoYXJkZW4gdGhlIEdlbmVyYWxpemVkIFJhbmRvbSBFYXJseSBEZXRlY3Rpb24gaW1wbGVtZW50YXRpb24uXG5cbkkgbmVlZCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBHUkVELiBUaGUgZWFzaWVzdCBwYXRoIGlzIHRvIHNlYXJjaCBmb3IgYHNjaF9ncmVkLm9gIGluIHRoZSBgbmV0L3NjaGVkL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3Mgb2YgR1JFRC4gVGhpcyB3aWxsIGdpdmUgbWUgY29udGV4dCBmb3IgaXRzIHVzYWdlIGFuZCBob3cgaXQgaXMgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA5OjU2OjM1LjA2NTYyMTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2NjQyNDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjaF9ncmVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9Mzc9b2JqLSQoQ09ORklHX05FVF9TQ0hfUkVEKVxcdCs9IHNjaF9yZWQub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTozODpvYmotJChDT05GSUdfTkVUX1NDSF9HUkVEKVxcdCs9IHNjaF9ncmVkLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtMzktb2JqLSQoQ09ORklHX05FVF9TQ0hfSU5HUkVTUylcXHQrPSBzY2hfaW5ncmVzcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA5OjU2OjM1LjQ3MjI3NTM2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDAzNDQ5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmtpbmcsIGFuZCBmcmFtaW5nIGl0IGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGludm9sdmVzIGBDT05GSUdfTkVUX1NDSF9HUkVEYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgZGVmaW5pdGlvbi4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcyB0byB1bmRlcnN0YW5kIHRoaXMgZmVhdHVyZSBiZXR0ZXIuIExldCBtZSBxdWlja2x5IGp1bXAgaW50byB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gbG9jYXRpb24gZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBzY2hlZHVsaW5nLiBJJ2xsIHNlYXJjaCBmb3IgYE5FVF9TQ0hfR1JFRGAgd2l0aGluIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgZGV0YWlscyBlbWVyZ2UgcmVnYXJkaW5nIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24uIEZyb20gdGhlcmUsIEknbGwgcmV2aWV3IGl0cyBkZXBlbmRlbmNpZXMgYW5kIGdlbmVyYWwgZGVzY3JpcHRpb24gdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYXJlLCBhbmQgd2hldGhlciBpdCdzIHN1aXRhYmxlIGZvciB0aGUgZ2l2ZW4gYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDk6NTY6MzkuMDcyNjIzNTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNjc4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfR1JFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0xNzI9Y29uZmlnIE5FVF9TQ0hfVEFQUklPXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xODMtXFxubmV0L3NjaGVkL0tjb25maWc6MTg0OmNvbmZpZyBORVRfU0NIX0dSRURcXG5uZXQvc2NoZWQvS2NvbmZpZy0xODUtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA5OjU2OjM5LjExNzc5ODUwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTMzNjQxNDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgTkVUX1NDSF9HUkVEKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYE5FVF9TQ0hfR1JFRGAuLi4gd2hhdCdzIGl0cyBkZXBlbmRlbmN5IGZvb3RwcmludCBsb29raW5nIGxpa2U/XCIgQmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBtYWtpbmcgY2hhbmdlcyBvciBjb25zaWRlcmluZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aGluZyAqcmVsaWVzKiBvbi4gV2UncmUgdGFsa2luZyBhYm91dCBhIG5ldHdvcmtpbmcgc2NoZWR1bGluZyBjb21wb25lbnQgaGVyZSwgc28gaXQncyBwcm9iYWJseSBpbnRlcndvdmVuIHdpdGggYSBmZXcgY3J1Y2lhbCBrZXJuZWwgc3Vic3lzdGVtcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IG1lbnRhbGx5IHRyYWNpbmcgdGhhdCBkZXBlbmRlbmN5IGdyYXBoOiBJcyBpdCB0aWVkIHRvIHNwZWNpZmljIHF1ZXVpbmcgZGlzY2lwbGluZXM/IERvZXMgaXQgcmVxdWlyZSBzdXBwb3J0IGZyb20gcGFydGljdWxhciBuZXR3b3JrIGRyaXZlcnMgb3IgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXM/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRoYXQgaXQgaW5oZXJlbnRseSBuZWVkcyB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IEFueXRoaW5nIHJlbGF0ZWQgdG8gUW9TPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBzb3VyY2UgdHJlZSwgYW5kIHRoZW4gbWF5YmUgc2VhcmNoaW5nIHRocm91Z2ggY29tbWl0IGxvZ3MgZm9yIGFueXRoaW5nIG1lbnRpb25pbmcgcmVsYXRlZCBmZWF0dXJlcyBvciBvdGhlciBzdWJzeXN0ZW1zIHdoaWNoIHdlcmUgbW9kaWZpZWQgYXJvdW5kIHRoZSBzYW1lIHRpbWUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBpbnRlcmZhY2VzIGludm9sdmVkIHRvIHVuZGVyc3RhbmQgdGhlIGRvd25zdHJlYW0gaW1wYWN0IG9mIG1vZGlmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMDowMToyNC40NTQyMTY0MTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTg0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTg0OlxcdGNvbmZpZyBORVRfU0NIX0dSRURcXG4gMTg1OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFJhbmRvbSBFYXJseSBEZXRlY3Rpb24gKEdSRUQpXFxcIlxcbiAxODY6XFx0XFx0aGVscFxcbiAxODc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgR2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uXFxuIDE4ODpcXHRcXHQgIChHUkVEKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0gZm9yIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXNcXG4gMTg5OlxcdFxcdCAgKHNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfcmVkLmNcXHUwMDNlIGZvciBkZXRhaWxzIGFuZFxcbiAxOTA6XFx0XFx0ICByZWZlcmVuY2VzIGFib3V0IHRoZSBhbGdvcml0aG0pLlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gMTkzOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ncmVkLlxcbiAxOTQ6XFx0XFxuIDE5NTpcXHRjb25maWcgTkVUX1NDSF9ORVRFTVxcbiAxOTY6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgZW11bGF0b3IgKE5FVEVNKVxcXCJcXG4gMTk3OlxcdFxcdGhlbHBcXG4gMTk4OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW11bGF0ZSBuZXR3b3JrIGRlbGF5LCBsb3NzLCBhbmQgcGFja2V0XFxuIDE5OTpcXHRcXHQgIHJlLW9yZGVyaW5nLiBUaGlzIGlzIG9mdGVuIHVzZWZ1bCB0byBzaW11bGF0ZSBuZXR3b3JrcyB3aGVuXFxuIDIwMDpcXHRcXHQgIHRlc3RpbmcgYXBwbGljYXRpb25zIG9yIHByb3RvY29scy5cXG4gMjAxOlxcdFxcbiAyMDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDIwMzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9uZXRlbS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDE6MjQuNDU0MzgyMzc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyNjgyNDczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBncmVkX2VucXVldWVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZ3JlZF9lbnF1ZXVlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdG8gd29ycnkgYWJvdXQg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29kZS4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLCBcImdyZWRfZW5xdWV1ZSxcIiBpbXBsaWVzIGEgcm9sZSBpbiBxdWV1aW5nLCBsaWtlbHkgd2l0aGluIGEgR2VuZXJhbGl6ZWQgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRCkgY29udGV4dC5cblxuTXkgaW1tZWRpYXRlIG5leHQgcXVlc3Rpb24gaXMgd2hldGhlciBgZ3JlZF9lbnF1ZXVlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVzLCB0aGUgc2lnbmF0dXJlIGNsZWFybHkgaW5kaWNhdGVzIGBzdGF0aWMgaW50IGdyZWRfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKWAuIEJlaW5nIHN0YXRpYyBzdWdnZXN0cyB0aGF0IGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIG1pZ2h0IG1ha2UgdHJhY2tpbmcgaXRzIHVzYWdlIGEgbGl0dGxlIG1vcmUgZm9jdXNlZC5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIFNpbmNlIGl0J3Mgc3RhdGljLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBpdCBkaXJlY3RseS4gQWx0ZXJuYXRpdmVseSwgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiBpcyBwZXJoYXBzIGFzc2lnbmVkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYSBsYXJnZXIgc3RydWN0dXJlLiBJZiBpdCBpcyBhc3NpZ25lZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIEkgbmVlZCB0byBrbm93IHRoZSBzdHJ1Y3QgaW4gd2hpY2ggaXQncyBhc3NpZ25lZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIHRoYXQgc3RydWN0IGl0c2VsZiBpcyB1c2VkLCBhbmQgaG93IGBncmVkX2VucXVldWVgIGZpdHMgaW50byB0aGUgZ3JlYXRlciBwaWN0dXJlIG9mIGRhdGEgZW5xdWV1ZWluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB3aGF0ZXZlciBRZGlzYyB0aGlzIGlzIG1hbmFnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzA4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMDowMToyOS44ODEyMDk5MjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTgwOTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJncmVkX2VucXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9ncmVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9ncmVkLmM9MTUyPXN0YXRpYyBib29sIGdyZWRfcGVyX3ZxX3JlZF9mbGFnc191c2VkKHN0cnVjdCBncmVkX3NjaGVkICp0YWJsZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ3JlZC5jLTE2NC1cXG5uZXQvc2NoZWQvc2NoX2dyZWQuYzoxNjU6c3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF9ncmVkLmMtMTY2LVxcdFxcdFxcdHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ3JlZC5jPTkyMT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBncmVkX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9ncmVkLmMtOTIzLVxcdC5wcml2X3NpemVcXHQ9XFx0c2l6ZW9mKHN0cnVjdCBncmVkX3NjaGVkKSxcXG5uZXQvc2NoZWQvc2NoX2dyZWQuYzo5MjQ6XFx0LmVucXVldWVcXHQ9XFx0Z3JlZF9lbnF1ZXVlLFxcbm5ldC9zY2hlZC9zY2hfZ3JlZC5jLTkyNS1cXHQuZGVxdWV1ZVxcdD1cXHRncmVkX2RlcXVldWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEwOjAxOjI5Ljk4NzAyMzkzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjI3MzA1MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1JFRCBRZGlzYyBFbnF1ZXVlIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBHUkVEIHFkaXNjLCBhbmQgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBlbnF1ZXVpbmcgcGFja2V0cyBpcyBjbGVhcmx5IGFzc2lnbmVkIHRvIGBncmVkX3FkaXNjX29wcy5lbnF1ZXVlYC4gVGhhdCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgZ3JlZF9xZGlzY19vcHNgIGlzIHJlZ2lzdGVyZWQgdXNpbmcgYHJlZ2lzdGVyX3FkaXNjKFx1MDAyNmdyZWRfcWRpc2Nfb3BzKWAuIFNvLCBgZ3JlZF9lbnF1ZXVlYCBpcyB0aGUgZnVuY3Rpb24gd2Ugd2FudC5cblxuV2FpdCwgbm93IEkgcmVtZW1iZXIgdGhlIHN0YXRpYyB2cy4gbm9uLXN0YXRpYyBmdW5jdGlvbiBpc3N1ZS4gU2luY2UgYGdyZWRfZW5xdWV1ZWAgaXMgKnN0YXRpYyosIGl0IG5vcm1hbGx5IHdvdWxkbid0IGJlIGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaGF0IGNhbiBjb21wbGljYXRlIGZ1enppbmcsIHRob3VnaCBzdGF0aWMgZnVuY3Rpb25zICpjYW4qIGJlIGZ1enplZCBpZiB0aGV5J3JlIG5vdCBpbmxpbmVkLiBJZGVhbGx5LCB3ZSB3YW50IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciB0aGUgQVBJIGVudHJ5IHBvaW50cyB0byB0aGUgY29kZS4gSG93ZXZlciwgSSB0aGluayBgZ3JlZF9lbnF1ZXVlYCBnZXRzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQgbGlrZWx5ICp3b24ndCogYmUgaW5saW5lZC4gVGhhdCdzIGdvb2QuXG5cbldhaXQgYSBzZWNvbmQuIFRoZSBwcm9tcHQgbWVudGlvbmVkIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTaW5jZSBgZ3JlZF9lbnF1ZXVlYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0ICppcyogbm9uLWlubGluZWQsIGFuZCB0aGVyZWZvcmUgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQgc2F0aXNmaWVzIHRoZSBjcml0ZXJpYS5cblxuSG93ZXZlciwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIHRoZSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIGBncmVkX3FkaXNjX29wc2AsIGp1c3QgdG8gYmUgY29tcGxldGUuIEkgc2hvdWxkIGxvb2sgZm9yIGBncmVkX2luaXRgLCBgZ3JlZF9jaGFuZ2VgLCBgZ3JlZF9kdW1wYCwgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIGFzIG90aGVyIGVudHJ5IHBvaW50cyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50LiBMZXQncyBzZWUgd2hhdCdzIGluIGBncmVkX3FkaXNjX29wc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDE6MzguNjE0MzMzNjAzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2dyZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MjEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MjE6XFx0c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgZ3JlZF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4gOTIyOlxcdFxcdC5pZFxcdFxcdD1cXHRcXFwiZ3JlZFxcXCIsXFxuIDkyMzpcXHRcXHQucHJpdl9zaXplXFx0PVxcdHNpemVvZihzdHJ1Y3QgZ3JlZF9zY2hlZCksXFxuIDkyNDpcXHRcXHQuZW5xdWV1ZVxcdD1cXHRncmVkX2VucXVldWUsXFxuIDkyNTpcXHRcXHQuZGVxdWV1ZVxcdD1cXHRncmVkX2RlcXVldWUsXFxuIDkyNjpcXHRcXHQucGVla1xcdFxcdD1cXHRxZGlzY19wZWVrX2hlYWQsXFxuIDkyNzpcXHRcXHQuaW5pdFxcdFxcdD1cXHRncmVkX2luaXQsXFxuIDkyODpcXHRcXHQucmVzZXRcXHRcXHQ9XFx0Z3JlZF9yZXNldCxcXG4gOTI5OlxcdFxcdC5kZXN0cm95XFx0PVxcdGdyZWRfZGVzdHJveSxcXG4gOTMwOlxcdFxcdC5jaGFuZ2VcXHRcXHQ9XFx0Z3JlZF9jaGFuZ2UsXFxuIDkzMTpcXHRcXHQuZHVtcFxcdFxcdD1cXHRncmVkX2R1bXAsXFxuIDkzMjpcXHRcXHQub3duZXJcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxuIDkzMzpcXHR9O1xcbiA5MzQ6XFx0TU9EVUxFX0FMSUFTX05FVF9TQ0goXFxcImdyZWRcXFwiKTtcXG4gOTM1OlxcdFxcbiA5MzY6XFx0c3RhdGljIGludCBfX2luaXQgZ3JlZF9tb2R1bGVfaW5pdCh2b2lkKVxcbiA5Mzc6XFx0e1xcbiA5Mzg6XFx0XFx0cmV0dXJuIHJlZ2lzdGVyX3FkaXNjKFxcdTAwMjZncmVkX3FkaXNjX29wcyk7XFxuIDkzOTpcXHR9XFxuIDk0MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDE6MzguNjE0NTI5NjYzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzM3NjU4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gYGdyZWRfZW5xdWV1ZWAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbnBvaW50ZWQgYGdyZWRfZW5xdWV1ZWAgYXMgdGhlIGtleSBmdW5jdGlvbiBmb3IgdGhpcyBhbmFseXNpcy4gSXQncyBwZXJmZWN0IGJlY2F1c2UgaXQncyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQgYW5kLCBjcml0aWNhbGx5LCBpdCdzIG5vdCBpbmxpbmVkLCB3aGljaCBzaW1wbGlmaWVzIHRyYWNraW5nIGl0IGRvd24uIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUsIHNvIHRoYXQga2VlcHMgdGhlIHNjb3BlIHByZXR0eSBtYW5hZ2VhYmxlLiBXYWl0LCBpcyBgZ3JlZF9lbnF1ZXVlYCBldmVuIHN0YXRpYz8gWWVzLCBpdCBpcywgYnV0IHRoYXQncyBhbHJpZ2h0IGJlY2F1c2UgaXQgc2VydmVzIGFzIHRoZSBBUEkgZW50cnkgcG9pbnQgZm9yIHRoZSBxZGlzYyBvcGVyYXRpb25zLCBzbyBpdHMgdXNlIGlzIGNydWNpYWwuIERlZmluaXRlbHkgZ29pbmcgd2l0aCBgZ3JlZF9lbnF1ZXVlYCBhcyBteSBzdGFydGluZyBwb2ludC5cblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgTkVUX1NDSF9HUkVEYC4gSSBuZWVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBwYXJlbnQgY29uZmlnIHJlcXVpcmVtZW50cy4gUmlnaHQsIGBORVRfU0NIX0dSRURgIGxpdmVzIHVuZGVyIGBtZW51Y29uZmlnIE5FVF9TQ0hFRGAuIEdvb2QsIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMDowMTo0My41ODgyOTgyNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3OTQ2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkVUX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnLTUtXFxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxcbm5ldC9zY2hlZC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMDowMTo0My42ODYyNDkxNzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3OTQzMTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5IGZyb20gbXkgcGVyc3BlY3RpdmUsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGl0J3MgY2xlYXIgd2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgc2NoZWR1bGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYE5FVF9TQ0hFRGAgaXMgZGVmaW5pdGVseSBhIGtleSBmYWN0b3IgaGVyZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGFuZCB3aGF0IEkgYXV0b21hdGljYWxseSBiZWdpbiB0byB0aGluayBhYm91dCwgaXMgZGl2aW5nIGludG8gYE5FVF9TQ0hFRGAncyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyByZWx5IG9uIHRoaXMgbW9kdWxlLCBvciB3aGF0IHRoaXMgbW9kdWxlIHJlbGllcyBvbi4gVW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGhvdyBgTkVUX1NDSEVEYCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbmV0d29yayBhcmNoaXRlY3R1cmUgaXMgY3J1Y2lhbCBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMgdG8gdW5mb2xkLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODAyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDE6NTEuNzY1NjgzNjU5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4NjgwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDE6NTEuODc1NTU2OTA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjc4MTkyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvbmZpZ3VyYXRpb246XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0d29yayBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtZW51Y29uZmlnYCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgTkVUX1NDSEVEYC4gUmlnaHQsIHRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBuZXR3b3JrIHNjaGVkdWxlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBzZWN0aW9uIGZ1bGx5IGJlZm9yZSBtb3Zpbmcgb24uIE5vdyB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZCBvbiBhbnkgb3RoZXIgZmVhdHVyZXMgb3Igc2V0dGluZ3Mgd2l0aGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHByZXJlcXVpc2l0ZXMgb3IgaWYgZW5hYmxpbmcgdGhpcyBvcHRpb24gYXV0b21hdGljYWxseSBwdWxscyBpbiBvdGhlciByZWxhdGVkIG1vZHVsZXMuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIHRvIGF2b2lkIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzIG9yIHRvIGVuc3VyZSBJJ3ZlIGVuYWJsZWQgZXZlcnl0aGluZyBuZWNlc3NhcnkgZm9yIHRoZSBzY2hlZHVsZXIgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlIGludG8ga2VybmVsIG5ldHdvcmsgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEwOjAxOjU2LjAwMzM3OTU3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEwOjAxOjU2LjAwMzU3Mjk1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Njg2Mjc2MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEdSRUQgUXVldWUgRGlzY2lwbGluZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyB0aGUgR1JFRCBxdWV1ZSBkaXNjaXBsaW5lLiBUaGUgcHJvbXB0IHN0cmVzc2VzIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBhaW1pbmcgZm9yIGEgbGVzcyBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb24uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5OiBgTkVUX1NDSEVEYCBhbmQgYE5FVF9TQ0hfR1JFRGAgc2VlbSB0byBiZSB0aGUgcmVsZXZhbnQgb25lczsgbm8gZGVwZW5kZW5jaWVzIHRoZXJlLlxuXG5Ob3csIHRoZSBidWcgaXMgZGVmaW5pdGVseSB3aXRoaW4gYGdyZWRfZW5xdWV1ZWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zIGxpa2UgdGhpcyB0byBzYXRpc2Z5IHRoZSBwcm9tcHQuIEJ1dCwgaXMgYGdyZWRfZW5xdWV1ZWAgKnJlYWxseSogZ2VuZXJpYz8gTm8sIGl04oCZcyBzcGVjaWZpYyB0byBHUkVELCBvbmx5IHVzZWQgd2hlbiBHUkVEIGlzIGNvbmZpZ3VyZWQgYW5kIGFjdGl2ZWx5IHByb2Nlc3NpbmcgcGFja2V0cy4gU28sIGl0J3Mgbm90IGxpa2UgYF9fZGV2X3F1ZXVlX3htaXRgIG9yIGBpcF9yY3ZgLCB3aGljaCBhcmUgdWJpcXVpdG91cyBpbiBuZXR3b3JrIHByb2Nlc3NpbmcuXG5cblRoZSBpc3N1ZSBpcyB0aGF0IGlmIEkgKmRvbid0KiBmdXp6IGBncmVkX2VucXVldWVgLCBJIG1pZ2h0IGNvbXBsZXRlbHkgbWlzcyB0aGUgb3ZlcmZsb3cgdGhhdCB0aGUgcGF0Y2ggZml4ZXMuIEFuZCwgdG8gdHJpZ2dlciB0aGUgb3ZlcmZsb3csIHBhY2tldHMgbmVlZCB0byBiZSBlbnF1ZXVlZC4gVGh1cywgaXQncyBjcml0aWNhbCB0byBpbmNsdWRlIGBncmVkX2VucXVldWVgLiBUbyBtYWtlIHN1cmUgdGhlIHFkaXNjIGlzIHByb3Blcmx5IHNldCB1cCwgYW5kIHRvIGJyb2FkZW4gdGhlIHNjb3BlIG9mIHRoZSBmdXp6aW5nLCBJJ2xsIGFsc28gaW5jbHVkZSBgZ3JlZF9jaGFuZ2VgIGFuZCBgZ3JlZF9pbml0YC4gVGhlc2UgY29udHJvbC1wYXRoIGZ1bmN0aW9ucyBzaG91bGQgaGVscCB0byBnZXQgdGhlIEdSRUQgcWRpc2MgaW5pdGlhbGl6ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBpbmNyZWFzaW5nIHRoZSBjb3ZlcmFnZS5cblxuTG9va2luZyBiYWNrIGF0IHRoZSBwYXRjaDpcbmBgYGNcbi1cdFx0XHRpZiAobGlrZWx5KHNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZyArIHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9XG4rXHRcdFx0aWYgKGxpa2VseSgodTY0KXNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZyArIHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9XG4gXHRcdFx0XHRcdHNjaC1cdTAwM2VsaW1pdCkpXG5gYGBcblRoYXQncyBhIGRpcmVjdCBmdW5jdGlvbmFsIGZpeCBmb3IgdGhlIG92ZXJmbG93LCBzbyBpdCBpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBhcHByb2FjaDpcblxuKiAgIENvbmZpZ3M6IGBORVRfU0NIRURgLCBgTkVUX1NDSF9HUkVEYFxuKiAgIEZvY3VzIHN5bWJvbHM6IGBncmVkX2VucXVldWVgLCBgZ3JlZF9jaGFuZ2VgLCBgZ3JlZF9pbml0YFxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU5MiwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMDowMjowMy42ODk4NTEzOTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM3NjY3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9HUkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3JlZF9lbnF1ZXVlXCIsXG4gICAgXCJncmVkX2NoYW5nZVwiLFxuICAgIFwiZ3JlZF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgR1JFRCBxZGlzYyBlbnF1ZXVlIGZ1bmN0aW9uIGJ5IGNhc3RpbmcgdGhlIGJhY2tsb2cgdG8gdTY0IGJlZm9yZSBhZGRpbmcgdGhlIHBhY2tldCBsZW5ndGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0dSRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJncmVkX2VucXVldWVcIixcbiAgICBcImdyZWRfY2hhbmdlXCIsXG4gICAgXCJncmVkX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBHUkVEIHFkaXNjIGVucXVldWUgZnVuY3Rpb24gYnkgY2FzdGluZyB0aGUgYmFja2xvZyB0byB1NjQgYmVmb3JlIGFkZGluZyB0aGUgcGFja2V0IGxlbmd0aC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDI6MDMuODUzNjI5MDI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMzNTQzNjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEwOjAyOjAzLjg1NDc3NjQ3NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjMzNDI4NDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBidWcgaW4gYGdyZWRfZW5xdWV1ZWAgYnkgY2FzdGluZyBgc2NoLVxcdTAwM2Vxc3RhdHMuYmFja2xvZ2AgYW5kIGBncmVkX2JhY2tsb2codCwgcSwgc2NoKWAgdG8gYHU2NGAgYmVmb3JlIGFkZGluZyBgcWRpc2NfcGt0X2xlbihza2IpYC4gVGhpcyBwcmV2ZW50cyB0aGUgc3VtIGZyb20gd3JhcHBpbmcgYXJvdW5kIGFuZCBpbmNvcnJlY3RseSBieXBhc3NpbmcgdGhlIHF1ZXVlIGxpbWl0IGNoZWNrIChgXFx1MDAzYz0gc2NoLVxcdTAwM2VsaW1pdGApLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBxdWV1ZSBsaW1pdCBiZWluZyBleGNlZWRlZCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjU4OTc2YmZiMWFkNTk2ZWM3ZTIzZjM1YWU4ZjJhOTQyNjc3NDk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAwOTo1Mjo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ3JlZC5jIGIvbmV0L3NjaGVkL3NjaF9ncmVkLmNcbmluZGV4IGZjYzFhNGMwMzYzNjIuLmYwNGY0MjVjNmM0NDkgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2dyZWQuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9ncmVkLmNcbkBAIC0xNzksNyArMTc5LDcgQEAgc3RhdGljIGludCBncmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdFx0ICogaWYgbm8gZGVmYXVsdCBEUCBoYXMgYmVlbiBjb25maWd1cmVkLiBUaGlzXG4gXHRcdFx0ICogYWxsb3dzIGZvciBEUCBmbG93cyB0byBiZSBsZWZ0IHVudG91Y2hlZC5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAobGlrZWx5KHNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZyArIHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9XG4rXHRcdFx0aWYgKGxpa2VseSgodTY0KXNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZyArIHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9XG4gXHRcdFx0XHRcdHNjaC1cdTAwM2VsaW1pdCkpXG4gXHRcdFx0XHRyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTtcbiBcdFx0XHRlbHNlXG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyBpbnQgZ3JlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmIChncmVkX2JhY2tsb2codCwgcSwgc2NoKSArIHFkaXNjX3BrdF9sZW4oc2tiKSBcdTAwM2M9IHEtXHUwMDNlbGltaXQpIHtcbitcdGlmICgodTY0KWdyZWRfYmFja2xvZyh0LCBxLCBzY2gpICsgcWRpc2NfcGt0X2xlbihza2IpIFx1MDAzYz0gcS1cdTAwM2VsaW1pdCkge1xuIFx0XHRxLVx1MDAzZWJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihza2IpO1xuIFx0XHRyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEwOjAyOjAzLjg1NDc3OTc3NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMzNDI1ODE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdSRUQgUXVldWVpbmcgRGlzY2lwbGluZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvc2NoZWQvc2NoX2dyZWQuY2AsIGFuZCBpdCdzIG1ha2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBmaXggaXMgY2FzdGluZyBgc2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgdGhlIHJlc3VsdCBvZiBgZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaClgIHRvIGB1NjRgIGJlZm9yZSBhZGRpbmcgYHFkaXNjX3BrdF9sZW4oc2tiKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFoLCBpbnRlZ2VyIG92ZXJmbG93IHByZXZlbnRpb24hXCIgV2UncmUgZGVhbGluZyB3aXRoIHBhY2tldCBzaXplcyBhbmQgcXVldWUgYmFja2xvZ3MsIHdoaWNoIGNhbiBhZGQgdXAsIGFuZCBpZiB3ZSdyZSBub3QgY2FyZWZ1bCwgd2UgY2FuIGVuZCB1cCB3aXRoIGEgd3JhcC1hcm91bmQuXG5cbk15IGZpcnN0IGNoZWNrIHdhcyBtYWtpbmcgc3VyZSBJIHVuZGVyc3Rvb2QgdGhlIHR5cGVzIGludm9sdmVkLCBiZWNhdXNlIHRoYXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB2dWxuZXJhYmlsaXR5LiBJIGRvdWJsZS1jaGVja2VkIHRoZSBkZWZpbml0aW9uIG9mIGBzY2gtXHUwMDNlbGltaXRgIChpdCdzIGEgYHUzMmApLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIuXG5cblRoZSBsb2dpYyBoZXJlIGlzIHByZXR0eSBjbGVhcjogd2l0aG91dCB0aGUgYHU2NGAgY2FzdCwgdGhlIGB1MzJgIGFkZGl0aW9uIG9mIHRoZSBiYWNrbG9nIGFuZCBwYWNrZXQgbGVuZ3RoIGNvdWxkIG92ZXJmbG93LCB3cmFwcGluZyBhcm91bmQgdG8gYSBzbWFsbCB2YWx1ZS4gVGhhdCBtZWFucyB3ZSdkIGJ5cGFzcyB0aGUgcXVldWUgbGltaXQuIFdpdGggdGhlIGNhc3QsIHRoZSBzdW0gaXMgZXZhbHVhdGVkIGFzIGEgYHU2NGAsIHNvIHRoYXQgd3JhcC1hcm91bmQgaXMgcHJldmVudGVkLiBUaGUgY29tcGFyaXNvbiBhZ2FpbnN0IHRoZSBgdTMyYCBsaW1pdCBzdGlsbCB3b3JrcyBhcyBpbnRlbmRlZC4gVGhpcyBlbnN1cmVzIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUuIEl0J3MgYSBsb2dpYyBidWcgYW5kIGFuIGludGVnZXIgb3ZlcmZsb3cgZml4LCBwbGFpbiBhbmQgc2ltcGxlLlxuXG5Ob3csIG15IG1pbmQgbmF0dXJhbGx5IGdvZXMgdG8gcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc28gSSBxdWlja2x5IGFzc2VzcyBpZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXMgYW55IHJvbGUgaGVyZS4gQnV0IG5vLCB0aGlzIGlzICpwdXJlbHkqIGFib3V0IGludGVnZXIgb3ZlcmZsb3cgYW5kIHF1ZXVlIGxpbWl0cy4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBpcyB0aGUgdG9vbCB0aGF0IGNhbiBjYXRjaCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBLQVNBTiAqbWlnaHQqIGNhdGNoIGFuIG92ZXJmbG93IGlmIHRoZSBpbmNvcnJlY3QgbGltaXQgY2hlY2sgbGVhZHMgdG8gYSBtZW1vcnkgY29ycnVwdGlvbiwgYnV0IEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuXG5cbkkgZG91YmxlLWNoZWNrZWQ6IGBzY2gtXHUwMDNlcXN0YXRzLmJhY2tsb2dgIGlzIGB1MzJgLCBgcWRpc2NfcGt0X2xlbihza2IpYCBpcyBgdTMyYCwgdGhlaXIgc3VtICp3aWxsKiBvdmVyZmxvdywgaWYgbm90IGNhc3QgdG8gYHU2NGAgZmlyc3QuXG5cblNvLCBpbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIGFuIGltcG9ydGFudCBpbnRlZ2VyIG92ZXJmbG93IGZpeCwgYW5kIGl0IGhhcyBubyBjb25uZWN0aW9uIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGJlY2F1c2UgaXQncyBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzIsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTA6MDI6MTYuMTg5MDQxMTM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGJ1ZyBpbiBgZ3JlZF9lbnF1ZXVlYCBieSBjYXN0aW5nIGBzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nYCBhbmQgYGdyZWRfYmFja2xvZyh0LCBxLCBzY2gpYCB0byBgdTY0YCBiZWZvcmUgYWRkaW5nIGBxZGlzY19wa3RfbGVuKHNrYilgLiBUaGlzIHByZXZlbnRzIHRoZSBzdW0gZnJvbSB3cmFwcGluZyBhcm91bmQgYW5kIGluY29ycmVjdGx5IGJ5cGFzc2luZyB0aGUgcXVldWUgbGltaXQgY2hlY2sgKGBcXHUwMDNjPSBzY2gtXFx1MDAzZWxpbWl0YCkuIFRoaXMgaXMgYSBsb2dpYy9pbnRlZ2VyIG92ZXJmbG93IGZpeCB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gcmVzdWx0aW5nIGZyb20gdGhlIHF1ZXVlIGxpbWl0IGJlaW5nIGV4Y2VlZGVkIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgYnVnIGluIGBncmVkX2VucXVldWVgIGJ5IGNhc3RpbmcgYHNjaC1cXHUwMDNlcXN0YXRzLmJhY2tsb2dgIGFuZCBgZ3JlZF9iYWNrbG9nKHQsIHEsIHNjaClgIHRvIGB1NjRgIGJlZm9yZSBhZGRpbmcgYHFkaXNjX3BrdF9sZW4oc2tiKWAuIFRoaXMgcHJldmVudHMgdGhlIHN1bSBmcm9tIHdyYXBwaW5nIGFyb3VuZCBhbmQgaW5jb3JyZWN0bHkgYnlwYXNzaW5nIHRoZSBxdWV1ZSBsaW1pdCBjaGVjayAoYFxcdTAwM2M9IHNjaC1cXHUwMDNlbGltaXRgKS4gVGhpcyBpcyBhIGxvZ2ljL2ludGVnZXIgb3ZlcmZsb3cgZml4IHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgcXVldWUgbGltaXQgYmVpbmcgZXhjZWVkZWQgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowgrb2h[1] Phase: Succeeded StartedAt: 2026-08-09 10:02:28 +0000 UTC FinishedAt: 2026-08-09 10:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-09 10:02:28 +0000 UTC FinishedAt: 2026-08-09 10:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2] Phase: Succeeded StartedAt: 2026-08-09 10:02:28 +0000 UTC FinishedAt: 2026-08-09 13:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-09 10:02:28 +0000 UTC FinishedAt: 2026-08-09 13:51:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-09 10:02:28 +0000 UTC FinishedAt: 2026-08-09 10:02:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-09 10:02:28 +0000 UTC FinishedAt: 2026-08-09 10:02:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgrb2h/series-workflowgrb2h-convert-artifact-3352154614/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-09 10:02:38 +0000 UTC FinishedAt: 2026-08-09 10:23:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-09 10:02:38 +0000 UTC FinishedAt: 2026-08-09 10:23:18 +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:*7d8fdec3-b73f-4074-94db-6617e7eca544,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-workflowgrb2h/series-workflowgrb2h-convert-artifact-3352154614/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": "621dc0c0-00a7-49fe-a24d-1aacbe70fabe", "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-workflowgrb2h/series-workflowgrb2h-build-action-4214484236/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-09 10:02:38 +0000 UTC FinishedAt: 2026-08-09 10:23:07 +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:*7d8fdec3-b73f-4074-94db-6617e7eca544,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-workflowgrb2h/series-workflowgrb2h-convert-artifact-3352154614/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": "621dc0c0-00a7-49fe-a24d-1aacbe70fabe", "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-workflowgrb2h/series-workflowgrb2h-build-action-4214484236/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-09 10:23:18 +0000 UTC FinishedAt: 2026-08-09 10:23:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-09 10:23:18 +0000 UTC FinishedAt: 2026-08-09 10:23:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-09 10:23:18 +0000 UTC FinishedAt: 2026-08-09 10:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-09 10:23:18 +0000 UTC FinishedAt: 2026-08-09 10:23:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgrb2h/series-workflowgrb2h-convert-artifact-1969400713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-09 10:23:29 +0000 UTC FinishedAt: 2026-08-09 10:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-09 10:23:30 +0000 UTC FinishedAt: 2026-08-09 10:25:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*621dc0c0-00a7-49fe-a24d-1aacbe70fabe,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-workflowgrb2h/series-workflowgrb2h-build-action-4214484236/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-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-09 10:25:57 +0000 UTC FinishedAt: 2026-08-09 10:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-09 10:25:57 +0000 UTC FinishedAt: 2026-08-09 10:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-09 10:25:57 +0000 UTC FinishedAt: 2026-08-09 10:46:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-09 10:25:57 +0000 UTC FinishedAt: 2026-08-09 10:46:32 +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:*7d8fdec3-b73f-4074-94db-6617e7eca544,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-workflowgrb2h/series-workflowgrb2h-convert-artifact-1969400713/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": "5d2e9d58-84e0-43f3-9c87-fb34f13d8768", "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-workflowgrb2h/series-workflowgrb2h-build-action-3408899429/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-09 10:25:57 +0000 UTC FinishedAt: 2026-08-09 10:46:22 +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:*7d8fdec3-b73f-4074-94db-6617e7eca544,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-workflowgrb2h/series-workflowgrb2h-convert-artifact-1969400713/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": "5d2e9d58-84e0-43f3-9c87-fb34f13d8768", "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-workflowgrb2h/series-workflowgrb2h-build-action-3408899429/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-09 10:46:32 +0000 UTC FinishedAt: 2026-08-09 10:46:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-09 10:46:32 +0000 UTC FinishedAt: 2026-08-09 10:46:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-09 10:46:32 +0000 UTC FinishedAt: 2026-08-09 10:48:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-09 10:46:32 +0000 UTC FinishedAt: 2026-08-09 10:48:47 +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:*5d2e9d58-84e0-43f3-9c87-fb34f13d8768,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-workflowgrb2h/series-workflowgrb2h-build-action-3408899429/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-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-09 10:48:57 +0000 UTC FinishedAt: 2026-08-09 13:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-09 10:48:57 +0000 UTC FinishedAt: 2026-08-09 13:51: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":["gred_enqueue","gred_change","gred_init"],"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:*621dc0c0-00a7-49fe-a24d-1aacbe70fabe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5d2e9d58-84e0-43f3-9c87-fb34f13d8768,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-workflowgrb2h/series-workflowgrb2h-build-action-4214484236/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-workflowgrb2h/series-workflowgrb2h-build-action-3408899429/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-09 10:48:57 +0000 UTC FinishedAt: 2026-08-09 10:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-09 10:48:57 +0000 UTC FinishedAt: 2026-08-09 10:49:02 +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":["gred_enqueue","gred_change","gred_init"],"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-workflowgrb2h/series-workflowgrb2h-convert-artifact-3270954462/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-09 10:48:57 +0000 UTC FinishedAt: 2026-08-09 10:48:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-09 10:48:57 +0000 UTC FinishedAt: 2026-08-09 10:48:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-09 10:48:57 +0000 UTC FinishedAt: 2026-08-09 10:48:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-09 10:49:07 +0000 UTC FinishedAt: 2026-08-09 13:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrb2h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gred_enqueue","gred_change","gred_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_GRED"],"series_id":"6a39de4c-af73-496d-879d-02b13d2fd105","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-09 10:49:07 +0000 UTC FinishedAt: 2026-08-09 13:51:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*621dc0c0-00a7-49fe-a24d-1aacbe70fabe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5d2e9d58-84e0-43f3-9c87-fb34f13d8768,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-workflowgrb2h/series-workflowgrb2h-build-action-4214484236/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-workflowgrb2h/series-workflowgrb2h-build-action-3408899429/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-workflowgrb2h/series-workflowgrb2h-convert-artifact-3270954462/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,}