Name: series-workflow99trl Phase: Succeeded StartedAt: 2026-07-28 10:50:19 +0000 UTC FinishedAt: 2026-07-28 15:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[0] Phase: Succeeded StartedAt: 2026-07-28 10:50:19 +0000 UTC FinishedAt: 2026-07-28 11:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 10:50:19 +0000 UTC FinishedAt: 2026-07-28 11:25:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2c1bd78dc8e2221549409769a76c39304b82a1b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_CAKE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2c1bd78dc8e2221549409769a76c39304b82a1b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_CAKE" ], "series_id": "f71f316e-10f0-4fff-aa4f-44f3bc0b382d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cake_enqueue" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfQ0FLRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nha2VfZW5xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUCBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiB0aGUgQ0FLRSBxZGlzYyAoc2NoX2Nha2UpLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gcGFja2V0cyBhcmUgZW5xdWV1ZWQgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmVkIHdpdGggdGhlIENBS0UgcWRpc2MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MDg4YzFiYzE2NGY5OGVlODU2YzM5MGJkOGExZDg2MTFkYmRkYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTE6MjQ6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xuaW5kZXggNTA1ZjYzZmVjZjY0MDUuLjdjNGQ5MmNkZjUxNGY0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9jYWtlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jXG5AQCAtOTUwLDE2ICYjNDM7OTUwLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgaXBoZHIgKmNha2VfZ2V0X2lwaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWlwaClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoaXBoLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBWNilcbi1cdFx0cmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCAmIzQzOyBpcGgtXHUwMDNlaWhsICogNCxcbi1cdFx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBidWYpO1xuJiM0MztcdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KSB7XG4mIzQzO1x0XHRpcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQgJiM0MzsgaXBoLVx1MDAzZWlobCAqIDQsXG4mIzQzO1x0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcbiYjNDM7XHRcdGlmICghaXBoIHx8IGlwaC1cdTAwM2V2ZXJzaW9uICE9IDYpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuIFxuLVx0ZWxzZSBpZiAoaXBoLVx1MDAzZXZlcnNpb24gPT0gNClcbiBcdFx0cmV0dXJuIGlwaDtcbi1cbi1cdGVsc2UgaWYgKGlwaC1cdTAwM2V2ZXJzaW9uID09IDYpXG4mIzQzO1x0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0KSB7XG4mIzQzO1x0XHRyZXR1cm4gaXBoO1xuJiM0MztcdH0gZWxzZSBpZiAoaXBoLVx1MDAzZXZlcnNpb24gPT0gNikge1xuIFx0XHRyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxuIFx0XHRcdFx0XHQgIGJ1Zik7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTk5MCw3ICYjNDM7OTkzLDggQEAgc3RhdGljIHN0cnVjdCB0Y3BoZHIgKmNha2VfZ2V0X3RjcGhkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdGlwdjZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LFxuIFx0XHRcdFx0XHRcdCAgIHNpemVvZihfaXB2NmgpLCBcdTAwMjZfaXB2NmgpO1xuIFxuLVx0XHRcdGlmICghaXB2NmggfHwgaXB2NmgtXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX1RDUClcbiYjNDM7XHRcdFx0aWYgKCFpcHY2aCB8fCBpcHY2aC1cdTAwM2V2ZXJzaW9uICE9IDYgfHxcbiYjNDM7XHRcdFx0ICAgIGlwdjZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfQ0FLRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nha2VfZW5xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUCBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiB0aGUgQ0FLRSBxZGlzYyAoc2NoX2Nha2UpLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gcGFja2V0cyBhcmUgZW5xdWV1ZWQgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmVkIHdpdGggdGhlIENBS0UgcWRpc2MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MDg4YzFiYzE2NGY5OGVlODU2YzM5MGJkOGExZDg2MTFkYmRkYmZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMTE6MjQ6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2Nha2UuYyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jCmluZGV4IDUwNWY2M2ZlY2Y2NDA1Li43YzRkOTJjZGY1MTRmNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9jYWtlLmMKQEAgLTk1MCwxNiAmIzQzOzk1MCwxOSBAQCBzdGF0aWMgc3RydWN0IGlwaGRyICpjYWtlX2dldF9pcGhkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghaXBoKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChpcGgtJmd0O3ZlcnNpb24gPT0gNCAmYW1wOyZhbXA7IGlwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KQotCQlyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICYjNDM7IGlwaC0mZ3Q7aWhsICogNCwKLQkJCQkJICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBidWYpOwomIzQzOwlpZiAoaXBoLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOyBpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fSVBWNikgewomIzQzOwkJaXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICYjNDM7IGlwaC0mZ3Q7aWhsICogNCwKJiM0MzsJCQkJCSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBidWYpOwomIzQzOwkJaWYgKCFpcGggfHwgaXBoLSZndDt2ZXJzaW9uICE9IDYpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiAKLQllbHNlIGlmIChpcGgtJmd0O3ZlcnNpb24gPT0gNCkKIAkJcmV0dXJuIGlwaDsKLQotCWVsc2UgaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA2KQomIzQzOwl9IGVsc2UgaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA0KSB7CiYjNDM7CQlyZXR1cm4gaXBoOwomIzQzOwl9IGVsc2UgaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA2KSB7CiAJCXJldHVybiBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksCiAJCQkJCSAgYnVmKTsKJiM0MzsJfQogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC05OTAsNyAmIzQzOzk5Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgdGNwaGRyICpjYWtlX2dldF90Y3BoZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWlwdjZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LAogCQkJCQkJICAgc2l6ZW9mKF9pcHY2aCksICZhbXA7X2lwdjZoKTsKIAotCQkJaWYgKCFpcHY2aCB8fCBpcHY2aC0mZ3Q7bmV4dGhkciAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCQlpZiAoIWlwdjZoIHx8IGlwdjZoLSZndDt2ZXJzaW9uICE9IDYgfHwKJiM0MzsJCQkgICAgaXB2NmgtJmd0O25leHRoZHIgIT0gSVBQUk9UT19UQ1ApCiAJCQkJcmV0dXJuIE5VTEw7CiAKIAkJCW9mZnNldCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ0FLRSBRZGlzYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvc2NoZWQvc2NoX2Nha2UuY2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQ0FLRSAoQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkKSBxdWV1ZWluZyBkaXNjaXBsaW5lLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBjaGVja3MgZm9yIElQdjYgaGVhZGVycywgYGlwaC0mZ3Q7dmVyc2lvbiA9PSA2YCwgd2l0aGluIHRoZSBgY2FrZV9nZXRfaXBoZHJgIGFuZCBgY2FrZV9nZXRfdGNwaGRyYCBmdW5jdGlvbnMuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXkmIzM5O3JlIGFkZGluZyBvciBpbXByb3ZpbmcgSVB2NiBzdXBwb3J0LCBvciBhdCBsZWFzdCBoYW5kbGluZyBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gSVB2NiBwYWNrZXRzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpbXBhY3RzIHRoZSBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZmlndXJpbmcgb3V0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgaXMgcHJvcGVybHkgZW5hYmxlZCBpbiBvdXIgYnVpbGQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYHNjaF9jYWtlLmNgIGluIGBuZXQvc2NoZWQvTWFrZWZpbGVgIHRvIHNlZSBob3cgaXQmIzM5O3MgYnVpbHQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3Mgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9kdWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBob3cgaXQmIzM5O3MgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjaF9jYWtlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9NYWtlZmlsZT01Nj1vYmotJChDT05GSUdfTkVUX1NDSF9GUV9DT0RFTClcdCYjNDM7PSBzY2hfZnFfY29kZWwub1xubmV0L3NjaGVkL01ha2VmaWxlOjU3Om9iai0kKENPTkZJR19ORVRfU0NIX0NBS0UpXHQmIzQzOz0gc2NoX2Nha2Uub1xubmV0L3NjaGVkL01ha2VmaWxlLTU4LW9iai0kKENPTkZJR19ORVRfU0NIX0ZRKVx0JiM0Mzs9IHNjaF9mcS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ0FLRSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhlIENvbnRyb2xsZWQtRGVsYXkgQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgKENBS0UpIHNjaGVkdWxlciBpcyBgTkVUX1NDSF9DQUtFYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiB0aGUgdW5kZXJseWluZyBjb2RlLiBUaGUgdGV4dCBpZGVudGlmaWVzIHR3byBmdW5jdGlvbnMgdGhhdCBhcHBlYXIgdG8gYmUgaW50ZWdyYWwgdG8gaXRzIG9wZXJhdGlvbjogYGNha2VfZ2V0X2lwaGRyYCBhbmQgYGNha2VfZ2V0X3RjcGhkcmAuIE15IG5leHQgc3RlcCBpcyBvYnZpb3VzIOKAkyBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRob3NlIHR3byBmdW5jdGlvbnMuIFdoZXJlIGFyZSB0aGV5IGNhbGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjaz8gV2hhdCBvdGhlciBtb2R1bGVzIG9yIHJvdXRpbmVzIGRlcGVuZCBvbiB0aGVpciBvdXRwdXQ/IFVuZGVyc3RhbmRpbmcgdGhlaXIgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgdG8gZ2F1Z2luZyB0aGUgc2NvcGUgb2YgYW55IHBvdGVudGlhbCBjaGFuZ2VzIG9yIGltcGxpY2F0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGBORVRfU0NIX0NBS0VgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHV0aWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nha2VfZ2V0X2lwaGRyfGNha2VfZ2V0X3RjcGhkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY2FrZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY2FrZS5jPTkzMj1zdGF0aWMgdm9pZCBmbG93X3F1ZXVlX2FkZChzdHJ1Y3QgY2FrZV9mbG93ICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTk0MS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjk0MjpzdGF0aWMgc3RydWN0IGlwaGRyICpjYWtlX2dldF9pcGhkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtOTQzLVx0XHRcdFx0ICAgIHN0cnVjdCBpcHY2aGRyICpidWYpXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtOTY5LVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6OTcwOnN0YXRpYyBzdHJ1Y3QgdGNwaGRyICpjYWtlX2dldF90Y3BoZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTk3MS1cdFx0XHRcdCAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZnNpemUpXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MTIyMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNha2VfYWNrX2ZpbHRlcihzdHJ1Y3QgY2FrZV9zY2hlZF9kYXRhICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEyNDItXHRza2IgPSBmbG93LVx1MDAzZXRhaWw7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMjQzOlx0dGNwaCA9IGNha2VfZ2V0X3RjcGhkcihza2IsIF90Y3BoLCBzaXplb2YoX3RjcGgpKTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjEyNDQ6XHRpcGggPSBjYWtlX2dldF9pcGhkcihza2IsIFx1MDAyNl9pcGgpO1xubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTI0NS1cdGlmICghdGNwaClcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjY0LVx0ICAgICBza2JfcHJldiA9IHNrYl9jaGVjaywgc2tiX2NoZWNrID0gc2tiX2NoZWNrLVx1MDAzZW5leHQpIHtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjEyNjU6XHRcdGlwaF9jaGVjayA9IGNha2VfZ2V0X2lwaGRyKHNrYl9jaGVjaywgXHUwMDI2X2lwaF9jaGVjayk7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMjY2Olx0XHR0Y3BoX2NoZWNrID0gY2FrZV9nZXRfdGNwaGRyKHNrYl9jaGVjaywgXHUwMDI2X3RjcGhfY2hlY2ssXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjY3LVx0XHRcdFx0XHQgICAgIHNpemVvZihfdGNwaF9jaGVjaykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgUm9sZSBvZiBgY2FrZV9hY2tfZmlsdGVyYCoqCgpSaWdodCwgc28gdGhlc2UgJiMzNDt0aGV5JiMzNDsgYXJlIHVzZWQgd2l0aGluIHRoZSBgY2FrZV9hY2tfZmlsdGVyYCBmdW5jdGlvbi4gT2theSwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgd2hhdCYjMzk7cyAqdGhhdCogdXNlZCBmb3I/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBjYWtlX2Fja19maWx0ZXJgLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IGl0cyBpbW1lZGlhdGUgY2FsbGVycyBhbmQgdGhlbiB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mICp0aG9zZSogZnVuY3Rpb25zLiBJcyBpdCBwYXJ0IG9mIHRoZSBRb1MgbWFjaGluZXJ5PyBPciBwZXJoYXBzIHNvbWV0aGluZyByZWxhdGVkIHRvIGNvbmdlc3Rpb24gY29udHJvbCBvciBzaGFwaW5nPyBUaGUgc3BlY2lmaWMgYXBwbGljYXRpb24gb2YgdGhhdCBmdW5jdGlvbiB3aWxsIGRldGVybWluZSBldmVyeXRoaW5nLiBHb3R0YSB0cmFjayBkb3duIHdoZXJlIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGZyb20uIFRoYXQmIzM5O3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgd2hhdCAmIzM0O3RoZXkmIzM0OyAqYXJlKi4gQW5kLCBrbm93aW5nIG15IGZpZWxkLCB0aGVyZSYjMzk7cyBhbHdheXMgYSBnb29kIHJlYXNvbiBmb3IgaXQgdG8gYmUgd2hlcmUgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FrZV9hY2tfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jYWtlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jYWtlLmM9MTE0OT1zdGF0aWMgYm9vbCBjYWtlX3RjcGhfbWF5X2Ryb3AoY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCxcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjIwLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTIyMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNha2VfYWNrX2ZpbHRlcihzdHJ1Y3QgY2FrZV9zY2hlZF9kYXRhICpxLFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTIyMi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2FrZV9mbG93ICpmbG93KVxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTE3NjA9c3RhdGljIHMzMiBjYWtlX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTg1MC1cdFx0aWYgKHEtXHUwMDNlY29uZmlnLVx1MDAzZWFja19maWx0ZXIpXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxODUxOlx0XHRcdGFjayA9IGNha2VfYWNrX2ZpbHRlcihxLCBmbG93KTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE4NTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgYGNha2VfZW5xdWV1ZWAgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIGBjYWtlX2VucXVldWVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIGludGVyZXN0LCB0aGUgdGFyZ2V0LiBTaW5jZSBpdCYjMzk7cyBiZWluZyB1c2VkLCBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNlbnRlciBteSBhbmFseXNpcyBvbiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgZWxzZSBjYW4gSSBsZWFybj8gQWhhLCBgY2FrZV9hY2tfZmlsdGVyYC4gSXQgc2VlbXMgcmVsYXRlZCwgc28gbGV0JiMzOTtzIGNvbmZpcm0gaWYgaXQmIzM5O3Mgc3RhdGljLiBZZXMsIGl0IGlzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gSXQgaGVscHMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIFdoaWxlIEkmIzM5O20gbG9va2luZyBhdCBpdCBJIHNlZSBgY2FrZV9lbnF1ZXVlYCBpcyBhbHNvIHN0YXRpYywgYnV0IHRoYXQgaXQmIzM5O3MgdGhlIGVucXVldWUgY2FsbGJhY2sgZm9yIHRoZSBxZGlzYywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGlzIGdpdmVzIG1lIGEgYmV0dGVyIGNvbnRleHQgb2Ygd2hlcmUgaXQgc2l0cy4KCk9rYXksIGxldCYjMzk7cyB6b29tIG91dCBhIGJpdC4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkPyBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCB0aW1lIHRvIHNlYXJjaCBhbmQgc3VydmV5IHRoZSBzdXJyb3VuZGluZyBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FrZV9lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jYWtlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jYWtlLmM9MTc1OD1zdGF0aWMgdm9pZCBjYWtlX3JlY29uZmlndXJlKHN0cnVjdCBRZGlzYyAqc2NoKTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3NTktXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxNzYwOnN0YXRpYyBzMzIgY2FrZV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTc2MS1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MzI0ND1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBjYWtlX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMyNDctXHQucHJpdl9zaXplXHQ9XHRzaXplb2Yoc3RydWN0IGNha2Vfc2NoZWRfZGF0YSksXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMjQ4Olx0LmVucXVldWVcdD1cdGNha2VfZW5xdWV1ZSxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMyNDktXHQuZGVxdWV1ZVx0PVx0Y2FrZV9kZXF1ZXVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIENBS0UgUGFja2V0IEVucXVldWluZyoqCgpSaWdodCwgc28gYGNha2VfZW5xdWV1ZWAgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24gZm9yIHB1c2hpbmcgcGFja2V0cyBpbnRvIHRoZSBDQUtFIHF1ZXVlIGRpc2NpcGxpbmUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICYjMzQ7SXMgdGhhdCAqYWxsKiB0aGVyZSBpcyB0byBpdD8gSXMgdGhpcyB0aGUgb25seSBwb2ludCBvZiBlbnRyeSwgb3IgZG8gSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dCBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24/JiMzNDsKCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgYG5ldC9zY2hlZC9LY29uZmlnYCwgdG8gZG91YmxlLWNoZWNrIHRoYXQgYE5FVF9TQ0hfQ0FLRWAgaXMgcHJvcGVybHkgY29uZmlndXJlZCwgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIHBhY2tldCBoYW5kbGluZyBhdCBhbGwuIEkgd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCB0aGUgQ0FLRSBtb2R1bGUgaXMgZW5hYmxlZCBhbmQgYW55IG5lY2Vzc2FyeSBzdXBwb3J0aW5nIGZlYXR1cmVzIGFyZSBhbHNvIHByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0NBS0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0yNzc9Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yODctXG5uZXQvc2NoZWQvS2NvbmZpZzoyODg6Y29uZmlnIE5FVF9TQ0hfQ0FLRVxubmV0L3NjaGVkL0tjb25maWctMjg5LVx0dHJpc3RhdGUgXCYjMzQ7Q29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbmV0L3NjaGVkL0tjb25maWdgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHNvbWV0aGluZyBpbiB0aGUgbmV0d29ya2luZyBzY2hlZHVsZXIgaXMgY29uZmlndXJlZC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgZmlsZS4gTGV0JiMzOTtzIHNlZS4uLkkmIzM5O2xsIGZvY3VzIG9uIGBuZXQvc2NoZWQvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBJIHJlY2FsbCB0aGF0IGZpbGUgYmVpbmcgcHJldHR5IGNlbnRyYWwgdG8gYSBsb3Qgb2YgdGhlIFFvUyBhbmQgdHJhZmZpYyBzaGFwaW5nIG9wdGlvbnMuIE5vdywgd2hlcmUgdG8gYmVnaW4/IEhtbSwgbGV0JiMzOTtzIGxvb2sgYXJvdW5kIGxpbmUgMjg4LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBkZWNsYXJhdGlvbnMgZm9yIGNvcmUgc2NoZWR1bGVyIG9wdGlvbnMuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgc29tZSBjb250ZXh0LiBJdCYjMzk7cyB0aW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgc3RhcnRlZC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjgwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBGUSBDb250cm9sbGVkIERlbGF5IChGUV9DT0RFTClcbiAyODE6XHRcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxuIDI4MjpcdFxuIDI4MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMjg0Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9mcV9jb2RlbC5cbiAyODU6XHRcbiAyODY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyODc6XHRcbiAyODg6XHRjb25maWcgTkVUX1NDSF9DQUtFXG4gMjg5Olx0XHR0cmlzdGF0ZSBcJiMzNDtDb21tb24gQXBwbGljYXRpb25zIEtlcHQgRW5oYW5jZWQgKENBS0UpXCYjMzQ7XG4gMjkwOlx0XHRoZWxwXG4gMjkxOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBDb21tb24gQXBwbGljYXRpb25zIEtlcHQgRW5oYW5jZWRcbiAyOTI6XHRcdCAgKENBS0UpIHF1ZXVlIG1hbmFnZW1lbnQgYWxnb3JpdGhtLlxuIDI5MzpcdFxuIDI5NDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMjk1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9jYWtlLlxuIDI5NjpcdFxuIDI5NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI5ODpcdFxuIDI5OTpcdGNvbmZpZyBORVRfU0NIX0ZRXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ0FLRSBRZGlzYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIG5vIHVudXN1YWwgZGVwZW5kZW5jaWVzIHRvIHdvcnJ5IGFib3V0LiBJJiMzOTtsbCBkZWZpbml0ZWx5IGFkZCBgTkVUX1NDSF9DQUtFYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgY29yZSBvZiB0aGlzIGZpeCBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIENBS0UgcWRpc2MmIzM5O3MgSVAgaGVhZGVyIHBhcnNpbmcsIGFuZCB0aGF04oCZcyB0cmlnZ2VyZWQgZHVyaW5nIHBhY2tldCBlbnF1ZXVpbmcuIFRoYXQgc3VnZ2VzdHMgYGNha2VfZW5xdWV1ZWAgaXMgdGhlIHJpZ2h0IGZvY3VzLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSBpZiBgY2FrZV9lbnF1ZXVlYCBpcyBzdGF0aWMuIEFoLCB5ZXMsIGl0IGlzLiBCdXQsIGl0JiMzOTtzIGFsc28gYSBjYWxsYmFjaywgcmlnaHQ/IFRoYXQgY2hhbmdlcyB0aGluZ3MgYSBiaXQuIFVzdWFsbHksIHRoZXNlIHFkaXNjIGNhbGxiYWNrcyBhcmUgY2FsbGVkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgbWVhbmluZyBhIGZ1enplciBtaWdodCBoYXZlIGEgaGFyZGVyIHRpbWUgaGl0dGluZyBpdCBkaXJlY3RseSAqaWYqIGl0IHdhcyBpbmxpbmVkIGFuZCBzdGF0aWMuCgpCdXQgd2FpdCwgSSBzZWUgaXRzIGFkZHJlc3MgKmlzKiB0YWtlbiwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyICp3b24mIzM5O3QqIGlubGluZSBpdCEgVGhpcyBpcyBncmVhdC4gQW5kLCBhY3R1YWxseSwgc3l6a2FsbGVyICpjYW4qIHRhcmdldCBzdGF0aWMgZnVuY3Rpb25zIGFzIGxvbmcgYXMgdGhlaXIgYWRkcmVzcyBpcyB0YWtlbiBvciB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCEgQW5kLCBpdCBpcyBub3QgaW5saW5lZCEKClRoaXMgaXMgZXZlbiBiZXR0ZXIgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25zIEkgaGFkIG1lbnRpb25lZCB0byAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyYjMzQ7LiBUaGlzIGNhc2UgaGl0cyB0aGUgc3dlZXQgc3BvdCEgYGNha2VfZW5xdWV1ZWAmIzM5O3MgYWRkcmVzcyBpcyB0YWtlbiwgc28gaXQmIzM5O3MgcGVyZmVjdGx5IHVzYWJsZS4gTm93LCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBQZXJoYXBzIGBjYWtlX2luaXRgPyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIHNlY29uZGFyeSBvcHRpb24sIGJ1dCBgY2FrZV9lbnF1ZXVlYCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nha2VfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY2FrZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY2FrZS5jPTI4MTg9c3RhdGljIHZvaWQgY2FrZV9jb25maWdfaW5pdChzdHJ1Y3QgY2FrZV9zY2hlZF9jb25maWcgKnEsIGJvb2wgaXNfc2hhcmVkKVxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI4MzMtXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyODM0OnN0YXRpYyBpbnQgY2FrZV9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yODM1LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0zMjQ0PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGNha2VfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzI1MC1cdC5wZWVrXHRcdD1cdHFkaXNjX3BlZWtfZGVxdWV1ZWQsXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMjUxOlx0LmluaXRcdFx0PVx0Y2FrZV9pbml0LFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzI1Mi1cdC5yZXNldFx0XHQ9XHRjYWtlX3Jlc2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDMwCgkJCQkJCQlvdXRwdXQ6IDgzCgkJCQkJCQl0aG91Z2h0czogMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEV4ZWN1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoYXQgYGNha2VfZW5xdWV1ZWAgaXMgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb24gZm9yIHRoaXMgbW9kaWZpY2F0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhbHRlcmVkIGNvZGUgYWN0dWFsbHkgZXhlY3V0ZXMsIHdoaWNoIG1ha2VzIGl0IHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBlZmZlY3RzLiBJJiMzOTttIGNob29zaW5nIGBjYWtlX2VucXVldWVgIGFzIG15IHByaW1hcnkgZm9jdXMuCgpMZXQmIzM5O3MgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBieSByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZjoKCmBgYGMKLQlpZiAoaXBoLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOyBpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fSVBWNikKLQkJcmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCAmIzQzOyBpcGgtJmd0O2lobCAqIDQsCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTsKJiM0MzsJaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA0ICZhbXA7JmFtcDsgaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpIHsKJiM0MzsJCWlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCAmIzQzOyBpcGgtJmd0O2lobCAqIDQsCiYjNDM7CQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTsKJiM0MzsJCWlmICghaXBoIHx8IGlwaC0mZ3Q7dmVyc2lvbiAhPSA2KQomIzQzOwkJCXJldHVybiBOVUxMOwogCi0JZWxzZSBpZiAoaXBoLSZndDt2ZXJzaW9uID09IDQpCiAJCXJldHVybiBpcGg7Ci0KLQllbHNlIGlmIChpcGgtJmd0O3ZlcnNpb24gPT0gNikKJiM0MzsJfSBlbHNlIGlmIChpcGgtJmd0O3ZlcnNpb24gPT0gNCkgewomIzQzOwkJcmV0dXJuIGlwaDsKJiM0MzsJfSBlbHNlIGlmIChpcGgtJmd0O3ZlcnNpb24gPT0gNikgewogCQlyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLAogCQkJCQkgIGJ1Zik7CiYjNDM7CX0KYGBgCgpSaWdodCwgaXQmIzM5O3MgY2xlYXIgbm93IHRoYXQgdGhlIGNoYW5nZSBmb2N1c2VzIG9uIG1vcmUgcm9idXN0bHkgaGFuZGxpbmcgSVB2NiBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgYnkgYWRkaW5nIGEgY2hlY2sgYWZ0ZXIgdGhlIGluaXRpYWwgYHNrYl9oZWFkZXJfcG9pbnRlcmAgY2FsbCB0byBlbnN1cmUgdGhlIHJldHJpZXZlZCBoZWFkZXIgaXMgYWN0dWFsbHkgYSB2YWxpZCBJUHY2IGhlYWRlciAodmVyc2lvbiA2KS4gVGhlIG9yaWdpbmFsIHZlcnNpb24gaGFkIGEgcG9zc2libGUgcmFjZSB3aGVyZSBpcGggY291bGQgYmUgY2hhbmdlZCBieSBhIGRpZmZlcmVudCBwcm9jZXNzb3IuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBpcyBjb3JyZWN0IGFuZCBsb2dpY2FsbHkgcmVhY2hhYmxlIHVuZGVyIHRoZSBhcHByb3ByaWF0ZSBjb25kaXRpb25zLgoKTm93LCBJJiMzOTtsbCBtb3ZlIG9uIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX0NBS0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjYWtlX2VucXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVAgaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gdGhlIENBS0UgcWRpc2MgKHNjaF9jYWtlKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHBhY2tldHMgYXJlIGVucXVldWVkIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJlZCB3aXRoIHRoZSBDQUtFIHFkaXNjLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX0NBS0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjYWtlX2VucXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVAgaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gdGhlIENBS0UgcWRpc2MgKHNjaF9jYWtlKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHBhY2tldHMgYXJlIGVucXVldWVkIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJlZCB3aXRoIHRoZSBDQUtFIHFkaXNjLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMTE6MjQ6MjAuNDk1NDg4NzIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyNTY0OTE0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9DQUtFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2FrZV9lbnF1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVAgaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gdGhlIENBS0UgcWRpc2MgKHNjaF9jYWtlKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHBhY2tldHMgYXJlIGVucXVldWVkIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJlZCB3aXRoIHRoZSBDQUtFIHFkaXNjLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMToyNDoyMC40OTU0OTg3MDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDg0MDQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgwODhjMWJjMTY0Zjk4ZWU4NTZjMzkwYmQ4YTFkODYxMWRiZGRiZmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTE6MjQ6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xcbmluZGV4IDUwNWY2M2ZlY2Y2NDA1Li43YzRkOTJjZGY1MTRmNCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2Nha2UuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jXFxuQEAgLTk1MCwxNiArOTUwLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgaXBoZHIgKmNha2VfZ2V0X2lwaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICghaXBoKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmIChpcGgtXFx1MDAzZXZlcnNpb24gPT0gNCBcXHUwMDI2XFx1MDAyNiBpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBWNilcXG4tXFx0XFx0cmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCArIGlwaC1cXHUwMDNlaWhsICogNCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBidWYpO1xcbitcXHRpZiAoaXBoLVxcdTAwM2V2ZXJzaW9uID09IDQgXFx1MDAyNlxcdTAwMjYgaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpIHtcXG4rXFx0XFx0aXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICsgaXBoLVxcdTAwM2VpaGwgKiA0LFxcbitcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcXG4rXFx0XFx0aWYgKCFpcGggfHwgaXBoLVxcdTAwM2V2ZXJzaW9uICE9IDYpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0ZWxzZSBpZiAoaXBoLVxcdTAwM2V2ZXJzaW9uID09IDQpXFxuIFxcdFxcdHJldHVybiBpcGg7XFxuLVxcbi1cXHRlbHNlIGlmIChpcGgtXFx1MDAzZXZlcnNpb24gPT0gNilcXG4rXFx0fSBlbHNlIGlmIChpcGgtXFx1MDAzZXZlcnNpb24gPT0gNCkge1xcbitcXHRcXHRyZXR1cm4gaXBoO1xcbitcXHR9IGVsc2UgaWYgKGlwaC1cXHUwMDNldmVyc2lvbiA9PSA2KSB7XFxuIFxcdFxcdHJldHVybiBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksXFxuIFxcdFxcdFxcdFxcdFxcdCAgYnVmKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtOTkwLDcgKzk5Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgdGNwaGRyICpjYWtlX2dldF90Y3BoZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0aXB2NmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihfaXB2NmgpLCBcXHUwMDI2X2lwdjZoKTtcXG4gXFxuLVxcdFxcdFxcdGlmICghaXB2NmggfHwgaXB2NmgtXFx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXFxuK1xcdFxcdFxcdGlmICghaXB2NmggfHwgaXB2NmgtXFx1MDAzZXZlcnNpb24gIT0gNiB8fFxcbitcXHRcXHRcXHQgICAgaXB2NmgtXFx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXFxuIFxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjIxLjEzNzA4OTk5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQwNjE0ODc3MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfQ0FLRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNha2VfZW5xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElQIGhlYWRlciBwYXJzaW5nIGxvZ2ljIGluIHRoZSBDQUtFIHFkaXNjIChzY2hfY2FrZSkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBwYWNrZXRzIGFyZSBlbnF1ZXVlZCB0byBhIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgQ0FLRSBxZGlzYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODA4OGMxYmMxNjRmOThlZTg1NmMzOTBiZDhhMWQ4NjExZGJkZGJmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDExOjI0OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xuaW5kZXggNTA1ZjYzZmVjZjY0MDUuLjdjNGQ5MmNkZjUxNGY0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9jYWtlLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jXG5AQCAtOTUwLDE2ICs5NTAsMTkgQEAgc3RhdGljIHN0cnVjdCBpcGhkciAqY2FrZV9nZXRfaXBoZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghaXBoKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KVxuLVx0XHRyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICsgaXBoLVx1MDAzZWlobCAqIDQsXG4tXHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcbitcdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRcdGlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCArIGlwaC1cdTAwM2VpaGwgKiA0LFxuK1x0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcbitcdFx0aWYgKCFpcGggfHwgaXBoLVx1MDAzZXZlcnNpb24gIT0gNilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGVsc2UgaWYgKGlwaC1cdTAwM2V2ZXJzaW9uID09IDQpXG4gXHRcdHJldHVybiBpcGg7XG4tXG4tXHRlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA2KVxuK1x0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0KSB7XG4rXHRcdHJldHVybiBpcGg7XG4rXHR9IGVsc2UgaWYgKGlwaC1cdTAwM2V2ZXJzaW9uID09IDYpIHtcbiBcdFx0cmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSxcbiBcdFx0XHRcdFx0ICBidWYpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTk5MCw3ICs5OTMsOCBAQCBzdGF0aWMgc3RydWN0IHRjcGhkciAqY2FrZV9nZXRfdGNwaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0aXB2NmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsXG4gXHRcdFx0XHRcdFx0ICAgc2l6ZW9mKF9pcHY2aCksIFx1MDAyNl9pcHY2aCk7XG4gXG4tXHRcdFx0aWYgKCFpcHY2aCB8fCBpcHY2aC1cdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fVENQKVxuK1x0XHRcdGlmICghaXB2NmggfHwgaXB2NmgtXHUwMDNldmVyc2lvbiAhPSA2IHx8XG4rXHRcdFx0ICAgIGlwdjZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdFx0XHRvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjIxLjEzNzA5MTI2OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTQwMjc5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDQUtFIFFkaXNjIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3NjaGVkL3NjaF9jYWtlLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQ0FLRSAoQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkKSBxdWV1ZWluZyBkaXNjaXBsaW5lLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBjaGVja3MgZm9yIElQdjYgaGVhZGVycywgYGlwaC1cdTAwM2V2ZXJzaW9uID09IDZgLCB3aXRoaW4gdGhlIGBjYWtlX2dldF9pcGhkcmAgYW5kIGBjYWtlX2dldF90Y3BoZHJgIGZ1bmN0aW9ucy4gVGhpcyBsaWtlbHkgbWVhbnMgdGhleSdyZSBhZGRpbmcgb3IgaW1wcm92aW5nIElQdjYgc3VwcG9ydCwgb3IgYXQgbGVhc3QgaGFuZGxpbmcgZWRnZSBjYXNlcyByZWxhdGVkIHRvIElQdjYgcGFja2V0cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaW1wYWN0cyB0aGUgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgYnkgZmlndXJpbmcgb3V0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgaXMgcHJvcGVybHkgZW5hYmxlZCBpbiBvdXIgYnVpbGQuIEknbGwgc2VhcmNoIGZvciBgc2NoX2Nha2UuY2AgaW4gYG5ldC9zY2hlZC9NYWtlZmlsZWAgdG8gc2VlIGhvdyBpdCdzIGJ1aWx0IGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vZHVsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgaG93IGl0J3MgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMToyNDoyNS4yNTExMjM5MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUxMTM1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoX2Nha2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9NYWtlZmlsZT01Nj1vYmotJChDT05GSUdfTkVUX1NDSF9GUV9DT0RFTClcXHQrPSBzY2hfZnFfY29kZWwub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTo1NzpvYmotJChDT05GSUdfTkVUX1NDSF9DQUtFKVxcdCs9IHNjaF9jYWtlLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtNTgtb2JqLSQoQ09ORklHX05FVF9TQ0hfRlEpXFx0Kz0gc2NoX2ZxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTE6MjQ6MjUuMzg2MjQzNzk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNjcxMzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENBS0UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhlIENvbnRyb2xsZWQtRGVsYXkgQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgKENBS0UpIHNjaGVkdWxlciBpcyBgTkVUX1NDSF9DQUtFYC4gUmlnaHQsIHRoYXQncyB0aGUga2V5LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSB1bmRlcmx5aW5nIGNvZGUuIFRoZSB0ZXh0IGlkZW50aWZpZXMgdHdvIGZ1bmN0aW9ucyB0aGF0IGFwcGVhciB0byBiZSBpbnRlZ3JhbCB0byBpdHMgb3BlcmF0aW9uOiBgY2FrZV9nZXRfaXBoZHJgIGFuZCBgY2FrZV9nZXRfdGNwaGRyYC4gTXkgbmV4dCBzdGVwIGlzIG9idmlvdXMg4oCTIEkgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gV2hlcmUgYXJlIHRoZXkgY2FsbGVkIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrPyBXaGF0IG90aGVyIG1vZHVsZXMgb3Igcm91dGluZXMgZGVwZW5kIG9uIHRoZWlyIG91dHB1dD8gVW5kZXJzdGFuZGluZyB0aGVpciBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCB0byBnYXVnaW5nIHRoZSBzY29wZSBvZiBhbnkgcG90ZW50aWFsIGNoYW5nZXMgb3IgaW1wbGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgYE5FVF9TQ0hfQ0FLRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSB1dGlsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjI5LjAyMjk1OTYxNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDM4NDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWtlX2dldF9pcGhkcnxjYWtlX2dldF90Y3BoZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9jYWtlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9jYWtlLmM9OTMyPXN0YXRpYyB2b2lkIGZsb3dfcXVldWVfYWRkKHN0cnVjdCBjYWtlX2Zsb3cgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy05NDEtXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6OTQyOnN0YXRpYyBzdHJ1Y3QgaXBoZHIgKmNha2VfZ2V0X2lwaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtOTQzLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaXB2NmhkciAqYnVmKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtOTY5LVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjk3MDpzdGF0aWMgc3RydWN0IHRjcGhkciAqY2FrZV9nZXRfdGNwaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtOTcxLVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZnNpemUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0xMjIxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2FrZV9hY2tfZmlsdGVyKHN0cnVjdCBjYWtlX3NjaGVkX2RhdGEgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjQyLVxcdHNrYiA9IGZsb3ctXFx1MDAzZXRhaWw7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTI0MzpcXHR0Y3BoID0gY2FrZV9nZXRfdGNwaGRyKHNrYiwgX3RjcGgsIHNpemVvZihfdGNwaCkpO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjEyNDQ6XFx0aXBoID0gY2FrZV9nZXRfaXBoZHIoc2tiLCBcXHUwMDI2X2lwaCk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTI0NS1cXHRpZiAoIXRjcGgpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjY0LVxcdCAgICAgc2tiX3ByZXYgPSBza2JfY2hlY2ssIHNrYl9jaGVjayA9IHNrYl9jaGVjay1cXHUwMDNlbmV4dCkge1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjEyNjU6XFx0XFx0aXBoX2NoZWNrID0gY2FrZV9nZXRfaXBoZHIoc2tiX2NoZWNrLCBcXHUwMDI2X2lwaF9jaGVjayk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTI2NjpcXHRcXHR0Y3BoX2NoZWNrID0gY2FrZV9nZXRfdGNwaGRyKHNrYl9jaGVjaywgXFx1MDAyNl90Y3BoX2NoZWNrLFxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEyNjctXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoX3RjcGhfY2hlY2spKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTE6MjQ6MjkuMTE3MzQ4ODAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNzAyNjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgUm9sZSBvZiBgY2FrZV9hY2tfZmlsdGVyYCoqXG5cblJpZ2h0LCBzbyB0aGVzZSBcInRoZXlcIiBhcmUgdXNlZCB3aXRoaW4gdGhlIGBjYWtlX2Fja19maWx0ZXJgIGZ1bmN0aW9uLiBPa2F5LCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIHdoYXQncyAqdGhhdCogdXNlZCBmb3I/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBjYWtlX2Fja19maWx0ZXJgLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgaXRzIGltbWVkaWF0ZSBjYWxsZXJzIGFuZCB0aGVuIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgKnRob3NlKiBmdW5jdGlvbnMuIElzIGl0IHBhcnQgb2YgdGhlIFFvUyBtYWNoaW5lcnk/IE9yIHBlcmhhcHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gY29uZ2VzdGlvbiBjb250cm9sIG9yIHNoYXBpbmc/IFRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgZGV0ZXJtaW5lIGV2ZXJ5dGhpbmcuIEdvdHRhIHRyYWNrIGRvd24gd2hlcmUgaXQncyBiZWluZyAqY2FsbGVkKiBmcm9tLiBUaGF0J3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgd2hhdCBcInRoZXlcIiAqYXJlKi4gQW5kLCBrbm93aW5nIG15IGZpZWxkLCB0aGVyZSdzIGFsd2F5cyBhIGdvb2QgcmVhc29uIGZvciBpdCB0byBiZSB3aGVyZSBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjMyLjgzNDM3NzI1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5MDMyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FrZV9hY2tfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfY2FrZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfY2FrZS5jPTExNDk9c3RhdGljIGJvb2wgY2FrZV90Y3BoX21heV9kcm9wKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcGgsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjIwLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjEyMjE6c3RhdGljIHN0cnVjdCBza19idWZmICpjYWtlX2Fja19maWx0ZXIoc3RydWN0IGNha2Vfc2NoZWRfZGF0YSAqcSxcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjIyLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY2FrZV9mbG93ICpmbG93KVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MTc2MD1zdGF0aWMgczMyIGNha2VfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE4NTAtXFx0XFx0aWYgKHEtXFx1MDAzZWNvbmZpZy1cXHUwMDNlYWNrX2ZpbHRlcilcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxODUxOlxcdFxcdFxcdGFjayA9IGNha2VfYWNrX2ZpbHRlcihxLCBmbG93KTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xODUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMToyNDozMi45MzYyODQ0MDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM0MDMzOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIGBjYWtlX2VucXVldWVgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIGBjYWtlX2VucXVldWVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQncyB0aGUgcG9pbnQgb2YgaW50ZXJlc3QsIHRoZSB0YXJnZXQuIFNpbmNlIGl0J3MgYmVpbmcgdXNlZCwgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNlbnRlciBteSBhbmFseXNpcyBvbiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuXG5cbk5vdywgbGV0J3Mgc2VlLCB3aGF0IGVsc2UgY2FuIEkgbGVhcm4/IEFoYSwgYGNha2VfYWNrX2ZpbHRlcmAuIEl0IHNlZW1zIHJlbGF0ZWQsIHNvIGxldCdzIGNvbmZpcm0gaWYgaXQncyBzdGF0aWMuIFllcywgaXQgaXMuIFRoYXQncyBnb29kIHRvIGtub3cuIEl0IGhlbHBzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBXaGlsZSBJJ20gbG9va2luZyBhdCBpdCBJIHNlZSBgY2FrZV9lbnF1ZXVlYCBpcyBhbHNvIHN0YXRpYywgYnV0IHRoYXQgaXQncyB0aGUgZW5xdWV1ZSBjYWxsYmFjayBmb3IgdGhlIHFkaXNjLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIFRoaXMgZ2l2ZXMgbWUgYSBiZXR0ZXIgY29udGV4dCBvZiB3aGVyZSBpdCBzaXRzLlxuXG5Pa2F5LCBsZXQncyB6b29tIG91dCBhIGJpdC4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkPyBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCB0aW1lIHRvIHNlYXJjaCBhbmQgc3VydmV5IHRoZSBzdXJyb3VuZGluZyBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjM2LjQ3MDMyMTAwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1ODA5ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNha2VfZW5xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2Nha2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2Nha2UuYz0xNzU4PXN0YXRpYyB2b2lkIGNha2VfcmVjb25maWd1cmUoc3RydWN0IFFkaXNjICpzY2gpO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3NTktXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTc2MDpzdGF0aWMgczMyIGNha2VfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNzYxLVxcdFxcdFxcdHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTMyNDQ9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgY2FrZV9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMyNDctXFx0LnByaXZfc2l6ZVxcdD1cXHRzaXplb2Yoc3RydWN0IGNha2Vfc2NoZWRfZGF0YSksXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MzI0ODpcXHQuZW5xdWV1ZVxcdD1cXHRjYWtlX2VucXVldWUsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzI0OS1cXHQuZGVxdWV1ZVxcdD1cXHRjYWtlX2RlcXVldWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjM2LjYxNjEzNjc3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTExMzM4OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQ0FLRSBQYWNrZXQgRW5xdWV1aW5nKipcblxuUmlnaHQsIHNvIGBjYWtlX2VucXVldWVgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGZvciBwdXNoaW5nIHBhY2tldHMgaW50byB0aGUgQ0FLRSBxdWV1ZSBkaXNjaXBsaW5lLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBcIklzIHRoYXQgKmFsbCogdGhlcmUgaXMgdG8gaXQ/IElzIHRoaXMgdGhlIG9ubHkgcG9pbnQgb2YgZW50cnksIG9yIGRvIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uP1wiXG5cbkknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBgbmV0L3NjaGVkL0tjb25maWdgLCB0byBkb3VibGUtY2hlY2sgdGhhdCBgTkVUX1NDSF9DQUtFYCBpcyBwcm9wZXJseSBjb25maWd1cmVkLCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSBmb3IgcGFja2V0IGhhbmRsaW5nIGF0IGFsbC4gSSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IHRoZSBDQUtFIG1vZHVsZSBpcyBlbmFibGVkIGFuZCBhbnkgbmVjZXNzYXJ5IHN1cHBvcnRpbmcgZmVhdHVyZXMgYXJlIGFsc28gcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjM5LjcyNzQ3NzcxNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1MTM4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfQ0FLRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0yNzc9Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTI4Ny1cXG5uZXQvc2NoZWQvS2NvbmZpZzoyODg6Y29uZmlnIE5FVF9TQ0hfQ0FLRVxcbm5ldC9zY2hlZC9LY29uZmlnLTI4OS1cXHR0cmlzdGF0ZSBcXFwiQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTE6MjQ6MzkuODE2OTk3OTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3NDE1OTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbmV0L3NjaGVkL0tjb25maWdgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgc29tZXRoaW5nIGluIHRoZSBuZXR3b3JraW5nIHNjaGVkdWxlciBpcyBjb25maWd1cmVkLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgZmlsZS4gTGV0J3Mgc2VlLi4uSSdsbCBmb2N1cyBvbiBgbmV0L3NjaGVkL0tjb25maWdgIHNwZWNpZmljYWxseS4gSSByZWNhbGwgdGhhdCBmaWxlIGJlaW5nIHByZXR0eSBjZW50cmFsIHRvIGEgbG90IG9mIHRoZSBRb1MgYW5kIHRyYWZmaWMgc2hhcGluZyBvcHRpb25zLiBOb3csIHdoZXJlIHRvIGJlZ2luPyBIbW0sIGxldCdzIGxvb2sgYXJvdW5kIGxpbmUgMjg4LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBkZWNsYXJhdGlvbnMgZm9yIGNvcmUgc2NoZWR1bGVyIG9wdGlvbnMuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgc29tZSBjb250ZXh0LiBJdCdzIHRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGdldCBzdGFydGVkLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMToyNDo0NS4yOTExNjE3NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEZRIENvbnRyb2xsZWQgRGVsYXkgKEZRX0NPREVMKVxcbiAyODE6XFx0XFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDI4MjpcXHRcXG4gMjgzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAyODQ6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZnFfY29kZWwuXFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjg3OlxcdFxcbiAyODg6XFx0Y29uZmlnIE5FVF9TQ0hfQ0FLRVxcbiAyODk6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZCAoQ0FLRSlcXFwiXFxuIDI5MDpcXHRcXHRoZWxwXFxuIDI5MTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBDb21tb24gQXBwbGljYXRpb25zIEtlcHQgRW5oYW5jZWRcXG4gMjkyOlxcdFxcdCAgKENBS0UpIHF1ZXVlIG1hbmFnZW1lbnQgYWxnb3JpdGhtLlxcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjk1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2Nha2UuXFxuIDI5NjpcXHRcXG4gMjk3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjk4OlxcdFxcbiAyOTk6XFx0Y29uZmlnIE5FVF9TQ0hfRlFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTE6MjQ6NDUuMjkxMzA4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzI2MzAzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENBS0UgUWRpc2MgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIG5vIHVudXN1YWwgZGVwZW5kZW5jaWVzIHRvIHdvcnJ5IGFib3V0LiBJJ2xsIGRlZmluaXRlbHkgYWRkIGBORVRfU0NIX0NBS0VgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb3JlIG9mIHRoaXMgZml4IHNlZW1zIHRvIGJlIHdpdGhpbiB0aGUgQ0FLRSBxZGlzYydzIElQIGhlYWRlciBwYXJzaW5nLCBhbmQgdGhhdOKAmXMgdHJpZ2dlcmVkIGR1cmluZyBwYWNrZXQgZW5xdWV1aW5nLiBUaGF0IHN1Z2dlc3RzIGBjYWtlX2VucXVldWVgIGlzIHRoZSByaWdodCBmb2N1cy5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIGlmIGBjYWtlX2VucXVldWVgIGlzIHN0YXRpYy4gQWgsIHllcywgaXQgaXMuIEJ1dCwgaXQncyBhbHNvIGEgY2FsbGJhY2ssIHJpZ2h0PyBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBVc3VhbGx5LCB0aGVzZSBxZGlzYyBjYWxsYmFja3MgYXJlIGNhbGxlZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIG1lYW5pbmcgYSBmdXp6ZXIgbWlnaHQgaGF2ZSBhIGhhcmRlciB0aW1lIGhpdHRpbmcgaXQgZGlyZWN0bHkgKmlmKiBpdCB3YXMgaW5saW5lZCBhbmQgc3RhdGljLlxuXG5CdXQgd2FpdCwgSSBzZWUgaXRzIGFkZHJlc3MgKmlzKiB0YWtlbiwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyICp3b24ndCogaW5saW5lIGl0ISBUaGlzIGlzIGdyZWF0LiBBbmQsIGFjdHVhbGx5LCBzeXprYWxsZXIgKmNhbiogdGFyZ2V0IHN0YXRpYyBmdW5jdGlvbnMgYXMgbG9uZyBhcyB0aGVpciBhZGRyZXNzIGlzIHRha2VuIG9yIHRoZXkgYXJlbid0IGlubGluZWQhIEFuZCwgaXQgaXMgbm90IGlubGluZWQhXG5cblRoaXMgaXMgZXZlbiBiZXR0ZXIgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25zIEkgaGFkIG1lbnRpb25lZCB0byBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLiBUaGlzIGNhc2UgaGl0cyB0aGUgc3dlZXQgc3BvdCEgYGNha2VfZW5xdWV1ZWAncyBhZGRyZXNzIGlzIHRha2VuLCBzbyBpdCdzIHBlcmZlY3RseSB1c2FibGUuIE5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gUGVyaGFwcyBgY2FrZV9pbml0YD8gSSdsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIHNlY29uZGFyeSBvcHRpb24sIGJ1dCBgY2FrZV9lbnF1ZXVlYCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMToyNDo1MS4wMTc2MTQ0NDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY5MDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWtlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9jYWtlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9jYWtlLmM9MjgxOD1zdGF0aWMgdm9pZCBjYWtlX2NvbmZpZ19pbml0KHN0cnVjdCBjYWtlX3NjaGVkX2NvbmZpZyAqcSwgYm9vbCBpc19zaGFyZWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yODMzLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI4MzQ6c3RhdGljIGludCBjYWtlX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yODM1LVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MzI0ND1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBjYWtlX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzI1MC1cXHQucGVla1xcdFxcdD1cXHRxZGlzY19wZWVrX2RlcXVldWVkLFxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjMyNTE6XFx0LmluaXRcXHRcXHQ9XFx0Y2FrZV9pbml0LFxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMyNTItXFx0LnJlc2V0XFx0XFx0PVxcdGNha2VfcmVzZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjUxLjEyOTMxMDIyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ4NzQ5ODkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBFeGVjdXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbnBvaW50ZWQgdGhhdCBgY2FrZV9lbnF1ZXVlYCBpcyB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbiBmb3IgdGhpcyBtb2RpZmljYXRpb24uIFRoYXQncyB3aGVyZSB0aGUgYWx0ZXJlZCBjb2RlIGFjdHVhbGx5IGV4ZWN1dGVzLCB3aGljaCBtYWtlcyBpdCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgZWZmZWN0cy4gSSdtIGNob29zaW5nIGBjYWtlX2VucXVldWVgIGFzIG15IHByaW1hcnkgZm9jdXMuXG5cbkxldCdzIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgYnkgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGY6XG5cbmBgYGNcbi1cdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KVxuLVx0XHRyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICsgaXBoLVx1MDAzZWlobCAqIDQsXG4tXHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcbitcdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRcdGlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCArIGlwaC1cdTAwM2VpaGwgKiA0LFxuK1x0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcbitcdFx0aWYgKCFpcGggfHwgaXBoLVx1MDAzZXZlcnNpb24gIT0gNilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGVsc2UgaWYgKGlwaC1cdTAwM2V2ZXJzaW9uID09IDQpXG4gXHRcdHJldHVybiBpcGg7XG4tXG4tXHRlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA2KVxuK1x0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0KSB7XG4rXHRcdHJldHVybiBpcGg7XG4rXHR9IGVsc2UgaWYgKGlwaC1cdTAwM2V2ZXJzaW9uID09IDYpIHtcbiBcdFx0cmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSxcbiBcdFx0XHRcdFx0ICBidWYpO1xuK1x0fVxuYGBgXG5cblJpZ2h0LCBpdCdzIGNsZWFyIG5vdyB0aGF0IHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBtb3JlIHJvYnVzdGx5IGhhbmRsaW5nIElQdjYgcGFja2V0cywgc3BlY2lmaWNhbGx5IGJ5IGFkZGluZyBhIGNoZWNrIGFmdGVyIHRoZSBpbml0aWFsIGBza2JfaGVhZGVyX3BvaW50ZXJgIGNhbGwgdG8gZW5zdXJlIHRoZSByZXRyaWV2ZWQgaGVhZGVyIGlzIGFjdHVhbGx5IGEgdmFsaWQgSVB2NiBoZWFkZXIgKHZlcnNpb24gNikuIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIGhhZCBhIHBvc3NpYmxlIHJhY2Ugd2hlcmUgaXBoIGNvdWxkIGJlIGNoYW5nZWQgYnkgYSBkaWZmZXJlbnQgcHJvY2Vzc29yLiBJJ20gc2F0aXNmaWVkIHRoYXQgdGhpcyBpcyBjb3JyZWN0IGFuZCBsb2dpY2FsbHkgcmVhY2hhYmxlIHVuZGVyIHRoZSBhcHByb3ByaWF0ZSBjb25kaXRpb25zLlxuXG5Ob3csIEknbGwgbW92ZSBvbiB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDMwLCJPdXRwdXRUb2tlbnMiOjgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI1OjAxLjYxNjgxMjAzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTE1MDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9DQUtFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2FrZV9lbnF1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVAgaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gdGhlIENBS0UgcWRpc2MgKHNjaF9jYWtlKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHBhY2tldHMgYXJlIGVucXVldWVkIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJlZCB3aXRoIHRoZSBDQUtFIHFkaXNjLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfQ0FLRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNha2VfZW5xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElQIGhlYWRlciBwYXJzaW5nIGxvZ2ljIGluIHRoZSBDQUtFIHFkaXNjIChzY2hfY2FrZSkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBwYWNrZXRzIGFyZSBlbnF1ZXVlZCB0byBhIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgQ0FLRSBxZGlzYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow99trl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 10:50:19 +0000 UTC FinishedAt: 2026-07-28 11:25:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2c1bd78dc8e2221549409769a76c39304b82a1b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_CAKE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2c1bd78dc8e2221549409769a76c39304b82a1b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_CAKE" ], "series_id": "f71f316e-10f0-4fff-aa4f-44f3bc0b382d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cake_enqueue" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfQ0FLRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nha2VfZW5xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUCBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiB0aGUgQ0FLRSBxZGlzYyAoc2NoX2Nha2UpLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gcGFja2V0cyBhcmUgZW5xdWV1ZWQgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmVkIHdpdGggdGhlIENBS0UgcWRpc2MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MDg4YzFiYzE2NGY5OGVlODU2YzM5MGJkOGExZDg2MTFkYmRkYmZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTE6MjQ6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xuaW5kZXggNTA1ZjYzZmVjZjY0MDUuLjdjNGQ5MmNkZjUxNGY0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9jYWtlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jXG5AQCAtOTUwLDE2ICYjNDM7OTUwLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgaXBoZHIgKmNha2VfZ2V0X2lwaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWlwaClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoaXBoLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBWNilcbi1cdFx0cmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCAmIzQzOyBpcGgtXHUwMDNlaWhsICogNCxcbi1cdFx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBidWYpO1xuJiM0MztcdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KSB7XG4mIzQzO1x0XHRpcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQgJiM0MzsgaXBoLVx1MDAzZWlobCAqIDQsXG4mIzQzO1x0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcbiYjNDM7XHRcdGlmICghaXBoIHx8IGlwaC1cdTAwM2V2ZXJzaW9uICE9IDYpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuIFxuLVx0ZWxzZSBpZiAoaXBoLVx1MDAzZXZlcnNpb24gPT0gNClcbiBcdFx0cmV0dXJuIGlwaDtcbi1cbi1cdGVsc2UgaWYgKGlwaC1cdTAwM2V2ZXJzaW9uID09IDYpXG4mIzQzO1x0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0KSB7XG4mIzQzO1x0XHRyZXR1cm4gaXBoO1xuJiM0MztcdH0gZWxzZSBpZiAoaXBoLVx1MDAzZXZlcnNpb24gPT0gNikge1xuIFx0XHRyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxuIFx0XHRcdFx0XHQgIGJ1Zik7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTk5MCw3ICYjNDM7OTkzLDggQEAgc3RhdGljIHN0cnVjdCB0Y3BoZHIgKmNha2VfZ2V0X3RjcGhkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdGlwdjZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LFxuIFx0XHRcdFx0XHRcdCAgIHNpemVvZihfaXB2NmgpLCBcdTAwMjZfaXB2NmgpO1xuIFxuLVx0XHRcdGlmICghaXB2NmggfHwgaXB2NmgtXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX1RDUClcbiYjNDM7XHRcdFx0aWYgKCFpcHY2aCB8fCBpcHY2aC1cdTAwM2V2ZXJzaW9uICE9IDYgfHxcbiYjNDM7XHRcdFx0ICAgIGlwdjZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfQ0FLRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nha2VfZW5xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUCBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiB0aGUgQ0FLRSBxZGlzYyAoc2NoX2Nha2UpLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gcGFja2V0cyBhcmUgZW5xdWV1ZWQgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmVkIHdpdGggdGhlIENBS0UgcWRpc2MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MDg4YzFiYzE2NGY5OGVlODU2YzM5MGJkOGExZDg2MTFkYmRkYmZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMTE6MjQ6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2Nha2UuYyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jCmluZGV4IDUwNWY2M2ZlY2Y2NDA1Li43YzRkOTJjZGY1MTRmNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9jYWtlLmMKQEAgLTk1MCwxNiAmIzQzOzk1MCwxOSBAQCBzdGF0aWMgc3RydWN0IGlwaGRyICpjYWtlX2dldF9pcGhkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghaXBoKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChpcGgtJmd0O3ZlcnNpb24gPT0gNCAmYW1wOyZhbXA7IGlwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KQotCQlyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICYjNDM7IGlwaC0mZ3Q7aWhsICogNCwKLQkJCQkJICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBidWYpOwomIzQzOwlpZiAoaXBoLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOyBpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fSVBWNikgewomIzQzOwkJaXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICYjNDM7IGlwaC0mZ3Q7aWhsICogNCwKJiM0MzsJCQkJCSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBidWYpOwomIzQzOwkJaWYgKCFpcGggfHwgaXBoLSZndDt2ZXJzaW9uICE9IDYpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiAKLQllbHNlIGlmIChpcGgtJmd0O3ZlcnNpb24gPT0gNCkKIAkJcmV0dXJuIGlwaDsKLQotCWVsc2UgaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA2KQomIzQzOwl9IGVsc2UgaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA0KSB7CiYjNDM7CQlyZXR1cm4gaXBoOwomIzQzOwl9IGVsc2UgaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA2KSB7CiAJCXJldHVybiBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksCiAJCQkJCSAgYnVmKTsKJiM0MzsJfQogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC05OTAsNyAmIzQzOzk5Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgdGNwaGRyICpjYWtlX2dldF90Y3BoZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWlwdjZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LAogCQkJCQkJICAgc2l6ZW9mKF9pcHY2aCksICZhbXA7X2lwdjZoKTsKIAotCQkJaWYgKCFpcHY2aCB8fCBpcHY2aC0mZ3Q7bmV4dGhkciAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCQlpZiAoIWlwdjZoIHx8IGlwdjZoLSZndDt2ZXJzaW9uICE9IDYgfHwKJiM0MzsJCQkgICAgaXB2NmgtJmd0O25leHRoZHIgIT0gSVBQUk9UT19UQ1ApCiAJCQkJcmV0dXJuIE5VTEw7CiAKIAkJCW9mZnNldCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ0FLRSBRZGlzYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvc2NoZWQvc2NoX2Nha2UuY2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQ0FLRSAoQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkKSBxdWV1ZWluZyBkaXNjaXBsaW5lLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBjaGVja3MgZm9yIElQdjYgaGVhZGVycywgYGlwaC0mZ3Q7dmVyc2lvbiA9PSA2YCwgd2l0aGluIHRoZSBgY2FrZV9nZXRfaXBoZHJgIGFuZCBgY2FrZV9nZXRfdGNwaGRyYCBmdW5jdGlvbnMuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXkmIzM5O3JlIGFkZGluZyBvciBpbXByb3ZpbmcgSVB2NiBzdXBwb3J0LCBvciBhdCBsZWFzdCBoYW5kbGluZyBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gSVB2NiBwYWNrZXRzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpbXBhY3RzIHRoZSBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZmlndXJpbmcgb3V0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgaXMgcHJvcGVybHkgZW5hYmxlZCBpbiBvdXIgYnVpbGQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYHNjaF9jYWtlLmNgIGluIGBuZXQvc2NoZWQvTWFrZWZpbGVgIHRvIHNlZSBob3cgaXQmIzM5O3MgYnVpbHQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3Mgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9kdWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBob3cgaXQmIzM5O3MgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjaF9jYWtlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9NYWtlZmlsZT01Nj1vYmotJChDT05GSUdfTkVUX1NDSF9GUV9DT0RFTClcdCYjNDM7PSBzY2hfZnFfY29kZWwub1xubmV0L3NjaGVkL01ha2VmaWxlOjU3Om9iai0kKENPTkZJR19ORVRfU0NIX0NBS0UpXHQmIzQzOz0gc2NoX2Nha2Uub1xubmV0L3NjaGVkL01ha2VmaWxlLTU4LW9iai0kKENPTkZJR19ORVRfU0NIX0ZRKVx0JiM0Mzs9IHNjaF9mcS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ0FLRSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhlIENvbnRyb2xsZWQtRGVsYXkgQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgKENBS0UpIHNjaGVkdWxlciBpcyBgTkVUX1NDSF9DQUtFYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiB0aGUgdW5kZXJseWluZyBjb2RlLiBUaGUgdGV4dCBpZGVudGlmaWVzIHR3byBmdW5jdGlvbnMgdGhhdCBhcHBlYXIgdG8gYmUgaW50ZWdyYWwgdG8gaXRzIG9wZXJhdGlvbjogYGNha2VfZ2V0X2lwaGRyYCBhbmQgYGNha2VfZ2V0X3RjcGhkcmAuIE15IG5leHQgc3RlcCBpcyBvYnZpb3VzIOKAkyBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRob3NlIHR3byBmdW5jdGlvbnMuIFdoZXJlIGFyZSB0aGV5IGNhbGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjaz8gV2hhdCBvdGhlciBtb2R1bGVzIG9yIHJvdXRpbmVzIGRlcGVuZCBvbiB0aGVpciBvdXRwdXQ/IFVuZGVyc3RhbmRpbmcgdGhlaXIgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgdG8gZ2F1Z2luZyB0aGUgc2NvcGUgb2YgYW55IHBvdGVudGlhbCBjaGFuZ2VzIG9yIGltcGxpY2F0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGBORVRfU0NIX0NBS0VgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHV0aWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nha2VfZ2V0X2lwaGRyfGNha2VfZ2V0X3RjcGhkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY2FrZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY2FrZS5jPTkzMj1zdGF0aWMgdm9pZCBmbG93X3F1ZXVlX2FkZChzdHJ1Y3QgY2FrZV9mbG93ICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTk0MS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjk0MjpzdGF0aWMgc3RydWN0IGlwaGRyICpjYWtlX2dldF9pcGhkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtOTQzLVx0XHRcdFx0ICAgIHN0cnVjdCBpcHY2aGRyICpidWYpXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtOTY5LVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6OTcwOnN0YXRpYyBzdHJ1Y3QgdGNwaGRyICpjYWtlX2dldF90Y3BoZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTk3MS1cdFx0XHRcdCAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZnNpemUpXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MTIyMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNha2VfYWNrX2ZpbHRlcihzdHJ1Y3QgY2FrZV9zY2hlZF9kYXRhICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEyNDItXHRza2IgPSBmbG93LVx1MDAzZXRhaWw7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMjQzOlx0dGNwaCA9IGNha2VfZ2V0X3RjcGhkcihza2IsIF90Y3BoLCBzaXplb2YoX3RjcGgpKTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjEyNDQ6XHRpcGggPSBjYWtlX2dldF9pcGhkcihza2IsIFx1MDAyNl9pcGgpO1xubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTI0NS1cdGlmICghdGNwaClcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjY0LVx0ICAgICBza2JfcHJldiA9IHNrYl9jaGVjaywgc2tiX2NoZWNrID0gc2tiX2NoZWNrLVx1MDAzZW5leHQpIHtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjEyNjU6XHRcdGlwaF9jaGVjayA9IGNha2VfZ2V0X2lwaGRyKHNrYl9jaGVjaywgXHUwMDI2X2lwaF9jaGVjayk7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMjY2Olx0XHR0Y3BoX2NoZWNrID0gY2FrZV9nZXRfdGNwaGRyKHNrYl9jaGVjaywgXHUwMDI2X3RjcGhfY2hlY2ssXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjY3LVx0XHRcdFx0XHQgICAgIHNpemVvZihfdGNwaF9jaGVjaykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgUm9sZSBvZiBgY2FrZV9hY2tfZmlsdGVyYCoqCgpSaWdodCwgc28gdGhlc2UgJiMzNDt0aGV5JiMzNDsgYXJlIHVzZWQgd2l0aGluIHRoZSBgY2FrZV9hY2tfZmlsdGVyYCBmdW5jdGlvbi4gT2theSwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgd2hhdCYjMzk7cyAqdGhhdCogdXNlZCBmb3I/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBjYWtlX2Fja19maWx0ZXJgLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IGl0cyBpbW1lZGlhdGUgY2FsbGVycyBhbmQgdGhlbiB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mICp0aG9zZSogZnVuY3Rpb25zLiBJcyBpdCBwYXJ0IG9mIHRoZSBRb1MgbWFjaGluZXJ5PyBPciBwZXJoYXBzIHNvbWV0aGluZyByZWxhdGVkIHRvIGNvbmdlc3Rpb24gY29udHJvbCBvciBzaGFwaW5nPyBUaGUgc3BlY2lmaWMgYXBwbGljYXRpb24gb2YgdGhhdCBmdW5jdGlvbiB3aWxsIGRldGVybWluZSBldmVyeXRoaW5nLiBHb3R0YSB0cmFjayBkb3duIHdoZXJlIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGZyb20uIFRoYXQmIzM5O3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgd2hhdCAmIzM0O3RoZXkmIzM0OyAqYXJlKi4gQW5kLCBrbm93aW5nIG15IGZpZWxkLCB0aGVyZSYjMzk7cyBhbHdheXMgYSBnb29kIHJlYXNvbiBmb3IgaXQgdG8gYmUgd2hlcmUgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FrZV9hY2tfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jYWtlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jYWtlLmM9MTE0OT1zdGF0aWMgYm9vbCBjYWtlX3RjcGhfbWF5X2Ryb3AoY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCxcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjIwLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTIyMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNha2VfYWNrX2ZpbHRlcihzdHJ1Y3QgY2FrZV9zY2hlZF9kYXRhICpxLFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTIyMi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2FrZV9mbG93ICpmbG93KVxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTE3NjA9c3RhdGljIHMzMiBjYWtlX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTg1MC1cdFx0aWYgKHEtXHUwMDNlY29uZmlnLVx1MDAzZWFja19maWx0ZXIpXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxODUxOlx0XHRcdGFjayA9IGNha2VfYWNrX2ZpbHRlcihxLCBmbG93KTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE4NTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgYGNha2VfZW5xdWV1ZWAgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIGBjYWtlX2VucXVldWVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIGludGVyZXN0LCB0aGUgdGFyZ2V0LiBTaW5jZSBpdCYjMzk7cyBiZWluZyB1c2VkLCBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNlbnRlciBteSBhbmFseXNpcyBvbiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgZWxzZSBjYW4gSSBsZWFybj8gQWhhLCBgY2FrZV9hY2tfZmlsdGVyYC4gSXQgc2VlbXMgcmVsYXRlZCwgc28gbGV0JiMzOTtzIGNvbmZpcm0gaWYgaXQmIzM5O3Mgc3RhdGljLiBZZXMsIGl0IGlzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gSXQgaGVscHMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIFdoaWxlIEkmIzM5O20gbG9va2luZyBhdCBpdCBJIHNlZSBgY2FrZV9lbnF1ZXVlYCBpcyBhbHNvIHN0YXRpYywgYnV0IHRoYXQgaXQmIzM5O3MgdGhlIGVucXVldWUgY2FsbGJhY2sgZm9yIHRoZSBxZGlzYywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGlzIGdpdmVzIG1lIGEgYmV0dGVyIGNvbnRleHQgb2Ygd2hlcmUgaXQgc2l0cy4KCk9rYXksIGxldCYjMzk7cyB6b29tIG91dCBhIGJpdC4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkPyBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCB0aW1lIHRvIHNlYXJjaCBhbmQgc3VydmV5IHRoZSBzdXJyb3VuZGluZyBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FrZV9lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jYWtlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jYWtlLmM9MTc1OD1zdGF0aWMgdm9pZCBjYWtlX3JlY29uZmlndXJlKHN0cnVjdCBRZGlzYyAqc2NoKTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3NTktXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxNzYwOnN0YXRpYyBzMzIgY2FrZV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTc2MS1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MzI0ND1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBjYWtlX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMyNDctXHQucHJpdl9zaXplXHQ9XHRzaXplb2Yoc3RydWN0IGNha2Vfc2NoZWRfZGF0YSksXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMjQ4Olx0LmVucXVldWVcdD1cdGNha2VfZW5xdWV1ZSxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMyNDktXHQuZGVxdWV1ZVx0PVx0Y2FrZV9kZXF1ZXVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIENBS0UgUGFja2V0IEVucXVldWluZyoqCgpSaWdodCwgc28gYGNha2VfZW5xdWV1ZWAgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24gZm9yIHB1c2hpbmcgcGFja2V0cyBpbnRvIHRoZSBDQUtFIHF1ZXVlIGRpc2NpcGxpbmUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICYjMzQ7SXMgdGhhdCAqYWxsKiB0aGVyZSBpcyB0byBpdD8gSXMgdGhpcyB0aGUgb25seSBwb2ludCBvZiBlbnRyeSwgb3IgZG8gSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dCBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24/JiMzNDsKCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgYG5ldC9zY2hlZC9LY29uZmlnYCwgdG8gZG91YmxlLWNoZWNrIHRoYXQgYE5FVF9TQ0hfQ0FLRWAgaXMgcHJvcGVybHkgY29uZmlndXJlZCwgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIHBhY2tldCBoYW5kbGluZyBhdCBhbGwuIEkgd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCB0aGUgQ0FLRSBtb2R1bGUgaXMgZW5hYmxlZCBhbmQgYW55IG5lY2Vzc2FyeSBzdXBwb3J0aW5nIGZlYXR1cmVzIGFyZSBhbHNvIHByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0NBS0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0yNzc9Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yODctXG5uZXQvc2NoZWQvS2NvbmZpZzoyODg6Y29uZmlnIE5FVF9TQ0hfQ0FLRVxubmV0L3NjaGVkL0tjb25maWctMjg5LVx0dHJpc3RhdGUgXCYjMzQ7Q29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbmV0L3NjaGVkL0tjb25maWdgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHNvbWV0aGluZyBpbiB0aGUgbmV0d29ya2luZyBzY2hlZHVsZXIgaXMgY29uZmlndXJlZC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgZmlsZS4gTGV0JiMzOTtzIHNlZS4uLkkmIzM5O2xsIGZvY3VzIG9uIGBuZXQvc2NoZWQvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBJIHJlY2FsbCB0aGF0IGZpbGUgYmVpbmcgcHJldHR5IGNlbnRyYWwgdG8gYSBsb3Qgb2YgdGhlIFFvUyBhbmQgdHJhZmZpYyBzaGFwaW5nIG9wdGlvbnMuIE5vdywgd2hlcmUgdG8gYmVnaW4/IEhtbSwgbGV0JiMzOTtzIGxvb2sgYXJvdW5kIGxpbmUgMjg4LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBkZWNsYXJhdGlvbnMgZm9yIGNvcmUgc2NoZWR1bGVyIG9wdGlvbnMuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgc29tZSBjb250ZXh0LiBJdCYjMzk7cyB0aW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgc3RhcnRlZC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjgwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBGUSBDb250cm9sbGVkIERlbGF5IChGUV9DT0RFTClcbiAyODE6XHRcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxuIDI4MjpcdFxuIDI4MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMjg0Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9mcV9jb2RlbC5cbiAyODU6XHRcbiAyODY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyODc6XHRcbiAyODg6XHRjb25maWcgTkVUX1NDSF9DQUtFXG4gMjg5Olx0XHR0cmlzdGF0ZSBcJiMzNDtDb21tb24gQXBwbGljYXRpb25zIEtlcHQgRW5oYW5jZWQgKENBS0UpXCYjMzQ7XG4gMjkwOlx0XHRoZWxwXG4gMjkxOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBDb21tb24gQXBwbGljYXRpb25zIEtlcHQgRW5oYW5jZWRcbiAyOTI6XHRcdCAgKENBS0UpIHF1ZXVlIG1hbmFnZW1lbnQgYWxnb3JpdGhtLlxuIDI5MzpcdFxuIDI5NDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMjk1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9jYWtlLlxuIDI5NjpcdFxuIDI5NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI5ODpcdFxuIDI5OTpcdGNvbmZpZyBORVRfU0NIX0ZRXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ0FLRSBRZGlzYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIG5vIHVudXN1YWwgZGVwZW5kZW5jaWVzIHRvIHdvcnJ5IGFib3V0LiBJJiMzOTtsbCBkZWZpbml0ZWx5IGFkZCBgTkVUX1NDSF9DQUtFYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgY29yZSBvZiB0aGlzIGZpeCBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIENBS0UgcWRpc2MmIzM5O3MgSVAgaGVhZGVyIHBhcnNpbmcsIGFuZCB0aGF04oCZcyB0cmlnZ2VyZWQgZHVyaW5nIHBhY2tldCBlbnF1ZXVpbmcuIFRoYXQgc3VnZ2VzdHMgYGNha2VfZW5xdWV1ZWAgaXMgdGhlIHJpZ2h0IGZvY3VzLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSBpZiBgY2FrZV9lbnF1ZXVlYCBpcyBzdGF0aWMuIEFoLCB5ZXMsIGl0IGlzLiBCdXQsIGl0JiMzOTtzIGFsc28gYSBjYWxsYmFjaywgcmlnaHQ/IFRoYXQgY2hhbmdlcyB0aGluZ3MgYSBiaXQuIFVzdWFsbHksIHRoZXNlIHFkaXNjIGNhbGxiYWNrcyBhcmUgY2FsbGVkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgbWVhbmluZyBhIGZ1enplciBtaWdodCBoYXZlIGEgaGFyZGVyIHRpbWUgaGl0dGluZyBpdCBkaXJlY3RseSAqaWYqIGl0IHdhcyBpbmxpbmVkIGFuZCBzdGF0aWMuCgpCdXQgd2FpdCwgSSBzZWUgaXRzIGFkZHJlc3MgKmlzKiB0YWtlbiwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyICp3b24mIzM5O3QqIGlubGluZSBpdCEgVGhpcyBpcyBncmVhdC4gQW5kLCBhY3R1YWxseSwgc3l6a2FsbGVyICpjYW4qIHRhcmdldCBzdGF0aWMgZnVuY3Rpb25zIGFzIGxvbmcgYXMgdGhlaXIgYWRkcmVzcyBpcyB0YWtlbiBvciB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCEgQW5kLCBpdCBpcyBub3QgaW5saW5lZCEKClRoaXMgaXMgZXZlbiBiZXR0ZXIgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25zIEkgaGFkIG1lbnRpb25lZCB0byAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyYjMzQ7LiBUaGlzIGNhc2UgaGl0cyB0aGUgc3dlZXQgc3BvdCEgYGNha2VfZW5xdWV1ZWAmIzM5O3MgYWRkcmVzcyBpcyB0YWtlbiwgc28gaXQmIzM5O3MgcGVyZmVjdGx5IHVzYWJsZS4gTm93LCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBQZXJoYXBzIGBjYWtlX2luaXRgPyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIHNlY29uZGFyeSBvcHRpb24sIGJ1dCBgY2FrZV9lbnF1ZXVlYCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nha2VfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY2FrZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY2FrZS5jPTI4MTg9c3RhdGljIHZvaWQgY2FrZV9jb25maWdfaW5pdChzdHJ1Y3QgY2FrZV9zY2hlZF9jb25maWcgKnEsIGJvb2wgaXNfc2hhcmVkKVxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTI4MzMtXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoyODM0OnN0YXRpYyBpbnQgY2FrZV9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yODM1LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0zMjQ0PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGNha2VfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzI1MC1cdC5wZWVrXHRcdD1cdHFkaXNjX3BlZWtfZGVxdWV1ZWQsXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMjUxOlx0LmluaXRcdFx0PVx0Y2FrZV9pbml0LFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzI1Mi1cdC5yZXNldFx0XHQ9XHRjYWtlX3Jlc2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDMwCgkJCQkJCQlvdXRwdXQ6IDgzCgkJCQkJCQl0aG91Z2h0czogMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEV4ZWN1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoYXQgYGNha2VfZW5xdWV1ZWAgaXMgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb24gZm9yIHRoaXMgbW9kaWZpY2F0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhbHRlcmVkIGNvZGUgYWN0dWFsbHkgZXhlY3V0ZXMsIHdoaWNoIG1ha2VzIGl0IHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBlZmZlY3RzLiBJJiMzOTttIGNob29zaW5nIGBjYWtlX2VucXVldWVgIGFzIG15IHByaW1hcnkgZm9jdXMuCgpMZXQmIzM5O3MgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBieSByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZjoKCmBgYGMKLQlpZiAoaXBoLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOyBpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fSVBWNikKLQkJcmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCAmIzQzOyBpcGgtJmd0O2lobCAqIDQsCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTsKJiM0MzsJaWYgKGlwaC0mZ3Q7dmVyc2lvbiA9PSA0ICZhbXA7JmFtcDsgaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpIHsKJiM0MzsJCWlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCAmIzQzOyBpcGgtJmd0O2lobCAqIDQsCiYjNDM7CQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTsKJiM0MzsJCWlmICghaXBoIHx8IGlwaC0mZ3Q7dmVyc2lvbiAhPSA2KQomIzQzOwkJCXJldHVybiBOVUxMOwogCi0JZWxzZSBpZiAoaXBoLSZndDt2ZXJzaW9uID09IDQpCiAJCXJldHVybiBpcGg7Ci0KLQllbHNlIGlmIChpcGgtJmd0O3ZlcnNpb24gPT0gNikKJiM0MzsJfSBlbHNlIGlmIChpcGgtJmd0O3ZlcnNpb24gPT0gNCkgewomIzQzOwkJcmV0dXJuIGlwaDsKJiM0MzsJfSBlbHNlIGlmIChpcGgtJmd0O3ZlcnNpb24gPT0gNikgewogCQlyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLAogCQkJCQkgIGJ1Zik7CiYjNDM7CX0KYGBgCgpSaWdodCwgaXQmIzM5O3MgY2xlYXIgbm93IHRoYXQgdGhlIGNoYW5nZSBmb2N1c2VzIG9uIG1vcmUgcm9idXN0bHkgaGFuZGxpbmcgSVB2NiBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgYnkgYWRkaW5nIGEgY2hlY2sgYWZ0ZXIgdGhlIGluaXRpYWwgYHNrYl9oZWFkZXJfcG9pbnRlcmAgY2FsbCB0byBlbnN1cmUgdGhlIHJldHJpZXZlZCBoZWFkZXIgaXMgYWN0dWFsbHkgYSB2YWxpZCBJUHY2IGhlYWRlciAodmVyc2lvbiA2KS4gVGhlIG9yaWdpbmFsIHZlcnNpb24gaGFkIGEgcG9zc2libGUgcmFjZSB3aGVyZSBpcGggY291bGQgYmUgY2hhbmdlZCBieSBhIGRpZmZlcmVudCBwcm9jZXNzb3IuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBpcyBjb3JyZWN0IGFuZCBsb2dpY2FsbHkgcmVhY2hhYmxlIHVuZGVyIHRoZSBhcHByb3ByaWF0ZSBjb25kaXRpb25zLgoKTm93LCBJJiMzOTtsbCBtb3ZlIG9uIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDExOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX0NBS0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjYWtlX2VucXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVAgaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gdGhlIENBS0UgcWRpc2MgKHNjaF9jYWtlKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHBhY2tldHMgYXJlIGVucXVldWVkIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJlZCB3aXRoIHRoZSBDQUtFIHFkaXNjLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX0NBS0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjYWtlX2VucXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVAgaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gdGhlIENBS0UgcWRpc2MgKHNjaF9jYWtlKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHBhY2tldHMgYXJlIGVucXVldWVkIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJlZCB3aXRoIHRoZSBDQUtFIHFkaXNjLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMTE6MjQ6MjAuNDk1NDg4NzIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyNTY0OTE0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9DQUtFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2FrZV9lbnF1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVAgaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gdGhlIENBS0UgcWRpc2MgKHNjaF9jYWtlKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHBhY2tldHMgYXJlIGVucXVldWVkIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJlZCB3aXRoIHRoZSBDQUtFIHFkaXNjLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMToyNDoyMC40OTU0OTg3MDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDg0MDQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgwODhjMWJjMTY0Zjk4ZWU4NTZjMzkwYmQ4YTFkODYxMWRiZGRiZmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTE6MjQ6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xcbmluZGV4IDUwNWY2M2ZlY2Y2NDA1Li43YzRkOTJjZGY1MTRmNCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2Nha2UuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jXFxuQEAgLTk1MCwxNiArOTUwLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgaXBoZHIgKmNha2VfZ2V0X2lwaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICghaXBoKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmIChpcGgtXFx1MDAzZXZlcnNpb24gPT0gNCBcXHUwMDI2XFx1MDAyNiBpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBWNilcXG4tXFx0XFx0cmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCArIGlwaC1cXHUwMDNlaWhsICogNCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBidWYpO1xcbitcXHRpZiAoaXBoLVxcdTAwM2V2ZXJzaW9uID09IDQgXFx1MDAyNlxcdTAwMjYgaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpIHtcXG4rXFx0XFx0aXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICsgaXBoLVxcdTAwM2VpaGwgKiA0LFxcbitcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcXG4rXFx0XFx0aWYgKCFpcGggfHwgaXBoLVxcdTAwM2V2ZXJzaW9uICE9IDYpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0ZWxzZSBpZiAoaXBoLVxcdTAwM2V2ZXJzaW9uID09IDQpXFxuIFxcdFxcdHJldHVybiBpcGg7XFxuLVxcbi1cXHRlbHNlIGlmIChpcGgtXFx1MDAzZXZlcnNpb24gPT0gNilcXG4rXFx0fSBlbHNlIGlmIChpcGgtXFx1MDAzZXZlcnNpb24gPT0gNCkge1xcbitcXHRcXHRyZXR1cm4gaXBoO1xcbitcXHR9IGVsc2UgaWYgKGlwaC1cXHUwMDNldmVyc2lvbiA9PSA2KSB7XFxuIFxcdFxcdHJldHVybiBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksXFxuIFxcdFxcdFxcdFxcdFxcdCAgYnVmKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtOTkwLDcgKzk5Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgdGNwaGRyICpjYWtlX2dldF90Y3BoZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0aXB2NmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihfaXB2NmgpLCBcXHUwMDI2X2lwdjZoKTtcXG4gXFxuLVxcdFxcdFxcdGlmICghaXB2NmggfHwgaXB2NmgtXFx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXFxuK1xcdFxcdFxcdGlmICghaXB2NmggfHwgaXB2NmgtXFx1MDAzZXZlcnNpb24gIT0gNiB8fFxcbitcXHRcXHRcXHQgICAgaXB2NmgtXFx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXFxuIFxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjIxLjEzNzA4OTk5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQwNjE0ODc3MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfQ0FLRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNha2VfZW5xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElQIGhlYWRlciBwYXJzaW5nIGxvZ2ljIGluIHRoZSBDQUtFIHFkaXNjIChzY2hfY2FrZSkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBwYWNrZXRzIGFyZSBlbnF1ZXVlZCB0byBhIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgQ0FLRSBxZGlzYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODA4OGMxYmMxNjRmOThlZTg1NmMzOTBiZDhhMWQ4NjExZGJkZGJmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDExOjI0OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xuaW5kZXggNTA1ZjYzZmVjZjY0MDUuLjdjNGQ5MmNkZjUxNGY0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9jYWtlLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jXG5AQCAtOTUwLDE2ICs5NTAsMTkgQEAgc3RhdGljIHN0cnVjdCBpcGhkciAqY2FrZV9nZXRfaXBoZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghaXBoKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KVxuLVx0XHRyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICsgaXBoLVx1MDAzZWlobCAqIDQsXG4tXHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcbitcdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRcdGlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCArIGlwaC1cdTAwM2VpaGwgKiA0LFxuK1x0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcbitcdFx0aWYgKCFpcGggfHwgaXBoLVx1MDAzZXZlcnNpb24gIT0gNilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGVsc2UgaWYgKGlwaC1cdTAwM2V2ZXJzaW9uID09IDQpXG4gXHRcdHJldHVybiBpcGg7XG4tXG4tXHRlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA2KVxuK1x0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0KSB7XG4rXHRcdHJldHVybiBpcGg7XG4rXHR9IGVsc2UgaWYgKGlwaC1cdTAwM2V2ZXJzaW9uID09IDYpIHtcbiBcdFx0cmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSxcbiBcdFx0XHRcdFx0ICBidWYpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTk5MCw3ICs5OTMsOCBAQCBzdGF0aWMgc3RydWN0IHRjcGhkciAqY2FrZV9nZXRfdGNwaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0aXB2NmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsXG4gXHRcdFx0XHRcdFx0ICAgc2l6ZW9mKF9pcHY2aCksIFx1MDAyNl9pcHY2aCk7XG4gXG4tXHRcdFx0aWYgKCFpcHY2aCB8fCBpcHY2aC1cdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fVENQKVxuK1x0XHRcdGlmICghaXB2NmggfHwgaXB2NmgtXHUwMDNldmVyc2lvbiAhPSA2IHx8XG4rXHRcdFx0ICAgIGlwdjZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdFx0XHRvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjIxLjEzNzA5MTI2OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTQwMjc5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDQUtFIFFkaXNjIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3NjaGVkL3NjaF9jYWtlLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQ0FLRSAoQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkKSBxdWV1ZWluZyBkaXNjaXBsaW5lLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBjaGVja3MgZm9yIElQdjYgaGVhZGVycywgYGlwaC1cdTAwM2V2ZXJzaW9uID09IDZgLCB3aXRoaW4gdGhlIGBjYWtlX2dldF9pcGhkcmAgYW5kIGBjYWtlX2dldF90Y3BoZHJgIGZ1bmN0aW9ucy4gVGhpcyBsaWtlbHkgbWVhbnMgdGhleSdyZSBhZGRpbmcgb3IgaW1wcm92aW5nIElQdjYgc3VwcG9ydCwgb3IgYXQgbGVhc3QgaGFuZGxpbmcgZWRnZSBjYXNlcyByZWxhdGVkIHRvIElQdjYgcGFja2V0cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaW1wYWN0cyB0aGUgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgYnkgZmlndXJpbmcgb3V0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgaXMgcHJvcGVybHkgZW5hYmxlZCBpbiBvdXIgYnVpbGQuIEknbGwgc2VhcmNoIGZvciBgc2NoX2Nha2UuY2AgaW4gYG5ldC9zY2hlZC9NYWtlZmlsZWAgdG8gc2VlIGhvdyBpdCdzIGJ1aWx0IGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vZHVsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgaG93IGl0J3MgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMToyNDoyNS4yNTExMjM5MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUxMTM1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoX2Nha2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9NYWtlZmlsZT01Nj1vYmotJChDT05GSUdfTkVUX1NDSF9GUV9DT0RFTClcXHQrPSBzY2hfZnFfY29kZWwub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTo1NzpvYmotJChDT05GSUdfTkVUX1NDSF9DQUtFKVxcdCs9IHNjaF9jYWtlLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtNTgtb2JqLSQoQ09ORklHX05FVF9TQ0hfRlEpXFx0Kz0gc2NoX2ZxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTE6MjQ6MjUuMzg2MjQzNzk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNjcxMzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENBS0UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhlIENvbnRyb2xsZWQtRGVsYXkgQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgKENBS0UpIHNjaGVkdWxlciBpcyBgTkVUX1NDSF9DQUtFYC4gUmlnaHQsIHRoYXQncyB0aGUga2V5LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSB1bmRlcmx5aW5nIGNvZGUuIFRoZSB0ZXh0IGlkZW50aWZpZXMgdHdvIGZ1bmN0aW9ucyB0aGF0IGFwcGVhciB0byBiZSBpbnRlZ3JhbCB0byBpdHMgb3BlcmF0aW9uOiBgY2FrZV9nZXRfaXBoZHJgIGFuZCBgY2FrZV9nZXRfdGNwaGRyYC4gTXkgbmV4dCBzdGVwIGlzIG9idmlvdXMg4oCTIEkgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gV2hlcmUgYXJlIHRoZXkgY2FsbGVkIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrPyBXaGF0IG90aGVyIG1vZHVsZXMgb3Igcm91dGluZXMgZGVwZW5kIG9uIHRoZWlyIG91dHB1dD8gVW5kZXJzdGFuZGluZyB0aGVpciBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCB0byBnYXVnaW5nIHRoZSBzY29wZSBvZiBhbnkgcG90ZW50aWFsIGNoYW5nZXMgb3IgaW1wbGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgYE5FVF9TQ0hfQ0FLRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSB1dGlsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjI5LjAyMjk1OTYxNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDM4NDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWtlX2dldF9pcGhkcnxjYWtlX2dldF90Y3BoZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9jYWtlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9jYWtlLmM9OTMyPXN0YXRpYyB2b2lkIGZsb3dfcXVldWVfYWRkKHN0cnVjdCBjYWtlX2Zsb3cgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy05NDEtXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6OTQyOnN0YXRpYyBzdHJ1Y3QgaXBoZHIgKmNha2VfZ2V0X2lwaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtOTQzLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaXB2NmhkciAqYnVmKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtOTY5LVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjk3MDpzdGF0aWMgc3RydWN0IHRjcGhkciAqY2FrZV9nZXRfdGNwaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtOTcxLVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZnNpemUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0xMjIxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2FrZV9hY2tfZmlsdGVyKHN0cnVjdCBjYWtlX3NjaGVkX2RhdGEgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjQyLVxcdHNrYiA9IGZsb3ctXFx1MDAzZXRhaWw7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTI0MzpcXHR0Y3BoID0gY2FrZV9nZXRfdGNwaGRyKHNrYiwgX3RjcGgsIHNpemVvZihfdGNwaCkpO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjEyNDQ6XFx0aXBoID0gY2FrZV9nZXRfaXBoZHIoc2tiLCBcXHUwMDI2X2lwaCk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTI0NS1cXHRpZiAoIXRjcGgpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjY0LVxcdCAgICAgc2tiX3ByZXYgPSBza2JfY2hlY2ssIHNrYl9jaGVjayA9IHNrYl9jaGVjay1cXHUwMDNlbmV4dCkge1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjEyNjU6XFx0XFx0aXBoX2NoZWNrID0gY2FrZV9nZXRfaXBoZHIoc2tiX2NoZWNrLCBcXHUwMDI2X2lwaF9jaGVjayk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTI2NjpcXHRcXHR0Y3BoX2NoZWNrID0gY2FrZV9nZXRfdGNwaGRyKHNrYl9jaGVjaywgXFx1MDAyNl90Y3BoX2NoZWNrLFxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTEyNjctXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoX3RjcGhfY2hlY2spKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTE6MjQ6MjkuMTE3MzQ4ODAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNzAyNjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgUm9sZSBvZiBgY2FrZV9hY2tfZmlsdGVyYCoqXG5cblJpZ2h0LCBzbyB0aGVzZSBcInRoZXlcIiBhcmUgdXNlZCB3aXRoaW4gdGhlIGBjYWtlX2Fja19maWx0ZXJgIGZ1bmN0aW9uLiBPa2F5LCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIHdoYXQncyAqdGhhdCogdXNlZCBmb3I/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBjYWtlX2Fja19maWx0ZXJgLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgaXRzIGltbWVkaWF0ZSBjYWxsZXJzIGFuZCB0aGVuIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgKnRob3NlKiBmdW5jdGlvbnMuIElzIGl0IHBhcnQgb2YgdGhlIFFvUyBtYWNoaW5lcnk/IE9yIHBlcmhhcHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gY29uZ2VzdGlvbiBjb250cm9sIG9yIHNoYXBpbmc/IFRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgZGV0ZXJtaW5lIGV2ZXJ5dGhpbmcuIEdvdHRhIHRyYWNrIGRvd24gd2hlcmUgaXQncyBiZWluZyAqY2FsbGVkKiBmcm9tLiBUaGF0J3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgd2hhdCBcInRoZXlcIiAqYXJlKi4gQW5kLCBrbm93aW5nIG15IGZpZWxkLCB0aGVyZSdzIGFsd2F5cyBhIGdvb2QgcmVhc29uIGZvciBpdCB0byBiZSB3aGVyZSBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjMyLjgzNDM3NzI1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5MDMyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FrZV9hY2tfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfY2FrZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfY2FrZS5jPTExNDk9c3RhdGljIGJvb2wgY2FrZV90Y3BoX21heV9kcm9wKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcGgsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjIwLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjEyMjE6c3RhdGljIHN0cnVjdCBza19idWZmICpjYWtlX2Fja19maWx0ZXIoc3RydWN0IGNha2Vfc2NoZWRfZGF0YSAqcSxcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjIyLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY2FrZV9mbG93ICpmbG93KVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MTc2MD1zdGF0aWMgczMyIGNha2VfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE4NTAtXFx0XFx0aWYgKHEtXFx1MDAzZWNvbmZpZy1cXHUwMDNlYWNrX2ZpbHRlcilcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxODUxOlxcdFxcdFxcdGFjayA9IGNha2VfYWNrX2ZpbHRlcihxLCBmbG93KTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xODUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMToyNDozMi45MzYyODQ0MDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM0MDMzOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIGBjYWtlX2VucXVldWVgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIGBjYWtlX2VucXVldWVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQncyB0aGUgcG9pbnQgb2YgaW50ZXJlc3QsIHRoZSB0YXJnZXQuIFNpbmNlIGl0J3MgYmVpbmcgdXNlZCwgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNlbnRlciBteSBhbmFseXNpcyBvbiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuXG5cbk5vdywgbGV0J3Mgc2VlLCB3aGF0IGVsc2UgY2FuIEkgbGVhcm4/IEFoYSwgYGNha2VfYWNrX2ZpbHRlcmAuIEl0IHNlZW1zIHJlbGF0ZWQsIHNvIGxldCdzIGNvbmZpcm0gaWYgaXQncyBzdGF0aWMuIFllcywgaXQgaXMuIFRoYXQncyBnb29kIHRvIGtub3cuIEl0IGhlbHBzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBXaGlsZSBJJ20gbG9va2luZyBhdCBpdCBJIHNlZSBgY2FrZV9lbnF1ZXVlYCBpcyBhbHNvIHN0YXRpYywgYnV0IHRoYXQgaXQncyB0aGUgZW5xdWV1ZSBjYWxsYmFjayBmb3IgdGhlIHFkaXNjLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIFRoaXMgZ2l2ZXMgbWUgYSBiZXR0ZXIgY29udGV4dCBvZiB3aGVyZSBpdCBzaXRzLlxuXG5Pa2F5LCBsZXQncyB6b29tIG91dCBhIGJpdC4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkPyBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCB0aW1lIHRvIHNlYXJjaCBhbmQgc3VydmV5IHRoZSBzdXJyb3VuZGluZyBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjM2LjQ3MDMyMTAwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1ODA5ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNha2VfZW5xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2Nha2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2Nha2UuYz0xNzU4PXN0YXRpYyB2b2lkIGNha2VfcmVjb25maWd1cmUoc3RydWN0IFFkaXNjICpzY2gpO1xcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3NTktXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTc2MDpzdGF0aWMgczMyIGNha2VfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNzYxLVxcdFxcdFxcdHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTMyNDQ9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgY2FrZV9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMyNDctXFx0LnByaXZfc2l6ZVxcdD1cXHRzaXplb2Yoc3RydWN0IGNha2Vfc2NoZWRfZGF0YSksXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MzI0ODpcXHQuZW5xdWV1ZVxcdD1cXHRjYWtlX2VucXVldWUsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzI0OS1cXHQuZGVxdWV1ZVxcdD1cXHRjYWtlX2RlcXVldWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjM2LjYxNjEzNjc3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTExMzM4OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQ0FLRSBQYWNrZXQgRW5xdWV1aW5nKipcblxuUmlnaHQsIHNvIGBjYWtlX2VucXVldWVgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGZvciBwdXNoaW5nIHBhY2tldHMgaW50byB0aGUgQ0FLRSBxdWV1ZSBkaXNjaXBsaW5lLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBcIklzIHRoYXQgKmFsbCogdGhlcmUgaXMgdG8gaXQ/IElzIHRoaXMgdGhlIG9ubHkgcG9pbnQgb2YgZW50cnksIG9yIGRvIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uP1wiXG5cbkknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBgbmV0L3NjaGVkL0tjb25maWdgLCB0byBkb3VibGUtY2hlY2sgdGhhdCBgTkVUX1NDSF9DQUtFYCBpcyBwcm9wZXJseSBjb25maWd1cmVkLCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSBmb3IgcGFja2V0IGhhbmRsaW5nIGF0IGFsbC4gSSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IHRoZSBDQUtFIG1vZHVsZSBpcyBlbmFibGVkIGFuZCBhbnkgbmVjZXNzYXJ5IHN1cHBvcnRpbmcgZmVhdHVyZXMgYXJlIGFsc28gcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjM5LjcyNzQ3NzcxNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1MTM4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfQ0FLRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0yNzc9Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTI4Ny1cXG5uZXQvc2NoZWQvS2NvbmZpZzoyODg6Y29uZmlnIE5FVF9TQ0hfQ0FLRVxcbm5ldC9zY2hlZC9LY29uZmlnLTI4OS1cXHR0cmlzdGF0ZSBcXFwiQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTE6MjQ6MzkuODE2OTk3OTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3NDE1OTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbmV0L3NjaGVkL0tjb25maWdgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgc29tZXRoaW5nIGluIHRoZSBuZXR3b3JraW5nIHNjaGVkdWxlciBpcyBjb25maWd1cmVkLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgZmlsZS4gTGV0J3Mgc2VlLi4uSSdsbCBmb2N1cyBvbiBgbmV0L3NjaGVkL0tjb25maWdgIHNwZWNpZmljYWxseS4gSSByZWNhbGwgdGhhdCBmaWxlIGJlaW5nIHByZXR0eSBjZW50cmFsIHRvIGEgbG90IG9mIHRoZSBRb1MgYW5kIHRyYWZmaWMgc2hhcGluZyBvcHRpb25zLiBOb3csIHdoZXJlIHRvIGJlZ2luPyBIbW0sIGxldCdzIGxvb2sgYXJvdW5kIGxpbmUgMjg4LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBkZWNsYXJhdGlvbnMgZm9yIGNvcmUgc2NoZWR1bGVyIG9wdGlvbnMuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgc29tZSBjb250ZXh0LiBJdCdzIHRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGdldCBzdGFydGVkLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMToyNDo0NS4yOTExNjE3NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEZRIENvbnRyb2xsZWQgRGVsYXkgKEZRX0NPREVMKVxcbiAyODE6XFx0XFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDI4MjpcXHRcXG4gMjgzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAyODQ6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZnFfY29kZWwuXFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjg3OlxcdFxcbiAyODg6XFx0Y29uZmlnIE5FVF9TQ0hfQ0FLRVxcbiAyODk6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZCAoQ0FLRSlcXFwiXFxuIDI5MDpcXHRcXHRoZWxwXFxuIDI5MTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBDb21tb24gQXBwbGljYXRpb25zIEtlcHQgRW5oYW5jZWRcXG4gMjkyOlxcdFxcdCAgKENBS0UpIHF1ZXVlIG1hbmFnZW1lbnQgYWxnb3JpdGhtLlxcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjk1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2Nha2UuXFxuIDI5NjpcXHRcXG4gMjk3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjk4OlxcdFxcbiAyOTk6XFx0Y29uZmlnIE5FVF9TQ0hfRlFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTE6MjQ6NDUuMjkxMzA4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzI2MzAzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENBS0UgUWRpc2MgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIG5vIHVudXN1YWwgZGVwZW5kZW5jaWVzIHRvIHdvcnJ5IGFib3V0LiBJJ2xsIGRlZmluaXRlbHkgYWRkIGBORVRfU0NIX0NBS0VgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb3JlIG9mIHRoaXMgZml4IHNlZW1zIHRvIGJlIHdpdGhpbiB0aGUgQ0FLRSBxZGlzYydzIElQIGhlYWRlciBwYXJzaW5nLCBhbmQgdGhhdOKAmXMgdHJpZ2dlcmVkIGR1cmluZyBwYWNrZXQgZW5xdWV1aW5nLiBUaGF0IHN1Z2dlc3RzIGBjYWtlX2VucXVldWVgIGlzIHRoZSByaWdodCBmb2N1cy5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIGlmIGBjYWtlX2VucXVldWVgIGlzIHN0YXRpYy4gQWgsIHllcywgaXQgaXMuIEJ1dCwgaXQncyBhbHNvIGEgY2FsbGJhY2ssIHJpZ2h0PyBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBVc3VhbGx5LCB0aGVzZSBxZGlzYyBjYWxsYmFja3MgYXJlIGNhbGxlZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIG1lYW5pbmcgYSBmdXp6ZXIgbWlnaHQgaGF2ZSBhIGhhcmRlciB0aW1lIGhpdHRpbmcgaXQgZGlyZWN0bHkgKmlmKiBpdCB3YXMgaW5saW5lZCBhbmQgc3RhdGljLlxuXG5CdXQgd2FpdCwgSSBzZWUgaXRzIGFkZHJlc3MgKmlzKiB0YWtlbiwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyICp3b24ndCogaW5saW5lIGl0ISBUaGlzIGlzIGdyZWF0LiBBbmQsIGFjdHVhbGx5LCBzeXprYWxsZXIgKmNhbiogdGFyZ2V0IHN0YXRpYyBmdW5jdGlvbnMgYXMgbG9uZyBhcyB0aGVpciBhZGRyZXNzIGlzIHRha2VuIG9yIHRoZXkgYXJlbid0IGlubGluZWQhIEFuZCwgaXQgaXMgbm90IGlubGluZWQhXG5cblRoaXMgaXMgZXZlbiBiZXR0ZXIgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25zIEkgaGFkIG1lbnRpb25lZCB0byBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLiBUaGlzIGNhc2UgaGl0cyB0aGUgc3dlZXQgc3BvdCEgYGNha2VfZW5xdWV1ZWAncyBhZGRyZXNzIGlzIHRha2VuLCBzbyBpdCdzIHBlcmZlY3RseSB1c2FibGUuIE5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gUGVyaGFwcyBgY2FrZV9pbml0YD8gSSdsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIHNlY29uZGFyeSBvcHRpb24sIGJ1dCBgY2FrZV9lbnF1ZXVlYCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMToyNDo1MS4wMTc2MTQ0NDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY5MDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWtlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9jYWtlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9jYWtlLmM9MjgxOD1zdGF0aWMgdm9pZCBjYWtlX2NvbmZpZ19pbml0KHN0cnVjdCBjYWtlX3NjaGVkX2NvbmZpZyAqcSwgYm9vbCBpc19zaGFyZWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yODMzLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjI4MzQ6c3RhdGljIGludCBjYWtlX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0yODM1LVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MzI0ND1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBjYWtlX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMzI1MC1cXHQucGVla1xcdFxcdD1cXHRxZGlzY19wZWVrX2RlcXVldWVkLFxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjMyNTE6XFx0LmluaXRcXHRcXHQ9XFx0Y2FrZV9pbml0LFxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTMyNTItXFx0LnJlc2V0XFx0XFx0PVxcdGNha2VfcmVzZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI0OjUxLjEyOTMxMDIyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ4NzQ5ODkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBFeGVjdXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbnBvaW50ZWQgdGhhdCBgY2FrZV9lbnF1ZXVlYCBpcyB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbiBmb3IgdGhpcyBtb2RpZmljYXRpb24uIFRoYXQncyB3aGVyZSB0aGUgYWx0ZXJlZCBjb2RlIGFjdHVhbGx5IGV4ZWN1dGVzLCB3aGljaCBtYWtlcyBpdCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgZWZmZWN0cy4gSSdtIGNob29zaW5nIGBjYWtlX2VucXVldWVgIGFzIG15IHByaW1hcnkgZm9jdXMuXG5cbkxldCdzIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgYnkgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGY6XG5cbmBgYGNcbi1cdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KVxuLVx0XHRyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICsgaXBoLVx1MDAzZWlobCAqIDQsXG4tXHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcbitcdGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KSB7XG4rXHRcdGlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCArIGlwaC1cdTAwM2VpaGwgKiA0LFxuK1x0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgYnVmKTtcbitcdFx0aWYgKCFpcGggfHwgaXBoLVx1MDAzZXZlcnNpb24gIT0gNilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGVsc2UgaWYgKGlwaC1cdTAwM2V2ZXJzaW9uID09IDQpXG4gXHRcdHJldHVybiBpcGg7XG4tXG4tXHRlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA2KVxuK1x0fSBlbHNlIGlmIChpcGgtXHUwMDNldmVyc2lvbiA9PSA0KSB7XG4rXHRcdHJldHVybiBpcGg7XG4rXHR9IGVsc2UgaWYgKGlwaC1cdTAwM2V2ZXJzaW9uID09IDYpIHtcbiBcdFx0cmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSxcbiBcdFx0XHRcdFx0ICBidWYpO1xuK1x0fVxuYGBgXG5cblJpZ2h0LCBpdCdzIGNsZWFyIG5vdyB0aGF0IHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBtb3JlIHJvYnVzdGx5IGhhbmRsaW5nIElQdjYgcGFja2V0cywgc3BlY2lmaWNhbGx5IGJ5IGFkZGluZyBhIGNoZWNrIGFmdGVyIHRoZSBpbml0aWFsIGBza2JfaGVhZGVyX3BvaW50ZXJgIGNhbGwgdG8gZW5zdXJlIHRoZSByZXRyaWV2ZWQgaGVhZGVyIGlzIGFjdHVhbGx5IGEgdmFsaWQgSVB2NiBoZWFkZXIgKHZlcnNpb24gNikuIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIGhhZCBhIHBvc3NpYmxlIHJhY2Ugd2hlcmUgaXBoIGNvdWxkIGJlIGNoYW5nZWQgYnkgYSBkaWZmZXJlbnQgcHJvY2Vzc29yLiBJJ20gc2F0aXNmaWVkIHRoYXQgdGhpcyBpcyBjb3JyZWN0IGFuZCBsb2dpY2FsbHkgcmVhY2hhYmxlIHVuZGVyIHRoZSBhcHByb3ByaWF0ZSBjb25kaXRpb25zLlxuXG5Ob3csIEknbGwgbW92ZSBvbiB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDMwLCJPdXRwdXRUb2tlbnMiOjgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDExOjI1OjAxLjYxNjgxMjAzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTE1MDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9DQUtFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2FrZV9lbnF1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVAgaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gdGhlIENBS0UgcWRpc2MgKHNjaF9jYWtlKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHBhY2tldHMgYXJlIGVucXVldWVkIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJlZCB3aXRoIHRoZSBDQUtFIHFkaXNjLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfQ0FLRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNha2VfZW5xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElQIGhlYWRlciBwYXJzaW5nIGxvZ2ljIGluIHRoZSBDQUtFIHFkaXNjIChzY2hfY2FrZSkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBwYWNrZXRzIGFyZSBlbnF1ZXVlZCB0byBhIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgQ0FLRSBxZGlzYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow99trl[1] Phase: Succeeded StartedAt: 2026-07-28 11:25:15 +0000 UTC FinishedAt: 2026-07-28 11:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 11:25:15 +0000 UTC FinishedAt: 2026-07-28 11:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2] Phase: Succeeded StartedAt: 2026-07-28 11:25:15 +0000 UTC FinishedAt: 2026-07-28 15:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 11:25:15 +0000 UTC FinishedAt: 2026-07-28 15:40:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 11:25:15 +0000 UTC FinishedAt: 2026-07-28 11:25:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 11:25:15 +0000 UTC FinishedAt: 2026-07-28 11:25:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow99trl/series-workflow99trl-convert-artifact-3439973575/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 11:25:25 +0000 UTC FinishedAt: 2026-07-28 12:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 11:25:25 +0000 UTC FinishedAt: 2026-07-28 12:04:33 +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:*c2e70c63-378f-4cf2-9d83-6e17ec005d86,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-workflow99trl/series-workflow99trl-convert-artifact-3439973575/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": "2729905a-9a25-402b-bdda-417e9e192e40", "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-workflow99trl/series-workflow99trl-build-action-2629098845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 11:25:25 +0000 UTC FinishedAt: 2026-07-28 12:04:23 +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:*c2e70c63-378f-4cf2-9d83-6e17ec005d86,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-workflow99trl/series-workflow99trl-convert-artifact-3439973575/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": "2729905a-9a25-402b-bdda-417e9e192e40", "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-workflow99trl/series-workflow99trl-build-action-2629098845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 12:04:33 +0000 UTC FinishedAt: 2026-07-28 12:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 12:04:33 +0000 UTC FinishedAt: 2026-07-28 12:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 12:04:33 +0000 UTC FinishedAt: 2026-07-28 12:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 12:04:33 +0000 UTC FinishedAt: 2026-07-28 12:04:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow99trl/series-workflow99trl-convert-artifact-2305938422/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 12:04:54 +0000 UTC FinishedAt: 2026-07-28 12:07:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 12:04:54 +0000 UTC FinishedAt: 2026-07-28 12:07:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2729905a-9a25-402b-bdda-417e9e192e40,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-workflow99trl/series-workflow99trl-build-action-2629098845/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-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 12:07:10 +0000 UTC FinishedAt: 2026-07-28 12:07:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 12:07:10 +0000 UTC FinishedAt: 2026-07-28 12:07:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 12:07:10 +0000 UTC FinishedAt: 2026-07-28 12:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 12:07:10 +0000 UTC FinishedAt: 2026-07-28 12:35:07 +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:*c2e70c63-378f-4cf2-9d83-6e17ec005d86,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-workflow99trl/series-workflow99trl-convert-artifact-2305938422/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": "945a697b-1e20-4573-88eb-cc36353986eb", "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-workflow99trl/series-workflow99trl-build-action-3791846138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 12:07:10 +0000 UTC FinishedAt: 2026-07-28 12:33:55 +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:*c2e70c63-378f-4cf2-9d83-6e17ec005d86,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-workflow99trl/series-workflow99trl-convert-artifact-2305938422/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": "945a697b-1e20-4573-88eb-cc36353986eb", "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-workflow99trl/series-workflow99trl-build-action-3791846138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 12:35:07 +0000 UTC FinishedAt: 2026-07-28 12:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 12:35:07 +0000 UTC FinishedAt: 2026-07-28 12:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 12:35:07 +0000 UTC FinishedAt: 2026-07-28 12:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 12:35:07 +0000 UTC FinishedAt: 2026-07-28 12:37:24 +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:*945a697b-1e20-4573-88eb-cc36353986eb,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-workflow99trl/series-workflow99trl-build-action-3791846138/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-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-28 12:37:34 +0000 UTC FinishedAt: 2026-07-28 15:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-28 12:37:34 +0000 UTC FinishedAt: 2026-07-28 15:40:21 +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":["cake_enqueue"],"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:*2729905a-9a25-402b-bdda-417e9e192e40,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*945a697b-1e20-4573-88eb-cc36353986eb,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-workflow99trl/series-workflow99trl-build-action-2629098845/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-workflow99trl/series-workflow99trl-build-action-3791846138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 12:37:34 +0000 UTC FinishedAt: 2026-07-28 12:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 12:37:34 +0000 UTC FinishedAt: 2026-07-28 12:37:43 +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":["cake_enqueue"],"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-workflow99trl/series-workflow99trl-convert-artifact-2946312987/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 12:37:34 +0000 UTC FinishedAt: 2026-07-28 12:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 12:37:34 +0000 UTC FinishedAt: 2026-07-28 12:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 12:37:34 +0000 UTC FinishedAt: 2026-07-28 12:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-28 12:37:55 +0000 UTC FinishedAt: 2026-07-28 15:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99trl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cake_enqueue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2c1bd78dc8e2221549409769a76c39304b82a1b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_CAKE"],"series_id":"f71f316e-10f0-4fff-aa4f-44f3bc0b382d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-28 12:37:55 +0000 UTC FinishedAt: 2026-07-28 15:40:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2729905a-9a25-402b-bdda-417e9e192e40,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*945a697b-1e20-4573-88eb-cc36353986eb,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-workflow99trl/series-workflow99trl-build-action-2629098845/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-workflow99trl/series-workflow99trl-build-action-3791846138/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-workflow99trl/series-workflow99trl-convert-artifact-2946312987/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,}