Name: series-workflowlh47n Phase: Succeeded StartedAt: 2026-08-01 21:15:00 +0000 UTC FinishedAt: 2026-08-02 01:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[0] Phase: Succeeded StartedAt: 2026-08-01 21:15:00 +0000 UTC FinishedAt: 2026-08-01 21:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 21:15:00 +0000 UTC FinishedAt: 2026-08-01 21:34:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_FTP", "NFT_CT", "NETFILTER_XT_TARGET_CT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_FTP", "NFT_CT", "NETFILTER_XT_TARGET_CT" ], "series_id": "df5a2d30-6dc1-4829-8566-e4fcf04d146e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_ct_ext_add", "nf_ct_helper_ext_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfRlRQJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfY3RfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtuZl9jdF9oZWxwZXJfZXh0X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmZfY3RfZXh0X2FkZGAgdG8gcHJldmVudCByZWFsbG9jYXRpbmcgdGhlIGNvbm50cmFjayBleHRlbnNpb24gc3BhY2UgaWYgYSBoZWxwZXIgZXh0ZW5zaW9uIChgTkZfQ1RfRVhUX0hFTFBFUmApIGlzIGFscmVhZHkgcHJlc2VudCwgYW5kIHRvIHJlc2VydmUgbWF4aW11bSBzcGFjZSAoYFU4X01BWGApIHdoZW4gYWRkaW5nIGEgaGVscGVyIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25udHJhY2sgbG9naWMuIEl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIGNvbm50cmFjayBoZWxwZXJzIHZpYSBuZXRsaW5rLCBuZnRhYmxlcywgb3IgaXB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxYTA4MzAzYmY3NWM4MWZiNmYwZTcyMTI4NjE3ZjEyY2VhNjY2YzVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAyMTozMzowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jXG5pbmRleCAwZGExMDVlMWRlZDkzLi4xNDIxOTQ0YTMwMDM1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jXG5AQCAtMTEyLDkgJiM0MzsxMTIsMjEgQEAgdm9pZCAqbmZfY3RfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gbmZfY3RfZXh0X2lkIGlkLCBnZnBfdCBnZnApXG4gXHRuZXdsZW4gPSBuZXdvZmYgJiM0MzsgbmZfY3RfZXh0X3R5cGVfbGVuW2lkXTtcbiBcbiBcdGFsbG9jID0gbWF4KG5ld2xlbiwgTkZfQ1RfRVhUX1BSRUFMTE9DKTtcbi1cdG5ldyA9IGtyZWFsbG9jKGN0LVx1MDAzZWV4dCwgYWxsb2MsIGdmcCk7XG4tXHRpZiAoIW5ldylcbi1cdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmNlIGFuIGV4cGVjdGF0aW9uIGlzIGxpbmtlZCwgaXRzIGxpc3Qgbm9kZSBwb2ludHMgYmFjayB0byB0aGVcbiYjNDM7XHQgKiBobGlzdCBoZWFkIGluIHRoZSBoZWxwZXIgZXh0ZW5zaW9uLiBSZXNlcnZlIGFsbCBhdmFpbGFibGUgZXh0ZW5zaW9uXG4mIzQzO1x0ICogc3BhY2UgZm9yIHRoZSBoZWxwZXIgYW5kIGRvIG5vdCBtb3ZlIGl0IGFmdGVyd2FyZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3QtXHUwMDNlZXh0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBfX25mX2N0X2V4dF9leGlzdChjdC1cdTAwM2VleHQsIE5GX0NUX0VYVF9IRUxQRVIpKSB7XG4mIzQzO1x0XHRuZXcgPSBjdC1cdTAwM2VleHQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChpZCA9PSBORl9DVF9FWFRfSEVMUEVSKVxuJiM0MztcdFx0XHRhbGxvYyA9IFU4X01BWDtcbiYjNDM7XHRcdG5ldyA9IGtyZWFsbG9jKGN0LVx1MDAzZWV4dCwgYWxsb2MsIGdmcCk7XG4mIzQzO1x0XHRpZiAoIW5ldylcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFjdC1cdTAwM2VleHQpXG4gXHRcdG1lbXNldChuZXctXHUwMDNlb2Zmc2V0LCAwLCBzaXplb2YobmV3LVx1MDAzZW9mZnNldCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORlRfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9DVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2N0X2V4dF9hZGQmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2V4dF9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2N0X2V4dF9hZGRgIHRvIHByZXZlbnQgcmVhbGxvY2F0aW5nIHRoZSBjb25udHJhY2sgZXh0ZW5zaW9uIHNwYWNlIGlmIGEgaGVscGVyIGV4dGVuc2lvbiAoYE5GX0NUX0VYVF9IRUxQRVJgKSBpcyBhbHJlYWR5IHByZXNlbnQsIGFuZCB0byByZXNlcnZlIG1heGltdW0gc3BhY2UgKGBVOF9NQVhgKSB3aGVuIGFkZGluZyBhIGhlbHBlciBleHRlbnNpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubnRyYWNrIGxvZ2ljLiBJdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFkZGluZyBjb25udHJhY2sgaGVscGVycyB2aWEgbmV0bGluaywgbmZ0YWJsZXMsIG9yIGlwdGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWEwODMwM2JmNzVjODFmYjZmMGU3MjEyODYxN2YxMmNlYTY2NmM1ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMjE6MzM6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jCmluZGV4IDBkYTEwNWUxZGVkOTMuLjE0MjE5NDRhMzAwMzUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jCkBAIC0xMTIsOSAmIzQzOzExMiwyMSBAQCB2b2lkICpuZl9jdF9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBuZl9jdF9leHRfaWQgaWQsIGdmcF90IGdmcCkKIAluZXdsZW4gPSBuZXdvZmYgJiM0MzsgbmZfY3RfZXh0X3R5cGVfbGVuW2lkXTsKIAogCWFsbG9jID0gbWF4KG5ld2xlbiwgTkZfQ1RfRVhUX1BSRUFMTE9DKTsKLQluZXcgPSBrcmVhbGxvYyhjdC0mZ3Q7ZXh0LCBhbGxvYywgZ2ZwKTsKLQlpZiAoIW5ldykKLQkJcmV0dXJuIE5VTEw7CiYjNDM7CS8qCiYjNDM7CSAqIE9uY2UgYW4gZXhwZWN0YXRpb24gaXMgbGlua2VkLCBpdHMgbGlzdCBub2RlIHBvaW50cyBiYWNrIHRvIHRoZQomIzQzOwkgKiBobGlzdCBoZWFkIGluIHRoZSBoZWxwZXIgZXh0ZW5zaW9uLiBSZXNlcnZlIGFsbCBhdmFpbGFibGUgZXh0ZW5zaW9uCiYjNDM7CSAqIHNwYWNlIGZvciB0aGUgaGVscGVyIGFuZCBkbyBub3QgbW92ZSBpdCBhZnRlcndhcmQuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3QtJmd0O2V4dCAmYW1wOyZhbXA7CiYjNDM7CSAgICBfX25mX2N0X2V4dF9leGlzdChjdC0mZ3Q7ZXh0LCBORl9DVF9FWFRfSEVMUEVSKSkgewomIzQzOwkJbmV3ID0gY3QtJmd0O2V4dDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChpZCA9PSBORl9DVF9FWFRfSEVMUEVSKQomIzQzOwkJCWFsbG9jID0gVThfTUFYOwomIzQzOwkJbmV3ID0ga3JlYWxsb2MoY3QtJmd0O2V4dCwgYWxsb2MsIGdmcCk7CiYjNDM7CQlpZiAoIW5ldykKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCiAJaWYgKCFjdC0mZ3Q7ZXh0KQogCQltZW1zZXQobmV3LSZndDtvZmZzZXQsIDAsIHNpemVvZihuZXctJmd0O29mZnNldCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEV4dGVuc2lvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSB0YXJnZXRpbmcgdGhlIGBuZl9jdF9leHRfYWRkYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlIGNydXggb2YgdGhlIG1vZGlmaWNhdGlvbiByZXZvbHZlcyBhcm91bmQgaG93IHdlIGhhbmRsZSB0aGUgYE5GX0NUX0VYVF9IRUxQRVJgIGV4dGVuc2lvbiBhbmQgdGhlIHVzZSBvZiBga3JlYWxsb2NgLiBUaGUgZ29hbCBpcyB0byBiZSBtb3JlIGVmZmljaWVudCB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGhlbHBlcnMuCgpFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWFsbG9jYXRpb24gb2YgYGN0LSZndDtleHRgIGlmIGEgYE5GX0NUX0VYVF9IRUxQRVJgIGV4dGVuc2lvbiBhbHJlYWR5IGV4aXN0cy4gU21hcnQuIEFuZCwgd2hlbiBgaWRgIGlzIGluZGVlZCBgTkZfQ1RfRVhUX0hFTFBFUmAsIGl0JiMzOTtzIHByZS1hbGxvY2F0aW5nIGBVOF9NQVhgICgyNTUpIGJ5dGVzLiBUaGlzIGlzIGxpa2VseSB0byByZXNlcnZlIGFsbCBhdmFpbGFibGUgZXh0ZW5zaW9uIHNwYWNlLCBsaWtlbHkgd2l0aCBhIGRlc2lnbiB0byBhdm9pZCBydW5uaW5nIG91dCBvZiBzcGFjZSwgYW5kIGhvcGVmdWxseSByZWR1Y2UgZnJhZ21lbnRhdGlvbi4KCk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBkb3VibGUtY2hlY2sgYG5mX2N0X2V4dF9hZGRgIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgTkZfQ1RfRVhUX0hFTFBFUmAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuIFllYWgsIHRoaXMgYWxsIHNlZW1zIGZ1bmN0aW9uYWxseSBzb3VuZCBhbmQgcmVhY2hhYmxlLCB0aGVyZSYjMzk7cyBubyBnbGFyaW5nIHJlZCBmbGFncy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGVuYWJsZSB0aGlzLiBJdCBsb29rcyBsaWtlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuY2AgaXMgcGFydCBvZiBgTkZfQ09OTlRSQUNLYCwgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGF0IGFuZCBtb3ZlIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfZXh0X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jPTMxOT1ib29sIG5mX2N0X2VjYWNoZV9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgdTE2IGN0bWFzaywgdTE2IGV4cG1hc2ssIGdmcF90IGdmcClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuYy0zNDUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuYzozNDY6XHRlID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX0VDQUNIRSwgZ2ZwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jLTM0Ny1cdGlmIChlKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM9NTc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgdG90YWxfZXh0ZW5zaW9uX3NpemUodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYy04OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jOjkwOnZvaWQgKm5mX2N0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIG5mX2N0X2V4dF9pZCBpZCwgZ2ZwX3QgZ2ZwKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtOTEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jLTE0MC19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYzoxNDE6RVhQT1JUX1NZTUJPTChuZl9jdF9leHRfYWRkKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xODM9bmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTg2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTg3Olx0aGVscCA9IG5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9IRUxQRVIsIGdmcCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xODgtXHRpZiAoaGVscCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYz00MzQ9Y29ubnRyYWNrX3BwdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNDU4LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jOjQ1OTpcdFx0aWYgKCFuYXQgXHUwMDI2XHUwMDI2ICFuZl9jdF9leHRfYWRkKGN0LCBORl9DVF9FWFRfTkFULCBHRlBfQVRPTUlDKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy00NjAtXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTc0NT1zdHJ1Y3QgbmZfY29ubl9uYXQgKm5mX2N0X25hdF9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzUxLVx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjc1MjpcdFx0bmF0ID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX05BVCwgR0ZQX0FUT01JQyk7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBuZl9jdF9leHRfYWRkYCBVc2FnZSBhbmQgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYG5mX2N0X2V4dF9hZGRgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGJlaW5nIHVzZWQgYnkgKm11bHRpcGxlKiBtb2R1bGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGJ1aWxkLXN5c3RlbSBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqZW5hYmxpbmcqIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmaWxlLCBgbmZfY29ubnRyYWNrX2V4dGVuZC5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGFuZCB1bHRpbWF0ZWx5LCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBjb21lIGludG8gcGxheS4KCk15IGltbWVkaWF0ZSBhY3Rpb24gd2lsbCBiZSB0byBkZWx2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVuczsgaXQmIzM5O2xsIHBvaW50IG1lIHRvIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBjb21waWxhdGlvbiBvZiB0aGF0IHNwZWNpZmljIG1vZHVsZSBhbmQgdGh1cywgdGhlIGF2YWlsYWJpbGl0eSBvZiBgbmZfY3RfZXh0X2FkZGAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdGllZCB0byBzb21lIGBDT05GSUdfYCBvcHRpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYG5mX2Nvbm50cmFja19leHRlbmQub2AgaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBLbm93aW5nICp0aGF0KiB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyB1c2FnZSBjb250ZXh0IGFuZCB0aGUgc2NlbmFyaW9zIGluIHdoaWNoIGl0JiMzOTtzIGF2YWlsYWJsZS4gTm93LCBJJiMzOTttIG9mZiB0byB0aGUgTWFrZWZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2V4dGVuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT01PW5mX2Nvbm50cmFjay15XHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNy1cdFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4Olx0XHQgICBuZl9jb25udHJhY2tfZXh0ZW5kLm8gbmZfY29ubnRyYWNrX2FjY3QubyBuZl9jb25udHJhY2tfc2VxYWRqLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYG5mX2Nvbm50cmFja2AgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIGBuZl9jb25udHJhY2steWAsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGFjdHVhbGx5ICplbmFibGVzKiBgbmZfY29ubnRyYWNrYCBpbiB0aGUgZmlyc3QgcGxhY2U/JiMzNDsgSXQmIzM5O3Mgbm90IGVub3VnaCB0byBrbm93IHRoZSBjb21wb25lbnQgZXhpc3RzOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIHNldHRpbmcsIGxpa2VseSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGJyaW5ncyB0aGlzIGNydWNpYWwgcGllY2Ugb2YgdGhlIG5ldHdvcmtpbmcgcHV6emxlIGludG8gcGxheS4gS25vd2luZyB0aGlzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBpbnRvIGhvdyBpdHMgYWN0aXZhdGlvbiBpcyBjb250cm9sbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFjay15JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSAmIzQzOz0gbmZuZXRsaW5rLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTpuZl9jb25udHJhY2steVx0Oj0gbmZfY29ubnRyYWNrX2NvcmUubyBuZl9jb25udHJhY2tfc3RhbmRhbG9uZS5vIG5mX2Nvbm50cmFja19leHBlY3QubyBuZl9jb25udHJhY2tfaGVscGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNi1cdFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgc3BlY2lmaWMgTWFrZWZpbGUgdGFzazoKCioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbXkgaW50ZXJuYWwgY2hlY2tsaXN0IGhhcyBmbGFnZ2VkIHNvbWV0aGluZyB0aGF0IG5lZWRzIGF0dGVudGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCB3aGljaCBJIGtub3cgaXMgY3J1Y2lhbCBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBgb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSylgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAuIFRoaXMgaXMgdGhlIGZpbGUgdGhhdCBnb3Zlcm5zIGhvdyB0aG9zZSBOZXRmaWx0ZXIgbW9kdWxlcyBhcmUgYnVpbHQgYW5kIGluY2x1ZGVkLiBTbywgSSBuZWVkIHRvIGdldCBpbiB0aGVyZSBhbmQgc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gZGljdGF0ZXMgd2hldGhlciB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgYSBzdGFuZGFyZCBhcHByb2FjaCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSwgYmVjYXVzZSBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGZvdW5kYXRpb25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LKSAmIzQzOz0gbmZuZXRsaW5rX2hvb2sub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzMtIyBjb25uZWN0aW9uIHRyYWNraW5nXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICYjNDM7PSBuZl9jb25udHJhY2sub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zNS1cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTQyPW5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00My1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREEpICYjNDM7PSBuZl9jb25udHJhY2tfYW1hbmRhLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICYjNDM7PSBuZl9jb25udHJhY2tfZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSAmIzQzOz0gbmZfY29ubnRyYWNrX2gzMjMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NzpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgJiM0Mzs9IG5mX2Nvbm50cmFja19pcmMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0JST0FEQ0FTVCkgJiM0Mzs9IG5mX2Nvbm50cmFja19icm9hZGNhc3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMpICYjNDM7PSBuZl9jb25udHJhY2tfbmV0Ymlvc19ucy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUwOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU05NUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19zbm1wLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19QUFRQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3BwdHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MjpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUpICYjNDM7PSBuZl9jb25udHJhY2tfc2FuZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUzOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU0lQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3NpcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU0Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja190ZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgdGhpbmtpbmcgbGlrZSBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXI6CgoqKkRlbHZpbmcgaW50byB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBFeHRlbnNpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29ubmVjdGlvbiB0cmFja2luZywgc3BlY2lmaWNhbGx5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZm91bmRhdGlvbiB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUuIEkgc2VlIGEgcGF0Y2ggdGhhdCYjMzk7cyBnb3QgbXkgYXR0ZW50aW9uLCBpdCBsb29rcyBsaWtlIHRoaXMgb25lIHRvdWNoZXMgYG5mX2N0X2V4dF9hZGRgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmNgLiBUaGF0IGZpbGUmIzM5O3MgZ290IHRoZSBsb3dkb3duIG9uIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGV4dGVuZGVkLCBhbmQgYG5mX2N0X2V4dF9hZGRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gZm9yIGFkZGluZyB0aGVzZSBleHRlbnNpb25zLgoKVGhlIHJlYWwgbWVhdCBvZiB0aGUgbWF0dGVyIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgbmV3IGxvZ2ljIHRvIGRlYWwgd2l0aCBgTkZfQ1RfRVhUX0hFTFBFUmAuIE9rYXksIGBORl9DVF9FWFRfSEVMUEVSYC4uLiB0aGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IGhhbmRsaW5nIGFwcGxpY2F0aW9uIGxheWVyIGhlbHBlciBtb2R1bGVzIGluIHNvbWUgd2F5IHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFyZWEgZm9yIGltcHJvdmluZyBzdGF0ZWZ1bCBpbnNwZWN0aW9uLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgaXMgZ29pbmcgdG8gcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBgbmZfY3RfZXh0X2FkZGAgd2l0aCB0aGUgYE5GX0NUX0VYVF9IRUxQRVJgIGZsYWcgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQuIEtub3dpbmcgd2hpY2ggY2FsbCBzaXRlcyBhcmUgbWFraW5nIHRoZXNlIGFkZGl0aW9ucyB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGltcGFjdCBhbmQgcG9zc2libGUgc2lkZSBlZmZlY3RzIG9mIHRoaXMgcGF0Y2guIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2V4dF9hZGQuKk5GX0NUX0VYVF9IRUxQRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xODM9bmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTg2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTg3Olx0aGVscCA9IG5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9IRUxQRVIsIGdmcCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xODgtXHRpZiAoaGVscCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODQ4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBGdW5jdGlvbiBDYWxsIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZl9jdF9oZWxwZXJfZXh0X2FkZGAuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBsYXlzIGEga2V5IHJvbGUgaW4gYWRkaW5nIGV4dGVuc2lvbnMgb3IgaGVscGVycyB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29udGV4dC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGhpZXJhcmNoeSB0byBmdWxseSBncmFzcCBpdHMgb3BlcmF0aW9uYWwgY29udGV4dCB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBLbm93aW5nIHRoZSB1cHN0cmVhbSBjYWxsZXJzIHdpbGwgdGVsbCBtZSAqd2h5KiBhbmQgKmhvdyogYG5mX2N0X2hlbHBlcl9leHRfYWRkYCBpcyBiZWluZyBpbnZva2VkLiBUaGlzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgYnJvYWRlciBzeXN0ZW0gZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfaGVscGVyX2V4dF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTc1ND1pbml0X2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xODE5LVx0XHRcdGlmIChhc3NpZ25faGVscGVyKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTgyMDpcdFx0XHRcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTgyMS1cdFx0XHRcdGlmIChoZWxwIFx1MDAyNlx1MDAyNiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2YXNzaWduX2hlbHBlci1cdTAwM2VjdF9yZWZjbnQpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTE4Mj1zdHJ1Y3QgbmZfY29ubl9oZWxwICpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE4MzpuZl9jdF9oZWxwZXJfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGdmcF90IGdmcClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE4NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTkzLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE5NDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfZXh0X2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xOTY9aW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yMjYtXHRpZiAoaGVscCA9PSBOVUxMKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoyMjc6XHRcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgZmxhZ3MpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMjI4LVx0XHRpZiAoaGVscCA9PSBOVUxMKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yMjIyPWN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjI3NS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyMjc2Olx0XHRcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjI3Ny1cdFx0XHRpZiAoaGVscCA9PSBOVUxMKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmM9ODU9aW50IG5mX2N0X2FkZF9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpuYW1lLCB1OCBmYW1pbHksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtOTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYzo5NjpcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy05Ny1cdGlmICghaGVscCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTExMj1zdGF0aWMgdm9pZCBuZnRfY3RfaGVscGVyX29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMTQ0LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMTQ1Olx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTE0Ni1cdGlmIChoZWxwIFx1MDAyNlx1MDAyNiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2dG9fYXNzaWduLVx1MDAzZWN0X3JlZmNudCkpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEzMTE9c3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMzMS1cdGlmICghaGVscClcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTMzMjpcdFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMzMy1cdGlmICghaGVscCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYz03ND14dF9jdF9zZXRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqaGVscGVyX25hbWUsXG4tLVxubmV0L25ldGZpbHRlci94dF9DVC5jLTkzLVxubmV0L25ldGZpbHRlci94dF9DVC5jOjk0Olx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTtcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy05NS1cdGlmIChoZWxwID09IE5VTEwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDUyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2ggb24gYG5mX2N0X2V4dF9hZGRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdHMgbW9kaWZpY2F0aW9uIG9mIGBuZl9jdF9leHRfYWRkYC4gVGhpcyBmdW5jdGlvbiwgSSBzZWUsIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSBjb25udHJhY2sgc3lzdGVtLiBJdOKAmXMgY2FsbGVkIGZyb20gc2V2ZXJhbCBrZXkgYXJlYXMgaW5jbHVkaW5nIGBpbml0X2Nvbm50cmFja2AsIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCwgYW5kIHZhcmlvdXMgbmV0bGluayBhbmQgTmV0ZmlsdGVyIHRhYmxlIGZ1bmN0aW9ucyAoYGN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrYCwgYG5mdF9jdF9oZWxwZXJfb2JqX2V2YWxgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAsIGB4dF9jdF9zZXRfaGVscGVyYCksIGluZGljYXRpbmcgaXRzIGltcG9ydGFuY2UgaW4gaGVscGVyIGFzc2lnbm1lbnQgYW5kIGNvbm50cmFjayBjcmVhdGlvbi4KCkZpcnN0LCBsZXQmIzM5O3MgbmFpbCBkb3duIGFueSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBpcyBjbGVhcmx5IGEgbXVzdCwgb2J2aW91c2x5LiBJJiMzOTtsbCBuZWVkIGBDT05GSUdfTkVURklMVEVSX05FVExJTktgIHRvIGJlIGVuYWJsZWQgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBgY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2tgLCBgQ09ORklHX05GX1RBQkxFU2AgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBgbmZ0X2N0YCwgYENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NUYCBmb3IgYHh0X0NUYC4gQW5kIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBDT05GSUdfT1BFTlZTV0lUQ0hgIHRvIGJlIGVuYWJsZWQgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBgbmZfY29ubnRyYWNrX292cy5jYC4KCk5vdywgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgYG5mX2N0X2V4dF9hZGRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLCB3aGljaCBhZGRzIGEgbmV3IGNvbm50cmFjayBleHRlbnNpb24uIFRoZSBzaWduaWZpY2FudCBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZCBhcmUgYG5mX2N0X2V4dF9hZGRgLCBgbmZfY3RfaGVscGVyX2V4dF9hZGRgLCBhbmQgdGhlIHZhcmlvdXMgcGxhY2VzIHdoZXJlIHRoZXkgYXJlIGNhbGxlZC4KClRoZSBxdWVzdGlvbiB0aGVuIGlzLCBpcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IEdpdmVuIHRoYXQgYG5mX2N0X2V4dF9hZGRgIGlzIGludm9rZWQgd2hlbiBhIG5ldyBjb25udHJhY2sgZXh0ZW5zaW9uIGlzIGFkZGVkLCB0aGlzIGdlbmVyYWxseSBoYXBwZW5zIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLCBub3Qgb24gYSBwZXItcGFja2V0IGJhc2lzLCBhbmQgdGhhdCYjMzk7cyBnb29kIG5ld3MuIFRoYXQgbWFrZXMgaXQgbW9yZSBtYW5hZ2VhYmxlIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgdHJpZ2dlcmVkIG1pbGxpb25zIG9mIHRpbWVzIGV2ZXJ5IHNlY29uZCwgaWYgaXRzIHBlci1jb25uZWN0aW9uLgoKTm93IEkgbmVlZCB0byBhbHNvIGNoZWNrIGFib3V0IGBDT05GSUdfTkZfQ09OTlRSQUNLX0hFTFBFUmAsIHRvIG1ha2Ugc3VyZSBpdHMgYWxzbyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB6b25lcyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0O1N1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cdHRyaXN0YXRlIFwmIzM0O1NOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7UFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cdHRyaXN0YXRlIFwmIzM0O1NBTkUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXHR0cmlzdGF0ZSBcJiMzNDtURlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25udHJhY2sgSGVscGVyIENvbmZ1c2lvbioqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGZvciBgQ09ORklHX05GX0NPTk5UUkFDS19IRUxQRVJgLCBidXQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBleGlzdCBhcyBhIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMsICYjMzQ7QWhhISBJdCYjMzk7cyBwcm9iYWJseSBqdXN0IGluY2x1ZGVkIHdpdGhpbiBgQ09ORklHX05GX0NPTk5UUkFDS2AuJiMzNDsKCkp1c3QgdG8gY29uZmlybSwgSSB3YXMgZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCB0byBzZWUgaWYgdGhlcmUgd2FzIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBJIGFscmVhZHkgZGlkIGEgcXVpY2sgc2NhbiBvZiB0aGUgYE1ha2VmaWxlYCBhbmQgaXQmIzM5O3MgYnVpbHQtaW4gKCBgbmZfY29ubnRyYWNrLXlgKS4KClNvLCBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19ORl9DT05OVFJBQ0tgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG90aGVyIG9wdGlvbnMgb3IgZmVhdHVyZXMgYXJlIHRpZWQgdG8gaXQuIEdvdHRhIGZpZ3VyZSBvdXQgdGhlIHdob2xlIHBpY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZSBzcGVjaWZpYyBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbnMsIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGFyb3VuZCBsaW5lIDgyOyBob3BlZnVsbHksIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4gYXJlIGxvY2F0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XHQgIGZvciBwYXNzaXZlIE9TIGZpbmdlcnByaW50IHZpYSBORk5FVExJTksuXG4gIDgxOlx0XG4gIDgyOlx0Y29uZmlnIE5GX0NPTk5UUkFDS1xuICA4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuICA4NDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gIDg1Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbiAgODY6XHRcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBJUFY2ICE9IG5cbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWRcbiAgODk6XHRcdCAgdGhyb3VnaCB5b3VyIG1hY2hpbmUsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHJlbGF0ZWRcbiAgOTA6XHRcdCAgaW50byBjb25uZWN0aW9ucy5cbiAgOTE6XHRcbiAgOTI6XHRcdCAgVGhpcyBpcyByZXF1aXJlZCB0byBkbyBNYXNxdWVyYWRpbmcgb3Igb3RoZXIga2luZHMgb2YgTmV0d29ya1xuICA5MzpcdFx0ICBBZGRyZXNzIFRyYW5zbGF0aW9uLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBlbmhhbmNlIHBhY2tldFxuICA5NDpcdFx0ICBmaWx0ZXJpbmcgKHNlZSBgQ29ubmVjdGlvbiBzdGF0ZSBtYXRjaCBzdXBwb3J0JiMzOTsgYmVsb3cpLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgOTc6XHRcbiAgOTg6XHRjb25maWcgTkZfTE9HX1NZU0xPR1xuICA5OTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3lzbG9nIHBhY2tldCBsb2dnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTY1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIE9wdGltaXphdGlvbiAtIFRoaW5raW5nIE91dCBMb3VkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBjb25maWd1cmluZyB0aGlzIGtlcm5lbC4gYE5GX0NPTk5UUkFDS2Agc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCBvbmx5IGRlcGVuZHMgb24gYE5FVEZJTFRFUmAsIHdoaWNoIGlzIHRoZSBjb3JlLCBzbyBlbmFibGluZyB0aGF0IHNob3VsZCBiZSBmaW5lLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpCdXQsIGhhbmcgb24sIGl0JiMzOTtzIHdvcnRoIGNoZWNraW5nIGlmIHRoZXJlIGFyZSAqb3RoZXIqIHBvdGVudGlhbGx5IHVzZWZ1bCBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBlbmFibGUgYWxvbmdzaWRlIGl0LiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCB5ZXMsIHRoZSBwcm90b2NvbCBoZWxwZXJzISBgTkZfQ09OTlRSQUNLX0ZUUGAsIGBORl9DT05OVFJBQ0tfSVJDYCwgYWxsIHRoZXNlIGd1eXMuIFRoZXkgdXRpbGl6ZSBgTkZfQ1RfRVhUX0hFTFBFUmAsIHNvIGluY2x1ZGluZyB0aGVzZSBzaG91bGQgYnJpbmcgdGhhdCBmdW5jdGlvbmFsaXR5IGluLiBJIHNob3VsZCBwcm9iYWJseSBhZGQgdGhlbSBpbiB0byBnZXQgaXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZW5hYmxlIGFsbCB0aGUgcHJvdG9jb2wgaGVscGVyczogYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAsIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AsIGBORl9DT05OVFJBQ0tfU05NUGAsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfVEZUUGAuIE5vLCB3YWl0Li4uIHRoYXQgbWlnaHQgYmUgb3ZlcmtpbGwuIEkgYmV0IGBORl9DT05OVFJBQ0tfRlRQYCBhbmQgYE5GX0NPTk5UUkFDS19JUkNgIGFsb25lIHdpbGwgYmUgZW5vdWdoIHRvIHRyaWdnZXIgdGhlIGhlbHBlciBsb2dpYyBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFNpbXBsaWZpY2F0aW9uIGlzIGtleS4KCkFuZCwgb2YgY291cnNlLCBJIG5lZWQgdG8gZW5hYmxlIGBORl9UQUJMRVNgIGFuZCBgTkZUX0NUYCB0byBnZXQgYG5mdF9jdF9oZWxwZXJfb2JqX2V2YWxgIGdvaW5nLiBUaGF0IHNob3VsZCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBsb2FkZWQuIEdvdHRhIGRvdWJsZSBjaGVjayB0aGF0IGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZvciBgTkZUX0NUYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDg1PWNvbmZpZyBORlRfTlVNR0VOXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzQxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBORVRGSUxURVJfWFRfVEFSR0VUX0NUYCBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzZWUuLi4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gVGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgTmV0ZmlsdGVyLXNwZWNpZmljIG9wdGlvbnMgYXJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IHVwIGFuZCBzZWFyY2ggZm9yIHRoYXQgc3ltYm9sLiBIb3BlZnVsbHksIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIEkgY2FuIHF1aWNrbHkgZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyBlbmFibGVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGZvciBpdHMgaW5jbHVzaW9uLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGxvb2t1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTg0OT1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04NjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODYxOmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODYyLVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtDVFwmIzM0OyB0YXJnZXQgc3VwcG9ydCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjcwCgkJCQkJCQlvdXRwdXQ6IDE3OAoJCQkJCQkJdGhvdWdodHM6IDU2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBFeHRlbnNpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHN1Z2dlc3RlZCBjb25maWd1cmF0aW9ucyDigJMgYE5GX0NPTk5UUkFDS2AsIGBORl9DT05OVFJBQ0tfRlRQYCwgYE5GVF9DVGAsIGFuZCBgTkVURklMVEVSX1hUX1RBUkdFVF9DVGAg4oCTIGFyZSBhbGwgcmVsZXZhbnQgYW5kIGxpa2VseSBuZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4KClJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmLCBJIHNlZSB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyB3aXRoaW4gYG5mX2N0X2V4dF9hZGRgLiBUaGUgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIGFsbG9jYXRpb24gYW5kIHJlYWxsb2NhdGlvbiBvZiB0aGUgY29ubnRyYWNrIGV4dGVuc2lvbiBzcGFjZSAoYGN0LSZndDtleHRgKS4gVGhlIGNvZGUgbm93IGNoZWNrcyBpZiB0aGUgYE5GX0NUX0VYVF9IRUxQRVJgIGV4dGVuc2lvbiBhbHJlYWR5IGV4aXN0cy4gSWYgaXQgKmRvZXMqLCB0aGUgcGF0Y2ggcHJldmVudHMgYW55IGZ1cnRoZXIgYGtyZWFsbG9jYCBjYWxscywgZWZmZWN0aXZlbHkgZnJlZXppbmcgdGhlIGV4aXN0aW5nIGV4dGVuc2lvbi4gQ29udmVyc2VseSwgaWYgd2UmIzM5O3JlIGFkZGluZyB0aGUgaGVscGVyIGV4dGVuc2lvbiAoYGlkID09IE5GX0NUX0VYVF9IRUxQRVJgKSwgdGhlIGFsbG9jYXRpb24gc2l6ZSBpcyBmb3JjZWQgdG8gdGhlIG1heGltdW0gKGBVOF9NQVhgKS4gVGhpcyBpcyBhIHNvbGlkLCB0YXJnZXRlZCBhcHByb2FjaCB0byBtYW5hZ2luZyBoZWxwZXIgZXh0ZW5zaW9uIG1lbW9yeS4KCkZ1bmN0aW9uYWxseSwgdGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIHRocm91Z2ggdmFyaW91cyBjb25udHJhY2sgaGVscGVyIGFkZGl0aW9uIG1ldGhvZHMg4oCTIHdoZXRoZXIgaXQmIzM5O3MgdGhyb3VnaCBuZXRsaW5rLCBuZnRhYmxlcywgb3IgaXB0YWJsZXMsIHZpYSB0aGUgYG5mX2N0X2V4dF9hZGRgIGZ1bmN0aW9uLgoKTm93LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSBzeW1ib2xzIGlzIGluIG9yZGVyLiBBaGEhIGBuZl9jdF9leHRfYWRkYCBpcyBleHBvcnRlZCAoYEVYUE9SVF9TWU1CT0xgKSwgbWFraW5nIGl0IHVuaXZlcnNhbGx5IGFjY2Vzc2libGUsIGFuZCBgbmZfY3RfaGVscGVyX2V4dF9hZGRgIGlzIGV4cG9ydGVkIGFzIHdlbGwgKGBFWFBPUlRfU1lNQk9MX0dQTGApLiBUaGF0IGNvbmZpcm1zIGl0cyB2aXNpYmlsaXR5IGFuZCB1dGlsaXR5LgoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBzdW1tYXJ5IGNvdmVycyB0aGUgaW1wb3J0YW50IHBvaW50cy4gTGV0JiMzOTtzIHJldHVybiB0aGUgZmluZGluZ3MgdXNpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfRlRQJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfY3RfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtuZl9jdF9oZWxwZXJfZXh0X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmZfY3RfZXh0X2FkZGAgdG8gcHJldmVudCByZWFsbG9jYXRpbmcgdGhlIGNvbm50cmFjayBleHRlbnNpb24gc3BhY2UgaWYgYSBoZWxwZXIgZXh0ZW5zaW9uIChgTkZfQ1RfRVhUX0hFTFBFUmApIGlzIGFscmVhZHkgcHJlc2VudCwgYW5kIHRvIHJlc2VydmUgbWF4aW11bSBzcGFjZSAoYFU4X01BWGApIHdoZW4gYWRkaW5nIGEgaGVscGVyIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25udHJhY2sgbG9naWMuIEl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIGNvbm50cmFjayBoZWxwZXJzIHZpYSBuZXRsaW5rLCBuZnRhYmxlcywgb3IgaXB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfRlRQJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfY3RfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtuZl9jdF9oZWxwZXJfZXh0X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmZfY3RfZXh0X2FkZGAgdG8gcHJldmVudCByZWFsbG9jYXRpbmcgdGhlIGNvbm50cmFjayBleHRlbnNpb24gc3BhY2UgaWYgYSBoZWxwZXIgZXh0ZW5zaW9uIChgTkZfQ1RfRVhUX0hFTFBFUmApIGlzIGFscmVhZHkgcHJlc2VudCwgYW5kIHRvIHJlc2VydmUgbWF4aW11bSBzcGFjZSAoYFU4X01BWGApIHdoZW4gYWRkaW5nIGEgaGVscGVyIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25udHJhY2sgbG9naWMuIEl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIGNvbm50cmFjayBoZWxwZXJzIHZpYSBuZXRsaW5rLCBuZnRhYmxlcywgb3IgaXB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzowNS4yNjU0NzU1MTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjkyMzM0NTMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIixcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2N0X2V4dF9hZGRcIixcbiAgICBcIm5mX2N0X2hlbHBlcl9leHRfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2N0X2V4dF9hZGRgIHRvIHByZXZlbnQgcmVhbGxvY2F0aW5nIHRoZSBjb25udHJhY2sgZXh0ZW5zaW9uIHNwYWNlIGlmIGEgaGVscGVyIGV4dGVuc2lvbiAoYE5GX0NUX0VYVF9IRUxQRVJgKSBpcyBhbHJlYWR5IHByZXNlbnQsIGFuZCB0byByZXNlcnZlIG1heGltdW0gc3BhY2UgKGBVOF9NQVhgKSB3aGVuIGFkZGluZyBhIGhlbHBlciBleHRlbnNpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubnRyYWNrIGxvZ2ljLiBJdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFkZGluZyBjb25udHJhY2sgaGVscGVycyB2aWEgbmV0bGluaywgbmZ0YWJsZXMsIG9yIGlwdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzowNS4yNjU0ODEyNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODUyMzk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFhMDgzMDNiZjc1YzgxZmI2ZjBlNzIxMjg2MTdmMTJjZWE2NjZjNWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAyMTozMzowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jXFxuaW5kZXggMGRhMTA1ZTFkZWQ5My4uMTQyMTk0NGEzMDAzNSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jXFxuQEAgLTExMiw5ICsxMTIsMjEgQEAgdm9pZCAqbmZfY3RfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gbmZfY3RfZXh0X2lkIGlkLCBnZnBfdCBnZnApXFxuIFxcdG5ld2xlbiA9IG5ld29mZiArIG5mX2N0X2V4dF90eXBlX2xlbltpZF07XFxuIFxcbiBcXHRhbGxvYyA9IG1heChuZXdsZW4sIE5GX0NUX0VYVF9QUkVBTExPQyk7XFxuLVxcdG5ldyA9IGtyZWFsbG9jKGN0LVxcdTAwM2VleHQsIGFsbG9jLCBnZnApO1xcbi1cXHRpZiAoIW5ldylcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdC8qXFxuK1xcdCAqIE9uY2UgYW4gZXhwZWN0YXRpb24gaXMgbGlua2VkLCBpdHMgbGlzdCBub2RlIHBvaW50cyBiYWNrIHRvIHRoZVxcbitcXHQgKiBobGlzdCBoZWFkIGluIHRoZSBoZWxwZXIgZXh0ZW5zaW9uLiBSZXNlcnZlIGFsbCBhdmFpbGFibGUgZXh0ZW5zaW9uXFxuK1xcdCAqIHNwYWNlIGZvciB0aGUgaGVscGVyIGFuZCBkbyBub3QgbW92ZSBpdCBhZnRlcndhcmQuXFxuK1xcdCAqL1xcbitcXHRpZiAoY3QtXFx1MDAzZWV4dCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgX19uZl9jdF9leHRfZXhpc3QoY3QtXFx1MDAzZWV4dCwgTkZfQ1RfRVhUX0hFTFBFUikpIHtcXG4rXFx0XFx0bmV3ID0gY3QtXFx1MDAzZWV4dDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKGlkID09IE5GX0NUX0VYVF9IRUxQRVIpXFxuK1xcdFxcdFxcdGFsbG9jID0gVThfTUFYO1xcbitcXHRcXHRuZXcgPSBrcmVhbGxvYyhjdC1cXHUwMDNlZXh0LCBhbGxvYywgZ2ZwKTtcXG4rXFx0XFx0aWYgKCFuZXcpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIWN0LVxcdTAwM2VleHQpXFxuIFxcdFxcdG1lbXNldChuZXctXFx1MDAzZW9mZnNldCwgMCwgc2l6ZW9mKG5ldy1cXHUwMDNlb2Zmc2V0KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjA1LjY5NTAwNzY0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUyNDkzODA0NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiLFxuICAgIFwiTkZUX0NUXCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY3RfZXh0X2FkZFwiLFxuICAgIFwibmZfY3RfaGVscGVyX2V4dF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZfY3RfZXh0X2FkZGAgdG8gcHJldmVudCByZWFsbG9jYXRpbmcgdGhlIGNvbm50cmFjayBleHRlbnNpb24gc3BhY2UgaWYgYSBoZWxwZXIgZXh0ZW5zaW9uIChgTkZfQ1RfRVhUX0hFTFBFUmApIGlzIGFscmVhZHkgcHJlc2VudCwgYW5kIHRvIHJlc2VydmUgbWF4aW11bSBzcGFjZSAoYFU4X01BWGApIHdoZW4gYWRkaW5nIGEgaGVscGVyIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25udHJhY2sgbG9naWMuIEl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIGNvbm50cmFjayBoZWxwZXJzIHZpYSBuZXRsaW5rLCBuZnRhYmxlcywgb3IgaXB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFhMDgzMDNiZjc1YzgxZmI2ZjBlNzIxMjg2MTdmMTJjZWE2NjZjNWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIxOjMzOjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuY1xuaW5kZXggMGRhMTA1ZTFkZWQ5My4uMTQyMTk0NGEzMDAzNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuY1xuQEAgLTExMiw5ICsxMTIsMjEgQEAgdm9pZCAqbmZfY3RfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gbmZfY3RfZXh0X2lkIGlkLCBnZnBfdCBnZnApXG4gXHRuZXdsZW4gPSBuZXdvZmYgKyBuZl9jdF9leHRfdHlwZV9sZW5baWRdO1xuIFxuIFx0YWxsb2MgPSBtYXgobmV3bGVuLCBORl9DVF9FWFRfUFJFQUxMT0MpO1xuLVx0bmV3ID0ga3JlYWxsb2MoY3QtXHUwMDNlZXh0LCBhbGxvYywgZ2ZwKTtcbi1cdGlmICghbmV3KVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdC8qXG4rXHQgKiBPbmNlIGFuIGV4cGVjdGF0aW9uIGlzIGxpbmtlZCwgaXRzIGxpc3Qgbm9kZSBwb2ludHMgYmFjayB0byB0aGVcbitcdCAqIGhsaXN0IGhlYWQgaW4gdGhlIGhlbHBlciBleHRlbnNpb24uIFJlc2VydmUgYWxsIGF2YWlsYWJsZSBleHRlbnNpb25cbitcdCAqIHNwYWNlIGZvciB0aGUgaGVscGVyIGFuZCBkbyBub3QgbW92ZSBpdCBhZnRlcndhcmQuXG4rXHQgKi9cbitcdGlmIChjdC1cdTAwM2VleHQgXHUwMDI2XHUwMDI2XG4rXHQgICAgX19uZl9jdF9leHRfZXhpc3QoY3QtXHUwMDNlZXh0LCBORl9DVF9FWFRfSEVMUEVSKSkge1xuK1x0XHRuZXcgPSBjdC1cdTAwM2VleHQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoaWQgPT0gTkZfQ1RfRVhUX0hFTFBFUilcbitcdFx0XHRhbGxvYyA9IFU4X01BWDtcbitcdFx0bmV3ID0ga3JlYWxsb2MoY3QtXHUwMDNlZXh0LCBhbGxvYywgZ2ZwKTtcbitcdFx0aWYgKCFuZXcpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4gXG4gXHRpZiAoIWN0LVx1MDAzZWV4dClcbiBcdFx0bWVtc2V0KG5ldy1cdTAwM2VvZmZzZXQsIDAsIHNpemVvZihuZXctXHUwMDNlb2Zmc2V0KSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzowNS42OTUwMDk3MjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDUxNTQyNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEV4dGVuc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgdGFyZ2V0aW5nIHRoZSBgbmZfY3RfZXh0X2FkZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZSBjcnV4IG9mIHRoZSBtb2RpZmljYXRpb24gcmV2b2x2ZXMgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgdGhlIGBORl9DVF9FWFRfSEVMUEVSYCBleHRlbnNpb24gYW5kIHRoZSB1c2Ugb2YgYGtyZWFsbG9jYC4gVGhlIGdvYWwgaXMgdG8gYmUgbW9yZSBlZmZpY2llbnQgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBoZWxwZXJzLlxuXG5Fc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWFsbG9jYXRpb24gb2YgYGN0LVx1MDAzZWV4dGAgaWYgYSBgTkZfQ1RfRVhUX0hFTFBFUmAgZXh0ZW5zaW9uIGFscmVhZHkgZXhpc3RzLiBTbWFydC4gQW5kLCB3aGVuIGBpZGAgaXMgaW5kZWVkIGBORl9DVF9FWFRfSEVMUEVSYCwgaXQncyBwcmUtYWxsb2NhdGluZyBgVThfTUFYYCAoMjU1KSBieXRlcy4gVGhpcyBpcyBsaWtlbHkgdG8gcmVzZXJ2ZSBhbGwgYXZhaWxhYmxlIGV4dGVuc2lvbiBzcGFjZSwgbGlrZWx5IHdpdGggYSBkZXNpZ24gdG8gYXZvaWQgcnVubmluZyBvdXQgb2Ygc3BhY2UsIGFuZCBob3BlZnVsbHkgcmVkdWNlIGZyYWdtZW50YXRpb24uXG5cbk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBkb3VibGUtY2hlY2sgYG5mX2N0X2V4dF9hZGRgIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgTkZfQ1RfRVhUX0hFTFBFUmAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuIFllYWgsIHRoaXMgYWxsIHNlZW1zIGZ1bmN0aW9uYWxseSBzb3VuZCBhbmQgcmVhY2hhYmxlLCB0aGVyZSdzIG5vIGdsYXJpbmcgcmVkIGZsYWdzLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGVuYWJsZSB0aGlzLiBJdCBsb29rcyBsaWtlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuY2AgaXMgcGFydCBvZiBgTkZfQ09OTlRSQUNLYCwgc28gSSdsbCBzdGFydCB3aXRoIHRoYXQgYW5kIG1vdmUgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjEwLjc0NjU1NTg4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDYyNzM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF9leHRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jPTMxOT1ib29sIG5mX2N0X2VjYWNoZV9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgdTE2IGN0bWFzaywgdTE2IGV4cG1hc2ssIGdmcF90IGdmcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jLTM0NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuYzozNDY6XFx0ZSA9IG5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9FQ0FDSEUsIGdmcCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMtMzQ3LVxcdGlmIChlKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYz01Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludCB0b3RhbF9leHRlbnNpb25fc2l6ZSh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtODktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM6OTA6dm9pZCAqbmZfY3RfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gbmZfY3RfZXh0X2lkIGlkLCBnZnBfdCBnZnApXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtOTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtMTQwLX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYzoxNDE6RVhQT1JUX1NZTUJPTChuZl9jdF9leHRfYWRkKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTE4Mz1uZl9jdF9oZWxwZXJfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxODc6XFx0aGVscCA9IG5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9IRUxQRVIsIGdmcCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTg4LVxcdGlmIChoZWxwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmM9NDM0PWNvbm50cmFja19wcHRwX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNDU4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYzo0NTk6XFx0XFx0aWYgKCFuYXQgXFx1MDAyNlxcdTAwMjYgIW5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9OQVQsIEdGUF9BVE9NSUMpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy00NjAtXFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM9NzQ1PXN0cnVjdCBuZl9jb25uX25hdCAqbmZfY3RfbmF0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTc1MS1cXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjc1MjpcXHRcXHRuYXQgPSBuZl9jdF9leHRfYWRkKGN0LCBORl9DVF9FWFRfTkFULCBHRlBfQVRPTUlDKTtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzoxMC44MzcxODg3MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA0MDI1OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZl9jdF9leHRfYWRkYCBVc2FnZSBhbmQgQnVpbGQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgbmZfY3RfZXh0X2FkZGAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBiZWluZyB1c2VkIGJ5ICptdWx0aXBsZSogbW9kdWxlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhpcyBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIGJ1aWxkLXN5c3RlbSBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICplbmFibGluZyogdGhlIHVuZGVybHlpbmcgc291cmNlIGZpbGUsIGBuZl9jb25udHJhY2tfZXh0ZW5kLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbmQgdWx0aW1hdGVseSwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgY29tZSBpbnRvIHBsYXkuXG5cbk15IGltbWVkaWF0ZSBhY3Rpb24gd2lsbCBiZSB0byBkZWx2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVuczsgaXQnbGwgcG9pbnQgbWUgdG8gdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIG9mIHRoYXQgc3BlY2lmaWMgbW9kdWxlIGFuZCB0aHVzLCB0aGUgYXZhaWxhYmlsaXR5IG9mIGBuZl9jdF9leHRfYWRkYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IHRpZWQgdG8gc29tZSBgQ09ORklHX2Agb3B0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGBuZl9jb25udHJhY2tfZXh0ZW5kLm9gIGlzIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gS25vd2luZyAqdGhhdCogd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24ncyB1c2FnZSBjb250ZXh0IGFuZCB0aGUgc2NlbmFyaW9zIGluIHdoaWNoIGl0J3MgYXZhaWxhYmxlLiBOb3csIEknbSBvZmYgdG8gdGhlIE1ha2VmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MTQuMjQxMjE3MzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMjUxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX2V4dGVuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NT1uZl9jb25udHJhY2steVxcdDo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNy1cXHRcXHQgICBuZl9jb25udHJhY2tfcHJvdG9faWNtcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg6XFx0XFx0ICAgbmZfY29ubnRyYWNrX2V4dGVuZC5vIG5mX2Nvbm50cmFja19hY2N0Lm8gbmZfY29ubnRyYWNrX3NlcWFkai5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzoxNC4yOTM0NDcwMTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMxNjIyOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZl9jb25udHJhY2tgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gYG5mX2Nvbm50cmFjay15YCwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBhY3R1YWxseSAqZW5hYmxlcyogYG5mX2Nvbm50cmFja2AgaW4gdGhlIGZpcnN0IHBsYWNlP1wiIEl0J3Mgbm90IGVub3VnaCB0byBrbm93IHRoZSBjb21wb25lbnQgZXhpc3RzOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIHNldHRpbmcsIGxpa2VseSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGJyaW5ncyB0aGlzIGNydWNpYWwgcGllY2Ugb2YgdGhlIG5ldHdvcmtpbmcgcHV6emxlIGludG8gcGxheS4gS25vd2luZyB0aGlzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGludG8gaG93IGl0cyBhY3RpdmF0aW9uIGlzIGNvbnRyb2xsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzoxNy4yMjUwNzQ3MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NTU5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrLXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSArPSBuZm5ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU6bmZfY29ubnRyYWNrLXlcXHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS02LVxcdFxcdCAgIG5mX2Nvbm50cmFja19wcm90by5vIG5mX2Nvbm50cmFja19wcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5vIG5mX2Nvbm50cmFja19wcm90b191ZHAubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjE3LjI4MzYzNTU1MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTA0ODc1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgc3BlY2lmaWMgTWFrZWZpbGUgdGFzazpcblxuKipBbmFseXppbmcgdGhlIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIG15IGludGVybmFsIGNoZWNrbGlzdCBoYXMgZmxhZ2dlZCBzb21ldGhpbmcgdGhhdCBuZWVkcyBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZywgd2hpY2ggSSBrbm93IGlzIGNydWNpYWwgZm9yIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgYG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBUaGlzIGlzIHRoZSBmaWxlIHRoYXQgZ292ZXJucyBob3cgdGhvc2UgTmV0ZmlsdGVyIG1vZHVsZXMgYXJlIGJ1aWx0IGFuZCBpbmNsdWRlZC4gU28sIEkgbmVlZCB0byBnZXQgaW4gdGhlcmUgYW5kIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRpY3RhdGVzIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgb2JqZWN0IGZpbGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIGEgc3RhbmRhcmQgYXBwcm9hY2ggYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGhlcmUsIGJlY2F1c2UgY29ubmVjdGlvbiB0cmFja2luZyBpcyBmb3VuZGF0aW9uYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzoyMC4zOTQxMjU4NzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTgyNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai0uKk5GX0NPTk5UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0spICs9IG5mbmV0bGlua19ob29rLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzMtIyBjb25uZWN0aW9uIHRyYWNraW5nXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLKSArPSBuZl9jb25udHJhY2sub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTQyPW5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDMtXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQSkgKz0gbmZfY29ubnRyYWNrX2FtYW5kYS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgKz0gbmZfY29ubnRyYWNrX2Z0cC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMpICs9IG5mX2Nvbm50cmFja19oMzIzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSVJDKSArPSBuZl9jb25udHJhY2tfaXJjLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfQlJPQURDQVNUKSArPSBuZl9jb25udHJhY2tfYnJvYWRjYXN0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ5Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUykgKz0gbmZfY29ubnRyYWNrX25ldGJpb3NfbnMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTA6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19TTk1QKSArPSBuZl9jb25udHJhY2tfc25tcC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFApICs9IG5mX2Nvbm50cmFja19wcHRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSkgKz0gbmZfY29ubnRyYWNrX3NhbmUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19TSVApICs9IG5mX2Nvbm50cmFja19zaXAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTQ6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19URlRQKSArPSBuZl9jb25udHJhY2tfdGZ0cC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS01NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MjAuNDgwNzE0MzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MTcxNTM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0J3MgZ29pbmcgb24sIHRoaW5raW5nIGxpa2UgYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBFeHRlbnNpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGNvbm5lY3Rpb24gdHJhY2tpbmcsIHNwZWNpZmljYWxseSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYENPTkZJR19ORl9DT05OVFJBQ0tgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZm91bmRhdGlvbiB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBzZWUgYSBwYXRjaCB0aGF0J3MgZ290IG15IGF0dGVudGlvbiwgaXQgbG9va3MgbGlrZSB0aGlzIG9uZSB0b3VjaGVzIGBuZl9jdF9leHRfYWRkYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jYC4gVGhhdCBmaWxlJ3MgZ290IHRoZSBsb3dkb3duIG9uIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGV4dGVuZGVkLCBhbmQgYG5mX2N0X2V4dF9hZGRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gZm9yIGFkZGluZyB0aGVzZSBleHRlbnNpb25zLlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBuZXcgbG9naWMgdG8gZGVhbCB3aXRoIGBORl9DVF9FWFRfSEVMUEVSYC4gT2theSwgYE5GX0NUX0VYVF9IRUxQRVJgLi4uIHRoYXQgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBoYW5kbGluZyBhcHBsaWNhdGlvbiBsYXllciBoZWxwZXIgbW9kdWxlcyBpbiBzb21lIHdheSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBUaGF0J3MgYSBjbGFzc2ljIGFyZWEgZm9yIGltcHJvdmluZyBzdGF0ZWZ1bCBpbnNwZWN0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNoYW5nZSBpcyBnb2luZyB0byByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBjYWxsaW5nIGBuZl9jdF9leHRfYWRkYCB3aXRoIHRoZSBgTkZfQ1RfRVhUX0hFTFBFUmAgZmxhZyBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZC4gS25vd2luZyB3aGljaCBjYWxsIHNpdGVzIGFyZSBtYWtpbmcgdGhlc2UgYWRkaXRpb25zIHdpbGwgYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgaW1wYWN0IGFuZCBwb3NzaWJsZSBzaWRlIGVmZmVjdHMgb2YgdGhpcyBwYXRjaC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgdHJhY2UgdGhvc2UgY2FsbCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjI0LjY1MjQzMjQ0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzOTYyMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2N0X2V4dF9hZGQuKk5GX0NUX0VYVF9IRUxQRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTgzPW5mX2N0X2hlbHBlcl9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTg2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE4NzpcXHRoZWxwID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX0hFTFBFUiwgZ2ZwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xODgtXFx0aWYgKGhlbHApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MjQuNzY2Mzk4NDkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTc1NjQxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgRnVuY3Rpb24gQ2FsbCBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5mX2N0X2hlbHBlcl9leHRfYWRkYC4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBrZXkgcm9sZSBpbiBhZGRpbmcgZXh0ZW5zaW9ucyBvciBoZWxwZXJzIHRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxpbmcgaGllcmFyY2h5IHRvIGZ1bGx5IGdyYXNwIGl0cyBvcGVyYXRpb25hbCBjb250ZXh0IHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIEtub3dpbmcgdGhlIHVwc3RyZWFtIGNhbGxlcnMgd2lsbCB0ZWxsIG1lICp3aHkqIGFuZCAqaG93KiBgbmZfY3RfaGVscGVyX2V4dF9hZGRgIGlzIGJlaW5nIGludm9rZWQuIFRoaXMgd2lsbCBpbGx1bWluYXRlIHRoZSBicm9hZGVyIHN5c3RlbSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MjcuNTYzOTY0NzI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzk0MzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF9oZWxwZXJfZXh0X2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTc1ND1pbml0X2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE4MTktXFx0XFx0XFx0aWYgKGFzc2lnbl9oZWxwZXIpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTgyMDpcXHRcXHRcXHRcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xODIxLVxcdFxcdFxcdFxcdGlmIChoZWxwIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2YXNzaWduX2hlbHBlci1cXHUwMDNlY3RfcmVmY250KSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTE4Mj1zdHJ1Y3QgbmZfY29ubl9oZWxwICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxODM6bmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTg0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5My19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTk0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9leHRfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTk2PWludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yMjYtXFx0aWYgKGhlbHAgPT0gTlVMTCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjIyNzpcXHRcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIGZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yMjgtXFx0XFx0aWYgKGhlbHAgPT0gTlVMTClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yMjIyPWN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMjc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyMjc2OlxcdFxcdFxcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTIyNzctXFx0XFx0XFx0aWYgKGhlbHAgPT0gTlVMTCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmM9ODU9aW50IG5mX2N0X2FkZF9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpuYW1lLCB1OCBmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy05NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYzo5NjpcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9LRVJORUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTk3LVxcdGlmICghaGVscCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMTEyPXN0YXRpYyB2b2lkIG5mdF9jdF9oZWxwZXJfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTE0NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjExNDU6XFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTExNDYtXFx0aWYgKGhlbHAgXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZ0b19hc3NpZ24tXFx1MDAzZWN0X3JlZmNudCkpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTMxMT1zdGF0aWMgdm9pZCBuZnRfY3RfZXhwZWN0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzMzEtXFx0aWYgKCFoZWxwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTMzMjpcXHRcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMzMy1cXHRpZiAoIWhlbHApIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYz03ND14dF9jdF9zZXRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqaGVscGVyX25hbWUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtOTMtXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjk0OlxcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7XFxubmV0L25ldGZpbHRlci94dF9DVC5jLTk1LVxcdGlmIChoZWxwID09IE5VTEwpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MjcuNjUxOTE0MzM1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MzA2MjMzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoIG9uIGBuZl9jdF9leHRfYWRkYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0cyBtb2RpZmljYXRpb24gb2YgYG5mX2N0X2V4dF9hZGRgLiBUaGlzIGZ1bmN0aW9uLCBJIHNlZSwgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIGNvbm50cmFjayBzeXN0ZW0uIEl04oCZcyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBhcmVhcyBpbmNsdWRpbmcgYGluaXRfY29ubnRyYWNrYCwgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgLCBhbmQgdmFyaW91cyBuZXRsaW5rIGFuZCBOZXRmaWx0ZXIgdGFibGUgZnVuY3Rpb25zIChgY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2tgLCBgbmZ0X2N0X2hlbHBlcl9vYmpfZXZhbGAsIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYCwgYHh0X2N0X3NldF9oZWxwZXJgKSwgaW5kaWNhdGluZyBpdHMgaW1wb3J0YW5jZSBpbiBoZWxwZXIgYXNzaWdubWVudCBhbmQgY29ubnRyYWNrIGNyZWF0aW9uLlxuXG5GaXJzdCwgbGV0J3MgbmFpbCBkb3duIGFueSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBpcyBjbGVhcmx5IGEgbXVzdCwgb2J2aW91c2x5LiBJJ2xsIG5lZWQgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS2AgdG8gYmUgZW5hYmxlZCBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGBjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFja2AsIGBDT05GSUdfTkZfVEFCTEVTYCBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGBuZnRfY3RgLCBgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgIGZvciBgeHRfQ1RgLiBBbmQgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgQ09ORklHX09QRU5WU1dJVENIYCB0byBiZSBlbmFibGVkIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYG5mX2Nvbm50cmFja19vdnMuY2AuXG5cbk5vdywgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgYG5mX2N0X2V4dF9hZGRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLCB3aGljaCBhZGRzIGEgbmV3IGNvbm50cmFjayBleHRlbnNpb24uIFRoZSBzaWduaWZpY2FudCBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZCBhcmUgYG5mX2N0X2V4dF9hZGRgLCBgbmZfY3RfaGVscGVyX2V4dF9hZGRgLCBhbmQgdGhlIHZhcmlvdXMgcGxhY2VzIHdoZXJlIHRoZXkgYXJlIGNhbGxlZC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIGlzIHRoaXMgYSBob3QtcGF0aCBmdW5jdGlvbj8gR2l2ZW4gdGhhdCBgbmZfY3RfZXh0X2FkZGAgaXMgaW52b2tlZCB3aGVuIGEgbmV3IGNvbm50cmFjayBleHRlbnNpb24gaXMgYWRkZWQsIHRoaXMgZ2VuZXJhbGx5IGhhcHBlbnMgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAsIG5vdCBvbiBhIHBlci1wYWNrZXQgYmFzaXMsIGFuZCB0aGF0J3MgZ29vZCBuZXdzLiBUaGF0IG1ha2VzIGl0IG1vcmUgbWFuYWdlYWJsZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgaXQncyBub3QgZ29pbmcgdG8gYmUgdHJpZ2dlcmVkIG1pbGxpb25zIG9mIHRpbWVzIGV2ZXJ5IHNlY29uZCwgaWYgaXRzIHBlci1jb25uZWN0aW9uLlxuXG5Ob3cgSSBuZWVkIHRvIGFsc28gY2hlY2sgYWJvdXQgYENPTkZJR19ORl9DT05OVFJBQ0tfSEVMUEVSYCwgdG8gbWFrZSBzdXJlIGl0cyBhbHNvIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MzUuMTgyNTQwNTk0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTczNDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cXHRib29sIFxcXCJTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cXHRib29sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVxcdHRyaXN0YXRlIFxcXCJBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVxcdHRyaXN0YXRlXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIk5ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cXHR0cmlzdGF0ZSBcXFwiU05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cXHR0cmlzdGF0ZSBcXFwiUFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVxcdHRyaXN0YXRlIFxcXCJTQU5FIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJTSVAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVxcdHRyaXN0YXRlIFxcXCJURlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjM1LjI2ODI4MDA1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkyNTEyMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbm50cmFjayBIZWxwZXIgQ29uZnVzaW9uKipcblxuT2theSwgc28gSSB3YXMgbG9va2luZyBmb3IgYENPTkZJR19ORl9DT05OVFJBQ0tfSEVMUEVSYCwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBleGlzdCBhcyBhIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMsIFwiQWhhISBJdCdzIHByb2JhYmx5IGp1c3QgaW5jbHVkZWQgd2l0aGluIGBDT05GSUdfTkZfQ09OTlRSQUNLYC5cIlxuXG5KdXN0IHRvIGNvbmZpcm0sIEkgd2FzIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgdG8gc2VlIGlmIHRoZXJlIHdhcyBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQgSSBhbHJlYWR5IGRpZCBhIHF1aWNrIHNjYW4gb2YgdGhlIGBNYWtlZmlsZWAgYW5kIGl0J3MgYnVpbHQtaW4gKCBgbmZfY29ubnRyYWNrLXlgKS5cblxuU28sIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX05GX0NPTk5UUkFDS2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgb3RoZXIgb3B0aW9ucyBvciBmZWF0dXJlcyBhcmUgdGllZCB0byBpdC4gR290dGEgZmlndXJlIG91dCB0aGUgd2hvbGUgcGljdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTAxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjM4LjY2MDc5NjA5OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjUzMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MzguNzc2NDY4NTA2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MzY3NzM3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21lIHNwZWNpZmljIG5ldGZpbHRlciBjb25maWd1cmF0aW9ucywgc28gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIG9uIGFyb3VuZCBsaW5lIDgyOyBob3BlZnVsbHksIHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIEknbSBpbnRlcmVzdGVkIGluIGFyZSBsb2NhdGVkLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzo0MS41MTMyNDQ5ODJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHQgIGZvciBwYXNzaXZlIE9TIGZpbmdlcnByaW50IHZpYSBORk5FVExJTksuXFxuICA4MTpcXHRcXG4gIDgyOlxcdGNvbmZpZyBORl9DT05OVFJBQ0tcXG4gIDgzOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbiAgODQ6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA4NTpcXHRcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcXG4gIDg2OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBJUFY2ICE9IG5cXG4gIDg3OlxcdFxcdGhlbHBcXG4gIDg4OlxcdFxcdCAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWRcXG4gIDg5OlxcdFxcdCAgdGhyb3VnaCB5b3VyIG1hY2hpbmUsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHJlbGF0ZWRcXG4gIDkwOlxcdFxcdCAgaW50byBjb25uZWN0aW9ucy5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0ICBUaGlzIGlzIHJlcXVpcmVkIHRvIGRvIE1hc3F1ZXJhZGluZyBvciBvdGhlciBraW5kcyBvZiBOZXR3b3JrXFxuICA5MzpcXHRcXHQgIEFkZHJlc3MgVHJhbnNsYXRpb24uICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGVuaGFuY2UgcGFja2V0XFxuICA5NDpcXHRcXHQgIGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQnIGJlbG93KS5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDk3OlxcdFxcbiAgOTg6XFx0Y29uZmlnIE5GX0xPR19TWVNMT0dcXG4gIDk5OlxcdFxcdHRyaXN0YXRlIFxcXCJTeXNsb2cgcGFja2V0IGxvZ2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjQxLjUxMzQyNDY0MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDI2NTc3NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIE9wdGltaXphdGlvbiAtIFRoaW5raW5nIE91dCBMb3VkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgY29uZmlndXJpbmcgdGhpcyBrZXJuZWwuIGBORl9DT05OVFJBQ0tgIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQgb25seSBkZXBlbmRzIG9uIGBORVRGSUxURVJgLCB3aGljaCBpcyB0aGUgY29yZSwgc28gZW5hYmxpbmcgdGhhdCBzaG91bGQgYmUgZmluZS4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5CdXQsIGhhbmcgb24sIGl0J3Mgd29ydGggY2hlY2tpbmcgaWYgdGhlcmUgYXJlICpvdGhlciogcG90ZW50aWFsbHkgdXNlZnVsIGNvbmZpZ3VyYXRpb25zIEkgc2hvdWxkIGVuYWJsZSBhbG9uZ3NpZGUgaXQuIExldCdzIHNlZS4uLiBBaCwgeWVzLCB0aGUgcHJvdG9jb2wgaGVscGVycyEgYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGFsbCB0aGVzZSBndXlzLiBUaGV5IHV0aWxpemUgYE5GX0NUX0VYVF9IRUxQRVJgLCBzbyBpbmNsdWRpbmcgdGhlc2Ugc2hvdWxkIGJyaW5nIHRoYXQgZnVuY3Rpb25hbGl0eSBpbi4gSSBzaG91bGQgcHJvYmFibHkgYWRkIHRoZW0gaW4gdG8gZ2V0IGl0LlxuXG5BbHJpZ2h0LCBsZXQncyBlbmFibGUgYWxsIHRoZSBwcm90b2NvbCBoZWxwZXJzOiBgTkZfQ09OTlRSQUNLX0ZUUGAsIGBORl9DT05OVFJBQ0tfSVJDYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYCwgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCwgYE5GX0NPTk5UUkFDS19TTk1QYCwgYE5GX0NPTk5UUkFDS19QUFRQYCwgYE5GX0NPTk5UUkFDS19TQU5FYCwgYE5GX0NPTk5UUkFDS19URlRQYC4gTm8sIHdhaXQuLi4gdGhhdCBtaWdodCBiZSBvdmVya2lsbC4gSSBiZXQgYE5GX0NPTk5UUkFDS19GVFBgIGFuZCBgTkZfQ09OTlRSQUNLX0lSQ2AgYWxvbmUgd2lsbCBiZSBlbm91Z2ggdG8gdHJpZ2dlciB0aGUgaGVscGVyIGxvZ2ljIEknbSBpbnRlcmVzdGVkIGluLiBTaW1wbGlmaWNhdGlvbiBpcyBrZXkuXG5cbkFuZCwgb2YgY291cnNlLCBJIG5lZWQgdG8gZW5hYmxlIGBORl9UQUJMRVNgIGFuZCBgTkZUX0NUYCB0byBnZXQgYG5mdF9jdF9oZWxwZXJfb2JqX2V2YWxgIGdvaW5nLiBUaGF0IHNob3VsZCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBsb2FkZWQuIEdvdHRhIGRvdWJsZSBjaGVjayB0aGF0IGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZvciBgTkZUX0NUYC4gTGV0J3MgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjQ2Ljk0MDAwNTA3NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzMDI4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9DVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ4NT1jb25maWcgTkZUX05VTUdFTlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDkxOmNvbmZpZyBORlRfQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkyLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjQ2Ljk5MzMxMTk4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODU0ODcyOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgTkVURklMVEVSX1hUX1RBUkdFVF9DVGAgaXMgZGVmaW5lZCBpbiB0aGUga2VybmVsJ3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSBrbm93IGl0J3MgcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBMZXQncyBzZWUuLi4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gVGhhdCdzIHdoZXJlIGEgbG90IG9mIHRoZSBOZXRmaWx0ZXItc3BlY2lmaWMgb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIG9wZW4gdGhhdCB1cCBhbmQgc2VhcmNoIGZvciB0aGF0IHN5bWJvbC4gSG9wZWZ1bGx5LCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIEkgY2FuIHF1aWNrbHkgZGV0ZXJtaW5lIGhvdyBpdCdzIGVuYWJsZWQsIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIGl0cyBpbmNsdXNpb24uIFRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgbG9va3VwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjQ5Ljg0ODE4NzY0OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyODI5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz04NDk9Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04NjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjg2MTpjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04NjItXFx0dHJpc3RhdGUgJ1xcXCJDVFxcXCIgdGFyZ2V0IHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjQ5LjkwODQ3NjY0N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTU5OTk2ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEV4dGVuc2lvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHN1Z2dlc3RlZCBjb25maWd1cmF0aW9ucyDigJMgYE5GX0NPTk5UUkFDS2AsIGBORl9DT05OVFJBQ0tfRlRQYCwgYE5GVF9DVGAsIGFuZCBgTkVURklMVEVSX1hUX1RBUkdFVF9DVGAg4oCTIGFyZSBhbGwgcmVsZXZhbnQgYW5kIGxpa2VseSBuZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC5cblxuUmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYsIEkgc2VlIHRoYXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiBgbmZfY3RfZXh0X2FkZGAuIFRoZSBtb2RpZmljYXRpb24gc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgYWxsb2NhdGlvbiBhbmQgcmVhbGxvY2F0aW9uIG9mIHRoZSBjb25udHJhY2sgZXh0ZW5zaW9uIHNwYWNlIChgY3QtXHUwMDNlZXh0YCkuIFRoZSBjb2RlIG5vdyBjaGVja3MgaWYgdGhlIGBORl9DVF9FWFRfSEVMUEVSYCBleHRlbnNpb24gYWxyZWFkeSBleGlzdHMuIElmIGl0ICpkb2VzKiwgdGhlIHBhdGNoIHByZXZlbnRzIGFueSBmdXJ0aGVyIGBrcmVhbGxvY2AgY2FsbHMsIGVmZmVjdGl2ZWx5IGZyZWV6aW5nIHRoZSBleGlzdGluZyBleHRlbnNpb24uIENvbnZlcnNlbHksIGlmIHdlJ3JlIGFkZGluZyB0aGUgaGVscGVyIGV4dGVuc2lvbiAoYGlkID09IE5GX0NUX0VYVF9IRUxQRVJgKSwgdGhlIGFsbG9jYXRpb24gc2l6ZSBpcyBmb3JjZWQgdG8gdGhlIG1heGltdW0gKGBVOF9NQVhgKS4gVGhpcyBpcyBhIHNvbGlkLCB0YXJnZXRlZCBhcHByb2FjaCB0byBtYW5hZ2luZyBoZWxwZXIgZXh0ZW5zaW9uIG1lbW9yeS5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGNoYW5nZSBpcyByZWFjaGFibGUgdGhyb3VnaCB2YXJpb3VzIGNvbm50cmFjayBoZWxwZXIgYWRkaXRpb24gbWV0aG9kcyDigJMgd2hldGhlciBpdCdzIHRocm91Z2ggbmV0bGluaywgbmZ0YWJsZXMsIG9yIGlwdGFibGVzLCB2aWEgdGhlIGBuZl9jdF9leHRfYWRkYCBmdW5jdGlvbi5cblxuTm93LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSBzeW1ib2xzIGlzIGluIG9yZGVyLiBBaGEhIGBuZl9jdF9leHRfYWRkYCBpcyBleHBvcnRlZCAoYEVYUE9SVF9TWU1CT0xgKSwgbWFraW5nIGl0IHVuaXZlcnNhbGx5IGFjY2Vzc2libGUsIGFuZCBgbmZfY3RfaGVscGVyX2V4dF9hZGRgIGlzIGV4cG9ydGVkIGFzIHdlbGwgKGBFWFBPUlRfU1lNQk9MX0dQTGApLiBUaGF0IGNvbmZpcm1zIGl0cyB2aXNpYmlsaXR5IGFuZCB1dGlsaXR5LlxuXG5JJ20gY29uZmlkZW50IHRoaXMgc3VtbWFyeSBjb3ZlcnMgdGhlIGltcG9ydGFudCBwb2ludHMuIExldCdzIHJldHVybiB0aGUgZmluZGluZ3MgdXNpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NzAsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjU4LjA2ODQ3NjgzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDMzMjUwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfRlRQXCIsXG4gICAgXCJORlRfQ1RcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jdF9leHRfYWRkXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJfZXh0X2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBuZl9jdF9leHRfYWRkYCB0byBwcmV2ZW50IHJlYWxsb2NhdGluZyB0aGUgY29ubnRyYWNrIGV4dGVuc2lvbiBzcGFjZSBpZiBhIGhlbHBlciBleHRlbnNpb24gKGBORl9DVF9FWFRfSEVMUEVSYCkgaXMgYWxyZWFkeSBwcmVzZW50LCBhbmQgdG8gcmVzZXJ2ZSBtYXhpbXVtIHNwYWNlIChgVThfTUFYYCkgd2hlbiBhZGRpbmcgYSBoZWxwZXIgZXh0ZW5zaW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGNvbm50cmFjayBsb2dpYy4gSXQgY2FuIGJlIHRyaWdnZXJlZCBieSBhZGRpbmcgY29ubnRyYWNrIGhlbHBlcnMgdmlhIG5ldGxpbmssIG5mdGFibGVzLCBvciBpcHRhYmxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIixcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2N0X2V4dF9hZGRcIixcbiAgICBcIm5mX2N0X2hlbHBlcl9leHRfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2N0X2V4dF9hZGRgIHRvIHByZXZlbnQgcmVhbGxvY2F0aW5nIHRoZSBjb25udHJhY2sgZXh0ZW5zaW9uIHNwYWNlIGlmIGEgaGVscGVyIGV4dGVuc2lvbiAoYE5GX0NUX0VYVF9IRUxQRVJgKSBpcyBhbHJlYWR5IHByZXNlbnQsIGFuZCB0byByZXNlcnZlIG1heGltdW0gc3BhY2UgKGBVOF9NQVhgKSB3aGVuIGFkZGluZyBhIGhlbHBlciBleHRlbnNpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubnRyYWNrIGxvZ2ljLiBJdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFkZGluZyBjb25udHJhY2sgaGVscGVycyB2aWEgbmV0bGluaywgbmZ0YWJsZXMsIG9yIGlwdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowlh47n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 21:15:00 +0000 UTC FinishedAt: 2026-08-01 21:33:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_FTP", "NFT_CT", "NETFILTER_XT_TARGET_CT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_FTP", "NFT_CT", "NETFILTER_XT_TARGET_CT" ], "series_id": "df5a2d30-6dc1-4829-8566-e4fcf04d146e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_ct_ext_add", "nf_ct_helper_ext_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfRlRQJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfY3RfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtuZl9jdF9oZWxwZXJfZXh0X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmZfY3RfZXh0X2FkZGAgdG8gcHJldmVudCByZWFsbG9jYXRpbmcgdGhlIGNvbm50cmFjayBleHRlbnNpb24gc3BhY2UgaWYgYSBoZWxwZXIgZXh0ZW5zaW9uIChgTkZfQ1RfRVhUX0hFTFBFUmApIGlzIGFscmVhZHkgcHJlc2VudCwgYW5kIHRvIHJlc2VydmUgbWF4aW11bSBzcGFjZSAoYFU4X01BWGApIHdoZW4gYWRkaW5nIGEgaGVscGVyIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25udHJhY2sgbG9naWMuIEl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIGNvbm50cmFjayBoZWxwZXJzIHZpYSBuZXRsaW5rLCBuZnRhYmxlcywgb3IgaXB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxYTA4MzAzYmY3NWM4MWZiNmYwZTcyMTI4NjE3ZjEyY2VhNjY2YzVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAyMTozMzowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jXG5pbmRleCAwZGExMDVlMWRlZDkzLi4xNDIxOTQ0YTMwMDM1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jXG5AQCAtMTEyLDkgJiM0MzsxMTIsMjEgQEAgdm9pZCAqbmZfY3RfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gbmZfY3RfZXh0X2lkIGlkLCBnZnBfdCBnZnApXG4gXHRuZXdsZW4gPSBuZXdvZmYgJiM0MzsgbmZfY3RfZXh0X3R5cGVfbGVuW2lkXTtcbiBcbiBcdGFsbG9jID0gbWF4KG5ld2xlbiwgTkZfQ1RfRVhUX1BSRUFMTE9DKTtcbi1cdG5ldyA9IGtyZWFsbG9jKGN0LVx1MDAzZWV4dCwgYWxsb2MsIGdmcCk7XG4tXHRpZiAoIW5ldylcbi1cdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmNlIGFuIGV4cGVjdGF0aW9uIGlzIGxpbmtlZCwgaXRzIGxpc3Qgbm9kZSBwb2ludHMgYmFjayB0byB0aGVcbiYjNDM7XHQgKiBobGlzdCBoZWFkIGluIHRoZSBoZWxwZXIgZXh0ZW5zaW9uLiBSZXNlcnZlIGFsbCBhdmFpbGFibGUgZXh0ZW5zaW9uXG4mIzQzO1x0ICogc3BhY2UgZm9yIHRoZSBoZWxwZXIgYW5kIGRvIG5vdCBtb3ZlIGl0IGFmdGVyd2FyZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3QtXHUwMDNlZXh0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBfX25mX2N0X2V4dF9leGlzdChjdC1cdTAwM2VleHQsIE5GX0NUX0VYVF9IRUxQRVIpKSB7XG4mIzQzO1x0XHRuZXcgPSBjdC1cdTAwM2VleHQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChpZCA9PSBORl9DVF9FWFRfSEVMUEVSKVxuJiM0MztcdFx0XHRhbGxvYyA9IFU4X01BWDtcbiYjNDM7XHRcdG5ldyA9IGtyZWFsbG9jKGN0LVx1MDAzZWV4dCwgYWxsb2MsIGdmcCk7XG4mIzQzO1x0XHRpZiAoIW5ldylcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFjdC1cdTAwM2VleHQpXG4gXHRcdG1lbXNldChuZXctXHUwMDNlb2Zmc2V0LCAwLCBzaXplb2YobmV3LVx1MDAzZW9mZnNldCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORlRfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9DVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2N0X2V4dF9hZGQmIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2V4dF9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2N0X2V4dF9hZGRgIHRvIHByZXZlbnQgcmVhbGxvY2F0aW5nIHRoZSBjb25udHJhY2sgZXh0ZW5zaW9uIHNwYWNlIGlmIGEgaGVscGVyIGV4dGVuc2lvbiAoYE5GX0NUX0VYVF9IRUxQRVJgKSBpcyBhbHJlYWR5IHByZXNlbnQsIGFuZCB0byByZXNlcnZlIG1heGltdW0gc3BhY2UgKGBVOF9NQVhgKSB3aGVuIGFkZGluZyBhIGhlbHBlciBleHRlbnNpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubnRyYWNrIGxvZ2ljLiBJdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFkZGluZyBjb25udHJhY2sgaGVscGVycyB2aWEgbmV0bGluaywgbmZ0YWJsZXMsIG9yIGlwdGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWEwODMwM2JmNzVjODFmYjZmMGU3MjEyODYxN2YxMmNlYTY2NmM1ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMjE6MzM6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jCmluZGV4IDBkYTEwNWUxZGVkOTMuLjE0MjE5NDRhMzAwMzUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jCkBAIC0xMTIsOSAmIzQzOzExMiwyMSBAQCB2b2lkICpuZl9jdF9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBuZl9jdF9leHRfaWQgaWQsIGdmcF90IGdmcCkKIAluZXdsZW4gPSBuZXdvZmYgJiM0MzsgbmZfY3RfZXh0X3R5cGVfbGVuW2lkXTsKIAogCWFsbG9jID0gbWF4KG5ld2xlbiwgTkZfQ1RfRVhUX1BSRUFMTE9DKTsKLQluZXcgPSBrcmVhbGxvYyhjdC0mZ3Q7ZXh0LCBhbGxvYywgZ2ZwKTsKLQlpZiAoIW5ldykKLQkJcmV0dXJuIE5VTEw7CiYjNDM7CS8qCiYjNDM7CSAqIE9uY2UgYW4gZXhwZWN0YXRpb24gaXMgbGlua2VkLCBpdHMgbGlzdCBub2RlIHBvaW50cyBiYWNrIHRvIHRoZQomIzQzOwkgKiBobGlzdCBoZWFkIGluIHRoZSBoZWxwZXIgZXh0ZW5zaW9uLiBSZXNlcnZlIGFsbCBhdmFpbGFibGUgZXh0ZW5zaW9uCiYjNDM7CSAqIHNwYWNlIGZvciB0aGUgaGVscGVyIGFuZCBkbyBub3QgbW92ZSBpdCBhZnRlcndhcmQuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3QtJmd0O2V4dCAmYW1wOyZhbXA7CiYjNDM7CSAgICBfX25mX2N0X2V4dF9leGlzdChjdC0mZ3Q7ZXh0LCBORl9DVF9FWFRfSEVMUEVSKSkgewomIzQzOwkJbmV3ID0gY3QtJmd0O2V4dDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChpZCA9PSBORl9DVF9FWFRfSEVMUEVSKQomIzQzOwkJCWFsbG9jID0gVThfTUFYOwomIzQzOwkJbmV3ID0ga3JlYWxsb2MoY3QtJmd0O2V4dCwgYWxsb2MsIGdmcCk7CiYjNDM7CQlpZiAoIW5ldykKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCiAJaWYgKCFjdC0mZ3Q7ZXh0KQogCQltZW1zZXQobmV3LSZndDtvZmZzZXQsIDAsIHNpemVvZihuZXctJmd0O29mZnNldCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEV4dGVuc2lvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSB0YXJnZXRpbmcgdGhlIGBuZl9jdF9leHRfYWRkYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlIGNydXggb2YgdGhlIG1vZGlmaWNhdGlvbiByZXZvbHZlcyBhcm91bmQgaG93IHdlIGhhbmRsZSB0aGUgYE5GX0NUX0VYVF9IRUxQRVJgIGV4dGVuc2lvbiBhbmQgdGhlIHVzZSBvZiBga3JlYWxsb2NgLiBUaGUgZ29hbCBpcyB0byBiZSBtb3JlIGVmZmljaWVudCB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGhlbHBlcnMuCgpFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWFsbG9jYXRpb24gb2YgYGN0LSZndDtleHRgIGlmIGEgYE5GX0NUX0VYVF9IRUxQRVJgIGV4dGVuc2lvbiBhbHJlYWR5IGV4aXN0cy4gU21hcnQuIEFuZCwgd2hlbiBgaWRgIGlzIGluZGVlZCBgTkZfQ1RfRVhUX0hFTFBFUmAsIGl0JiMzOTtzIHByZS1hbGxvY2F0aW5nIGBVOF9NQVhgICgyNTUpIGJ5dGVzLiBUaGlzIGlzIGxpa2VseSB0byByZXNlcnZlIGFsbCBhdmFpbGFibGUgZXh0ZW5zaW9uIHNwYWNlLCBsaWtlbHkgd2l0aCBhIGRlc2lnbiB0byBhdm9pZCBydW5uaW5nIG91dCBvZiBzcGFjZSwgYW5kIGhvcGVmdWxseSByZWR1Y2UgZnJhZ21lbnRhdGlvbi4KCk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBkb3VibGUtY2hlY2sgYG5mX2N0X2V4dF9hZGRgIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgTkZfQ1RfRVhUX0hFTFBFUmAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuIFllYWgsIHRoaXMgYWxsIHNlZW1zIGZ1bmN0aW9uYWxseSBzb3VuZCBhbmQgcmVhY2hhYmxlLCB0aGVyZSYjMzk7cyBubyBnbGFyaW5nIHJlZCBmbGFncy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGVuYWJsZSB0aGlzLiBJdCBsb29rcyBsaWtlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuY2AgaXMgcGFydCBvZiBgTkZfQ09OTlRSQUNLYCwgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGF0IGFuZCBtb3ZlIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfZXh0X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jPTMxOT1ib29sIG5mX2N0X2VjYWNoZV9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgdTE2IGN0bWFzaywgdTE2IGV4cG1hc2ssIGdmcF90IGdmcClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuYy0zNDUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuYzozNDY6XHRlID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX0VDQUNIRSwgZ2ZwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jLTM0Ny1cdGlmIChlKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM9NTc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgdG90YWxfZXh0ZW5zaW9uX3NpemUodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYy04OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jOjkwOnZvaWQgKm5mX2N0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIG5mX2N0X2V4dF9pZCBpZCwgZ2ZwX3QgZ2ZwKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtOTEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jLTE0MC19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYzoxNDE6RVhQT1JUX1NZTUJPTChuZl9jdF9leHRfYWRkKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xODM9bmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTg2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTg3Olx0aGVscCA9IG5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9IRUxQRVIsIGdmcCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xODgtXHRpZiAoaGVscCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYz00MzQ9Y29ubnRyYWNrX3BwdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNDU4LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jOjQ1OTpcdFx0aWYgKCFuYXQgXHUwMDI2XHUwMDI2ICFuZl9jdF9leHRfYWRkKGN0LCBORl9DVF9FWFRfTkFULCBHRlBfQVRPTUlDKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy00NjAtXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTc0NT1zdHJ1Y3QgbmZfY29ubl9uYXQgKm5mX2N0X25hdF9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzUxLVx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjc1MjpcdFx0bmF0ID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX05BVCwgR0ZQX0FUT01JQyk7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBuZl9jdF9leHRfYWRkYCBVc2FnZSBhbmQgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYG5mX2N0X2V4dF9hZGRgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGJlaW5nIHVzZWQgYnkgKm11bHRpcGxlKiBtb2R1bGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGJ1aWxkLXN5c3RlbSBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqZW5hYmxpbmcqIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmaWxlLCBgbmZfY29ubnRyYWNrX2V4dGVuZC5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGFuZCB1bHRpbWF0ZWx5LCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBjb21lIGludG8gcGxheS4KCk15IGltbWVkaWF0ZSBhY3Rpb24gd2lsbCBiZSB0byBkZWx2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVuczsgaXQmIzM5O2xsIHBvaW50IG1lIHRvIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBjb21waWxhdGlvbiBvZiB0aGF0IHNwZWNpZmljIG1vZHVsZSBhbmQgdGh1cywgdGhlIGF2YWlsYWJpbGl0eSBvZiBgbmZfY3RfZXh0X2FkZGAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdGllZCB0byBzb21lIGBDT05GSUdfYCBvcHRpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYG5mX2Nvbm50cmFja19leHRlbmQub2AgaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBLbm93aW5nICp0aGF0KiB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyB1c2FnZSBjb250ZXh0IGFuZCB0aGUgc2NlbmFyaW9zIGluIHdoaWNoIGl0JiMzOTtzIGF2YWlsYWJsZS4gTm93LCBJJiMzOTttIG9mZiB0byB0aGUgTWFrZWZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2V4dGVuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT01PW5mX2Nvbm50cmFjay15XHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNy1cdFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4Olx0XHQgICBuZl9jb25udHJhY2tfZXh0ZW5kLm8gbmZfY29ubnRyYWNrX2FjY3QubyBuZl9jb25udHJhY2tfc2VxYWRqLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYG5mX2Nvbm50cmFja2AgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIGBuZl9jb25udHJhY2steWAsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGFjdHVhbGx5ICplbmFibGVzKiBgbmZfY29ubnRyYWNrYCBpbiB0aGUgZmlyc3QgcGxhY2U/JiMzNDsgSXQmIzM5O3Mgbm90IGVub3VnaCB0byBrbm93IHRoZSBjb21wb25lbnQgZXhpc3RzOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIHNldHRpbmcsIGxpa2VseSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGJyaW5ncyB0aGlzIGNydWNpYWwgcGllY2Ugb2YgdGhlIG5ldHdvcmtpbmcgcHV6emxlIGludG8gcGxheS4gS25vd2luZyB0aGlzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBpbnRvIGhvdyBpdHMgYWN0aXZhdGlvbiBpcyBjb250cm9sbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFjay15JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSAmIzQzOz0gbmZuZXRsaW5rLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTpuZl9jb25udHJhY2steVx0Oj0gbmZfY29ubnRyYWNrX2NvcmUubyBuZl9jb25udHJhY2tfc3RhbmRhbG9uZS5vIG5mX2Nvbm50cmFja19leHBlY3QubyBuZl9jb25udHJhY2tfaGVscGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNi1cdFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgc3BlY2lmaWMgTWFrZWZpbGUgdGFzazoKCioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbXkgaW50ZXJuYWwgY2hlY2tsaXN0IGhhcyBmbGFnZ2VkIHNvbWV0aGluZyB0aGF0IG5lZWRzIGF0dGVudGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCB3aGljaCBJIGtub3cgaXMgY3J1Y2lhbCBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBgb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSylgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAuIFRoaXMgaXMgdGhlIGZpbGUgdGhhdCBnb3Zlcm5zIGhvdyB0aG9zZSBOZXRmaWx0ZXIgbW9kdWxlcyBhcmUgYnVpbHQgYW5kIGluY2x1ZGVkLiBTbywgSSBuZWVkIHRvIGdldCBpbiB0aGVyZSBhbmQgc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gZGljdGF0ZXMgd2hldGhlciB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgYSBzdGFuZGFyZCBhcHByb2FjaCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSwgYmVjYXVzZSBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGZvdW5kYXRpb25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LKSAmIzQzOz0gbmZuZXRsaW5rX2hvb2sub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzMtIyBjb25uZWN0aW9uIHRyYWNraW5nXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICYjNDM7PSBuZl9jb25udHJhY2sub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zNS1cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTQyPW5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00My1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREEpICYjNDM7PSBuZl9jb25udHJhY2tfYW1hbmRhLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICYjNDM7PSBuZl9jb25udHJhY2tfZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSAmIzQzOz0gbmZfY29ubnRyYWNrX2gzMjMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NzpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgJiM0Mzs9IG5mX2Nvbm50cmFja19pcmMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0JST0FEQ0FTVCkgJiM0Mzs9IG5mX2Nvbm50cmFja19icm9hZGNhc3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMpICYjNDM7PSBuZl9jb25udHJhY2tfbmV0Ymlvc19ucy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUwOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU05NUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19zbm1wLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19QUFRQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3BwdHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MjpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUpICYjNDM7PSBuZl9jb25udHJhY2tfc2FuZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUzOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU0lQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3NpcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU0Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja190ZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgdGhpbmtpbmcgbGlrZSBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXI6CgoqKkRlbHZpbmcgaW50byB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBFeHRlbnNpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29ubmVjdGlvbiB0cmFja2luZywgc3BlY2lmaWNhbGx5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZm91bmRhdGlvbiB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUuIEkgc2VlIGEgcGF0Y2ggdGhhdCYjMzk7cyBnb3QgbXkgYXR0ZW50aW9uLCBpdCBsb29rcyBsaWtlIHRoaXMgb25lIHRvdWNoZXMgYG5mX2N0X2V4dF9hZGRgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmNgLiBUaGF0IGZpbGUmIzM5O3MgZ290IHRoZSBsb3dkb3duIG9uIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGV4dGVuZGVkLCBhbmQgYG5mX2N0X2V4dF9hZGRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gZm9yIGFkZGluZyB0aGVzZSBleHRlbnNpb25zLgoKVGhlIHJlYWwgbWVhdCBvZiB0aGUgbWF0dGVyIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgbmV3IGxvZ2ljIHRvIGRlYWwgd2l0aCBgTkZfQ1RfRVhUX0hFTFBFUmAuIE9rYXksIGBORl9DVF9FWFRfSEVMUEVSYC4uLiB0aGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IGhhbmRsaW5nIGFwcGxpY2F0aW9uIGxheWVyIGhlbHBlciBtb2R1bGVzIGluIHNvbWUgd2F5IHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFyZWEgZm9yIGltcHJvdmluZyBzdGF0ZWZ1bCBpbnNwZWN0aW9uLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgaXMgZ29pbmcgdG8gcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBgbmZfY3RfZXh0X2FkZGAgd2l0aCB0aGUgYE5GX0NUX0VYVF9IRUxQRVJgIGZsYWcgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQuIEtub3dpbmcgd2hpY2ggY2FsbCBzaXRlcyBhcmUgbWFraW5nIHRoZXNlIGFkZGl0aW9ucyB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGltcGFjdCBhbmQgcG9zc2libGUgc2lkZSBlZmZlY3RzIG9mIHRoaXMgcGF0Y2guIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2V4dF9hZGQuKk5GX0NUX0VYVF9IRUxQRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xODM9bmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTg2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTg3Olx0aGVscCA9IG5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9IRUxQRVIsIGdmcCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xODgtXHRpZiAoaGVscCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODQ4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBGdW5jdGlvbiBDYWxsIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZl9jdF9oZWxwZXJfZXh0X2FkZGAuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBsYXlzIGEga2V5IHJvbGUgaW4gYWRkaW5nIGV4dGVuc2lvbnMgb3IgaGVscGVycyB0byBhIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29udGV4dC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGhpZXJhcmNoeSB0byBmdWxseSBncmFzcCBpdHMgb3BlcmF0aW9uYWwgY29udGV4dCB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBLbm93aW5nIHRoZSB1cHN0cmVhbSBjYWxsZXJzIHdpbGwgdGVsbCBtZSAqd2h5KiBhbmQgKmhvdyogYG5mX2N0X2hlbHBlcl9leHRfYWRkYCBpcyBiZWluZyBpbnZva2VkLiBUaGlzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgYnJvYWRlciBzeXN0ZW0gZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfaGVscGVyX2V4dF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTc1ND1pbml0X2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xODE5LVx0XHRcdGlmIChhc3NpZ25faGVscGVyKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTgyMDpcdFx0XHRcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTgyMS1cdFx0XHRcdGlmIChoZWxwIFx1MDAyNlx1MDAyNiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2YXNzaWduX2hlbHBlci1cdTAwM2VjdF9yZWZjbnQpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTE4Mj1zdHJ1Y3QgbmZfY29ubl9oZWxwICpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE4MzpuZl9jdF9oZWxwZXJfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGdmcF90IGdmcClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE4NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTkzLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE5NDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfZXh0X2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xOTY9aW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yMjYtXHRpZiAoaGVscCA9PSBOVUxMKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoyMjc6XHRcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgZmxhZ3MpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMjI4LVx0XHRpZiAoaGVscCA9PSBOVUxMKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yMjIyPWN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjI3NS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyMjc2Olx0XHRcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjI3Ny1cdFx0XHRpZiAoaGVscCA9PSBOVUxMKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmM9ODU9aW50IG5mX2N0X2FkZF9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpuYW1lLCB1OCBmYW1pbHksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtOTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYzo5NjpcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy05Ny1cdGlmICghaGVscCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTExMj1zdGF0aWMgdm9pZCBuZnRfY3RfaGVscGVyX29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMTQ0LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMTQ1Olx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTE0Ni1cdGlmIChoZWxwIFx1MDAyNlx1MDAyNiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2dG9fYXNzaWduLVx1MDAzZWN0X3JlZmNudCkpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEzMTE9c3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMzMS1cdGlmICghaGVscClcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTMzMjpcdFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMzMy1cdGlmICghaGVscCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYz03ND14dF9jdF9zZXRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqaGVscGVyX25hbWUsXG4tLVxubmV0L25ldGZpbHRlci94dF9DVC5jLTkzLVxubmV0L25ldGZpbHRlci94dF9DVC5jOjk0Olx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfS0VSTkVMKTtcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy05NS1cdGlmIChoZWxwID09IE5VTEwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDUyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2ggb24gYG5mX2N0X2V4dF9hZGRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdHMgbW9kaWZpY2F0aW9uIG9mIGBuZl9jdF9leHRfYWRkYC4gVGhpcyBmdW5jdGlvbiwgSSBzZWUsIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSBjb25udHJhY2sgc3lzdGVtLiBJdOKAmXMgY2FsbGVkIGZyb20gc2V2ZXJhbCBrZXkgYXJlYXMgaW5jbHVkaW5nIGBpbml0X2Nvbm50cmFja2AsIGBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyYCwgYW5kIHZhcmlvdXMgbmV0bGluayBhbmQgTmV0ZmlsdGVyIHRhYmxlIGZ1bmN0aW9ucyAoYGN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrYCwgYG5mdF9jdF9oZWxwZXJfb2JqX2V2YWxgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAsIGB4dF9jdF9zZXRfaGVscGVyYCksIGluZGljYXRpbmcgaXRzIGltcG9ydGFuY2UgaW4gaGVscGVyIGFzc2lnbm1lbnQgYW5kIGNvbm50cmFjayBjcmVhdGlvbi4KCkZpcnN0LCBsZXQmIzM5O3MgbmFpbCBkb3duIGFueSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBpcyBjbGVhcmx5IGEgbXVzdCwgb2J2aW91c2x5LiBJJiMzOTtsbCBuZWVkIGBDT05GSUdfTkVURklMVEVSX05FVExJTktgIHRvIGJlIGVuYWJsZWQgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBgY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2tgLCBgQ09ORklHX05GX1RBQkxFU2AgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBgbmZ0X2N0YCwgYENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NUYCBmb3IgYHh0X0NUYC4gQW5kIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBDT05GSUdfT1BFTlZTV0lUQ0hgIHRvIGJlIGVuYWJsZWQgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBgbmZfY29ubnRyYWNrX292cy5jYC4KCk5vdywgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgYG5mX2N0X2V4dF9hZGRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLCB3aGljaCBhZGRzIGEgbmV3IGNvbm50cmFjayBleHRlbnNpb24uIFRoZSBzaWduaWZpY2FudCBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZCBhcmUgYG5mX2N0X2V4dF9hZGRgLCBgbmZfY3RfaGVscGVyX2V4dF9hZGRgLCBhbmQgdGhlIHZhcmlvdXMgcGxhY2VzIHdoZXJlIHRoZXkgYXJlIGNhbGxlZC4KClRoZSBxdWVzdGlvbiB0aGVuIGlzLCBpcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IEdpdmVuIHRoYXQgYG5mX2N0X2V4dF9hZGRgIGlzIGludm9rZWQgd2hlbiBhIG5ldyBjb25udHJhY2sgZXh0ZW5zaW9uIGlzIGFkZGVkLCB0aGlzIGdlbmVyYWxseSBoYXBwZW5zIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLCBub3Qgb24gYSBwZXItcGFja2V0IGJhc2lzLCBhbmQgdGhhdCYjMzk7cyBnb29kIG5ld3MuIFRoYXQgbWFrZXMgaXQgbW9yZSBtYW5hZ2VhYmxlIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgdHJpZ2dlcmVkIG1pbGxpb25zIG9mIHRpbWVzIGV2ZXJ5IHNlY29uZCwgaWYgaXRzIHBlci1jb25uZWN0aW9uLgoKTm93IEkgbmVlZCB0byBhbHNvIGNoZWNrIGFib3V0IGBDT05GSUdfTkZfQ09OTlRSQUNLX0hFTFBFUmAsIHRvIG1ha2Ugc3VyZSBpdHMgYWxzbyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB6b25lcyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0O1N1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cdHRyaXN0YXRlIFwmIzM0O1NOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7UFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cdHRyaXN0YXRlIFwmIzM0O1NBTkUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXHR0cmlzdGF0ZSBcJiMzNDtURlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25udHJhY2sgSGVscGVyIENvbmZ1c2lvbioqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGZvciBgQ09ORklHX05GX0NPTk5UUkFDS19IRUxQRVJgLCBidXQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBleGlzdCBhcyBhIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMsICYjMzQ7QWhhISBJdCYjMzk7cyBwcm9iYWJseSBqdXN0IGluY2x1ZGVkIHdpdGhpbiBgQ09ORklHX05GX0NPTk5UUkFDS2AuJiMzNDsKCkp1c3QgdG8gY29uZmlybSwgSSB3YXMgZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jYCB0byBzZWUgaWYgdGhlcmUgd2FzIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBJIGFscmVhZHkgZGlkIGEgcXVpY2sgc2NhbiBvZiB0aGUgYE1ha2VmaWxlYCBhbmQgaXQmIzM5O3MgYnVpbHQtaW4gKCBgbmZfY29ubnRyYWNrLXlgKS4KClNvLCBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19ORl9DT05OVFJBQ0tgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG90aGVyIG9wdGlvbnMgb3IgZmVhdHVyZXMgYXJlIHRpZWQgdG8gaXQuIEdvdHRhIGZpZ3VyZSBvdXQgdGhlIHdob2xlIHBpY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZSBzcGVjaWZpYyBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbnMsIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGFyb3VuZCBsaW5lIDgyOyBob3BlZnVsbHksIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4gYXJlIGxvY2F0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XHQgIGZvciBwYXNzaXZlIE9TIGZpbmdlcnByaW50IHZpYSBORk5FVExJTksuXG4gIDgxOlx0XG4gIDgyOlx0Y29uZmlnIE5GX0NPTk5UUkFDS1xuICA4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuICA4NDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gIDg1Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbiAgODY6XHRcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBJUFY2ICE9IG5cbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWRcbiAgODk6XHRcdCAgdGhyb3VnaCB5b3VyIG1hY2hpbmUsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHJlbGF0ZWRcbiAgOTA6XHRcdCAgaW50byBjb25uZWN0aW9ucy5cbiAgOTE6XHRcbiAgOTI6XHRcdCAgVGhpcyBpcyByZXF1aXJlZCB0byBkbyBNYXNxdWVyYWRpbmcgb3Igb3RoZXIga2luZHMgb2YgTmV0d29ya1xuICA5MzpcdFx0ICBBZGRyZXNzIFRyYW5zbGF0aW9uLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBlbmhhbmNlIHBhY2tldFxuICA5NDpcdFx0ICBmaWx0ZXJpbmcgKHNlZSBgQ29ubmVjdGlvbiBzdGF0ZSBtYXRjaCBzdXBwb3J0JiMzOTsgYmVsb3cpLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgOTc6XHRcbiAgOTg6XHRjb25maWcgTkZfTE9HX1NZU0xPR1xuICA5OTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3lzbG9nIHBhY2tldCBsb2dnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTY1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIE9wdGltaXphdGlvbiAtIFRoaW5raW5nIE91dCBMb3VkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBjb25maWd1cmluZyB0aGlzIGtlcm5lbC4gYE5GX0NPTk5UUkFDS2Agc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCBvbmx5IGRlcGVuZHMgb24gYE5FVEZJTFRFUmAsIHdoaWNoIGlzIHRoZSBjb3JlLCBzbyBlbmFibGluZyB0aGF0IHNob3VsZCBiZSBmaW5lLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpCdXQsIGhhbmcgb24sIGl0JiMzOTtzIHdvcnRoIGNoZWNraW5nIGlmIHRoZXJlIGFyZSAqb3RoZXIqIHBvdGVudGlhbGx5IHVzZWZ1bCBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBlbmFibGUgYWxvbmdzaWRlIGl0LiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCB5ZXMsIHRoZSBwcm90b2NvbCBoZWxwZXJzISBgTkZfQ09OTlRSQUNLX0ZUUGAsIGBORl9DT05OVFJBQ0tfSVJDYCwgYWxsIHRoZXNlIGd1eXMuIFRoZXkgdXRpbGl6ZSBgTkZfQ1RfRVhUX0hFTFBFUmAsIHNvIGluY2x1ZGluZyB0aGVzZSBzaG91bGQgYnJpbmcgdGhhdCBmdW5jdGlvbmFsaXR5IGluLiBJIHNob3VsZCBwcm9iYWJseSBhZGQgdGhlbSBpbiB0byBnZXQgaXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZW5hYmxlIGFsbCB0aGUgcHJvdG9jb2wgaGVscGVyczogYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVGAsIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AsIGBORl9DT05OVFJBQ0tfU05NUGAsIGBORl9DT05OVFJBQ0tfUFBUUGAsIGBORl9DT05OVFJBQ0tfU0FORWAsIGBORl9DT05OVFJBQ0tfVEZUUGAuIE5vLCB3YWl0Li4uIHRoYXQgbWlnaHQgYmUgb3ZlcmtpbGwuIEkgYmV0IGBORl9DT05OVFJBQ0tfRlRQYCBhbmQgYE5GX0NPTk5UUkFDS19JUkNgIGFsb25lIHdpbGwgYmUgZW5vdWdoIHRvIHRyaWdnZXIgdGhlIGhlbHBlciBsb2dpYyBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFNpbXBsaWZpY2F0aW9uIGlzIGtleS4KCkFuZCwgb2YgY291cnNlLCBJIG5lZWQgdG8gZW5hYmxlIGBORl9UQUJMRVNgIGFuZCBgTkZUX0NUYCB0byBnZXQgYG5mdF9jdF9oZWxwZXJfb2JqX2V2YWxgIGdvaW5nLiBUaGF0IHNob3VsZCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBsb2FkZWQuIEdvdHRhIGRvdWJsZSBjaGVjayB0aGF0IGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZvciBgTkZUX0NUYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDg1PWNvbmZpZyBORlRfTlVNR0VOXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzQxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBORVRGSUxURVJfWFRfVEFSR0VUX0NUYCBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzZWUuLi4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gVGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgTmV0ZmlsdGVyLXNwZWNpZmljIG9wdGlvbnMgYXJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IHVwIGFuZCBzZWFyY2ggZm9yIHRoYXQgc3ltYm9sLiBIb3BlZnVsbHksIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIEkgY2FuIHF1aWNrbHkgZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyBlbmFibGVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGZvciBpdHMgaW5jbHVzaW9uLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGxvb2t1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTg0OT1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04NjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODYxOmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODYyLVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtDVFwmIzM0OyB0YXJnZXQgc3VwcG9ydCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjcwCgkJCQkJCQlvdXRwdXQ6IDE3OAoJCQkJCQkJdGhvdWdodHM6IDU2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBFeHRlbnNpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHN1Z2dlc3RlZCBjb25maWd1cmF0aW9ucyDigJMgYE5GX0NPTk5UUkFDS2AsIGBORl9DT05OVFJBQ0tfRlRQYCwgYE5GVF9DVGAsIGFuZCBgTkVURklMVEVSX1hUX1RBUkdFVF9DVGAg4oCTIGFyZSBhbGwgcmVsZXZhbnQgYW5kIGxpa2VseSBuZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4KClJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmLCBJIHNlZSB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyB3aXRoaW4gYG5mX2N0X2V4dF9hZGRgLiBUaGUgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIGFsbG9jYXRpb24gYW5kIHJlYWxsb2NhdGlvbiBvZiB0aGUgY29ubnRyYWNrIGV4dGVuc2lvbiBzcGFjZSAoYGN0LSZndDtleHRgKS4gVGhlIGNvZGUgbm93IGNoZWNrcyBpZiB0aGUgYE5GX0NUX0VYVF9IRUxQRVJgIGV4dGVuc2lvbiBhbHJlYWR5IGV4aXN0cy4gSWYgaXQgKmRvZXMqLCB0aGUgcGF0Y2ggcHJldmVudHMgYW55IGZ1cnRoZXIgYGtyZWFsbG9jYCBjYWxscywgZWZmZWN0aXZlbHkgZnJlZXppbmcgdGhlIGV4aXN0aW5nIGV4dGVuc2lvbi4gQ29udmVyc2VseSwgaWYgd2UmIzM5O3JlIGFkZGluZyB0aGUgaGVscGVyIGV4dGVuc2lvbiAoYGlkID09IE5GX0NUX0VYVF9IRUxQRVJgKSwgdGhlIGFsbG9jYXRpb24gc2l6ZSBpcyBmb3JjZWQgdG8gdGhlIG1heGltdW0gKGBVOF9NQVhgKS4gVGhpcyBpcyBhIHNvbGlkLCB0YXJnZXRlZCBhcHByb2FjaCB0byBtYW5hZ2luZyBoZWxwZXIgZXh0ZW5zaW9uIG1lbW9yeS4KCkZ1bmN0aW9uYWxseSwgdGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIHRocm91Z2ggdmFyaW91cyBjb25udHJhY2sgaGVscGVyIGFkZGl0aW9uIG1ldGhvZHMg4oCTIHdoZXRoZXIgaXQmIzM5O3MgdGhyb3VnaCBuZXRsaW5rLCBuZnRhYmxlcywgb3IgaXB0YWJsZXMsIHZpYSB0aGUgYG5mX2N0X2V4dF9hZGRgIGZ1bmN0aW9uLgoKTm93LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSBzeW1ib2xzIGlzIGluIG9yZGVyLiBBaGEhIGBuZl9jdF9leHRfYWRkYCBpcyBleHBvcnRlZCAoYEVYUE9SVF9TWU1CT0xgKSwgbWFraW5nIGl0IHVuaXZlcnNhbGx5IGFjY2Vzc2libGUsIGFuZCBgbmZfY3RfaGVscGVyX2V4dF9hZGRgIGlzIGV4cG9ydGVkIGFzIHdlbGwgKGBFWFBPUlRfU1lNQk9MX0dQTGApLiBUaGF0IGNvbmZpcm1zIGl0cyB2aXNpYmlsaXR5IGFuZCB1dGlsaXR5LgoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBzdW1tYXJ5IGNvdmVycyB0aGUgaW1wb3J0YW50IHBvaW50cy4gTGV0JiMzOTtzIHJldHVybiB0aGUgZmluZGluZ3MgdXNpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfRlRQJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfY3RfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtuZl9jdF9oZWxwZXJfZXh0X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmZfY3RfZXh0X2FkZGAgdG8gcHJldmVudCByZWFsbG9jYXRpbmcgdGhlIGNvbm50cmFjayBleHRlbnNpb24gc3BhY2UgaWYgYSBoZWxwZXIgZXh0ZW5zaW9uIChgTkZfQ1RfRVhUX0hFTFBFUmApIGlzIGFscmVhZHkgcHJlc2VudCwgYW5kIHRvIHJlc2VydmUgbWF4aW11bSBzcGFjZSAoYFU4X01BWGApIHdoZW4gYWRkaW5nIGEgaGVscGVyIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25udHJhY2sgbG9naWMuIEl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIGNvbm50cmFjayBoZWxwZXJzIHZpYSBuZXRsaW5rLCBuZnRhYmxlcywgb3IgaXB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfRlRQJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfY3RfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtuZl9jdF9oZWxwZXJfZXh0X2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmZfY3RfZXh0X2FkZGAgdG8gcHJldmVudCByZWFsbG9jYXRpbmcgdGhlIGNvbm50cmFjayBleHRlbnNpb24gc3BhY2UgaWYgYSBoZWxwZXIgZXh0ZW5zaW9uIChgTkZfQ1RfRVhUX0hFTFBFUmApIGlzIGFscmVhZHkgcHJlc2VudCwgYW5kIHRvIHJlc2VydmUgbWF4aW11bSBzcGFjZSAoYFU4X01BWGApIHdoZW4gYWRkaW5nIGEgaGVscGVyIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25udHJhY2sgbG9naWMuIEl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIGNvbm50cmFjayBoZWxwZXJzIHZpYSBuZXRsaW5rLCBuZnRhYmxlcywgb3IgaXB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzowNS4yNjU0NzU1MTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjkyMzM0NTMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIixcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2N0X2V4dF9hZGRcIixcbiAgICBcIm5mX2N0X2hlbHBlcl9leHRfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2N0X2V4dF9hZGRgIHRvIHByZXZlbnQgcmVhbGxvY2F0aW5nIHRoZSBjb25udHJhY2sgZXh0ZW5zaW9uIHNwYWNlIGlmIGEgaGVscGVyIGV4dGVuc2lvbiAoYE5GX0NUX0VYVF9IRUxQRVJgKSBpcyBhbHJlYWR5IHByZXNlbnQsIGFuZCB0byByZXNlcnZlIG1heGltdW0gc3BhY2UgKGBVOF9NQVhgKSB3aGVuIGFkZGluZyBhIGhlbHBlciBleHRlbnNpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubnRyYWNrIGxvZ2ljLiBJdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFkZGluZyBjb25udHJhY2sgaGVscGVycyB2aWEgbmV0bGluaywgbmZ0YWJsZXMsIG9yIGlwdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzowNS4yNjU0ODEyNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODUyMzk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFhMDgzMDNiZjc1YzgxZmI2ZjBlNzIxMjg2MTdmMTJjZWE2NjZjNWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAyMTozMzowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jXFxuaW5kZXggMGRhMTA1ZTFkZWQ5My4uMTQyMTk0NGEzMDAzNSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jXFxuQEAgLTExMiw5ICsxMTIsMjEgQEAgdm9pZCAqbmZfY3RfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gbmZfY3RfZXh0X2lkIGlkLCBnZnBfdCBnZnApXFxuIFxcdG5ld2xlbiA9IG5ld29mZiArIG5mX2N0X2V4dF90eXBlX2xlbltpZF07XFxuIFxcbiBcXHRhbGxvYyA9IG1heChuZXdsZW4sIE5GX0NUX0VYVF9QUkVBTExPQyk7XFxuLVxcdG5ldyA9IGtyZWFsbG9jKGN0LVxcdTAwM2VleHQsIGFsbG9jLCBnZnApO1xcbi1cXHRpZiAoIW5ldylcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdC8qXFxuK1xcdCAqIE9uY2UgYW4gZXhwZWN0YXRpb24gaXMgbGlua2VkLCBpdHMgbGlzdCBub2RlIHBvaW50cyBiYWNrIHRvIHRoZVxcbitcXHQgKiBobGlzdCBoZWFkIGluIHRoZSBoZWxwZXIgZXh0ZW5zaW9uLiBSZXNlcnZlIGFsbCBhdmFpbGFibGUgZXh0ZW5zaW9uXFxuK1xcdCAqIHNwYWNlIGZvciB0aGUgaGVscGVyIGFuZCBkbyBub3QgbW92ZSBpdCBhZnRlcndhcmQuXFxuK1xcdCAqL1xcbitcXHRpZiAoY3QtXFx1MDAzZWV4dCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgX19uZl9jdF9leHRfZXhpc3QoY3QtXFx1MDAzZWV4dCwgTkZfQ1RfRVhUX0hFTFBFUikpIHtcXG4rXFx0XFx0bmV3ID0gY3QtXFx1MDAzZWV4dDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKGlkID09IE5GX0NUX0VYVF9IRUxQRVIpXFxuK1xcdFxcdFxcdGFsbG9jID0gVThfTUFYO1xcbitcXHRcXHRuZXcgPSBrcmVhbGxvYyhjdC1cXHUwMDNlZXh0LCBhbGxvYywgZ2ZwKTtcXG4rXFx0XFx0aWYgKCFuZXcpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIWN0LVxcdTAwM2VleHQpXFxuIFxcdFxcdG1lbXNldChuZXctXFx1MDAzZW9mZnNldCwgMCwgc2l6ZW9mKG5ldy1cXHUwMDNlb2Zmc2V0KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjA1LjY5NTAwNzY0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUyNDkzODA0NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiLFxuICAgIFwiTkZUX0NUXCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY3RfZXh0X2FkZFwiLFxuICAgIFwibmZfY3RfaGVscGVyX2V4dF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZfY3RfZXh0X2FkZGAgdG8gcHJldmVudCByZWFsbG9jYXRpbmcgdGhlIGNvbm50cmFjayBleHRlbnNpb24gc3BhY2UgaWYgYSBoZWxwZXIgZXh0ZW5zaW9uIChgTkZfQ1RfRVhUX0hFTFBFUmApIGlzIGFscmVhZHkgcHJlc2VudCwgYW5kIHRvIHJlc2VydmUgbWF4aW11bSBzcGFjZSAoYFU4X01BWGApIHdoZW4gYWRkaW5nIGEgaGVscGVyIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBjb25udHJhY2sgbG9naWMuIEl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgYWRkaW5nIGNvbm50cmFjayBoZWxwZXJzIHZpYSBuZXRsaW5rLCBuZnRhYmxlcywgb3IgaXB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFhMDgzMDNiZjc1YzgxZmI2ZjBlNzIxMjg2MTdmMTJjZWE2NjZjNWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIxOjMzOjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuY1xuaW5kZXggMGRhMTA1ZTFkZWQ5My4uMTQyMTk0NGEzMDAzNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuY1xuQEAgLTExMiw5ICsxMTIsMjEgQEAgdm9pZCAqbmZfY3RfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gbmZfY3RfZXh0X2lkIGlkLCBnZnBfdCBnZnApXG4gXHRuZXdsZW4gPSBuZXdvZmYgKyBuZl9jdF9leHRfdHlwZV9sZW5baWRdO1xuIFxuIFx0YWxsb2MgPSBtYXgobmV3bGVuLCBORl9DVF9FWFRfUFJFQUxMT0MpO1xuLVx0bmV3ID0ga3JlYWxsb2MoY3QtXHUwMDNlZXh0LCBhbGxvYywgZ2ZwKTtcbi1cdGlmICghbmV3KVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdC8qXG4rXHQgKiBPbmNlIGFuIGV4cGVjdGF0aW9uIGlzIGxpbmtlZCwgaXRzIGxpc3Qgbm9kZSBwb2ludHMgYmFjayB0byB0aGVcbitcdCAqIGhsaXN0IGhlYWQgaW4gdGhlIGhlbHBlciBleHRlbnNpb24uIFJlc2VydmUgYWxsIGF2YWlsYWJsZSBleHRlbnNpb25cbitcdCAqIHNwYWNlIGZvciB0aGUgaGVscGVyIGFuZCBkbyBub3QgbW92ZSBpdCBhZnRlcndhcmQuXG4rXHQgKi9cbitcdGlmIChjdC1cdTAwM2VleHQgXHUwMDI2XHUwMDI2XG4rXHQgICAgX19uZl9jdF9leHRfZXhpc3QoY3QtXHUwMDNlZXh0LCBORl9DVF9FWFRfSEVMUEVSKSkge1xuK1x0XHRuZXcgPSBjdC1cdTAwM2VleHQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoaWQgPT0gTkZfQ1RfRVhUX0hFTFBFUilcbitcdFx0XHRhbGxvYyA9IFU4X01BWDtcbitcdFx0bmV3ID0ga3JlYWxsb2MoY3QtXHUwMDNlZXh0LCBhbGxvYywgZ2ZwKTtcbitcdFx0aWYgKCFuZXcpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4gXG4gXHRpZiAoIWN0LVx1MDAzZWV4dClcbiBcdFx0bWVtc2V0KG5ldy1cdTAwM2VvZmZzZXQsIDAsIHNpemVvZihuZXctXHUwMDNlb2Zmc2V0KSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzowNS42OTUwMDk3MjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDUxNTQyNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEV4dGVuc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgdGFyZ2V0aW5nIHRoZSBgbmZfY3RfZXh0X2FkZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZSBjcnV4IG9mIHRoZSBtb2RpZmljYXRpb24gcmV2b2x2ZXMgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgdGhlIGBORl9DVF9FWFRfSEVMUEVSYCBleHRlbnNpb24gYW5kIHRoZSB1c2Ugb2YgYGtyZWFsbG9jYC4gVGhlIGdvYWwgaXMgdG8gYmUgbW9yZSBlZmZpY2llbnQgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBoZWxwZXJzLlxuXG5Fc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWFsbG9jYXRpb24gb2YgYGN0LVx1MDAzZWV4dGAgaWYgYSBgTkZfQ1RfRVhUX0hFTFBFUmAgZXh0ZW5zaW9uIGFscmVhZHkgZXhpc3RzLiBTbWFydC4gQW5kLCB3aGVuIGBpZGAgaXMgaW5kZWVkIGBORl9DVF9FWFRfSEVMUEVSYCwgaXQncyBwcmUtYWxsb2NhdGluZyBgVThfTUFYYCAoMjU1KSBieXRlcy4gVGhpcyBpcyBsaWtlbHkgdG8gcmVzZXJ2ZSBhbGwgYXZhaWxhYmxlIGV4dGVuc2lvbiBzcGFjZSwgbGlrZWx5IHdpdGggYSBkZXNpZ24gdG8gYXZvaWQgcnVubmluZyBvdXQgb2Ygc3BhY2UsIGFuZCBob3BlZnVsbHkgcmVkdWNlIGZyYWdtZW50YXRpb24uXG5cbk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBkb3VibGUtY2hlY2sgYG5mX2N0X2V4dF9hZGRgIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgTkZfQ1RfRVhUX0hFTFBFUmAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuIFllYWgsIHRoaXMgYWxsIHNlZW1zIGZ1bmN0aW9uYWxseSBzb3VuZCBhbmQgcmVhY2hhYmxlLCB0aGVyZSdzIG5vIGdsYXJpbmcgcmVkIGZsYWdzLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIGVuYWJsZSB0aGlzLiBJdCBsb29rcyBsaWtlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuY2AgaXMgcGFydCBvZiBgTkZfQ09OTlRSQUNLYCwgc28gSSdsbCBzdGFydCB3aXRoIHRoYXQgYW5kIG1vdmUgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjEwLjc0NjU1NTg4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDYyNzM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF9leHRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jPTMxOT1ib29sIG5mX2N0X2VjYWNoZV9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgdTE2IGN0bWFzaywgdTE2IGV4cG1hc2ssIGdmcF90IGdmcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jLTM0NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuYzozNDY6XFx0ZSA9IG5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9FQ0FDSEUsIGdmcCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMtMzQ3LVxcdGlmIChlKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYz01Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludCB0b3RhbF9leHRlbnNpb25fc2l6ZSh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtODktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM6OTA6dm9pZCAqbmZfY3RfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gbmZfY3RfZXh0X2lkIGlkLCBnZnBfdCBnZnApXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtOTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtMTQwLX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYzoxNDE6RVhQT1JUX1NZTUJPTChuZl9jdF9leHRfYWRkKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTE4Mz1uZl9jdF9oZWxwZXJfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxODc6XFx0aGVscCA9IG5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9IRUxQRVIsIGdmcCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTg4LVxcdGlmIChoZWxwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmM9NDM0PWNvbm50cmFja19wcHRwX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtNDU4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYzo0NTk6XFx0XFx0aWYgKCFuYXQgXFx1MDAyNlxcdTAwMjYgIW5mX2N0X2V4dF9hZGQoY3QsIE5GX0NUX0VYVF9OQVQsIEdGUF9BVE9NSUMpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy00NjAtXFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM9NzQ1PXN0cnVjdCBuZl9jb25uX25hdCAqbmZfY3RfbmF0X2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTc1MS1cXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjc1MjpcXHRcXHRuYXQgPSBuZl9jdF9leHRfYWRkKGN0LCBORl9DVF9FWFRfTkFULCBHRlBfQVRPTUlDKTtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzoxMC44MzcxODg3MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA0MDI1OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZl9jdF9leHRfYWRkYCBVc2FnZSBhbmQgQnVpbGQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgbmZfY3RfZXh0X2FkZGAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBiZWluZyB1c2VkIGJ5ICptdWx0aXBsZSogbW9kdWxlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhpcyBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIGJ1aWxkLXN5c3RlbSBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICplbmFibGluZyogdGhlIHVuZGVybHlpbmcgc291cmNlIGZpbGUsIGBuZl9jb25udHJhY2tfZXh0ZW5kLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbmQgdWx0aW1hdGVseSwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgY29tZSBpbnRvIHBsYXkuXG5cbk15IGltbWVkaWF0ZSBhY3Rpb24gd2lsbCBiZSB0byBkZWx2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVuczsgaXQnbGwgcG9pbnQgbWUgdG8gdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIG9mIHRoYXQgc3BlY2lmaWMgbW9kdWxlIGFuZCB0aHVzLCB0aGUgYXZhaWxhYmlsaXR5IG9mIGBuZl9jdF9leHRfYWRkYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IHRpZWQgdG8gc29tZSBgQ09ORklHX2Agb3B0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGBuZl9jb25udHJhY2tfZXh0ZW5kLm9gIGlzIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gS25vd2luZyAqdGhhdCogd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24ncyB1c2FnZSBjb250ZXh0IGFuZCB0aGUgc2NlbmFyaW9zIGluIHdoaWNoIGl0J3MgYXZhaWxhYmxlLiBOb3csIEknbSBvZmYgdG8gdGhlIE1ha2VmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MTQuMjQxMjE3MzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMjUxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX2V4dGVuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NT1uZl9jb25udHJhY2steVxcdDo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNy1cXHRcXHQgICBuZl9jb25udHJhY2tfcHJvdG9faWNtcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg6XFx0XFx0ICAgbmZfY29ubnRyYWNrX2V4dGVuZC5vIG5mX2Nvbm50cmFja19hY2N0Lm8gbmZfY29ubnRyYWNrX3NlcWFkai5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzoxNC4yOTM0NDcwMTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMxNjIyOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZl9jb25udHJhY2tgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gYG5mX2Nvbm50cmFjay15YCwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBhY3R1YWxseSAqZW5hYmxlcyogYG5mX2Nvbm50cmFja2AgaW4gdGhlIGZpcnN0IHBsYWNlP1wiIEl0J3Mgbm90IGVub3VnaCB0byBrbm93IHRoZSBjb21wb25lbnQgZXhpc3RzOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIHNldHRpbmcsIGxpa2VseSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGJyaW5ncyB0aGlzIGNydWNpYWwgcGllY2Ugb2YgdGhlIG5ldHdvcmtpbmcgcHV6emxlIGludG8gcGxheS4gS25vd2luZyB0aGlzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGludG8gaG93IGl0cyBhY3RpdmF0aW9uIGlzIGNvbnRyb2xsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzoxNy4yMjUwNzQ3MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NTU5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrLXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSArPSBuZm5ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU6bmZfY29ubnRyYWNrLXlcXHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS02LVxcdFxcdCAgIG5mX2Nvbm50cmFja19wcm90by5vIG5mX2Nvbm50cmFja19wcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5vIG5mX2Nvbm50cmFja19wcm90b191ZHAubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjE3LjI4MzYzNTU1MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTA0ODc1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgc3BlY2lmaWMgTWFrZWZpbGUgdGFzazpcblxuKipBbmFseXppbmcgdGhlIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIG15IGludGVybmFsIGNoZWNrbGlzdCBoYXMgZmxhZ2dlZCBzb21ldGhpbmcgdGhhdCBuZWVkcyBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZywgd2hpY2ggSSBrbm93IGlzIGNydWNpYWwgZm9yIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgYG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBUaGlzIGlzIHRoZSBmaWxlIHRoYXQgZ292ZXJucyBob3cgdGhvc2UgTmV0ZmlsdGVyIG1vZHVsZXMgYXJlIGJ1aWx0IGFuZCBpbmNsdWRlZC4gU28sIEkgbmVlZCB0byBnZXQgaW4gdGhlcmUgYW5kIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRpY3RhdGVzIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgb2JqZWN0IGZpbGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIGEgc3RhbmRhcmQgYXBwcm9hY2ggYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGhlcmUsIGJlY2F1c2UgY29ubmVjdGlvbiB0cmFja2luZyBpcyBmb3VuZGF0aW9uYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzoyMC4zOTQxMjU4NzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTgyNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai0uKk5GX0NPTk5UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0spICs9IG5mbmV0bGlua19ob29rLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzMtIyBjb25uZWN0aW9uIHRyYWNraW5nXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLKSArPSBuZl9jb25udHJhY2sub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTQyPW5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDMtXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQSkgKz0gbmZfY29ubnRyYWNrX2FtYW5kYS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgKz0gbmZfY29ubnRyYWNrX2Z0cC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMpICs9IG5mX2Nvbm50cmFja19oMzIzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSVJDKSArPSBuZl9jb25udHJhY2tfaXJjLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfQlJPQURDQVNUKSArPSBuZl9jb25udHJhY2tfYnJvYWRjYXN0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ5Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUykgKz0gbmZfY29ubnRyYWNrX25ldGJpb3NfbnMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTA6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19TTk1QKSArPSBuZl9jb25udHJhY2tfc25tcC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFApICs9IG5mX2Nvbm50cmFja19wcHRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSkgKz0gbmZfY29ubnRyYWNrX3NhbmUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19TSVApICs9IG5mX2Nvbm50cmFja19zaXAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTQ6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19URlRQKSArPSBuZl9jb25udHJhY2tfdGZ0cC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS01NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MjAuNDgwNzE0MzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MTcxNTM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0J3MgZ29pbmcgb24sIHRoaW5raW5nIGxpa2UgYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBFeHRlbnNpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGNvbm5lY3Rpb24gdHJhY2tpbmcsIHNwZWNpZmljYWxseSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYENPTkZJR19ORl9DT05OVFJBQ0tgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZm91bmRhdGlvbiB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBzZWUgYSBwYXRjaCB0aGF0J3MgZ290IG15IGF0dGVudGlvbiwgaXQgbG9va3MgbGlrZSB0aGlzIG9uZSB0b3VjaGVzIGBuZl9jdF9leHRfYWRkYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jYC4gVGhhdCBmaWxlJ3MgZ290IHRoZSBsb3dkb3duIG9uIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGV4dGVuZGVkLCBhbmQgYG5mX2N0X2V4dF9hZGRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gZm9yIGFkZGluZyB0aGVzZSBleHRlbnNpb25zLlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBuZXcgbG9naWMgdG8gZGVhbCB3aXRoIGBORl9DVF9FWFRfSEVMUEVSYC4gT2theSwgYE5GX0NUX0VYVF9IRUxQRVJgLi4uIHRoYXQgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBoYW5kbGluZyBhcHBsaWNhdGlvbiBsYXllciBoZWxwZXIgbW9kdWxlcyBpbiBzb21lIHdheSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBUaGF0J3MgYSBjbGFzc2ljIGFyZWEgZm9yIGltcHJvdmluZyBzdGF0ZWZ1bCBpbnNwZWN0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNoYW5nZSBpcyBnb2luZyB0byByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBjYWxsaW5nIGBuZl9jdF9leHRfYWRkYCB3aXRoIHRoZSBgTkZfQ1RfRVhUX0hFTFBFUmAgZmxhZyBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZC4gS25vd2luZyB3aGljaCBjYWxsIHNpdGVzIGFyZSBtYWtpbmcgdGhlc2UgYWRkaXRpb25zIHdpbGwgYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgaW1wYWN0IGFuZCBwb3NzaWJsZSBzaWRlIGVmZmVjdHMgb2YgdGhpcyBwYXRjaC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgdHJhY2UgdGhvc2UgY2FsbCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjI0LjY1MjQzMjQ0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzOTYyMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2N0X2V4dF9hZGQuKk5GX0NUX0VYVF9IRUxQRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTgzPW5mX2N0X2hlbHBlcl9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTg2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE4NzpcXHRoZWxwID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX0hFTFBFUiwgZ2ZwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xODgtXFx0aWYgKGhlbHApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MjQuNzY2Mzk4NDkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTc1NjQxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgRnVuY3Rpb24gQ2FsbCBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5mX2N0X2hlbHBlcl9leHRfYWRkYC4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBrZXkgcm9sZSBpbiBhZGRpbmcgZXh0ZW5zaW9ucyBvciBoZWxwZXJzIHRvIGEgY29ubmVjdGlvbiB0cmFja2luZyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxpbmcgaGllcmFyY2h5IHRvIGZ1bGx5IGdyYXNwIGl0cyBvcGVyYXRpb25hbCBjb250ZXh0IHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIEtub3dpbmcgdGhlIHVwc3RyZWFtIGNhbGxlcnMgd2lsbCB0ZWxsIG1lICp3aHkqIGFuZCAqaG93KiBgbmZfY3RfaGVscGVyX2V4dF9hZGRgIGlzIGJlaW5nIGludm9rZWQuIFRoaXMgd2lsbCBpbGx1bWluYXRlIHRoZSBicm9hZGVyIHN5c3RlbSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MjcuNTYzOTY0NzI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzk0MzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF9oZWxwZXJfZXh0X2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTc1ND1pbml0X2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE4MTktXFx0XFx0XFx0aWYgKGFzc2lnbl9oZWxwZXIpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTgyMDpcXHRcXHRcXHRcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xODIxLVxcdFxcdFxcdFxcdGlmIChoZWxwIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2YXNzaWduX2hlbHBlci1cXHUwMDNlY3RfcmVmY250KSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTE4Mj1zdHJ1Y3QgbmZfY29ubl9oZWxwICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxODM6bmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTg0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTE5My19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTk0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9leHRfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xOTUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MTk2PWludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yMjYtXFx0aWYgKGhlbHAgPT0gTlVMTCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjIyNzpcXHRcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIGZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0yMjgtXFx0XFx0aWYgKGhlbHAgPT0gTlVMTClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yMjIyPWN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMjc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyMjc2OlxcdFxcdFxcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTIyNzctXFx0XFx0XFx0aWYgKGhlbHAgPT0gTlVMTCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmM9ODU9aW50IG5mX2N0X2FkZF9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpuYW1lLCB1OCBmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy05NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYzo5NjpcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9LRVJORUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTk3LVxcdGlmICghaGVscCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMTEyPXN0YXRpYyB2b2lkIG5mdF9jdF9oZWxwZXJfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTE0NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjExNDU6XFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTExNDYtXFx0aWYgKGhlbHAgXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZ0b19hc3NpZ24tXFx1MDAzZWN0X3JlZmNudCkpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTMxMT1zdGF0aWMgdm9pZCBuZnRfY3RfZXhwZWN0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzMzEtXFx0aWYgKCFoZWxwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTMzMjpcXHRcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMzMy1cXHRpZiAoIWhlbHApIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYz03ND14dF9jdF9zZXRfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqaGVscGVyX25hbWUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtOTMtXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjk0OlxcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7XFxubmV0L25ldGZpbHRlci94dF9DVC5jLTk1LVxcdGlmIChoZWxwID09IE5VTEwpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MjcuNjUxOTE0MzM1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MzA2MjMzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoIG9uIGBuZl9jdF9leHRfYWRkYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0cyBtb2RpZmljYXRpb24gb2YgYG5mX2N0X2V4dF9hZGRgLiBUaGlzIGZ1bmN0aW9uLCBJIHNlZSwgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIGNvbm50cmFjayBzeXN0ZW0uIEl04oCZcyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBhcmVhcyBpbmNsdWRpbmcgYGluaXRfY29ubnRyYWNrYCwgYF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXJgLCBhbmQgdmFyaW91cyBuZXRsaW5rIGFuZCBOZXRmaWx0ZXIgdGFibGUgZnVuY3Rpb25zIChgY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2tgLCBgbmZ0X2N0X2hlbHBlcl9vYmpfZXZhbGAsIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYCwgYHh0X2N0X3NldF9oZWxwZXJgKSwgaW5kaWNhdGluZyBpdHMgaW1wb3J0YW5jZSBpbiBoZWxwZXIgYXNzaWdubWVudCBhbmQgY29ubnRyYWNrIGNyZWF0aW9uLlxuXG5GaXJzdCwgbGV0J3MgbmFpbCBkb3duIGFueSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBpcyBjbGVhcmx5IGEgbXVzdCwgb2J2aW91c2x5LiBJJ2xsIG5lZWQgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS2AgdG8gYmUgZW5hYmxlZCBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGBjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFja2AsIGBDT05GSUdfTkZfVEFCTEVTYCBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGBuZnRfY3RgLCBgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgIGZvciBgeHRfQ1RgLiBBbmQgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgQ09ORklHX09QRU5WU1dJVENIYCB0byBiZSBlbmFibGVkIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYG5mX2Nvbm50cmFja19vdnMuY2AuXG5cbk5vdywgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgYG5mX2N0X2V4dF9hZGRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLCB3aGljaCBhZGRzIGEgbmV3IGNvbm50cmFjayBleHRlbnNpb24uIFRoZSBzaWduaWZpY2FudCBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZCBhcmUgYG5mX2N0X2V4dF9hZGRgLCBgbmZfY3RfaGVscGVyX2V4dF9hZGRgLCBhbmQgdGhlIHZhcmlvdXMgcGxhY2VzIHdoZXJlIHRoZXkgYXJlIGNhbGxlZC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIGlzIHRoaXMgYSBob3QtcGF0aCBmdW5jdGlvbj8gR2l2ZW4gdGhhdCBgbmZfY3RfZXh0X2FkZGAgaXMgaW52b2tlZCB3aGVuIGEgbmV3IGNvbm50cmFjayBleHRlbnNpb24gaXMgYWRkZWQsIHRoaXMgZ2VuZXJhbGx5IGhhcHBlbnMgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAsIG5vdCBvbiBhIHBlci1wYWNrZXQgYmFzaXMsIGFuZCB0aGF0J3MgZ29vZCBuZXdzLiBUaGF0IG1ha2VzIGl0IG1vcmUgbWFuYWdlYWJsZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgaXQncyBub3QgZ29pbmcgdG8gYmUgdHJpZ2dlcmVkIG1pbGxpb25zIG9mIHRpbWVzIGV2ZXJ5IHNlY29uZCwgaWYgaXRzIHBlci1jb25uZWN0aW9uLlxuXG5Ob3cgSSBuZWVkIHRvIGFsc28gY2hlY2sgYWJvdXQgYENPTkZJR19ORl9DT05OVFJBQ0tfSEVMUEVSYCwgdG8gbWFrZSBzdXJlIGl0cyBhbHNvIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MzUuMTgyNTQwNTk0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTczNDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cXHRib29sIFxcXCJTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cXHRib29sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVxcdHRyaXN0YXRlIFxcXCJBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVxcdHRyaXN0YXRlXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIk5ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cXHR0cmlzdGF0ZSBcXFwiU05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cXHR0cmlzdGF0ZSBcXFwiUFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVxcdHRyaXN0YXRlIFxcXCJTQU5FIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJTSVAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVxcdHRyaXN0YXRlIFxcXCJURlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjM1LjI2ODI4MDA1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkyNTEyMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbm50cmFjayBIZWxwZXIgQ29uZnVzaW9uKipcblxuT2theSwgc28gSSB3YXMgbG9va2luZyBmb3IgYENPTkZJR19ORl9DT05OVFJBQ0tfSEVMUEVSYCwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBleGlzdCBhcyBhIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMsIFwiQWhhISBJdCdzIHByb2JhYmx5IGp1c3QgaW5jbHVkZWQgd2l0aGluIGBDT05GSUdfTkZfQ09OTlRSQUNLYC5cIlxuXG5KdXN0IHRvIGNvbmZpcm0sIEkgd2FzIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY2AgdG8gc2VlIGlmIHRoZXJlIHdhcyBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQgSSBhbHJlYWR5IGRpZCBhIHF1aWNrIHNjYW4gb2YgdGhlIGBNYWtlZmlsZWAgYW5kIGl0J3MgYnVpbHQtaW4gKCBgbmZfY29ubnRyYWNrLXlgKS5cblxuU28sIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX05GX0NPTk5UUkFDS2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgb3RoZXIgb3B0aW9ucyBvciBmZWF0dXJlcyBhcmUgdGllZCB0byBpdC4gR290dGEgZmlndXJlIG91dCB0aGUgd2hvbGUgcGljdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTAxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjM4LjY2MDc5NjA5OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjUzMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjE6MzM6MzguNzc2NDY4NTA2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MzY3NzM3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21lIHNwZWNpZmljIG5ldGZpbHRlciBjb25maWd1cmF0aW9ucywgc28gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIG9uIGFyb3VuZCBsaW5lIDgyOyBob3BlZnVsbHksIHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIEknbSBpbnRlcmVzdGVkIGluIGFyZSBsb2NhdGVkLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMTozMzo0MS41MTMyNDQ5ODJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHQgIGZvciBwYXNzaXZlIE9TIGZpbmdlcnByaW50IHZpYSBORk5FVExJTksuXFxuICA4MTpcXHRcXG4gIDgyOlxcdGNvbmZpZyBORl9DT05OVFJBQ0tcXG4gIDgzOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbiAgODQ6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA4NTpcXHRcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcXG4gIDg2OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBJUFY2ICE9IG5cXG4gIDg3OlxcdFxcdGhlbHBcXG4gIDg4OlxcdFxcdCAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWRcXG4gIDg5OlxcdFxcdCAgdGhyb3VnaCB5b3VyIG1hY2hpbmUsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHJlbGF0ZWRcXG4gIDkwOlxcdFxcdCAgaW50byBjb25uZWN0aW9ucy5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0ICBUaGlzIGlzIHJlcXVpcmVkIHRvIGRvIE1hc3F1ZXJhZGluZyBvciBvdGhlciBraW5kcyBvZiBOZXR3b3JrXFxuICA5MzpcXHRcXHQgIEFkZHJlc3MgVHJhbnNsYXRpb24uICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGVuaGFuY2UgcGFja2V0XFxuICA5NDpcXHRcXHQgIGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQnIGJlbG93KS5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDk3OlxcdFxcbiAgOTg6XFx0Y29uZmlnIE5GX0xPR19TWVNMT0dcXG4gIDk5OlxcdFxcdHRyaXN0YXRlIFxcXCJTeXNsb2cgcGFja2V0IGxvZ2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjQxLjUxMzQyNDY0MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDI2NTc3NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIE9wdGltaXphdGlvbiAtIFRoaW5raW5nIE91dCBMb3VkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgY29uZmlndXJpbmcgdGhpcyBrZXJuZWwuIGBORl9DT05OVFJBQ0tgIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQgb25seSBkZXBlbmRzIG9uIGBORVRGSUxURVJgLCB3aGljaCBpcyB0aGUgY29yZSwgc28gZW5hYmxpbmcgdGhhdCBzaG91bGQgYmUgZmluZS4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5CdXQsIGhhbmcgb24sIGl0J3Mgd29ydGggY2hlY2tpbmcgaWYgdGhlcmUgYXJlICpvdGhlciogcG90ZW50aWFsbHkgdXNlZnVsIGNvbmZpZ3VyYXRpb25zIEkgc2hvdWxkIGVuYWJsZSBhbG9uZ3NpZGUgaXQuIExldCdzIHNlZS4uLiBBaCwgeWVzLCB0aGUgcHJvdG9jb2wgaGVscGVycyEgYE5GX0NPTk5UUkFDS19GVFBgLCBgTkZfQ09OTlRSQUNLX0lSQ2AsIGFsbCB0aGVzZSBndXlzLiBUaGV5IHV0aWxpemUgYE5GX0NUX0VYVF9IRUxQRVJgLCBzbyBpbmNsdWRpbmcgdGhlc2Ugc2hvdWxkIGJyaW5nIHRoYXQgZnVuY3Rpb25hbGl0eSBpbi4gSSBzaG91bGQgcHJvYmFibHkgYWRkIHRoZW0gaW4gdG8gZ2V0IGl0LlxuXG5BbHJpZ2h0LCBsZXQncyBlbmFibGUgYWxsIHRoZSBwcm90b2NvbCBoZWxwZXJzOiBgTkZfQ09OTlRSQUNLX0ZUUGAsIGBORl9DT05OVFJBQ0tfSVJDYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGBORl9DT05OVFJBQ0tfQlJPQURDQVNUYCwgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYCwgYE5GX0NPTk5UUkFDS19TTk1QYCwgYE5GX0NPTk5UUkFDS19QUFRQYCwgYE5GX0NPTk5UUkFDS19TQU5FYCwgYE5GX0NPTk5UUkFDS19URlRQYC4gTm8sIHdhaXQuLi4gdGhhdCBtaWdodCBiZSBvdmVya2lsbC4gSSBiZXQgYE5GX0NPTk5UUkFDS19GVFBgIGFuZCBgTkZfQ09OTlRSQUNLX0lSQ2AgYWxvbmUgd2lsbCBiZSBlbm91Z2ggdG8gdHJpZ2dlciB0aGUgaGVscGVyIGxvZ2ljIEknbSBpbnRlcmVzdGVkIGluLiBTaW1wbGlmaWNhdGlvbiBpcyBrZXkuXG5cbkFuZCwgb2YgY291cnNlLCBJIG5lZWQgdG8gZW5hYmxlIGBORl9UQUJMRVNgIGFuZCBgTkZUX0NUYCB0byBnZXQgYG5mdF9jdF9oZWxwZXJfb2JqX2V2YWxgIGdvaW5nLiBUaGF0IHNob3VsZCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBsb2FkZWQuIEdvdHRhIGRvdWJsZSBjaGVjayB0aGF0IGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZvciBgTkZUX0NUYC4gTGV0J3MgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjQ2Ljk0MDAwNTA3NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzMDI4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9DVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ4NT1jb25maWcgTkZUX05VTUdFTlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDkxOmNvbmZpZyBORlRfQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkyLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjQ2Ljk5MzMxMTk4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODU0ODcyOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgTkVURklMVEVSX1hUX1RBUkdFVF9DVGAgaXMgZGVmaW5lZCBpbiB0aGUga2VybmVsJ3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSBrbm93IGl0J3MgcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBMZXQncyBzZWUuLi4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gVGhhdCdzIHdoZXJlIGEgbG90IG9mIHRoZSBOZXRmaWx0ZXItc3BlY2lmaWMgb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIG9wZW4gdGhhdCB1cCBhbmQgc2VhcmNoIGZvciB0aGF0IHN5bWJvbC4gSG9wZWZ1bGx5LCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIEkgY2FuIHF1aWNrbHkgZGV0ZXJtaW5lIGhvdyBpdCdzIGVuYWJsZWQsIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIGl0cyBpbmNsdXNpb24uIFRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgbG9va3VwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjQ5Ljg0ODE4NzY0OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyODI5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz04NDk9Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04NjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjg2MTpjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04NjItXFx0dHJpc3RhdGUgJ1xcXCJDVFxcXCIgdGFyZ2V0IHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjQ5LjkwODQ3NjY0N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTU5OTk2ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIEV4dGVuc2lvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHN1Z2dlc3RlZCBjb25maWd1cmF0aW9ucyDigJMgYE5GX0NPTk5UUkFDS2AsIGBORl9DT05OVFJBQ0tfRlRQYCwgYE5GVF9DVGAsIGFuZCBgTkVURklMVEVSX1hUX1RBUkdFVF9DVGAg4oCTIGFyZSBhbGwgcmVsZXZhbnQgYW5kIGxpa2VseSBuZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC5cblxuUmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYsIEkgc2VlIHRoYXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiBgbmZfY3RfZXh0X2FkZGAuIFRoZSBtb2RpZmljYXRpb24gc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgYWxsb2NhdGlvbiBhbmQgcmVhbGxvY2F0aW9uIG9mIHRoZSBjb25udHJhY2sgZXh0ZW5zaW9uIHNwYWNlIChgY3QtXHUwMDNlZXh0YCkuIFRoZSBjb2RlIG5vdyBjaGVja3MgaWYgdGhlIGBORl9DVF9FWFRfSEVMUEVSYCBleHRlbnNpb24gYWxyZWFkeSBleGlzdHMuIElmIGl0ICpkb2VzKiwgdGhlIHBhdGNoIHByZXZlbnRzIGFueSBmdXJ0aGVyIGBrcmVhbGxvY2AgY2FsbHMsIGVmZmVjdGl2ZWx5IGZyZWV6aW5nIHRoZSBleGlzdGluZyBleHRlbnNpb24uIENvbnZlcnNlbHksIGlmIHdlJ3JlIGFkZGluZyB0aGUgaGVscGVyIGV4dGVuc2lvbiAoYGlkID09IE5GX0NUX0VYVF9IRUxQRVJgKSwgdGhlIGFsbG9jYXRpb24gc2l6ZSBpcyBmb3JjZWQgdG8gdGhlIG1heGltdW0gKGBVOF9NQVhgKS4gVGhpcyBpcyBhIHNvbGlkLCB0YXJnZXRlZCBhcHByb2FjaCB0byBtYW5hZ2luZyBoZWxwZXIgZXh0ZW5zaW9uIG1lbW9yeS5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGNoYW5nZSBpcyByZWFjaGFibGUgdGhyb3VnaCB2YXJpb3VzIGNvbm50cmFjayBoZWxwZXIgYWRkaXRpb24gbWV0aG9kcyDigJMgd2hldGhlciBpdCdzIHRocm91Z2ggbmV0bGluaywgbmZ0YWJsZXMsIG9yIGlwdGFibGVzLCB2aWEgdGhlIGBuZl9jdF9leHRfYWRkYCBmdW5jdGlvbi5cblxuTm93LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSBzeW1ib2xzIGlzIGluIG9yZGVyLiBBaGEhIGBuZl9jdF9leHRfYWRkYCBpcyBleHBvcnRlZCAoYEVYUE9SVF9TWU1CT0xgKSwgbWFraW5nIGl0IHVuaXZlcnNhbGx5IGFjY2Vzc2libGUsIGFuZCBgbmZfY3RfaGVscGVyX2V4dF9hZGRgIGlzIGV4cG9ydGVkIGFzIHdlbGwgKGBFWFBPUlRfU1lNQk9MX0dQTGApLiBUaGF0IGNvbmZpcm1zIGl0cyB2aXNpYmlsaXR5IGFuZCB1dGlsaXR5LlxuXG5JJ20gY29uZmlkZW50IHRoaXMgc3VtbWFyeSBjb3ZlcnMgdGhlIGltcG9ydGFudCBwb2ludHMuIExldCdzIHJldHVybiB0aGUgZmluZGluZ3MgdXNpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NzAsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIxOjMzOjU4LjA2ODQ3NjgzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDMzMjUwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfRlRQXCIsXG4gICAgXCJORlRfQ1RcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jdF9leHRfYWRkXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJfZXh0X2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBuZl9jdF9leHRfYWRkYCB0byBwcmV2ZW50IHJlYWxsb2NhdGluZyB0aGUgY29ubnRyYWNrIGV4dGVuc2lvbiBzcGFjZSBpZiBhIGhlbHBlciBleHRlbnNpb24gKGBORl9DVF9FWFRfSEVMUEVSYCkgaXMgYWxyZWFkeSBwcmVzZW50LCBhbmQgdG8gcmVzZXJ2ZSBtYXhpbXVtIHNwYWNlIChgVThfTUFYYCkgd2hlbiBhZGRpbmcgYSBoZWxwZXIgZXh0ZW5zaW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGNvbm50cmFjayBsb2dpYy4gSXQgY2FuIGJlIHRyaWdnZXJlZCBieSBhZGRpbmcgY29ubnRyYWNrIGhlbHBlcnMgdmlhIG5ldGxpbmssIG5mdGFibGVzLCBvciBpcHRhYmxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIixcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2N0X2V4dF9hZGRcIixcbiAgICBcIm5mX2N0X2hlbHBlcl9leHRfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2N0X2V4dF9hZGRgIHRvIHByZXZlbnQgcmVhbGxvY2F0aW5nIHRoZSBjb25udHJhY2sgZXh0ZW5zaW9uIHNwYWNlIGlmIGEgaGVscGVyIGV4dGVuc2lvbiAoYE5GX0NUX0VYVF9IRUxQRVJgKSBpcyBhbHJlYWR5IHByZXNlbnQsIGFuZCB0byByZXNlcnZlIG1heGltdW0gc3BhY2UgKGBVOF9NQVhgKSB3aGVuIGFkZGluZyBhIGhlbHBlciBleHRlbnNpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29ubnRyYWNrIGxvZ2ljLiBJdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFkZGluZyBjb25udHJhY2sgaGVscGVycyB2aWEgbmV0bGluaywgbmZ0YWJsZXMsIG9yIGlwdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowlh47n[1] Phase: Succeeded StartedAt: 2026-08-01 21:34:09 +0000 UTC FinishedAt: 2026-08-01 21:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 21:34:09 +0000 UTC FinishedAt: 2026-08-01 21:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2] Phase: Succeeded StartedAt: 2026-08-01 21:34:09 +0000 UTC FinishedAt: 2026-08-02 01:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 21:34:09 +0000 UTC FinishedAt: 2026-08-02 01:20:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 21:34:09 +0000 UTC FinishedAt: 2026-08-01 21:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 21:34:09 +0000 UTC FinishedAt: 2026-08-01 21:34:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowlh47n/series-workflowlh47n-convert-artifact-1336552638/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 21:34:19 +0000 UTC FinishedAt: 2026-08-01 21:54:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 21:34:19 +0000 UTC FinishedAt: 2026-08-01 21:54:41 +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:*21e0ddbc-d299-478e-ba63-93679b308e23,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-workflowlh47n/series-workflowlh47n-convert-artifact-1336552638/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": "e2a0379d-00e2-47ce-959e-944706dec822", "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-workflowlh47n/series-workflowlh47n-build-action-1898055076/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 21:34:19 +0000 UTC FinishedAt: 2026-08-01 21:54:19 +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:*21e0ddbc-d299-478e-ba63-93679b308e23,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-workflowlh47n/series-workflowlh47n-convert-artifact-1336552638/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": "e2a0379d-00e2-47ce-959e-944706dec822", "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-workflowlh47n/series-workflowlh47n-build-action-1898055076/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 21:54:41 +0000 UTC FinishedAt: 2026-08-01 21:54:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 21:54:41 +0000 UTC FinishedAt: 2026-08-01 21:54:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 21:54:41 +0000 UTC FinishedAt: 2026-08-01 21:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 21:54:41 +0000 UTC FinishedAt: 2026-08-01 21:54:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowlh47n/series-workflowlh47n-convert-artifact-3131884529/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 21:54:51 +0000 UTC FinishedAt: 2026-08-01 21:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 21:54:51 +0000 UTC FinishedAt: 2026-08-01 21:56:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e2a0379d-00e2-47ce-959e-944706dec822,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-workflowlh47n/series-workflowlh47n-build-action-1898055076/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-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 21:56:55 +0000 UTC FinishedAt: 2026-08-01 21:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 21:56:55 +0000 UTC FinishedAt: 2026-08-01 21:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 21:56:55 +0000 UTC FinishedAt: 2026-08-01 22:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 21:56:55 +0000 UTC FinishedAt: 2026-08-01 22:16: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:*21e0ddbc-d299-478e-ba63-93679b308e23,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-workflowlh47n/series-workflowlh47n-convert-artifact-3131884529/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": "344e2112-6515-4ec2-99bd-2888b06e29c9", "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-workflowlh47n/series-workflowlh47n-build-action-688021949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 21:56:55 +0000 UTC FinishedAt: 2026-08-01 22:16: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:*21e0ddbc-d299-478e-ba63-93679b308e23,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-workflowlh47n/series-workflowlh47n-convert-artifact-3131884529/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": "344e2112-6515-4ec2-99bd-2888b06e29c9", "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-workflowlh47n/series-workflowlh47n-build-action-688021949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 22:16:32 +0000 UTC FinishedAt: 2026-08-01 22:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 22:16:32 +0000 UTC FinishedAt: 2026-08-01 22:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 22:16:32 +0000 UTC FinishedAt: 2026-08-01 22:18:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 22:16:32 +0000 UTC FinishedAt: 2026-08-01 22:18:15 +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:*344e2112-6515-4ec2-99bd-2888b06e29c9,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-workflowlh47n/series-workflowlh47n-build-action-688021949/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-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 22:18:25 +0000 UTC FinishedAt: 2026-08-02 01:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 22:18:25 +0000 UTC FinishedAt: 2026-08-02 01:20:43 +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":["nf_ct_ext_add","nf_ct_helper_ext_add"],"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:*e2a0379d-00e2-47ce-959e-944706dec822,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*344e2112-6515-4ec2-99bd-2888b06e29c9,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-workflowlh47n/series-workflowlh47n-build-action-1898055076/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-workflowlh47n/series-workflowlh47n-build-action-688021949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 22:18:25 +0000 UTC FinishedAt: 2026-08-01 22:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 22:18:25 +0000 UTC FinishedAt: 2026-08-01 22:18:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"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-workflowlh47n/series-workflowlh47n-convert-artifact-347809958/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 22:18:25 +0000 UTC FinishedAt: 2026-08-01 22:18:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 22:18:25 +0000 UTC FinishedAt: 2026-08-01 22:18:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 22:18:25 +0000 UTC FinishedAt: 2026-08-01 22:18:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 22:18:35 +0000 UTC FinishedAt: 2026-08-02 01:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh47n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_ct_ext_add","nf_ct_helper_ext_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_FTP","NFT_CT","NETFILTER_XT_TARGET_CT"],"series_id":"df5a2d30-6dc1-4829-8566-e4fcf04d146e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 22:18:35 +0000 UTC FinishedAt: 2026-08-02 01:20:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e2a0379d-00e2-47ce-959e-944706dec822,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*344e2112-6515-4ec2-99bd-2888b06e29c9,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-workflowlh47n/series-workflowlh47n-build-action-1898055076/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-workflowlh47n/series-workflowlh47n-build-action-688021949/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-workflowlh47n/series-workflowlh47n-convert-artifact-347809958/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,}