Name: series-workflowk8l6s Phase: Succeeded StartedAt: 2026-07-16 03:03:26 +0000 UTC FinishedAt: 2026-07-16 07:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[0] Phase: Succeeded StartedAt: 2026-07-16 03:03:26 +0000 UTC FinishedAt: 2026-07-16 03:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 03:03:26 +0000 UTC FinishedAt: 2026-07-16 03:26:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "adea84ee6cdea611146c4251d3c1616f5a09feca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IOSCHED_BFQ", "BLK_CGROUP", "BLK_CGROUP_IOCOST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "adea84ee6cdea611146c4251d3c1616f5a09feca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IOSCHED_BFQ", "BLK_CGROUP", "BLK_CGROUP_IOCOST" ], "series_id": "ac9d6b1a-cb75-4a33-b16e-bd5962a4336e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blk_mq_start_request", "bfq_insert_requests", "blkcg_maybe_throttle_current", "blk_iocost_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0NPU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfbXFfc3RhcnRfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDtiZnFfaW5zZXJ0X3JlcXVlc3RzJiMzNDssCiAgICAmIzM0O2Jsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnQmIzM0OywKICAgICYjMzQ7YmxrX2lvY29zdF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGJsa190aW1lX2dldF9uc2Agd2hlcmUgYGN1cl9rdGltZWAgY291bGQgYmUgemVyb2VkIGJ5IHByZS1lbXB0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdGhhdCBhZmZlY3RzIHRpbWVzdGFtcGluZyBvZiBibG9jayByZXF1ZXN0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIyYjJkYmNiYTUxNDAwMzEzOGY1MGVhZDhhMTE0ODI0YmI1NmUwMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAwMzoyNDoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXG5pbmRleCBiOTk4YTc3NjFmYWYzNi4uMTdlMDM2NTZiYTlhYzMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmhcbkBAIC02ODksNiAmIzQzOzY4OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlcV9yZWZfcmVhZChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIHN0YXRpYyBpbmxpbmUgdTY0IGJsa190aW1lX2dldF9ucyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBibGtfcGx1ZyAqcGx1ZyA9IGN1cnJlbnQtXHUwMDNlcGx1ZztcbiYjNDM7XHR1NjQgbm93O1xuIFxuIFx0aWYgKCFwbHVnIHx8ICFpbl90YXNrKCkpXG4gXHRcdHJldHVybiBrdGltZV9nZXRfbnMoKTtcbkBAIC02OTcsMTIgJiM0Mzs2OTgsMTggQEAgc3RhdGljIGlubGluZSB1NjQgYmxrX3RpbWVfZ2V0X25zKHZvaWQpXG4gXHQgKiAwIGNvdWxkIHZlcnkgd2VsbCBiZSBhIHZhbGlkIHRpbWUsIGJ1dCByYXRoZXIgdGhhbiBmbGFnIFwmIzM0O3RoaXMgaXNcbiBcdCAqIGEgdmFsaWQgdGltZXN0YW1wXCYjMzQ7IHNlcGFyYXRlbHksIGp1c3QgYWNjZXB0IHRoYXQgd2UmIzM5O2xsIGRvIGFuIGV4dHJhXG4gXHQgKiBrdGltZV9nZXRfbnMoKSBpZiB3ZSBqdXN0IGhhcHBlbiB0byBnZXQgMCBhcyB0aGUgY3VycmVudCB0aW1lLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogY3VyX2t0aW1lIGNhbiBiZSB6ZXJvZWQgYnkgcHJlLWVtcHRpb24gdGhlIG1vbWVudCBQRl9CTE9DS19UUyBpcyBzZXQuXG4gXHQgKi9cbi1cdGlmICghcGx1Zy1cdTAwM2VjdXJfa3RpbWUpIHtcbi1cdFx0cGx1Zy1cdTAwM2VjdXJfa3RpbWUgPSBrdGltZV9nZXRfbnMoKTtcbiYjNDM7XHRub3cgPSBSRUFEX09OQ0UocGx1Zy1cdTAwM2VjdXJfa3RpbWUpO1xuJiM0MztcdGlmICghbm93KSB7XG4mIzQzO1x0XHRub3cgPSBrdGltZV9nZXRfbnMoKTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UocGx1Zy1cdTAwM2VjdXJfa3RpbWUsIG5vdyk7XG4mIzQzO1x0XHQvKiBFbnN1cmUgUEZfQkxPQ0tfVFMgaXMgc2V0IGFmdGVyIGN1cl9rdGltZS4gKi9cbiYjNDM7XHRcdGJhcnJpZXIoKTtcbiBcdFx0Y3VycmVudC1cdTAwM2VmbGFncyB8PSBQRl9CTE9DS19UUztcbiBcdH1cbi1cdHJldHVybiBwbHVnLVx1MDAzZWN1cl9rdGltZTtcbiYjNDM7XHRyZXR1cm4gbm93O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGt0aW1lX3QgYmxrX3RpbWVfZ2V0KHZvaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9TQ0hFRF9CRlEmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19tcV9zdGFydF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O2JmcV9pbnNlcnRfcmVxdWVzdHMmIzM0OywKICAgICYjMzQ7YmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudCYjMzQ7LAogICAgJiMzNDtibGtfaW9jb3N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgYmxrX3RpbWVfZ2V0X25zYCB3aGVyZSBgY3VyX2t0aW1lYCBjb3VsZCBiZSB6ZXJvZWQgYnkgcHJlLWVtcHRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBsYXllciB0aGF0IGFmZmVjdHMgdGltZXN0YW1waW5nIG9mIGJsb2NrIHJlcXVlc3RzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMmIyZGJjYmE1MTQwMDMxMzhmNTBlYWQ4YTExNDgyNGJiNTZlMDE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMDM6MjQ6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IGI5OThhNzc2MWZhZjM2Li4xN2UwMzY1NmJhOWFjMyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmgKQEAgLTY4OSw2ICYjNDM7Njg5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgcmVxX3JlZl9yZWFkKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiBzdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZCkKIHsKIAlzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcgPSBjdXJyZW50LSZndDtwbHVnOwomIzQzOwl1NjQgbm93OwogCiAJaWYgKCFwbHVnIHx8ICFpbl90YXNrKCkpCiAJCXJldHVybiBrdGltZV9nZXRfbnMoKTsKQEAgLTY5NywxMiAmIzQzOzY5OCwxOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZCkKIAkgKiAwIGNvdWxkIHZlcnkgd2VsbCBiZSBhIHZhbGlkIHRpbWUsIGJ1dCByYXRoZXIgdGhhbiBmbGFnICYjMzQ7dGhpcyBpcwogCSAqIGEgdmFsaWQgdGltZXN0YW1wJiMzNDsgc2VwYXJhdGVseSwganVzdCBhY2NlcHQgdGhhdCB3ZSYjMzk7bGwgZG8gYW4gZXh0cmEKIAkgKiBrdGltZV9nZXRfbnMoKSBpZiB3ZSBqdXN0IGhhcHBlbiB0byBnZXQgMCBhcyB0aGUgY3VycmVudCB0aW1lLgomIzQzOwkgKgomIzQzOwkgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC4KIAkgKi8KLQlpZiAoIXBsdWctJmd0O2N1cl9rdGltZSkgewotCQlwbHVnLSZndDtjdXJfa3RpbWUgPSBrdGltZV9nZXRfbnMoKTsKJiM0MzsJbm93ID0gUkVBRF9PTkNFKHBsdWctJmd0O2N1cl9rdGltZSk7CiYjNDM7CWlmICghbm93KSB7CiYjNDM7CQlub3cgPSBrdGltZV9nZXRfbnMoKTsKJiM0MzsJCVdSSVRFX09OQ0UocGx1Zy0mZ3Q7Y3VyX2t0aW1lLCBub3cpOwomIzQzOwkJLyogRW5zdXJlIFBGX0JMT0NLX1RTIGlzIHNldCBhZnRlciBjdXJfa3RpbWUuICovCiYjNDM7CQliYXJyaWVyKCk7CiAJCWN1cnJlbnQtJmd0O2ZsYWdzIHw9IFBGX0JMT0NLX1RTOwogCX0KLQlyZXR1cm4gcGx1Zy0mZ3Q7Y3VyX2t0aW1lOwomIzQzOwlyZXR1cm4gbm93OwogfQogCiBzdGF0aWMgaW5saW5lIGt0aW1lX3QgYmxrX3RpbWVfZ2V0KHZvaWQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxvY2sgRGV2aWNlIFRpbWUgU3RhbXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGJsb2NrL2Jsay5oYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYGJsa190aW1lX2dldF9uc2AsIGEgZnVuY3Rpb24gcmVsYXRlZCB0byBnZXR0aW5nIHRpbWVzdGFtcHMgZm9yIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggYWRkcyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFyb3VuZCBgcGx1Zy0mZ3Q7Y3VyX2t0aW1lYCBhbmQgdGhyb3dzIGluIGEgYGJhcnJpZXIoKWAgYWZ0ZXIgYGN1cl9rdGltZWAgdG8gbWFrZSBzdXJlIGBQRl9CTE9DS19UU2AgaXMgc2V0ICphZnRlciogdGhlIGBrdGltZWAgdmFsdWUuIFNvdW5kcyBsaWtlIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIG9yIG1heWJlIGEgcHJlZW1wdGlvbiBwcm9ibGVtIHdoZXJlIGBjdXJfa3RpbWVgIGNvdWxkIGdldCBjbG9iYmVyZWQgYW5kIGVuZCB1cCBhcyB6ZXJvLiBJbnRlcmVzdGluZy4uLgoKTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBjb25zaWRlciBmdXp6aW5nIHRoaXMgYmVjYXVzZSBpdCYjMzk7cyBhIGNoYW5nZSB0byBmdW5jdGlvbmFsIGNvZGUuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBwcmV0dHkgdGFyZ2V0ZWQgc3luY2hyb25pemF0aW9uIGZpeC4gTm90IGEgaHVnZSBzdHJ1Y3R1cmFsIGNoYW5nZSwganVzdCBhIHNtYWxsIGJpdCBvZiBwcm90ZWN0aW9uIGFyb3VuZCB0aW1lc3RhbXAgYWNjZXNzLiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIHRoZSBjYWxsaW5nIGNvbnRleHRzIGZvciBgYmxrX3RpbWVfZ2V0X25zYC4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyB1c2VkIHdpbGwgaGVscCBtZSBkZWNpZGUgd2hldGhlciBmdXp6aW5nIG1ha2VzIHNlbnNlIGhlcmUgb3IgaWYgYSBtb3JlIHRhcmdldGVkIGNvZGUgcmV2aWV3IGlzIHRoZSBzbWFydGVyIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa190aW1lX2dldF9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZnEtY2dyb3VwLmM9MTIzPXN0YXRpYyB2b2lkIGJmcWdfc3RhdHNfdXBkYXRlX2dyb3VwX3dhaXRfdGltZShzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTEyOS1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMzA6XHRub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMzEtXHRpZiAobm93IFx1MDAzZSBzdGF0cy1cdTAwM2VzdGFydF9ncm91cF93YWl0X3RpbWUpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jPTEzOD1zdGF0aWMgdm9pZCBiZnFnX3N0YXRzX3NldF9zdGFydF9ncm91cF93YWl0X3RpbWUoc3RydWN0IGJmcV9ncm91cCAqYmZxZyxcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQ2LVx0XHRyZXR1cm47XG5ibG9jay9iZnEtY2dyb3VwLmM6MTQ3Olx0c3RhdHMtXHUwMDNlc3RhcnRfZ3JvdXBfd2FpdF90aW1lID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtY2dyb3VwLmMtMTQ4LVx0YmZxZ19zdGF0c19tYXJrX3dhaXRpbmcoc3RhdHMpO1xuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNTI9c3RhdGljIHZvaWQgYmZxZ19zdGF0c19lbmRfZW1wdHlfdGltZShzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTE1OC1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxNTk6XHRub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xNjAtXHRpZiAobm93IFx1MDAzZSBzdGF0cy1cdTAwM2VzdGFydF9lbXB0eV90aW1lKVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNzE9dm9pZCBiZnFnX3N0YXRzX3NldF9zdGFydF9lbXB0eV90aW1lKHN0cnVjdCBiZnFfZ3JvdXAgKmJmcWcpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTE4NS1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxODY6XHRzdGF0cy1cdTAwM2VzdGFydF9lbXB0eV90aW1lID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtY2dyb3VwLmMtMTg3LVx0YmZxZ19zdGF0c19tYXJrX2VtcHR5KHN0YXRzKTtcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmM9MTkwPXZvaWQgYmZxZ19zdGF0c191cGRhdGVfaWRsZV90aW1lKHN0cnVjdCBiZnFfZ3JvdXAgKmJmcWcpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTE5NC1cdGlmIChiZnFnX3N0YXRzX2lkbGluZyhzdGF0cykpIHtcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxOTU6XHRcdHU2NCBub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xOTYtXG4tLVxuYmxvY2svYmZxLWNncm91cC5jPTIwND12b2lkIGJmcWdfc3RhdHNfc2V0X3N0YXJ0X2lkbGVfdGltZShzdHJ1Y3QgYmZxX2dyb3VwICpiZnFnKVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYy0yMDctXG5ibG9jay9iZnEtY2dyb3VwLmM6MjA4Olx0c3RhdHMtXHUwMDNlc3RhcnRfaWRsZV90aW1lID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtY2dyb3VwLmMtMjA5LVx0YmZxZ19zdGF0c19tYXJrX2lkbGluZyhzdGF0cyk7XG4tLVxuYmxvY2svYmZxLWNncm91cC5jPTI0MT12b2lkIGJmcWdfc3RhdHNfdXBkYXRlX2NvbXBsZXRpb24oc3RydWN0IGJmcV9ncm91cCAqYmZxZywgdTY0IHN0YXJ0X3RpbWVfbnMsXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTI0NC1cdHN0cnVjdCBiZnFnX3N0YXRzICpzdGF0cyA9IFx1MDAyNmJmcWctXHUwMDNlc3RhdHM7XG5ibG9jay9iZnEtY2dyb3VwLmM6MjQ1Olx0dTY0IG5vdyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmZxLWNncm91cC5jLTI0Ni1cbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTk5OD1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJmcV9jaGVja19maWZvKHN0cnVjdCBiZnFfcXVldWUgKmJmcXEsXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy0xMDA5LVxuYmxvY2svYmZxLWlvc2NoZWQuYzoxMDEwOlx0aWYgKHJxID09IGxhc3QgfHwgYmxrX3RpbWVfZ2V0X25zKCkgXHUwMDNjIHJxLVx1MDAzZWZpZm9fdGltZSlcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMTAxMS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz0xODIwPXN0YXRpYyB2b2lkIGJmcV9iZnFxX2hhbmRsZV9pZGxlX2J1c3lfc3dpdGNoKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTE4MzMtXHRcdCAqL1xuYmxvY2svYmZxLWlvc2NoZWQuYzoxODM0Olx0XHRhcnJpdmVkX2luX3RpbWUgPSAgYmxrX3RpbWVfZ2V0X25zKCkgXHUwMDNjPVxuYmxvY2svYmZxLWlvc2NoZWQuYy0xODM1LVx0XHRcdGJmcXEtXHUwMDNldHRpbWUubGFzdF9lbmRfcmVxdWVzdCAmIzQzO1xuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM9MjIwNj1zdGF0aWMgdm9pZCBiZnFfYWRkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjIxMi1cdGJvb2wgaW50ZXJhY3RpdmUgPSBmYWxzZTtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6MjIxMzpcdHU2NCBub3dfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjIxNC1cbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTIyNjYtXHRcdFx0XHRcdCAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMTApKSkge1xuYmxvY2svYmZxLWlvc2NoZWQuYzoyMjY3Olx0XHRcdGJmcWQtXHUwMDNlbGFzdF9lbXB0eV9vY2N1cGllZF9ucyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmZxLWlvc2NoZWQuYy0yMjY4LVx0XHRcdC8qXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz0zNDI5PXN0YXRpYyB2b2lkIGJmcV9yZXNldF9yYXRlX2NvbXB1dGF0aW9uKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTM0MzItXHRpZiAocnEgIT0gTlVMTCkgeyAvKiBuZXcgcnEgZGlzcGF0Y2ggbm93LCByZXNldCBhY2NvcmRpbmdseSAqL1xuYmxvY2svYmZxLWlvc2NoZWQuYzozNDMzOlx0XHRiZnFkLVx1MDAzZWxhc3RfZGlzcGF0Y2ggPSBiZnFkLVx1MDAzZWZpcnN0X2Rpc3BhdGNoID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTM0MzQtXHRcdGJmcWQtXHUwMDNlcGVha19yYXRlX3NhbXBsZXMgPSAxO1xuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM9MzU4OD1zdGF0aWMgdm9pZCBiZnFfdXBkYXRlX3BlYWtfcmF0ZShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIHN0cnVjdCByZXF1ZXN0ICpycSlcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzU4OS17XG5ibG9jay9iZnEtaW9zY2hlZC5jOjM1OTA6XHR1NjQgbm93X25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTM1OTEtXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz01NTg5PXN0YXRpYyB2b2lkIGJmcV9pbml0X2JmcXEoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgYmZxX3F1ZXVlICpiZnFxLFxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNTU5Mi17XG5ibG9jay9iZnEtaW9zY2hlZC5jOjU1OTM6XHR1NjQgbm93X25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTU1OTQtXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz01ODg5PXN0YXRpYyB2b2lkIGJmcV91cGRhdGVfaW9fdGhpbmt0aW1lKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTU5MDEtXHRcdHJldHVybjtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NTkwMjpcdGVsYXBzZWQgPSBibGtfdGltZV9nZXRfbnMoKSAtIGJmcXEtXHUwMDNldHRpbWUubGFzdF9lbmRfcmVxdWVzdDtcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNTkwMy1cdGVsYXBzZWQgPSBtaW5fdCh1NjQsIGVsYXBzZWQsIDJVTEwgKiBiZnFkLVx1MDAzZWJmcV9zbGljZV9pZGxlKTtcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYxNDc9c3RhdGljIGJvb2wgX19iZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTkzLVxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MTk0Olx0cnEtXHUwMDNlZmlmb190aW1lID0gYmxrX3RpbWVfZ2V0X25zKCkgJiM0MzsgYmZxZC1cdTAwM2ViZnFfZmlmb19leHBpcmVbcnFfaXNfc3luYyhycSldO1xuYmxvY2svYmZxLWlvc2NoZWQuYy02MTk1LVx0bGlzdF9hZGRfdGFpbChcdTAwMjZycS1cdTAwM2VxdWV1ZWxpc3QsIFx1MDAyNmJmcXEtXHUwMDNlZmlmbyk7XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02MzQ2PXN0YXRpYyB2b2lkIGJmcV9jb21wbGV0ZWRfcmVxdWVzdChzdHJ1Y3QgYmZxX3F1ZXVlICpiZnFxLCBzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MzY5LVxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MzcwOlx0bm93X25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYzNzEtXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02NTgyPXN0YXRpYyB2b2lkIGJmcV91cGRhdGVfaW5qZWN0X2xpbWl0KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTY1ODQte1xuYmxvY2svYmZxLWlvc2NoZWQuYzo2NTg1Olx0dTY0IHRvdF90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCkgLSBiZnFkLVx1MDAzZWxhc3RfZW1wdHlfb2NjdXBpZWRfbnM7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTY1ODYtXHR1bnNpZ25lZCBpbnQgb2xkX2xpbWl0ID0gYmZxcS1cdTAwM2VpbmplY3RfbGltaXQ7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTE5NDQ9c3RhdGljIHZvaWQgYmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIGJvb2wgdXNlX21lbWRlbGF5KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xOTQ3LVx0Ym9vbCBjbGFtcDtcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxOTQ4Olx0dTY0IG5vdyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmxrLWNncm91cC5jLTE5NDktXHR1NjQgZXhwO1xuLS1cbmJsb2NrL2Jsay1mbHVzaC5jPTEyND1zdGF0aWMgdm9pZCBibGtfYWNjb3VudF9pb19mbHVzaChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmxrLWZsdXNoLmMtMTMwLVx0cGFydF9zdGF0X2FkZChwYXJ0LCBuc2Vjc1tTVEFUX0ZMVVNIXSxcbmJsb2NrL2Jsay1mbHVzaC5jOjEzMTpcdFx0ICAgICAgYmxrX3RpbWVfZ2V0X25zKCkgLSBycS1cdTAwM2VzdGFydF90aW1lX25zKTtcbmJsb2NrL2Jsay1mbHVzaC5jLTEzMi1cdHBhcnRfc3RhdF91bmxvY2soKTtcbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9ODA3PXN0YXRpYyBpbnQgaW9jX2F1dG9wX2lkeChzdHJ1Y3QgaW9jICppb2MsIHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy04MzEtXHR2cmF0ZV9wY3QgPSBkaXY2NF91NjQoaW9jLVx1MDAzZXZ0aW1lX2Jhc2VfcmF0ZSAqIDEwMCwgVlRJTUVfUEVSX1VTRUMpO1xuYmxvY2svYmxrLWlvY29zdC5jOjgzMjpcdG5vd19ucyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmxrLWlvY29zdC5jLTgzMy1cbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9MTA0Mj1zdGF0aWMgdm9pZCBpb2Nfbm93KHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGlvY19ub3cgKm5vdylcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtMTA0Ni1cbmJsb2NrL2Jsay1pb2Nvc3QuYzoxMDQ3Olx0bm93LVx1MDAzZW5vd19ucyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmxrLWlvY29zdC5jLTEwNDgtXHRub3ctXHUwMDNlbm93ID0ga3RpbWVfdG9fdXMobm93LVx1MDAzZW5vd19ucyk7XG4tLVxuYmxvY2svYmxrLWlvY29zdC5jPTI4MTg9c3RhdGljIHZvaWQgaW9jX3Jxb3NfZG9uZShzdHJ1Y3QgcnFfcW9zICpycW9zLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTI4NDAtXG5ibG9jay9ibGstaW9jb3N0LmM6Mjg0MTpcdG9uX3FfbnMgPSBibGtfdGltZV9nZXRfbnMoKSAtIHJxLVx1MDAzZWFsbG9jX3RpbWVfbnM7XG5ibG9jay9ibGstaW9jb3N0LmMtMjg0Mi1cdHJxX3dhaXRfbnMgPSBycS1cdTAwM2VzdGFydF90aW1lX25zIC0gcnEtXHUwMDNlYWxsb2NfdGltZV9ucztcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9NTgzPXN0YXRpYyB2b2lkIGJsa2NnX2lvbGF0ZW5jeV9kb25lX2JpbyhzdHJ1Y3QgcnFfcW9zICpycW9zLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTYwMy1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo2MDQ6XHRub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02MDUtXHR3aGlsZSAoYmxrZyBcdTAwMjZcdTAwMjYgYmxrZy1cdTAwM2VwYXJlbnQpIHtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9NjUxPXN0YXRpYyB2b2lkIGJsa2lvbGF0ZW5jeV90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjU2LVx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBvc19jc3M7XG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NjU3Olx0dTY0IG5vdyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY1OC1cbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9OTgyPXN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9pbml0KHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTg3LVx0c3RydWN0IGJsa19pb2xhdGVuY3kgKmJsa2lvbGF0ID0gQkxLSU9MQVRFTkNZKHJxb3MpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjk4ODpcdHU2NCBub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05ODktXHRpbnQgY3B1O1xuLS1cbmJsb2NrL2Jsay1tcS5jPTM3Mz12b2lkIGJsa19ycV9pbml0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmxrLW1xLmMtMzg0LVx0cnEtXHUwMDNlaW50ZXJuYWxfdGFnID0gQkxLX01RX05PX1RBRztcbmJsb2NrL2Jsay1tcS5jOjM4NTpcdHJxLVx1MDAzZXN0YXJ0X3RpbWVfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2Jsay1tcS5jLTM4Ni1cdGJsa19jcnlwdG9fcnFfc2V0X2RlZmF1bHRzKHJxKTtcbi0tXG5ibG9jay9ibGstbXEuYz00MDE9c3RhdGljIGlubGluZSB2b2lkIGJsa19tcV9iaW9faXNzdWVfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5ibG9jay9ibGstbXEuYy00MDUtXHRpZiAodGVzdF9iaXQoUVVFVUVfRkxBR19CSU9fSVNTVUVfVElNRSwgXHUwMDI2cS1cdTAwM2VxdWV1ZV9mbGFncykpXG5ibG9jay9ibGstbXEuYzo0MDY6XHRcdGJpby1cdTAwM2Vpc3N1ZV90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9ibGstbXEuYy00MDctI2VuZGlmXG4tLVxuYmxvY2svYmxrLW1xLmM9NTM3PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqX19ibGtfbXFfYWxsb2NfcmVxdWVzdHMoc3RydWN0IGJsa19tcV9hbGxvY19kYXRhICpkYXRhKVxuLS1cbmJsb2NrL2Jsay1tcS5jLTU0NS1cdGlmIChibGtfcXVldWVfcnFfYWxsb2NfdGltZShxKSlcbmJsb2NrL2Jsay1tcS5jOjU0NjpcdFx0YWxsb2NfdGltZV9ucyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmxrLW1xLmMtNTQ3LVxuLS1cbmJsb2NrL2Jsay1tcS5jPTYyNj1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5ibG9jay9ibGstbXEuYy02NTItXHRcdHJxX2xpc3RfcG9wKFx1MDAyNnBsdWctXHUwMDNlY2FjaGVkX3Jxcyk7XG5ibG9jay9ibGstbXEuYzo2NTM6XHRcdGJsa19tcV9ycV90aW1lX2luaXQocnEsIGJsa190aW1lX2dldF9ucygpKTtcbmJsb2NrL2Jsay1tcS5jLTY1NC1cdH1cbi0tXG5ibG9jay9ibGstbXEuYz03MDA9c3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4tLVxuYmxvY2svYmxrLW1xLmMtNzIxLVx0aWYgKGJsa19xdWV1ZV9ycV9hbGxvY190aW1lKHEpKVxuYmxvY2svYmxrLW1xLmM6NzIyOlx0XHRhbGxvY190aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9ibGstbXEuYy03MjMtXG4tLVxuYmxvY2svYmxrLW1xLmM9MTEyMT1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX2FjY291bnRfaW9fc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5ibG9jay9ibGstbXEuYy0xMTMwLVx0cmVxLVx1MDAzZXJxX2ZsYWdzIHw9IFJRRl9JT19TVEFUO1xuYmxvY2svYmxrLW1xLmM6MTEzMTpcdHJlcS1cdTAwM2VzdGFydF90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9ibGstbXEuYy0xMTMyLVxuLS1cbmJsb2NrL2Jsay1tcS5jPTExNTk9aW5saW5lIHZvaWQgX19ibGtfbXFfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCBibGtfc3RhdHVzX3QgZXJyb3IpXG4tLVxuYmxvY2svYmxrLW1xLmMtMTE2MS1cdGlmIChibGtfbXFfbmVlZF90aW1lX3N0YW1wKHJxKSlcbmJsb2NrL2Jsay1tcS5jOjExNjI6XHRcdF9fYmxrX21xX2VuZF9yZXF1ZXN0X2FjY3QocnEsIGJsa190aW1lX2dldF9ucygpKTtcbmJsb2NrL2Jsay1tcS5jLTExNjMtXG4tLVxuYmxvY2svYmxrLW1xLmM9MTE5Nz12b2lkIGJsa19tcV9lbmRfcmVxdWVzdF9iYXRjaChzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqaW9iKVxuLS1cbmJsb2NrL2Jsay1tcS5jLTEyMDQtXHRpZiAoaW9iLVx1MDAzZW5lZWRfdHMpXG5ibG9jay9ibGstbXEuYzoxMjA1Olx0XHRub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2Jsay1tcS5jLTEyMDYtXG4tLVxuYmxvY2svYmxrLW1xLmM9MTM2OD12b2lkIGJsa19tcV9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5ibG9jay9ibGstbXEuYy0xMzc1LVx0ICAgICFibGtfcnFfaXNfcGFzc3Rocm91Z2gocnEpKSB7XG5ibG9jay9ibGstbXEuYzoxMzc2Olx0XHRycS1cdTAwM2Vpb19zdGFydF90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9ibGstbXEuYy0xMzc3LVx0XHRycS1cdTAwM2VzdGF0c19zZWN0b3JzID0gYmxrX3JxX3NlY3RvcnMocnEpO1xuLS1cbmJsb2NrL2Jsay1tcS5jPTMxMjQ9dm9pZCBibGtfbXFfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLW1xLmMtMzE5Ny1cdFx0cnFfcW9zX3Rocm90dGxlKHJxLVx1MDAzZXEsIGJpbyk7XG5ibG9jay9ibGstbXEuYzozMTk4Olx0XHRibGtfbXFfcnFfdGltZV9pbml0KHJxLCBibGtfdGltZV9nZXRfbnMoKSk7XG5ibG9jay9ibGstbXEuYy0zMTk5LVx0XHRycS1cdTAwM2VjbWRfZmxhZ3MgPSBiaW8tXHUwMDNlYmlfb3BmO1xuLS1cbmJsb2NrL2Jsay1tcS5jPTMyNTc9YmxrX3N0YXR1c190IGJsa19pbnNlcnRfY2xvbmVkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmJsb2NrL2Jsay1tcS5jLTMzMjktXHRpZiAocmV0KVxuYmxvY2svYmxrLW1xLmM6MzMzMDpcdFx0YmxrX2FjY291bnRfaW9fZG9uZShycSwgYmxrX3RpbWVfZ2V0X25zKCkpO1xuYmxvY2svYmxrLW1xLmMtMzMzMS1cdHJldHVybiByZXQ7XG4tLVxuYmxvY2svYmxrLXdidC5jPTI4MD1zdGF0aWMgdTY0IHJ3Yl9zeW5jX2lzc3VlX2xhdChzdHJ1Y3QgcnFfd2IgKnJ3Yilcbi0tXG5ibG9jay9ibGstd2J0LmMtMjg2LVxuYmxvY2svYmxrLXdidC5jOjI4NzpcdHJldHVybiBibGtfdGltZV9nZXRfbnMoKSAtIGlzc3VlO1xuYmxvY2svYmxrLXdidC5jLTI4OC19XG4tLVxuYmxvY2svYmxrLmg9Njg0PXN0YXRpYyBpbmxpbmUgaW50IHJlcV9yZWZfcmVhZChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmJsb2NrL2Jsay5oLTY4OC1cbmJsb2NrL2Jsay5oOjY4OTpzdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZClcbmJsb2NrL2Jsay5oLTY5MC17XG4tLVxuYmxvY2svYmxrLmg9NzE1PXN0YXRpYyBpbmxpbmUga3RpbWVfdCBibGtfdGltZV9nZXQodm9pZClcbmJsb2NrL2Jsay5oLTcxNi17XG5ibG9jay9ibGsuaDo3MTc6XHRyZXR1cm4gbnNfdG9fa3RpbWUoYmxrX3RpbWVfZ2V0X25zKCkpO1xuYmxvY2svYmxrLmgtNzE4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXMgb2YgYmxrX3RpbWVfZ2V0X25zIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGJsa190aW1lX2dldF9uc2AsIHdoaWNoLCBhcyBJIGtub3csIGlzIGEgcHJldHR5IGhlYXZpbHkgdXNlZCBmdW5jdGlvbiBpbiB0aGUgYmxvY2sgbGF5ZXIuIEl0JiMzOTtzIGFsbCBvdmVyIHRoZSBwbGFjZSwgZXNwZWNpYWxseSBpbiBzdHVmZiBsaWtlIEJGUSwgYmxrLW1xLCBhbmQgdGhvc2Ugb3RoZXIga2V5IGNvbXBvbmVudHMuIFRoZSBjaGFuZ2UgaXMgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYGN1cl9rdGltZWAgY291bGQgZ2V0IHplcm9lZCBvdXQgZHVlIHRvIHByZWVtcHRpb24gcmlnaHQgYWZ0ZXIgYFBGX0JMT0NLX1RTYCBnZXRzIHNldC4gSXQgc291bmRzIGZ1bmN0aW9uYWwsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCAmIzM0O1dvcnRoIGZ1enppbmc/JiMzNDsgQWJzb2x1dGVseS4KClRoZSBvcmlnaW5hbCBwbGFuIHdhcyB0byBmb2N1cyBvbiBgYmxrX3RpbWVfZ2V0X25zYCBkaXJlY3RseSwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIGl0JiMzOTtzIGlubGluZS4gQ3JhcCEgVGhhdCBtZWFucyBpdCB3b24mIzM5O3Qgc2hvdyB1cCBhcyBhIHN5bWJvbCBieSBpdHNlbGYuIFNvLCBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMgdG8gdGhlIGZ1bmN0aW9ucyAqdXNpbmcqIGl0LCBvciBJIGNvdWxkIGp1c3QgcmV0dXJuIHRoYXQgdGhlIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcgYW5kIGZvY3VzIG9uIGJsb2NrIGxheWVyIGZ1bmN0aW9ucyBpbiBnZW5lcmFsLgoKTGV0JiMzOTtzIHNlZeKApiBJIGtub3cgYGJsa19tcV9zdWJtaXRfYmlvYCwgYGJsa19tcV9zdGFydF9yZXF1ZXN0YCwgYF9fYmxrX21xX2VuZF9yZXF1ZXN0YCwgYW5kIGBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4YCBhcmUgYWxsIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuIEFoLCB3YWl0LCBgYmxrX3RpbWVfZ2V0X25zYCAqaXMqIHVzZWQgYnkgYGJsa19tcV9zdWJtaXRfYmlvYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBkaWcgaW50byBgYmxrX21xX3N1Ym1pdF9iaW9gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9zdWJtaXRfYmlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdD0xOTk0PWhpc3RvZ3JhbTo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTIwMjAtICAgICAgICAgX19ycV9xb3NfdGhyb3R0bGUmIzQzOzB4MjUvMHg0MFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjIwMjE6ICAgICAgICAgYmxrX21xX3N1Ym1pdF9iaW8mIzQzOzB4MmMzLzB4NWIwXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMjAyMi0gICAgICAgICBfX3N1Ym1pdF9iaW8mIzQzOzB4ZmYvMHgxOTBcbi0tXG5ibG9jay9ibGstY29yZS5jPTYyNz1zdGF0aWMgdm9pZCBfX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1jb3JlLmMtNjM0LVx0aWYgKCFiZGV2X3Rlc3RfZmxhZyhiaW8tXHUwMDNlYmlfYmRldiwgQkRfSEFTX1NVQk1JVF9CSU8pKSB7XG5ibG9jay9ibGstY29yZS5jOjYzNTpcdFx0YmxrX21xX3N1Ym1pdF9iaW8oYmlvKTtcbmJsb2NrL2Jsay1jb3JlLmMtNjM2LVx0fSBlbHNlIGlmIChsaWtlbHkoYmlvX3F1ZXVlX2VudGVyKGJpbykgPT0gMCkpIHtcbi0tXG5ibG9jay9ibGstbXEuYz0zMTAwPXN0YXRpYyBib29sIGJpb191bmFsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbi0tXG5ibG9jay9ibGstbXEuYy0zMTExLS8qKlxuYmxvY2svYmxrLW1xLmM6MzExMjogKiBibGtfbXFfc3VibWl0X2JpbyAtIENyZWF0ZSBhbmQgc2VuZCBhIHJlcXVlc3QgdG8gYmxvY2sgZGV2aWNlLlxuYmxvY2svYmxrLW1xLmMtMzExMy0gKiBAYmlvOiBCaW8gcG9pbnRlci5cbi0tXG5ibG9jay9ibGstbXEuYy0zMTIzLSAqL1xuYmxvY2svYmxrLW1xLmM6MzEyNDp2b2lkIGJsa19tcV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbmJsb2NrL2Jsay1tcS5jLTMxMjUte1xuLS1cbmJsb2NrL2Jsay1tcS5oPTQyPXR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBibGtfaW5zZXJ0X3Q7XG4tLVxuYmxvY2svYmxrLW1xLmgtNDQtXG5ibG9jay9ibGstbXEuaDo0NTp2b2lkIGJsa19tcV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7XG5ibG9jay9ibGstbXEuaC00Ni1pbnQgYmxrX21xX3BvbGwoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19xY190IGNvb2tpZSwgc3RydWN0IGlvX2NvbXBfYmF0Y2ggKmlvYixcbi0tXG5ibG9jay9ibGstem9uZWQuYz0xNzcxPXN0YXRpYyBib29sIGRpc2tfem9uZV93cGx1Z19zdWJtaXRfYmlvKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTE4MTUtXHR9IGVsc2Uge1xuYmxvY2svYmxrLXpvbmVkLmM6MTgxNjpcdFx0YmxrX21xX3N1Ym1pdF9iaW8oYmlvKTtcbmJsb2NrL2Jsay16b25lZC5jLTE4MTctXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQyMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIEJsb2NrIExheWVyIFBlcmZvcm1hbmNlKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgYmxrX21xX3N1Ym1pdF9iaW9gLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYmxvY2sgSS9PIHN1Ym1pc3Npb24gcGF0aHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdGltaW5nIGRldGFpbHMgdG8gcHJvdmlkZSBtb3JlIGNvbXByZWhlbnNpdmUgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgYmxvY2sgSS9PIHRpbWUgaXMgc3BlbnQuIEkmIzM5O20gd29uZGVyaW5nLCBob3cgaXMgYGJsa190aW1lX2dldF9uc2AgdXNlZD8gSG1tLCBpdCYjMzk7cyBpbmxpbmUsIHNvIGl0JiMzOTtzIG5vdCBhIHJlYWRpbHkgYXZhaWxhYmxlIHN5bWJvbCB0byB0cmFjZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyLgoKTGV0JiMzOTtzIGZpbmQgdGhlIHBsYWNlcyBgYmxrX3RpbWVfZ2V0X25zYCBpcyB1c2VkLiBTY2FubmluZy4uLiBBaGEhIGBiZnFfYWRkX3JlcXVlc3RgLCBgYmZxX3VwZGF0ZV9pb190aGlua3RpbWVgLCBhbmQgYGJmcV9jb21wbGV0ZWRfcmVxdWVzdGAgaW4gdGhlIEJGUSBzY2hlZHVsZXIgYXJlIHVzaW5nIGl0LiBJbnRlcmVzdGluZy4gQW5kIGFsc28gYGJsa19hY2NvdW50X2lvX3N0YXJ0YCBhbmQgYGJsa19hY2NvdW50X2lvX2RvbmVgLiBUaG9zZSBhcmUga2V5IGZvciBhY2NvdW50aW5nLiBJIGFsc28gc2VlIGl0IGluIGBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3RgLCBhbmQgYGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhgLiBUaGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdGAgaXMgZG9pbmcuIEkgc2hvdWxkIHN0YXJ0IHRoZXJlLCBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIHRpbWUgYWNjb3VudGluZyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX21xX2FsbG9jX2NhY2hlZF9yZXF1ZXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jPTU5Nz1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJsa19tcV9ycV9jYWNoZV9maWxsKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmJsb2NrL2Jsay1tcS5jLTYyNS1cbmJsb2NrL2Jsay1tcS5jOjYyNjpzdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbmJsb2NrL2Jsay1tcS5jLTYyNy1cdFx0XHRcdFx0XHQgICBibGtfb3BmX3Qgb3BmLFxuLS1cbmJsb2NrL2Jsay1tcS5jPTY2MT1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX2FsbG9jX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19vcGZfdCBvcGYsXG4tLVxuYmxvY2svYmxrLW1xLmMtNjY1LVxuYmxvY2svYmxrLW1xLmM6NjY2Olx0cnEgPSBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3QocSwgb3BmLCBmbGFncyk7XG5ibG9jay9ibGstbXEuYy02NjctXHRpZiAoIXJxKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA5NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgQmxvY2sgTGF5ZXIqKgoKQWxyaWdodCwgYGJsa19tcV9hbGxvY19yZXF1ZXN0YCAtIHRoYXQmIzM5O3MgYSBzb2xpZCBmdW5jdGlvbiB0byBzdGFydCB3aXRoLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYSBncmFzcCBvZiB3aGF0IHRoYXQmIzM5O3MgZG9pbmcgYmVmb3JlIHdlIHN0YXJ0LiBOb3csIGZyb20gd2hhdCBJIHJlbWVtYmVyIHRoaXMgaXMgdGhlIHBsYWNlIHJlcXVlc3RzIGFyZSBjcmVhdGVkLCBxdWV1ZWQsIGFuZCBhbGxvY2F0ZWQgdG8gdGhlIGRyaXZlci4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBob3cgd2Uga2ljayB0aG9zZSByZXF1ZXN0cyBvZmYuIFNvLCB3aGF0JiMzOTtzIG5leHQ/IEFoIHllcywgYGJsa19tcV9zdGFydF9yZXF1ZXN0YC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgdXAgdG8uIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBmb2N1cyBvbiBob3cgdGhpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIGdldHMgaW5pdGlhbGl6ZWQsIGFuZCBob3cgd2Ugc3RhcnQgYWN0dWFsbHkgbW92aW5nIHRoZSBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfbXFfc3RhcnRfcmVxdWVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz0xMjg3PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJkX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEyOTMtXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYzoxMjk0Olx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEyOTUtXG4tLVxuYmxvY2svYmxrLW1xLmM9MTM1OD1FWFBPUlRfU1lNQk9MKGJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KTtcbi0tXG5ibG9jay9ibGstbXEuYy0xMzYwLS8qKlxuYmxvY2svYmxrLW1xLmM6MTM2MTogKiBibGtfbXFfc3RhcnRfcmVxdWVzdCAtIFN0YXJ0IHByb2Nlc3NpbmcgYSByZXF1ZXN0XG5ibG9jay9ibGstbXEuYy0xMzYyLSAqIEBycTogUG9pbnRlciB0byByZXF1ZXN0IHRvIGJlIHN0YXJ0ZWRcbi0tXG5ibG9jay9ibGstbXEuYy0xMzY3LSAqL1xuYmxvY2svYmxrLW1xLmM6MTM2ODp2b2lkIGJsa19tcV9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbmJsb2NrL2Jsay1tcS5jLTEzNjkte1xuLS1cbmJsb2NrL2Jsay1tcS5jLTEzOTMtfVxuYmxvY2svYmxrLW1xLmM6MTM5NDpFWFBPUlRfU1lNQk9MKGJsa19tcV9zdGFydF9yZXF1ZXN0KTtcbmJsb2NrL2Jsay1tcS5jLTEzOTUtXG4tLVxuYmxvY2svYnNnLWxpYi5jPTI3Mj1zdGF0aWMgYmxrX3N0YXR1c190IGJzZ19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5ibG9jay9ic2ctbGliLmMtMjgyLVxuYmxvY2svYnNnLWxpYi5jOjI4MzpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XG5ibG9jay9ic2ctbGliLmMtMjg0LVxuLS1cbmJsb2NrL2dlbmhkLmM9MTA2Mj1zc2l6ZV90IHBhcnRfc3RhdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5ibG9jay9nZW5oZC5jLTExMDgtICogRm9yIGJpby1iYXNlZCBkZXZpY2UsIHN0YXJ0ZWQgZnJvbSBiZGV2X3N0YXJ0X2lvX2FjY3QoKTtcbmJsb2NrL2dlbmhkLmM6MTEwOTogKiBGb3IgcnEtYmFzZWQgZGV2aWNlLCBzdGFydGVkIGZyb20gYmxrX21xX3N0YXJ0X3JlcXVlc3QoKTtcbmJsb2NrL2dlbmhkLmMtMTExMC0gKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYz0xNTA1PXN0YXRpYyBibGtfc3RhdHVzX3QgYW1pZmxvcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYy0xNTE0LVxuZHJpdmVycy9ibG9jay9hbWlmbG9wLmM6MTUxNTpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svYW1pZmxvcC5jLTE1MTYtXG4tLVxuZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmM9MjUwPXN0YXRpYyBibGtfc3RhdHVzX3QgYW9lYmxrX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jLTI2MC1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmQtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYzoyNjE6XHRcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVx1MDAzZXJxKTtcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jLTI2Mi1cdFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XG4tLVxuZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmM9ODQzPW5leHRidWYoc3RydWN0IGFvZWRldiAqZClcbi0tXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYy04NjItXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnEtXHUwMDNlcXVldWVsaXN0KTtcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jOjg2MzpcdFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xuZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMtODY0LVx0XHRkLVx1MDAzZWlwLnJxID0gcnE7XG4tLVxuZHJpdmVycy9ibG9jay9hb2UvYW9lZGV2LmM9MTk3PWFvZWRldl9kb3duZGV2KHN0cnVjdCBhb2VkZXYgKmQpXG4tLVxuZHJpdmVycy9ibG9jay9hb2UvYW9lZGV2LmMtMjMyLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJxLVx1MDAzZXF1ZXVlbGlzdCk7XG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VkZXYuYzoyMzM6XHRcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWRldi5jLTIzNC1cdFx0YmxrX21xX2VuZF9yZXF1ZXN0KHJxLCBCTEtfU1RTX0lPRVJSKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYz0xNTA0PXN0YXRpYyBibGtfc3RhdHVzX3QgYXRhZmxvcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYy0xNTI1LVx0dW5pdFtkcml2ZV0uZXJyb3JfY291bnQgPSAwO1xuZHJpdmVycy9ibG9jay9hdGFmbG9wLmM6MTUyNjpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGZkX3JlcXVlc3QpO1xuZHJpdmVycy9ibG9jay9hdGFmbG9wLmMtMTUyNy1cbi0tXG5kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jPTI4NDg9c3RhdGljIGJsa19zdGF0dXNfdCBmbG9wcHlfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay9mbG9wcHkuYy0yODUwLXtcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM6Mjg1MTpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVx1MDAzZXJxKTtcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmMtMjg1Mi1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODUxPXN0YXRpYyBibGtfc3RhdHVzX3QgbG9vcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODU3LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1ODpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTktXG4tLVxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jPTMyNjg9c3RhdGljIGJsa19zdGF0dXNfdCBtdGlwX2lzc3VlX3Jlc2VydmVkX2NtZChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzI5OS1cbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYzozMzAwOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jLTMzMDEtXHRtdGlwX2lzc3VlX25vbl9uY3FfY29tbWFuZChkZC1cdTAwM2Vwb3J0LCBycS1cdTAwM2V0YWcpO1xuLS1cbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYz0zMzA1PXN0YXRpYyBibGtfc3RhdHVzX3QgbXRpcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzMyMC1cbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYzozMzIxOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jLTMzMjItXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xMTE3PXN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX2hhbmRsZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZCwgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE3MC1cdCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxMTcxOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE3Mi1cdGlmICh1bmxpa2VseShuc29jay1cdTAwM2VwZW5kaW5nIFx1MDAyNlx1MDAyNiBuc29jay1cdTAwM2VwZW5kaW5nICE9IHJlcSkpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNjUyPXN0YXRpYyBibGtfc3RhdHVzX3QgbnVsbF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNjkxLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTY5MjpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE2OTMtXG4tLVxuZHJpdmVycy9ibG9jay9wczNkaXNrLmM9MTg0PXN0YXRpYyBibGtfc3RhdHVzX3QgcHMzZGlza19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYy0xOTEtXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYzoxOTI6XHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cdTAwM2VycSk7XG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYy0xOTMtXG4tLVxuZHJpdmVycy9ibG9jay9yYmQuYz00NzI1PXN0YXRpYyB2b2lkIHJiZF9xdWV1ZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYmxvY2svcmJkLmMtNDc0Mi1cbmRyaXZlcnMvYmxvY2svcmJkLmM6NDc0MzpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svcmJkLmMtNDc0NC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1jbHQuYz0xMTEzPXN0YXRpYyBibGtfc3RhdHVzX3Qgcm5iZF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1jbHQuYy0xMTQ2LVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtY2x0LmM6MTE0NzpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLWNsdC5jLTExNDgtXHRlcnIgPSBybmJkX2NsaWVudF94ZmVyX3JlcXVlc3QoZGV2LCBycSwgaXUpO1xuLS1cbmRyaXZlcnMvYmxvY2svc3VudmRjLmM9NTM2PXN0YXRpYyBibGtfc3RhdHVzX3QgdmRjX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svc3VudmRjLmMtNTQ0LVxuZHJpdmVycy9ibG9jay9zdW52ZGMuYzo1NDU6XHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cdTAwM2VycSk7XG5kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jLTU0Ni1cbi0tXG5kcml2ZXJzL2Jsb2NrL3N3aW0uYz01MjY9c3RhdGljIGJsa19zdGF0dXNfdCBzd2ltX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svc3dpbS5jLTUzNi1cbmRyaXZlcnMvYmxvY2svc3dpbS5jOjUzNzpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XG5kcml2ZXJzL2Jsb2NrL3N3aW0uYy01MzgtXG4tLVxuZHJpdmVycy9ibG9jay9zd2ltMy5jPTMwNz1zdGF0aWMgYmxrX3N0YXR1c190IHN3aW0zX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svc3dpbTMuYy0zMTgtXHR9XG5kcml2ZXJzL2Jsb2NrL3N3aW0zLmM6MzE5Olx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvYmxvY2svc3dpbTMuYy0zMjAtXHRmcy1cdTAwM2VjdXJfcmVxID0gcmVxO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMTQ2PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19wcmVwX3JlcShzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNzQtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjE3NTpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTc2LVx0cmV0dXJuIEJMS19TVFNfT0s7XG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9NDA0PXN0YXRpYyBibGtfc3RhdHVzX3QgdmlydGJsa19wcmVwX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTQyMC1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjQyMTpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy00MjItXG4tLVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYz04OTM9c3RhdGljIGJsa19zdGF0dXNfdCBibGtpZl9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTkwMS1cdHJpbmZvID0gZ2V0X3JpbmZvKGluZm8sIHFpZCk7XG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jOjkwMjpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHFkLVx1MDAzZXJxKTtcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMtOTAzLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmluZm8tXHUwMDNlcmluZ19sb2NrLCBmbGFncyk7XG4tLVxuZHJpdmVycy9ibG9jay96MnJhbS5jPTY4PXN0YXRpYyBibGtfc3RhdHVzX3QgejJfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay96MnJhbS5jLTc0LVxuZHJpdmVycy9ibG9jay96MnJhbS5jOjc1Olx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvYmxvY2svejJyYW0uYy03Ni1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9ODg1PXN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwNi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MDc6XHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTA4LVxuLS1cbmRyaXZlcnMvY2Ryb20vZ2Ryb20uYz02MzQ9c3RhdGljIGJsa19zdGF0dXNfdCBnZHJvbV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Nkcm9tL2dkcm9tLmMtNjM2LXtcbmRyaXZlcnMvY2Ryb20vZ2Ryb20uYzo2Mzc6XHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cdTAwM2VycSk7XG5kcml2ZXJzL2Nkcm9tL2dkcm9tLmMtNjM4LVxuLS1cbmRyaXZlcnMvbWQvZG0tcnEuYz00NDA9c3RhdGljIHZvaWQgZG1fc3RhcnRfcmVxdWVzdChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCByZXF1ZXN0ICpvcmlnKVxuZHJpdmVycy9tZC9kbS1ycS5jLTQ0MS17XG5kcml2ZXJzL21kL2RtLXJxLmM6NDQyOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3Qob3JpZyk7XG5kcml2ZXJzL21kL2RtLXJxLmMtNDQzLVxuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jPTE5NzQ9c3RhdGljIGJsa19zdGF0dXNfdCBtc2JfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zX2Jsb2NrLmMtMTk5MC1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1zYi1cdTAwM2VxX2xvY2spO1xuZHJpdmVycy9tZW1zdGljay9jb3JlL21zX2Jsb2NrLmM6MTk5MTpcdFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTE5OTItXHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTE5OTktXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYzoyMDAwOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTIwMDEtXHRtc2ItXHUwMDNlcmVxID0gcmVxO1xuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jPTc1MD1zdGF0aWMgYmxrX3N0YXR1c190IG1zcHJvX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTc2NC1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1zYi1cdTAwM2VxX2xvY2spO1xuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmM6NzY1Olx0XHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cdTAwM2VycSk7XG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYy03NjYtXHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTc2OS1cdG1zYi1cdTAwM2VibG9ja19yZXEgPSBiZC1cdTAwM2VycTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jOjc3MDpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVx1MDAzZXJxKTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTc3MS1cbi0tXG5kcml2ZXJzL21tYy9jb3JlL3F1ZXVlLmM9MjM0PXN0YXRpYyBibGtfc3RhdHVzX3QgbW1jX21xX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvbW1jL2NvcmUvcXVldWUuYy0zMDgtXG5kcml2ZXJzL21tYy9jb3JlL3F1ZXVlLmM6MzA5Olx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvbW1jL2NvcmUvcXVldWUuYy0zMTAtXG4tLVxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYz0xMDY9c3RhdGljIHN0cnVjdCByZXF1ZXN0ICptdGRfbmV4dF9yZXF1ZXN0KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYy0xMTItXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnEtXHUwMDNlcXVldWVsaXN0KTtcbmRyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmM6MTEzOlx0XHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTExNC1cdFx0cmV0dXJuIHJxO1xuLS1cbmRyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmM9MTY2PXN0YXRpYyBibGtfc3RhdHVzX3QgbXRkX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMtMTcyLVx0aWYgKCFkZXYpIHtcbmRyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmM6MTczOlx0XHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cdTAwM2VycSk7XG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTE3NC1cdFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XG4tLVxuZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmM9MTgwPXN0YXRpYyBibGtfc3RhdHVzX3QgdWJpYmxvY2tfcmVhZChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvbXRkL3ViaS9ibG9jay5jLTE5My1cbmRyaXZlcnMvbXRkL3ViaS9ibG9jay5jOjE5NDpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XG5kcml2ZXJzL210ZC91YmkvYmxvY2suYy0xOTUtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEyMTk9c3RhdGljIGlubGluZSB2b2lkIG52bWVfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTEyMjItXHRcdG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChycSk7XG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTIyMzpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMjI0LX1cbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jPTMwMTg9c3RhdGljIGJsa19zdGF0dXNfdCBkb19kYXNkX3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMDkwLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMDkxOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzA5Mi1cdHNwaW5fbG9jayhcdTAwMjZibG9jay1cdTAwM2VxdWV1ZV9sb2NrKTtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jPTI4MT1zdGF0aWMgYmxrX3N0YXR1c190IHNjbV9ibGtfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTMxOS1cdH1cbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmM6MzIwOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmMtMzIxLVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE4NTM9c3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5MTgtXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxOTE5Olx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5MjAtXHRpZiAoYmxrX21xX2lzX3Jlc2VydmVkX3JxKHJlcSkpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oPTg1Nz1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX21xX2NvbXBsZXRlX3JlcXVlc3RfZGlyZWN0KHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTg2My1cbmluY2x1ZGUvbGludXgvYmxrLW1xLmg6ODY0OnZvaWQgYmxrX21xX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTtcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtODY1LXZvaWQgYmxrX21xX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgYmxrX3N0YXR1c190IGVycm9yKTtcbi0tXG5ydXN0L2tlcm5lbC9ibG9jay9tcS5ycy0yNi0vLyEgYFJlcXVlc3Q6OmVuZGAsIG1ldGhvZHMuIEZhaWx1cmUgdG8gZG8gc28gY2FuIGxlYWQgdG8gZGVhZGxvY2sgb3IgdGltZW91dFxucnVzdC9rZXJuZWwvYmxvY2svbXEucnM6Mjc6Ly8hIGVycm9ycy4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgQyBmdW5jdGlvbiBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGlzIGltcGxpY2l0bHlcbnJ1c3Qva2VybmVsL2Jsb2NrL21xLnJzLTI4LS8vISBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBxdWV1ZWQgd2l0aCB0aGUgZHJpdmVyLlxuLS1cbnJ1c3Qva2VybmVsL2Jsb2NrL21xL3JlcXVlc3QucnM9ODk9ICAgIHB1YihjcmF0ZSkgdW5zYWZlIGZuIHN0YXJ0X3VuY2hlY2tlZCh0aGlzOiBcdTAwMjZBUmVmXHUwMDNjU2VsZlx1MDAzZSkge1xuLS1cbnJ1c3Qva2VybmVsL2Jsb2NrL21xL3JlcXVlc3QucnMtOTEtICAgICAgICAvLyB3ZSBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MuXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9yZXF1ZXN0LnJzOjkyOiAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6OmJsa19tcV9zdGFydF9yZXF1ZXN0KHRoaXMuMC5nZXQoKSkgfTtcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL3JlcXVlc3QucnMtOTMtICAgIH1cbi0tXG5zYW1wbGVzL2JwZi90YXNrX2ZkX3F1ZXJ5X2tlcm4uYy02LVxuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV9rZXJuLmM6NzpTRUMoXCYjMzQ7a3Byb2JlL2Jsa19tcV9zdGFydF9yZXF1ZXN0XCYjMzQ7KVxuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV9rZXJuLmMtOC1pbnQgYnBmX3Byb2cxKHN0cnVjdCBwdF9yZWdzICpjdHgpXG4tLVxuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV91c2VyLmM9MzEwPWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbi0tXG5zYW1wbGVzL2JwZi90YXNrX2ZkX3F1ZXJ5X3VzZXIuYy0zNDgtXHQvKiB0ZXN0IHR3byBmdW5jdGlvbnMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgKl9rZXJuLmMgZmlsZSAqL1xuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV91c2VyLmM6MzQ5Olx0Q0hFQ0tfQU5EX1JFVCh0ZXN0X2RlYnVnX2ZzX2twcm9iZSgwLCBcJiMzNDtibGtfbXFfc3RhcnRfcmVxdWVzdFwmIzM0OyxcbnNhbXBsZXMvYnBmL3Rhc2tfZmRfcXVlcnlfdXNlci5jLTM1MC1cdFx0XHRcdFx0ICAgQlBGX0ZEX1RZUEVfS1BST0JFKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTg2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsb2NrIExheWVyIFRpbWVzdGFtcGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlIHRvIGFkZCBzb21lIGluc3RydW1lbnRhdGlvbiBhcm91bmQgYmxvY2sgcmVxdWVzdCB0aW1lc3RhbXBzLiBJIHRoaW5rIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAgYW5kIGBibGtfbXFfc3VibWl0X2Jpb2AgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBpbnZlc3RpZ2F0aW9uLiBUaGV5IHNlZW0gbGlrZSBrZXkgZW50cnkgcG9pbnRzLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIG9yIGVuYWJsZSB0byB1c2UgdGhlIHRpbWVzdGFtcHMgdGhhdCBJIHdhbnQ/IExldCBtZSBjaGVjayB0aGUgY29kZS4gSSBrbm93IHRoaXMgaXMgZGVlcCB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBzbyBJIHNob3VsZCBmaW5kIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbiBgYmxvY2svYmxrLmhgLiBTaW5jZSBgQ09ORklHX0JMT0NLYCBpcyBhIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24sIHRoYXQgc2hvdWxkIGFsd2F5cyBiZSBlbmFibGVkLCBzbyBJIHdvbiYjMzk7dCB3b3JyeSBhYm91dCB0aGF0IGZvciB0aGlzIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZS4gTm93LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYFBGX0JMT0NLX1RTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgaXMgaGFuZGxlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBQRl9CTE9DS19UU2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BGX0JMT0NLX1RTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jb3JlLmM9MTIyNj12b2lkIF9fYmxrX2ZsdXNoX3BsdWcoc3RydWN0IGJsa19wbHVnICpwbHVnLCBib29sIGZyb21fc2NoZWR1bGUpXG4tLVxuYmxvY2svYmxrLWNvcmUuYy0xMjQwLVx0cGx1Zy1cdTAwM2VjdXJfa3RpbWUgPSAwO1xuYmxvY2svYmxrLWNvcmUuYzoxMjQxOlx0Y3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjY9IH5QRl9CTE9DS19UUztcbmJsb2NrL2Jsay1jb3JlLmMtMTI0Mi19XG4tLVxuYmxvY2svYmxrLmg9Njg5PXN0YXRpYyBpbmxpbmUgdTY0IGJsa190aW1lX2dldF9ucyh2b2lkKVxuLS1cbmJsb2NrL2Jsay5oLTcwMS1cdCAqXG5ibG9jay9ibGsuaDo3MDI6XHQgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC5cbmJsb2NrL2Jsay5oLTcwMy1cdCAqL1xuLS1cbmJsb2NrL2Jsay5oLTcwNy1cdFx0V1JJVEVfT05DRShwbHVnLVx1MDAzZWN1cl9rdGltZSwgbm93KTtcbmJsb2NrL2Jsay5oOjcwODpcdFx0LyogRW5zdXJlIFBGX0JMT0NLX1RTIGlzIHNldCBhZnRlciBjdXJfa3RpbWUuICovXG5ibG9jay9ibGsuaC03MDktXHRcdGJhcnJpZXIoKTtcbmJsb2NrL2Jsay5oOjcxMDpcdFx0Y3VycmVudC1cdTAwM2VmbGFncyB8PSBQRl9CTE9DS19UUztcbmJsb2NrL2Jsay5oLTcxMS1cdH1cbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTEyMjA9c3RhdGljIGlubGluZSB2b2lkIGJsa19wbHVnX2ludmFsaWRhdGVfdHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMjI1LVx0XHRwbHVnLVx1MDAzZWN1cl9rdGltZSA9IDA7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEyMjY6XHRjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNj0gflBGX0JMT0NLX1RTO1xuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMjI3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MTc1Mj1leHRlcm4gc3RydWN0IHBpZCAqY2FkX3BpZDtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTc4Ny1cdFx0XHRcdFx0XHQgKiBTZWUgbWVtYWxsb2NfcGluX3NhdmUoKSAqL1xuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE3ODg6I2RlZmluZSBQRl9CTE9DS19UU1x0XHQweDIwMDAwMDAwXHQvKiBwbHVnIGhhcyB0cyB0aGF0IG5lZWRzIHVwZGF0aW5nICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTc4OS0jZGVmaW5lIFBGX19IT0xFX180MDAwMDAwMFx0MHg0MDAwMDAwMFxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzI1Mj1zdGF0aWMgdm9pZCBzY2hlZF91cGRhdGVfd29ya2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxua2VybmVsL3NjaGVkL2NvcmUuYy03MjUzLXtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI1NDpcdGlmICh0c2stXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9XUV9XT1JLRVIgfCBQRl9JT19XT1JLRVIgfCBQRl9CTE9DS19UUykpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI1NTpcdFx0aWYgKHRzay1cdTAwM2VmbGFncyBcdTAwMjYgUEZfQkxPQ0tfVFMpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyNTYtXHRcdFx0YmxrX3BsdWdfaW52YWxpZGF0ZV90cyh0c2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU5MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsb2NrIExheWVyIFRpbWVzdGFtcGluZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBjb3JlIG9mIGl0IGxpZXMgaW4gYGJsa190aW1lX2dldF9uc2AsIHdoaWNoIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgYmxvY2sgbGF5ZXIuIE5vIHNwZWNpYWwgY29uZmlncyBhcmUgcmVxdWlyZWQsIHdoaWNoIGlzIGEgZ29vZCBzaWdu4oCUaXQmIzM5O3MgYSBmb3VuZGF0aW9uYWwgY2hhbmdlLiBXYWl0LCBJIGFsc28gc2VlIHRoYXQgYFBGX0JMT0NLX1RTYCBpcyBpbnZvbHZlZCwgYW5kIHRoYXQmIzM5O3MgdXNlZCBpbiBgc2NoZWRfdXBkYXRlX3dvcmtlcmAsIHJpZ2h0PyBTbywgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBmaXgsIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbi4gSSYjMzk7bSBnb2luZyB0byBmbGFnIHRoaXMgYXMgV29ydGhGdXp6aW5nOyBpdCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJIGluaXRpYWxseSB0aG91Z2h0IG9mIGBibGtfbXFfc3VibWl0X2Jpb2AsIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAsIGFuZCBgYmxrX21xX2FsbG9jX3JlcXVlc3RgIC0gdGhleSYjMzk7cmUgYWxsIGRpcmVjdGx5IHJlbGF0ZWQgYW5kIGltcG9ydGFudC4gQnV0LCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHByb21wdDogJiMzNDtBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4mIzM0OyBUaGlzIHJhY2UgY29uZGl0aW9uIGhhcHBlbnMgYmVjYXVzZSBgY3VyX2t0aW1lYCBpbiBgYmxrX3RpbWVfZ2V0X25zYCBjYW4gYmUgemVyb2VkIGR1cmluZyBwcmVlbXB0aW9uIHdoZW4gYFBGX0JMT0NLX1RTYCBpcyBzZXQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSB0aW1lc3RhbXBpbmcgaXNzdWUuCgpNeSBmaXJzdCB0aG91Z2h0IHdhcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB3ZXJlIHRoZSBob3R0ZXN0IGFuZCBtb3N0IGltcG9ydGFudC4gQnV0LCBtYXliZSB0aGVyZSBhcmUgbGVzcyBob3QtcGF0aCBmdW5jdGlvbnMgdGhhdCB1c2UgaXQuIExldCYjMzk7cyBzZWUuLi4gYGJmcV9hZGRfcmVxdWVzdGAsIGBiZnFfY29tcGxldGVkX3JlcXVlc3RgIGFyZSBzcGVjaWZpYyB0byBCRlEuLi4gdGhlbiB0aGVyZSBhcmUgdGhlIGNncm91cCBhbmQgUW9TIGZ1bmN0aW9uczogYGJmcWdfc3RhdHNfdXBkYXRlX2lkbGVfdGltZWAsIGBiZnFnX3N0YXRzX3VwZGF0ZV9jb21wbGV0aW9uYCwgYGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2dgLCBgaW9jX2F1dG9wX2lkeGAsIGBibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW9gLCBgcndiX3N5bmNfaXNzdWVfbGF0YC4gQW5kIHdoYXQgYWJvdXQgYGJsa19tcV9hbGxvY19yZXF1ZXN0YD8gSSBzaG91bGQgcHJvYmFibHkgcnVsZSB0aGF0IG91dC4KClRoZXJlJiMzOTtzIG5vIHBhcnRpY3VsYXIgdGVzdCBvciBpb2N0bCB0aGF0IHdvdWxkIGJlIHNwZWNpZmljIHRvIHRoaXMsIGl0JiMzOTtzIHJlYWxseSB0aGUgcmFjZSBjb25kaXRpb24gd2hlbiBgUEZfQkxPQ0tfVFNgIGlzIHNldCwgYW5kIHByZWVtcHRpb24gaGFwcGVucywgdXN1YWxseSBkdXJpbmcgc2NoZWR1bGluZy4uLiBzbyBwcmV0dHkgbXVjaCBhbnkgYmxvY2sgSU8gaXMgZ29pbmcgdG8gdHJpZ2dlciB0aGlzIGNvbmRpdGlvbi4KCk9rYXksIGxldCYjMzk7cyBnZXQgYmFjayB0byB0aGUgZm9jdXMgc3ltYm9scy4gTm93LCBJICpjb3VsZCoganVzdCBsaXN0IGBibGtfbXFfc3VibWl0X2Jpb2AgYW5kIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAgYmVjYXVzZSB0aGV5ICphcmUqIHRoZSBtYWluIGZ1bmN0aW9ucyB1c2luZyBpdCwgZXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgaG90IHBhdGhzLiBBbmQgdGhlIHByb21wdCBpcyByZWFsbHkgdGVsbGluZyBtZSB0byBiZSBjYXJlZnVsIGhlcmUuLi4gaWYgSSBsaXN0IGBibGtfbXFfc3VibWl0X2Jpb2AsIGl0JiMzOTtzIGdvaW5nIHRvIHNrZXcgdGhlIGRpc3RyaWJ1dGlvbi4gSG1tbS4uLldoYXQgYWJvdXQgYGJsa19wbHVnX2ludmFsaWRhdGVfdHNgPyBUaGF0JiMzOTtzIGNhbGxlZCBmcm9tIGBzY2hlZF91cGRhdGVfd29ya2VyYC4KClJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBvbmUgZG9lcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3BsdWdfaW52YWxpZGF0ZV90cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTEyMTE9c3RhdGljIGlubGluZSB2b2lkIGJsa19mbHVzaF9wbHVnKHN0cnVjdCBibGtfcGx1ZyAqcGx1ZywgYm9vbCBhc3luYylcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEyMTktICovXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEyMjA6c3RhdGljIGlubGluZSB2b2lkIGJsa19wbHVnX2ludmFsaWRhdGVfdHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEyMjEte1xuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTI0OD1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX2ZsdXNoX3BsdWcoc3RydWN0IGJsa19wbHVnICpwbHVnLCBib29sIGFzeW5jKVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTI1MS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTI1MjpzdGF0aWMgaW5saW5lIHZvaWQgYmxrX3BsdWdfaW52YWxpZGF0ZV90cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTI1My17XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz03MjUyPXN0YXRpYyB2b2lkIHNjaGVkX3VwZGF0ZV93b3JrZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy03MjU1LVx0XHRpZiAodHNrLVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9CTE9DS19UUylcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI1NjpcdFx0XHRibGtfcGx1Z19pbnZhbGlkYXRlX3RzKHRzayk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyNTctXHRcdGlmICh0c2stXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX1dRX1dPUktFUilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIExpc3Qgb2YgRnVuY3Rpb25zIEltcGFjdGVkIGJ5IGBibGtfdGltZV9nZXRfbnNgKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGBibGtfdGltZV9nZXRfbnNgIGNoYW5nZS4gVGhlIGtleSBpcyB0aGF0IGl0JiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQmIzM5O3Mgbm90IGdvaW5nIHRvIHNob3cgdXAgYXMgYSBzdGFuZGFyZCBzeW1ib2wuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCAqdXNlKiBpdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgdGhlIGJyZWFkdGggb2YgaW1wYWN0LgoKSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgbGlzdGluZyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgbGVzcyBnZW5lcmljLiBJIHRob3VnaHQgSSBzaG91bGQgbGlzdCBgYmZxX2FkZF9yZXF1ZXN0YCwgYGJmcV9jb21wbGV0ZWRfcmVxdWVzdGAsIGBpb2NfYXV0b3BfaWR4YCwgYW5kIGBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnYC4gQnV0LCBhZnRlciByZWNvbnNpZGVyaW5nLCBJIGRlY2lkZWQgdG8gcmVtb3ZlIGBiZnFfY29tcGxldGVkX3JlcXVlc3RgLgoKSG93ZXZlciwgYXMgSSB0cmFjZWQgZnVydGhlciwgSSByZWFsaXplZCBgYmxrX3RpbWVfZ2V0X25zYCBpcyBhbHNvIHVzZWQgaW4gYGJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdGAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYGJsa19tcV9hbGxvY19yZXF1ZXN0YC4gSSBuZWVkIHRvIHJlZmxlY3QgdGhpcyBkZXBlbmRlbmN5LiBBZnRlciBmdXJ0aGVyIHRob3VnaHQsIEkmIzM5O20gZ29pbmcgdG8gcmVtb3ZlIGBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3RgIHNpbmNlIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLgoKVGhlcmVmb3JlLCB0aGUgZmluYWwgbGlzdCBmb3IgY29uc2lkZXJhdGlvbiBpczogYGJmcV9hZGRfcmVxdWVzdGAsIGBpb2NfYXV0b3BfaWR4YCwgYGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2dgLCBhbmQgYGJsa19tcV9hbGxvY19yZXF1ZXN0YC4gVGhpcyBsaXN0IHNob3VsZCBwcm92aWRlIGEgY2xlYXIgcGljdHVyZSBvZiB3aGVyZSB0aGlzIGNoYW5nZSBpbiBgYmxrX3RpbWVfZ2V0X25zYCBtaWdodCBiZSBmZWx0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBpZiBgYmZxX2FkZF9yZXF1ZXN0YCBpcyBzdGF0aWMgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JmcV9hZGRfcmVxdWVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZnEtaW9zY2hlZC5jPTIxMzQ9c3RhdGljIHZvaWQgYmZxX2NoZWNrX3dha2VyKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgc3RydWN0IGJmcV9xdWV1ZSAqYmZxcSxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTIyMDUtXG5ibG9jay9iZnEtaW9zY2hlZC5jOjIyMDY6c3RhdGljIHZvaWQgYmZxX2FkZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjIwNy17XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz0zMTI3PXN0YXRpYyBzdHJ1Y3QgYmZxX3F1ZXVlICpiZnFfbWVyZ2VfYmZxcXMoc3RydWN0IGJmcV9kYXRhICpiZnFkLFxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzE2OS1cdCAqIHRvIGJlIHdlaWdodC1yYWlzZWQgKHdoaWNoIG1heSBoYXBwZW4gYmVjYXVzZSBFUU0gbWF5IG1lcmdlXG5ibG9jay9iZnEtaW9zY2hlZC5jOjMxNzA6XHQgKiBiZnFxIGV2ZW4gYmVmb3JlIGJmcV9hZGRfcmVxdWVzdCBpcyBleGVjdXRlZCBmb3IgdGhlIGZpcnN0XG5ibG9jay9iZnEtaW9zY2hlZC5jLTMxNzEtXHQgKiB0aW1lIGZvciBiZnFxKS4gSGFuZGxpbmcgdGhpcyBjYXNlIHdvdWxkIGhvd2V2ZXIgYmUgdmVyeVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM9NTk0Mj1zdGF0aWMgdm9pZCBiZnFfdXBkYXRlX2hhc19zaG9ydF90dGltZShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MDUxLVx0ICogd2FrZXIgcXVldWUgaXMgZGVmaW5lZCBpbiB0aGUgY29tbWVudHMgaW5cbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjA1MjpcdCAqIGJmcV9hZGRfcmVxdWVzdCgpKS4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBzdGFydCBzb29uZXJcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjA1My1cdCAqIHRvIGJvb3N0IHRocm91Z2hwdXQgbW9yZSBlZmZlY3RpdmVseSwgYnkgaW5qZWN0aW5nIHRoZSBJL09cbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYxNDc9c3RhdGljIGJvb2wgX19iZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTkwLVx0d2FpdGluZyA9IGJmcXEgXHUwMDI2XHUwMDI2IGJmcV9iZnFxX3dhaXRfcmVxdWVzdChiZnFxKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjE5MTpcdGJmcV9hZGRfcmVxdWVzdChycSk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxOTItXHRpZGxlX3RpbWVyX2Rpc2FibGVkID0gd2FpdGluZyBcdTAwMjZcdTAwMjYgIWJmcV9iZnFxX3dhaXRfcmVxdWVzdChiZnFxKTtcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYzNDY9c3RhdGljIHZvaWQgYmZxX2NvbXBsZXRlZF9yZXF1ZXN0KHN0cnVjdCBiZnFfcXVldWUgKmJmcXEsIHN0cnVjdCBiZnFfZGF0YSAqYmZxZClcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTY1NzYtICogcGllY2VzIG9mIGNvZGUgdGhhdCBpbXBsZW1lbnQgdGhlc2Ugc3RlcHM6IHRoZSBicmFuY2ggaGFuZGxpbmcgdGhlXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY1Nzc6ICogdHJhbnNpdGlvbiBmcm9tIGVtcHR5IHRvIG5vbiBlbXB0eSBpbiBiZnFfYWRkX3JlcXVlc3QoKSwgdGhlIGJyYW5jaFxuYmxvY2svYmZxLWlvc2NoZWQuYy02NTc4LSAqIGhhbmRsaW5nIGluamVjdGlvbiBpbiBiZnFfc2VsZWN0X3F1ZXVlKCksIGFuZCB0aGUgZnVuY3Rpb25cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NDEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgUmVxdWVzdCBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIG1hcCBvdXQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbiB0aGlzIEkvTyBwYXRoLiBgYmZxX2FkZF9yZXF1ZXN0YCBpcyBzdGF0aWMsIHNvIEkgY2FuJiMzOTt0IGRpcmVjdGx5IGxpc3QgdGhhdCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlLi4uIEkgY2FuIGxpc3QgYF9fYmZxX2luc2VydF9yZXF1ZXN0YCwgcmlnaHQ/IEFuZCBmb2xsb3dpbmcgdGhhdCwgSSBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSBgaW9jX2F1dG9wX2lkeGAgYW5kIGBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnYCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2wgZmxvdy4gV2FpdCBhIG1pbnV0ZSwgSSBhbHNvIHNlZSB0aGF0IGBibGtfdGltZV9nZXRfbnNgIGlzIHVzZWQgaW4gYGJsa19hY2NvdW50X2lvX3N0YXJ0YC4gQW5kICp0aGF0KiBvbmUgaXMgc3RhdGljIGlubGluZSwgY2FsbGVkIGZyb20gYGJsa19tcV9zdGFydF9yZXF1ZXN0YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQhCgpUaGVyZWZvcmUgSSYjMzk7bGwgbGlzdCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGFuZCBgYmxrX21xX3N1Ym1pdF9iaW9gLiBUaGV5IGhhdmUgdG8gYmUgaW4gdGhlcmUsIGV2ZW4gaWYgdGhleSYjMzk7cmUgY29uc2lkZXJlZCBob3QgcGF0aHMsIGJlY2F1c2UgdGhleSYjMzk7cmUgdGhlIG1ham9yIGVudHJ5IHBvaW50cyBmcm9tIHRoZSBibG9jayBsYXllci4gTm93LCBnaXZlbiB0aGF0IGBfX2JmcV9pbnNlcnRfcmVxdWVzdGAgaXMgc3RhdGljLCBJIHNob3VsZCBsaXN0IGBiZnFfaW5zZXJ0X3JlcXVlc3RgIGl0c2VsZiwgd2hpY2ggaXMgdGhlIGVsZXZhdG9yIG9wZXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBvbmUgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiZnFfaW5zZXJ0X3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWlvc2NoZWQuYz0yNDk4PXN0YXRpYyB2b2lkIGJmcV9yZXF1ZXN0X21lcmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTI1NTItICogdGhlIGZ1bmN0aW9uIHRoYXQgZmlsbHMgdGhpcyBoYXNoIHRhYmxlIChlbHZfcnFoYXNoX2FkZCkgaXMgY2FsbGVkXG5ibG9jay9iZnEtaW9zY2hlZC5jOjI1NTM6ICogb25seSBieSBiZnFfaW5zZXJ0X3JlcXVlc3QuXG5ibG9jay9iZnEtaW9zY2hlZC5jLTI1NTQtICovXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02MTM4PXN0YXRpYyB2b2lkIGJmcXFfcmVxdWVzdF9mcmVlZChzdHJ1Y3QgYmZxX3F1ZXVlICpiZnFxKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjE0Ni0vKiByZXR1cm5zIHRydWUgaWYgaXQgY2F1c2VzIHRoZSBpZGxlIHRpbWVyIHRvIGJlIGRpc2FibGVkICovXG5ibG9jay9iZnEtaW9zY2hlZC5jOjYxNDc6c3RhdGljIGJvb2wgX19iZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxNDgte1xuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM9NjIzND1zdGF0aWMgc3RydWN0IGJmcV9xdWV1ZSAqYmZxX2luaXRfcnEoc3RydWN0IHJlcXVlc3QgKnJxKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjIzNS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjIzNjpzdGF0aWMgdm9pZCBiZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjIzNy1cdFx0XHQgICAgICAgYmxrX2luc2VydF90IGZsYWdzKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI2NC1cdH0gZWxzZSB7XG5ibG9jay9iZnEtaW9zY2hlZC5jOjYyNjU6XHRcdGlkbGVfdGltZXJfZGlzYWJsZWQgPSBfX2JmcV9pbnNlcnRfcmVxdWVzdChiZnFkLCBycSk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyNjYtXHRcdC8qXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyNjctXHRcdCAqIFVwZGF0ZSBiZnFxLCBiZWNhdXNlLCBpZiBhIHF1ZXVlIG1lcmdlIGhhcyBvY2N1cnJlZFxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MjY4Olx0XHQgKiBpbiBfX2JmcV9pbnNlcnRfcmVxdWVzdCwgdGhlbiBycSBoYXMgYmVlblxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjY5LVx0XHQgKiByZWRpcmVjdGVkIGludG8gYSBuZXcgcXVldWUuXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjkxLVxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MjkyOnN0YXRpYyB2b2lkIGJmcV9pbnNlcnRfcmVxdWVzdHMoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyOTMtXHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjMwMC1cdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZycS1cdTAwM2VxdWV1ZWxpc3QpO1xuYmxvY2svYmZxLWlvc2NoZWQuYzo2MzAxOlx0XHRiZnFfaW5zZXJ0X3JlcXVlc3QoaGN0eCwgcnEsIGZsYWdzKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjMwMi1cdH1cbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTc1OTM9c3RhdGljIHN0cnVjdCBlbGV2YXRvcl90eXBlIGlvc2NoZWRfYmZxX21xID0ge1xuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzU5OS1cdFx0LmV4aXRfaWNxXHRcdD0gYmZxX2V4aXRfaWNxLFxuYmxvY2svYmZxLWlvc2NoZWQuYzo3NjAwOlx0XHQuaW5zZXJ0X3JlcXVlc3RzXHQ9IGJmcV9pbnNlcnRfcmVxdWVzdHMsXG5ibG9jay9iZnEtaW9zY2hlZC5jLTc2MDEtXHRcdC5kaXNwYXRjaF9yZXF1ZXN0XHQ9IGJmcV9kaXNwYXRjaF9yZXF1ZXN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg0NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBUYXJnZXRlZCBCbG9jayBJL08gVHJhY2luZyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gaWRlbnRpZnkgc29tZSBrZXkgZnVuY3Rpb25zIGZvciB0cmFjaW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBpbmNsdWRlIGBiZnFfaW5zZXJ0X3JlcXVlc3RzYCwgYGJsa19tcV9zdGFydF9yZXF1ZXN0YCwgYW5kIGBibGtfbXFfc3VibWl0X2Jpb2AuIFdhaXQgYSBtaW51dGUsIGBibGtfbXFfc3VibWl0X2Jpb2AgaXMganVzdCAqdG9vKiBnZW5lcmljLiBUaGF0JiMzOTtzIGEgaHVnZSBob3QgcGF0aCwgYW5kIGluY2x1ZGluZyBpdCB3b3VsZCBsaWtlbHkgdGhyb3cgb2ZmIGFueSBtZWFuaW5nZnVsIGRpc3RyaWJ1dGlvbiBhbmFseXNpcy4gCgpTbywgSSBuZWVkIHRvIG5hcnJvdyB0aGlzIGRvd24sIGV2ZW4gdGhvdWdoIEkgZGlkIGNvbnNpZGVyIGBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4YCBhbmQgYGJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdGAuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyIC0gYXZvaWQgdGhvc2UgZ2VuZXJpYywgY29tbW9uIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIHNrZXcgdGhlIHJlc3VsdHMuIE9rYXksIGZvY3VzaW5nIGFnYWluLCBsZXQmIzM5O3MgbGlzdCBgYmZxX2luc2VydF9yZXF1ZXN0c2AsIGBpb2NfYXV0b3BfaWR4YCwgYW5kIGBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnYC4gVGhvc2Ugc2VlbSBzcGVjaWZpYyBlbm91Z2ggdG8gcHJvdmlkZSBnb29kIGluc2lnaHQgd2l0aG91dCBiZWluZyBvdmVybHkgdWJpcXVpdG91cy4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBpb2NfYXV0b3BfaWR4YCB0byBjb25maXJtIGl0cyBzdWl0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9jX2F1dG9wX2lkeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW9jb3N0LmM9NzY1PXN0YXRpYyB2b2lkIGlvY19yZWZyZXNoX3BlcmlvZF91cyhzdHJ1Y3QgaW9jICppb2MpXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTgwNi0gKi9cbmJsb2NrL2Jsay1pb2Nvc3QuYzo4MDc6c3RhdGljIGludCBpb2NfYXV0b3BfaWR4KHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9ibGstaW9jb3N0LmMtODA4LXtcbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9OTEyPXN0YXRpYyBib29sIGlvY19yZWZyZXNoX3BhcmFtc19kaXNrKHN0cnVjdCBpb2MgKmlvYywgYm9vbCBmb3JjZSxcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtOTE5LVxuYmxvY2svYmxrLWlvY29zdC5jOjkyMDpcdGlkeCA9IGlvY19hdXRvcF9pZHgoaW9jLCBkaXNrKTtcbmJsb2NrL2Jsay1pb2Nvc3QuYy05MjEtXHRwID0gXHUwMDI2YXV0b3BbaWR4XTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFN0YXRpYyBEYXRhIFN0cnVjdHVyZXMqKgoKQWxyaWdodCwgc28gYGlvY19hdXRvcF9pZHhgIGlzIGRlZmluZWQgYXMgc3RhdGljLiBBbmQgSSYjMzk7bSBzZWVpbmcgdGhhdCBgaW9jX3JlZnJlc2hfcGFyYW1zX2Rpc2tgIGlzIGFsc28gYSBzdGF0aWMgZWxlbWVudC4gIEdpdmVuIHRoYXQgYm90aCBhcmUgc3RhdGljLCB0aGVyZSYjMzk7cyBsaWtlbHkgc29tZSBpbXBvcnRhbnQgaW50ZXJhY3Rpb24gb3IgcmVsYXRpb25zaGlwIHRvIGV4cGxvcmUuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGBpb2NfcmVmcmVzaF9wYXJhbXNfZGlza2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIHN0b3JpbmcsIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhlIHN0YXRpYyBuYXR1cmUgaGFzIG9uIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9jX3JlZnJlc2hfcGFyYW1zX2Rpc2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvY29zdC5jPTg5Nz1zdGF0aWMgdm9pZCBpb2NfcmVmcmVzaF9sY29lZnMoc3RydWN0IGlvYyAqaW9jKVxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy05MTEtICovXG5ibG9jay9ibGstaW9jb3N0LmM6OTEyOnN0YXRpYyBib29sIGlvY19yZWZyZXNoX3BhcmFtc19kaXNrKHN0cnVjdCBpb2MgKmlvYywgYm9vbCBmb3JjZSxcbmJsb2NrL2Jsay1pb2Nvc3QuYy05MTMtXHRcdFx0XHQgICAgc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jPTk1MT1zdGF0aWMgYm9vbCBpb2NfcmVmcmVzaF9wYXJhbXMoc3RydWN0IGlvYyAqaW9jLCBib29sIGZvcmNlKVxuYmxvY2svYmxrLWlvY29zdC5jLTk1Mi17XG5ibG9jay9ibGstaW9jb3N0LmM6OTUzOlx0cmV0dXJuIGlvY19yZWZyZXNoX3BhcmFtc19kaXNrKGlvYywgZm9yY2UsIGlvYy1cdTAwM2VycW9zLmRpc2spO1xuYmxvY2svYmxrLWlvY29zdC5jLTk1NC19XG4tLVxuYmxvY2svYmxrLWlvY29zdC5jPTI4OTE9c3RhdGljIGludCBibGtfaW9jb3N0X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTI5MjktXHRpb2MtXHUwMDNlYXV0b3BfaWR4ID0gQVVUT1BfSU5WQUxJRDtcbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTMwOlx0aW9jX3JlZnJlc2hfcGFyYW1zX2Rpc2soaW9jLCB0cnVlLCBkaXNrKTtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTMxLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMjEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIHRoaW5raW5nIGFib3V0IHRoZW0gZnJvbSBhIHN5c3RlbS1sZXZlbCBwZXJzcGVjdGl2ZSwgbGlrZSBJIGFsd2F5cyBkbzoKCioqQ29uc2lkZXJpbmcgQmxvY2sgSS9PIENvc3QgYW5kIFRocm90dGxpbmcqKgoKUmlnaHQsIGBibGtfaW9jb3N0X2luaXRgIC0gdGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBnZXR0aW5nIGEgaGFuZGxlIG9uIEkvTyBjb3N0cy4gV2UgbmVlZCBhIHdheSB0byB0cmFjayB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgYmxvY2sgZGV2aWNlcyBhbmQgZ3JvdXBzIGZvciBwcm9wZXIgYWNjb3VudGluZyBhbmQgY29udHJvbC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYSByb2J1c3QgSS9PIHNjaGVkdWxlciBhbmQgY29udHJvbCBzeXN0ZW0uCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgYWJvdXQgYGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2dgPyBUaGF0JiMzOTtzIHRoZSBwYXJ0IHdoZXJlIHdlIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggdGhlIGNvc3QgaW5mb3JtYXRpb24sIGlzbiYjMzk7dCBpdD8gSXQgc291bmRzIGxpa2UgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBhbnkgdGhyb3R0bGluZyBsaW1pdHMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZC4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHdlIG1ha2UgdGhlIGNyaXRpY2FsIGRlY2lzaW9uIHRvIGVpdGhlciBhbGxvdyBhbiBJL08gcmVxdWVzdCB0byBnbyB0aHJvdWdoIG9yIGFwcGx5IHRoZSBicmFrZXMsIGJhc2VkIG9uIHRoZSByZXNvdXJjZSBjb25zdW1wdGlvbiBvZiB0aGUgYmxvY2sgZ3JvdXAuIEludGVyZXN0aW5nLiBJIHdvbmRlciBhYm91dCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zLiBEb2VzIGl0IGFwcGx5IGRlbGF5cz8gUHJpb3JpdGl6YXRpb24gc2hpZnRzPyBPciBtYXliZSBldmVuIHJlcXVlc3QgcmVqZWN0aW9uIGluIGV4dHJlbWUgY2FzZXM/IEl0IHByb2JhYmx5IGRlcGVuZHMgb24gaG93IHRoZSB0aHJvdHRsaW5nIHN5c3RlbSBpcyBkZXNpZ25lZCwgdGhlIGNvbnN0cmFpbnRzIHNldCwgYW5kIHdoYXQmIzM5O3MgYmVzdCBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJiMzOTtzIHN0YWJpbGl0eS4gRGVmaW5pdGVseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmM9MTg4Nz1zdGF0aWMgdm9pZCBibGtjZ19zY2FsZV9kZWxheShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHU2NCBub3cpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE5NDMtICovXG5ibG9jay9ibGstY2dyb3VwLmM6MTk0NDpzdGF0aWMgdm9pZCBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnKHN0cnVjdCBibGtjZ19ncSAqYmxrZywgYm9vbCB1c2VfbWVtZGVsYXkpXG5ibG9jay9ibGstY2dyb3VwLmMtMTk0NS17XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTIwMTA9dm9pZCBibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50KHZvaWQpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIwMzMtXG5ibG9jay9ibGstY2dyb3VwLmM6MjAzNDpcdGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2coYmxrZywgdXNlX21lbWRlbGF5KTtcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMDM1LVx0YmxrZ19wdXQoYmxrZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTgwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBmb3IgU2VsZWN0aW5nIEtleSBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gYGJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnRgIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY2FuZGlkYXRlOyB0aGF0IGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gTm93LCBJIHNob3VsZCBtYWtlIGEgcXVpY2sgbGlzdCBvZiB3aGF0IEkmIzM5O20gY29uc2lkZXJpbmcuIGBiZnFfaW5zZXJ0X3JlcXVlc3RzYCwgYGJsa19pb2Nvc3RfaW5pdGAsIGFuZCwgYXMgSSBzYWlkLCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudGAuIFdhaXQgYSBtaW51dGUsIGBibGtfdGltZV9nZXRfbnNgIGlzIHVzZWQgd2l0aGluIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIGNhbGxlZCBmb3IgKmV2ZXJ5KiBzaW5nbGUgcmVxdWVzdC4KCklmIEkgZG9uJiMzOTt0IGV4cGxpY2l0bHkgbGlzdCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgLCB0aGUgZnV6emVyIG1pZ2h0IG92ZXJsb29rIGl0LCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBpdCBmb2N1c2VzIHRoZXJlLiBCdXQsIG9uIHRoZSBvdGhlciBoYW5kLCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGlzIGEgaG90IHBhdGggLSB0aGF0IGlzIGdvaW5nIHRvIGJlIHVzZWQgYSAqbG90Ki4gR2l2ZW4gdGhhdCBpdCYjMzk7cyB0aGUgbW9zdCBkaXJlY3QgY2FsbGVyIG9mIHRoZSBjb2RlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgSSYjMzk7bGwgbGlzdCBpdCBhbnl3YXkuCgpIbW0sIHdhaXQuIEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoIGhlcmUuIGBibGtfdGltZV9nZXRfbnNgIGlzIGFsc28gdXNlZCBpbiBgYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eGAuIE9rYXksIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhgIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz02OTg9RVhQT1JUX1NZTUJPTChibGtfbXFfYWxsb2NfcmVxdWVzdCk7XG5ibG9jay9ibGstbXEuYy02OTktXG5ibG9jay9ibGstbXEuYzo3MDA6c3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5ibG9jay9ibGstbXEuYy03MDEtXHRibGtfb3BmX3Qgb3BmLCBibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBoY3R4X2lkeClcbi0tXG5ibG9jay9ibGstbXEuYy03NzktfVxuYmxvY2svYmxrLW1xLmM6NzgwOkVYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHgpO1xuYmxvY2svYmxrLW1xLmMtNzgxLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMTY0PWludCBfX252bWVfc3VibWl0X3N5bmNfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTExNzgtXHRlbHNlXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTE3OTpcdFx0cmVxID0gYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eChxLCBudm1lX3JlcV9vcChjbWQpLCBibGtfZmxhZ3MsXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE4MC1cdFx0XHRcdFx0XHRxaWQgLSAxKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oPTc2NT1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX2FsbG9jX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19vcGZfdCBvcGYsXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTc2Ni1cdFx0YmxrX21xX3JlcV9mbGFnc190IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvYmxrLW1xLmg6NzY3OnN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuaW5jbHVkZS9saW51eC9ibGstbXEuaC03NjgtXHRcdGJsa19vcGZfdCBvcGYsIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQRl9CTE9DS19UUyBCdWcqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgYFBGX0JMT0NLX1RTYCBidWcuIExldCBtZSBzdGFydCBieSBsaXN0aW5nIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLCBqdXN0IHRvIGdldCBteSBiZWFyaW5ncy4gSSYjMzk7bSB0aGlua2luZyBvZiBgYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eGAsIGBibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50YCwgYW5kIGBiZnFfaW5zZXJ0X3JlcXVlc3RzYC4gV2FpdCBhIHNlY29uZOKApiB0aGUgYnVnIGlzIGFjdHVhbGx5IGFib3V0IGBQRl9CTE9DS19UU2AuIFJpZ2h0LCB0aGF0IGZsYWcuIEkgcmVtZW1iZXIgbm93LgoKYFBGX0JMT0NLX1RTYCBnZXRzIHNldCBpbiBgYmxrX3RpbWVfZ2V0X25zYCB3aGVuIGBwbHVnLSZndDtjdXJfa3RpbWVgIGlzIHplcm8uIFRoYXQgbWVhbnMgYSBibG9jayBwbHVnIGhhcyB0byBiZSBhY3RpdmUuIE9rYXksIGJsb2NrIHBsdWdz4oCmIHRob3NlIGFyZSB1c2VkIGluIGBibGtfc3RhcnRfcGx1Z2AgYW5kIGBibGtfZmluaXNoX3BsdWdgLiBUaG9zZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIGJsb2NrIGxheWVyIGZlYXR1cmVzLCBzbyBpdCYjMzk7cyBhIGJyb2FkIGFyZWEgdG8gaW52ZXN0aWdhdGUuCgpBbHJpZ2h0LCBJJiMzOTtsbCBnbyBiYWNrIHRvIGxpc3RpbmcgdGhvc2Uga2V5IGZ1bmN0aW9uczogYGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhgLCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudGAsIGFuZCBgYmZxX2luc2VydF9yZXF1ZXN0c2AuIEFuZCBJIHNob3VsZCBpbmNsdWRlIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGBibGtfdGltZV9nZXRfbnNgIGlzIG1vc3QgY29tbW9ubHkgY2FsbGVkLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudGAgaXMgdGllZCB0byBgQ09ORklHX0JMS19DR1JPVVBgLiBgYmZxX2luc2VydF9yZXF1ZXN0c2AgbmVlZHMgYENPTkZJR19JT1NDSEVEX0JGUWAuIExldCYjMzk7cyB0aHJvdyBpbiBgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUYCBmb3IgYGJsa19pb2Nvc3RfaW5pdGAuIFNvLCBteSBmb2N1cyBzaG91bGQgYmUgb24gYENPTkZJR19CTEtfQ0dST1VQYCBhbmQgYENPTkZJR19JT1NDSEVEX0JGUWAuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRob3NlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9TQ0hFRF9CRlEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkPTEwPWNvbmZpZyBNUV9JT1NDSEVEX0tZQkVSXG4tLVxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTE4LVxuYmxvY2svS2NvbmZpZy5pb3NjaGVkOjE5OmNvbmZpZyBJT1NDSEVEX0JGUVxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTIwLVx0dHJpc3RhdGUgXCYjMzQ7QkZRIEkvTyBzY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqS2VybmVsIEJsb2NrIExheWVyIEVuaGFuY2VtZW50cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBvdXRsaW5lIG15IHBsYW4gZm9yIGltcHJvdmluZyB0aGUgYmxvY2sgbGF5ZXIuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBpbnRlZ3JhdGUgYElPU0NIRURfQkZRYC4gVGhhdCYjMzk7cyBjcnVjaWFsLiBCRlEgb2ZmZXJzIGEgbXVjaCBtb3JlIHJlZmluZWQgYXBwcm9hY2ggdG8gSS9PIHNjaGVkdWxpbmcsIGFuZCByZWFsbHkgaGVscHMgd2l0aCByZXNwb25zaXZlbmVzcyBpbiBjb25nZXN0ZWQgc2l0dWF0aW9ucy4gR29vZCBjYW5kaWRhdGUgZm9yIHRoZSBuZXcgc2V0dXAuIFRoZW4sIHRvIG1ha2Ugc3VyZSB0aGlzIGFsbCBwbGF5cyBuaWNlbHkgSSYjMzk7bGwgaW50ZWdyYXRlIGBCTEtfQ0dST1VQYC4gTm8gcXVlc3Rpb24sIGNvbnRyb2wgZ3JvdXBzIGFyZSBlc3NlbnRpYWwgZm9yIG1hbmFnaW5nIHJlc291cmNlIGFsbG9jYXRpb24sIGlzb2xhdGlvbiwgYW5kLCB5b3Uga25vdywgZmFpcm5lc3MgYWNyb3NzIGRpZmZlcmVudCB3b3JrbG9hZHMuIFdlICpuZWVkKiB0aGlzIGluIHBsYWNlLiBGaW5hbGx5LCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBmb2xkIGluIGBCTEtfQ0dST1VQX0lPQ09TVGAuIFRoaXMgaXMgdGhlIGdsdWU7IGl0IGFsbG93cyBtZSB0byBwcm9wZXJseSBsZXZlcmFnZSBhbmQgYWNjb3VudCBmb3IgdGhlIEkvTyBjb3N0cyBvZiBlYWNoIGNvbnRyb2wgZ3JvdXAsIHByb3ZpZGluZyBhIG11Y2ggbW9yZSBhY2N1cmF0ZSBwaWN0dXJlIGZvciBwb2xpY3kgZGVjaXNpb25zIGFuZCBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4gR290IGl0LiBUaGlzIGNvbWJpbmF0aW9uIGdpdmVzIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxuLS1cbmJsb2NrL0tjb25maWctNDEtXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxuYmxvY2svS2NvbmZpZy00My1cdGJvb2xcbmJsb2NrL0tjb25maWctNDQtXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXG5ibG9jay9LY29uZmlnLTQ2LVx0Ym9vbFxuLS1cbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXG4tLVxuYmxvY2svS2NvbmZpZy0xMzMtXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbmJsb2NrL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTQ0LVxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbmJsb2NrL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE2My1cbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xuYmxvY2svS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O0Nncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1wmIzM0O1xuLS1cbmluaXQvS2NvbmZpZz0xMDg1PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTAxLVxuaW5pdC9LY29uZmlnOjExMDI6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTAzLVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDY0CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEJsb2NrIExheWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgc3VidGxlLCB5ZXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgdGltZXN0YW1waW5nIG1lY2hhbmlzbS4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBJT1NDSEVEX0JGUWAsIGBCTEtfQ0dST1VQYCwgYW5kIGBCTEtfQ0dST1VQX0lPQ09TVGAsIHdoaWNoIGluZGljYXRlcyB0aGlzIGlzIHBvdGVudGlhbGx5IHRvdWNoaW5nIG9uIEkvTyBzY2hlZHVsaW5nIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhcyB0aG9zZSBhcmUgYXJlYXMgSSYjMzk7dmUgc3BlbnQgYSBnb29kIGRlYWwgb2YgdGltZSBzdHVkeWluZy4KClRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHNlZW1zIHRvIGJlIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGBibGtfdGltZV9nZXRfbnNgLiBTcGVjaWZpY2FsbHksIGBjdXJfa3RpbWVgIGNhbiBiZSB6ZXJvZWQgb3V0IGJ5IHByZWVtcHRpb24uIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IHByb2JsZW0sIGFuZCB6ZXJvaW5nIG91dCB0aGF0IHRpbWUgY2FuIGNhdXNlIGluY29ycmVjdCB0aW1lc3RhbXBzLCB3aGljaCBpcyBiYWQgbmV3cyBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIHNjaGVkdWxpbmcgZGVjaXNpb25zLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBjb3JyZWN0bmVzcyBpZiB0aGUgdGltZXN0YW1wcyBhcmUgdXNlZCBmb3IgYWNjb3VudGluZy4KCkkmIzM5O20ga2V5aW5nIGluIG9uIHRoZXNlIHN5bWJvbHMgYXMgaW5kaWNhdG9ycyBvZiB0aGUgcGF0Y2gmIzM5O3MgY29yZSBmdW5jdGlvbnM6IGBibGtfbXFfc3RhcnRfcmVxdWVzdGAsIGBiZnFfaW5zZXJ0X3JlcXVlc3RzYCwgYGJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnRgLCBhbmQgYGJsa19pb2Nvc3RfaW5pdGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIGluaXRpYXRpbmcgYmxvY2sgcmVxdWVzdHMsIGluc2VydGluZyB0aGVtIGludG8gdGhlIEJGUSBzY2hlZHVsZXIsIHBvdGVudGlhbGx5IHRocm90dGxpbmcgSS9PIGJhc2VkIG9uIGNncm91cCBjb25zdHJhaW50cywgYW5kIGluaXRpYWxpemluZyBJL08gY29zdCBhY2NvdW50aW5nLiBNeSBpbnRlcnByZXRhdGlvbiBpcyB0aGF0IHRoZSByYWNlIGNvbmRpdGlvbiwgaWYgdHJpZ2dlcmVkLCBjb3VsZCBjb3JydXB0IHRoZSB0aW1pbmcgZGF0YSB1c2VkIGluIHRoZXNlIG9wZXJhdGlvbnMsIGxlYWRpbmcgdG8gaW5hY2N1cmF0ZSBwZXJmb3JtYW5jZSBtZXRyaWNzIGFuZCBwb3RlbnRpYWxseSBmbGF3ZWQgc2NoZWR1bGluZyBkZWNpc2lvbnMgd2l0aGluIHRoZSBibG9jayBsYXllci4KClVsdGltYXRlbHksIHRoaXMgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uYWxseSBpbXBvcnRhbnQgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGFmZmVjdGluZyB0aW1lc3RhbXBpbmcgb2YgYmxvY2sgcmVxdWVzdHMuIFRoZSBuZWVkIGZvciBhIGZpeCB3aXRoaW4gYGJsa190aW1lX2dldF9uc2Agd291bGQgc3VnZ2VzdCBpdCBpcyBhIGNvcmUgZmVhdHVyZSB0aGF0IGhhcyB0byBiZSBmaXhlZC4gSXTigJlzIGEgZGVmaW5pdGUgJiMzNDtzZXQtcmVzdWx0cyYjMzQ7IHNpdHVhdGlvbiwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiB0aGUgaW1wYWN0cyB0aGlzIGNhbiBoYXZlIG9uIG15IGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9TQ0hFRF9CRlEmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19tcV9zdGFydF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O2JmcV9pbnNlcnRfcmVxdWVzdHMmIzM0OywKICAgICYjMzQ7YmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudCYjMzQ7LAogICAgJiMzNDtibGtfaW9jb3N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgYmxrX3RpbWVfZ2V0X25zYCB3aGVyZSBgY3VyX2t0aW1lYCBjb3VsZCBiZSB6ZXJvZWQgYnkgcHJlLWVtcHRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBsYXllciB0aGF0IGFmZmVjdHMgdGltZXN0YW1waW5nIG9mIGJsb2NrIHJlcXVlc3RzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX21xX3N0YXJ0X3JlcXVlc3QmIzM0OywKICAgICYjMzQ7YmZxX2luc2VydF9yZXF1ZXN0cyYjMzQ7LAogICAgJiMzNDtibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50JiMzNDssCiAgICAmIzM0O2Jsa19pb2Nvc3RfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBibGtfdGltZV9nZXRfbnNgIHdoZXJlIGBjdXJfa3RpbWVgIGNvdWxkIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIHRoYXQgYWZmZWN0cyB0aW1lc3RhbXBpbmcgb2YgYmxvY2sgcmVxdWVzdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDoyNi4xNzA5MDE4ODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI0ODI4NzAwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9TQ0hFRF9CRlFcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX21xX3N0YXJ0X3JlcXVlc3RcIixcbiAgICBcImJmcV9pbnNlcnRfcmVxdWVzdHNcIixcbiAgICBcImJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnRcIixcbiAgICBcImJsa19pb2Nvc3RfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGJsa190aW1lX2dldF9uc2Agd2hlcmUgYGN1cl9rdGltZWAgY291bGQgYmUgemVyb2VkIGJ5IHByZS1lbXB0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdGhhdCBhZmZlY3RzIHRpbWVzdGFtcGluZyBvZiBibG9jayByZXF1ZXN0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjQ6MjYuMTcwOTEwMDM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzExOTUzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMmIyZGJjYmE1MTQwMDMxMzhmNTBlYWQ4YTExNDgyNGJiNTZlMDE1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDE2IDAzOjI0OjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcXG5pbmRleCBiOTk4YTc3NjFmYWYzNi4uMTdlMDM2NTZiYTlhYzMgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLmhcXG4rKysgYi9ibG9jay9ibGsuaFxcbkBAIC02ODksNiArNjg5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgcmVxX3JlZl9yZWFkKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuIHN0YXRpYyBpbmxpbmUgdTY0IGJsa190aW1lX2dldF9ucyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBibGtfcGx1ZyAqcGx1ZyA9IGN1cnJlbnQtXFx1MDAzZXBsdWc7XFxuK1xcdHU2NCBub3c7XFxuIFxcbiBcXHRpZiAoIXBsdWcgfHwgIWluX3Rhc2soKSlcXG4gXFx0XFx0cmV0dXJuIGt0aW1lX2dldF9ucygpO1xcbkBAIC02OTcsMTIgKzY5OCwxOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZClcXG4gXFx0ICogMCBjb3VsZCB2ZXJ5IHdlbGwgYmUgYSB2YWxpZCB0aW1lLCBidXQgcmF0aGVyIHRoYW4gZmxhZyBcXFwidGhpcyBpc1xcbiBcXHQgKiBhIHZhbGlkIHRpbWVzdGFtcFxcXCIgc2VwYXJhdGVseSwganVzdCBhY2NlcHQgdGhhdCB3ZSdsbCBkbyBhbiBleHRyYVxcbiBcXHQgKiBrdGltZV9nZXRfbnMoKSBpZiB3ZSBqdXN0IGhhcHBlbiB0byBnZXQgMCBhcyB0aGUgY3VycmVudCB0aW1lLlxcbitcXHQgKlxcbitcXHQgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC5cXG4gXFx0ICovXFxuLVxcdGlmICghcGx1Zy1cXHUwMDNlY3VyX2t0aW1lKSB7XFxuLVxcdFxcdHBsdWctXFx1MDAzZWN1cl9rdGltZSA9IGt0aW1lX2dldF9ucygpO1xcbitcXHRub3cgPSBSRUFEX09OQ0UocGx1Zy1cXHUwMDNlY3VyX2t0aW1lKTtcXG4rXFx0aWYgKCFub3cpIHtcXG4rXFx0XFx0bm93ID0ga3RpbWVfZ2V0X25zKCk7XFxuK1xcdFxcdFdSSVRFX09OQ0UocGx1Zy1cXHUwMDNlY3VyX2t0aW1lLCBub3cpO1xcbitcXHRcXHQvKiBFbnN1cmUgUEZfQkxPQ0tfVFMgaXMgc2V0IGFmdGVyIGN1cl9rdGltZS4gKi9cXG4rXFx0XFx0YmFycmllcigpO1xcbiBcXHRcXHRjdXJyZW50LVxcdTAwM2VmbGFncyB8PSBQRl9CTE9DS19UUztcXG4gXFx0fVxcbi1cXHRyZXR1cm4gcGx1Zy1cXHUwMDNlY3VyX2t0aW1lO1xcbitcXHRyZXR1cm4gbm93O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGt0aW1lX3QgYmxrX3RpbWVfZ2V0KHZvaWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjI2LjcwMjkxNjkxNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxOTUwODM5ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9zdGFydF9yZXF1ZXN0XCIsXG4gICAgXCJiZnFfaW5zZXJ0X3JlcXVlc3RzXCIsXG4gICAgXCJibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50XCIsXG4gICAgXCJibGtfaW9jb3N0X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBibGtfdGltZV9nZXRfbnNgIHdoZXJlIGBjdXJfa3RpbWVgIGNvdWxkIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIHRoYXQgYWZmZWN0cyB0aW1lc3RhbXBpbmcgb2YgYmxvY2sgcmVxdWVzdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjJiMmRiY2JhNTE0MDAzMTM4ZjUwZWFkOGExMTQ4MjRiYjU2ZTAxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDAzOjI0OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaFxuaW5kZXggYjk5OGE3NzYxZmFmMzYuLjE3ZTAzNjU2YmE5YWMzIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbisrKyBiL2Jsb2NrL2Jsay5oXG5AQCAtNjg5LDYgKzY4OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlcV9yZWZfcmVhZChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIHN0YXRpYyBpbmxpbmUgdTY0IGJsa190aW1lX2dldF9ucyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBibGtfcGx1ZyAqcGx1ZyA9IGN1cnJlbnQtXHUwMDNlcGx1ZztcbitcdHU2NCBub3c7XG4gXG4gXHRpZiAoIXBsdWcgfHwgIWluX3Rhc2soKSlcbiBcdFx0cmV0dXJuIGt0aW1lX2dldF9ucygpO1xuQEAgLTY5NywxMiArNjk4LDE4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGJsa190aW1lX2dldF9ucyh2b2lkKVxuIFx0ICogMCBjb3VsZCB2ZXJ5IHdlbGwgYmUgYSB2YWxpZCB0aW1lLCBidXQgcmF0aGVyIHRoYW4gZmxhZyBcInRoaXMgaXNcbiBcdCAqIGEgdmFsaWQgdGltZXN0YW1wXCIgc2VwYXJhdGVseSwganVzdCBhY2NlcHQgdGhhdCB3ZSdsbCBkbyBhbiBleHRyYVxuIFx0ICoga3RpbWVfZ2V0X25zKCkgaWYgd2UganVzdCBoYXBwZW4gdG8gZ2V0IDAgYXMgdGhlIGN1cnJlbnQgdGltZS5cbitcdCAqXG4rXHQgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC5cbiBcdCAqL1xuLVx0aWYgKCFwbHVnLVx1MDAzZWN1cl9rdGltZSkge1xuLVx0XHRwbHVnLVx1MDAzZWN1cl9rdGltZSA9IGt0aW1lX2dldF9ucygpO1xuK1x0bm93ID0gUkVBRF9PTkNFKHBsdWctXHUwMDNlY3VyX2t0aW1lKTtcbitcdGlmICghbm93KSB7XG4rXHRcdG5vdyA9IGt0aW1lX2dldF9ucygpO1xuK1x0XHRXUklURV9PTkNFKHBsdWctXHUwMDNlY3VyX2t0aW1lLCBub3cpO1xuK1x0XHQvKiBFbnN1cmUgUEZfQkxPQ0tfVFMgaXMgc2V0IGFmdGVyIGN1cl9rdGltZS4gKi9cbitcdFx0YmFycmllcigpO1xuIFx0XHRjdXJyZW50LVx1MDAzZWZsYWdzIHw9IFBGX0JMT0NLX1RTO1xuIFx0fVxuLVx0cmV0dXJuIHBsdWctXHUwMDNlY3VyX2t0aW1lO1xuK1x0cmV0dXJuIG5vdztcbiB9XG4gXG4gc3RhdGljIGlubGluZSBrdGltZV90IGJsa190aW1lX2dldCh2b2lkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjQ6MjYuNzAyOTIxNDU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExOTY5NjQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBEZXZpY2UgVGltZSBTdGFtcCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGJsb2NrL2Jsay5oYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYGJsa190aW1lX2dldF9uc2AsIGEgZnVuY3Rpb24gcmVsYXRlZCB0byBnZXR0aW5nIHRpbWVzdGFtcHMgZm9yIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggYWRkcyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFyb3VuZCBgcGx1Zy1cdTAwM2VjdXJfa3RpbWVgIGFuZCB0aHJvd3MgaW4gYSBgYmFycmllcigpYCBhZnRlciBgY3VyX2t0aW1lYCB0byBtYWtlIHN1cmUgYFBGX0JMT0NLX1RTYCBpcyBzZXQgKmFmdGVyKiB0aGUgYGt0aW1lYCB2YWx1ZS4gU291bmRzIGxpa2UgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgb3IgbWF5YmUgYSBwcmVlbXB0aW9uIHByb2JsZW0gd2hlcmUgYGN1cl9rdGltZWAgY291bGQgZ2V0IGNsb2JiZXJlZCBhbmQgZW5kIHVwIGFzIHplcm8uIEludGVyZXN0aW5nLi4uXG5cbk15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gY29uc2lkZXIgZnV6emluZyB0aGlzIGJlY2F1c2UgaXQncyBhIGNoYW5nZSB0byBmdW5jdGlvbmFsIGNvZGUuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgaXQncyBhIHByZXR0eSB0YXJnZXRlZCBzeW5jaHJvbml6YXRpb24gZml4LiBOb3QgYSBodWdlIHN0cnVjdHVyYWwgY2hhbmdlLCBqdXN0IGEgc21hbGwgYml0IG9mIHByb3RlY3Rpb24gYXJvdW5kIHRpbWVzdGFtcCBhY2Nlc3MuIEJlZm9yZSBJIGdldCB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgdGhlIGNhbGxpbmcgY29udGV4dHMgZm9yIGBibGtfdGltZV9nZXRfbnNgLiBLbm93aW5nIHdoZXJlIGl0J3MgdXNlZCB3aWxsIGhlbHAgbWUgZGVjaWRlIHdoZXRoZXIgZnV6emluZyBtYWtlcyBzZW5zZSBoZXJlIG9yIGlmIGEgbW9yZSB0YXJnZXRlZCBjb2RlIHJldmlldyBpcyB0aGUgc21hcnRlciBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjMwLjgyMjYyMDQ3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY0MDA3NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa190aW1lX2dldF9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZnEtY2dyb3VwLmM9MTIzPXN0YXRpYyB2b2lkIGJmcWdfc3RhdHNfdXBkYXRlX2dyb3VwX3dhaXRfdGltZShzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMpXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTI5LVxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMzA6XFx0bm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTEzMS1cXHRpZiAobm93IFxcdTAwM2Ugc3RhdHMtXFx1MDAzZXN0YXJ0X2dyb3VwX3dhaXRfdGltZSlcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz0xMzg9c3RhdGljIHZvaWQgYmZxZ19zdGF0c19zZXRfc3RhcnRfZ3JvdXBfd2FpdF90aW1lKHN0cnVjdCBiZnFfZ3JvdXAgKmJmcWcsXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQ2LVxcdFxcdHJldHVybjtcXG5ibG9jay9iZnEtY2dyb3VwLmM6MTQ3OlxcdHN0YXRzLVxcdTAwM2VzdGFydF9ncm91cF93YWl0X3RpbWUgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQ4LVxcdGJmcWdfc3RhdHNfbWFya193YWl0aW5nKHN0YXRzKTtcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNTI9c3RhdGljIHZvaWQgYmZxZ19zdGF0c19lbmRfZW1wdHlfdGltZShzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMpXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTU4LVxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxNTk6XFx0bm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTE2MC1cXHRpZiAobm93IFxcdTAwM2Ugc3RhdHMtXFx1MDAzZXN0YXJ0X2VtcHR5X3RpbWUpXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmM9MTcxPXZvaWQgYmZxZ19zdGF0c19zZXRfc3RhcnRfZW1wdHlfdGltZShzdHJ1Y3QgYmZxX2dyb3VwICpiZnFnKVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTE4NS1cXG5ibG9jay9iZnEtY2dyb3VwLmM6MTg2OlxcdHN0YXRzLVxcdTAwM2VzdGFydF9lbXB0eV90aW1lID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTE4Ny1cXHRiZnFnX3N0YXRzX21hcmtfZW1wdHkoc3RhdHMpO1xcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jPTE5MD12b2lkIGJmcWdfc3RhdHNfdXBkYXRlX2lkbGVfdGltZShzdHJ1Y3QgYmZxX2dyb3VwICpiZnFnKVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTE5NC1cXHRpZiAoYmZxZ19zdGF0c19pZGxpbmcoc3RhdHMpKSB7XFxuYmxvY2svYmZxLWNncm91cC5jOjE5NTpcXHRcXHR1NjQgbm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTE5Ni1cXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz0yMDQ9dm9pZCBiZnFnX3N0YXRzX3NldF9zdGFydF9pZGxlX3RpbWUoc3RydWN0IGJmcV9ncm91cCAqYmZxZylcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy0yMDctXFxuYmxvY2svYmZxLWNncm91cC5jOjIwODpcXHRzdGF0cy1cXHUwMDNlc3RhcnRfaWRsZV90aW1lID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTIwOS1cXHRiZnFnX3N0YXRzX21hcmtfaWRsaW5nKHN0YXRzKTtcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz0yNDE9dm9pZCBiZnFnX3N0YXRzX3VwZGF0ZV9jb21wbGV0aW9uKHN0cnVjdCBiZnFfZ3JvdXAgKmJmcWcsIHU2NCBzdGFydF90aW1lX25zLFxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTI0NC1cXHRzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMgPSBcXHUwMDI2YmZxZy1cXHUwMDNlc3RhdHM7XFxuYmxvY2svYmZxLWNncm91cC5jOjI0NTpcXHR1NjQgbm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTI0Ni1cXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9OTk4PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqYmZxX2NoZWNrX2ZpZm8oc3RydWN0IGJmcV9xdWV1ZSAqYmZxcSxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMTAwOS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jOjEwMTA6XFx0aWYgKHJxID09IGxhc3QgfHwgYmxrX3RpbWVfZ2V0X25zKCkgXFx1MDAzYyBycS1cXHUwMDNlZmlmb190aW1lKVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMTAxMS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9MTgyMD1zdGF0aWMgdm9pZCBiZnFfYmZxcV9oYW5kbGVfaWRsZV9idXN5X3N3aXRjaChzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTE4MzMtXFx0XFx0ICovXFxuYmxvY2svYmZxLWlvc2NoZWQuYzoxODM0OlxcdFxcdGFycml2ZWRfaW5fdGltZSA9ICBibGtfdGltZV9nZXRfbnMoKSBcXHUwMDNjPVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMTgzNS1cXHRcXHRcXHRiZnFxLVxcdTAwM2V0dGltZS5sYXN0X2VuZF9yZXF1ZXN0ICtcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9MjIwNj1zdGF0aWMgdm9pZCBiZnFfYWRkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy0yMjEyLVxcdGJvb2wgaW50ZXJhY3RpdmUgPSBmYWxzZTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjIyMTM6XFx0dTY0IG5vd19ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjIxNC1cXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjI2Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBtc2Vjc190b19qaWZmaWVzKDEwKSkpIHtcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjIyNjc6XFx0XFx0XFx0YmZxZC1cXHUwMDNlbGFzdF9lbXB0eV9vY2N1cGllZF9ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjI2OC1cXHRcXHRcXHQvKlxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz0zNDI5PXN0YXRpYyB2b2lkIGJmcV9yZXNldF9yYXRlX2NvbXB1dGF0aW9uKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzQzMi1cXHRpZiAocnEgIT0gTlVMTCkgeyAvKiBuZXcgcnEgZGlzcGF0Y2ggbm93LCByZXNldCBhY2NvcmRpbmdseSAqL1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6MzQzMzpcXHRcXHRiZnFkLVxcdTAwM2VsYXN0X2Rpc3BhdGNoID0gYmZxZC1cXHUwMDNlZmlyc3RfZGlzcGF0Y2ggPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTM0MzQtXFx0XFx0YmZxZC1cXHUwMDNlcGVha19yYXRlX3NhbXBsZXMgPSAxO1xcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz0zNTg4PXN0YXRpYyB2b2lkIGJmcV91cGRhdGVfcGVha19yYXRlKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgc3RydWN0IHJlcXVlc3QgKnJxKVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzU4OS17XFxuYmxvY2svYmZxLWlvc2NoZWQuYzozNTkwOlxcdHU2NCBub3dfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTM1OTEtXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTU1ODk9c3RhdGljIHZvaWQgYmZxX2luaXRfYmZxcShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIHN0cnVjdCBiZnFfcXVldWUgKmJmcXEsXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTU1OTIte1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NTU5MzpcXHR1NjQgbm93X25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy01NTk0LVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz01ODg5PXN0YXRpYyB2b2lkIGJmcV91cGRhdGVfaW9fdGhpbmt0aW1lKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNTkwMS1cXHRcXHRyZXR1cm47XFxuYmxvY2svYmZxLWlvc2NoZWQuYzo1OTAyOlxcdGVsYXBzZWQgPSBibGtfdGltZV9nZXRfbnMoKSAtIGJmcXEtXFx1MDAzZXR0aW1lLmxhc3RfZW5kX3JlcXVlc3Q7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy01OTAzLVxcdGVsYXBzZWQgPSBtaW5fdCh1NjQsIGVsYXBzZWQsIDJVTEwgKiBiZnFkLVxcdTAwM2ViZnFfc2xpY2VfaWRsZSk7XFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYxNDc9c3RhdGljIGJvb2wgX19iZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxOTMtXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MTk0OlxcdHJxLVxcdTAwM2VmaWZvX3RpbWUgPSBibGtfdGltZV9nZXRfbnMoKSArIGJmcWQtXFx1MDAzZWJmcV9maWZvX2V4cGlyZVtycV9pc19zeW5jKHJxKV07XFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTk1LVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnJxLVxcdTAwM2VxdWV1ZWxpc3QsIFxcdTAwMjZiZnFxLVxcdTAwM2VmaWZvKTtcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9NjM0Nj1zdGF0aWMgdm9pZCBiZnFfY29tcGxldGVkX3JlcXVlc3Qoc3RydWN0IGJmcV9xdWV1ZSAqYmZxcSwgc3RydWN0IGJmcV9kYXRhICpiZnFkKVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MzY5LVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjM3MDpcXHRub3dfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYzNzEtXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTY1ODI9c3RhdGljIHZvaWQgYmZxX3VwZGF0ZV9pbmplY3RfbGltaXQoc3RydWN0IGJmcV9kYXRhICpiZnFkLFxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02NTg0LXtcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY1ODU6XFx0dTY0IHRvdF90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCkgLSBiZnFkLVxcdTAwM2VsYXN0X2VtcHR5X29jY3VwaWVkX25zO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjU4Ni1cXHR1bnNpZ25lZCBpbnQgb2xkX2xpbWl0ID0gYmZxcS1cXHUwMDNlaW5qZWN0X2xpbWl0O1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTE5NDQ9c3RhdGljIHZvaWQgYmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIGJvb2wgdXNlX21lbWRlbGF5KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE5NDctXFx0Ym9vbCBjbGFtcDtcXG5ibG9jay9ibGstY2dyb3VwLmM6MTk0ODpcXHR1NjQgbm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmxrLWNncm91cC5jLTE5NDktXFx0dTY0IGV4cDtcXG4tLVxcbmJsb2NrL2Jsay1mbHVzaC5jPTEyND1zdGF0aWMgdm9pZCBibGtfYWNjb3VudF9pb19mbHVzaChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5ibG9jay9ibGstZmx1c2guYy0xMzAtXFx0cGFydF9zdGF0X2FkZChwYXJ0LCBuc2Vjc1tTVEFUX0ZMVVNIXSxcXG5ibG9jay9ibGstZmx1c2guYzoxMzE6XFx0XFx0ICAgICAgYmxrX3RpbWVfZ2V0X25zKCkgLSBycS1cXHUwMDNlc3RhcnRfdGltZV9ucyk7XFxuYmxvY2svYmxrLWZsdXNoLmMtMTMyLVxcdHBhcnRfc3RhdF91bmxvY2soKTtcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz04MDc9c3RhdGljIGludCBpb2NfYXV0b3BfaWR4KHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtODMxLVxcdHZyYXRlX3BjdCA9IGRpdjY0X3U2NChpb2MtXFx1MDAzZXZ0aW1lX2Jhc2VfcmF0ZSAqIDEwMCwgVlRJTUVfUEVSX1VTRUMpO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYzo4MzI6XFx0bm93X25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmxrLWlvY29zdC5jLTgzMy1cXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz0xMDQyPXN0YXRpYyB2b2lkIGlvY19ub3coc3RydWN0IGlvYyAqaW9jLCBzdHJ1Y3QgaW9jX25vdyAqbm93KVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTEwNDYtXFxuYmxvY2svYmxrLWlvY29zdC5jOjEwNDc6XFx0bm93LVxcdTAwM2Vub3dfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9ibGstaW9jb3N0LmMtMTA0OC1cXHRub3ctXFx1MDAzZW5vdyA9IGt0aW1lX3RvX3VzKG5vdy1cXHUwMDNlbm93X25zKTtcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz0yODE4PXN0YXRpYyB2b2lkIGlvY19ycW9zX2RvbmUoc3RydWN0IHJxX3FvcyAqcnFvcywgc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTI4NDAtXFxuYmxvY2svYmxrLWlvY29zdC5jOjI4NDE6XFx0b25fcV9ucyA9IGJsa190aW1lX2dldF9ucygpIC0gcnEtXFx1MDAzZWFsbG9jX3RpbWVfbnM7XFxuYmxvY2svYmxrLWlvY29zdC5jLTI4NDItXFx0cnFfd2FpdF9ucyA9IHJxLVxcdTAwM2VzdGFydF90aW1lX25zIC0gcnEtXFx1MDAzZWFsbG9jX3RpbWVfbnM7XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9NTgzPXN0YXRpYyB2b2lkIGJsa2NnX2lvbGF0ZW5jeV9kb25lX2JpbyhzdHJ1Y3QgcnFfcW9zICpycW9zLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjAzLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo2MDQ6XFx0bm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTYwNS1cXHR3aGlsZSAoYmxrZyBcXHUwMDI2XFx1MDAyNiBibGtnLVxcdTAwM2VwYXJlbnQpIHtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz02NTE9c3RhdGljIHZvaWQgYmxraW9sYXRlbmN5X3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY1Ni1cXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcG9zX2NzcztcXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NjU3OlxcdHU2NCBub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjU4LVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTk4Mj1zdGF0aWMgdm9pZCBpb2xhdGVuY3lfcGRfaW5pdChzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTg3LVxcdHN0cnVjdCBibGtfaW9sYXRlbmN5ICpibGtpb2xhdCA9IEJMS0lPTEFURU5DWShycW9zKTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTg4OlxcdHU2NCBub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTg5LVxcdGludCBjcHU7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zNzM9dm9pZCBibGtfcnFfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMzg0LVxcdHJxLVxcdTAwM2VpbnRlcm5hbF90YWcgPSBCTEtfTVFfTk9fVEFHO1xcbmJsb2NrL2Jsay1tcS5jOjM4NTpcXHRycS1cXHUwMDNlc3RhcnRfdGltZV9ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2Jsay1tcS5jLTM4Ni1cXHRibGtfY3J5cHRvX3JxX3NldF9kZWZhdWx0cyhycSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz00MDE9c3RhdGljIGlubGluZSB2b2lkIGJsa19tcV9iaW9faXNzdWVfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQwNS1cXHRpZiAodGVzdF9iaXQoUVVFVUVfRkxBR19CSU9fSVNTVUVfVElNRSwgXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2ZsYWdzKSlcXG5ibG9jay9ibGstbXEuYzo0MDY6XFx0XFx0YmlvLVxcdTAwM2Vpc3N1ZV90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmxrLW1xLmMtNDA3LSNlbmRpZlxcbi0tXFxuYmxvY2svYmxrLW1xLmM9NTM3PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqX19ibGtfbXFfYWxsb2NfcmVxdWVzdHMoc3RydWN0IGJsa19tcV9hbGxvY19kYXRhICpkYXRhKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtNTQ1LVxcdGlmIChibGtfcXVldWVfcnFfYWxsb2NfdGltZShxKSlcXG5ibG9jay9ibGstbXEuYzo1NDY6XFx0XFx0YWxsb2NfdGltZV9ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2Jsay1tcS5jLTU0Ny1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTYyNj1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTY1Mi1cXHRcXHRycV9saXN0X3BvcChcXHUwMDI2cGx1Zy1cXHUwMDNlY2FjaGVkX3Jxcyk7XFxuYmxvY2svYmxrLW1xLmM6NjUzOlxcdFxcdGJsa19tcV9ycV90aW1lX2luaXQocnEsIGJsa190aW1lX2dldF9ucygpKTtcXG5ibG9jay9ibGstbXEuYy02NTQtXFx0fVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9NzAwPXN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxuYmxvY2svYmxrLW1xLmMtNzIxLVxcdGlmIChibGtfcXVldWVfcnFfYWxsb2NfdGltZShxKSlcXG5ibG9jay9ibGstbXEuYzo3MjI6XFx0XFx0YWxsb2NfdGltZV9ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2Jsay1tcS5jLTcyMy1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTExMjE9c3RhdGljIGlubGluZSB2b2lkIGJsa19hY2NvdW50X2lvX3N0YXJ0KHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5ibG9jay9ibGstbXEuYy0xMTMwLVxcdHJlcS1cXHUwMDNlcnFfZmxhZ3MgfD0gUlFGX0lPX1NUQVQ7XFxuYmxvY2svYmxrLW1xLmM6MTEzMTpcXHRyZXEtXFx1MDAzZXN0YXJ0X3RpbWVfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9ibGstbXEuYy0xMTMyLVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MTE1OT1pbmxpbmUgdm9pZCBfX2Jsa19tcV9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJsa19zdGF0dXNfdCBlcnJvcilcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTExNjEtXFx0aWYgKGJsa19tcV9uZWVkX3RpbWVfc3RhbXAocnEpKVxcbmJsb2NrL2Jsay1tcS5jOjExNjI6XFx0XFx0X19ibGtfbXFfZW5kX3JlcXVlc3RfYWNjdChycSwgYmxrX3RpbWVfZ2V0X25zKCkpO1xcbmJsb2NrL2Jsay1tcS5jLTExNjMtXFxuLS1cXG5ibG9jay9ibGstbXEuYz0xMTk3PXZvaWQgYmxrX21xX2VuZF9yZXF1ZXN0X2JhdGNoKHN0cnVjdCBpb19jb21wX2JhdGNoICppb2IpXFxuLS1cXG5ibG9jay9ibGstbXEuYy0xMjA0LVxcdGlmIChpb2ItXFx1MDAzZW5lZWRfdHMpXFxuYmxvY2svYmxrLW1xLmM6MTIwNTpcXHRcXHRub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9ibGstbXEuYy0xMjA2LVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MTM2OD12b2lkIGJsa19tcV9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTEzNzUtXFx0ICAgICFibGtfcnFfaXNfcGFzc3Rocm91Z2gocnEpKSB7XFxuYmxvY2svYmxrLW1xLmM6MTM3NjpcXHRcXHRycS1cXHUwMDNlaW9fc3RhcnRfdGltZV9ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2Jsay1tcS5jLTEzNzctXFx0XFx0cnEtXFx1MDAzZXN0YXRzX3NlY3RvcnMgPSBibGtfcnFfc2VjdG9ycyhycSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zMTI0PXZvaWQgYmxrX21xX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMzE5Ny1cXHRcXHRycV9xb3NfdGhyb3R0bGUocnEtXFx1MDAzZXEsIGJpbyk7XFxuYmxvY2svYmxrLW1xLmM6MzE5ODpcXHRcXHRibGtfbXFfcnFfdGltZV9pbml0KHJxLCBibGtfdGltZV9nZXRfbnMoKSk7XFxuYmxvY2svYmxrLW1xLmMtMzE5OS1cXHRcXHRycS1cXHUwMDNlY21kX2ZsYWdzID0gYmlvLVxcdTAwM2ViaV9vcGY7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zMjU3PWJsa19zdGF0dXNfdCBibGtfaW5zZXJ0X2Nsb25lZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTMzMjktXFx0aWYgKHJldClcXG5ibG9jay9ibGstbXEuYzozMzMwOlxcdFxcdGJsa19hY2NvdW50X2lvX2RvbmUocnEsIGJsa190aW1lX2dldF9ucygpKTtcXG5ibG9jay9ibGstbXEuYy0zMzMxLVxcdHJldHVybiByZXQ7XFxuLS1cXG5ibG9jay9ibGstd2J0LmM9MjgwPXN0YXRpYyB1NjQgcndiX3N5bmNfaXNzdWVfbGF0KHN0cnVjdCBycV93YiAqcndiKVxcbi0tXFxuYmxvY2svYmxrLXdidC5jLTI4Ni1cXG5ibG9jay9ibGstd2J0LmM6Mjg3OlxcdHJldHVybiBibGtfdGltZV9nZXRfbnMoKSAtIGlzc3VlO1xcbmJsb2NrL2Jsay13YnQuYy0yODgtfVxcbi0tXFxuYmxvY2svYmxrLmg9Njg0PXN0YXRpYyBpbmxpbmUgaW50IHJlcV9yZWZfcmVhZChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuYmxvY2svYmxrLmgtNjg4LVxcbmJsb2NrL2Jsay5oOjY4OTpzdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZClcXG5ibG9jay9ibGsuaC02OTAte1xcbi0tXFxuYmxvY2svYmxrLmg9NzE1PXN0YXRpYyBpbmxpbmUga3RpbWVfdCBibGtfdGltZV9nZXQodm9pZClcXG5ibG9jay9ibGsuaC03MTYte1xcbmJsb2NrL2Jsay5oOjcxNzpcXHRyZXR1cm4gbnNfdG9fa3RpbWUoYmxrX3RpbWVfZ2V0X25zKCkpO1xcbmJsb2NrL2Jsay5oLTcxOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjMyLjc4NjYzODAyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDgzMDEyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpcyBvZiBibGtfdGltZV9nZXRfbnMgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGJsa190aW1lX2dldF9uc2AsIHdoaWNoLCBhcyBJIGtub3csIGlzIGEgcHJldHR5IGhlYXZpbHkgdXNlZCBmdW5jdGlvbiBpbiB0aGUgYmxvY2sgbGF5ZXIuIEl0J3MgYWxsIG92ZXIgdGhlIHBsYWNlLCBlc3BlY2lhbGx5IGluIHN0dWZmIGxpa2UgQkZRLCBibGstbXEsIGFuZCB0aG9zZSBvdGhlciBrZXkgY29tcG9uZW50cy4gVGhlIGNoYW5nZSBpcyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBgY3VyX2t0aW1lYCBjb3VsZCBnZXQgemVyb2VkIG91dCBkdWUgdG8gcHJlZW1wdGlvbiByaWdodCBhZnRlciBgUEZfQkxPQ0tfVFNgIGdldHMgc2V0LiBJdCBzb3VuZHMgZnVuY3Rpb25hbCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiV29ydGggZnV6emluZz9cIiBBYnNvbHV0ZWx5LlxuXG5UaGUgb3JpZ2luYWwgcGxhbiB3YXMgdG8gZm9jdXMgb24gYGJsa190aW1lX2dldF9uc2AgZGlyZWN0bHksIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBpdCdzIGlubGluZS4gQ3JhcCEgVGhhdCBtZWFucyBpdCB3b24ndCBzaG93IHVwIGFzIGEgc3ltYm9sIGJ5IGl0c2VsZi4gU28sIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cyB0byB0aGUgZnVuY3Rpb25zICp1c2luZyogaXQsIG9yIEkgY291bGQganVzdCByZXR1cm4gdGhhdCB0aGUgcGF0Y2ggaXMgd29ydGggZnV6emluZyBhbmQgZm9jdXMgb24gYmxvY2sgbGF5ZXIgZnVuY3Rpb25zIGluIGdlbmVyYWwuXG5cbkxldCdzIHNlZeKApiBJIGtub3cgYGJsa19tcV9zdWJtaXRfYmlvYCwgYGJsa19tcV9zdGFydF9yZXF1ZXN0YCwgYF9fYmxrX21xX2VuZF9yZXF1ZXN0YCwgYW5kIGBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4YCBhcmUgYWxsIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuIEFoLCB3YWl0LCBgYmxrX3RpbWVfZ2V0X25zYCAqaXMqIHVzZWQgYnkgYGJsa19tcV9zdWJtaXRfYmlvYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgZGlnIGludG8gYGJsa19tcV9zdWJtaXRfYmlvYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE4NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDozNy41MzQ5NDEzOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNzU3MzkwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfbXFfc3VibWl0X2Jpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q9MTk5ND1oaXN0b2dyYW06Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTIwMjAtICAgICAgICAgX19ycV9xb3NfdGhyb3R0bGUrMHgyNS8weDQwXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjIwMjE6ICAgICAgICAgYmxrX21xX3N1Ym1pdF9iaW8rMHgyYzMvMHg1YjBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMjAyMi0gICAgICAgICBfX3N1Ym1pdF9iaW8rMHhmZi8weDE5MFxcbi0tXFxuYmxvY2svYmxrLWNvcmUuYz02Mjc9c3RhdGljIHZvaWQgX19zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1jb3JlLmMtNjM0LVxcdGlmICghYmRldl90ZXN0X2ZsYWcoYmlvLVxcdTAwM2ViaV9iZGV2LCBCRF9IQVNfU1VCTUlUX0JJTykpIHtcXG5ibG9jay9ibGstY29yZS5jOjYzNTpcXHRcXHRibGtfbXFfc3VibWl0X2JpbyhiaW8pO1xcbmJsb2NrL2Jsay1jb3JlLmMtNjM2LVxcdH0gZWxzZSBpZiAobGlrZWx5KGJpb19xdWV1ZV9lbnRlcihiaW8pID09IDApKSB7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zMTAwPXN0YXRpYyBib29sIGJpb191bmFsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTMxMTEtLyoqXFxuYmxvY2svYmxrLW1xLmM6MzExMjogKiBibGtfbXFfc3VibWl0X2JpbyAtIENyZWF0ZSBhbmQgc2VuZCBhIHJlcXVlc3QgdG8gYmxvY2sgZGV2aWNlLlxcbmJsb2NrL2Jsay1tcS5jLTMxMTMtICogQGJpbzogQmlvIHBvaW50ZXIuXFxuLS1cXG5ibG9jay9ibGstbXEuYy0zMTIzLSAqL1xcbmJsb2NrL2Jsay1tcS5jOjMxMjQ6dm9pZCBibGtfbXFfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuYmxvY2svYmxrLW1xLmMtMzEyNS17XFxuLS1cXG5ibG9jay9ibGstbXEuaD00Mj10eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgYmxrX2luc2VydF90O1xcbi0tXFxuYmxvY2svYmxrLW1xLmgtNDQtXFxuYmxvY2svYmxrLW1xLmg6NDU6dm9pZCBibGtfbXFfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pO1xcbmJsb2NrL2Jsay1tcS5oLTQ2LWludCBibGtfbXFfcG9sbChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYmxrX3FjX3QgY29va2llLCBzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqaW9iLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MTc3MT1zdGF0aWMgYm9vbCBkaXNrX3pvbmVfd3BsdWdfc3VibWl0X2JpbyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTE4MTUtXFx0fSBlbHNlIHtcXG5ibG9jay9ibGstem9uZWQuYzoxODE2OlxcdFxcdGJsa19tcV9zdWJtaXRfYmlvKGJpbyk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMTgxNy1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjM5LjU1MjUyMDQyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODQwMDM1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgTGF5ZXIgUGVyZm9ybWFuY2UqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBgYmxrX21xX3N1Ym1pdF9iaW9gLiBUaGF0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBibG9jayBJL08gc3VibWlzc2lvbiBwYXRocy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSB0aW1pbmcgZGV0YWlscyB0byBwcm92aWRlIG1vcmUgY29tcHJlaGVuc2l2ZSBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBibG9jayBJL08gdGltZSBpcyBzcGVudC4gSSdtIHdvbmRlcmluZywgaG93IGlzIGBibGtfdGltZV9nZXRfbnNgIHVzZWQ/IEhtbSwgaXQncyBpbmxpbmUsIHNvIGl0J3Mgbm90IGEgcmVhZGlseSBhdmFpbGFibGUgc3ltYm9sIHRvIHRyYWNlLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuTGV0J3MgZmluZCB0aGUgcGxhY2VzIGBibGtfdGltZV9nZXRfbnNgIGlzIHVzZWQuIFNjYW5uaW5nLi4uIEFoYSEgYGJmcV9hZGRfcmVxdWVzdGAsIGBiZnFfdXBkYXRlX2lvX3RoaW5rdGltZWAsIGFuZCBgYmZxX2NvbXBsZXRlZF9yZXF1ZXN0YCBpbiB0aGUgQkZRIHNjaGVkdWxlciBhcmUgdXNpbmcgaXQuIEludGVyZXN0aW5nLiBBbmQgYWxzbyBgYmxrX2FjY291bnRfaW9fc3RhcnRgIGFuZCBgYmxrX2FjY291bnRfaW9fZG9uZWAuIFRob3NlIGFyZSBrZXkgZm9yIGFjY291bnRpbmcuIEkgYWxzbyBzZWUgaXQgaW4gYGJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdGAsIGFuZCBgYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eGAuIFRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIHNlZSB3aGF0IGBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3RgIGlzIGRvaW5nLiBJIHNob3VsZCBzdGFydCB0aGVyZSwgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSB0aW1lIGFjY291bnRpbmcgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDIxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjQzLjUzNjUyNjk0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE1MzM4MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEuYz01OTc9c3RhdGljIHN0cnVjdCByZXF1ZXN0ICpibGtfbXFfcnFfY2FjaGVfZmlsbChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTYyNS1cXG5ibG9jay9ibGstbXEuYzo2MjY6c3RhdGljIHN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuYmxvY2svYmxrLW1xLmMtNjI3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGJsa19vcGZfdCBvcGYsXFxuLS1cXG5ibG9jay9ibGstbXEuYz02NjE9c3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfb3BmX3Qgb3BmLFxcbi0tXFxuYmxvY2svYmxrLW1xLmMtNjY1LVxcbmJsb2NrL2Jsay1tcS5jOjY2NjpcXHRycSA9IGJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdChxLCBvcGYsIGZsYWdzKTtcXG5ibG9jay9ibGstbXEuYy02NjctXFx0aWYgKCFycSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDo0NS4zNTE4NzAzNTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk4NDE2NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgQmxvY2sgTGF5ZXIqKlxuXG5BbHJpZ2h0LCBgYmxrX21xX2FsbG9jX3JlcXVlc3RgIC0gdGhhdCdzIGEgc29saWQgZnVuY3Rpb24gdG8gc3RhcnQgd2l0aC4gTGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhIGdyYXNwIG9mIHdoYXQgdGhhdCdzIGRvaW5nIGJlZm9yZSB3ZSBzdGFydC4gTm93LCBmcm9tIHdoYXQgSSByZW1lbWJlciB0aGlzIGlzIHRoZSBwbGFjZSByZXF1ZXN0cyBhcmUgY3JlYXRlZCwgcXVldWVkLCBhbmQgYWxsb2NhdGVkIHRvIHRoZSBkcml2ZXIuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgaG93IHdlIGtpY2sgdGhvc2UgcmVxdWVzdHMgb2ZmLiBTbywgd2hhdCdzIG5leHQ/IEFoIHllcywgYGJsa19tcV9zdGFydF9yZXF1ZXN0YC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyB1cCB0by4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gZm9jdXMgb24gaG93IHRoaXMgcGFydCBvZiB0aGUgcHJvY2VzcyBnZXRzIGluaXRpYWxpemVkLCBhbmQgaG93IHdlIHN0YXJ0IGFjdHVhbGx5IG1vdmluZyB0aGUgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA5NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjQ4LjY1MDI4ODkzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwMDM1ODUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfbXFfc3RhcnRfcmVxdWVzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz0xMjg3PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJkX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTI5My1cXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYzoxMjk0OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTI5NS1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTEzNTg9RVhQT1JUX1NZTUJPTChibGtfbXFfY29tcGxldGVfcmVxdWVzdCk7XFxuLS1cXG5ibG9jay9ibGstbXEuYy0xMzYwLS8qKlxcbmJsb2NrL2Jsay1tcS5jOjEzNjE6ICogYmxrX21xX3N0YXJ0X3JlcXVlc3QgLSBTdGFydCBwcm9jZXNzaW5nIGEgcmVxdWVzdFxcbmJsb2NrL2Jsay1tcS5jLTEzNjItICogQHJxOiBQb2ludGVyIHRvIHJlcXVlc3QgdG8gYmUgc3RhcnRlZFxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMTM2Ny0gKi9cXG5ibG9jay9ibGstbXEuYzoxMzY4OnZvaWQgYmxrX21xX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmJsb2NrL2Jsay1tcS5jLTEzNjkte1xcbi0tXFxuYmxvY2svYmxrLW1xLmMtMTM5My19XFxuYmxvY2svYmxrLW1xLmM6MTM5NDpFWFBPUlRfU1lNQk9MKGJsa19tcV9zdGFydF9yZXF1ZXN0KTtcXG5ibG9jay9ibGstbXEuYy0xMzk1LVxcbi0tXFxuYmxvY2svYnNnLWxpYi5jPTI3Mj1zdGF0aWMgYmxrX3N0YXR1c190IGJzZ19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmJsb2NrL2JzZy1saWIuYy0yODItXFxuYmxvY2svYnNnLWxpYi5jOjI4MzpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbmJsb2NrL2JzZy1saWIuYy0yODQtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTEwNjI9c3NpemVfdCBwYXJ0X3N0YXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTExMDgtICogRm9yIGJpby1iYXNlZCBkZXZpY2UsIHN0YXJ0ZWQgZnJvbSBiZGV2X3N0YXJ0X2lvX2FjY3QoKTtcXG5ibG9jay9nZW5oZC5jOjExMDk6ICogRm9yIHJxLWJhc2VkIGRldmljZSwgc3RhcnRlZCBmcm9tIGJsa19tcV9zdGFydF9yZXF1ZXN0KCk7XFxuYmxvY2svZ2VuaGQuYy0xMTEwLSAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9hbWlmbG9wLmM9MTUwNT1zdGF0aWMgYmxrX3N0YXR1c190IGFtaWZsb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYy0xNTE0LVxcbmRyaXZlcnMvYmxvY2svYW1pZmxvcC5jOjE1MTU6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xcbmRyaXZlcnMvYmxvY2svYW1pZmxvcC5jLTE1MTYtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYz0yNTA9c3RhdGljIGJsa19zdGF0dXNfdCBhb2VibGtfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy0yNjAtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZkLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYzoyNjE6XFx0XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QoYmQtXFx1MDAzZXJxKTtcXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy0yNjItXFx0XFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYz04NDM9bmV4dGJ1ZihzdHJ1Y3QgYW9lZGV2ICpkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMtODYyLVxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJxLVxcdTAwM2VxdWV1ZWxpc3QpO1xcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jOjg2MzpcXHRcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMtODY0LVxcdFxcdGQtXFx1MDAzZWlwLnJxID0gcnE7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VkZXYuYz0xOTc9YW9lZGV2X2Rvd25kZXYoc3RydWN0IGFvZWRldiAqZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWRldi5jLTIzMi1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZycS1cXHUwMDNlcXVldWVsaXN0KTtcXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VkZXYuYzoyMzM6XFx0XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWRldi5jLTIzNC1cXHRcXHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIEJMS19TVFNfSU9FUlIpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9hdGFmbG9wLmM9MTUwND1zdGF0aWMgYmxrX3N0YXR1c190IGF0YWZsb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYy0xNTI1LVxcdHVuaXRbZHJpdmVdLmVycm9yX2NvdW50ID0gMDtcXG5kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYzoxNTI2OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGZkX3JlcXVlc3QpO1xcbmRyaXZlcnMvYmxvY2svYXRhZmxvcC5jLTE1MjctXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jPTI4NDg9c3RhdGljIGJsa19zdGF0dXNfdCBmbG9wcHlfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jLTI4NTAte1xcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM6Mjg1MTpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cXHUwMDNlcnEpO1xcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmMtMjg1Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NTE9c3RhdGljIGJsa19zdGF0dXNfdCBsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1Ny1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODU4OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODU5LVxcbi0tXFxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jPTMyNjg9c3RhdGljIGJsa19zdGF0dXNfdCBtdGlwX2lzc3VlX3Jlc2VydmVkX2NtZChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0zMjk5LVxcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYzozMzAwOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzMwMS1cXHRtdGlwX2lzc3VlX25vbl9uY3FfY29tbWFuZChkZC1cXHUwMDNlcG9ydCwgcnEtXFx1MDAzZXRhZyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM9MzMwNT1zdGF0aWMgYmxrX3N0YXR1c190IG10aXBfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzMyMC1cXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM6MzMyMTpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jLTMzMjItXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTExMTc9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfaGFuZGxlX2NtZChzdHJ1Y3QgbmJkX2NtZCAqY21kLCBpbnQgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTExNzAtXFx0ICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMTcxOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTcyLVxcdGlmICh1bmxpa2VseShuc29jay1cXHUwMDNlcGVuZGluZyBcXHUwMDI2XFx1MDAyNiBuc29jay1cXHUwMDNlcGVuZGluZyAhPSByZXEpKSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNjUyPXN0YXRpYyBibGtfc3RhdHVzX3QgbnVsbF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE2OTEtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTY5MjpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTY5My1cXG4tLVxcbmRyaXZlcnMvYmxvY2svcHMzZGlzay5jPTE4ND1zdGF0aWMgYmxrX3N0YXR1c190IHBzM2Rpc2tfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYy0xOTEtXFxuZHJpdmVycy9ibG9jay9wczNkaXNrLmM6MTkyOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVxcdTAwM2VycSk7XFxuZHJpdmVycy9ibG9jay9wczNkaXNrLmMtMTkzLVxcbi0tXFxuZHJpdmVycy9ibG9jay9yYmQuYz00NzI1PXN0YXRpYyB2b2lkIHJiZF9xdWV1ZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9ibG9jay9yYmQuYy00NzQyLVxcbmRyaXZlcnMvYmxvY2svcmJkLmM6NDc0MzpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9ibG9jay9yYmQuYy00NzQ0LVxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtY2x0LmM9MTExMz1zdGF0aWMgYmxrX3N0YXR1c190IHJuYmRfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1jbHQuYy0xMTQ2LVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLWNsdC5jOjExNDc6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLWNsdC5jLTExNDgtXFx0ZXJyID0gcm5iZF9jbGllbnRfeGZlcl9yZXF1ZXN0KGRldiwgcnEsIGl1KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svc3VudmRjLmM9NTM2PXN0YXRpYyBibGtfc3RhdHVzX3QgdmRjX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay9zdW52ZGMuYy01NDQtXFxuZHJpdmVycy9ibG9jay9zdW52ZGMuYzo1NDU6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QoYmQtXFx1MDAzZXJxKTtcXG5kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jLTU0Ni1cXG4tLVxcbmRyaXZlcnMvYmxvY2svc3dpbS5jPTUyNj1zdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3N3aW0uYy01MzYtXFxuZHJpdmVycy9ibG9jay9zd2ltLmM6NTM3OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuZHJpdmVycy9ibG9jay9zd2ltLmMtNTM4LVxcbi0tXFxuZHJpdmVycy9ibG9jay9zd2ltMy5jPTMwNz1zdGF0aWMgYmxrX3N0YXR1c190IHN3aW0zX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay9zd2ltMy5jLTMxOC1cXHR9XFxuZHJpdmVycy9ibG9jay9zd2ltMy5jOjMxOTpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbmRyaXZlcnMvYmxvY2svc3dpbTMuYy0zMjAtXFx0ZnMtXFx1MDAzZWN1cl9yZXEgPSByZXE7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjE0Nj1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcHJlcF9yZXEoc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNzQtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIxNzU6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTc2LVxcdHJldHVybiBCTEtfU1RTX09LO1xcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9NDA0PXN0YXRpYyBibGtfc3RhdHVzX3QgdmlydGJsa19wcmVwX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtNDIwLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjQyMTpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTQyMi1cXG4tLVxcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM9ODkzPXN0YXRpYyBibGtfc3RhdHVzX3QgYmxraWZfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTkwMS1cXHRyaW5mbyA9IGdldF9yaW5mbyhpbmZvLCBxaWQpO1xcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM6OTAyOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHFkLVxcdTAwM2VycSk7XFxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy05MDMtXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJpbmZvLVxcdTAwM2VyaW5nX2xvY2ssIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svejJyYW0uYz02OD1zdGF0aWMgYmxrX3N0YXR1c190IHoyX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay96MnJhbS5jLTc0LVxcbmRyaXZlcnMvYmxvY2svejJyYW0uYzo3NTpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbmRyaXZlcnMvYmxvY2svejJyYW0uYy03Ni1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz04ODU9c3RhdGljIGJsa19zdGF0dXNfdCB6bG9vcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MDYtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkwNzpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwOC1cXG4tLVxcbmRyaXZlcnMvY2Ryb20vZ2Ryb20uYz02MzQ9c3RhdGljIGJsa19zdGF0dXNfdCBnZHJvbV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvY2Ryb20vZ2Ryb20uYy02MzYte1xcbmRyaXZlcnMvY2Ryb20vZ2Ryb20uYzo2Mzc6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QoYmQtXFx1MDAzZXJxKTtcXG5kcml2ZXJzL2Nkcm9tL2dkcm9tLmMtNjM4LVxcbi0tXFxuZHJpdmVycy9tZC9kbS1ycS5jPTQ0MD1zdGF0aWMgdm9pZCBkbV9zdGFydF9yZXF1ZXN0KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IHJlcXVlc3QgKm9yaWcpXFxuZHJpdmVycy9tZC9kbS1ycS5jLTQ0MS17XFxuZHJpdmVycy9tZC9kbS1ycS5jOjQ0MjpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChvcmlnKTtcXG5kcml2ZXJzL21kL2RtLXJxLmMtNDQzLVxcbi0tXFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zX2Jsb2NrLmM9MTk3ND1zdGF0aWMgYmxrX3N0YXR1c190IG1zYl9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTE5OTAtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZtc2ItXFx1MDAzZXFfbG9jayk7XFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zX2Jsb2NrLmM6MTk5MTpcXHRcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTE5OTItXFx0XFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XFxuLS1cXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYy0xOTk5LVxcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jOjIwMDA6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYy0yMDAxLVxcdG1zYi1cXHUwMDNlcmVxID0gcmVxO1xcbi0tXFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmM9NzUwPXN0YXRpYyBibGtfc3RhdHVzX3QgbXNwcm9fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYy03NjQtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZtc2ItXFx1MDAzZXFfbG9jayk7XFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmM6NzY1OlxcdFxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVxcdTAwM2VycSk7XFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMtNzY2LVxcdFxcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xcbi0tXFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMtNzY5LVxcdG1zYi1cXHUwMDNlYmxvY2tfcmVxID0gYmQtXFx1MDAzZXJxO1xcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jOjc3MDpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cXHUwMDNlcnEpO1xcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTc3MS1cXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvcXVldWUuYz0yMzQ9c3RhdGljIGJsa19zdGF0dXNfdCBtbWNfbXFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3F1ZXVlLmMtMzA4LVxcbmRyaXZlcnMvbW1jL2NvcmUvcXVldWUuYzozMDk6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcXG5kcml2ZXJzL21tYy9jb3JlL3F1ZXVlLmMtMzEwLVxcbi0tXFxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYz0xMDY9c3RhdGljIHN0cnVjdCByZXF1ZXN0ICptdGRfbmV4dF9yZXF1ZXN0KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTExMi1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZycS1cXHUwMDNlcXVldWVsaXN0KTtcXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jOjExMzpcXHRcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYy0xMTQtXFx0XFx0cmV0dXJuIHJxO1xcbi0tXFxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYz0xNjY9c3RhdGljIGJsa19zdGF0dXNfdCBtdGRfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTE3Mi1cXHRpZiAoIWRldikge1xcbmRyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmM6MTczOlxcdFxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVxcdTAwM2VycSk7XFxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYy0xNzQtXFx0XFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XFxuLS1cXG5kcml2ZXJzL210ZC91YmkvYmxvY2suYz0xODA9c3RhdGljIGJsa19zdGF0dXNfdCB1YmlibG9ja19yZWFkKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL210ZC91YmkvYmxvY2suYy0xOTMtXFxuZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmM6MTk0OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmMtMTk1LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEyMTk9c3RhdGljIGlubGluZSB2b2lkIG52bWVfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTIyMi1cXHRcXHRudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QocnEpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMjIzOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTIyNC19XFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jPTMwMTg9c3RhdGljIGJsa19zdGF0dXNfdCBkb19kYXNkX3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTMwOTAtXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMDkxOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMDkyLVxcdHNwaW5fbG9jayhcXHUwMDI2YmxvY2stXFx1MDAzZXF1ZXVlX2xvY2spO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL3NjbV9ibGsuYz0yODE9c3RhdGljIGJsa19zdGF0dXNfdCBzY21fYmxrX3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTMxOS1cXHR9XFxuZHJpdmVycy9zMzkwL2Jsb2NrL3NjbV9ibGsuYzozMjA6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTMyMS1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE4NTM9c3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTkxOC1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxOTE5OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTkyMC1cXHRpZiAoYmxrX21xX2lzX3Jlc2VydmVkX3JxKHJlcSkpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmg9ODU3PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY29tcGxldGVfcmVxdWVzdF9kaXJlY3Qoc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaC04NjMtXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaDo4NjQ6dm9pZCBibGtfbXFfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtODY1LXZvaWQgYmxrX21xX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgYmxrX3N0YXR1c190IGVycm9yKTtcXG4tLVxcbnJ1c3Qva2VybmVsL2Jsb2NrL21xLnJzLTI2LS8vISBgUmVxdWVzdDo6ZW5kYCwgbWV0aG9kcy4gRmFpbHVyZSB0byBkbyBzbyBjYW4gbGVhZCB0byBkZWFkbG9jayBvciB0aW1lb3V0XFxucnVzdC9rZXJuZWwvYmxvY2svbXEucnM6Mjc6Ly8hIGVycm9ycy4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgQyBmdW5jdGlvbiBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGlzIGltcGxpY2l0bHlcXG5ydXN0L2tlcm5lbC9ibG9jay9tcS5ycy0yOC0vLyEgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgcXVldWVkIHdpdGggdGhlIGRyaXZlci5cXG4tLVxcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL3JlcXVlc3QucnM9ODk9ICAgIHB1YihjcmF0ZSkgdW5zYWZlIGZuIHN0YXJ0X3VuY2hlY2tlZCh0aGlzOiBcXHUwMDI2QVJlZlxcdTAwM2NTZWxmXFx1MDAzZSkge1xcbi0tXFxucnVzdC9rZXJuZWwvYmxvY2svbXEvcmVxdWVzdC5ycy05MS0gICAgICAgIC8vIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2Vzcy5cXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9yZXF1ZXN0LnJzOjkyOiAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6OmJsa19tcV9zdGFydF9yZXF1ZXN0KHRoaXMuMC5nZXQoKSkgfTtcXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9yZXF1ZXN0LnJzLTkzLSAgICB9XFxuLS1cXG5zYW1wbGVzL2JwZi90YXNrX2ZkX3F1ZXJ5X2tlcm4uYy02LVxcbnNhbXBsZXMvYnBmL3Rhc2tfZmRfcXVlcnlfa2Vybi5jOjc6U0VDKFxcXCJrcHJvYmUvYmxrX21xX3N0YXJ0X3JlcXVlc3RcXFwiKVxcbnNhbXBsZXMvYnBmL3Rhc2tfZmRfcXVlcnlfa2Vybi5jLTgtaW50IGJwZl9wcm9nMShzdHJ1Y3QgcHRfcmVncyAqY3R4KVxcbi0tXFxuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV91c2VyLmM9MzEwPWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4tLVxcbnNhbXBsZXMvYnBmL3Rhc2tfZmRfcXVlcnlfdXNlci5jLTM0OC1cXHQvKiB0ZXN0IHR3byBmdW5jdGlvbnMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgKl9rZXJuLmMgZmlsZSAqL1xcbnNhbXBsZXMvYnBmL3Rhc2tfZmRfcXVlcnlfdXNlci5jOjM0OTpcXHRDSEVDS19BTkRfUkVUKHRlc3RfZGVidWdfZnNfa3Byb2JlKDAsIFxcXCJibGtfbXFfc3RhcnRfcmVxdWVzdFxcXCIsXFxuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV91c2VyLmMtMzUwLVxcdFxcdFxcdFxcdFxcdCAgIEJQRl9GRF9UWVBFX0tQUk9CRSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDo1MC44NTA2NTQxODRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxODMwMjk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgTGF5ZXIgVGltZXN0YW1waW5nKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlIHRvIGFkZCBzb21lIGluc3RydW1lbnRhdGlvbiBhcm91bmQgYmxvY2sgcmVxdWVzdCB0aW1lc3RhbXBzLiBJIHRoaW5rIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAgYW5kIGBibGtfbXFfc3VibWl0X2Jpb2AgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBpbnZlc3RpZ2F0aW9uLiBUaGV5IHNlZW0gbGlrZSBrZXkgZW50cnkgcG9pbnRzLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIG9yIGVuYWJsZSB0byB1c2UgdGhlIHRpbWVzdGFtcHMgdGhhdCBJIHdhbnQ/IExldCBtZSBjaGVjayB0aGUgY29kZS4gSSBrbm93IHRoaXMgaXMgZGVlcCB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBzbyBJIHNob3VsZCBmaW5kIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGluIGBibG9jay9ibGsuaGAuIFNpbmNlIGBDT05GSUdfQkxPQ0tgIGlzIGEgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbiwgdGhhdCBzaG91bGQgYWx3YXlzIGJlIGVuYWJsZWQsIHNvIEkgd29uJ3Qgd29ycnkgYWJvdXQgdGhhdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUuIE5vdywgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYFBGX0JMT0NLX1RTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgaXMgaGFuZGxlZC4gTGV0J3MgZGlnIGludG8gYFBGX0JMT0NLX1RTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDo1NC43Njg5NjAyMjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTQ2OTExMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEZfQkxPQ0tfVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNvcmUuYz0xMjI2PXZvaWQgX19ibGtfZmx1c2hfcGx1ZyhzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcsIGJvb2wgZnJvbV9zY2hlZHVsZSlcXG4tLVxcbmJsb2NrL2Jsay1jb3JlLmMtMTI0MC1cXHRwbHVnLVxcdTAwM2VjdXJfa3RpbWUgPSAwO1xcbmJsb2NrL2Jsay1jb3JlLmM6MTI0MTpcXHRjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+UEZfQkxPQ0tfVFM7XFxuYmxvY2svYmxrLWNvcmUuYy0xMjQyLX1cXG4tLVxcbmJsb2NrL2Jsay5oPTY4OT1zdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZClcXG4tLVxcbmJsb2NrL2Jsay5oLTcwMS1cXHQgKlxcbmJsb2NrL2Jsay5oOjcwMjpcXHQgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC5cXG5ibG9jay9ibGsuaC03MDMtXFx0ICovXFxuLS1cXG5ibG9jay9ibGsuaC03MDctXFx0XFx0V1JJVEVfT05DRShwbHVnLVxcdTAwM2VjdXJfa3RpbWUsIG5vdyk7XFxuYmxvY2svYmxrLmg6NzA4OlxcdFxcdC8qIEVuc3VyZSBQRl9CTE9DS19UUyBpcyBzZXQgYWZ0ZXIgY3VyX2t0aW1lLiAqL1xcbmJsb2NrL2Jsay5oLTcwOS1cXHRcXHRiYXJyaWVyKCk7XFxuYmxvY2svYmxrLmg6NzEwOlxcdFxcdGN1cnJlbnQtXFx1MDAzZWZsYWdzIHw9IFBGX0JMT0NLX1RTO1xcbmJsb2NrL2Jsay5oLTcxMS1cXHR9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTEyMjA9c3RhdGljIGlubGluZSB2b2lkIGJsa19wbHVnX2ludmFsaWRhdGVfdHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEyMjUtXFx0XFx0cGx1Zy1cXHUwMDNlY3VyX2t0aW1lID0gMDtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEyMjY6XFx0Y3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gflBGX0JMT0NLX1RTO1xcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTIyNy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MTc1Mj1leHRlcm4gc3RydWN0IHBpZCAqY2FkX3BpZDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNzg3LVxcdFxcdFxcdFxcdFxcdFxcdCAqIFNlZSBtZW1hbGxvY19waW5fc2F2ZSgpICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE3ODg6I2RlZmluZSBQRl9CTE9DS19UU1xcdFxcdDB4MjAwMDAwMDBcXHQvKiBwbHVnIGhhcyB0cyB0aGF0IG5lZWRzIHVwZGF0aW5nICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE3ODktI2RlZmluZSBQRl9fSE9MRV9fNDAwMDAwMDBcXHQweDQwMDAwMDAwXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTcyNTI9c3RhdGljIHZvaWQgc2NoZWRfdXBkYXRlX3dvcmtlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyNTMte1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI1NDpcXHRpZiAodHNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9XUV9XT1JLRVIgfCBQRl9JT19XT1JLRVIgfCBQRl9CTE9DS19UUykpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjcyNTU6XFx0XFx0aWYgKHRzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9CTE9DS19UUylcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyNTYtXFx0XFx0XFx0YmxrX3BsdWdfaW52YWxpZGF0ZV90cyh0c2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDo1Ni41ODM2NTcxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwODQyMzE2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCbG9jayBMYXllciBUaW1lc3RhbXBpbmcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGNvcmUgb2YgaXQgbGllcyBpbiBgYmxrX3RpbWVfZ2V0X25zYCwgd2hpY2ggaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBibG9jayBsYXllci4gTm8gc3BlY2lhbCBjb25maWdzIGFyZSByZXF1aXJlZCwgd2hpY2ggaXMgYSBnb29kIHNpZ27igJRpdCdzIGEgZm91bmRhdGlvbmFsIGNoYW5nZS4gV2FpdCwgSSBhbHNvIHNlZSB0aGF0IGBQRl9CTE9DS19UU2AgaXMgaW52b2x2ZWQsIGFuZCB0aGF0J3MgdXNlZCBpbiBgc2NoZWRfdXBkYXRlX3dvcmtlcmAsIHJpZ2h0PyBTbywgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBmaXgsIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbi4gSSdtIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyBXb3J0aEZ1enppbmc7IGl0IHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJIGluaXRpYWxseSB0aG91Z2h0IG9mIGBibGtfbXFfc3VibWl0X2Jpb2AsIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAsIGFuZCBgYmxrX21xX2FsbG9jX3JlcXVlc3RgIC0gdGhleSdyZSBhbGwgZGlyZWN0bHkgcmVsYXRlZCBhbmQgaW1wb3J0YW50LiBCdXQsIEkgbmVlZCB0byByZW1lbWJlciB0aGUgcHJvbXB0OiBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlwiIFRoaXMgcmFjZSBjb25kaXRpb24gaGFwcGVucyBiZWNhdXNlIGBjdXJfa3RpbWVgIGluIGBibGtfdGltZV9nZXRfbnNgIGNhbiBiZSB6ZXJvZWQgZHVyaW5nIHByZWVtcHRpb24gd2hlbiBgUEZfQkxPQ0tfVFNgIGlzIHNldC4gSXQgbG9va3MgbGlrZSBpdCdzIGEgdGltZXN0YW1waW5nIGlzc3VlLlxuXG5NeSBmaXJzdCB0aG91Z2h0IHdhcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB3ZXJlIHRoZSBob3R0ZXN0IGFuZCBtb3N0IGltcG9ydGFudC4gQnV0LCBtYXliZSB0aGVyZSBhcmUgbGVzcyBob3QtcGF0aCBmdW5jdGlvbnMgdGhhdCB1c2UgaXQuIExldCdzIHNlZS4uLiBgYmZxX2FkZF9yZXF1ZXN0YCwgYGJmcV9jb21wbGV0ZWRfcmVxdWVzdGAgYXJlIHNwZWNpZmljIHRvIEJGUS4uLiB0aGVuIHRoZXJlIGFyZSB0aGUgY2dyb3VwIGFuZCBRb1MgZnVuY3Rpb25zOiBgYmZxZ19zdGF0c191cGRhdGVfaWRsZV90aW1lYCwgYGJmcWdfc3RhdHNfdXBkYXRlX2NvbXBsZXRpb25gLCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZ2AsIGBpb2NfYXV0b3BfaWR4YCwgYGJsa2NnX2lvbGF0ZW5jeV9kb25lX2Jpb2AsIGByd2Jfc3luY19pc3N1ZV9sYXRgLiBBbmQgd2hhdCBhYm91dCBgYmxrX21xX2FsbG9jX3JlcXVlc3RgPyBJIHNob3VsZCBwcm9iYWJseSBydWxlIHRoYXQgb3V0LlxuXG5UaGVyZSdzIG5vIHBhcnRpY3VsYXIgdGVzdCBvciBpb2N0bCB0aGF0IHdvdWxkIGJlIHNwZWNpZmljIHRvIHRoaXMsIGl0J3MgcmVhbGx5IHRoZSByYWNlIGNvbmRpdGlvbiB3aGVuIGBQRl9CTE9DS19UU2AgaXMgc2V0LCBhbmQgcHJlZW1wdGlvbiBoYXBwZW5zLCB1c3VhbGx5IGR1cmluZyBzY2hlZHVsaW5nLi4uIHNvIHByZXR0eSBtdWNoIGFueSBibG9jayBJTyBpcyBnb2luZyB0byB0cmlnZ2VyIHRoaXMgY29uZGl0aW9uLlxuXG5Pa2F5LCBsZXQncyBnZXQgYmFjayB0byB0aGUgZm9jdXMgc3ltYm9scy4gTm93LCBJICpjb3VsZCoganVzdCBsaXN0IGBibGtfbXFfc3VibWl0X2Jpb2AgYW5kIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAgYmVjYXVzZSB0aGV5ICphcmUqIHRoZSBtYWluIGZ1bmN0aW9ucyB1c2luZyBpdCwgZXZlbiB0aG91Z2ggdGhleSdyZSBob3QgcGF0aHMuIEFuZCB0aGUgcHJvbXB0IGlzIHJlYWxseSB0ZWxsaW5nIG1lIHRvIGJlIGNhcmVmdWwgaGVyZS4uLiBpZiBJIGxpc3QgYGJsa19tcV9zdWJtaXRfYmlvYCwgaXQncyBnb2luZyB0byBza2V3IHRoZSBkaXN0cmlidXRpb24uIEhtbW0uLi5XaGF0IGFib3V0IGBibGtfcGx1Z19pbnZhbGlkYXRlX3RzYD8gVGhhdCdzIGNhbGxlZCBmcm9tIGBzY2hlZF91cGRhdGVfd29ya2VyYC5cblxuUmlnaHQsIGxldCdzIHNlZSB3aGF0IHRoYXQgb25lIGRvZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTkzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjA1LjY2Nzg5MTY5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTYzNDY1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfcGx1Z19pbnZhbGlkYXRlX3RzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTIxMT1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX2ZsdXNoX3BsdWcoc3RydWN0IGJsa19wbHVnICpwbHVnLCBib29sIGFzeW5jKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMjE5LSAqL1xcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTIyMDpzdGF0aWMgaW5saW5lIHZvaWQgYmxrX3BsdWdfaW52YWxpZGF0ZV90cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEyMjEte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMjQ4PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfZmx1c2hfcGx1ZyhzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcsIGJvb2wgYXN5bmMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEyNTEtXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxMjUyOnN0YXRpYyBpbmxpbmUgdm9pZCBibGtfcGx1Z19pbnZhbGlkYXRlX3RzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTI1My17XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTcyNTI9c3RhdGljIHZvaWQgc2NoZWRfdXBkYXRlX3dvcmtlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzI1NS1cXHRcXHRpZiAodHNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX0JMT0NLX1RTKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI1NjpcXHRcXHRcXHRibGtfcGx1Z19pbnZhbGlkYXRlX3RzKHRzayk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy03MjU3LVxcdFxcdGlmICh0c2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfV1FfV09SS0VSKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNTowNy41Mzk1MzM4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQ4MDAwOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBMaXN0IG9mIEZ1bmN0aW9ucyBJbXBhY3RlZCBieSBgYmxrX3RpbWVfZ2V0X25zYCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYGJsa190aW1lX2dldF9uc2AgY2hhbmdlLiBUaGUga2V5IGlzIHRoYXQgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIGl0J3Mgbm90IGdvaW5nIHRvIHNob3cgdXAgYXMgYSBzdGFuZGFyZCBzeW1ib2wuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCAqdXNlKiBpdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgdGhlIGJyZWFkdGggb2YgaW1wYWN0LlxuXG5Jbml0aWFsbHksIEkgY29uc2lkZXJlZCBsaXN0aW5nIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBsZXNzIGdlbmVyaWMuIEkgdGhvdWdodCBJIHNob3VsZCBsaXN0IGBiZnFfYWRkX3JlcXVlc3RgLCBgYmZxX2NvbXBsZXRlZF9yZXF1ZXN0YCwgYGlvY19hdXRvcF9pZHhgLCBhbmQgYGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2dgLiBCdXQsIGFmdGVyIHJlY29uc2lkZXJpbmcsIEkgZGVjaWRlZCB0byByZW1vdmUgYGJmcV9jb21wbGV0ZWRfcmVxdWVzdGAuXG5cbkhvd2V2ZXIsIGFzIEkgdHJhY2VkIGZ1cnRoZXIsIEkgcmVhbGl6ZWQgYGJsa190aW1lX2dldF9uc2AgaXMgYWxzbyB1c2VkIGluIGBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3RgLCB3aGljaCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBibGtfbXFfYWxsb2NfcmVxdWVzdGAuIEkgbmVlZCB0byByZWZsZWN0IHRoaXMgZGVwZW5kZW5jeS4gQWZ0ZXIgZnVydGhlciB0aG91Z2h0LCBJJ20gZ29pbmcgdG8gcmVtb3ZlIGBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3RgIHNpbmNlIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLlxuXG5UaGVyZWZvcmUsIHRoZSBmaW5hbCBsaXN0IGZvciBjb25zaWRlcmF0aW9uIGlzOiBgYmZxX2FkZF9yZXF1ZXN0YCwgYGlvY19hdXRvcF9pZHhgLCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZ2AsIGFuZCBgYmxrX21xX2FsbG9jX3JlcXVlc3RgLiBUaGlzIGxpc3Qgc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZXJlIHRoaXMgY2hhbmdlIGluIGBibGtfdGltZV9nZXRfbnNgIG1pZ2h0IGJlIGZlbHQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaWYgYGJmcV9hZGRfcmVxdWVzdGAgaXMgc3RhdGljIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE0OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNToxNC4xODc1MzcyNjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTY0ODIwNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmZxX2FkZF9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JmcS1pb3NjaGVkLmM9MjEzND1zdGF0aWMgdm9pZCBiZnFfY2hlY2tfd2FrZXIoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgYmZxX3F1ZXVlICpiZnFxLFxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy0yMjA1LVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM6MjIwNjpzdGF0aWMgdm9pZCBiZnFfYWRkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjIwNy17XFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTMxMjc9c3RhdGljIHN0cnVjdCBiZnFfcXVldWUgKmJmcV9tZXJnZV9iZnFxcyhzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTMxNjktXFx0ICogdG8gYmUgd2VpZ2h0LXJhaXNlZCAod2hpY2ggbWF5IGhhcHBlbiBiZWNhdXNlIEVRTSBtYXkgbWVyZ2VcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjMxNzA6XFx0ICogYmZxcSBldmVuIGJlZm9yZSBiZnFfYWRkX3JlcXVlc3QgaXMgZXhlY3V0ZWQgZm9yIHRoZSBmaXJzdFxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzE3MS1cXHQgKiB0aW1lIGZvciBiZnFxKS4gSGFuZGxpbmcgdGhpcyBjYXNlIHdvdWxkIGhvd2V2ZXIgYmUgdmVyeVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz01OTQyPXN0YXRpYyB2b2lkIGJmcV91cGRhdGVfaGFzX3Nob3J0X3R0aW1lKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjA1MS1cXHQgKiB3YWtlciBxdWV1ZSBpcyBkZWZpbmVkIGluIHRoZSBjb21tZW50cyBpblxcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjA1MjpcXHQgKiBiZnFfYWRkX3JlcXVlc3QoKSkuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gc3RhcnQgc29vbmVyXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MDUzLVxcdCAqIHRvIGJvb3N0IHRocm91Z2hwdXQgbW9yZSBlZmZlY3RpdmVseSwgYnkgaW5qZWN0aW5nIHRoZSBJL09cXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9NjE0Nz1zdGF0aWMgYm9vbCBfX2JmcV9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjE5MC1cXHR3YWl0aW5nID0gYmZxcSBcXHUwMDI2XFx1MDAyNiBiZnFfYmZxcV93YWl0X3JlcXVlc3QoYmZxcSk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MTkxOlxcdGJmcV9hZGRfcmVxdWVzdChycSk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTkyLVxcdGlkbGVfdGltZXJfZGlzYWJsZWQgPSB3YWl0aW5nIFxcdTAwMjZcXHUwMDI2ICFiZnFfYmZxcV93YWl0X3JlcXVlc3QoYmZxcSk7XFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYzNDY9c3RhdGljIHZvaWQgYmZxX2NvbXBsZXRlZF9yZXF1ZXN0KHN0cnVjdCBiZnFfcXVldWUgKmJmcXEsIHN0cnVjdCBiZnFfZGF0YSAqYmZxZClcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjU3Ni0gKiBwaWVjZXMgb2YgY29kZSB0aGF0IGltcGxlbWVudCB0aGVzZSBzdGVwczogdGhlIGJyYW5jaCBoYW5kbGluZyB0aGVcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY1Nzc6ICogdHJhbnNpdGlvbiBmcm9tIGVtcHR5IHRvIG5vbiBlbXB0eSBpbiBiZnFfYWRkX3JlcXVlc3QoKSwgdGhlIGJyYW5jaFxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjU3OC0gKiBoYW5kbGluZyBpbmplY3Rpb24gaW4gYmZxX3NlbGVjdF9xdWV1ZSgpLCBhbmQgdGhlIGZ1bmN0aW9uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjE2LjAwNDAyNDgwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDQ0MzgyNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIFJlcXVlc3QgRmxvdyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gbWFwIG91dCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGluIHRoaXMgSS9PIHBhdGguIGBiZnFfYWRkX3JlcXVlc3RgIGlzIHN0YXRpYywgc28gSSBjYW4ndCBkaXJlY3RseSBsaXN0IHRoYXQgYXMgYSBzdGFydGluZyBwb2ludC4gTGV0J3Mgc2VlLi4uIEkgY2FuIGxpc3QgYF9fYmZxX2luc2VydF9yZXF1ZXN0YCwgcmlnaHQ/IEFuZCBmb2xsb3dpbmcgdGhhdCwgSSBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSBgaW9jX2F1dG9wX2lkeGAgYW5kIGBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnYCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2wgZmxvdy4gV2FpdCBhIG1pbnV0ZSwgSSBhbHNvIHNlZSB0aGF0IGBibGtfdGltZV9nZXRfbnNgIGlzIHVzZWQgaW4gYGJsa19hY2NvdW50X2lvX3N0YXJ0YC4gQW5kICp0aGF0KiBvbmUgaXMgc3RhdGljIGlubGluZSwgY2FsbGVkIGZyb20gYGJsa19tcV9zdGFydF9yZXF1ZXN0YC4gVGhhdCdzIGltcG9ydGFudCFcblxuVGhlcmVmb3JlIEknbGwgbGlzdCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGFuZCBgYmxrX21xX3N1Ym1pdF9iaW9gLiBUaGV5IGhhdmUgdG8gYmUgaW4gdGhlcmUsIGV2ZW4gaWYgdGhleSdyZSBjb25zaWRlcmVkIGhvdCBwYXRocywgYmVjYXVzZSB0aGV5J3JlIHRoZSBtYWpvciBlbnRyeSBwb2ludHMgZnJvbSB0aGUgYmxvY2sgbGF5ZXIuIE5vdywgZ2l2ZW4gdGhhdCBgX19iZnFfaW5zZXJ0X3JlcXVlc3RgIGlzIHN0YXRpYywgSSBzaG91bGQgbGlzdCBgYmZxX2luc2VydF9yZXF1ZXN0YCBpdHNlbGYsIHdoaWNoIGlzIHRoZSBlbGV2YXRvciBvcGVyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgb25lIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6MjEuMDQ4NDEwMTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjQ4NTc3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmZxX2luc2VydF9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JmcS1pb3NjaGVkLmM9MjQ5OD1zdGF0aWMgdm9pZCBiZnFfcmVxdWVzdF9tZXJnZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTI1NTItICogdGhlIGZ1bmN0aW9uIHRoYXQgZmlsbHMgdGhpcyBoYXNoIHRhYmxlIChlbHZfcnFoYXNoX2FkZCkgaXMgY2FsbGVkXFxuYmxvY2svYmZxLWlvc2NoZWQuYzoyNTUzOiAqIG9ubHkgYnkgYmZxX2luc2VydF9yZXF1ZXN0LlxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjU1NC0gKi9cXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9NjEzOD1zdGF0aWMgdm9pZCBiZnFxX3JlcXVlc3RfZnJlZWQoc3RydWN0IGJmcV9xdWV1ZSAqYmZxcSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjE0Ni0vKiByZXR1cm5zIHRydWUgaWYgaXQgY2F1c2VzIHRoZSBpZGxlIHRpbWVyIHRvIGJlIGRpc2FibGVkICovXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MTQ3OnN0YXRpYyBib29sIF9fYmZxX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgc3RydWN0IHJlcXVlc3QgKnJxKVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjE0OC17XFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYyMzQ9c3RhdGljIHN0cnVjdCBiZnFfcXVldWUgKmJmcV9pbml0X3JxKHN0cnVjdCByZXF1ZXN0ICpycSk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjM1LVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjIzNjpzdGF0aWMgdm9pZCBiZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyMzctXFx0XFx0XFx0ICAgICAgIGJsa19pbnNlcnRfdCBmbGFncylcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI2NC1cXHR9IGVsc2Uge1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjI2NTpcXHRcXHRpZGxlX3RpbWVyX2Rpc2FibGVkID0gX19iZnFfaW5zZXJ0X3JlcXVlc3QoYmZxZCwgcnEpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI2Ni1cXHRcXHQvKlxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI2Ny1cXHRcXHQgKiBVcGRhdGUgYmZxcSwgYmVjYXVzZSwgaWYgYSBxdWV1ZSBtZXJnZSBoYXMgb2NjdXJyZWRcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjYyNjg6XFx0XFx0ICogaW4gX19iZnFfaW5zZXJ0X3JlcXVlc3QsIHRoZW4gcnEgaGFzIGJlZW5cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyNjktXFx0XFx0ICogcmVkaXJlY3RlZCBpbnRvIGEgbmV3IHF1ZXVlLlxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjkxLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjI5MjpzdGF0aWMgdm9pZCBiZnFfaW5zZXJ0X3JlcXVlc3RzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI5My1cXHRcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MzAwLVxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJxLVxcdTAwM2VxdWV1ZWxpc3QpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjMwMTpcXHRcXHRiZnFfaW5zZXJ0X3JlcXVlc3QoaGN0eCwgcnEsIGZsYWdzKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYzMDItXFx0fVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz03NTkzPXN0YXRpYyBzdHJ1Y3QgZWxldmF0b3JfdHlwZSBpb3NjaGVkX2JmcV9tcSA9IHtcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzU5OS1cXHRcXHQuZXhpdF9pY3FcXHRcXHQ9IGJmcV9leGl0X2ljcSxcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjc2MDA6XFx0XFx0Lmluc2VydF9yZXF1ZXN0c1xcdD0gYmZxX2luc2VydF9yZXF1ZXN0cyxcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTc2MDEtXFx0XFx0LmRpc3BhdGNoX3JlcXVlc3RcXHQ9IGJmcV9kaXNwYXRjaF9yZXF1ZXN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNToyMi45NzMyNzgxMTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMDQzODA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBUYXJnZXRlZCBCbG9jayBJL08gVHJhY2luZyoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHNvbWUga2V5IGZ1bmN0aW9ucyBmb3IgdHJhY2luZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gaW5jbHVkZSBgYmZxX2luc2VydF9yZXF1ZXN0c2AsIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAsIGFuZCBgYmxrX21xX3N1Ym1pdF9iaW9gLiBXYWl0IGEgbWludXRlLCBgYmxrX21xX3N1Ym1pdF9iaW9gIGlzIGp1c3QgKnRvbyogZ2VuZXJpYy4gVGhhdCdzIGEgaHVnZSBob3QgcGF0aCwgYW5kIGluY2x1ZGluZyBpdCB3b3VsZCBsaWtlbHkgdGhyb3cgb2ZmIGFueSBtZWFuaW5nZnVsIGRpc3RyaWJ1dGlvbiBhbmFseXNpcy4gXG5cblNvLCBJIG5lZWQgdG8gbmFycm93IHRoaXMgZG93biwgZXZlbiB0aG91Z2ggSSBkaWQgY29uc2lkZXIgYGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhgIGFuZCBgYmxrX21xX2FsbG9jX2NhY2hlZF9yZXF1ZXN0YC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXIgLSBhdm9pZCB0aG9zZSBnZW5lcmljLCBjb21tb24gZnVuY3Rpb25zIHRoYXQgd291bGQgc2tldyB0aGUgcmVzdWx0cy4gT2theSwgZm9jdXNpbmcgYWdhaW4sIGxldCdzIGxpc3QgYGJmcV9pbnNlcnRfcmVxdWVzdHNgLCBgaW9jX2F1dG9wX2lkeGAsIGFuZCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZ2AuIFRob3NlIHNlZW0gc3BlY2lmaWMgZW5vdWdoIHRvIHByb3ZpZGUgZ29vZCBpbnNpZ2h0IHdpdGhvdXQgYmVpbmcgb3Zlcmx5IHViaXF1aXRvdXMuIEknbGwgZG91YmxlLWNoZWNrIGBpb2NfYXV0b3BfaWR4YCB0byBjb25maXJtIGl0cyBzdWl0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6MjcuMjgzNzE4ODU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzNDg1NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvY19hdXRvcF9pZHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWlvY29zdC5jPTc2NT1zdGF0aWMgdm9pZCBpb2NfcmVmcmVzaF9wZXJpb2RfdXMoc3RydWN0IGlvYyAqaW9jKVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTgwNi0gKi9cXG5ibG9jay9ibGstaW9jb3N0LmM6ODA3OnN0YXRpYyBpbnQgaW9jX2F1dG9wX2lkeChzdHJ1Y3QgaW9jICppb2MsIHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy04MDgte1xcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTkxMj1zdGF0aWMgYm9vbCBpb2NfcmVmcmVzaF9wYXJhbXNfZGlzayhzdHJ1Y3QgaW9jICppb2MsIGJvb2wgZm9yY2UsXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtOTE5LVxcbmJsb2NrL2Jsay1pb2Nvc3QuYzo5MjA6XFx0aWR4ID0gaW9jX2F1dG9wX2lkeChpb2MsIGRpc2spO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy05MjEtXFx0cCA9IFxcdTAwMjZhdXRvcFtpZHhdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNToyOS4xODcyMTAzMTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwNjA0NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBTdGF0aWMgRGF0YSBTdHJ1Y3R1cmVzKipcblxuQWxyaWdodCwgc28gYGlvY19hdXRvcF9pZHhgIGlzIGRlZmluZWQgYXMgc3RhdGljLiBBbmQgSSdtIHNlZWluZyB0aGF0IGBpb2NfcmVmcmVzaF9wYXJhbXNfZGlza2AgaXMgYWxzbyBhIHN0YXRpYyBlbGVtZW50LiAgR2l2ZW4gdGhhdCBib3RoIGFyZSBzdGF0aWMsIHRoZXJlJ3MgbGlrZWx5IHNvbWUgaW1wb3J0YW50IGludGVyYWN0aW9uIG9yIHJlbGF0aW9uc2hpcCB0byBleHBsb3JlLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGBpb2NfcmVmcmVzaF9wYXJhbXNfZGlza2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0J3Mgc3RvcmluZywgaG93IGl0J3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBzdGF0aWMgbmF0dXJlIGhhcyBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6MzMuODkzMjU3OTc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUzMDk1NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvY19yZWZyZXNoX3BhcmFtc19kaXNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1pb2Nvc3QuYz04OTc9c3RhdGljIHZvaWQgaW9jX3JlZnJlc2hfbGNvZWZzKHN0cnVjdCBpb2MgKmlvYylcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy05MTEtICovXFxuYmxvY2svYmxrLWlvY29zdC5jOjkxMjpzdGF0aWMgYm9vbCBpb2NfcmVmcmVzaF9wYXJhbXNfZGlzayhzdHJ1Y3QgaW9jICppb2MsIGJvb2wgZm9yY2UsXFxuYmxvY2svYmxrLWlvY29zdC5jLTkxMy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmM9OTUxPXN0YXRpYyBib29sIGlvY19yZWZyZXNoX3BhcmFtcyhzdHJ1Y3QgaW9jICppb2MsIGJvb2wgZm9yY2UpXFxuYmxvY2svYmxrLWlvY29zdC5jLTk1Mi17XFxuYmxvY2svYmxrLWlvY29zdC5jOjk1MzpcXHRyZXR1cm4gaW9jX3JlZnJlc2hfcGFyYW1zX2Rpc2soaW9jLCBmb3JjZSwgaW9jLVxcdTAwM2VycW9zLmRpc2spO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy05NTQtfVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTI4OTE9c3RhdGljIGludCBibGtfaW9jb3N0X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtMjkyOS1cXHRpb2MtXFx1MDAzZWF1dG9wX2lkeCA9IEFVVE9QX0lOVkFMSUQ7XFxuYmxvY2svYmxrLWlvY29zdC5jOjI5MzA6XFx0aW9jX3JlZnJlc2hfcGFyYW1zX2Rpc2soaW9jLCB0cnVlLCBkaXNrKTtcXG5ibG9jay9ibGstaW9jb3N0LmMtMjkzMS1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjM1Ljg0NjM2MDIwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM2MDAyNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyBhYm91dCB0aGVtIGZyb20gYSBzeXN0ZW0tbGV2ZWwgcGVyc3BlY3RpdmUsIGxpa2UgSSBhbHdheXMgZG86XG5cbioqQ29uc2lkZXJpbmcgQmxvY2sgSS9PIENvc3QgYW5kIFRocm90dGxpbmcqKlxuXG5SaWdodCwgYGJsa19pb2Nvc3RfaW5pdGAgLSB0aGF0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZ2V0dGluZyBhIGhhbmRsZSBvbiBJL08gY29zdHMuIFdlIG5lZWQgYSB3YXkgdG8gdHJhY2sgdGhlIHJlc291cmNlcyB1c2VkIGJ5IGJsb2NrIGRldmljZXMgYW5kIGdyb3VwcyBmb3IgcHJvcGVyIGFjY291bnRpbmcgYW5kIGNvbnRyb2wuIFRoYXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYSByb2J1c3QgSS9PIHNjaGVkdWxlciBhbmQgY29udHJvbCBzeXN0ZW0uXG5cbk5vdywgbGV0J3Mgc2VlLCB3aGF0IGFib3V0IGBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnYD8gVGhhdCdzIHRoZSBwYXJ0IHdoZXJlIHdlIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggdGhlIGNvc3QgaW5mb3JtYXRpb24sIGlzbid0IGl0PyBJdCBzb3VuZHMgbGlrZSB0aGUgZnVuY3Rpb24gdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGFueSB0aHJvdHRsaW5nIGxpbWl0cyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkLiBJdCdzIHRoZSBwb2ludCB3aGVyZSB3ZSBtYWtlIHRoZSBjcml0aWNhbCBkZWNpc2lvbiB0byBlaXRoZXIgYWxsb3cgYW4gSS9PIHJlcXVlc3QgdG8gZ28gdGhyb3VnaCBvciBhcHBseSB0aGUgYnJha2VzLCBiYXNlZCBvbiB0aGUgcmVzb3VyY2UgY29uc3VtcHRpb24gb2YgdGhlIGJsb2NrIGdyb3VwLiBJbnRlcmVzdGluZy4gSSB3b25kZXIgYWJvdXQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcy4gRG9lcyBpdCBhcHBseSBkZWxheXM/IFByaW9yaXRpemF0aW9uIHNoaWZ0cz8gT3IgbWF5YmUgZXZlbiByZXF1ZXN0IHJlamVjdGlvbiBpbiBleHRyZW1lIGNhc2VzPyBJdCBwcm9iYWJseSBkZXBlbmRzIG9uIGhvdyB0aGUgdGhyb3R0bGluZyBzeXN0ZW0gaXMgZGVzaWduZWQsIHRoZSBjb25zdHJhaW50cyBzZXQsIGFuZCB3aGF0J3MgYmVzdCBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgc3RhYmlsaXR5LiBEZWZpbml0ZWx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAyMSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjQwLjA4MjM2NjE1NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MjQxMzg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz0xODg3PXN0YXRpYyB2b2lkIGJsa2NnX3NjYWxlX2RlbGF5KHN0cnVjdCBibGtjZ19ncSAqYmxrZywgdTY0IG5vdylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xOTQzLSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxOTQ0OnN0YXRpYyB2b2lkIGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2coc3RydWN0IGJsa2NnX2dxICpibGtnLCBib29sIHVzZV9tZW1kZWxheSlcXG5ibG9jay9ibGstY2dyb3VwLmMtMTk0NS17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MjAxMD12b2lkIGJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnQodm9pZClcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMDMzLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMDM0OlxcdGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2coYmxrZywgdXNlX21lbWRlbGF5KTtcXG5ibG9jay9ibGstY2dyb3VwLmMtMjAzNS1cXHRibGtnX3B1dChibGtnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6NDIuNDU0ODIwMjI4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Njc3MzA1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHNlZS4gYGJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnRgIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY2FuZGlkYXRlOyB0aGF0IGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gTm93LCBJIHNob3VsZCBtYWtlIGEgcXVpY2sgbGlzdCBvZiB3aGF0IEknbSBjb25zaWRlcmluZy4gYGJmcV9pbnNlcnRfcmVxdWVzdHNgLCBgYmxrX2lvY29zdF9pbml0YCwgYW5kLCBhcyBJIHNhaWQsIGBibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50YC4gV2FpdCBhIG1pbnV0ZSwgYGJsa190aW1lX2dldF9uc2AgaXMgdXNlZCB3aXRoaW4gYGJsa19tcV9zdGFydF9yZXF1ZXN0YCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgY2FsbGVkIGZvciAqZXZlcnkqIHNpbmdsZSByZXF1ZXN0LlxuXG5JZiBJIGRvbid0IGV4cGxpY2l0bHkgbGlzdCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgLCB0aGUgZnV6emVyIG1pZ2h0IG92ZXJsb29rIGl0LCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBpdCBmb2N1c2VzIHRoZXJlLiBCdXQsIG9uIHRoZSBvdGhlciBoYW5kLCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGlzIGEgaG90IHBhdGggLSB0aGF0IGlzIGdvaW5nIHRvIGJlIHVzZWQgYSAqbG90Ki4gR2l2ZW4gdGhhdCBpdCdzIHRoZSBtb3N0IGRpcmVjdCBjYWxsZXIgb2YgdGhlIGNvZGUgSSdtIGludGVyZXN0ZWQgaW4sIEknbGwgbGlzdCBpdCBhbnl3YXkuXG5cbkhtbSwgd2FpdC4gSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2ggaGVyZS4gYGJsa190aW1lX2dldF9uc2AgaXMgYWxzbyB1c2VkIGluIGBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4YC4gT2theSwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4YCBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1ODAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6NDcuMjIyNTUzMjU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMzMjI1MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLW1xLmM9Njk4PUVYUE9SVF9TWU1CT0woYmxrX21xX2FsbG9jX3JlcXVlc3QpO1xcbmJsb2NrL2Jsay1tcS5jLTY5OS1cXG5ibG9jay9ibGstbXEuYzo3MDA6c3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuYmxvY2svYmxrLW1xLmMtNzAxLVxcdGJsa19vcGZfdCBvcGYsIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncywgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtNzc5LX1cXG5ibG9jay9ibGstbXEuYzo3ODA6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eCk7XFxuYmxvY2svYmxrLW1xLmMtNzgxLVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTExNjQ9aW50IF9fbnZtZV9zdWJtaXRfc3luY19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMTc4LVxcdGVsc2VcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTE3OTpcXHRcXHRyZXEgPSBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4KHEsIG52bWVfcmVxX29wKGNtZCksIGJsa19mbGFncyxcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE4MC1cXHRcXHRcXHRcXHRcXHRcXHRxaWQgLSAxKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmg9NzY1PXN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYmxrX29wZl90IG9wZixcXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTc2Ni1cXHRcXHRibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvYmxrLW1xLmg6NzY3OnN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtNzY4LVxcdFxcdGJsa19vcGZfdCBvcGYsIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6NDkuMTU1ODE3ODQ4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MjkwMTk2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQRl9CTE9DS19UUyBCdWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBgUEZfQkxPQ0tfVFNgIGJ1Zy4gTGV0IG1lIHN0YXJ0IGJ5IGxpc3RpbmcgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQsIGp1c3QgdG8gZ2V0IG15IGJlYXJpbmdzLiBJJ20gdGhpbmtpbmcgb2YgYGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhgLCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudGAsIGFuZCBgYmZxX2luc2VydF9yZXF1ZXN0c2AuIFdhaXQgYSBzZWNvbmTigKYgdGhlIGJ1ZyBpcyBhY3R1YWxseSBhYm91dCBgUEZfQkxPQ0tfVFNgLiBSaWdodCwgdGhhdCBmbGFnLiBJIHJlbWVtYmVyIG5vdy5cblxuYFBGX0JMT0NLX1RTYCBnZXRzIHNldCBpbiBgYmxrX3RpbWVfZ2V0X25zYCB3aGVuIGBwbHVnLVx1MDAzZWN1cl9rdGltZWAgaXMgemVyby4gVGhhdCBtZWFucyBhIGJsb2NrIHBsdWcgaGFzIHRvIGJlIGFjdGl2ZS4gT2theSwgYmxvY2sgcGx1Z3PigKYgdGhvc2UgYXJlIHVzZWQgaW4gYGJsa19zdGFydF9wbHVnYCBhbmQgYGJsa19maW5pc2hfcGx1Z2AuIFRob3NlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgYmxvY2sgbGF5ZXIgZmVhdHVyZXMsIHNvIGl0J3MgYSBicm9hZCBhcmVhIHRvIGludmVzdGlnYXRlLlxuXG5BbHJpZ2h0LCBJJ2xsIGdvIGJhY2sgdG8gbGlzdGluZyB0aG9zZSBrZXkgZnVuY3Rpb25zOiBgYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eGAsIGBibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50YCwgYW5kIGBiZnFfaW5zZXJ0X3JlcXVlc3RzYC4gQW5kIEkgc2hvdWxkIGluY2x1ZGUgYGJsa19tcV9zdGFydF9yZXF1ZXN0YCBiZWNhdXNlIHRoYXQncyB3aGVyZSBgYmxrX3RpbWVfZ2V0X25zYCBpcyBtb3N0IGNvbW1vbmx5IGNhbGxlZC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudGAgaXMgdGllZCB0byBgQ09ORklHX0JMS19DR1JPVVBgLiBgYmZxX2luc2VydF9yZXF1ZXN0c2AgbmVlZHMgYENPTkZJR19JT1NDSEVEX0JGUWAuIExldCdzIHRocm93IGluIGBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RgIGZvciBgYmxrX2lvY29zdF9pbml0YC4gU28sIG15IGZvY3VzIHNob3VsZCBiZSBvbiBgQ09ORklHX0JMS19DR1JPVVBgIGFuZCBgQ09ORklHX0lPU0NIRURfQkZRYC4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhvc2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTUwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjU0Ljk4NDgzOTcwNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MDgxOTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9TQ0hFRF9CRlFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkPTEwPWNvbmZpZyBNUV9JT1NDSEVEX0tZQkVSXFxuLS1cXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMTgtXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkOjE5OmNvbmZpZyBJT1NDSEVEX0JGUVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0yMC1cXHR0cmlzdGF0ZSBcXFwiQkZRIEkvTyBzY2hlZHVsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjU3LjA1NTY2NDg4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIyNzkyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqS2VybmVsIEJsb2NrIExheWVyIEVuaGFuY2VtZW50cyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBJIG5lZWQgdG8gb3V0bGluZSBteSBwbGFuIGZvciBpbXByb3ZpbmcgdGhlIGJsb2NrIGxheWVyLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbSB0aGlua2luZyBJJ2xsIGludGVncmF0ZSBgSU9TQ0hFRF9CRlFgLiBUaGF0J3MgY3J1Y2lhbC4gQkZRIG9mZmVycyBhIG11Y2ggbW9yZSByZWZpbmVkIGFwcHJvYWNoIHRvIEkvTyBzY2hlZHVsaW5nLCBhbmQgcmVhbGx5IGhlbHBzIHdpdGggcmVzcG9uc2l2ZW5lc3MgaW4gY29uZ2VzdGVkIHNpdHVhdGlvbnMuIEdvb2QgY2FuZGlkYXRlIGZvciB0aGUgbmV3IHNldHVwLiBUaGVuLCB0byBtYWtlIHN1cmUgdGhpcyBhbGwgcGxheXMgbmljZWx5IEknbGwgaW50ZWdyYXRlIGBCTEtfQ0dST1VQYC4gTm8gcXVlc3Rpb24sIGNvbnRyb2wgZ3JvdXBzIGFyZSBlc3NlbnRpYWwgZm9yIG1hbmFnaW5nIHJlc291cmNlIGFsbG9jYXRpb24sIGlzb2xhdGlvbiwgYW5kLCB5b3Uga25vdywgZmFpcm5lc3MgYWNyb3NzIGRpZmZlcmVudCB3b3JrbG9hZHMuIFdlICpuZWVkKiB0aGlzIGluIHBsYWNlLiBGaW5hbGx5LCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBmb2xkIGluIGBCTEtfQ0dST1VQX0lPQ09TVGAuIFRoaXMgaXMgdGhlIGdsdWU7IGl0IGFsbG93cyBtZSB0byBwcm9wZXJseSBsZXZlcmFnZSBhbmQgYWNjb3VudCBmb3IgdGhlIEkvTyBjb3N0cyBvZiBlYWNoIGNvbnRyb2wgZ3JvdXAsIHByb3ZpZGluZyBhIG11Y2ggbW9yZSBhY2N1cmF0ZSBwaWN0dXJlIGZvciBwb2xpY3kgZGVjaXNpb25zIGFuZCBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4gR290IGl0LiBUaGlzIGNvbWJpbmF0aW9uIGdpdmVzIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM1MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI2OjAwLjk3ODQ2MTAxNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5Njg0NDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxcbi0tXFxuYmxvY2svS2NvbmZpZy00MS1cXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxcbmJsb2NrL0tjb25maWctNDMtXFx0Ym9vbFxcbmJsb2NrL0tjb25maWctNDQtXFxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xcbmJsb2NrL0tjb25maWctNDYtXFx0Ym9vbFxcbi0tXFxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcXG4tLVxcbmJsb2NrL0tjb25maWctMTMzLVxcbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxcbmJsb2NrL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNDQtXFxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcXG5ibG9jay9LY29uZmlnLTE0Ni1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1xcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTUzLVxcbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxcbmJsb2NrL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNjMtXFxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXFxuYmxvY2svS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiQ2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnPTEwODU9Y29uZmlnIE1FTUNHX1YxXFxuLS1cXG5pbml0L0tjb25maWctMTEwMS1cXG5pbml0L0tjb25maWc6MTEwMjpjb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTAzLVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI2OjAzLjA3NTMxMjYwMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDk2MjYzOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgQmxvY2sgTGF5ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGFkZHJlc3NpbmcgYSBzdWJ0bGUsIHlldCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIGNvbmN1cnJlbmN5IGlzc3VlIGluIHRoZSBibG9jayBsYXllcidzIHRpbWVzdGFtcGluZyBtZWNoYW5pc20uIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgSU9TQ0hFRF9CRlFgLCBgQkxLX0NHUk9VUGAsIGFuZCBgQkxLX0NHUk9VUF9JT0NPU1RgLCB3aGljaCBpbmRpY2F0ZXMgdGhpcyBpcyBwb3RlbnRpYWxseSB0b3VjaGluZyBvbiBJL08gc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhcyB0aG9zZSBhcmUgYXJlYXMgSSd2ZSBzcGVudCBhIGdvb2QgZGVhbCBvZiB0aW1lIHN0dWR5aW5nLlxuXG5UaGUgY29yZSBvZiB0aGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBzZWVtcyB0byBiZSBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiBgYmxrX3RpbWVfZ2V0X25zYC4gU3BlY2lmaWNhbGx5LCBgY3VyX2t0aW1lYCBjYW4gYmUgemVyb2VkIG91dCBieSBwcmVlbXB0aW9uLiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBwcm9ibGVtLCBhbmQgemVyb2luZyBvdXQgdGhhdCB0aW1lIGNhbiBjYXVzZSBpbmNvcnJlY3QgdGltZXN0YW1wcywgd2hpY2ggaXMgYmFkIG5ld3MgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBzY2hlZHVsaW5nIGRlY2lzaW9ucywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gY29ycmVjdG5lc3MgaWYgdGhlIHRpbWVzdGFtcHMgYXJlIHVzZWQgZm9yIGFjY291bnRpbmcuXG5cbkknbSBrZXlpbmcgaW4gb24gdGhlc2Ugc3ltYm9scyBhcyBpbmRpY2F0b3JzIG9mIHRoZSBwYXRjaCdzIGNvcmUgZnVuY3Rpb25zOiBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgLCBgYmZxX2luc2VydF9yZXF1ZXN0c2AsIGBibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50YCwgYW5kIGBibGtfaW9jb3N0X2luaXRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiBpbml0aWF0aW5nIGJsb2NrIHJlcXVlc3RzLCBpbnNlcnRpbmcgdGhlbSBpbnRvIHRoZSBCRlEgc2NoZWR1bGVyLCBwb3RlbnRpYWxseSB0aHJvdHRsaW5nIEkvTyBiYXNlZCBvbiBjZ3JvdXAgY29uc3RyYWludHMsIGFuZCBpbml0aWFsaXppbmcgSS9PIGNvc3QgYWNjb3VudGluZy4gTXkgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGUgcmFjZSBjb25kaXRpb24sIGlmIHRyaWdnZXJlZCwgY291bGQgY29ycnVwdCB0aGUgdGltaW5nIGRhdGEgdXNlZCBpbiB0aGVzZSBvcGVyYXRpb25zLCBsZWFkaW5nIHRvIGluYWNjdXJhdGUgcGVyZm9ybWFuY2UgbWV0cmljcyBhbmQgcG90ZW50aWFsbHkgZmxhd2VkIHNjaGVkdWxpbmcgZGVjaXNpb25zIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuXG5cblVsdGltYXRlbHksIHRoaXMgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uYWxseSBpbXBvcnRhbnQgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGFmZmVjdGluZyB0aW1lc3RhbXBpbmcgb2YgYmxvY2sgcmVxdWVzdHMuIFRoZSBuZWVkIGZvciBhIGZpeCB3aXRoaW4gYGJsa190aW1lX2dldF9uc2Agd291bGQgc3VnZ2VzdCBpdCBpcyBhIGNvcmUgZmVhdHVyZSB0aGF0IGhhcyB0byBiZSBmaXhlZC4gSXTigJlzIGEgZGVmaW5pdGUgXCJzZXQtcmVzdWx0c1wiIHNpdHVhdGlvbiwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiB0aGUgaW1wYWN0cyB0aGlzIGNhbiBoYXZlIG9uIG15IGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA2NCwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjY6MDguNTcxNTc5MTU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxNzA1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9zdGFydF9yZXF1ZXN0XCIsXG4gICAgXCJiZnFfaW5zZXJ0X3JlcXVlc3RzXCIsXG4gICAgXCJibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50XCIsXG4gICAgXCJibGtfaW9jb3N0X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBibGtfdGltZV9nZXRfbnNgIHdoZXJlIGBjdXJfa3RpbWVgIGNvdWxkIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIHRoYXQgYWZmZWN0cyB0aW1lc3RhbXBpbmcgb2YgYmxvY2sgcmVxdWVzdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9TQ0hFRF9CRlFcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX21xX3N0YXJ0X3JlcXVlc3RcIixcbiAgICBcImJmcV9pbnNlcnRfcmVxdWVzdHNcIixcbiAgICBcImJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnRcIixcbiAgICBcImJsa19pb2Nvc3RfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGJsa190aW1lX2dldF9uc2Agd2hlcmUgYGN1cl9rdGltZWAgY291bGQgYmUgemVyb2VkIGJ5IHByZS1lbXB0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdGhhdCBhZmZlY3RzIHRpbWVzdGFtcGluZyBvZiBibG9jayByZXF1ZXN0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowk8l6s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 03:03:26 +0000 UTC FinishedAt: 2026-07-16 03:26:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "adea84ee6cdea611146c4251d3c1616f5a09feca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IOSCHED_BFQ", "BLK_CGROUP", "BLK_CGROUP_IOCOST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "adea84ee6cdea611146c4251d3c1616f5a09feca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IOSCHED_BFQ", "BLK_CGROUP", "BLK_CGROUP_IOCOST" ], "series_id": "ac9d6b1a-cb75-4a33-b16e-bd5962a4336e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blk_mq_start_request", "bfq_insert_requests", "blkcg_maybe_throttle_current", "blk_iocost_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0NPU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfbXFfc3RhcnRfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDtiZnFfaW5zZXJ0X3JlcXVlc3RzJiMzNDssCiAgICAmIzM0O2Jsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnQmIzM0OywKICAgICYjMzQ7YmxrX2lvY29zdF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGJsa190aW1lX2dldF9uc2Agd2hlcmUgYGN1cl9rdGltZWAgY291bGQgYmUgemVyb2VkIGJ5IHByZS1lbXB0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdGhhdCBhZmZlY3RzIHRpbWVzdGFtcGluZyBvZiBibG9jayByZXF1ZXN0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIyYjJkYmNiYTUxNDAwMzEzOGY1MGVhZDhhMTE0ODI0YmI1NmUwMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAwMzoyNDoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXG5pbmRleCBiOTk4YTc3NjFmYWYzNi4uMTdlMDM2NTZiYTlhYzMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmhcbkBAIC02ODksNiAmIzQzOzY4OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlcV9yZWZfcmVhZChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIHN0YXRpYyBpbmxpbmUgdTY0IGJsa190aW1lX2dldF9ucyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBibGtfcGx1ZyAqcGx1ZyA9IGN1cnJlbnQtXHUwMDNlcGx1ZztcbiYjNDM7XHR1NjQgbm93O1xuIFxuIFx0aWYgKCFwbHVnIHx8ICFpbl90YXNrKCkpXG4gXHRcdHJldHVybiBrdGltZV9nZXRfbnMoKTtcbkBAIC02OTcsMTIgJiM0Mzs2OTgsMTggQEAgc3RhdGljIGlubGluZSB1NjQgYmxrX3RpbWVfZ2V0X25zKHZvaWQpXG4gXHQgKiAwIGNvdWxkIHZlcnkgd2VsbCBiZSBhIHZhbGlkIHRpbWUsIGJ1dCByYXRoZXIgdGhhbiBmbGFnIFwmIzM0O3RoaXMgaXNcbiBcdCAqIGEgdmFsaWQgdGltZXN0YW1wXCYjMzQ7IHNlcGFyYXRlbHksIGp1c3QgYWNjZXB0IHRoYXQgd2UmIzM5O2xsIGRvIGFuIGV4dHJhXG4gXHQgKiBrdGltZV9nZXRfbnMoKSBpZiB3ZSBqdXN0IGhhcHBlbiB0byBnZXQgMCBhcyB0aGUgY3VycmVudCB0aW1lLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogY3VyX2t0aW1lIGNhbiBiZSB6ZXJvZWQgYnkgcHJlLWVtcHRpb24gdGhlIG1vbWVudCBQRl9CTE9DS19UUyBpcyBzZXQuXG4gXHQgKi9cbi1cdGlmICghcGx1Zy1cdTAwM2VjdXJfa3RpbWUpIHtcbi1cdFx0cGx1Zy1cdTAwM2VjdXJfa3RpbWUgPSBrdGltZV9nZXRfbnMoKTtcbiYjNDM7XHRub3cgPSBSRUFEX09OQ0UocGx1Zy1cdTAwM2VjdXJfa3RpbWUpO1xuJiM0MztcdGlmICghbm93KSB7XG4mIzQzO1x0XHRub3cgPSBrdGltZV9nZXRfbnMoKTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UocGx1Zy1cdTAwM2VjdXJfa3RpbWUsIG5vdyk7XG4mIzQzO1x0XHQvKiBFbnN1cmUgUEZfQkxPQ0tfVFMgaXMgc2V0IGFmdGVyIGN1cl9rdGltZS4gKi9cbiYjNDM7XHRcdGJhcnJpZXIoKTtcbiBcdFx0Y3VycmVudC1cdTAwM2VmbGFncyB8PSBQRl9CTE9DS19UUztcbiBcdH1cbi1cdHJldHVybiBwbHVnLVx1MDAzZWN1cl9rdGltZTtcbiYjNDM7XHRyZXR1cm4gbm93O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGt0aW1lX3QgYmxrX3RpbWVfZ2V0KHZvaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9TQ0hFRF9CRlEmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19tcV9zdGFydF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O2JmcV9pbnNlcnRfcmVxdWVzdHMmIzM0OywKICAgICYjMzQ7YmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudCYjMzQ7LAogICAgJiMzNDtibGtfaW9jb3N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgYmxrX3RpbWVfZ2V0X25zYCB3aGVyZSBgY3VyX2t0aW1lYCBjb3VsZCBiZSB6ZXJvZWQgYnkgcHJlLWVtcHRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBsYXllciB0aGF0IGFmZmVjdHMgdGltZXN0YW1waW5nIG9mIGJsb2NrIHJlcXVlc3RzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMmIyZGJjYmE1MTQwMDMxMzhmNTBlYWQ4YTExNDgyNGJiNTZlMDE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMDM6MjQ6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IGI5OThhNzc2MWZhZjM2Li4xN2UwMzY1NmJhOWFjMyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmgKQEAgLTY4OSw2ICYjNDM7Njg5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgcmVxX3JlZl9yZWFkKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiBzdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZCkKIHsKIAlzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcgPSBjdXJyZW50LSZndDtwbHVnOwomIzQzOwl1NjQgbm93OwogCiAJaWYgKCFwbHVnIHx8ICFpbl90YXNrKCkpCiAJCXJldHVybiBrdGltZV9nZXRfbnMoKTsKQEAgLTY5NywxMiAmIzQzOzY5OCwxOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZCkKIAkgKiAwIGNvdWxkIHZlcnkgd2VsbCBiZSBhIHZhbGlkIHRpbWUsIGJ1dCByYXRoZXIgdGhhbiBmbGFnICYjMzQ7dGhpcyBpcwogCSAqIGEgdmFsaWQgdGltZXN0YW1wJiMzNDsgc2VwYXJhdGVseSwganVzdCBhY2NlcHQgdGhhdCB3ZSYjMzk7bGwgZG8gYW4gZXh0cmEKIAkgKiBrdGltZV9nZXRfbnMoKSBpZiB3ZSBqdXN0IGhhcHBlbiB0byBnZXQgMCBhcyB0aGUgY3VycmVudCB0aW1lLgomIzQzOwkgKgomIzQzOwkgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC4KIAkgKi8KLQlpZiAoIXBsdWctJmd0O2N1cl9rdGltZSkgewotCQlwbHVnLSZndDtjdXJfa3RpbWUgPSBrdGltZV9nZXRfbnMoKTsKJiM0MzsJbm93ID0gUkVBRF9PTkNFKHBsdWctJmd0O2N1cl9rdGltZSk7CiYjNDM7CWlmICghbm93KSB7CiYjNDM7CQlub3cgPSBrdGltZV9nZXRfbnMoKTsKJiM0MzsJCVdSSVRFX09OQ0UocGx1Zy0mZ3Q7Y3VyX2t0aW1lLCBub3cpOwomIzQzOwkJLyogRW5zdXJlIFBGX0JMT0NLX1RTIGlzIHNldCBhZnRlciBjdXJfa3RpbWUuICovCiYjNDM7CQliYXJyaWVyKCk7CiAJCWN1cnJlbnQtJmd0O2ZsYWdzIHw9IFBGX0JMT0NLX1RTOwogCX0KLQlyZXR1cm4gcGx1Zy0mZ3Q7Y3VyX2t0aW1lOwomIzQzOwlyZXR1cm4gbm93OwogfQogCiBzdGF0aWMgaW5saW5lIGt0aW1lX3QgYmxrX3RpbWVfZ2V0KHZvaWQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxvY2sgRGV2aWNlIFRpbWUgU3RhbXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGJsb2NrL2Jsay5oYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYGJsa190aW1lX2dldF9uc2AsIGEgZnVuY3Rpb24gcmVsYXRlZCB0byBnZXR0aW5nIHRpbWVzdGFtcHMgZm9yIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggYWRkcyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFyb3VuZCBgcGx1Zy0mZ3Q7Y3VyX2t0aW1lYCBhbmQgdGhyb3dzIGluIGEgYGJhcnJpZXIoKWAgYWZ0ZXIgYGN1cl9rdGltZWAgdG8gbWFrZSBzdXJlIGBQRl9CTE9DS19UU2AgaXMgc2V0ICphZnRlciogdGhlIGBrdGltZWAgdmFsdWUuIFNvdW5kcyBsaWtlIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIG9yIG1heWJlIGEgcHJlZW1wdGlvbiBwcm9ibGVtIHdoZXJlIGBjdXJfa3RpbWVgIGNvdWxkIGdldCBjbG9iYmVyZWQgYW5kIGVuZCB1cCBhcyB6ZXJvLiBJbnRlcmVzdGluZy4uLgoKTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBjb25zaWRlciBmdXp6aW5nIHRoaXMgYmVjYXVzZSBpdCYjMzk7cyBhIGNoYW5nZSB0byBmdW5jdGlvbmFsIGNvZGUuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBwcmV0dHkgdGFyZ2V0ZWQgc3luY2hyb25pemF0aW9uIGZpeC4gTm90IGEgaHVnZSBzdHJ1Y3R1cmFsIGNoYW5nZSwganVzdCBhIHNtYWxsIGJpdCBvZiBwcm90ZWN0aW9uIGFyb3VuZCB0aW1lc3RhbXAgYWNjZXNzLiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIHRoZSBjYWxsaW5nIGNvbnRleHRzIGZvciBgYmxrX3RpbWVfZ2V0X25zYC4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyB1c2VkIHdpbGwgaGVscCBtZSBkZWNpZGUgd2hldGhlciBmdXp6aW5nIG1ha2VzIHNlbnNlIGhlcmUgb3IgaWYgYSBtb3JlIHRhcmdldGVkIGNvZGUgcmV2aWV3IGlzIHRoZSBzbWFydGVyIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa190aW1lX2dldF9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZnEtY2dyb3VwLmM9MTIzPXN0YXRpYyB2b2lkIGJmcWdfc3RhdHNfdXBkYXRlX2dyb3VwX3dhaXRfdGltZShzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTEyOS1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMzA6XHRub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMzEtXHRpZiAobm93IFx1MDAzZSBzdGF0cy1cdTAwM2VzdGFydF9ncm91cF93YWl0X3RpbWUpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jPTEzOD1zdGF0aWMgdm9pZCBiZnFnX3N0YXRzX3NldF9zdGFydF9ncm91cF93YWl0X3RpbWUoc3RydWN0IGJmcV9ncm91cCAqYmZxZyxcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQ2LVx0XHRyZXR1cm47XG5ibG9jay9iZnEtY2dyb3VwLmM6MTQ3Olx0c3RhdHMtXHUwMDNlc3RhcnRfZ3JvdXBfd2FpdF90aW1lID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtY2dyb3VwLmMtMTQ4LVx0YmZxZ19zdGF0c19tYXJrX3dhaXRpbmcoc3RhdHMpO1xuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNTI9c3RhdGljIHZvaWQgYmZxZ19zdGF0c19lbmRfZW1wdHlfdGltZShzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTE1OC1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxNTk6XHRub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xNjAtXHRpZiAobm93IFx1MDAzZSBzdGF0cy1cdTAwM2VzdGFydF9lbXB0eV90aW1lKVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNzE9dm9pZCBiZnFnX3N0YXRzX3NldF9zdGFydF9lbXB0eV90aW1lKHN0cnVjdCBiZnFfZ3JvdXAgKmJmcWcpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTE4NS1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxODY6XHRzdGF0cy1cdTAwM2VzdGFydF9lbXB0eV90aW1lID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtY2dyb3VwLmMtMTg3LVx0YmZxZ19zdGF0c19tYXJrX2VtcHR5KHN0YXRzKTtcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmM9MTkwPXZvaWQgYmZxZ19zdGF0c191cGRhdGVfaWRsZV90aW1lKHN0cnVjdCBiZnFfZ3JvdXAgKmJmcWcpXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTE5NC1cdGlmIChiZnFnX3N0YXRzX2lkbGluZyhzdGF0cykpIHtcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxOTU6XHRcdHU2NCBub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xOTYtXG4tLVxuYmxvY2svYmZxLWNncm91cC5jPTIwND12b2lkIGJmcWdfc3RhdHNfc2V0X3N0YXJ0X2lkbGVfdGltZShzdHJ1Y3QgYmZxX2dyb3VwICpiZnFnKVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYy0yMDctXG5ibG9jay9iZnEtY2dyb3VwLmM6MjA4Olx0c3RhdHMtXHUwMDNlc3RhcnRfaWRsZV90aW1lID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtY2dyb3VwLmMtMjA5LVx0YmZxZ19zdGF0c19tYXJrX2lkbGluZyhzdGF0cyk7XG4tLVxuYmxvY2svYmZxLWNncm91cC5jPTI0MT12b2lkIGJmcWdfc3RhdHNfdXBkYXRlX2NvbXBsZXRpb24oc3RydWN0IGJmcV9ncm91cCAqYmZxZywgdTY0IHN0YXJ0X3RpbWVfbnMsXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTI0NC1cdHN0cnVjdCBiZnFnX3N0YXRzICpzdGF0cyA9IFx1MDAyNmJmcWctXHUwMDNlc3RhdHM7XG5ibG9jay9iZnEtY2dyb3VwLmM6MjQ1Olx0dTY0IG5vdyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmZxLWNncm91cC5jLTI0Ni1cbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTk5OD1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJmcV9jaGVja19maWZvKHN0cnVjdCBiZnFfcXVldWUgKmJmcXEsXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy0xMDA5LVxuYmxvY2svYmZxLWlvc2NoZWQuYzoxMDEwOlx0aWYgKHJxID09IGxhc3QgfHwgYmxrX3RpbWVfZ2V0X25zKCkgXHUwMDNjIHJxLVx1MDAzZWZpZm9fdGltZSlcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMTAxMS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz0xODIwPXN0YXRpYyB2b2lkIGJmcV9iZnFxX2hhbmRsZV9pZGxlX2J1c3lfc3dpdGNoKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTE4MzMtXHRcdCAqL1xuYmxvY2svYmZxLWlvc2NoZWQuYzoxODM0Olx0XHRhcnJpdmVkX2luX3RpbWUgPSAgYmxrX3RpbWVfZ2V0X25zKCkgXHUwMDNjPVxuYmxvY2svYmZxLWlvc2NoZWQuYy0xODM1LVx0XHRcdGJmcXEtXHUwMDNldHRpbWUubGFzdF9lbmRfcmVxdWVzdCAmIzQzO1xuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM9MjIwNj1zdGF0aWMgdm9pZCBiZnFfYWRkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjIxMi1cdGJvb2wgaW50ZXJhY3RpdmUgPSBmYWxzZTtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6MjIxMzpcdHU2NCBub3dfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjIxNC1cbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTIyNjYtXHRcdFx0XHRcdCAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMTApKSkge1xuYmxvY2svYmZxLWlvc2NoZWQuYzoyMjY3Olx0XHRcdGJmcWQtXHUwMDNlbGFzdF9lbXB0eV9vY2N1cGllZF9ucyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmZxLWlvc2NoZWQuYy0yMjY4LVx0XHRcdC8qXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz0zNDI5PXN0YXRpYyB2b2lkIGJmcV9yZXNldF9yYXRlX2NvbXB1dGF0aW9uKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTM0MzItXHRpZiAocnEgIT0gTlVMTCkgeyAvKiBuZXcgcnEgZGlzcGF0Y2ggbm93LCByZXNldCBhY2NvcmRpbmdseSAqL1xuYmxvY2svYmZxLWlvc2NoZWQuYzozNDMzOlx0XHRiZnFkLVx1MDAzZWxhc3RfZGlzcGF0Y2ggPSBiZnFkLVx1MDAzZWZpcnN0X2Rpc3BhdGNoID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTM0MzQtXHRcdGJmcWQtXHUwMDNlcGVha19yYXRlX3NhbXBsZXMgPSAxO1xuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM9MzU4OD1zdGF0aWMgdm9pZCBiZnFfdXBkYXRlX3BlYWtfcmF0ZShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIHN0cnVjdCByZXF1ZXN0ICpycSlcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzU4OS17XG5ibG9jay9iZnEtaW9zY2hlZC5jOjM1OTA6XHR1NjQgbm93X25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTM1OTEtXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz01NTg5PXN0YXRpYyB2b2lkIGJmcV9pbml0X2JmcXEoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgYmZxX3F1ZXVlICpiZnFxLFxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNTU5Mi17XG5ibG9jay9iZnEtaW9zY2hlZC5jOjU1OTM6XHR1NjQgbm93X25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTU1OTQtXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz01ODg5PXN0YXRpYyB2b2lkIGJmcV91cGRhdGVfaW9fdGhpbmt0aW1lKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTU5MDEtXHRcdHJldHVybjtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NTkwMjpcdGVsYXBzZWQgPSBibGtfdGltZV9nZXRfbnMoKSAtIGJmcXEtXHUwMDNldHRpbWUubGFzdF9lbmRfcmVxdWVzdDtcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNTkwMy1cdGVsYXBzZWQgPSBtaW5fdCh1NjQsIGVsYXBzZWQsIDJVTEwgKiBiZnFkLVx1MDAzZWJmcV9zbGljZV9pZGxlKTtcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYxNDc9c3RhdGljIGJvb2wgX19iZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTkzLVxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MTk0Olx0cnEtXHUwMDNlZmlmb190aW1lID0gYmxrX3RpbWVfZ2V0X25zKCkgJiM0MzsgYmZxZC1cdTAwM2ViZnFfZmlmb19leHBpcmVbcnFfaXNfc3luYyhycSldO1xuYmxvY2svYmZxLWlvc2NoZWQuYy02MTk1LVx0bGlzdF9hZGRfdGFpbChcdTAwMjZycS1cdTAwM2VxdWV1ZWxpc3QsIFx1MDAyNmJmcXEtXHUwMDNlZmlmbyk7XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02MzQ2PXN0YXRpYyB2b2lkIGJmcV9jb21wbGV0ZWRfcmVxdWVzdChzdHJ1Y3QgYmZxX3F1ZXVlICpiZnFxLCBzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MzY5LVxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MzcwOlx0bm93X25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYzNzEtXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02NTgyPXN0YXRpYyB2b2lkIGJmcV91cGRhdGVfaW5qZWN0X2xpbWl0KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTY1ODQte1xuYmxvY2svYmZxLWlvc2NoZWQuYzo2NTg1Olx0dTY0IHRvdF90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCkgLSBiZnFkLVx1MDAzZWxhc3RfZW1wdHlfb2NjdXBpZWRfbnM7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTY1ODYtXHR1bnNpZ25lZCBpbnQgb2xkX2xpbWl0ID0gYmZxcS1cdTAwM2VpbmplY3RfbGltaXQ7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTE5NDQ9c3RhdGljIHZvaWQgYmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIGJvb2wgdXNlX21lbWRlbGF5KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xOTQ3LVx0Ym9vbCBjbGFtcDtcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxOTQ4Olx0dTY0IG5vdyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmxrLWNncm91cC5jLTE5NDktXHR1NjQgZXhwO1xuLS1cbmJsb2NrL2Jsay1mbHVzaC5jPTEyND1zdGF0aWMgdm9pZCBibGtfYWNjb3VudF9pb19mbHVzaChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmxrLWZsdXNoLmMtMTMwLVx0cGFydF9zdGF0X2FkZChwYXJ0LCBuc2Vjc1tTVEFUX0ZMVVNIXSxcbmJsb2NrL2Jsay1mbHVzaC5jOjEzMTpcdFx0ICAgICAgYmxrX3RpbWVfZ2V0X25zKCkgLSBycS1cdTAwM2VzdGFydF90aW1lX25zKTtcbmJsb2NrL2Jsay1mbHVzaC5jLTEzMi1cdHBhcnRfc3RhdF91bmxvY2soKTtcbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9ODA3PXN0YXRpYyBpbnQgaW9jX2F1dG9wX2lkeChzdHJ1Y3QgaW9jICppb2MsIHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy04MzEtXHR2cmF0ZV9wY3QgPSBkaXY2NF91NjQoaW9jLVx1MDAzZXZ0aW1lX2Jhc2VfcmF0ZSAqIDEwMCwgVlRJTUVfUEVSX1VTRUMpO1xuYmxvY2svYmxrLWlvY29zdC5jOjgzMjpcdG5vd19ucyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmxrLWlvY29zdC5jLTgzMy1cbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9MTA0Mj1zdGF0aWMgdm9pZCBpb2Nfbm93KHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGlvY19ub3cgKm5vdylcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtMTA0Ni1cbmJsb2NrL2Jsay1pb2Nvc3QuYzoxMDQ3Olx0bm93LVx1MDAzZW5vd19ucyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmxrLWlvY29zdC5jLTEwNDgtXHRub3ctXHUwMDNlbm93ID0ga3RpbWVfdG9fdXMobm93LVx1MDAzZW5vd19ucyk7XG4tLVxuYmxvY2svYmxrLWlvY29zdC5jPTI4MTg9c3RhdGljIHZvaWQgaW9jX3Jxb3NfZG9uZShzdHJ1Y3QgcnFfcW9zICpycW9zLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTI4NDAtXG5ibG9jay9ibGstaW9jb3N0LmM6Mjg0MTpcdG9uX3FfbnMgPSBibGtfdGltZV9nZXRfbnMoKSAtIHJxLVx1MDAzZWFsbG9jX3RpbWVfbnM7XG5ibG9jay9ibGstaW9jb3N0LmMtMjg0Mi1cdHJxX3dhaXRfbnMgPSBycS1cdTAwM2VzdGFydF90aW1lX25zIC0gcnEtXHUwMDNlYWxsb2NfdGltZV9ucztcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9NTgzPXN0YXRpYyB2b2lkIGJsa2NnX2lvbGF0ZW5jeV9kb25lX2JpbyhzdHJ1Y3QgcnFfcW9zICpycW9zLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTYwMy1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo2MDQ6XHRub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02MDUtXHR3aGlsZSAoYmxrZyBcdTAwMjZcdTAwMjYgYmxrZy1cdTAwM2VwYXJlbnQpIHtcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9NjUxPXN0YXRpYyB2b2lkIGJsa2lvbGF0ZW5jeV90aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjU2LVx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBvc19jc3M7XG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NjU3Olx0dTY0IG5vdyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY1OC1cbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9OTgyPXN0YXRpYyB2b2lkIGlvbGF0ZW5jeV9wZF9pbml0KHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTg3LVx0c3RydWN0IGJsa19pb2xhdGVuY3kgKmJsa2lvbGF0ID0gQkxLSU9MQVRFTkNZKHJxb3MpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjk4ODpcdHU2NCBub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy05ODktXHRpbnQgY3B1O1xuLS1cbmJsb2NrL2Jsay1tcS5jPTM3Mz12b2lkIGJsa19ycV9pbml0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmxrLW1xLmMtMzg0LVx0cnEtXHUwMDNlaW50ZXJuYWxfdGFnID0gQkxLX01RX05PX1RBRztcbmJsb2NrL2Jsay1tcS5jOjM4NTpcdHJxLVx1MDAzZXN0YXJ0X3RpbWVfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2Jsay1tcS5jLTM4Ni1cdGJsa19jcnlwdG9fcnFfc2V0X2RlZmF1bHRzKHJxKTtcbi0tXG5ibG9jay9ibGstbXEuYz00MDE9c3RhdGljIGlubGluZSB2b2lkIGJsa19tcV9iaW9faXNzdWVfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5ibG9jay9ibGstbXEuYy00MDUtXHRpZiAodGVzdF9iaXQoUVVFVUVfRkxBR19CSU9fSVNTVUVfVElNRSwgXHUwMDI2cS1cdTAwM2VxdWV1ZV9mbGFncykpXG5ibG9jay9ibGstbXEuYzo0MDY6XHRcdGJpby1cdTAwM2Vpc3N1ZV90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9ibGstbXEuYy00MDctI2VuZGlmXG4tLVxuYmxvY2svYmxrLW1xLmM9NTM3PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqX19ibGtfbXFfYWxsb2NfcmVxdWVzdHMoc3RydWN0IGJsa19tcV9hbGxvY19kYXRhICpkYXRhKVxuLS1cbmJsb2NrL2Jsay1tcS5jLTU0NS1cdGlmIChibGtfcXVldWVfcnFfYWxsb2NfdGltZShxKSlcbmJsb2NrL2Jsay1tcS5jOjU0NjpcdFx0YWxsb2NfdGltZV9ucyA9IGJsa190aW1lX2dldF9ucygpO1xuYmxvY2svYmxrLW1xLmMtNTQ3LVxuLS1cbmJsb2NrL2Jsay1tcS5jPTYyNj1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5ibG9jay9ibGstbXEuYy02NTItXHRcdHJxX2xpc3RfcG9wKFx1MDAyNnBsdWctXHUwMDNlY2FjaGVkX3Jxcyk7XG5ibG9jay9ibGstbXEuYzo2NTM6XHRcdGJsa19tcV9ycV90aW1lX2luaXQocnEsIGJsa190aW1lX2dldF9ucygpKTtcbmJsb2NrL2Jsay1tcS5jLTY1NC1cdH1cbi0tXG5ibG9jay9ibGstbXEuYz03MDA9c3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4tLVxuYmxvY2svYmxrLW1xLmMtNzIxLVx0aWYgKGJsa19xdWV1ZV9ycV9hbGxvY190aW1lKHEpKVxuYmxvY2svYmxrLW1xLmM6NzIyOlx0XHRhbGxvY190aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9ibGstbXEuYy03MjMtXG4tLVxuYmxvY2svYmxrLW1xLmM9MTEyMT1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX2FjY291bnRfaW9fc3RhcnQoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5ibG9jay9ibGstbXEuYy0xMTMwLVx0cmVxLVx1MDAzZXJxX2ZsYWdzIHw9IFJRRl9JT19TVEFUO1xuYmxvY2svYmxrLW1xLmM6MTEzMTpcdHJlcS1cdTAwM2VzdGFydF90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9ibGstbXEuYy0xMTMyLVxuLS1cbmJsb2NrL2Jsay1tcS5jPTExNTk9aW5saW5lIHZvaWQgX19ibGtfbXFfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCBibGtfc3RhdHVzX3QgZXJyb3IpXG4tLVxuYmxvY2svYmxrLW1xLmMtMTE2MS1cdGlmIChibGtfbXFfbmVlZF90aW1lX3N0YW1wKHJxKSlcbmJsb2NrL2Jsay1tcS5jOjExNjI6XHRcdF9fYmxrX21xX2VuZF9yZXF1ZXN0X2FjY3QocnEsIGJsa190aW1lX2dldF9ucygpKTtcbmJsb2NrL2Jsay1tcS5jLTExNjMtXG4tLVxuYmxvY2svYmxrLW1xLmM9MTE5Nz12b2lkIGJsa19tcV9lbmRfcmVxdWVzdF9iYXRjaChzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqaW9iKVxuLS1cbmJsb2NrL2Jsay1tcS5jLTEyMDQtXHRpZiAoaW9iLVx1MDAzZW5lZWRfdHMpXG5ibG9jay9ibGstbXEuYzoxMjA1Olx0XHRub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcbmJsb2NrL2Jsay1tcS5jLTEyMDYtXG4tLVxuYmxvY2svYmxrLW1xLmM9MTM2OD12b2lkIGJsa19tcV9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5ibG9jay9ibGstbXEuYy0xMzc1LVx0ICAgICFibGtfcnFfaXNfcGFzc3Rocm91Z2gocnEpKSB7XG5ibG9jay9ibGstbXEuYzoxMzc2Olx0XHRycS1cdTAwM2Vpb19zdGFydF90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XG5ibG9jay9ibGstbXEuYy0xMzc3LVx0XHRycS1cdTAwM2VzdGF0c19zZWN0b3JzID0gYmxrX3JxX3NlY3RvcnMocnEpO1xuLS1cbmJsb2NrL2Jsay1tcS5jPTMxMjQ9dm9pZCBibGtfbXFfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLW1xLmMtMzE5Ny1cdFx0cnFfcW9zX3Rocm90dGxlKHJxLVx1MDAzZXEsIGJpbyk7XG5ibG9jay9ibGstbXEuYzozMTk4Olx0XHRibGtfbXFfcnFfdGltZV9pbml0KHJxLCBibGtfdGltZV9nZXRfbnMoKSk7XG5ibG9jay9ibGstbXEuYy0zMTk5LVx0XHRycS1cdTAwM2VjbWRfZmxhZ3MgPSBiaW8tXHUwMDNlYmlfb3BmO1xuLS1cbmJsb2NrL2Jsay1tcS5jPTMyNTc9YmxrX3N0YXR1c190IGJsa19pbnNlcnRfY2xvbmVkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmJsb2NrL2Jsay1tcS5jLTMzMjktXHRpZiAocmV0KVxuYmxvY2svYmxrLW1xLmM6MzMzMDpcdFx0YmxrX2FjY291bnRfaW9fZG9uZShycSwgYmxrX3RpbWVfZ2V0X25zKCkpO1xuYmxvY2svYmxrLW1xLmMtMzMzMS1cdHJldHVybiByZXQ7XG4tLVxuYmxvY2svYmxrLXdidC5jPTI4MD1zdGF0aWMgdTY0IHJ3Yl9zeW5jX2lzc3VlX2xhdChzdHJ1Y3QgcnFfd2IgKnJ3Yilcbi0tXG5ibG9jay9ibGstd2J0LmMtMjg2LVxuYmxvY2svYmxrLXdidC5jOjI4NzpcdHJldHVybiBibGtfdGltZV9nZXRfbnMoKSAtIGlzc3VlO1xuYmxvY2svYmxrLXdidC5jLTI4OC19XG4tLVxuYmxvY2svYmxrLmg9Njg0PXN0YXRpYyBpbmxpbmUgaW50IHJlcV9yZWZfcmVhZChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmJsb2NrL2Jsay5oLTY4OC1cbmJsb2NrL2Jsay5oOjY4OTpzdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZClcbmJsb2NrL2Jsay5oLTY5MC17XG4tLVxuYmxvY2svYmxrLmg9NzE1PXN0YXRpYyBpbmxpbmUga3RpbWVfdCBibGtfdGltZV9nZXQodm9pZClcbmJsb2NrL2Jsay5oLTcxNi17XG5ibG9jay9ibGsuaDo3MTc6XHRyZXR1cm4gbnNfdG9fa3RpbWUoYmxrX3RpbWVfZ2V0X25zKCkpO1xuYmxvY2svYmxrLmgtNzE4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXMgb2YgYmxrX3RpbWVfZ2V0X25zIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGJsa190aW1lX2dldF9uc2AsIHdoaWNoLCBhcyBJIGtub3csIGlzIGEgcHJldHR5IGhlYXZpbHkgdXNlZCBmdW5jdGlvbiBpbiB0aGUgYmxvY2sgbGF5ZXIuIEl0JiMzOTtzIGFsbCBvdmVyIHRoZSBwbGFjZSwgZXNwZWNpYWxseSBpbiBzdHVmZiBsaWtlIEJGUSwgYmxrLW1xLCBhbmQgdGhvc2Ugb3RoZXIga2V5IGNvbXBvbmVudHMuIFRoZSBjaGFuZ2UgaXMgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYGN1cl9rdGltZWAgY291bGQgZ2V0IHplcm9lZCBvdXQgZHVlIHRvIHByZWVtcHRpb24gcmlnaHQgYWZ0ZXIgYFBGX0JMT0NLX1RTYCBnZXRzIHNldC4gSXQgc291bmRzIGZ1bmN0aW9uYWwsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCAmIzM0O1dvcnRoIGZ1enppbmc/JiMzNDsgQWJzb2x1dGVseS4KClRoZSBvcmlnaW5hbCBwbGFuIHdhcyB0byBmb2N1cyBvbiBgYmxrX3RpbWVfZ2V0X25zYCBkaXJlY3RseSwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIGl0JiMzOTtzIGlubGluZS4gQ3JhcCEgVGhhdCBtZWFucyBpdCB3b24mIzM5O3Qgc2hvdyB1cCBhcyBhIHN5bWJvbCBieSBpdHNlbGYuIFNvLCBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMgdG8gdGhlIGZ1bmN0aW9ucyAqdXNpbmcqIGl0LCBvciBJIGNvdWxkIGp1c3QgcmV0dXJuIHRoYXQgdGhlIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcgYW5kIGZvY3VzIG9uIGJsb2NrIGxheWVyIGZ1bmN0aW9ucyBpbiBnZW5lcmFsLgoKTGV0JiMzOTtzIHNlZeKApiBJIGtub3cgYGJsa19tcV9zdWJtaXRfYmlvYCwgYGJsa19tcV9zdGFydF9yZXF1ZXN0YCwgYF9fYmxrX21xX2VuZF9yZXF1ZXN0YCwgYW5kIGBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4YCBhcmUgYWxsIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuIEFoLCB3YWl0LCBgYmxrX3RpbWVfZ2V0X25zYCAqaXMqIHVzZWQgYnkgYGJsa19tcV9zdWJtaXRfYmlvYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBkaWcgaW50byBgYmxrX21xX3N1Ym1pdF9iaW9gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9zdWJtaXRfYmlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdD0xOTk0PWhpc3RvZ3JhbTo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTIwMjAtICAgICAgICAgX19ycV9xb3NfdGhyb3R0bGUmIzQzOzB4MjUvMHg0MFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjIwMjE6ICAgICAgICAgYmxrX21xX3N1Ym1pdF9iaW8mIzQzOzB4MmMzLzB4NWIwXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMjAyMi0gICAgICAgICBfX3N1Ym1pdF9iaW8mIzQzOzB4ZmYvMHgxOTBcbi0tXG5ibG9jay9ibGstY29yZS5jPTYyNz1zdGF0aWMgdm9pZCBfX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1jb3JlLmMtNjM0LVx0aWYgKCFiZGV2X3Rlc3RfZmxhZyhiaW8tXHUwMDNlYmlfYmRldiwgQkRfSEFTX1NVQk1JVF9CSU8pKSB7XG5ibG9jay9ibGstY29yZS5jOjYzNTpcdFx0YmxrX21xX3N1Ym1pdF9iaW8oYmlvKTtcbmJsb2NrL2Jsay1jb3JlLmMtNjM2LVx0fSBlbHNlIGlmIChsaWtlbHkoYmlvX3F1ZXVlX2VudGVyKGJpbykgPT0gMCkpIHtcbi0tXG5ibG9jay9ibGstbXEuYz0zMTAwPXN0YXRpYyBib29sIGJpb191bmFsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbi0tXG5ibG9jay9ibGstbXEuYy0zMTExLS8qKlxuYmxvY2svYmxrLW1xLmM6MzExMjogKiBibGtfbXFfc3VibWl0X2JpbyAtIENyZWF0ZSBhbmQgc2VuZCBhIHJlcXVlc3QgdG8gYmxvY2sgZGV2aWNlLlxuYmxvY2svYmxrLW1xLmMtMzExMy0gKiBAYmlvOiBCaW8gcG9pbnRlci5cbi0tXG5ibG9jay9ibGstbXEuYy0zMTIzLSAqL1xuYmxvY2svYmxrLW1xLmM6MzEyNDp2b2lkIGJsa19tcV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbmJsb2NrL2Jsay1tcS5jLTMxMjUte1xuLS1cbmJsb2NrL2Jsay1tcS5oPTQyPXR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBibGtfaW5zZXJ0X3Q7XG4tLVxuYmxvY2svYmxrLW1xLmgtNDQtXG5ibG9jay9ibGstbXEuaDo0NTp2b2lkIGJsa19tcV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7XG5ibG9jay9ibGstbXEuaC00Ni1pbnQgYmxrX21xX3BvbGwoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19xY190IGNvb2tpZSwgc3RydWN0IGlvX2NvbXBfYmF0Y2ggKmlvYixcbi0tXG5ibG9jay9ibGstem9uZWQuYz0xNzcxPXN0YXRpYyBib29sIGRpc2tfem9uZV93cGx1Z19zdWJtaXRfYmlvKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTE4MTUtXHR9IGVsc2Uge1xuYmxvY2svYmxrLXpvbmVkLmM6MTgxNjpcdFx0YmxrX21xX3N1Ym1pdF9iaW8oYmlvKTtcbmJsb2NrL2Jsay16b25lZC5jLTE4MTctXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQyMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIEJsb2NrIExheWVyIFBlcmZvcm1hbmNlKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgYmxrX21xX3N1Ym1pdF9iaW9gLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYmxvY2sgSS9PIHN1Ym1pc3Npb24gcGF0aHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdGltaW5nIGRldGFpbHMgdG8gcHJvdmlkZSBtb3JlIGNvbXByZWhlbnNpdmUgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgYmxvY2sgSS9PIHRpbWUgaXMgc3BlbnQuIEkmIzM5O20gd29uZGVyaW5nLCBob3cgaXMgYGJsa190aW1lX2dldF9uc2AgdXNlZD8gSG1tLCBpdCYjMzk7cyBpbmxpbmUsIHNvIGl0JiMzOTtzIG5vdCBhIHJlYWRpbHkgYXZhaWxhYmxlIHN5bWJvbCB0byB0cmFjZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyLgoKTGV0JiMzOTtzIGZpbmQgdGhlIHBsYWNlcyBgYmxrX3RpbWVfZ2V0X25zYCBpcyB1c2VkLiBTY2FubmluZy4uLiBBaGEhIGBiZnFfYWRkX3JlcXVlc3RgLCBgYmZxX3VwZGF0ZV9pb190aGlua3RpbWVgLCBhbmQgYGJmcV9jb21wbGV0ZWRfcmVxdWVzdGAgaW4gdGhlIEJGUSBzY2hlZHVsZXIgYXJlIHVzaW5nIGl0LiBJbnRlcmVzdGluZy4gQW5kIGFsc28gYGJsa19hY2NvdW50X2lvX3N0YXJ0YCBhbmQgYGJsa19hY2NvdW50X2lvX2RvbmVgLiBUaG9zZSBhcmUga2V5IGZvciBhY2NvdW50aW5nLiBJIGFsc28gc2VlIGl0IGluIGBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3RgLCBhbmQgYGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhgLiBUaGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdGAgaXMgZG9pbmcuIEkgc2hvdWxkIHN0YXJ0IHRoZXJlLCBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIHRpbWUgYWNjb3VudGluZyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX21xX2FsbG9jX2NhY2hlZF9yZXF1ZXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jPTU5Nz1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJsa19tcV9ycV9jYWNoZV9maWxsKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmJsb2NrL2Jsay1tcS5jLTYyNS1cbmJsb2NrL2Jsay1tcS5jOjYyNjpzdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbmJsb2NrL2Jsay1tcS5jLTYyNy1cdFx0XHRcdFx0XHQgICBibGtfb3BmX3Qgb3BmLFxuLS1cbmJsb2NrL2Jsay1tcS5jPTY2MT1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX2FsbG9jX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19vcGZfdCBvcGYsXG4tLVxuYmxvY2svYmxrLW1xLmMtNjY1LVxuYmxvY2svYmxrLW1xLmM6NjY2Olx0cnEgPSBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3QocSwgb3BmLCBmbGFncyk7XG5ibG9jay9ibGstbXEuYy02NjctXHRpZiAoIXJxKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA5NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgQmxvY2sgTGF5ZXIqKgoKQWxyaWdodCwgYGJsa19tcV9hbGxvY19yZXF1ZXN0YCAtIHRoYXQmIzM5O3MgYSBzb2xpZCBmdW5jdGlvbiB0byBzdGFydCB3aXRoLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYSBncmFzcCBvZiB3aGF0IHRoYXQmIzM5O3MgZG9pbmcgYmVmb3JlIHdlIHN0YXJ0LiBOb3csIGZyb20gd2hhdCBJIHJlbWVtYmVyIHRoaXMgaXMgdGhlIHBsYWNlIHJlcXVlc3RzIGFyZSBjcmVhdGVkLCBxdWV1ZWQsIGFuZCBhbGxvY2F0ZWQgdG8gdGhlIGRyaXZlci4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBob3cgd2Uga2ljayB0aG9zZSByZXF1ZXN0cyBvZmYuIFNvLCB3aGF0JiMzOTtzIG5leHQ/IEFoIHllcywgYGJsa19tcV9zdGFydF9yZXF1ZXN0YC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgdXAgdG8uIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBmb2N1cyBvbiBob3cgdGhpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIGdldHMgaW5pdGlhbGl6ZWQsIGFuZCBob3cgd2Ugc3RhcnQgYWN0dWFsbHkgbW92aW5nIHRoZSBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfbXFfc3RhcnRfcmVxdWVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz0xMjg3PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJkX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEyOTMtXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYzoxMjk0Olx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEyOTUtXG4tLVxuYmxvY2svYmxrLW1xLmM9MTM1OD1FWFBPUlRfU1lNQk9MKGJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KTtcbi0tXG5ibG9jay9ibGstbXEuYy0xMzYwLS8qKlxuYmxvY2svYmxrLW1xLmM6MTM2MTogKiBibGtfbXFfc3RhcnRfcmVxdWVzdCAtIFN0YXJ0IHByb2Nlc3NpbmcgYSByZXF1ZXN0XG5ibG9jay9ibGstbXEuYy0xMzYyLSAqIEBycTogUG9pbnRlciB0byByZXF1ZXN0IHRvIGJlIHN0YXJ0ZWRcbi0tXG5ibG9jay9ibGstbXEuYy0xMzY3LSAqL1xuYmxvY2svYmxrLW1xLmM6MTM2ODp2b2lkIGJsa19tcV9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbmJsb2NrL2Jsay1tcS5jLTEzNjkte1xuLS1cbmJsb2NrL2Jsay1tcS5jLTEzOTMtfVxuYmxvY2svYmxrLW1xLmM6MTM5NDpFWFBPUlRfU1lNQk9MKGJsa19tcV9zdGFydF9yZXF1ZXN0KTtcbmJsb2NrL2Jsay1tcS5jLTEzOTUtXG4tLVxuYmxvY2svYnNnLWxpYi5jPTI3Mj1zdGF0aWMgYmxrX3N0YXR1c190IGJzZ19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5ibG9jay9ic2ctbGliLmMtMjgyLVxuYmxvY2svYnNnLWxpYi5jOjI4MzpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XG5ibG9jay9ic2ctbGliLmMtMjg0LVxuLS1cbmJsb2NrL2dlbmhkLmM9MTA2Mj1zc2l6ZV90IHBhcnRfc3RhdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5ibG9jay9nZW5oZC5jLTExMDgtICogRm9yIGJpby1iYXNlZCBkZXZpY2UsIHN0YXJ0ZWQgZnJvbSBiZGV2X3N0YXJ0X2lvX2FjY3QoKTtcbmJsb2NrL2dlbmhkLmM6MTEwOTogKiBGb3IgcnEtYmFzZWQgZGV2aWNlLCBzdGFydGVkIGZyb20gYmxrX21xX3N0YXJ0X3JlcXVlc3QoKTtcbmJsb2NrL2dlbmhkLmMtMTExMC0gKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYz0xNTA1PXN0YXRpYyBibGtfc3RhdHVzX3QgYW1pZmxvcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYy0xNTE0LVxuZHJpdmVycy9ibG9jay9hbWlmbG9wLmM6MTUxNTpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svYW1pZmxvcC5jLTE1MTYtXG4tLVxuZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmM9MjUwPXN0YXRpYyBibGtfc3RhdHVzX3QgYW9lYmxrX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jLTI2MC1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmQtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYzoyNjE6XHRcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVx1MDAzZXJxKTtcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jLTI2Mi1cdFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XG4tLVxuZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmM9ODQzPW5leHRidWYoc3RydWN0IGFvZWRldiAqZClcbi0tXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYy04NjItXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnEtXHUwMDNlcXVldWVsaXN0KTtcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jOjg2MzpcdFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xuZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMtODY0LVx0XHRkLVx1MDAzZWlwLnJxID0gcnE7XG4tLVxuZHJpdmVycy9ibG9jay9hb2UvYW9lZGV2LmM9MTk3PWFvZWRldl9kb3duZGV2KHN0cnVjdCBhb2VkZXYgKmQpXG4tLVxuZHJpdmVycy9ibG9jay9hb2UvYW9lZGV2LmMtMjMyLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJxLVx1MDAzZXF1ZXVlbGlzdCk7XG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VkZXYuYzoyMzM6XHRcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWRldi5jLTIzNC1cdFx0YmxrX21xX2VuZF9yZXF1ZXN0KHJxLCBCTEtfU1RTX0lPRVJSKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYz0xNTA0PXN0YXRpYyBibGtfc3RhdHVzX3QgYXRhZmxvcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYy0xNTI1LVx0dW5pdFtkcml2ZV0uZXJyb3JfY291bnQgPSAwO1xuZHJpdmVycy9ibG9jay9hdGFmbG9wLmM6MTUyNjpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGZkX3JlcXVlc3QpO1xuZHJpdmVycy9ibG9jay9hdGFmbG9wLmMtMTUyNy1cbi0tXG5kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jPTI4NDg9c3RhdGljIGJsa19zdGF0dXNfdCBmbG9wcHlfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay9mbG9wcHkuYy0yODUwLXtcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM6Mjg1MTpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVx1MDAzZXJxKTtcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmMtMjg1Mi1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODUxPXN0YXRpYyBibGtfc3RhdHVzX3QgbG9vcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODU3LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1ODpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTktXG4tLVxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jPTMyNjg9c3RhdGljIGJsa19zdGF0dXNfdCBtdGlwX2lzc3VlX3Jlc2VydmVkX2NtZChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzI5OS1cbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYzozMzAwOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jLTMzMDEtXHRtdGlwX2lzc3VlX25vbl9uY3FfY29tbWFuZChkZC1cdTAwM2Vwb3J0LCBycS1cdTAwM2V0YWcpO1xuLS1cbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYz0zMzA1PXN0YXRpYyBibGtfc3RhdHVzX3QgbXRpcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzMyMC1cbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYzozMzIxOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jLTMzMjItXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xMTE3PXN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX2hhbmRsZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZCwgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE3MC1cdCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxMTcxOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE3Mi1cdGlmICh1bmxpa2VseShuc29jay1cdTAwM2VwZW5kaW5nIFx1MDAyNlx1MDAyNiBuc29jay1cdTAwM2VwZW5kaW5nICE9IHJlcSkpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNjUyPXN0YXRpYyBibGtfc3RhdHVzX3QgbnVsbF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNjkxLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTY5MjpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE2OTMtXG4tLVxuZHJpdmVycy9ibG9jay9wczNkaXNrLmM9MTg0PXN0YXRpYyBibGtfc3RhdHVzX3QgcHMzZGlza19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYy0xOTEtXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYzoxOTI6XHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cdTAwM2VycSk7XG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYy0xOTMtXG4tLVxuZHJpdmVycy9ibG9jay9yYmQuYz00NzI1PXN0YXRpYyB2b2lkIHJiZF9xdWV1ZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYmxvY2svcmJkLmMtNDc0Mi1cbmRyaXZlcnMvYmxvY2svcmJkLmM6NDc0MzpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svcmJkLmMtNDc0NC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1jbHQuYz0xMTEzPXN0YXRpYyBibGtfc3RhdHVzX3Qgcm5iZF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1jbHQuYy0xMTQ2LVxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtY2x0LmM6MTE0NzpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLWNsdC5jLTExNDgtXHRlcnIgPSBybmJkX2NsaWVudF94ZmVyX3JlcXVlc3QoZGV2LCBycSwgaXUpO1xuLS1cbmRyaXZlcnMvYmxvY2svc3VudmRjLmM9NTM2PXN0YXRpYyBibGtfc3RhdHVzX3QgdmRjX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svc3VudmRjLmMtNTQ0LVxuZHJpdmVycy9ibG9jay9zdW52ZGMuYzo1NDU6XHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cdTAwM2VycSk7XG5kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jLTU0Ni1cbi0tXG5kcml2ZXJzL2Jsb2NrL3N3aW0uYz01MjY9c3RhdGljIGJsa19zdGF0dXNfdCBzd2ltX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svc3dpbS5jLTUzNi1cbmRyaXZlcnMvYmxvY2svc3dpbS5jOjUzNzpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XG5kcml2ZXJzL2Jsb2NrL3N3aW0uYy01MzgtXG4tLVxuZHJpdmVycy9ibG9jay9zd2ltMy5jPTMwNz1zdGF0aWMgYmxrX3N0YXR1c190IHN3aW0zX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svc3dpbTMuYy0zMTgtXHR9XG5kcml2ZXJzL2Jsb2NrL3N3aW0zLmM6MzE5Olx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvYmxvY2svc3dpbTMuYy0zMjAtXHRmcy1cdTAwM2VjdXJfcmVxID0gcmVxO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMTQ2PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19wcmVwX3JlcShzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNzQtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjE3NTpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTc2LVx0cmV0dXJuIEJMS19TVFNfT0s7XG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9NDA0PXN0YXRpYyBibGtfc3RhdHVzX3QgdmlydGJsa19wcmVwX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTQyMC1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjQyMTpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy00MjItXG4tLVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYz04OTM9c3RhdGljIGJsa19zdGF0dXNfdCBibGtpZl9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTkwMS1cdHJpbmZvID0gZ2V0X3JpbmZvKGluZm8sIHFpZCk7XG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jOjkwMjpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHFkLVx1MDAzZXJxKTtcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMtOTAzLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmluZm8tXHUwMDNlcmluZ19sb2NrLCBmbGFncyk7XG4tLVxuZHJpdmVycy9ibG9jay96MnJhbS5jPTY4PXN0YXRpYyBibGtfc3RhdHVzX3QgejJfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay96MnJhbS5jLTc0LVxuZHJpdmVycy9ibG9jay96MnJhbS5jOjc1Olx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvYmxvY2svejJyYW0uYy03Ni1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9ODg1PXN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwNi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MDc6XHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTA4LVxuLS1cbmRyaXZlcnMvY2Ryb20vZ2Ryb20uYz02MzQ9c3RhdGljIGJsa19zdGF0dXNfdCBnZHJvbV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Nkcm9tL2dkcm9tLmMtNjM2LXtcbmRyaXZlcnMvY2Ryb20vZ2Ryb20uYzo2Mzc6XHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cdTAwM2VycSk7XG5kcml2ZXJzL2Nkcm9tL2dkcm9tLmMtNjM4LVxuLS1cbmRyaXZlcnMvbWQvZG0tcnEuYz00NDA9c3RhdGljIHZvaWQgZG1fc3RhcnRfcmVxdWVzdChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCByZXF1ZXN0ICpvcmlnKVxuZHJpdmVycy9tZC9kbS1ycS5jLTQ0MS17XG5kcml2ZXJzL21kL2RtLXJxLmM6NDQyOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3Qob3JpZyk7XG5kcml2ZXJzL21kL2RtLXJxLmMtNDQzLVxuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jPTE5NzQ9c3RhdGljIGJsa19zdGF0dXNfdCBtc2JfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zX2Jsb2NrLmMtMTk5MC1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1zYi1cdTAwM2VxX2xvY2spO1xuZHJpdmVycy9tZW1zdGljay9jb3JlL21zX2Jsb2NrLmM6MTk5MTpcdFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTE5OTItXHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTE5OTktXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYzoyMDAwOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTIwMDEtXHRtc2ItXHUwMDNlcmVxID0gcmVxO1xuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jPTc1MD1zdGF0aWMgYmxrX3N0YXR1c190IG1zcHJvX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTc2NC1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1zYi1cdTAwM2VxX2xvY2spO1xuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmM6NzY1Olx0XHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cdTAwM2VycSk7XG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYy03NjYtXHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuLS1cbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTc2OS1cdG1zYi1cdTAwM2VibG9ja19yZXEgPSBiZC1cdTAwM2VycTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jOjc3MDpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVx1MDAzZXJxKTtcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTc3MS1cbi0tXG5kcml2ZXJzL21tYy9jb3JlL3F1ZXVlLmM9MjM0PXN0YXRpYyBibGtfc3RhdHVzX3QgbW1jX21xX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvbW1jL2NvcmUvcXVldWUuYy0zMDgtXG5kcml2ZXJzL21tYy9jb3JlL3F1ZXVlLmM6MzA5Olx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvbW1jL2NvcmUvcXVldWUuYy0zMTAtXG4tLVxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYz0xMDY9c3RhdGljIHN0cnVjdCByZXF1ZXN0ICptdGRfbmV4dF9yZXF1ZXN0KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYy0xMTItXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnEtXHUwMDNlcXVldWVsaXN0KTtcbmRyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmM6MTEzOlx0XHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTExNC1cdFx0cmV0dXJuIHJxO1xuLS1cbmRyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmM9MTY2PXN0YXRpYyBibGtfc3RhdHVzX3QgbXRkX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMtMTcyLVx0aWYgKCFkZXYpIHtcbmRyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmM6MTczOlx0XHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cdTAwM2VycSk7XG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTE3NC1cdFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XG4tLVxuZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmM9MTgwPXN0YXRpYyBibGtfc3RhdHVzX3QgdWJpYmxvY2tfcmVhZChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvbXRkL3ViaS9ibG9jay5jLTE5My1cbmRyaXZlcnMvbXRkL3ViaS9ibG9jay5jOjE5NDpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XG5kcml2ZXJzL210ZC91YmkvYmxvY2suYy0xOTUtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEyMTk9c3RhdGljIGlubGluZSB2b2lkIG52bWVfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTEyMjItXHRcdG52bWVfbXBhdGhfc3RhcnRfcmVxdWVzdChycSk7XG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg6MTIyMzpcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMjI0LX1cbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jPTMwMTg9c3RhdGljIGJsa19zdGF0dXNfdCBkb19kYXNkX3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMDkwLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMDkxOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzA5Mi1cdHNwaW5fbG9jayhcdTAwMjZibG9jay1cdTAwM2VxdWV1ZV9sb2NrKTtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jPTI4MT1zdGF0aWMgYmxrX3N0YXR1c190IHNjbV9ibGtfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTMxOS1cdH1cbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmM6MzIwOlx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvczM5MC9ibG9jay9zY21fYmxrLmMtMzIxLVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE4NTM9c3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5MTgtXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxOTE5Olx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jLTE5MjAtXHRpZiAoYmxrX21xX2lzX3Jlc2VydmVkX3JxKHJlcSkpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oPTg1Nz1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX21xX2NvbXBsZXRlX3JlcXVlc3RfZGlyZWN0KHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTg2My1cbmluY2x1ZGUvbGludXgvYmxrLW1xLmg6ODY0OnZvaWQgYmxrX21xX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKTtcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtODY1LXZvaWQgYmxrX21xX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgYmxrX3N0YXR1c190IGVycm9yKTtcbi0tXG5ydXN0L2tlcm5lbC9ibG9jay9tcS5ycy0yNi0vLyEgYFJlcXVlc3Q6OmVuZGAsIG1ldGhvZHMuIEZhaWx1cmUgdG8gZG8gc28gY2FuIGxlYWQgdG8gZGVhZGxvY2sgb3IgdGltZW91dFxucnVzdC9rZXJuZWwvYmxvY2svbXEucnM6Mjc6Ly8hIGVycm9ycy4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgQyBmdW5jdGlvbiBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGlzIGltcGxpY2l0bHlcbnJ1c3Qva2VybmVsL2Jsb2NrL21xLnJzLTI4LS8vISBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBxdWV1ZWQgd2l0aCB0aGUgZHJpdmVyLlxuLS1cbnJ1c3Qva2VybmVsL2Jsb2NrL21xL3JlcXVlc3QucnM9ODk9ICAgIHB1YihjcmF0ZSkgdW5zYWZlIGZuIHN0YXJ0X3VuY2hlY2tlZCh0aGlzOiBcdTAwMjZBUmVmXHUwMDNjU2VsZlx1MDAzZSkge1xuLS1cbnJ1c3Qva2VybmVsL2Jsb2NrL21xL3JlcXVlc3QucnMtOTEtICAgICAgICAvLyB3ZSBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MuXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9yZXF1ZXN0LnJzOjkyOiAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6OmJsa19tcV9zdGFydF9yZXF1ZXN0KHRoaXMuMC5nZXQoKSkgfTtcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL3JlcXVlc3QucnMtOTMtICAgIH1cbi0tXG5zYW1wbGVzL2JwZi90YXNrX2ZkX3F1ZXJ5X2tlcm4uYy02LVxuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV9rZXJuLmM6NzpTRUMoXCYjMzQ7a3Byb2JlL2Jsa19tcV9zdGFydF9yZXF1ZXN0XCYjMzQ7KVxuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV9rZXJuLmMtOC1pbnQgYnBmX3Byb2cxKHN0cnVjdCBwdF9yZWdzICpjdHgpXG4tLVxuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV91c2VyLmM9MzEwPWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbi0tXG5zYW1wbGVzL2JwZi90YXNrX2ZkX3F1ZXJ5X3VzZXIuYy0zNDgtXHQvKiB0ZXN0IHR3byBmdW5jdGlvbnMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgKl9rZXJuLmMgZmlsZSAqL1xuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV91c2VyLmM6MzQ5Olx0Q0hFQ0tfQU5EX1JFVCh0ZXN0X2RlYnVnX2ZzX2twcm9iZSgwLCBcJiMzNDtibGtfbXFfc3RhcnRfcmVxdWVzdFwmIzM0OyxcbnNhbXBsZXMvYnBmL3Rhc2tfZmRfcXVlcnlfdXNlci5jLTM1MC1cdFx0XHRcdFx0ICAgQlBGX0ZEX1RZUEVfS1BST0JFKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTg2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsb2NrIExheWVyIFRpbWVzdGFtcGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlIHRvIGFkZCBzb21lIGluc3RydW1lbnRhdGlvbiBhcm91bmQgYmxvY2sgcmVxdWVzdCB0aW1lc3RhbXBzLiBJIHRoaW5rIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAgYW5kIGBibGtfbXFfc3VibWl0X2Jpb2AgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBpbnZlc3RpZ2F0aW9uLiBUaGV5IHNlZW0gbGlrZSBrZXkgZW50cnkgcG9pbnRzLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIG9yIGVuYWJsZSB0byB1c2UgdGhlIHRpbWVzdGFtcHMgdGhhdCBJIHdhbnQ/IExldCBtZSBjaGVjayB0aGUgY29kZS4gSSBrbm93IHRoaXMgaXMgZGVlcCB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBzbyBJIHNob3VsZCBmaW5kIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbiBgYmxvY2svYmxrLmhgLiBTaW5jZSBgQ09ORklHX0JMT0NLYCBpcyBhIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24sIHRoYXQgc2hvdWxkIGFsd2F5cyBiZSBlbmFibGVkLCBzbyBJIHdvbiYjMzk7dCB3b3JyeSBhYm91dCB0aGF0IGZvciB0aGlzIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZS4gTm93LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYFBGX0JMT0NLX1RTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgaXMgaGFuZGxlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBQRl9CTE9DS19UU2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BGX0JMT0NLX1RTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jb3JlLmM9MTIyNj12b2lkIF9fYmxrX2ZsdXNoX3BsdWcoc3RydWN0IGJsa19wbHVnICpwbHVnLCBib29sIGZyb21fc2NoZWR1bGUpXG4tLVxuYmxvY2svYmxrLWNvcmUuYy0xMjQwLVx0cGx1Zy1cdTAwM2VjdXJfa3RpbWUgPSAwO1xuYmxvY2svYmxrLWNvcmUuYzoxMjQxOlx0Y3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjY9IH5QRl9CTE9DS19UUztcbmJsb2NrL2Jsay1jb3JlLmMtMTI0Mi19XG4tLVxuYmxvY2svYmxrLmg9Njg5PXN0YXRpYyBpbmxpbmUgdTY0IGJsa190aW1lX2dldF9ucyh2b2lkKVxuLS1cbmJsb2NrL2Jsay5oLTcwMS1cdCAqXG5ibG9jay9ibGsuaDo3MDI6XHQgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC5cbmJsb2NrL2Jsay5oLTcwMy1cdCAqL1xuLS1cbmJsb2NrL2Jsay5oLTcwNy1cdFx0V1JJVEVfT05DRShwbHVnLVx1MDAzZWN1cl9rdGltZSwgbm93KTtcbmJsb2NrL2Jsay5oOjcwODpcdFx0LyogRW5zdXJlIFBGX0JMT0NLX1RTIGlzIHNldCBhZnRlciBjdXJfa3RpbWUuICovXG5ibG9jay9ibGsuaC03MDktXHRcdGJhcnJpZXIoKTtcbmJsb2NrL2Jsay5oOjcxMDpcdFx0Y3VycmVudC1cdTAwM2VmbGFncyB8PSBQRl9CTE9DS19UUztcbmJsb2NrL2Jsay5oLTcxMS1cdH1cbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTEyMjA9c3RhdGljIGlubGluZSB2b2lkIGJsa19wbHVnX2ludmFsaWRhdGVfdHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMjI1LVx0XHRwbHVnLVx1MDAzZWN1cl9rdGltZSA9IDA7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEyMjY6XHRjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNj0gflBGX0JMT0NLX1RTO1xuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMjI3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MTc1Mj1leHRlcm4gc3RydWN0IHBpZCAqY2FkX3BpZDtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTc4Ny1cdFx0XHRcdFx0XHQgKiBTZWUgbWVtYWxsb2NfcGluX3NhdmUoKSAqL1xuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE3ODg6I2RlZmluZSBQRl9CTE9DS19UU1x0XHQweDIwMDAwMDAwXHQvKiBwbHVnIGhhcyB0cyB0aGF0IG5lZWRzIHVwZGF0aW5nICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTc4OS0jZGVmaW5lIFBGX19IT0xFX180MDAwMDAwMFx0MHg0MDAwMDAwMFxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzI1Mj1zdGF0aWMgdm9pZCBzY2hlZF91cGRhdGVfd29ya2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxua2VybmVsL3NjaGVkL2NvcmUuYy03MjUzLXtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI1NDpcdGlmICh0c2stXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9XUV9XT1JLRVIgfCBQRl9JT19XT1JLRVIgfCBQRl9CTE9DS19UUykpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI1NTpcdFx0aWYgKHRzay1cdTAwM2VmbGFncyBcdTAwMjYgUEZfQkxPQ0tfVFMpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyNTYtXHRcdFx0YmxrX3BsdWdfaW52YWxpZGF0ZV90cyh0c2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU5MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsb2NrIExheWVyIFRpbWVzdGFtcGluZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBjb3JlIG9mIGl0IGxpZXMgaW4gYGJsa190aW1lX2dldF9uc2AsIHdoaWNoIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgYmxvY2sgbGF5ZXIuIE5vIHNwZWNpYWwgY29uZmlncyBhcmUgcmVxdWlyZWQsIHdoaWNoIGlzIGEgZ29vZCBzaWdu4oCUaXQmIzM5O3MgYSBmb3VuZGF0aW9uYWwgY2hhbmdlLiBXYWl0LCBJIGFsc28gc2VlIHRoYXQgYFBGX0JMT0NLX1RTYCBpcyBpbnZvbHZlZCwgYW5kIHRoYXQmIzM5O3MgdXNlZCBpbiBgc2NoZWRfdXBkYXRlX3dvcmtlcmAsIHJpZ2h0PyBTbywgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBmaXgsIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbi4gSSYjMzk7bSBnb2luZyB0byBmbGFnIHRoaXMgYXMgV29ydGhGdXp6aW5nOyBpdCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJIGluaXRpYWxseSB0aG91Z2h0IG9mIGBibGtfbXFfc3VibWl0X2Jpb2AsIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAsIGFuZCBgYmxrX21xX2FsbG9jX3JlcXVlc3RgIC0gdGhleSYjMzk7cmUgYWxsIGRpcmVjdGx5IHJlbGF0ZWQgYW5kIGltcG9ydGFudC4gQnV0LCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHByb21wdDogJiMzNDtBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4mIzM0OyBUaGlzIHJhY2UgY29uZGl0aW9uIGhhcHBlbnMgYmVjYXVzZSBgY3VyX2t0aW1lYCBpbiBgYmxrX3RpbWVfZ2V0X25zYCBjYW4gYmUgemVyb2VkIGR1cmluZyBwcmVlbXB0aW9uIHdoZW4gYFBGX0JMT0NLX1RTYCBpcyBzZXQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSB0aW1lc3RhbXBpbmcgaXNzdWUuCgpNeSBmaXJzdCB0aG91Z2h0IHdhcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB3ZXJlIHRoZSBob3R0ZXN0IGFuZCBtb3N0IGltcG9ydGFudC4gQnV0LCBtYXliZSB0aGVyZSBhcmUgbGVzcyBob3QtcGF0aCBmdW5jdGlvbnMgdGhhdCB1c2UgaXQuIExldCYjMzk7cyBzZWUuLi4gYGJmcV9hZGRfcmVxdWVzdGAsIGBiZnFfY29tcGxldGVkX3JlcXVlc3RgIGFyZSBzcGVjaWZpYyB0byBCRlEuLi4gdGhlbiB0aGVyZSBhcmUgdGhlIGNncm91cCBhbmQgUW9TIGZ1bmN0aW9uczogYGJmcWdfc3RhdHNfdXBkYXRlX2lkbGVfdGltZWAsIGBiZnFnX3N0YXRzX3VwZGF0ZV9jb21wbGV0aW9uYCwgYGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2dgLCBgaW9jX2F1dG9wX2lkeGAsIGBibGtjZ19pb2xhdGVuY3lfZG9uZV9iaW9gLCBgcndiX3N5bmNfaXNzdWVfbGF0YC4gQW5kIHdoYXQgYWJvdXQgYGJsa19tcV9hbGxvY19yZXF1ZXN0YD8gSSBzaG91bGQgcHJvYmFibHkgcnVsZSB0aGF0IG91dC4KClRoZXJlJiMzOTtzIG5vIHBhcnRpY3VsYXIgdGVzdCBvciBpb2N0bCB0aGF0IHdvdWxkIGJlIHNwZWNpZmljIHRvIHRoaXMsIGl0JiMzOTtzIHJlYWxseSB0aGUgcmFjZSBjb25kaXRpb24gd2hlbiBgUEZfQkxPQ0tfVFNgIGlzIHNldCwgYW5kIHByZWVtcHRpb24gaGFwcGVucywgdXN1YWxseSBkdXJpbmcgc2NoZWR1bGluZy4uLiBzbyBwcmV0dHkgbXVjaCBhbnkgYmxvY2sgSU8gaXMgZ29pbmcgdG8gdHJpZ2dlciB0aGlzIGNvbmRpdGlvbi4KCk9rYXksIGxldCYjMzk7cyBnZXQgYmFjayB0byB0aGUgZm9jdXMgc3ltYm9scy4gTm93LCBJICpjb3VsZCoganVzdCBsaXN0IGBibGtfbXFfc3VibWl0X2Jpb2AgYW5kIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAgYmVjYXVzZSB0aGV5ICphcmUqIHRoZSBtYWluIGZ1bmN0aW9ucyB1c2luZyBpdCwgZXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgaG90IHBhdGhzLiBBbmQgdGhlIHByb21wdCBpcyByZWFsbHkgdGVsbGluZyBtZSB0byBiZSBjYXJlZnVsIGhlcmUuLi4gaWYgSSBsaXN0IGBibGtfbXFfc3VibWl0X2Jpb2AsIGl0JiMzOTtzIGdvaW5nIHRvIHNrZXcgdGhlIGRpc3RyaWJ1dGlvbi4gSG1tbS4uLldoYXQgYWJvdXQgYGJsa19wbHVnX2ludmFsaWRhdGVfdHNgPyBUaGF0JiMzOTtzIGNhbGxlZCBmcm9tIGBzY2hlZF91cGRhdGVfd29ya2VyYC4KClJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBvbmUgZG9lcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3BsdWdfaW52YWxpZGF0ZV90cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTEyMTE9c3RhdGljIGlubGluZSB2b2lkIGJsa19mbHVzaF9wbHVnKHN0cnVjdCBibGtfcGx1ZyAqcGx1ZywgYm9vbCBhc3luYylcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEyMTktICovXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEyMjA6c3RhdGljIGlubGluZSB2b2lkIGJsa19wbHVnX2ludmFsaWRhdGVfdHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEyMjEte1xuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTI0OD1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX2ZsdXNoX3BsdWcoc3RydWN0IGJsa19wbHVnICpwbHVnLCBib29sIGFzeW5jKVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTI1MS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTI1MjpzdGF0aWMgaW5saW5lIHZvaWQgYmxrX3BsdWdfaW52YWxpZGF0ZV90cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTI1My17XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz03MjUyPXN0YXRpYyB2b2lkIHNjaGVkX3VwZGF0ZV93b3JrZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy03MjU1LVx0XHRpZiAodHNrLVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9CTE9DS19UUylcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI1NjpcdFx0XHRibGtfcGx1Z19pbnZhbGlkYXRlX3RzKHRzayk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyNTctXHRcdGlmICh0c2stXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX1dRX1dPUktFUilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIExpc3Qgb2YgRnVuY3Rpb25zIEltcGFjdGVkIGJ5IGBibGtfdGltZV9nZXRfbnNgKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGBibGtfdGltZV9nZXRfbnNgIGNoYW5nZS4gVGhlIGtleSBpcyB0aGF0IGl0JiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQmIzM5O3Mgbm90IGdvaW5nIHRvIHNob3cgdXAgYXMgYSBzdGFuZGFyZCBzeW1ib2wuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCAqdXNlKiBpdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgdGhlIGJyZWFkdGggb2YgaW1wYWN0LgoKSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgbGlzdGluZyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgbGVzcyBnZW5lcmljLiBJIHRob3VnaHQgSSBzaG91bGQgbGlzdCBgYmZxX2FkZF9yZXF1ZXN0YCwgYGJmcV9jb21wbGV0ZWRfcmVxdWVzdGAsIGBpb2NfYXV0b3BfaWR4YCwgYW5kIGBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnYC4gQnV0LCBhZnRlciByZWNvbnNpZGVyaW5nLCBJIGRlY2lkZWQgdG8gcmVtb3ZlIGBiZnFfY29tcGxldGVkX3JlcXVlc3RgLgoKSG93ZXZlciwgYXMgSSB0cmFjZWQgZnVydGhlciwgSSByZWFsaXplZCBgYmxrX3RpbWVfZ2V0X25zYCBpcyBhbHNvIHVzZWQgaW4gYGJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdGAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYGJsa19tcV9hbGxvY19yZXF1ZXN0YC4gSSBuZWVkIHRvIHJlZmxlY3QgdGhpcyBkZXBlbmRlbmN5LiBBZnRlciBmdXJ0aGVyIHRob3VnaHQsIEkmIzM5O20gZ29pbmcgdG8gcmVtb3ZlIGBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3RgIHNpbmNlIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLgoKVGhlcmVmb3JlLCB0aGUgZmluYWwgbGlzdCBmb3IgY29uc2lkZXJhdGlvbiBpczogYGJmcV9hZGRfcmVxdWVzdGAsIGBpb2NfYXV0b3BfaWR4YCwgYGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2dgLCBhbmQgYGJsa19tcV9hbGxvY19yZXF1ZXN0YC4gVGhpcyBsaXN0IHNob3VsZCBwcm92aWRlIGEgY2xlYXIgcGljdHVyZSBvZiB3aGVyZSB0aGlzIGNoYW5nZSBpbiBgYmxrX3RpbWVfZ2V0X25zYCBtaWdodCBiZSBmZWx0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBpZiBgYmZxX2FkZF9yZXF1ZXN0YCBpcyBzdGF0aWMgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JmcV9hZGRfcmVxdWVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZnEtaW9zY2hlZC5jPTIxMzQ9c3RhdGljIHZvaWQgYmZxX2NoZWNrX3dha2VyKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgc3RydWN0IGJmcV9xdWV1ZSAqYmZxcSxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTIyMDUtXG5ibG9jay9iZnEtaW9zY2hlZC5jOjIyMDY6c3RhdGljIHZvaWQgYmZxX2FkZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjIwNy17XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz0zMTI3PXN0YXRpYyBzdHJ1Y3QgYmZxX3F1ZXVlICpiZnFfbWVyZ2VfYmZxcXMoc3RydWN0IGJmcV9kYXRhICpiZnFkLFxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzE2OS1cdCAqIHRvIGJlIHdlaWdodC1yYWlzZWQgKHdoaWNoIG1heSBoYXBwZW4gYmVjYXVzZSBFUU0gbWF5IG1lcmdlXG5ibG9jay9iZnEtaW9zY2hlZC5jOjMxNzA6XHQgKiBiZnFxIGV2ZW4gYmVmb3JlIGJmcV9hZGRfcmVxdWVzdCBpcyBleGVjdXRlZCBmb3IgdGhlIGZpcnN0XG5ibG9jay9iZnEtaW9zY2hlZC5jLTMxNzEtXHQgKiB0aW1lIGZvciBiZnFxKS4gSGFuZGxpbmcgdGhpcyBjYXNlIHdvdWxkIGhvd2V2ZXIgYmUgdmVyeVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM9NTk0Mj1zdGF0aWMgdm9pZCBiZnFfdXBkYXRlX2hhc19zaG9ydF90dGltZShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MDUxLVx0ICogd2FrZXIgcXVldWUgaXMgZGVmaW5lZCBpbiB0aGUgY29tbWVudHMgaW5cbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjA1MjpcdCAqIGJmcV9hZGRfcmVxdWVzdCgpKS4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBzdGFydCBzb29uZXJcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjA1My1cdCAqIHRvIGJvb3N0IHRocm91Z2hwdXQgbW9yZSBlZmZlY3RpdmVseSwgYnkgaW5qZWN0aW5nIHRoZSBJL09cbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYxNDc9c3RhdGljIGJvb2wgX19iZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTkwLVx0d2FpdGluZyA9IGJmcXEgXHUwMDI2XHUwMDI2IGJmcV9iZnFxX3dhaXRfcmVxdWVzdChiZnFxKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjE5MTpcdGJmcV9hZGRfcmVxdWVzdChycSk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxOTItXHRpZGxlX3RpbWVyX2Rpc2FibGVkID0gd2FpdGluZyBcdTAwMjZcdTAwMjYgIWJmcV9iZnFxX3dhaXRfcmVxdWVzdChiZnFxKTtcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYzNDY9c3RhdGljIHZvaWQgYmZxX2NvbXBsZXRlZF9yZXF1ZXN0KHN0cnVjdCBiZnFfcXVldWUgKmJmcXEsIHN0cnVjdCBiZnFfZGF0YSAqYmZxZClcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTY1NzYtICogcGllY2VzIG9mIGNvZGUgdGhhdCBpbXBsZW1lbnQgdGhlc2Ugc3RlcHM6IHRoZSBicmFuY2ggaGFuZGxpbmcgdGhlXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY1Nzc6ICogdHJhbnNpdGlvbiBmcm9tIGVtcHR5IHRvIG5vbiBlbXB0eSBpbiBiZnFfYWRkX3JlcXVlc3QoKSwgdGhlIGJyYW5jaFxuYmxvY2svYmZxLWlvc2NoZWQuYy02NTc4LSAqIGhhbmRsaW5nIGluamVjdGlvbiBpbiBiZnFfc2VsZWN0X3F1ZXVlKCksIGFuZCB0aGUgZnVuY3Rpb25cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NDEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgUmVxdWVzdCBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIG1hcCBvdXQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbiB0aGlzIEkvTyBwYXRoLiBgYmZxX2FkZF9yZXF1ZXN0YCBpcyBzdGF0aWMsIHNvIEkgY2FuJiMzOTt0IGRpcmVjdGx5IGxpc3QgdGhhdCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlLi4uIEkgY2FuIGxpc3QgYF9fYmZxX2luc2VydF9yZXF1ZXN0YCwgcmlnaHQ/IEFuZCBmb2xsb3dpbmcgdGhhdCwgSSBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSBgaW9jX2F1dG9wX2lkeGAgYW5kIGBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnYCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2wgZmxvdy4gV2FpdCBhIG1pbnV0ZSwgSSBhbHNvIHNlZSB0aGF0IGBibGtfdGltZV9nZXRfbnNgIGlzIHVzZWQgaW4gYGJsa19hY2NvdW50X2lvX3N0YXJ0YC4gQW5kICp0aGF0KiBvbmUgaXMgc3RhdGljIGlubGluZSwgY2FsbGVkIGZyb20gYGJsa19tcV9zdGFydF9yZXF1ZXN0YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQhCgpUaGVyZWZvcmUgSSYjMzk7bGwgbGlzdCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGFuZCBgYmxrX21xX3N1Ym1pdF9iaW9gLiBUaGV5IGhhdmUgdG8gYmUgaW4gdGhlcmUsIGV2ZW4gaWYgdGhleSYjMzk7cmUgY29uc2lkZXJlZCBob3QgcGF0aHMsIGJlY2F1c2UgdGhleSYjMzk7cmUgdGhlIG1ham9yIGVudHJ5IHBvaW50cyBmcm9tIHRoZSBibG9jayBsYXllci4gTm93LCBnaXZlbiB0aGF0IGBfX2JmcV9pbnNlcnRfcmVxdWVzdGAgaXMgc3RhdGljLCBJIHNob3VsZCBsaXN0IGBiZnFfaW5zZXJ0X3JlcXVlc3RgIGl0c2VsZiwgd2hpY2ggaXMgdGhlIGVsZXZhdG9yIG9wZXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBvbmUgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiZnFfaW5zZXJ0X3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWlvc2NoZWQuYz0yNDk4PXN0YXRpYyB2b2lkIGJmcV9yZXF1ZXN0X21lcmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTI1NTItICogdGhlIGZ1bmN0aW9uIHRoYXQgZmlsbHMgdGhpcyBoYXNoIHRhYmxlIChlbHZfcnFoYXNoX2FkZCkgaXMgY2FsbGVkXG5ibG9jay9iZnEtaW9zY2hlZC5jOjI1NTM6ICogb25seSBieSBiZnFfaW5zZXJ0X3JlcXVlc3QuXG5ibG9jay9iZnEtaW9zY2hlZC5jLTI1NTQtICovXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02MTM4PXN0YXRpYyB2b2lkIGJmcXFfcmVxdWVzdF9mcmVlZChzdHJ1Y3QgYmZxX3F1ZXVlICpiZnFxKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjE0Ni0vKiByZXR1cm5zIHRydWUgaWYgaXQgY2F1c2VzIHRoZSBpZGxlIHRpbWVyIHRvIGJlIGRpc2FibGVkICovXG5ibG9jay9iZnEtaW9zY2hlZC5jOjYxNDc6c3RhdGljIGJvb2wgX19iZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxNDgte1xuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM9NjIzND1zdGF0aWMgc3RydWN0IGJmcV9xdWV1ZSAqYmZxX2luaXRfcnEoc3RydWN0IHJlcXVlc3QgKnJxKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjIzNS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjIzNjpzdGF0aWMgdm9pZCBiZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjIzNy1cdFx0XHQgICAgICAgYmxrX2luc2VydF90IGZsYWdzKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI2NC1cdH0gZWxzZSB7XG5ibG9jay9iZnEtaW9zY2hlZC5jOjYyNjU6XHRcdGlkbGVfdGltZXJfZGlzYWJsZWQgPSBfX2JmcV9pbnNlcnRfcmVxdWVzdChiZnFkLCBycSk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyNjYtXHRcdC8qXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyNjctXHRcdCAqIFVwZGF0ZSBiZnFxLCBiZWNhdXNlLCBpZiBhIHF1ZXVlIG1lcmdlIGhhcyBvY2N1cnJlZFxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MjY4Olx0XHQgKiBpbiBfX2JmcV9pbnNlcnRfcmVxdWVzdCwgdGhlbiBycSBoYXMgYmVlblxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjY5LVx0XHQgKiByZWRpcmVjdGVkIGludG8gYSBuZXcgcXVldWUuXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjkxLVxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MjkyOnN0YXRpYyB2b2lkIGJmcV9pbnNlcnRfcmVxdWVzdHMoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyOTMtXHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjMwMC1cdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZycS1cdTAwM2VxdWV1ZWxpc3QpO1xuYmxvY2svYmZxLWlvc2NoZWQuYzo2MzAxOlx0XHRiZnFfaW5zZXJ0X3JlcXVlc3QoaGN0eCwgcnEsIGZsYWdzKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjMwMi1cdH1cbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTc1OTM9c3RhdGljIHN0cnVjdCBlbGV2YXRvcl90eXBlIGlvc2NoZWRfYmZxX21xID0ge1xuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzU5OS1cdFx0LmV4aXRfaWNxXHRcdD0gYmZxX2V4aXRfaWNxLFxuYmxvY2svYmZxLWlvc2NoZWQuYzo3NjAwOlx0XHQuaW5zZXJ0X3JlcXVlc3RzXHQ9IGJmcV9pbnNlcnRfcmVxdWVzdHMsXG5ibG9jay9iZnEtaW9zY2hlZC5jLTc2MDEtXHRcdC5kaXNwYXRjaF9yZXF1ZXN0XHQ9IGJmcV9kaXNwYXRjaF9yZXF1ZXN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg0NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBUYXJnZXRlZCBCbG9jayBJL08gVHJhY2luZyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gaWRlbnRpZnkgc29tZSBrZXkgZnVuY3Rpb25zIGZvciB0cmFjaW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBpbmNsdWRlIGBiZnFfaW5zZXJ0X3JlcXVlc3RzYCwgYGJsa19tcV9zdGFydF9yZXF1ZXN0YCwgYW5kIGBibGtfbXFfc3VibWl0X2Jpb2AuIFdhaXQgYSBtaW51dGUsIGBibGtfbXFfc3VibWl0X2Jpb2AgaXMganVzdCAqdG9vKiBnZW5lcmljLiBUaGF0JiMzOTtzIGEgaHVnZSBob3QgcGF0aCwgYW5kIGluY2x1ZGluZyBpdCB3b3VsZCBsaWtlbHkgdGhyb3cgb2ZmIGFueSBtZWFuaW5nZnVsIGRpc3RyaWJ1dGlvbiBhbmFseXNpcy4gCgpTbywgSSBuZWVkIHRvIG5hcnJvdyB0aGlzIGRvd24sIGV2ZW4gdGhvdWdoIEkgZGlkIGNvbnNpZGVyIGBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4YCBhbmQgYGJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdGAuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyIC0gYXZvaWQgdGhvc2UgZ2VuZXJpYywgY29tbW9uIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIHNrZXcgdGhlIHJlc3VsdHMuIE9rYXksIGZvY3VzaW5nIGFnYWluLCBsZXQmIzM5O3MgbGlzdCBgYmZxX2luc2VydF9yZXF1ZXN0c2AsIGBpb2NfYXV0b3BfaWR4YCwgYW5kIGBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnYC4gVGhvc2Ugc2VlbSBzcGVjaWZpYyBlbm91Z2ggdG8gcHJvdmlkZSBnb29kIGluc2lnaHQgd2l0aG91dCBiZWluZyBvdmVybHkgdWJpcXVpdG91cy4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBpb2NfYXV0b3BfaWR4YCB0byBjb25maXJtIGl0cyBzdWl0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9jX2F1dG9wX2lkeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW9jb3N0LmM9NzY1PXN0YXRpYyB2b2lkIGlvY19yZWZyZXNoX3BlcmlvZF91cyhzdHJ1Y3QgaW9jICppb2MpXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTgwNi0gKi9cbmJsb2NrL2Jsay1pb2Nvc3QuYzo4MDc6c3RhdGljIGludCBpb2NfYXV0b3BfaWR4KHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9ibGstaW9jb3N0LmMtODA4LXtcbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9OTEyPXN0YXRpYyBib29sIGlvY19yZWZyZXNoX3BhcmFtc19kaXNrKHN0cnVjdCBpb2MgKmlvYywgYm9vbCBmb3JjZSxcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtOTE5LVxuYmxvY2svYmxrLWlvY29zdC5jOjkyMDpcdGlkeCA9IGlvY19hdXRvcF9pZHgoaW9jLCBkaXNrKTtcbmJsb2NrL2Jsay1pb2Nvc3QuYy05MjEtXHRwID0gXHUwMDI2YXV0b3BbaWR4XTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFN0YXRpYyBEYXRhIFN0cnVjdHVyZXMqKgoKQWxyaWdodCwgc28gYGlvY19hdXRvcF9pZHhgIGlzIGRlZmluZWQgYXMgc3RhdGljLiBBbmQgSSYjMzk7bSBzZWVpbmcgdGhhdCBgaW9jX3JlZnJlc2hfcGFyYW1zX2Rpc2tgIGlzIGFsc28gYSBzdGF0aWMgZWxlbWVudC4gIEdpdmVuIHRoYXQgYm90aCBhcmUgc3RhdGljLCB0aGVyZSYjMzk7cyBsaWtlbHkgc29tZSBpbXBvcnRhbnQgaW50ZXJhY3Rpb24gb3IgcmVsYXRpb25zaGlwIHRvIGV4cGxvcmUuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGBpb2NfcmVmcmVzaF9wYXJhbXNfZGlza2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIHN0b3JpbmcsIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhlIHN0YXRpYyBuYXR1cmUgaGFzIG9uIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9jX3JlZnJlc2hfcGFyYW1zX2Rpc2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvY29zdC5jPTg5Nz1zdGF0aWMgdm9pZCBpb2NfcmVmcmVzaF9sY29lZnMoc3RydWN0IGlvYyAqaW9jKVxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy05MTEtICovXG5ibG9jay9ibGstaW9jb3N0LmM6OTEyOnN0YXRpYyBib29sIGlvY19yZWZyZXNoX3BhcmFtc19kaXNrKHN0cnVjdCBpb2MgKmlvYywgYm9vbCBmb3JjZSxcbmJsb2NrL2Jsay1pb2Nvc3QuYy05MTMtXHRcdFx0XHQgICAgc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jPTk1MT1zdGF0aWMgYm9vbCBpb2NfcmVmcmVzaF9wYXJhbXMoc3RydWN0IGlvYyAqaW9jLCBib29sIGZvcmNlKVxuYmxvY2svYmxrLWlvY29zdC5jLTk1Mi17XG5ibG9jay9ibGstaW9jb3N0LmM6OTUzOlx0cmV0dXJuIGlvY19yZWZyZXNoX3BhcmFtc19kaXNrKGlvYywgZm9yY2UsIGlvYy1cdTAwM2VycW9zLmRpc2spO1xuYmxvY2svYmxrLWlvY29zdC5jLTk1NC19XG4tLVxuYmxvY2svYmxrLWlvY29zdC5jPTI4OTE9c3RhdGljIGludCBibGtfaW9jb3N0X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTI5MjktXHRpb2MtXHUwMDNlYXV0b3BfaWR4ID0gQVVUT1BfSU5WQUxJRDtcbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTMwOlx0aW9jX3JlZnJlc2hfcGFyYW1zX2Rpc2soaW9jLCB0cnVlLCBkaXNrKTtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTMxLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMjEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIHRoaW5raW5nIGFib3V0IHRoZW0gZnJvbSBhIHN5c3RlbS1sZXZlbCBwZXJzcGVjdGl2ZSwgbGlrZSBJIGFsd2F5cyBkbzoKCioqQ29uc2lkZXJpbmcgQmxvY2sgSS9PIENvc3QgYW5kIFRocm90dGxpbmcqKgoKUmlnaHQsIGBibGtfaW9jb3N0X2luaXRgIC0gdGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBnZXR0aW5nIGEgaGFuZGxlIG9uIEkvTyBjb3N0cy4gV2UgbmVlZCBhIHdheSB0byB0cmFjayB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgYmxvY2sgZGV2aWNlcyBhbmQgZ3JvdXBzIGZvciBwcm9wZXIgYWNjb3VudGluZyBhbmQgY29udHJvbC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYSByb2J1c3QgSS9PIHNjaGVkdWxlciBhbmQgY29udHJvbCBzeXN0ZW0uCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgYWJvdXQgYGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2dgPyBUaGF0JiMzOTtzIHRoZSBwYXJ0IHdoZXJlIHdlIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggdGhlIGNvc3QgaW5mb3JtYXRpb24sIGlzbiYjMzk7dCBpdD8gSXQgc291bmRzIGxpa2UgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBhbnkgdGhyb3R0bGluZyBsaW1pdHMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZC4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHdlIG1ha2UgdGhlIGNyaXRpY2FsIGRlY2lzaW9uIHRvIGVpdGhlciBhbGxvdyBhbiBJL08gcmVxdWVzdCB0byBnbyB0aHJvdWdoIG9yIGFwcGx5IHRoZSBicmFrZXMsIGJhc2VkIG9uIHRoZSByZXNvdXJjZSBjb25zdW1wdGlvbiBvZiB0aGUgYmxvY2sgZ3JvdXAuIEludGVyZXN0aW5nLiBJIHdvbmRlciBhYm91dCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zLiBEb2VzIGl0IGFwcGx5IGRlbGF5cz8gUHJpb3JpdGl6YXRpb24gc2hpZnRzPyBPciBtYXliZSBldmVuIHJlcXVlc3QgcmVqZWN0aW9uIGluIGV4dHJlbWUgY2FzZXM/IEl0IHByb2JhYmx5IGRlcGVuZHMgb24gaG93IHRoZSB0aHJvdHRsaW5nIHN5c3RlbSBpcyBkZXNpZ25lZCwgdGhlIGNvbnN0cmFpbnRzIHNldCwgYW5kIHdoYXQmIzM5O3MgYmVzdCBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJiMzOTtzIHN0YWJpbGl0eS4gRGVmaW5pdGVseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmM9MTg4Nz1zdGF0aWMgdm9pZCBibGtjZ19zY2FsZV9kZWxheShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHU2NCBub3cpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE5NDMtICovXG5ibG9jay9ibGstY2dyb3VwLmM6MTk0NDpzdGF0aWMgdm9pZCBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnKHN0cnVjdCBibGtjZ19ncSAqYmxrZywgYm9vbCB1c2VfbWVtZGVsYXkpXG5ibG9jay9ibGstY2dyb3VwLmMtMTk0NS17XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTIwMTA9dm9pZCBibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50KHZvaWQpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIwMzMtXG5ibG9jay9ibGstY2dyb3VwLmM6MjAzNDpcdGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2coYmxrZywgdXNlX21lbWRlbGF5KTtcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMDM1LVx0YmxrZ19wdXQoYmxrZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTgwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBmb3IgU2VsZWN0aW5nIEtleSBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gYGJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnRgIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY2FuZGlkYXRlOyB0aGF0IGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gTm93LCBJIHNob3VsZCBtYWtlIGEgcXVpY2sgbGlzdCBvZiB3aGF0IEkmIzM5O20gY29uc2lkZXJpbmcuIGBiZnFfaW5zZXJ0X3JlcXVlc3RzYCwgYGJsa19pb2Nvc3RfaW5pdGAsIGFuZCwgYXMgSSBzYWlkLCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudGAuIFdhaXQgYSBtaW51dGUsIGBibGtfdGltZV9nZXRfbnNgIGlzIHVzZWQgd2l0aGluIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIGNhbGxlZCBmb3IgKmV2ZXJ5KiBzaW5nbGUgcmVxdWVzdC4KCklmIEkgZG9uJiMzOTt0IGV4cGxpY2l0bHkgbGlzdCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgLCB0aGUgZnV6emVyIG1pZ2h0IG92ZXJsb29rIGl0LCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBpdCBmb2N1c2VzIHRoZXJlLiBCdXQsIG9uIHRoZSBvdGhlciBoYW5kLCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGlzIGEgaG90IHBhdGggLSB0aGF0IGlzIGdvaW5nIHRvIGJlIHVzZWQgYSAqbG90Ki4gR2l2ZW4gdGhhdCBpdCYjMzk7cyB0aGUgbW9zdCBkaXJlY3QgY2FsbGVyIG9mIHRoZSBjb2RlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgSSYjMzk7bGwgbGlzdCBpdCBhbnl3YXkuCgpIbW0sIHdhaXQuIEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoIGhlcmUuIGBibGtfdGltZV9nZXRfbnNgIGlzIGFsc28gdXNlZCBpbiBgYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eGAuIE9rYXksIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhgIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz02OTg9RVhQT1JUX1NZTUJPTChibGtfbXFfYWxsb2NfcmVxdWVzdCk7XG5ibG9jay9ibGstbXEuYy02OTktXG5ibG9jay9ibGstbXEuYzo3MDA6c3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5ibG9jay9ibGstbXEuYy03MDEtXHRibGtfb3BmX3Qgb3BmLCBibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBoY3R4X2lkeClcbi0tXG5ibG9jay9ibGstbXEuYy03NzktfVxuYmxvY2svYmxrLW1xLmM6NzgwOkVYUE9SVF9TWU1CT0xfR1BMKGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHgpO1xuYmxvY2svYmxrLW1xLmMtNzgxLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMTY0PWludCBfX252bWVfc3VibWl0X3N5bmNfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTExNzgtXHRlbHNlXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTE3OTpcdFx0cmVxID0gYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eChxLCBudm1lX3JlcV9vcChjbWQpLCBibGtfZmxhZ3MsXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE4MC1cdFx0XHRcdFx0XHRxaWQgLSAxKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oPTc2NT1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX2FsbG9jX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19vcGZfdCBvcGYsXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTc2Ni1cdFx0YmxrX21xX3JlcV9mbGFnc190IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvYmxrLW1xLmg6NzY3OnN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuaW5jbHVkZS9saW51eC9ibGstbXEuaC03NjgtXHRcdGJsa19vcGZfdCBvcGYsIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQRl9CTE9DS19UUyBCdWcqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgYFBGX0JMT0NLX1RTYCBidWcuIExldCBtZSBzdGFydCBieSBsaXN0aW5nIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLCBqdXN0IHRvIGdldCBteSBiZWFyaW5ncy4gSSYjMzk7bSB0aGlua2luZyBvZiBgYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eGAsIGBibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50YCwgYW5kIGBiZnFfaW5zZXJ0X3JlcXVlc3RzYC4gV2FpdCBhIHNlY29uZOKApiB0aGUgYnVnIGlzIGFjdHVhbGx5IGFib3V0IGBQRl9CTE9DS19UU2AuIFJpZ2h0LCB0aGF0IGZsYWcuIEkgcmVtZW1iZXIgbm93LgoKYFBGX0JMT0NLX1RTYCBnZXRzIHNldCBpbiBgYmxrX3RpbWVfZ2V0X25zYCB3aGVuIGBwbHVnLSZndDtjdXJfa3RpbWVgIGlzIHplcm8uIFRoYXQgbWVhbnMgYSBibG9jayBwbHVnIGhhcyB0byBiZSBhY3RpdmUuIE9rYXksIGJsb2NrIHBsdWdz4oCmIHRob3NlIGFyZSB1c2VkIGluIGBibGtfc3RhcnRfcGx1Z2AgYW5kIGBibGtfZmluaXNoX3BsdWdgLiBUaG9zZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIGJsb2NrIGxheWVyIGZlYXR1cmVzLCBzbyBpdCYjMzk7cyBhIGJyb2FkIGFyZWEgdG8gaW52ZXN0aWdhdGUuCgpBbHJpZ2h0LCBJJiMzOTtsbCBnbyBiYWNrIHRvIGxpc3RpbmcgdGhvc2Uga2V5IGZ1bmN0aW9uczogYGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhgLCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudGAsIGFuZCBgYmZxX2luc2VydF9yZXF1ZXN0c2AuIEFuZCBJIHNob3VsZCBpbmNsdWRlIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGBibGtfdGltZV9nZXRfbnNgIGlzIG1vc3QgY29tbW9ubHkgY2FsbGVkLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudGAgaXMgdGllZCB0byBgQ09ORklHX0JMS19DR1JPVVBgLiBgYmZxX2luc2VydF9yZXF1ZXN0c2AgbmVlZHMgYENPTkZJR19JT1NDSEVEX0JGUWAuIExldCYjMzk7cyB0aHJvdyBpbiBgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUYCBmb3IgYGJsa19pb2Nvc3RfaW5pdGAuIFNvLCBteSBmb2N1cyBzaG91bGQgYmUgb24gYENPTkZJR19CTEtfQ0dST1VQYCBhbmQgYENPTkZJR19JT1NDSEVEX0JGUWAuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRob3NlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9TQ0hFRF9CRlEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkPTEwPWNvbmZpZyBNUV9JT1NDSEVEX0tZQkVSXG4tLVxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTE4LVxuYmxvY2svS2NvbmZpZy5pb3NjaGVkOjE5OmNvbmZpZyBJT1NDSEVEX0JGUVxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTIwLVx0dHJpc3RhdGUgXCYjMzQ7QkZRIEkvTyBzY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqS2VybmVsIEJsb2NrIExheWVyIEVuaGFuY2VtZW50cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBvdXRsaW5lIG15IHBsYW4gZm9yIGltcHJvdmluZyB0aGUgYmxvY2sgbGF5ZXIuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBpbnRlZ3JhdGUgYElPU0NIRURfQkZRYC4gVGhhdCYjMzk7cyBjcnVjaWFsLiBCRlEgb2ZmZXJzIGEgbXVjaCBtb3JlIHJlZmluZWQgYXBwcm9hY2ggdG8gSS9PIHNjaGVkdWxpbmcsIGFuZCByZWFsbHkgaGVscHMgd2l0aCByZXNwb25zaXZlbmVzcyBpbiBjb25nZXN0ZWQgc2l0dWF0aW9ucy4gR29vZCBjYW5kaWRhdGUgZm9yIHRoZSBuZXcgc2V0dXAuIFRoZW4sIHRvIG1ha2Ugc3VyZSB0aGlzIGFsbCBwbGF5cyBuaWNlbHkgSSYjMzk7bGwgaW50ZWdyYXRlIGBCTEtfQ0dST1VQYC4gTm8gcXVlc3Rpb24sIGNvbnRyb2wgZ3JvdXBzIGFyZSBlc3NlbnRpYWwgZm9yIG1hbmFnaW5nIHJlc291cmNlIGFsbG9jYXRpb24sIGlzb2xhdGlvbiwgYW5kLCB5b3Uga25vdywgZmFpcm5lc3MgYWNyb3NzIGRpZmZlcmVudCB3b3JrbG9hZHMuIFdlICpuZWVkKiB0aGlzIGluIHBsYWNlLiBGaW5hbGx5LCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBmb2xkIGluIGBCTEtfQ0dST1VQX0lPQ09TVGAuIFRoaXMgaXMgdGhlIGdsdWU7IGl0IGFsbG93cyBtZSB0byBwcm9wZXJseSBsZXZlcmFnZSBhbmQgYWNjb3VudCBmb3IgdGhlIEkvTyBjb3N0cyBvZiBlYWNoIGNvbnRyb2wgZ3JvdXAsIHByb3ZpZGluZyBhIG11Y2ggbW9yZSBhY2N1cmF0ZSBwaWN0dXJlIGZvciBwb2xpY3kgZGVjaXNpb25zIGFuZCBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4gR290IGl0LiBUaGlzIGNvbWJpbmF0aW9uIGdpdmVzIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxuLS1cbmJsb2NrL0tjb25maWctNDEtXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxuYmxvY2svS2NvbmZpZy00My1cdGJvb2xcbmJsb2NrL0tjb25maWctNDQtXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXG5ibG9jay9LY29uZmlnLTQ2LVx0Ym9vbFxuLS1cbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXG4tLVxuYmxvY2svS2NvbmZpZy0xMzMtXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbmJsb2NrL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTQ0LVxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbmJsb2NrL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE2My1cbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xuYmxvY2svS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O0Nncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1wmIzM0O1xuLS1cbmluaXQvS2NvbmZpZz0xMDg1PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTAxLVxuaW5pdC9LY29uZmlnOjExMDI6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTAzLVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDY0CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEJsb2NrIExheWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgc3VidGxlLCB5ZXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgdGltZXN0YW1waW5nIG1lY2hhbmlzbS4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBJT1NDSEVEX0JGUWAsIGBCTEtfQ0dST1VQYCwgYW5kIGBCTEtfQ0dST1VQX0lPQ09TVGAsIHdoaWNoIGluZGljYXRlcyB0aGlzIGlzIHBvdGVudGlhbGx5IHRvdWNoaW5nIG9uIEkvTyBzY2hlZHVsaW5nIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhcyB0aG9zZSBhcmUgYXJlYXMgSSYjMzk7dmUgc3BlbnQgYSBnb29kIGRlYWwgb2YgdGltZSBzdHVkeWluZy4KClRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHNlZW1zIHRvIGJlIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGBibGtfdGltZV9nZXRfbnNgLiBTcGVjaWZpY2FsbHksIGBjdXJfa3RpbWVgIGNhbiBiZSB6ZXJvZWQgb3V0IGJ5IHByZWVtcHRpb24uIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IHByb2JsZW0sIGFuZCB6ZXJvaW5nIG91dCB0aGF0IHRpbWUgY2FuIGNhdXNlIGluY29ycmVjdCB0aW1lc3RhbXBzLCB3aGljaCBpcyBiYWQgbmV3cyBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIHNjaGVkdWxpbmcgZGVjaXNpb25zLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBjb3JyZWN0bmVzcyBpZiB0aGUgdGltZXN0YW1wcyBhcmUgdXNlZCBmb3IgYWNjb3VudGluZy4KCkkmIzM5O20ga2V5aW5nIGluIG9uIHRoZXNlIHN5bWJvbHMgYXMgaW5kaWNhdG9ycyBvZiB0aGUgcGF0Y2gmIzM5O3MgY29yZSBmdW5jdGlvbnM6IGBibGtfbXFfc3RhcnRfcmVxdWVzdGAsIGBiZnFfaW5zZXJ0X3JlcXVlc3RzYCwgYGJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnRgLCBhbmQgYGJsa19pb2Nvc3RfaW5pdGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIGluaXRpYXRpbmcgYmxvY2sgcmVxdWVzdHMsIGluc2VydGluZyB0aGVtIGludG8gdGhlIEJGUSBzY2hlZHVsZXIsIHBvdGVudGlhbGx5IHRocm90dGxpbmcgSS9PIGJhc2VkIG9uIGNncm91cCBjb25zdHJhaW50cywgYW5kIGluaXRpYWxpemluZyBJL08gY29zdCBhY2NvdW50aW5nLiBNeSBpbnRlcnByZXRhdGlvbiBpcyB0aGF0IHRoZSByYWNlIGNvbmRpdGlvbiwgaWYgdHJpZ2dlcmVkLCBjb3VsZCBjb3JydXB0IHRoZSB0aW1pbmcgZGF0YSB1c2VkIGluIHRoZXNlIG9wZXJhdGlvbnMsIGxlYWRpbmcgdG8gaW5hY2N1cmF0ZSBwZXJmb3JtYW5jZSBtZXRyaWNzIGFuZCBwb3RlbnRpYWxseSBmbGF3ZWQgc2NoZWR1bGluZyBkZWNpc2lvbnMgd2l0aGluIHRoZSBibG9jayBsYXllci4KClVsdGltYXRlbHksIHRoaXMgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uYWxseSBpbXBvcnRhbnQgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGFmZmVjdGluZyB0aW1lc3RhbXBpbmcgb2YgYmxvY2sgcmVxdWVzdHMuIFRoZSBuZWVkIGZvciBhIGZpeCB3aXRoaW4gYGJsa190aW1lX2dldF9uc2Agd291bGQgc3VnZ2VzdCBpdCBpcyBhIGNvcmUgZmVhdHVyZSB0aGF0IGhhcyB0byBiZSBmaXhlZC4gSXTigJlzIGEgZGVmaW5pdGUgJiMzNDtzZXQtcmVzdWx0cyYjMzQ7IHNpdHVhdGlvbiwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiB0aGUgaW1wYWN0cyB0aGlzIGNhbiBoYXZlIG9uIG15IGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9TQ0hFRF9CRlEmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa19tcV9zdGFydF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O2JmcV9pbnNlcnRfcmVxdWVzdHMmIzM0OywKICAgICYjMzQ7YmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudCYjMzQ7LAogICAgJiMzNDtibGtfaW9jb3N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgYmxrX3RpbWVfZ2V0X25zYCB3aGVyZSBgY3VyX2t0aW1lYCBjb3VsZCBiZSB6ZXJvZWQgYnkgcHJlLWVtcHRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBsYXllciB0aGF0IGFmZmVjdHMgdGltZXN0YW1waW5nIG9mIGJsb2NrIHJlcXVlc3RzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX21xX3N0YXJ0X3JlcXVlc3QmIzM0OywKICAgICYjMzQ7YmZxX2luc2VydF9yZXF1ZXN0cyYjMzQ7LAogICAgJiMzNDtibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50JiMzNDssCiAgICAmIzM0O2Jsa19pb2Nvc3RfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBibGtfdGltZV9nZXRfbnNgIHdoZXJlIGBjdXJfa3RpbWVgIGNvdWxkIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIHRoYXQgYWZmZWN0cyB0aW1lc3RhbXBpbmcgb2YgYmxvY2sgcmVxdWVzdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDoyNi4xNzA5MDE4ODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI0ODI4NzAwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9TQ0hFRF9CRlFcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX21xX3N0YXJ0X3JlcXVlc3RcIixcbiAgICBcImJmcV9pbnNlcnRfcmVxdWVzdHNcIixcbiAgICBcImJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnRcIixcbiAgICBcImJsa19pb2Nvc3RfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGJsa190aW1lX2dldF9uc2Agd2hlcmUgYGN1cl9rdGltZWAgY291bGQgYmUgemVyb2VkIGJ5IHByZS1lbXB0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdGhhdCBhZmZlY3RzIHRpbWVzdGFtcGluZyBvZiBibG9jayByZXF1ZXN0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjQ6MjYuMTcwOTEwMDM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzExOTUzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMmIyZGJjYmE1MTQwMDMxMzhmNTBlYWQ4YTExNDgyNGJiNTZlMDE1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDE2IDAzOjI0OjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcXG5pbmRleCBiOTk4YTc3NjFmYWYzNi4uMTdlMDM2NTZiYTlhYzMgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLmhcXG4rKysgYi9ibG9jay9ibGsuaFxcbkBAIC02ODksNiArNjg5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgcmVxX3JlZl9yZWFkKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuIHN0YXRpYyBpbmxpbmUgdTY0IGJsa190aW1lX2dldF9ucyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBibGtfcGx1ZyAqcGx1ZyA9IGN1cnJlbnQtXFx1MDAzZXBsdWc7XFxuK1xcdHU2NCBub3c7XFxuIFxcbiBcXHRpZiAoIXBsdWcgfHwgIWluX3Rhc2soKSlcXG4gXFx0XFx0cmV0dXJuIGt0aW1lX2dldF9ucygpO1xcbkBAIC02OTcsMTIgKzY5OCwxOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZClcXG4gXFx0ICogMCBjb3VsZCB2ZXJ5IHdlbGwgYmUgYSB2YWxpZCB0aW1lLCBidXQgcmF0aGVyIHRoYW4gZmxhZyBcXFwidGhpcyBpc1xcbiBcXHQgKiBhIHZhbGlkIHRpbWVzdGFtcFxcXCIgc2VwYXJhdGVseSwganVzdCBhY2NlcHQgdGhhdCB3ZSdsbCBkbyBhbiBleHRyYVxcbiBcXHQgKiBrdGltZV9nZXRfbnMoKSBpZiB3ZSBqdXN0IGhhcHBlbiB0byBnZXQgMCBhcyB0aGUgY3VycmVudCB0aW1lLlxcbitcXHQgKlxcbitcXHQgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC5cXG4gXFx0ICovXFxuLVxcdGlmICghcGx1Zy1cXHUwMDNlY3VyX2t0aW1lKSB7XFxuLVxcdFxcdHBsdWctXFx1MDAzZWN1cl9rdGltZSA9IGt0aW1lX2dldF9ucygpO1xcbitcXHRub3cgPSBSRUFEX09OQ0UocGx1Zy1cXHUwMDNlY3VyX2t0aW1lKTtcXG4rXFx0aWYgKCFub3cpIHtcXG4rXFx0XFx0bm93ID0ga3RpbWVfZ2V0X25zKCk7XFxuK1xcdFxcdFdSSVRFX09OQ0UocGx1Zy1cXHUwMDNlY3VyX2t0aW1lLCBub3cpO1xcbitcXHRcXHQvKiBFbnN1cmUgUEZfQkxPQ0tfVFMgaXMgc2V0IGFmdGVyIGN1cl9rdGltZS4gKi9cXG4rXFx0XFx0YmFycmllcigpO1xcbiBcXHRcXHRjdXJyZW50LVxcdTAwM2VmbGFncyB8PSBQRl9CTE9DS19UUztcXG4gXFx0fVxcbi1cXHRyZXR1cm4gcGx1Zy1cXHUwMDNlY3VyX2t0aW1lO1xcbitcXHRyZXR1cm4gbm93O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGt0aW1lX3QgYmxrX3RpbWVfZ2V0KHZvaWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjI2LjcwMjkxNjkxNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxOTUwODM5ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9zdGFydF9yZXF1ZXN0XCIsXG4gICAgXCJiZnFfaW5zZXJ0X3JlcXVlc3RzXCIsXG4gICAgXCJibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50XCIsXG4gICAgXCJibGtfaW9jb3N0X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBibGtfdGltZV9nZXRfbnNgIHdoZXJlIGBjdXJfa3RpbWVgIGNvdWxkIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIHRoYXQgYWZmZWN0cyB0aW1lc3RhbXBpbmcgb2YgYmxvY2sgcmVxdWVzdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjJiMmRiY2JhNTE0MDAzMTM4ZjUwZWFkOGExMTQ4MjRiYjU2ZTAxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDAzOjI0OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaFxuaW5kZXggYjk5OGE3NzYxZmFmMzYuLjE3ZTAzNjU2YmE5YWMzIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbisrKyBiL2Jsb2NrL2Jsay5oXG5AQCAtNjg5LDYgKzY4OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlcV9yZWZfcmVhZChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIHN0YXRpYyBpbmxpbmUgdTY0IGJsa190aW1lX2dldF9ucyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBibGtfcGx1ZyAqcGx1ZyA9IGN1cnJlbnQtXHUwMDNlcGx1ZztcbitcdHU2NCBub3c7XG4gXG4gXHRpZiAoIXBsdWcgfHwgIWluX3Rhc2soKSlcbiBcdFx0cmV0dXJuIGt0aW1lX2dldF9ucygpO1xuQEAgLTY5NywxMiArNjk4LDE4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGJsa190aW1lX2dldF9ucyh2b2lkKVxuIFx0ICogMCBjb3VsZCB2ZXJ5IHdlbGwgYmUgYSB2YWxpZCB0aW1lLCBidXQgcmF0aGVyIHRoYW4gZmxhZyBcInRoaXMgaXNcbiBcdCAqIGEgdmFsaWQgdGltZXN0YW1wXCIgc2VwYXJhdGVseSwganVzdCBhY2NlcHQgdGhhdCB3ZSdsbCBkbyBhbiBleHRyYVxuIFx0ICoga3RpbWVfZ2V0X25zKCkgaWYgd2UganVzdCBoYXBwZW4gdG8gZ2V0IDAgYXMgdGhlIGN1cnJlbnQgdGltZS5cbitcdCAqXG4rXHQgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC5cbiBcdCAqL1xuLVx0aWYgKCFwbHVnLVx1MDAzZWN1cl9rdGltZSkge1xuLVx0XHRwbHVnLVx1MDAzZWN1cl9rdGltZSA9IGt0aW1lX2dldF9ucygpO1xuK1x0bm93ID0gUkVBRF9PTkNFKHBsdWctXHUwMDNlY3VyX2t0aW1lKTtcbitcdGlmICghbm93KSB7XG4rXHRcdG5vdyA9IGt0aW1lX2dldF9ucygpO1xuK1x0XHRXUklURV9PTkNFKHBsdWctXHUwMDNlY3VyX2t0aW1lLCBub3cpO1xuK1x0XHQvKiBFbnN1cmUgUEZfQkxPQ0tfVFMgaXMgc2V0IGFmdGVyIGN1cl9rdGltZS4gKi9cbitcdFx0YmFycmllcigpO1xuIFx0XHRjdXJyZW50LVx1MDAzZWZsYWdzIHw9IFBGX0JMT0NLX1RTO1xuIFx0fVxuLVx0cmV0dXJuIHBsdWctXHUwMDNlY3VyX2t0aW1lO1xuK1x0cmV0dXJuIG5vdztcbiB9XG4gXG4gc3RhdGljIGlubGluZSBrdGltZV90IGJsa190aW1lX2dldCh2b2lkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjQ6MjYuNzAyOTIxNDU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExOTY5NjQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBEZXZpY2UgVGltZSBTdGFtcCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGJsb2NrL2Jsay5oYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYGJsa190aW1lX2dldF9uc2AsIGEgZnVuY3Rpb24gcmVsYXRlZCB0byBnZXR0aW5nIHRpbWVzdGFtcHMgZm9yIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggYWRkcyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFyb3VuZCBgcGx1Zy1cdTAwM2VjdXJfa3RpbWVgIGFuZCB0aHJvd3MgaW4gYSBgYmFycmllcigpYCBhZnRlciBgY3VyX2t0aW1lYCB0byBtYWtlIHN1cmUgYFBGX0JMT0NLX1RTYCBpcyBzZXQgKmFmdGVyKiB0aGUgYGt0aW1lYCB2YWx1ZS4gU291bmRzIGxpa2UgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgb3IgbWF5YmUgYSBwcmVlbXB0aW9uIHByb2JsZW0gd2hlcmUgYGN1cl9rdGltZWAgY291bGQgZ2V0IGNsb2JiZXJlZCBhbmQgZW5kIHVwIGFzIHplcm8uIEludGVyZXN0aW5nLi4uXG5cbk15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gY29uc2lkZXIgZnV6emluZyB0aGlzIGJlY2F1c2UgaXQncyBhIGNoYW5nZSB0byBmdW5jdGlvbmFsIGNvZGUuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgaXQncyBhIHByZXR0eSB0YXJnZXRlZCBzeW5jaHJvbml6YXRpb24gZml4LiBOb3QgYSBodWdlIHN0cnVjdHVyYWwgY2hhbmdlLCBqdXN0IGEgc21hbGwgYml0IG9mIHByb3RlY3Rpb24gYXJvdW5kIHRpbWVzdGFtcCBhY2Nlc3MuIEJlZm9yZSBJIGdldCB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgdGhlIGNhbGxpbmcgY29udGV4dHMgZm9yIGBibGtfdGltZV9nZXRfbnNgLiBLbm93aW5nIHdoZXJlIGl0J3MgdXNlZCB3aWxsIGhlbHAgbWUgZGVjaWRlIHdoZXRoZXIgZnV6emluZyBtYWtlcyBzZW5zZSBoZXJlIG9yIGlmIGEgbW9yZSB0YXJnZXRlZCBjb2RlIHJldmlldyBpcyB0aGUgc21hcnRlciBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjMwLjgyMjYyMDQ3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY0MDA3NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa190aW1lX2dldF9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZnEtY2dyb3VwLmM9MTIzPXN0YXRpYyB2b2lkIGJmcWdfc3RhdHNfdXBkYXRlX2dyb3VwX3dhaXRfdGltZShzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMpXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTI5LVxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMzA6XFx0bm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTEzMS1cXHRpZiAobm93IFxcdTAwM2Ugc3RhdHMtXFx1MDAzZXN0YXJ0X2dyb3VwX3dhaXRfdGltZSlcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz0xMzg9c3RhdGljIHZvaWQgYmZxZ19zdGF0c19zZXRfc3RhcnRfZ3JvdXBfd2FpdF90aW1lKHN0cnVjdCBiZnFfZ3JvdXAgKmJmcWcsXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQ2LVxcdFxcdHJldHVybjtcXG5ibG9jay9iZnEtY2dyb3VwLmM6MTQ3OlxcdHN0YXRzLVxcdTAwM2VzdGFydF9ncm91cF93YWl0X3RpbWUgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9iZnEtY2dyb3VwLmMtMTQ4LVxcdGJmcWdfc3RhdHNfbWFya193YWl0aW5nKHN0YXRzKTtcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz0xNTI9c3RhdGljIHZvaWQgYmZxZ19zdGF0c19lbmRfZW1wdHlfdGltZShzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMpXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtMTU4LVxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxNTk6XFx0bm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTE2MC1cXHRpZiAobm93IFxcdTAwM2Ugc3RhdHMtXFx1MDAzZXN0YXJ0X2VtcHR5X3RpbWUpXFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmM9MTcxPXZvaWQgYmZxZ19zdGF0c19zZXRfc3RhcnRfZW1wdHlfdGltZShzdHJ1Y3QgYmZxX2dyb3VwICpiZnFnKVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTE4NS1cXG5ibG9jay9iZnEtY2dyb3VwLmM6MTg2OlxcdHN0YXRzLVxcdTAwM2VzdGFydF9lbXB0eV90aW1lID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTE4Ny1cXHRiZnFnX3N0YXRzX21hcmtfZW1wdHkoc3RhdHMpO1xcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jPTE5MD12b2lkIGJmcWdfc3RhdHNfdXBkYXRlX2lkbGVfdGltZShzdHJ1Y3QgYmZxX2dyb3VwICpiZnFnKVxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTE5NC1cXHRpZiAoYmZxZ19zdGF0c19pZGxpbmcoc3RhdHMpKSB7XFxuYmxvY2svYmZxLWNncm91cC5jOjE5NTpcXHRcXHR1NjQgbm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTE5Ni1cXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz0yMDQ9dm9pZCBiZnFnX3N0YXRzX3NldF9zdGFydF9pZGxlX3RpbWUoc3RydWN0IGJmcV9ncm91cCAqYmZxZylcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy0yMDctXFxuYmxvY2svYmZxLWNncm91cC5jOjIwODpcXHRzdGF0cy1cXHUwMDNlc3RhcnRfaWRsZV90aW1lID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTIwOS1cXHRiZnFnX3N0YXRzX21hcmtfaWRsaW5nKHN0YXRzKTtcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYz0yNDE9dm9pZCBiZnFnX3N0YXRzX3VwZGF0ZV9jb21wbGV0aW9uKHN0cnVjdCBiZnFfZ3JvdXAgKmJmcWcsIHU2NCBzdGFydF90aW1lX25zLFxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTI0NC1cXHRzdHJ1Y3QgYmZxZ19zdGF0cyAqc3RhdHMgPSBcXHUwMDI2YmZxZy1cXHUwMDNlc3RhdHM7XFxuYmxvY2svYmZxLWNncm91cC5jOjI0NTpcXHR1NjQgbm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWNncm91cC5jLTI0Ni1cXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9OTk4PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqYmZxX2NoZWNrX2ZpZm8oc3RydWN0IGJmcV9xdWV1ZSAqYmZxcSxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMTAwOS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jOjEwMTA6XFx0aWYgKHJxID09IGxhc3QgfHwgYmxrX3RpbWVfZ2V0X25zKCkgXFx1MDAzYyBycS1cXHUwMDNlZmlmb190aW1lKVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMTAxMS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9MTgyMD1zdGF0aWMgdm9pZCBiZnFfYmZxcV9oYW5kbGVfaWRsZV9idXN5X3N3aXRjaChzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTE4MzMtXFx0XFx0ICovXFxuYmxvY2svYmZxLWlvc2NoZWQuYzoxODM0OlxcdFxcdGFycml2ZWRfaW5fdGltZSA9ICBibGtfdGltZV9nZXRfbnMoKSBcXHUwMDNjPVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMTgzNS1cXHRcXHRcXHRiZnFxLVxcdTAwM2V0dGltZS5sYXN0X2VuZF9yZXF1ZXN0ICtcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9MjIwNj1zdGF0aWMgdm9pZCBiZnFfYWRkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy0yMjEyLVxcdGJvb2wgaW50ZXJhY3RpdmUgPSBmYWxzZTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjIyMTM6XFx0dTY0IG5vd19ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjIxNC1cXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjI2Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBtc2Vjc190b19qaWZmaWVzKDEwKSkpIHtcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjIyNjc6XFx0XFx0XFx0YmZxZC1cXHUwMDNlbGFzdF9lbXB0eV9vY2N1cGllZF9ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjI2OC1cXHRcXHRcXHQvKlxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz0zNDI5PXN0YXRpYyB2b2lkIGJmcV9yZXNldF9yYXRlX2NvbXB1dGF0aW9uKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzQzMi1cXHRpZiAocnEgIT0gTlVMTCkgeyAvKiBuZXcgcnEgZGlzcGF0Y2ggbm93LCByZXNldCBhY2NvcmRpbmdseSAqL1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6MzQzMzpcXHRcXHRiZnFkLVxcdTAwM2VsYXN0X2Rpc3BhdGNoID0gYmZxZC1cXHUwMDNlZmlyc3RfZGlzcGF0Y2ggPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTM0MzQtXFx0XFx0YmZxZC1cXHUwMDNlcGVha19yYXRlX3NhbXBsZXMgPSAxO1xcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz0zNTg4PXN0YXRpYyB2b2lkIGJmcV91cGRhdGVfcGVha19yYXRlKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgc3RydWN0IHJlcXVlc3QgKnJxKVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzU4OS17XFxuYmxvY2svYmZxLWlvc2NoZWQuYzozNTkwOlxcdHU2NCBub3dfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTM1OTEtXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTU1ODk9c3RhdGljIHZvaWQgYmZxX2luaXRfYmZxcShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIHN0cnVjdCBiZnFfcXVldWUgKmJmcXEsXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTU1OTIte1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NTU5MzpcXHR1NjQgbm93X25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy01NTk0LVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz01ODg5PXN0YXRpYyB2b2lkIGJmcV91cGRhdGVfaW9fdGhpbmt0aW1lKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNTkwMS1cXHRcXHRyZXR1cm47XFxuYmxvY2svYmZxLWlvc2NoZWQuYzo1OTAyOlxcdGVsYXBzZWQgPSBibGtfdGltZV9nZXRfbnMoKSAtIGJmcXEtXFx1MDAzZXR0aW1lLmxhc3RfZW5kX3JlcXVlc3Q7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy01OTAzLVxcdGVsYXBzZWQgPSBtaW5fdCh1NjQsIGVsYXBzZWQsIDJVTEwgKiBiZnFkLVxcdTAwM2ViZnFfc2xpY2VfaWRsZSk7XFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYxNDc9c3RhdGljIGJvb2wgX19iZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxOTMtXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MTk0OlxcdHJxLVxcdTAwM2VmaWZvX3RpbWUgPSBibGtfdGltZV9nZXRfbnMoKSArIGJmcWQtXFx1MDAzZWJmcV9maWZvX2V4cGlyZVtycV9pc19zeW5jKHJxKV07XFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTk1LVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnJxLVxcdTAwM2VxdWV1ZWxpc3QsIFxcdTAwMjZiZnFxLVxcdTAwM2VmaWZvKTtcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9NjM0Nj1zdGF0aWMgdm9pZCBiZnFfY29tcGxldGVkX3JlcXVlc3Qoc3RydWN0IGJmcV9xdWV1ZSAqYmZxcSwgc3RydWN0IGJmcV9kYXRhICpiZnFkKVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MzY5LVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjM3MDpcXHRub3dfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYzNzEtXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTY1ODI9c3RhdGljIHZvaWQgYmZxX3VwZGF0ZV9pbmplY3RfbGltaXQoc3RydWN0IGJmcV9kYXRhICpiZnFkLFxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02NTg0LXtcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY1ODU6XFx0dTY0IHRvdF90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCkgLSBiZnFkLVxcdTAwM2VsYXN0X2VtcHR5X29jY3VwaWVkX25zO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjU4Ni1cXHR1bnNpZ25lZCBpbnQgb2xkX2xpbWl0ID0gYmZxcS1cXHUwMDNlaW5qZWN0X2xpbWl0O1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTE5NDQ9c3RhdGljIHZvaWQgYmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZyhzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIGJvb2wgdXNlX21lbWRlbGF5KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE5NDctXFx0Ym9vbCBjbGFtcDtcXG5ibG9jay9ibGstY2dyb3VwLmM6MTk0ODpcXHR1NjQgbm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmxrLWNncm91cC5jLTE5NDktXFx0dTY0IGV4cDtcXG4tLVxcbmJsb2NrL2Jsay1mbHVzaC5jPTEyND1zdGF0aWMgdm9pZCBibGtfYWNjb3VudF9pb19mbHVzaChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5ibG9jay9ibGstZmx1c2guYy0xMzAtXFx0cGFydF9zdGF0X2FkZChwYXJ0LCBuc2Vjc1tTVEFUX0ZMVVNIXSxcXG5ibG9jay9ibGstZmx1c2guYzoxMzE6XFx0XFx0ICAgICAgYmxrX3RpbWVfZ2V0X25zKCkgLSBycS1cXHUwMDNlc3RhcnRfdGltZV9ucyk7XFxuYmxvY2svYmxrLWZsdXNoLmMtMTMyLVxcdHBhcnRfc3RhdF91bmxvY2soKTtcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz04MDc9c3RhdGljIGludCBpb2NfYXV0b3BfaWR4KHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtODMxLVxcdHZyYXRlX3BjdCA9IGRpdjY0X3U2NChpb2MtXFx1MDAzZXZ0aW1lX2Jhc2VfcmF0ZSAqIDEwMCwgVlRJTUVfUEVSX1VTRUMpO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYzo4MzI6XFx0bm93X25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmxrLWlvY29zdC5jLTgzMy1cXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz0xMDQyPXN0YXRpYyB2b2lkIGlvY19ub3coc3RydWN0IGlvYyAqaW9jLCBzdHJ1Y3QgaW9jX25vdyAqbm93KVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTEwNDYtXFxuYmxvY2svYmxrLWlvY29zdC5jOjEwNDc6XFx0bm93LVxcdTAwM2Vub3dfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9ibGstaW9jb3N0LmMtMTA0OC1cXHRub3ctXFx1MDAzZW5vdyA9IGt0aW1lX3RvX3VzKG5vdy1cXHUwMDNlbm93X25zKTtcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz0yODE4PXN0YXRpYyB2b2lkIGlvY19ycW9zX2RvbmUoc3RydWN0IHJxX3FvcyAqcnFvcywgc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTI4NDAtXFxuYmxvY2svYmxrLWlvY29zdC5jOjI4NDE6XFx0b25fcV9ucyA9IGJsa190aW1lX2dldF9ucygpIC0gcnEtXFx1MDAzZWFsbG9jX3RpbWVfbnM7XFxuYmxvY2svYmxrLWlvY29zdC5jLTI4NDItXFx0cnFfd2FpdF9ucyA9IHJxLVxcdTAwM2VzdGFydF90aW1lX25zIC0gcnEtXFx1MDAzZWFsbG9jX3RpbWVfbnM7XFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9NTgzPXN0YXRpYyB2b2lkIGJsa2NnX2lvbGF0ZW5jeV9kb25lX2JpbyhzdHJ1Y3QgcnFfcW9zICpycW9zLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjAzLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo2MDQ6XFx0bm93ID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTYwNS1cXHR3aGlsZSAoYmxrZyBcXHUwMDI2XFx1MDAyNiBibGtnLVxcdTAwM2VwYXJlbnQpIHtcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz02NTE9c3RhdGljIHZvaWQgYmxraW9sYXRlbmN5X3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY1Ni1cXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcG9zX2NzcztcXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NjU3OlxcdHU2NCBub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjU4LVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTk4Mj1zdGF0aWMgdm9pZCBpb2xhdGVuY3lfcGRfaW5pdChzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTg3LVxcdHN0cnVjdCBibGtfaW9sYXRlbmN5ICpibGtpb2xhdCA9IEJMS0lPTEFURU5DWShycW9zKTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmM6OTg4OlxcdHU2NCBub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtOTg5LVxcdGludCBjcHU7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zNzM9dm9pZCBibGtfcnFfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMzg0LVxcdHJxLVxcdTAwM2VpbnRlcm5hbF90YWcgPSBCTEtfTVFfTk9fVEFHO1xcbmJsb2NrL2Jsay1tcS5jOjM4NTpcXHRycS1cXHUwMDNlc3RhcnRfdGltZV9ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2Jsay1tcS5jLTM4Ni1cXHRibGtfY3J5cHRvX3JxX3NldF9kZWZhdWx0cyhycSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz00MDE9c3RhdGljIGlubGluZSB2b2lkIGJsa19tcV9iaW9faXNzdWVfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQwNS1cXHRpZiAodGVzdF9iaXQoUVVFVUVfRkxBR19CSU9fSVNTVUVfVElNRSwgXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2ZsYWdzKSlcXG5ibG9jay9ibGstbXEuYzo0MDY6XFx0XFx0YmlvLVxcdTAwM2Vpc3N1ZV90aW1lX25zID0gYmxrX3RpbWVfZ2V0X25zKCk7XFxuYmxvY2svYmxrLW1xLmMtNDA3LSNlbmRpZlxcbi0tXFxuYmxvY2svYmxrLW1xLmM9NTM3PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqX19ibGtfbXFfYWxsb2NfcmVxdWVzdHMoc3RydWN0IGJsa19tcV9hbGxvY19kYXRhICpkYXRhKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtNTQ1LVxcdGlmIChibGtfcXVldWVfcnFfYWxsb2NfdGltZShxKSlcXG5ibG9jay9ibGstbXEuYzo1NDY6XFx0XFx0YWxsb2NfdGltZV9ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2Jsay1tcS5jLTU0Ny1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTYyNj1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTY1Mi1cXHRcXHRycV9saXN0X3BvcChcXHUwMDI2cGx1Zy1cXHUwMDNlY2FjaGVkX3Jxcyk7XFxuYmxvY2svYmxrLW1xLmM6NjUzOlxcdFxcdGJsa19tcV9ycV90aW1lX2luaXQocnEsIGJsa190aW1lX2dldF9ucygpKTtcXG5ibG9jay9ibGstbXEuYy02NTQtXFx0fVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9NzAwPXN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxuYmxvY2svYmxrLW1xLmMtNzIxLVxcdGlmIChibGtfcXVldWVfcnFfYWxsb2NfdGltZShxKSlcXG5ibG9jay9ibGstbXEuYzo3MjI6XFx0XFx0YWxsb2NfdGltZV9ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2Jsay1tcS5jLTcyMy1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTExMjE9c3RhdGljIGlubGluZSB2b2lkIGJsa19hY2NvdW50X2lvX3N0YXJ0KHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5ibG9jay9ibGstbXEuYy0xMTMwLVxcdHJlcS1cXHUwMDNlcnFfZmxhZ3MgfD0gUlFGX0lPX1NUQVQ7XFxuYmxvY2svYmxrLW1xLmM6MTEzMTpcXHRyZXEtXFx1MDAzZXN0YXJ0X3RpbWVfbnMgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9ibGstbXEuYy0xMTMyLVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MTE1OT1pbmxpbmUgdm9pZCBfX2Jsa19tcV9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJsa19zdGF0dXNfdCBlcnJvcilcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTExNjEtXFx0aWYgKGJsa19tcV9uZWVkX3RpbWVfc3RhbXAocnEpKVxcbmJsb2NrL2Jsay1tcS5jOjExNjI6XFx0XFx0X19ibGtfbXFfZW5kX3JlcXVlc3RfYWNjdChycSwgYmxrX3RpbWVfZ2V0X25zKCkpO1xcbmJsb2NrL2Jsay1tcS5jLTExNjMtXFxuLS1cXG5ibG9jay9ibGstbXEuYz0xMTk3PXZvaWQgYmxrX21xX2VuZF9yZXF1ZXN0X2JhdGNoKHN0cnVjdCBpb19jb21wX2JhdGNoICppb2IpXFxuLS1cXG5ibG9jay9ibGstbXEuYy0xMjA0LVxcdGlmIChpb2ItXFx1MDAzZW5lZWRfdHMpXFxuYmxvY2svYmxrLW1xLmM6MTIwNTpcXHRcXHRub3cgPSBibGtfdGltZV9nZXRfbnMoKTtcXG5ibG9jay9ibGstbXEuYy0xMjA2LVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MTM2OD12b2lkIGJsa19tcV9zdGFydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTEzNzUtXFx0ICAgICFibGtfcnFfaXNfcGFzc3Rocm91Z2gocnEpKSB7XFxuYmxvY2svYmxrLW1xLmM6MTM3NjpcXHRcXHRycS1cXHUwMDNlaW9fc3RhcnRfdGltZV9ucyA9IGJsa190aW1lX2dldF9ucygpO1xcbmJsb2NrL2Jsay1tcS5jLTEzNzctXFx0XFx0cnEtXFx1MDAzZXN0YXRzX3NlY3RvcnMgPSBibGtfcnFfc2VjdG9ycyhycSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zMTI0PXZvaWQgYmxrX21xX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMzE5Ny1cXHRcXHRycV9xb3NfdGhyb3R0bGUocnEtXFx1MDAzZXEsIGJpbyk7XFxuYmxvY2svYmxrLW1xLmM6MzE5ODpcXHRcXHRibGtfbXFfcnFfdGltZV9pbml0KHJxLCBibGtfdGltZV9nZXRfbnMoKSk7XFxuYmxvY2svYmxrLW1xLmMtMzE5OS1cXHRcXHRycS1cXHUwMDNlY21kX2ZsYWdzID0gYmlvLVxcdTAwM2ViaV9vcGY7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zMjU3PWJsa19zdGF0dXNfdCBibGtfaW5zZXJ0X2Nsb25lZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTMzMjktXFx0aWYgKHJldClcXG5ibG9jay9ibGstbXEuYzozMzMwOlxcdFxcdGJsa19hY2NvdW50X2lvX2RvbmUocnEsIGJsa190aW1lX2dldF9ucygpKTtcXG5ibG9jay9ibGstbXEuYy0zMzMxLVxcdHJldHVybiByZXQ7XFxuLS1cXG5ibG9jay9ibGstd2J0LmM9MjgwPXN0YXRpYyB1NjQgcndiX3N5bmNfaXNzdWVfbGF0KHN0cnVjdCBycV93YiAqcndiKVxcbi0tXFxuYmxvY2svYmxrLXdidC5jLTI4Ni1cXG5ibG9jay9ibGstd2J0LmM6Mjg3OlxcdHJldHVybiBibGtfdGltZV9nZXRfbnMoKSAtIGlzc3VlO1xcbmJsb2NrL2Jsay13YnQuYy0yODgtfVxcbi0tXFxuYmxvY2svYmxrLmg9Njg0PXN0YXRpYyBpbmxpbmUgaW50IHJlcV9yZWZfcmVhZChzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuYmxvY2svYmxrLmgtNjg4LVxcbmJsb2NrL2Jsay5oOjY4OTpzdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZClcXG5ibG9jay9ibGsuaC02OTAte1xcbi0tXFxuYmxvY2svYmxrLmg9NzE1PXN0YXRpYyBpbmxpbmUga3RpbWVfdCBibGtfdGltZV9nZXQodm9pZClcXG5ibG9jay9ibGsuaC03MTYte1xcbmJsb2NrL2Jsay5oOjcxNzpcXHRyZXR1cm4gbnNfdG9fa3RpbWUoYmxrX3RpbWVfZ2V0X25zKCkpO1xcbmJsb2NrL2Jsay5oLTcxOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjMyLjc4NjYzODAyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDgzMDEyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpcyBvZiBibGtfdGltZV9nZXRfbnMgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGJsa190aW1lX2dldF9uc2AsIHdoaWNoLCBhcyBJIGtub3csIGlzIGEgcHJldHR5IGhlYXZpbHkgdXNlZCBmdW5jdGlvbiBpbiB0aGUgYmxvY2sgbGF5ZXIuIEl0J3MgYWxsIG92ZXIgdGhlIHBsYWNlLCBlc3BlY2lhbGx5IGluIHN0dWZmIGxpa2UgQkZRLCBibGstbXEsIGFuZCB0aG9zZSBvdGhlciBrZXkgY29tcG9uZW50cy4gVGhlIGNoYW5nZSBpcyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBgY3VyX2t0aW1lYCBjb3VsZCBnZXQgemVyb2VkIG91dCBkdWUgdG8gcHJlZW1wdGlvbiByaWdodCBhZnRlciBgUEZfQkxPQ0tfVFNgIGdldHMgc2V0LiBJdCBzb3VuZHMgZnVuY3Rpb25hbCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiV29ydGggZnV6emluZz9cIiBBYnNvbHV0ZWx5LlxuXG5UaGUgb3JpZ2luYWwgcGxhbiB3YXMgdG8gZm9jdXMgb24gYGJsa190aW1lX2dldF9uc2AgZGlyZWN0bHksIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBpdCdzIGlubGluZS4gQ3JhcCEgVGhhdCBtZWFucyBpdCB3b24ndCBzaG93IHVwIGFzIGEgc3ltYm9sIGJ5IGl0c2VsZi4gU28sIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cyB0byB0aGUgZnVuY3Rpb25zICp1c2luZyogaXQsIG9yIEkgY291bGQganVzdCByZXR1cm4gdGhhdCB0aGUgcGF0Y2ggaXMgd29ydGggZnV6emluZyBhbmQgZm9jdXMgb24gYmxvY2sgbGF5ZXIgZnVuY3Rpb25zIGluIGdlbmVyYWwuXG5cbkxldCdzIHNlZeKApiBJIGtub3cgYGJsa19tcV9zdWJtaXRfYmlvYCwgYGJsa19tcV9zdGFydF9yZXF1ZXN0YCwgYF9fYmxrX21xX2VuZF9yZXF1ZXN0YCwgYW5kIGBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4YCBhcmUgYWxsIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuIEFoLCB3YWl0LCBgYmxrX3RpbWVfZ2V0X25zYCAqaXMqIHVzZWQgYnkgYGJsa19tcV9zdWJtaXRfYmlvYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgZGlnIGludG8gYGJsa19tcV9zdWJtaXRfYmlvYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE4NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDozNy41MzQ5NDEzOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNzU3MzkwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfbXFfc3VibWl0X2Jpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q9MTk5ND1oaXN0b2dyYW06Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTIwMjAtICAgICAgICAgX19ycV9xb3NfdGhyb3R0bGUrMHgyNS8weDQwXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjIwMjE6ICAgICAgICAgYmxrX21xX3N1Ym1pdF9iaW8rMHgyYzMvMHg1YjBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMjAyMi0gICAgICAgICBfX3N1Ym1pdF9iaW8rMHhmZi8weDE5MFxcbi0tXFxuYmxvY2svYmxrLWNvcmUuYz02Mjc9c3RhdGljIHZvaWQgX19zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1jb3JlLmMtNjM0LVxcdGlmICghYmRldl90ZXN0X2ZsYWcoYmlvLVxcdTAwM2ViaV9iZGV2LCBCRF9IQVNfU1VCTUlUX0JJTykpIHtcXG5ibG9jay9ibGstY29yZS5jOjYzNTpcXHRcXHRibGtfbXFfc3VibWl0X2JpbyhiaW8pO1xcbmJsb2NrL2Jsay1jb3JlLmMtNjM2LVxcdH0gZWxzZSBpZiAobGlrZWx5KGJpb19xdWV1ZV9lbnRlcihiaW8pID09IDApKSB7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0zMTAwPXN0YXRpYyBib29sIGJpb191bmFsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTMxMTEtLyoqXFxuYmxvY2svYmxrLW1xLmM6MzExMjogKiBibGtfbXFfc3VibWl0X2JpbyAtIENyZWF0ZSBhbmQgc2VuZCBhIHJlcXVlc3QgdG8gYmxvY2sgZGV2aWNlLlxcbmJsb2NrL2Jsay1tcS5jLTMxMTMtICogQGJpbzogQmlvIHBvaW50ZXIuXFxuLS1cXG5ibG9jay9ibGstbXEuYy0zMTIzLSAqL1xcbmJsb2NrL2Jsay1tcS5jOjMxMjQ6dm9pZCBibGtfbXFfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuYmxvY2svYmxrLW1xLmMtMzEyNS17XFxuLS1cXG5ibG9jay9ibGstbXEuaD00Mj10eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgYmxrX2luc2VydF90O1xcbi0tXFxuYmxvY2svYmxrLW1xLmgtNDQtXFxuYmxvY2svYmxrLW1xLmg6NDU6dm9pZCBibGtfbXFfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pO1xcbmJsb2NrL2Jsay1tcS5oLTQ2LWludCBibGtfbXFfcG9sbChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYmxrX3FjX3QgY29va2llLCBzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqaW9iLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MTc3MT1zdGF0aWMgYm9vbCBkaXNrX3pvbmVfd3BsdWdfc3VibWl0X2JpbyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTE4MTUtXFx0fSBlbHNlIHtcXG5ibG9jay9ibGstem9uZWQuYzoxODE2OlxcdFxcdGJsa19tcV9zdWJtaXRfYmlvKGJpbyk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMTgxNy1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjM5LjU1MjUyMDQyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODQwMDM1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgTGF5ZXIgUGVyZm9ybWFuY2UqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBgYmxrX21xX3N1Ym1pdF9iaW9gLiBUaGF0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBibG9jayBJL08gc3VibWlzc2lvbiBwYXRocy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSB0aW1pbmcgZGV0YWlscyB0byBwcm92aWRlIG1vcmUgY29tcHJlaGVuc2l2ZSBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBibG9jayBJL08gdGltZSBpcyBzcGVudC4gSSdtIHdvbmRlcmluZywgaG93IGlzIGBibGtfdGltZV9nZXRfbnNgIHVzZWQ/IEhtbSwgaXQncyBpbmxpbmUsIHNvIGl0J3Mgbm90IGEgcmVhZGlseSBhdmFpbGFibGUgc3ltYm9sIHRvIHRyYWNlLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuTGV0J3MgZmluZCB0aGUgcGxhY2VzIGBibGtfdGltZV9nZXRfbnNgIGlzIHVzZWQuIFNjYW5uaW5nLi4uIEFoYSEgYGJmcV9hZGRfcmVxdWVzdGAsIGBiZnFfdXBkYXRlX2lvX3RoaW5rdGltZWAsIGFuZCBgYmZxX2NvbXBsZXRlZF9yZXF1ZXN0YCBpbiB0aGUgQkZRIHNjaGVkdWxlciBhcmUgdXNpbmcgaXQuIEludGVyZXN0aW5nLiBBbmQgYWxzbyBgYmxrX2FjY291bnRfaW9fc3RhcnRgIGFuZCBgYmxrX2FjY291bnRfaW9fZG9uZWAuIFRob3NlIGFyZSBrZXkgZm9yIGFjY291bnRpbmcuIEkgYWxzbyBzZWUgaXQgaW4gYGJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdGAsIGFuZCBgYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eGAuIFRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIHNlZSB3aGF0IGBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3RgIGlzIGRvaW5nLiBJIHNob3VsZCBzdGFydCB0aGVyZSwgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSB0aW1lIGFjY291bnRpbmcgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDIxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjQzLjUzNjUyNjk0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE1MzM4MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEuYz01OTc9c3RhdGljIHN0cnVjdCByZXF1ZXN0ICpibGtfbXFfcnFfY2FjaGVfZmlsbChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTYyNS1cXG5ibG9jay9ibGstbXEuYzo2MjY6c3RhdGljIHN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuYmxvY2svYmxrLW1xLmMtNjI3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGJsa19vcGZfdCBvcGYsXFxuLS1cXG5ibG9jay9ibGstbXEuYz02NjE9c3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfb3BmX3Qgb3BmLFxcbi0tXFxuYmxvY2svYmxrLW1xLmMtNjY1LVxcbmJsb2NrL2Jsay1tcS5jOjY2NjpcXHRycSA9IGJsa19tcV9hbGxvY19jYWNoZWRfcmVxdWVzdChxLCBvcGYsIGZsYWdzKTtcXG5ibG9jay9ibGstbXEuYy02NjctXFx0aWYgKCFycSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDo0NS4zNTE4NzAzNTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk4NDE2NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgQmxvY2sgTGF5ZXIqKlxuXG5BbHJpZ2h0LCBgYmxrX21xX2FsbG9jX3JlcXVlc3RgIC0gdGhhdCdzIGEgc29saWQgZnVuY3Rpb24gdG8gc3RhcnQgd2l0aC4gTGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhIGdyYXNwIG9mIHdoYXQgdGhhdCdzIGRvaW5nIGJlZm9yZSB3ZSBzdGFydC4gTm93LCBmcm9tIHdoYXQgSSByZW1lbWJlciB0aGlzIGlzIHRoZSBwbGFjZSByZXF1ZXN0cyBhcmUgY3JlYXRlZCwgcXVldWVkLCBhbmQgYWxsb2NhdGVkIHRvIHRoZSBkcml2ZXIuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgaG93IHdlIGtpY2sgdGhvc2UgcmVxdWVzdHMgb2ZmLiBTbywgd2hhdCdzIG5leHQ/IEFoIHllcywgYGJsa19tcV9zdGFydF9yZXF1ZXN0YC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyB1cCB0by4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gZm9jdXMgb24gaG93IHRoaXMgcGFydCBvZiB0aGUgcHJvY2VzcyBnZXRzIGluaXRpYWxpemVkLCBhbmQgaG93IHdlIHN0YXJ0IGFjdHVhbGx5IG1vdmluZyB0aGUgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA5NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI0OjQ4LjY1MDI4ODkzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwMDM1ODUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfbXFfc3RhcnRfcmVxdWVzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz0xMjg3PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJkX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTI5My1cXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYzoxMjk0OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTI5NS1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTEzNTg9RVhQT1JUX1NZTUJPTChibGtfbXFfY29tcGxldGVfcmVxdWVzdCk7XFxuLS1cXG5ibG9jay9ibGstbXEuYy0xMzYwLS8qKlxcbmJsb2NrL2Jsay1tcS5jOjEzNjE6ICogYmxrX21xX3N0YXJ0X3JlcXVlc3QgLSBTdGFydCBwcm9jZXNzaW5nIGEgcmVxdWVzdFxcbmJsb2NrL2Jsay1tcS5jLTEzNjItICogQHJxOiBQb2ludGVyIHRvIHJlcXVlc3QgdG8gYmUgc3RhcnRlZFxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMTM2Ny0gKi9cXG5ibG9jay9ibGstbXEuYzoxMzY4OnZvaWQgYmxrX21xX3N0YXJ0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmJsb2NrL2Jsay1tcS5jLTEzNjkte1xcbi0tXFxuYmxvY2svYmxrLW1xLmMtMTM5My19XFxuYmxvY2svYmxrLW1xLmM6MTM5NDpFWFBPUlRfU1lNQk9MKGJsa19tcV9zdGFydF9yZXF1ZXN0KTtcXG5ibG9jay9ibGstbXEuYy0xMzk1LVxcbi0tXFxuYmxvY2svYnNnLWxpYi5jPTI3Mj1zdGF0aWMgYmxrX3N0YXR1c190IGJzZ19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmJsb2NrL2JzZy1saWIuYy0yODItXFxuYmxvY2svYnNnLWxpYi5jOjI4MzpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbmJsb2NrL2JzZy1saWIuYy0yODQtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTEwNjI9c3NpemVfdCBwYXJ0X3N0YXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTExMDgtICogRm9yIGJpby1iYXNlZCBkZXZpY2UsIHN0YXJ0ZWQgZnJvbSBiZGV2X3N0YXJ0X2lvX2FjY3QoKTtcXG5ibG9jay9nZW5oZC5jOjExMDk6ICogRm9yIHJxLWJhc2VkIGRldmljZSwgc3RhcnRlZCBmcm9tIGJsa19tcV9zdGFydF9yZXF1ZXN0KCk7XFxuYmxvY2svZ2VuaGQuYy0xMTEwLSAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9hbWlmbG9wLmM9MTUwNT1zdGF0aWMgYmxrX3N0YXR1c190IGFtaWZsb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYy0xNTE0LVxcbmRyaXZlcnMvYmxvY2svYW1pZmxvcC5jOjE1MTU6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xcbmRyaXZlcnMvYmxvY2svYW1pZmxvcC5jLTE1MTYtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYz0yNTA9c3RhdGljIGJsa19zdGF0dXNfdCBhb2VibGtfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy0yNjAtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZkLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYzoyNjE6XFx0XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QoYmQtXFx1MDAzZXJxKTtcXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYy0yNjItXFx0XFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYz04NDM9bmV4dGJ1ZihzdHJ1Y3QgYW9lZGV2ICpkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMtODYyLVxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJxLVxcdTAwM2VxdWV1ZWxpc3QpO1xcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jOjg2MzpcXHRcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMtODY0LVxcdFxcdGQtXFx1MDAzZWlwLnJxID0gcnE7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VkZXYuYz0xOTc9YW9lZGV2X2Rvd25kZXYoc3RydWN0IGFvZWRldiAqZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWRldi5jLTIzMi1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZycS1cXHUwMDNlcXVldWVsaXN0KTtcXG5kcml2ZXJzL2Jsb2NrL2FvZS9hb2VkZXYuYzoyMzM6XFx0XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xcbmRyaXZlcnMvYmxvY2svYW9lL2FvZWRldi5jLTIzNC1cXHRcXHRibGtfbXFfZW5kX3JlcXVlc3QocnEsIEJMS19TVFNfSU9FUlIpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9hdGFmbG9wLmM9MTUwND1zdGF0aWMgYmxrX3N0YXR1c190IGF0YWZsb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYy0xNTI1LVxcdHVuaXRbZHJpdmVdLmVycm9yX2NvdW50ID0gMDtcXG5kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYzoxNTI2OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGZkX3JlcXVlc3QpO1xcbmRyaXZlcnMvYmxvY2svYXRhZmxvcC5jLTE1MjctXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jPTI4NDg9c3RhdGljIGJsa19zdGF0dXNfdCBmbG9wcHlfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jLTI4NTAte1xcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmM6Mjg1MTpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cXHUwMDNlcnEpO1xcbmRyaXZlcnMvYmxvY2svZmxvcHB5LmMtMjg1Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NTE9c3RhdGljIGJsa19zdGF0dXNfdCBsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1Ny1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODU4OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODU5LVxcbi0tXFxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jPTMyNjg9c3RhdGljIGJsa19zdGF0dXNfdCBtdGlwX2lzc3VlX3Jlc2VydmVkX2NtZChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0zMjk5LVxcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYzozMzAwOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzMwMS1cXHRtdGlwX2lzc3VlX25vbl9uY3FfY29tbWFuZChkZC1cXHUwMDNlcG9ydCwgcnEtXFx1MDAzZXRhZyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM9MzMwNT1zdGF0aWMgYmxrX3N0YXR1c190IG10aXBfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMzMyMC1cXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM6MzMyMTpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jLTMzMjItXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTExMTc9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfaGFuZGxlX2NtZChzdHJ1Y3QgbmJkX2NtZCAqY21kLCBpbnQgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTExNzAtXFx0ICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMTcxOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTcyLVxcdGlmICh1bmxpa2VseShuc29jay1cXHUwMDNlcGVuZGluZyBcXHUwMDI2XFx1MDAyNiBuc29jay1cXHUwMDNlcGVuZGluZyAhPSByZXEpKSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNjUyPXN0YXRpYyBibGtfc3RhdHVzX3QgbnVsbF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE2OTEtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTY5MjpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTY5My1cXG4tLVxcbmRyaXZlcnMvYmxvY2svcHMzZGlzay5jPTE4ND1zdGF0aWMgYmxrX3N0YXR1c190IHBzM2Rpc2tfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYy0xOTEtXFxuZHJpdmVycy9ibG9jay9wczNkaXNrLmM6MTkyOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVxcdTAwM2VycSk7XFxuZHJpdmVycy9ibG9jay9wczNkaXNrLmMtMTkzLVxcbi0tXFxuZHJpdmVycy9ibG9jay9yYmQuYz00NzI1PXN0YXRpYyB2b2lkIHJiZF9xdWV1ZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9ibG9jay9yYmQuYy00NzQyLVxcbmRyaXZlcnMvYmxvY2svcmJkLmM6NDc0MzpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9ibG9jay9yYmQuYy00NzQ0LVxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtY2x0LmM9MTExMz1zdGF0aWMgYmxrX3N0YXR1c190IHJuYmRfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1jbHQuYy0xMTQ2LVxcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLWNsdC5jOjExNDc6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLWNsdC5jLTExNDgtXFx0ZXJyID0gcm5iZF9jbGllbnRfeGZlcl9yZXF1ZXN0KGRldiwgcnEsIGl1KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svc3VudmRjLmM9NTM2PXN0YXRpYyBibGtfc3RhdHVzX3QgdmRjX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay9zdW52ZGMuYy01NDQtXFxuZHJpdmVycy9ibG9jay9zdW52ZGMuYzo1NDU6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QoYmQtXFx1MDAzZXJxKTtcXG5kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jLTU0Ni1cXG4tLVxcbmRyaXZlcnMvYmxvY2svc3dpbS5jPTUyNj1zdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3N3aW0uYy01MzYtXFxuZHJpdmVycy9ibG9jay9zd2ltLmM6NTM3OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuZHJpdmVycy9ibG9jay9zd2ltLmMtNTM4LVxcbi0tXFxuZHJpdmVycy9ibG9jay9zd2ltMy5jPTMwNz1zdGF0aWMgYmxrX3N0YXR1c190IHN3aW0zX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay9zd2ltMy5jLTMxOC1cXHR9XFxuZHJpdmVycy9ibG9jay9zd2ltMy5jOjMxOTpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbmRyaXZlcnMvYmxvY2svc3dpbTMuYy0zMjAtXFx0ZnMtXFx1MDAzZWN1cl9yZXEgPSByZXE7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjE0Nj1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcHJlcF9yZXEoc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxNzQtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIxNzU6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTc2LVxcdHJldHVybiBCTEtfU1RTX09LO1xcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9NDA0PXN0YXRpYyBibGtfc3RhdHVzX3QgdmlydGJsa19wcmVwX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtNDIwLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjQyMTpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTQyMi1cXG4tLVxcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM9ODkzPXN0YXRpYyBibGtfc3RhdHVzX3QgYmxraWZfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTkwMS1cXHRyaW5mbyA9IGdldF9yaW5mbyhpbmZvLCBxaWQpO1xcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM6OTAyOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHFkLVxcdTAwM2VycSk7XFxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy05MDMtXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJpbmZvLVxcdTAwM2VyaW5nX2xvY2ssIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svejJyYW0uYz02OD1zdGF0aWMgYmxrX3N0YXR1c190IHoyX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay96MnJhbS5jLTc0LVxcbmRyaXZlcnMvYmxvY2svejJyYW0uYzo3NTpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbmRyaXZlcnMvYmxvY2svejJyYW0uYy03Ni1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz04ODU9c3RhdGljIGJsa19zdGF0dXNfdCB6bG9vcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MDYtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkwNzpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwOC1cXG4tLVxcbmRyaXZlcnMvY2Ryb20vZ2Ryb20uYz02MzQ9c3RhdGljIGJsa19zdGF0dXNfdCBnZHJvbV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvY2Ryb20vZ2Ryb20uYy02MzYte1xcbmRyaXZlcnMvY2Ryb20vZ2Ryb20uYzo2Mzc6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QoYmQtXFx1MDAzZXJxKTtcXG5kcml2ZXJzL2Nkcm9tL2dkcm9tLmMtNjM4LVxcbi0tXFxuZHJpdmVycy9tZC9kbS1ycS5jPTQ0MD1zdGF0aWMgdm9pZCBkbV9zdGFydF9yZXF1ZXN0KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IHJlcXVlc3QgKm9yaWcpXFxuZHJpdmVycy9tZC9kbS1ycS5jLTQ0MS17XFxuZHJpdmVycy9tZC9kbS1ycS5jOjQ0MjpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChvcmlnKTtcXG5kcml2ZXJzL21kL2RtLXJxLmMtNDQzLVxcbi0tXFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zX2Jsb2NrLmM9MTk3ND1zdGF0aWMgYmxrX3N0YXR1c190IG1zYl9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTE5OTAtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZtc2ItXFx1MDAzZXFfbG9jayk7XFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zX2Jsb2NrLmM6MTk5MTpcXHRcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jLTE5OTItXFx0XFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XFxuLS1cXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYy0xOTk5LVxcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc19ibG9jay5jOjIwMDA6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNfYmxvY2suYy0yMDAxLVxcdG1zYi1cXHUwMDNlcmVxID0gcmVxO1xcbi0tXFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmM9NzUwPXN0YXRpYyBibGtfc3RhdHVzX3QgbXNwcm9fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYy03NjQtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZtc2ItXFx1MDAzZXFfbG9jayk7XFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmM6NzY1OlxcdFxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVxcdTAwM2VycSk7XFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMtNzY2LVxcdFxcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xcbi0tXFxuZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMtNzY5LVxcdG1zYi1cXHUwMDNlYmxvY2tfcmVxID0gYmQtXFx1MDAzZXJxO1xcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jOjc3MDpcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChiZC1cXHUwMDNlcnEpO1xcbmRyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jLTc3MS1cXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvcXVldWUuYz0yMzQ9c3RhdGljIGJsa19zdGF0dXNfdCBtbWNfbXFfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3F1ZXVlLmMtMzA4LVxcbmRyaXZlcnMvbW1jL2NvcmUvcXVldWUuYzozMDk6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcXG5kcml2ZXJzL21tYy9jb3JlL3F1ZXVlLmMtMzEwLVxcbi0tXFxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYz0xMDY9c3RhdGljIHN0cnVjdCByZXF1ZXN0ICptdGRfbmV4dF9yZXF1ZXN0KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTExMi1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZycS1cXHUwMDNlcXVldWVsaXN0KTtcXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jOjExMzpcXHRcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChycSk7XFxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYy0xMTQtXFx0XFx0cmV0dXJuIHJxO1xcbi0tXFxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYz0xNjY9c3RhdGljIGJsa19zdGF0dXNfdCBtdGRfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jLTE3Mi1cXHRpZiAoIWRldikge1xcbmRyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmM6MTczOlxcdFxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KGJkLVxcdTAwM2VycSk7XFxuZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYy0xNzQtXFx0XFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XFxuLS1cXG5kcml2ZXJzL210ZC91YmkvYmxvY2suYz0xODA9c3RhdGljIGJsa19zdGF0dXNfdCB1YmlibG9ja19yZWFkKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL210ZC91YmkvYmxvY2suYy0xOTMtXFxuZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmM6MTk0OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmMtMTk1LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTEyMTk9c3RhdGljIGlubGluZSB2b2lkIG52bWVfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTIyMi1cXHRcXHRudm1lX21wYXRoX3N0YXJ0X3JlcXVlc3QocnEpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMjIzOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTIyNC19XFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jPTMwMTg9c3RhdGljIGJsa19zdGF0dXNfdCBkb19kYXNkX3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTMwOTAtXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMDkxOlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMDkyLVxcdHNwaW5fbG9jayhcXHUwMDI2YmxvY2stXFx1MDAzZXF1ZXVlX2xvY2spO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL3NjbV9ibGsuYz0yODE9c3RhdGljIGJsa19zdGF0dXNfdCBzY21fYmxrX3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTMxOS1cXHR9XFxuZHJpdmVycy9zMzkwL2Jsb2NrL3NjbV9ibGsuYzozMjA6XFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcXG5kcml2ZXJzL3MzOTAvYmxvY2svc2NtX2Jsay5jLTMyMS1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jPTE4NTM9c3RhdGljIGJsa19zdGF0dXNfdCBzY3NpX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTkxOC1cXG5kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxOTE5OlxcdGJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7XFxuZHJpdmVycy9zY3NpL3Njc2lfbGliLmMtMTkyMC1cXHRpZiAoYmxrX21xX2lzX3Jlc2VydmVkX3JxKHJlcSkpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmg9ODU3PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfbXFfY29tcGxldGVfcmVxdWVzdF9kaXJlY3Qoc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaC04NjMtXFxuaW5jbHVkZS9saW51eC9ibGstbXEuaDo4NjQ6dm9pZCBibGtfbXFfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpO1xcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtODY1LXZvaWQgYmxrX21xX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgYmxrX3N0YXR1c190IGVycm9yKTtcXG4tLVxcbnJ1c3Qva2VybmVsL2Jsb2NrL21xLnJzLTI2LS8vISBgUmVxdWVzdDo6ZW5kYCwgbWV0aG9kcy4gRmFpbHVyZSB0byBkbyBzbyBjYW4gbGVhZCB0byBkZWFkbG9jayBvciB0aW1lb3V0XFxucnVzdC9rZXJuZWwvYmxvY2svbXEucnM6Mjc6Ly8hIGVycm9ycy4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgQyBmdW5jdGlvbiBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGlzIGltcGxpY2l0bHlcXG5ydXN0L2tlcm5lbC9ibG9jay9tcS5ycy0yOC0vLyEgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgcXVldWVkIHdpdGggdGhlIGRyaXZlci5cXG4tLVxcbnJ1c3Qva2VybmVsL2Jsb2NrL21xL3JlcXVlc3QucnM9ODk9ICAgIHB1YihjcmF0ZSkgdW5zYWZlIGZuIHN0YXJ0X3VuY2hlY2tlZCh0aGlzOiBcXHUwMDI2QVJlZlxcdTAwM2NTZWxmXFx1MDAzZSkge1xcbi0tXFxucnVzdC9rZXJuZWwvYmxvY2svbXEvcmVxdWVzdC5ycy05MS0gICAgICAgIC8vIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2Vzcy5cXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9yZXF1ZXN0LnJzOjkyOiAgICAgICAgdW5zYWZlIHsgYmluZGluZ3M6OmJsa19tcV9zdGFydF9yZXF1ZXN0KHRoaXMuMC5nZXQoKSkgfTtcXG5ydXN0L2tlcm5lbC9ibG9jay9tcS9yZXF1ZXN0LnJzLTkzLSAgICB9XFxuLS1cXG5zYW1wbGVzL2JwZi90YXNrX2ZkX3F1ZXJ5X2tlcm4uYy02LVxcbnNhbXBsZXMvYnBmL3Rhc2tfZmRfcXVlcnlfa2Vybi5jOjc6U0VDKFxcXCJrcHJvYmUvYmxrX21xX3N0YXJ0X3JlcXVlc3RcXFwiKVxcbnNhbXBsZXMvYnBmL3Rhc2tfZmRfcXVlcnlfa2Vybi5jLTgtaW50IGJwZl9wcm9nMShzdHJ1Y3QgcHRfcmVncyAqY3R4KVxcbi0tXFxuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV91c2VyLmM9MzEwPWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4tLVxcbnNhbXBsZXMvYnBmL3Rhc2tfZmRfcXVlcnlfdXNlci5jLTM0OC1cXHQvKiB0ZXN0IHR3byBmdW5jdGlvbnMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgKl9rZXJuLmMgZmlsZSAqL1xcbnNhbXBsZXMvYnBmL3Rhc2tfZmRfcXVlcnlfdXNlci5jOjM0OTpcXHRDSEVDS19BTkRfUkVUKHRlc3RfZGVidWdfZnNfa3Byb2JlKDAsIFxcXCJibGtfbXFfc3RhcnRfcmVxdWVzdFxcXCIsXFxuc2FtcGxlcy9icGYvdGFza19mZF9xdWVyeV91c2VyLmMtMzUwLVxcdFxcdFxcdFxcdFxcdCAgIEJQRl9GRF9UWVBFX0tQUk9CRSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDo1MC44NTA2NTQxODRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxODMwMjk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgTGF5ZXIgVGltZXN0YW1waW5nKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlIHRvIGFkZCBzb21lIGluc3RydW1lbnRhdGlvbiBhcm91bmQgYmxvY2sgcmVxdWVzdCB0aW1lc3RhbXBzLiBJIHRoaW5rIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAgYW5kIGBibGtfbXFfc3VibWl0X2Jpb2AgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBpbnZlc3RpZ2F0aW9uLiBUaGV5IHNlZW0gbGlrZSBrZXkgZW50cnkgcG9pbnRzLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIG9yIGVuYWJsZSB0byB1c2UgdGhlIHRpbWVzdGFtcHMgdGhhdCBJIHdhbnQ/IExldCBtZSBjaGVjayB0aGUgY29kZS4gSSBrbm93IHRoaXMgaXMgZGVlcCB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBzbyBJIHNob3VsZCBmaW5kIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGluIGBibG9jay9ibGsuaGAuIFNpbmNlIGBDT05GSUdfQkxPQ0tgIGlzIGEgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbiwgdGhhdCBzaG91bGQgYWx3YXlzIGJlIGVuYWJsZWQsIHNvIEkgd29uJ3Qgd29ycnkgYWJvdXQgdGhhdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUuIE5vdywgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYFBGX0JMT0NLX1RTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgaXMgaGFuZGxlZC4gTGV0J3MgZGlnIGludG8gYFBGX0JMT0NLX1RTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDo1NC43Njg5NjAyMjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTQ2OTExMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEZfQkxPQ0tfVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNvcmUuYz0xMjI2PXZvaWQgX19ibGtfZmx1c2hfcGx1ZyhzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcsIGJvb2wgZnJvbV9zY2hlZHVsZSlcXG4tLVxcbmJsb2NrL2Jsay1jb3JlLmMtMTI0MC1cXHRwbHVnLVxcdTAwM2VjdXJfa3RpbWUgPSAwO1xcbmJsb2NrL2Jsay1jb3JlLmM6MTI0MTpcXHRjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+UEZfQkxPQ0tfVFM7XFxuYmxvY2svYmxrLWNvcmUuYy0xMjQyLX1cXG4tLVxcbmJsb2NrL2Jsay5oPTY4OT1zdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZClcXG4tLVxcbmJsb2NrL2Jsay5oLTcwMS1cXHQgKlxcbmJsb2NrL2Jsay5oOjcwMjpcXHQgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC5cXG5ibG9jay9ibGsuaC03MDMtXFx0ICovXFxuLS1cXG5ibG9jay9ibGsuaC03MDctXFx0XFx0V1JJVEVfT05DRShwbHVnLVxcdTAwM2VjdXJfa3RpbWUsIG5vdyk7XFxuYmxvY2svYmxrLmg6NzA4OlxcdFxcdC8qIEVuc3VyZSBQRl9CTE9DS19UUyBpcyBzZXQgYWZ0ZXIgY3VyX2t0aW1lLiAqL1xcbmJsb2NrL2Jsay5oLTcwOS1cXHRcXHRiYXJyaWVyKCk7XFxuYmxvY2svYmxrLmg6NzEwOlxcdFxcdGN1cnJlbnQtXFx1MDAzZWZsYWdzIHw9IFBGX0JMT0NLX1RTO1xcbmJsb2NrL2Jsay5oLTcxMS1cXHR9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTEyMjA9c3RhdGljIGlubGluZSB2b2lkIGJsa19wbHVnX2ludmFsaWRhdGVfdHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEyMjUtXFx0XFx0cGx1Zy1cXHUwMDNlY3VyX2t0aW1lID0gMDtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEyMjY6XFx0Y3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gflBGX0JMT0NLX1RTO1xcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTIyNy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MTc1Mj1leHRlcm4gc3RydWN0IHBpZCAqY2FkX3BpZDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNzg3LVxcdFxcdFxcdFxcdFxcdFxcdCAqIFNlZSBtZW1hbGxvY19waW5fc2F2ZSgpICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE3ODg6I2RlZmluZSBQRl9CTE9DS19UU1xcdFxcdDB4MjAwMDAwMDBcXHQvKiBwbHVnIGhhcyB0cyB0aGF0IG5lZWRzIHVwZGF0aW5nICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE3ODktI2RlZmluZSBQRl9fSE9MRV9fNDAwMDAwMDBcXHQweDQwMDAwMDAwXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTcyNTI9c3RhdGljIHZvaWQgc2NoZWRfdXBkYXRlX3dvcmtlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyNTMte1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI1NDpcXHRpZiAodHNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9XUV9XT1JLRVIgfCBQRl9JT19XT1JLRVIgfCBQRl9CTE9DS19UUykpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjcyNTU6XFx0XFx0aWYgKHRzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9CTE9DS19UUylcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcyNTYtXFx0XFx0XFx0YmxrX3BsdWdfaW52YWxpZGF0ZV90cyh0c2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNDo1Ni41ODM2NTcxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwODQyMzE2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCbG9jayBMYXllciBUaW1lc3RhbXBpbmcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGNvcmUgb2YgaXQgbGllcyBpbiBgYmxrX3RpbWVfZ2V0X25zYCwgd2hpY2ggaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBibG9jayBsYXllci4gTm8gc3BlY2lhbCBjb25maWdzIGFyZSByZXF1aXJlZCwgd2hpY2ggaXMgYSBnb29kIHNpZ27igJRpdCdzIGEgZm91bmRhdGlvbmFsIGNoYW5nZS4gV2FpdCwgSSBhbHNvIHNlZSB0aGF0IGBQRl9CTE9DS19UU2AgaXMgaW52b2x2ZWQsIGFuZCB0aGF0J3MgdXNlZCBpbiBgc2NoZWRfdXBkYXRlX3dvcmtlcmAsIHJpZ2h0PyBTbywgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBmaXgsIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbi4gSSdtIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyBXb3J0aEZ1enppbmc7IGl0IHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJIGluaXRpYWxseSB0aG91Z2h0IG9mIGBibGtfbXFfc3VibWl0X2Jpb2AsIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAsIGFuZCBgYmxrX21xX2FsbG9jX3JlcXVlc3RgIC0gdGhleSdyZSBhbGwgZGlyZWN0bHkgcmVsYXRlZCBhbmQgaW1wb3J0YW50LiBCdXQsIEkgbmVlZCB0byByZW1lbWJlciB0aGUgcHJvbXB0OiBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlwiIFRoaXMgcmFjZSBjb25kaXRpb24gaGFwcGVucyBiZWNhdXNlIGBjdXJfa3RpbWVgIGluIGBibGtfdGltZV9nZXRfbnNgIGNhbiBiZSB6ZXJvZWQgZHVyaW5nIHByZWVtcHRpb24gd2hlbiBgUEZfQkxPQ0tfVFNgIGlzIHNldC4gSXQgbG9va3MgbGlrZSBpdCdzIGEgdGltZXN0YW1waW5nIGlzc3VlLlxuXG5NeSBmaXJzdCB0aG91Z2h0IHdhcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB3ZXJlIHRoZSBob3R0ZXN0IGFuZCBtb3N0IGltcG9ydGFudC4gQnV0LCBtYXliZSB0aGVyZSBhcmUgbGVzcyBob3QtcGF0aCBmdW5jdGlvbnMgdGhhdCB1c2UgaXQuIExldCdzIHNlZS4uLiBgYmZxX2FkZF9yZXF1ZXN0YCwgYGJmcV9jb21wbGV0ZWRfcmVxdWVzdGAgYXJlIHNwZWNpZmljIHRvIEJGUS4uLiB0aGVuIHRoZXJlIGFyZSB0aGUgY2dyb3VwIGFuZCBRb1MgZnVuY3Rpb25zOiBgYmZxZ19zdGF0c191cGRhdGVfaWRsZV90aW1lYCwgYGJmcWdfc3RhdHNfdXBkYXRlX2NvbXBsZXRpb25gLCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZ2AsIGBpb2NfYXV0b3BfaWR4YCwgYGJsa2NnX2lvbGF0ZW5jeV9kb25lX2Jpb2AsIGByd2Jfc3luY19pc3N1ZV9sYXRgLiBBbmQgd2hhdCBhYm91dCBgYmxrX21xX2FsbG9jX3JlcXVlc3RgPyBJIHNob3VsZCBwcm9iYWJseSBydWxlIHRoYXQgb3V0LlxuXG5UaGVyZSdzIG5vIHBhcnRpY3VsYXIgdGVzdCBvciBpb2N0bCB0aGF0IHdvdWxkIGJlIHNwZWNpZmljIHRvIHRoaXMsIGl0J3MgcmVhbGx5IHRoZSByYWNlIGNvbmRpdGlvbiB3aGVuIGBQRl9CTE9DS19UU2AgaXMgc2V0LCBhbmQgcHJlZW1wdGlvbiBoYXBwZW5zLCB1c3VhbGx5IGR1cmluZyBzY2hlZHVsaW5nLi4uIHNvIHByZXR0eSBtdWNoIGFueSBibG9jayBJTyBpcyBnb2luZyB0byB0cmlnZ2VyIHRoaXMgY29uZGl0aW9uLlxuXG5Pa2F5LCBsZXQncyBnZXQgYmFjayB0byB0aGUgZm9jdXMgc3ltYm9scy4gTm93LCBJICpjb3VsZCoganVzdCBsaXN0IGBibGtfbXFfc3VibWl0X2Jpb2AgYW5kIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAgYmVjYXVzZSB0aGV5ICphcmUqIHRoZSBtYWluIGZ1bmN0aW9ucyB1c2luZyBpdCwgZXZlbiB0aG91Z2ggdGhleSdyZSBob3QgcGF0aHMuIEFuZCB0aGUgcHJvbXB0IGlzIHJlYWxseSB0ZWxsaW5nIG1lIHRvIGJlIGNhcmVmdWwgaGVyZS4uLiBpZiBJIGxpc3QgYGJsa19tcV9zdWJtaXRfYmlvYCwgaXQncyBnb2luZyB0byBza2V3IHRoZSBkaXN0cmlidXRpb24uIEhtbW0uLi5XaGF0IGFib3V0IGBibGtfcGx1Z19pbnZhbGlkYXRlX3RzYD8gVGhhdCdzIGNhbGxlZCBmcm9tIGBzY2hlZF91cGRhdGVfd29ya2VyYC5cblxuUmlnaHQsIGxldCdzIHNlZSB3aGF0IHRoYXQgb25lIGRvZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTkzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjA1LjY2Nzg5MTY5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTYzNDY1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfcGx1Z19pbnZhbGlkYXRlX3RzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTIxMT1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX2ZsdXNoX3BsdWcoc3RydWN0IGJsa19wbHVnICpwbHVnLCBib29sIGFzeW5jKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMjE5LSAqL1xcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTIyMDpzdGF0aWMgaW5saW5lIHZvaWQgYmxrX3BsdWdfaW52YWxpZGF0ZV90cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEyMjEte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMjQ4PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfZmx1c2hfcGx1ZyhzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcsIGJvb2wgYXN5bmMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEyNTEtXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxMjUyOnN0YXRpYyBpbmxpbmUgdm9pZCBibGtfcGx1Z19pbnZhbGlkYXRlX3RzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTI1My17XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTcyNTI9c3RhdGljIHZvaWQgc2NoZWRfdXBkYXRlX3dvcmtlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzI1NS1cXHRcXHRpZiAodHNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX0JMT0NLX1RTKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzI1NjpcXHRcXHRcXHRibGtfcGx1Z19pbnZhbGlkYXRlX3RzKHRzayk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy03MjU3LVxcdFxcdGlmICh0c2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfV1FfV09SS0VSKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNTowNy41Mzk1MzM4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQ4MDAwOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBMaXN0IG9mIEZ1bmN0aW9ucyBJbXBhY3RlZCBieSBgYmxrX3RpbWVfZ2V0X25zYCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYGJsa190aW1lX2dldF9uc2AgY2hhbmdlLiBUaGUga2V5IGlzIHRoYXQgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIGl0J3Mgbm90IGdvaW5nIHRvIHNob3cgdXAgYXMgYSBzdGFuZGFyZCBzeW1ib2wuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCAqdXNlKiBpdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgdGhlIGJyZWFkdGggb2YgaW1wYWN0LlxuXG5Jbml0aWFsbHksIEkgY29uc2lkZXJlZCBsaXN0aW5nIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBsZXNzIGdlbmVyaWMuIEkgdGhvdWdodCBJIHNob3VsZCBsaXN0IGBiZnFfYWRkX3JlcXVlc3RgLCBgYmZxX2NvbXBsZXRlZF9yZXF1ZXN0YCwgYGlvY19hdXRvcF9pZHhgLCBhbmQgYGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2dgLiBCdXQsIGFmdGVyIHJlY29uc2lkZXJpbmcsIEkgZGVjaWRlZCB0byByZW1vdmUgYGJmcV9jb21wbGV0ZWRfcmVxdWVzdGAuXG5cbkhvd2V2ZXIsIGFzIEkgdHJhY2VkIGZ1cnRoZXIsIEkgcmVhbGl6ZWQgYGJsa190aW1lX2dldF9uc2AgaXMgYWxzbyB1c2VkIGluIGBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3RgLCB3aGljaCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBibGtfbXFfYWxsb2NfcmVxdWVzdGAuIEkgbmVlZCB0byByZWZsZWN0IHRoaXMgZGVwZW5kZW5jeS4gQWZ0ZXIgZnVydGhlciB0aG91Z2h0LCBJJ20gZ29pbmcgdG8gcmVtb3ZlIGBibGtfbXFfYWxsb2NfY2FjaGVkX3JlcXVlc3RgIHNpbmNlIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLlxuXG5UaGVyZWZvcmUsIHRoZSBmaW5hbCBsaXN0IGZvciBjb25zaWRlcmF0aW9uIGlzOiBgYmZxX2FkZF9yZXF1ZXN0YCwgYGlvY19hdXRvcF9pZHhgLCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZ2AsIGFuZCBgYmxrX21xX2FsbG9jX3JlcXVlc3RgLiBUaGlzIGxpc3Qgc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZXJlIHRoaXMgY2hhbmdlIGluIGBibGtfdGltZV9nZXRfbnNgIG1pZ2h0IGJlIGZlbHQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaWYgYGJmcV9hZGRfcmVxdWVzdGAgaXMgc3RhdGljIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE0OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNToxNC4xODc1MzcyNjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTY0ODIwNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmZxX2FkZF9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JmcS1pb3NjaGVkLmM9MjEzND1zdGF0aWMgdm9pZCBiZnFfY2hlY2tfd2FrZXIoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgYmZxX3F1ZXVlICpiZnFxLFxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy0yMjA1LVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM6MjIwNjpzdGF0aWMgdm9pZCBiZnFfYWRkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjIwNy17XFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTMxMjc9c3RhdGljIHN0cnVjdCBiZnFfcXVldWUgKmJmcV9tZXJnZV9iZnFxcyhzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTMxNjktXFx0ICogdG8gYmUgd2VpZ2h0LXJhaXNlZCAod2hpY2ggbWF5IGhhcHBlbiBiZWNhdXNlIEVRTSBtYXkgbWVyZ2VcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjMxNzA6XFx0ICogYmZxcSBldmVuIGJlZm9yZSBiZnFfYWRkX3JlcXVlc3QgaXMgZXhlY3V0ZWQgZm9yIHRoZSBmaXJzdFxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzE3MS1cXHQgKiB0aW1lIGZvciBiZnFxKS4gSGFuZGxpbmcgdGhpcyBjYXNlIHdvdWxkIGhvd2V2ZXIgYmUgdmVyeVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz01OTQyPXN0YXRpYyB2b2lkIGJmcV91cGRhdGVfaGFzX3Nob3J0X3R0aW1lKHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjA1MS1cXHQgKiB3YWtlciBxdWV1ZSBpcyBkZWZpbmVkIGluIHRoZSBjb21tZW50cyBpblxcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjA1MjpcXHQgKiBiZnFfYWRkX3JlcXVlc3QoKSkuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gc3RhcnQgc29vbmVyXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MDUzLVxcdCAqIHRvIGJvb3N0IHRocm91Z2hwdXQgbW9yZSBlZmZlY3RpdmVseSwgYnkgaW5qZWN0aW5nIHRoZSBJL09cXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9NjE0Nz1zdGF0aWMgYm9vbCBfX2JmcV9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjE5MC1cXHR3YWl0aW5nID0gYmZxcSBcXHUwMDI2XFx1MDAyNiBiZnFfYmZxcV93YWl0X3JlcXVlc3QoYmZxcSk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MTkxOlxcdGJmcV9hZGRfcmVxdWVzdChycSk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTkyLVxcdGlkbGVfdGltZXJfZGlzYWJsZWQgPSB3YWl0aW5nIFxcdTAwMjZcXHUwMDI2ICFiZnFfYmZxcV93YWl0X3JlcXVlc3QoYmZxcSk7XFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYzNDY9c3RhdGljIHZvaWQgYmZxX2NvbXBsZXRlZF9yZXF1ZXN0KHN0cnVjdCBiZnFfcXVldWUgKmJmcXEsIHN0cnVjdCBiZnFfZGF0YSAqYmZxZClcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjU3Ni0gKiBwaWVjZXMgb2YgY29kZSB0aGF0IGltcGxlbWVudCB0aGVzZSBzdGVwczogdGhlIGJyYW5jaCBoYW5kbGluZyB0aGVcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY1Nzc6ICogdHJhbnNpdGlvbiBmcm9tIGVtcHR5IHRvIG5vbiBlbXB0eSBpbiBiZnFfYWRkX3JlcXVlc3QoKSwgdGhlIGJyYW5jaFxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjU3OC0gKiBoYW5kbGluZyBpbmplY3Rpb24gaW4gYmZxX3NlbGVjdF9xdWV1ZSgpLCBhbmQgdGhlIGZ1bmN0aW9uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjE2LjAwNDAyNDgwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDQ0MzgyNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIFJlcXVlc3QgRmxvdyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gbWFwIG91dCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGluIHRoaXMgSS9PIHBhdGguIGBiZnFfYWRkX3JlcXVlc3RgIGlzIHN0YXRpYywgc28gSSBjYW4ndCBkaXJlY3RseSBsaXN0IHRoYXQgYXMgYSBzdGFydGluZyBwb2ludC4gTGV0J3Mgc2VlLi4uIEkgY2FuIGxpc3QgYF9fYmZxX2luc2VydF9yZXF1ZXN0YCwgcmlnaHQ/IEFuZCBmb2xsb3dpbmcgdGhhdCwgSSBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSBgaW9jX2F1dG9wX2lkeGAgYW5kIGBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnYCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2wgZmxvdy4gV2FpdCBhIG1pbnV0ZSwgSSBhbHNvIHNlZSB0aGF0IGBibGtfdGltZV9nZXRfbnNgIGlzIHVzZWQgaW4gYGJsa19hY2NvdW50X2lvX3N0YXJ0YC4gQW5kICp0aGF0KiBvbmUgaXMgc3RhdGljIGlubGluZSwgY2FsbGVkIGZyb20gYGJsa19tcV9zdGFydF9yZXF1ZXN0YC4gVGhhdCdzIGltcG9ydGFudCFcblxuVGhlcmVmb3JlIEknbGwgbGlzdCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGFuZCBgYmxrX21xX3N1Ym1pdF9iaW9gLiBUaGV5IGhhdmUgdG8gYmUgaW4gdGhlcmUsIGV2ZW4gaWYgdGhleSdyZSBjb25zaWRlcmVkIGhvdCBwYXRocywgYmVjYXVzZSB0aGV5J3JlIHRoZSBtYWpvciBlbnRyeSBwb2ludHMgZnJvbSB0aGUgYmxvY2sgbGF5ZXIuIE5vdywgZ2l2ZW4gdGhhdCBgX19iZnFfaW5zZXJ0X3JlcXVlc3RgIGlzIHN0YXRpYywgSSBzaG91bGQgbGlzdCBgYmZxX2luc2VydF9yZXF1ZXN0YCBpdHNlbGYsIHdoaWNoIGlzIHRoZSBlbGV2YXRvciBvcGVyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgb25lIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6MjEuMDQ4NDEwMTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjQ4NTc3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmZxX2luc2VydF9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JmcS1pb3NjaGVkLmM9MjQ5OD1zdGF0aWMgdm9pZCBiZnFfcmVxdWVzdF9tZXJnZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTI1NTItICogdGhlIGZ1bmN0aW9uIHRoYXQgZmlsbHMgdGhpcyBoYXNoIHRhYmxlIChlbHZfcnFoYXNoX2FkZCkgaXMgY2FsbGVkXFxuYmxvY2svYmZxLWlvc2NoZWQuYzoyNTUzOiAqIG9ubHkgYnkgYmZxX2luc2VydF9yZXF1ZXN0LlxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMjU1NC0gKi9cXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9NjEzOD1zdGF0aWMgdm9pZCBiZnFxX3JlcXVlc3RfZnJlZWQoc3RydWN0IGJmcV9xdWV1ZSAqYmZxcSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjE0Ni0vKiByZXR1cm5zIHRydWUgaWYgaXQgY2F1c2VzIHRoZSBpZGxlIHRpbWVyIHRvIGJlIGRpc2FibGVkICovXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MTQ3OnN0YXRpYyBib29sIF9fYmZxX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgc3RydWN0IHJlcXVlc3QgKnJxKVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjE0OC17XFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTYyMzQ9c3RhdGljIHN0cnVjdCBiZnFfcXVldWUgKmJmcV9pbml0X3JxKHN0cnVjdCByZXF1ZXN0ICpycSk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjM1LVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjIzNjpzdGF0aWMgdm9pZCBiZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyMzctXFx0XFx0XFx0ICAgICAgIGJsa19pbnNlcnRfdCBmbGFncylcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI2NC1cXHR9IGVsc2Uge1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjI2NTpcXHRcXHRpZGxlX3RpbWVyX2Rpc2FibGVkID0gX19iZnFfaW5zZXJ0X3JlcXVlc3QoYmZxZCwgcnEpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI2Ni1cXHRcXHQvKlxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI2Ny1cXHRcXHQgKiBVcGRhdGUgYmZxcSwgYmVjYXVzZSwgaWYgYSBxdWV1ZSBtZXJnZSBoYXMgb2NjdXJyZWRcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjYyNjg6XFx0XFx0ICogaW4gX19iZnFfaW5zZXJ0X3JlcXVlc3QsIHRoZW4gcnEgaGFzIGJlZW5cXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyNjktXFx0XFx0ICogcmVkaXJlY3RlZCBpbnRvIGEgbmV3IHF1ZXVlLlxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjkxLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjI5MjpzdGF0aWMgdm9pZCBiZnFfaW5zZXJ0X3JlcXVlc3RzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI5My1cXHRcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MzAwLVxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJxLVxcdTAwM2VxdWV1ZWxpc3QpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjMwMTpcXHRcXHRiZnFfaW5zZXJ0X3JlcXVlc3QoaGN0eCwgcnEsIGZsYWdzKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYzMDItXFx0fVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz03NTkzPXN0YXRpYyBzdHJ1Y3QgZWxldmF0b3JfdHlwZSBpb3NjaGVkX2JmcV9tcSA9IHtcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzU5OS1cXHRcXHQuZXhpdF9pY3FcXHRcXHQ9IGJmcV9leGl0X2ljcSxcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjc2MDA6XFx0XFx0Lmluc2VydF9yZXF1ZXN0c1xcdD0gYmZxX2luc2VydF9yZXF1ZXN0cyxcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTc2MDEtXFx0XFx0LmRpc3BhdGNoX3JlcXVlc3RcXHQ9IGJmcV9kaXNwYXRjaF9yZXF1ZXN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNToyMi45NzMyNzgxMTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMDQzODA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBUYXJnZXRlZCBCbG9jayBJL08gVHJhY2luZyoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHNvbWUga2V5IGZ1bmN0aW9ucyBmb3IgdHJhY2luZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gaW5jbHVkZSBgYmZxX2luc2VydF9yZXF1ZXN0c2AsIGBibGtfbXFfc3RhcnRfcmVxdWVzdGAsIGFuZCBgYmxrX21xX3N1Ym1pdF9iaW9gLiBXYWl0IGEgbWludXRlLCBgYmxrX21xX3N1Ym1pdF9iaW9gIGlzIGp1c3QgKnRvbyogZ2VuZXJpYy4gVGhhdCdzIGEgaHVnZSBob3QgcGF0aCwgYW5kIGluY2x1ZGluZyBpdCB3b3VsZCBsaWtlbHkgdGhyb3cgb2ZmIGFueSBtZWFuaW5nZnVsIGRpc3RyaWJ1dGlvbiBhbmFseXNpcy4gXG5cblNvLCBJIG5lZWQgdG8gbmFycm93IHRoaXMgZG93biwgZXZlbiB0aG91Z2ggSSBkaWQgY29uc2lkZXIgYGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhgIGFuZCBgYmxrX21xX2FsbG9jX2NhY2hlZF9yZXF1ZXN0YC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXIgLSBhdm9pZCB0aG9zZSBnZW5lcmljLCBjb21tb24gZnVuY3Rpb25zIHRoYXQgd291bGQgc2tldyB0aGUgcmVzdWx0cy4gT2theSwgZm9jdXNpbmcgYWdhaW4sIGxldCdzIGxpc3QgYGJmcV9pbnNlcnRfcmVxdWVzdHNgLCBgaW9jX2F1dG9wX2lkeGAsIGFuZCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfYmxrZ2AuIFRob3NlIHNlZW0gc3BlY2lmaWMgZW5vdWdoIHRvIHByb3ZpZGUgZ29vZCBpbnNpZ2h0IHdpdGhvdXQgYmVpbmcgb3Zlcmx5IHViaXF1aXRvdXMuIEknbGwgZG91YmxlLWNoZWNrIGBpb2NfYXV0b3BfaWR4YCB0byBjb25maXJtIGl0cyBzdWl0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6MjcuMjgzNzE4ODU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzNDg1NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvY19hdXRvcF9pZHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWlvY29zdC5jPTc2NT1zdGF0aWMgdm9pZCBpb2NfcmVmcmVzaF9wZXJpb2RfdXMoc3RydWN0IGlvYyAqaW9jKVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTgwNi0gKi9cXG5ibG9jay9ibGstaW9jb3N0LmM6ODA3OnN0YXRpYyBpbnQgaW9jX2F1dG9wX2lkeChzdHJ1Y3QgaW9jICppb2MsIHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy04MDgte1xcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTkxMj1zdGF0aWMgYm9vbCBpb2NfcmVmcmVzaF9wYXJhbXNfZGlzayhzdHJ1Y3QgaW9jICppb2MsIGJvb2wgZm9yY2UsXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtOTE5LVxcbmJsb2NrL2Jsay1pb2Nvc3QuYzo5MjA6XFx0aWR4ID0gaW9jX2F1dG9wX2lkeChpb2MsIGRpc2spO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy05MjEtXFx0cCA9IFxcdTAwMjZhdXRvcFtpZHhdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzoyNToyOS4xODcyMTAzMTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwNjA0NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBTdGF0aWMgRGF0YSBTdHJ1Y3R1cmVzKipcblxuQWxyaWdodCwgc28gYGlvY19hdXRvcF9pZHhgIGlzIGRlZmluZWQgYXMgc3RhdGljLiBBbmQgSSdtIHNlZWluZyB0aGF0IGBpb2NfcmVmcmVzaF9wYXJhbXNfZGlza2AgaXMgYWxzbyBhIHN0YXRpYyBlbGVtZW50LiAgR2l2ZW4gdGhhdCBib3RoIGFyZSBzdGF0aWMsIHRoZXJlJ3MgbGlrZWx5IHNvbWUgaW1wb3J0YW50IGludGVyYWN0aW9uIG9yIHJlbGF0aW9uc2hpcCB0byBleHBsb3JlLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGBpb2NfcmVmcmVzaF9wYXJhbXNfZGlza2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0J3Mgc3RvcmluZywgaG93IGl0J3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBzdGF0aWMgbmF0dXJlIGhhcyBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6MzMuODkzMjU3OTc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUzMDk1NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvY19yZWZyZXNoX3BhcmFtc19kaXNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1pb2Nvc3QuYz04OTc9c3RhdGljIHZvaWQgaW9jX3JlZnJlc2hfbGNvZWZzKHN0cnVjdCBpb2MgKmlvYylcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy05MTEtICovXFxuYmxvY2svYmxrLWlvY29zdC5jOjkxMjpzdGF0aWMgYm9vbCBpb2NfcmVmcmVzaF9wYXJhbXNfZGlzayhzdHJ1Y3QgaW9jICppb2MsIGJvb2wgZm9yY2UsXFxuYmxvY2svYmxrLWlvY29zdC5jLTkxMy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmM9OTUxPXN0YXRpYyBib29sIGlvY19yZWZyZXNoX3BhcmFtcyhzdHJ1Y3QgaW9jICppb2MsIGJvb2wgZm9yY2UpXFxuYmxvY2svYmxrLWlvY29zdC5jLTk1Mi17XFxuYmxvY2svYmxrLWlvY29zdC5jOjk1MzpcXHRyZXR1cm4gaW9jX3JlZnJlc2hfcGFyYW1zX2Rpc2soaW9jLCBmb3JjZSwgaW9jLVxcdTAwM2VycW9zLmRpc2spO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy05NTQtfVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTI4OTE9c3RhdGljIGludCBibGtfaW9jb3N0X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtMjkyOS1cXHRpb2MtXFx1MDAzZWF1dG9wX2lkeCA9IEFVVE9QX0lOVkFMSUQ7XFxuYmxvY2svYmxrLWlvY29zdC5jOjI5MzA6XFx0aW9jX3JlZnJlc2hfcGFyYW1zX2Rpc2soaW9jLCB0cnVlLCBkaXNrKTtcXG5ibG9jay9ibGstaW9jb3N0LmMtMjkzMS1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjM1Ljg0NjM2MDIwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM2MDAyNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyBhYm91dCB0aGVtIGZyb20gYSBzeXN0ZW0tbGV2ZWwgcGVyc3BlY3RpdmUsIGxpa2UgSSBhbHdheXMgZG86XG5cbioqQ29uc2lkZXJpbmcgQmxvY2sgSS9PIENvc3QgYW5kIFRocm90dGxpbmcqKlxuXG5SaWdodCwgYGJsa19pb2Nvc3RfaW5pdGAgLSB0aGF0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZ2V0dGluZyBhIGhhbmRsZSBvbiBJL08gY29zdHMuIFdlIG5lZWQgYSB3YXkgdG8gdHJhY2sgdGhlIHJlc291cmNlcyB1c2VkIGJ5IGJsb2NrIGRldmljZXMgYW5kIGdyb3VwcyBmb3IgcHJvcGVyIGFjY291bnRpbmcgYW5kIGNvbnRyb2wuIFRoYXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYSByb2J1c3QgSS9PIHNjaGVkdWxlciBhbmQgY29udHJvbCBzeXN0ZW0uXG5cbk5vdywgbGV0J3Mgc2VlLCB3aGF0IGFib3V0IGBibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnYD8gVGhhdCdzIHRoZSBwYXJ0IHdoZXJlIHdlIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggdGhlIGNvc3QgaW5mb3JtYXRpb24sIGlzbid0IGl0PyBJdCBzb3VuZHMgbGlrZSB0aGUgZnVuY3Rpb24gdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGFueSB0aHJvdHRsaW5nIGxpbWl0cyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkLiBJdCdzIHRoZSBwb2ludCB3aGVyZSB3ZSBtYWtlIHRoZSBjcml0aWNhbCBkZWNpc2lvbiB0byBlaXRoZXIgYWxsb3cgYW4gSS9PIHJlcXVlc3QgdG8gZ28gdGhyb3VnaCBvciBhcHBseSB0aGUgYnJha2VzLCBiYXNlZCBvbiB0aGUgcmVzb3VyY2UgY29uc3VtcHRpb24gb2YgdGhlIGJsb2NrIGdyb3VwLiBJbnRlcmVzdGluZy4gSSB3b25kZXIgYWJvdXQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcy4gRG9lcyBpdCBhcHBseSBkZWxheXM/IFByaW9yaXRpemF0aW9uIHNoaWZ0cz8gT3IgbWF5YmUgZXZlbiByZXF1ZXN0IHJlamVjdGlvbiBpbiBleHRyZW1lIGNhc2VzPyBJdCBwcm9iYWJseSBkZXBlbmRzIG9uIGhvdyB0aGUgdGhyb3R0bGluZyBzeXN0ZW0gaXMgZGVzaWduZWQsIHRoZSBjb25zdHJhaW50cyBzZXQsIGFuZCB3aGF0J3MgYmVzdCBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgc3RhYmlsaXR5LiBEZWZpbml0ZWx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAyMSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjQwLjA4MjM2NjE1NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MjQxMzg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtjZ19tYXliZV90aHJvdHRsZV9ibGtnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz0xODg3PXN0YXRpYyB2b2lkIGJsa2NnX3NjYWxlX2RlbGF5KHN0cnVjdCBibGtjZ19ncSAqYmxrZywgdTY0IG5vdylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xOTQzLSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxOTQ0OnN0YXRpYyB2b2lkIGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2coc3RydWN0IGJsa2NnX2dxICpibGtnLCBib29sIHVzZV9tZW1kZWxheSlcXG5ibG9jay9ibGstY2dyb3VwLmMtMTk0NS17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MjAxMD12b2lkIGJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnQodm9pZClcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMDMzLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMDM0OlxcdGJsa2NnX21heWJlX3Rocm90dGxlX2Jsa2coYmxrZywgdXNlX21lbWRlbGF5KTtcXG5ibG9jay9ibGstY2dyb3VwLmMtMjAzNS1cXHRibGtnX3B1dChibGtnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6NDIuNDU0ODIwMjI4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Njc3MzA1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHNlZS4gYGJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnRgIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY2FuZGlkYXRlOyB0aGF0IGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gTm93LCBJIHNob3VsZCBtYWtlIGEgcXVpY2sgbGlzdCBvZiB3aGF0IEknbSBjb25zaWRlcmluZy4gYGJmcV9pbnNlcnRfcmVxdWVzdHNgLCBgYmxrX2lvY29zdF9pbml0YCwgYW5kLCBhcyBJIHNhaWQsIGBibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50YC4gV2FpdCBhIG1pbnV0ZSwgYGJsa190aW1lX2dldF9uc2AgaXMgdXNlZCB3aXRoaW4gYGJsa19tcV9zdGFydF9yZXF1ZXN0YCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgY2FsbGVkIGZvciAqZXZlcnkqIHNpbmdsZSByZXF1ZXN0LlxuXG5JZiBJIGRvbid0IGV4cGxpY2l0bHkgbGlzdCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgLCB0aGUgZnV6emVyIG1pZ2h0IG92ZXJsb29rIGl0LCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBpdCBmb2N1c2VzIHRoZXJlLiBCdXQsIG9uIHRoZSBvdGhlciBoYW5kLCBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgIGlzIGEgaG90IHBhdGggLSB0aGF0IGlzIGdvaW5nIHRvIGJlIHVzZWQgYSAqbG90Ki4gR2l2ZW4gdGhhdCBpdCdzIHRoZSBtb3N0IGRpcmVjdCBjYWxsZXIgb2YgdGhlIGNvZGUgSSdtIGludGVyZXN0ZWQgaW4sIEknbGwgbGlzdCBpdCBhbnl3YXkuXG5cbkhtbSwgd2FpdC4gSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2ggaGVyZS4gYGJsa190aW1lX2dldF9uc2AgaXMgYWxzbyB1c2VkIGluIGBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4YC4gT2theSwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4YCBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1ODAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6NDcuMjIyNTUzMjU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMzMjI1MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLW1xLmM9Njk4PUVYUE9SVF9TWU1CT0woYmxrX21xX2FsbG9jX3JlcXVlc3QpO1xcbmJsb2NrL2Jsay1tcS5jLTY5OS1cXG5ibG9jay9ibGstbXEuYzo3MDA6c3RydWN0IHJlcXVlc3QgKmJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuYmxvY2svYmxrLW1xLmMtNzAxLVxcdGJsa19vcGZfdCBvcGYsIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncywgdW5zaWduZWQgaW50IGhjdHhfaWR4KVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtNzc5LX1cXG5ibG9jay9ibGstbXEuYzo3ODA6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eCk7XFxuYmxvY2svYmxrLW1xLmMtNzgxLVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTExNjQ9aW50IF9fbnZtZV9zdWJtaXRfc3luY19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMTc4LVxcdGVsc2VcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTE3OTpcXHRcXHRyZXEgPSBibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4KHEsIG52bWVfcmVxX29wKGNtZCksIGJsa19mbGFncyxcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE4MC1cXHRcXHRcXHRcXHRcXHRcXHRxaWQgLSAxKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmg9NzY1PXN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYmxrX29wZl90IG9wZixcXG5pbmNsdWRlL2xpbnV4L2Jsay1tcS5oLTc2Ni1cXHRcXHRibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvYmxrLW1xLmg6NzY3OnN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdF9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmluY2x1ZGUvbGludXgvYmxrLW1xLmgtNzY4LVxcdFxcdGJsa19vcGZfdCBvcGYsIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjU6NDkuMTU1ODE3ODQ4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MjkwMTk2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQRl9CTE9DS19UUyBCdWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBgUEZfQkxPQ0tfVFNgIGJ1Zy4gTGV0IG1lIHN0YXJ0IGJ5IGxpc3RpbmcgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQsIGp1c3QgdG8gZ2V0IG15IGJlYXJpbmdzLiBJJ20gdGhpbmtpbmcgb2YgYGJsa19tcV9hbGxvY19yZXF1ZXN0X2hjdHhgLCBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudGAsIGFuZCBgYmZxX2luc2VydF9yZXF1ZXN0c2AuIFdhaXQgYSBzZWNvbmTigKYgdGhlIGJ1ZyBpcyBhY3R1YWxseSBhYm91dCBgUEZfQkxPQ0tfVFNgLiBSaWdodCwgdGhhdCBmbGFnLiBJIHJlbWVtYmVyIG5vdy5cblxuYFBGX0JMT0NLX1RTYCBnZXRzIHNldCBpbiBgYmxrX3RpbWVfZ2V0X25zYCB3aGVuIGBwbHVnLVx1MDAzZWN1cl9rdGltZWAgaXMgemVyby4gVGhhdCBtZWFucyBhIGJsb2NrIHBsdWcgaGFzIHRvIGJlIGFjdGl2ZS4gT2theSwgYmxvY2sgcGx1Z3PigKYgdGhvc2UgYXJlIHVzZWQgaW4gYGJsa19zdGFydF9wbHVnYCBhbmQgYGJsa19maW5pc2hfcGx1Z2AuIFRob3NlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgYmxvY2sgbGF5ZXIgZmVhdHVyZXMsIHNvIGl0J3MgYSBicm9hZCBhcmVhIHRvIGludmVzdGlnYXRlLlxuXG5BbHJpZ2h0LCBJJ2xsIGdvIGJhY2sgdG8gbGlzdGluZyB0aG9zZSBrZXkgZnVuY3Rpb25zOiBgYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eGAsIGBibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50YCwgYW5kIGBiZnFfaW5zZXJ0X3JlcXVlc3RzYC4gQW5kIEkgc2hvdWxkIGluY2x1ZGUgYGJsa19tcV9zdGFydF9yZXF1ZXN0YCBiZWNhdXNlIHRoYXQncyB3aGVyZSBgYmxrX3RpbWVfZ2V0X25zYCBpcyBtb3N0IGNvbW1vbmx5IGNhbGxlZC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBgYmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudGAgaXMgdGllZCB0byBgQ09ORklHX0JMS19DR1JPVVBgLiBgYmZxX2luc2VydF9yZXF1ZXN0c2AgbmVlZHMgYENPTkZJR19JT1NDSEVEX0JGUWAuIExldCdzIHRocm93IGluIGBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RgIGZvciBgYmxrX2lvY29zdF9pbml0YC4gU28sIG15IGZvY3VzIHNob3VsZCBiZSBvbiBgQ09ORklHX0JMS19DR1JPVVBgIGFuZCBgQ09ORklHX0lPU0NIRURfQkZRYC4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhvc2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTUwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjU0Ljk4NDgzOTcwNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MDgxOTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9TQ0hFRF9CRlFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkPTEwPWNvbmZpZyBNUV9JT1NDSEVEX0tZQkVSXFxuLS1cXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMTgtXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkOjE5OmNvbmZpZyBJT1NDSEVEX0JGUVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0yMC1cXHR0cmlzdGF0ZSBcXFwiQkZRIEkvTyBzY2hlZHVsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI1OjU3LjA1NTY2NDg4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIyNzkyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqS2VybmVsIEJsb2NrIExheWVyIEVuaGFuY2VtZW50cyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBJIG5lZWQgdG8gb3V0bGluZSBteSBwbGFuIGZvciBpbXByb3ZpbmcgdGhlIGJsb2NrIGxheWVyLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbSB0aGlua2luZyBJJ2xsIGludGVncmF0ZSBgSU9TQ0hFRF9CRlFgLiBUaGF0J3MgY3J1Y2lhbC4gQkZRIG9mZmVycyBhIG11Y2ggbW9yZSByZWZpbmVkIGFwcHJvYWNoIHRvIEkvTyBzY2hlZHVsaW5nLCBhbmQgcmVhbGx5IGhlbHBzIHdpdGggcmVzcG9uc2l2ZW5lc3MgaW4gY29uZ2VzdGVkIHNpdHVhdGlvbnMuIEdvb2QgY2FuZGlkYXRlIGZvciB0aGUgbmV3IHNldHVwLiBUaGVuLCB0byBtYWtlIHN1cmUgdGhpcyBhbGwgcGxheXMgbmljZWx5IEknbGwgaW50ZWdyYXRlIGBCTEtfQ0dST1VQYC4gTm8gcXVlc3Rpb24sIGNvbnRyb2wgZ3JvdXBzIGFyZSBlc3NlbnRpYWwgZm9yIG1hbmFnaW5nIHJlc291cmNlIGFsbG9jYXRpb24sIGlzb2xhdGlvbiwgYW5kLCB5b3Uga25vdywgZmFpcm5lc3MgYWNyb3NzIGRpZmZlcmVudCB3b3JrbG9hZHMuIFdlICpuZWVkKiB0aGlzIGluIHBsYWNlLiBGaW5hbGx5LCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBmb2xkIGluIGBCTEtfQ0dST1VQX0lPQ09TVGAuIFRoaXMgaXMgdGhlIGdsdWU7IGl0IGFsbG93cyBtZSB0byBwcm9wZXJseSBsZXZlcmFnZSBhbmQgYWNjb3VudCBmb3IgdGhlIEkvTyBjb3N0cyBvZiBlYWNoIGNvbnRyb2wgZ3JvdXAsIHByb3ZpZGluZyBhIG11Y2ggbW9yZSBhY2N1cmF0ZSBwaWN0dXJlIGZvciBwb2xpY3kgZGVjaXNpb25zIGFuZCBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4gR290IGl0LiBUaGlzIGNvbWJpbmF0aW9uIGdpdmVzIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM1MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI2OjAwLjk3ODQ2MTAxNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5Njg0NDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxcbi0tXFxuYmxvY2svS2NvbmZpZy00MS1cXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxcbmJsb2NrL0tjb25maWctNDMtXFx0Ym9vbFxcbmJsb2NrL0tjb25maWctNDQtXFxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xcbmJsb2NrL0tjb25maWctNDYtXFx0Ym9vbFxcbi0tXFxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcXG4tLVxcbmJsb2NrL0tjb25maWctMTMzLVxcbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxcbmJsb2NrL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNDQtXFxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcXG5ibG9jay9LY29uZmlnLTE0Ni1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1xcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTUzLVxcbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxcbmJsb2NrL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNjMtXFxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXFxuYmxvY2svS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiQ2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnPTEwODU9Y29uZmlnIE1FTUNHX1YxXFxuLS1cXG5pbml0L0tjb25maWctMTEwMS1cXG5pbml0L0tjb25maWc6MTEwMjpjb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTAzLVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjI2OjAzLjA3NTMxMjYwMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDk2MjYzOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgQmxvY2sgTGF5ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGFkZHJlc3NpbmcgYSBzdWJ0bGUsIHlldCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIGNvbmN1cnJlbmN5IGlzc3VlIGluIHRoZSBibG9jayBsYXllcidzIHRpbWVzdGFtcGluZyBtZWNoYW5pc20uIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgSU9TQ0hFRF9CRlFgLCBgQkxLX0NHUk9VUGAsIGFuZCBgQkxLX0NHUk9VUF9JT0NPU1RgLCB3aGljaCBpbmRpY2F0ZXMgdGhpcyBpcyBwb3RlbnRpYWxseSB0b3VjaGluZyBvbiBJL08gc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhcyB0aG9zZSBhcmUgYXJlYXMgSSd2ZSBzcGVudCBhIGdvb2QgZGVhbCBvZiB0aW1lIHN0dWR5aW5nLlxuXG5UaGUgY29yZSBvZiB0aGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBzZWVtcyB0byBiZSBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiBgYmxrX3RpbWVfZ2V0X25zYC4gU3BlY2lmaWNhbGx5LCBgY3VyX2t0aW1lYCBjYW4gYmUgemVyb2VkIG91dCBieSBwcmVlbXB0aW9uLiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBwcm9ibGVtLCBhbmQgemVyb2luZyBvdXQgdGhhdCB0aW1lIGNhbiBjYXVzZSBpbmNvcnJlY3QgdGltZXN0YW1wcywgd2hpY2ggaXMgYmFkIG5ld3MgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBzY2hlZHVsaW5nIGRlY2lzaW9ucywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gY29ycmVjdG5lc3MgaWYgdGhlIHRpbWVzdGFtcHMgYXJlIHVzZWQgZm9yIGFjY291bnRpbmcuXG5cbkknbSBrZXlpbmcgaW4gb24gdGhlc2Ugc3ltYm9scyBhcyBpbmRpY2F0b3JzIG9mIHRoZSBwYXRjaCdzIGNvcmUgZnVuY3Rpb25zOiBgYmxrX21xX3N0YXJ0X3JlcXVlc3RgLCBgYmZxX2luc2VydF9yZXF1ZXN0c2AsIGBibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50YCwgYW5kIGBibGtfaW9jb3N0X2luaXRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiBpbml0aWF0aW5nIGJsb2NrIHJlcXVlc3RzLCBpbnNlcnRpbmcgdGhlbSBpbnRvIHRoZSBCRlEgc2NoZWR1bGVyLCBwb3RlbnRpYWxseSB0aHJvdHRsaW5nIEkvTyBiYXNlZCBvbiBjZ3JvdXAgY29uc3RyYWludHMsIGFuZCBpbml0aWFsaXppbmcgSS9PIGNvc3QgYWNjb3VudGluZy4gTXkgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGUgcmFjZSBjb25kaXRpb24sIGlmIHRyaWdnZXJlZCwgY291bGQgY29ycnVwdCB0aGUgdGltaW5nIGRhdGEgdXNlZCBpbiB0aGVzZSBvcGVyYXRpb25zLCBsZWFkaW5nIHRvIGluYWNjdXJhdGUgcGVyZm9ybWFuY2UgbWV0cmljcyBhbmQgcG90ZW50aWFsbHkgZmxhd2VkIHNjaGVkdWxpbmcgZGVjaXNpb25zIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuXG5cblVsdGltYXRlbHksIHRoaXMgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uYWxseSBpbXBvcnRhbnQgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIGFmZmVjdGluZyB0aW1lc3RhbXBpbmcgb2YgYmxvY2sgcmVxdWVzdHMuIFRoZSBuZWVkIGZvciBhIGZpeCB3aXRoaW4gYGJsa190aW1lX2dldF9uc2Agd291bGQgc3VnZ2VzdCBpdCBpcyBhIGNvcmUgZmVhdHVyZSB0aGF0IGhhcyB0byBiZSBmaXhlZC4gSXTigJlzIGEgZGVmaW5pdGUgXCJzZXQtcmVzdWx0c1wiIHNpdHVhdGlvbiwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiB0aGUgaW1wYWN0cyB0aGlzIGNhbiBoYXZlIG9uIG15IGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA2NCwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6MjY6MDguNTcxNTc5MTU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxNzA1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa19tcV9zdGFydF9yZXF1ZXN0XCIsXG4gICAgXCJiZnFfaW5zZXJ0X3JlcXVlc3RzXCIsXG4gICAgXCJibGtjZ19tYXliZV90aHJvdHRsZV9jdXJyZW50XCIsXG4gICAgXCJibGtfaW9jb3N0X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBibGtfdGltZV9nZXRfbnNgIHdoZXJlIGBjdXJfa3RpbWVgIGNvdWxkIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGxheWVyIHRoYXQgYWZmZWN0cyB0aW1lc3RhbXBpbmcgb2YgYmxvY2sgcmVxdWVzdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9TQ0hFRF9CRlFcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX21xX3N0YXJ0X3JlcXVlc3RcIixcbiAgICBcImJmcV9pbnNlcnRfcmVxdWVzdHNcIixcbiAgICBcImJsa2NnX21heWJlX3Rocm90dGxlX2N1cnJlbnRcIixcbiAgICBcImJsa19pb2Nvc3RfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGJsa190aW1lX2dldF9uc2Agd2hlcmUgYGN1cl9rdGltZWAgY291bGQgYmUgemVyb2VkIGJ5IHByZS1lbXB0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIgdGhhdCBhZmZlY3RzIHRpbWVzdGFtcGluZyBvZiBibG9jayByZXF1ZXN0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowk8l6s[1] Phase: Succeeded StartedAt: 2026-07-16 03:26:20 +0000 UTC FinishedAt: 2026-07-16 03:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 03:26:20 +0000 UTC FinishedAt: 2026-07-16 03:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2] Phase: Succeeded StartedAt: 2026-07-16 03:26:20 +0000 UTC FinishedAt: 2026-07-16 07:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 03:26:20 +0000 UTC FinishedAt: 2026-07-16 07:43:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 03:26:20 +0000 UTC FinishedAt: 2026-07-16 03:26:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 03:26:20 +0000 UTC FinishedAt: 2026-07-16 03:26:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowk8l6s/series-workflowk8l6s-convert-artifact-2594173853/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 03:26:30 +0000 UTC FinishedAt: 2026-07-16 04:02:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 03:26:30 +0000 UTC FinishedAt: 2026-07-16 04:02:46 +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:*df5e81c9-8b6c-47b3-95db-12e965e27d7d,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-workflowk8l6s/series-workflowk8l6s-convert-artifact-2594173853/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": "d9e400d8-14aa-4537-866d-e4d63fd8e0e8", "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-workflowk8l6s/series-workflowk8l6s-build-action-2605999315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 03:26:30 +0000 UTC FinishedAt: 2026-07-16 04:02:31 +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:*df5e81c9-8b6c-47b3-95db-12e965e27d7d,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-workflowk8l6s/series-workflowk8l6s-convert-artifact-2594173853/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": "d9e400d8-14aa-4537-866d-e4d63fd8e0e8", "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-workflowk8l6s/series-workflowk8l6s-build-action-2605999315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 04:02:46 +0000 UTC FinishedAt: 2026-07-16 04:02:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 04:02:46 +0000 UTC FinishedAt: 2026-07-16 04:02:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 04:02:46 +0000 UTC FinishedAt: 2026-07-16 04:02:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 04:02:46 +0000 UTC FinishedAt: 2026-07-16 04:02:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowk8l6s/series-workflowk8l6s-convert-artifact-1390443128/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 04:02:56 +0000 UTC FinishedAt: 2026-07-16 04:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 04:02:56 +0000 UTC FinishedAt: 2026-07-16 04:05:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d9e400d8-14aa-4537-866d-e4d63fd8e0e8,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-workflowk8l6s/series-workflowk8l6s-build-action-2605999315/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-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 04:05:10 +0000 UTC FinishedAt: 2026-07-16 04:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 04:05:10 +0000 UTC FinishedAt: 2026-07-16 04:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 04:05:10 +0000 UTC FinishedAt: 2026-07-16 04:38:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 04:05:10 +0000 UTC FinishedAt: 2026-07-16 04:38:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*df5e81c9-8b6c-47b3-95db-12e965e27d7d,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-workflowk8l6s/series-workflowk8l6s-convert-artifact-1390443128/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": "fc0e1547-2ae4-4d56-b79f-b9705e9b643e", "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-workflowk8l6s/series-workflowk8l6s-build-action-3700039524/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 04:05:10 +0000 UTC FinishedAt: 2026-07-16 04:38:49 +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:*df5e81c9-8b6c-47b3-95db-12e965e27d7d,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-workflowk8l6s/series-workflowk8l6s-convert-artifact-1390443128/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": "fc0e1547-2ae4-4d56-b79f-b9705e9b643e", "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-workflowk8l6s/series-workflowk8l6s-build-action-3700039524/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 04:38:59 +0000 UTC FinishedAt: 2026-07-16 04:38:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 04:38:59 +0000 UTC FinishedAt: 2026-07-16 04:38:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 04:38:59 +0000 UTC FinishedAt: 2026-07-16 04:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 04:38:59 +0000 UTC FinishedAt: 2026-07-16 04:40:49 +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:*fc0e1547-2ae4-4d56-b79f-b9705e9b643e,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-workflowk8l6s/series-workflowk8l6s-build-action-3700039524/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-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 04:40:59 +0000 UTC FinishedAt: 2026-07-16 07:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 04:40:59 +0000 UTC FinishedAt: 2026-07-16 07:43:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*d9e400d8-14aa-4537-866d-e4d63fd8e0e8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc0e1547-2ae4-4d56-b79f-b9705e9b643e,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-workflowk8l6s/series-workflowk8l6s-build-action-2605999315/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-workflowk8l6s/series-workflowk8l6s-build-action-3700039524/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 04:40:59 +0000 UTC FinishedAt: 2026-07-16 04:41:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 04:40:59 +0000 UTC FinishedAt: 2026-07-16 04:41:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowk8l6s/series-workflowk8l6s-convert-artifact-2776794065/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 04:40:59 +0000 UTC FinishedAt: 2026-07-16 04:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 04:40:59 +0000 UTC FinishedAt: 2026-07-16 04:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 04:40:59 +0000 UTC FinishedAt: 2026-07-16 04:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 04:41:19 +0000 UTC FinishedAt: 2026-07-16 07:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8l6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blk_mq_start_request","bfq_insert_requests","blkcg_maybe_throttle_current","blk_iocost_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["IOSCHED_BFQ","BLK_CGROUP","BLK_CGROUP_IOCOST"],"series_id":"ac9d6b1a-cb75-4a33-b16e-bd5962a4336e","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 04:41:19 +0000 UTC FinishedAt: 2026-07-16 07:43:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d9e400d8-14aa-4537-866d-e4d63fd8e0e8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc0e1547-2ae4-4d56-b79f-b9705e9b643e,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-workflowk8l6s/series-workflowk8l6s-build-action-2605999315/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-workflowk8l6s/series-workflowk8l6s-build-action-3700039524/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-workflowk8l6s/series-workflowk8l6s-convert-artifact-2776794065/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,}