Name: series-workflowvfd2r Phase: Succeeded StartedAt: 2026-08-14 08:22:45 +0000 UTC FinishedAt: 2026-08-14 10:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[0] Phase: Succeeded StartedAt: 2026-08-14 08:22:45 +0000 UTC FinishedAt: 2026-08-14 08:44:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 08:22:45 +0000 UTC FinishedAt: 2026-08-14 08:44:07 +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": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH6KL", "ATH6KL_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH6KL", "ATH6KL_USB" ], "series_id": "af9a9ead-76e2-438f-b2b1-067c58420de7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath6kl_usb_probe", "ath6kl_cfg80211_join_ibss", "ath6kl_start_ap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDZLTCYjMzQ7LAogICAgJiMzNDtBVEg2S0xfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoNmtsX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDthdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzJiMzNDssCiAgICAmIzM0O2F0aDZrbF9zdGFydF9hcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBhci1cdTAwM2Vub2RlX251bWAgKGEgYHU4YCkgd291bGQgY29udGludWUgdG8gaW5jcmVtZW50IGV2ZW4gYWZ0ZXIgcmVhY2hpbmcgYE1BWF9OT0RFX05VTWAsIGV2ZW50dWFsbHkgd3JhcHBpbmcgYXJvdW5kIHRvIDAgYW5kIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIGBub2RlX21hcGAgYXJyYXkuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgb2YgdGhpcyBuYXR1cmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgd2hlbiBgYXItXHUwMDNlbm9kZV9udW1gIHJlYWNoZXMgYE1BWF9OT0RFX05VTWAuIFRoZSBidWcgaXMgcmVhY2hhYmxlIGluIEFQIG9yIEFkLUhvYyAoSUJTUykgbW9kZSB3aGVuIHNlbmRpbmcgcGFja2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgyYTI4ZDE5MTZjYjE3ZGVkMTAyZTgxYmVhNTIxZDA5M2UwMzZlMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MToxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXG5pbmRleCBkODE4MjU0MTM5MDYxLi5iMzQwYzc5NWI3YTMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXG5AQCAtNjcsMTAgJiM0Mzs2Nyw5IEBAIHN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGVwX21hcCA9PSAtMSkge1xuLVx0XHRlcF9tYXAgPSBhci1cdTAwM2Vub2RlX251bTtcbi1cdFx0YXItXHUwMDNlbm9kZV9udW0mIzQzOyYjNDM7O1xuLVx0XHRpZiAoYXItXHUwMDNlbm9kZV9udW0gXHUwMDNlIE1BWF9OT0RFX05VTSlcbiYjNDM7XHRcdGlmIChhci1cdTAwM2Vub2RlX251bSBcdTAwM2U9IE1BWF9OT0RFX05VTSlcbiBcdFx0XHRyZXR1cm4gRU5EUE9JTlRfVU5VU0VEO1xuJiM0MztcdFx0ZXBfbWFwID0gYXItXHUwMDNlbm9kZV9udW0mIzQzOyYjNDM7O1xuIFx0fVxuIFxuIFx0bWVtY3B5KGFyLVx1MDAzZW5vZGVfbWFwW2VwX21hcF0ubWFjX2FkZHIsIGV0aF9oZHItXHUwMDNlaF9kZXN0LCBFVEhfQUxFTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDZLTCYjMzQ7LAogICAgJiMzNDtBVEg2S0xfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoNmtsX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDthdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzJiMzNDssCiAgICAmIzM0O2F0aDZrbF9zdGFydF9hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBpbiBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIHdoZW4gYGFyLVx1MDAzZW5vZGVfbnVtYCByZWFjaGVzIGBNQVhfTk9ERV9OVU1gLiBUaGUgYnVnIGlzIHJlYWNoYWJsZSBpbiBBUCBvciBBZC1Ib2MgKElCU1MpIG1vZGUgd2hlbiBzZW5kaW5nIHBhY2tldHMuIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGFuZCBjYW4gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MmEyOGQxOTE2Y2IxN2RlZDEwMmU4MWJlYTUyMWQwOTNlMDM2ZTI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDg6NDE6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCmluZGV4IGQ4MTgyNTQxMzkwNjEuLmIzNDBjNzk1YjdhMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCkBAIC02NywxMCAmIzQzOzY3LDkgQEAgc3RhdGljIHU4IGF0aDZrbF9pYnNzX21hcF9lcGlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfQogCiAJaWYgKGVwX21hcCA9PSAtMSkgewotCQllcF9tYXAgPSBhci0mZ3Q7bm9kZV9udW07Ci0JCWFyLSZndDtub2RlX251bSYjNDM7JiM0Mzs7Ci0JCWlmIChhci0mZ3Q7bm9kZV9udW0gJmd0OyBNQVhfTk9ERV9OVU0pCiYjNDM7CQlpZiAoYXItJmd0O25vZGVfbnVtICZndDs9IE1BWF9OT0RFX05VTSkKIAkJCXJldHVybiBFTkRQT0lOVF9VTlVTRUQ7CiYjNDM7CQllcF9tYXAgPSBhci0mZ3Q7bm9kZV9udW0mIzQzOyYjNDM7OwogCX0KIAogCW1lbWNweShhci0mZ3Q7bm9kZV9tYXBbZXBfbWFwXS5tYWNfYWRkciwgZXRoX2hkci0mZ3Q7aF9kZXN0LCBFVEhfQUxFTik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzMKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBGaXggaW4gYXRoNmtsJiMzOTtzIElCU1MgTWFwcGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGZ1bmN0aW9uLiBUaGUgY29kZSBjaGFuZ2UgaXMgYSBtaW5vciBvbmUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGNyaXRpY2FsIGZpeC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcHJldmVudGluZyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBieSBjaGVja2luZyBpZiBgYXItJmd0O25vZGVfbnVtYCBpcyAqYWxyZWFkeSogYXQgYE1BWF9OT0RFX05VTWAgYmVmb3JlIGFzc2lnbmluZyBpdCwgaW5zdGVhZCBvZiBhc3NpZ25pbmcgYW5kIHRoZW4gY2hlY2tpbmcsIGFuZCBwb3RlbnRpYWxseSB3cmFwcGluZy4gSSBzdXNwZWN0IGl0IHdhcyBjYXVzaW5nIGEgY3Jhc2ggb3IgZGF0YSBjb3JydXB0aW9uIHdoZW4gdGhlIG5vZGUgY291bnQgaGl0cyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLCB3aGljaCB3b3VsZCBiZSBiYWQuCgpIbW0sIHRoaXMgaXMgZm9yIHRoZSBgYXRoNmtsYCBkcml2ZXIuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBBdGhlcm9zIEFSNjAwMyBhbmQgQVI2MDA0IFdpLUZpIGNoaXBzZXRzLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIG5vdyBpcywgY2FuIEkgYWN0dWFsbHkgKnRlc3QqIHRoaXMgZWZmZWN0aXZlbHk/IEhhcmR3YXJlIGRyaXZlcnMgbGlrZSB0aGlzIGFyZSBvZnRlbiBhIHBhaW4gdG8gZGVidWcgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJcyB0aGVyZSBhIHdheSB0byBkbyB0aGlzIGluIFFFTVUsIG9yIHdpbGwgSSBuZWVkIHBoeXNpY2FsIEFSNjAwMy9BUjYwMDQgaGFyZHdhcmU/IE1vc3Qgb2YgdGhlIHRpbWUsIEkmIzM5O2QgbmVlZCBTRElPIG9yIFVTQi4KCldhaXQgYSBzZWNvbmTigKYgSSB0aGluayBgYXRoNmtsYCAqZG9lcyogaGF2ZSBhIFVTQiBkcml2ZXIhIFllcCwgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmNgLiBUaGF04oCZcyBnb29kIG5ld3MhIElmIGl0JiMzOTtzIGdvdCBhIFVTQiBpbXBsZW1lbnRhdGlvbiwgdGhhdCBtZWFucyBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgKHNwZWNpZmljYWxseSB0aGUgYGR1bW15X2hjZGAgc3VwcG9ydCkgbWlnaHQgYmUgYXBwbGljYWJsZSBoZXJlLiBUaGF0JiMzOTtzIGEgaHVnZSB3aW4g4oCTIGl0IGNvdWxkIG1ha2UgdGVzdGluZyB0aGlzIHBhdGNoIHNpZ25pZmljYW50bHkgZWFzaWVyLCBhbmQgbW9yZSBzY2FsYWJsZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIFVTQiBwYXRoIGlzIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSBlbXVsYXRlZCwgYnV0IHRoaXMgaXMgYSBwcm9taXNpbmcgbGVhZC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgVVNCIGFzcGVjdCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9pYnNzX21hcF9lcGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM9Mzc9c3RhdGljIGlubGluZSB1OCBhdGg2a2xfZ2V0X2FpZCh1OCB0aWRfbXV4KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6NDI6c3RhdGljIHU4IGF0aDZrbF9pYnNzX21hcF9lcGlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy00My1cdFx0XHQgICAgICAgdTMyICptYXBfbm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM9MzU1PW5ldGRldl90eF90IGF0aDZrbF9kYXRhX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDU0LVx0aWYgKGNoa19hZGhvY19wc19tYXBwaW5nKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6NDU1Olx0XHRlaWQgPSBhdGg2a2xfaWJzc19tYXBfZXBpZChza2IsIGRldiwgXHUwMDI2bWFwX25vKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQ1Ni1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgRnVuY3Rpb24qKgoKT2theSwgc28gYGF0aDZrbF9pYnNzX21hcF9lcGlkYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYGF0aDZrbF9kYXRhX3R4YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBgYXRoNmtsX2RhdGFfdHhgIGlzIHRoZSBuZXR3b3JrIGRyaXZlciYjMzk7cyBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uIOKAkyB0aGUgY29yZSB0cmFuc21pdCBwYXRoLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBwaWVjaW5nIHRoaW5ncyB0b2dldGhlci4gVGhpcyBtZWFucyBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBtYXBwaW5nIG9yIHByZXBhcmluZyBkYXRhIGZvciB0cmFuc21pc3Npb24uCgpTaW5jZSB0aGlzIHNlZW1zIHRvIGJlIGEga2V5IGVsZW1lbnQgaW4gdGhlIGRhdGEgdHJhbnNtaXNzaW9uIHByb2Nlc3MsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBvZiBgYXRoNmtsYC4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBpcyB0aGlzIGEgVVNCIGRyaXZlcj8gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGdyZWF0bHkgaW5mbHVlbmNlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwsIGJlY2F1c2UgVVNCIGhhcyBwYXJ0aWN1bGFyIHJlcXVpcmVtZW50cyBhbmQgY29uc3RyYWludHMuIElmIGl0ICppcyogVVNCLCB0aGF0IHJhaXNlcyBzcGVjaWZpYyBxdWVzdGlvbnMgYWJvdXQgdGhlIGRhdGEgZnJhbWluZywgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgaW52b2x2ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZ3JlYXRseSBpbmZvcm1zIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3VzYl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jPTEyMjU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0aDZrbF91c2JfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmMtMTIzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM6MTIzNjptb2R1bGVfdXNiX2RyaXZlcihhdGg2a2xfdXNiX2RyaXZlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jLTEyMzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGF0aDZrbCBEcml2ZXIqKgoKT2theSwgc28gYGF0aDZrbGAgKmRvZXMqIGhhdmUgYSBVU0IgZHJpdmVyLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIG9wZW5zIGl0IHVwIHRvIHRoZSBmdWxsIHN1aXRlIG9mIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgZ29vZCBuZXdzLCBhIGRlZmluaXRlIGF2ZW51ZSB0byBleHBsb3JlIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgdGFyZ2V0aW5nIGl0cyBkYXRhIHRyYW5zbWlzc2lvbiBwYXRoLiBUaGUgZnVuY3Rpb24gYGF0aDZrbF9kYXRhX3R4YCBqdW1wcyBvdXQgYXMgdGhlIG9idmlvdXMgY2FuZGlkYXRlIGZvciBpbnRlbnNpdmUgZnV6emluZyBlZmZvcnRzLiBUaGF0IGZ1bmN0aW9uIGlzIHdoZXJlIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG15IGluaXRpYWwgYXR0ZW1wdHMuIE5vdywgbGV0JiMzOTtzIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIGZvciBgYXRoNmtsYCwgc28gSSBjYW4gc2VlIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCB0byBlbnN1cmluZyBteSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVRINktMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjI6Y29uZmlnIEFUSDZLTFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIG1vYmlsZSBjaGlwc2V0cyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTEzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjE0OmNvbmZpZyBBVEg2S0xfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBhdGg2a2wgU0RJTyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTI0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjI1OmNvbmZpZyBBVEg2S0xfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIGF0aDZrbCBVU0Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0zNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZzozNTpjb25maWcgQVRINktMX0RFQlVHXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctMzYtXHRib29sIFwmIzM0O0F0aGVyb3MgYXRoNmtsIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy00NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZzo0NTpjb25maWcgQVRINktMX1RSQUNJTkdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg2a2wgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTU2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjU3OmNvbmZpZyBBVEg2S0xfUkVHRE9NQUlOXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctNTgtXHRib29sIFwmIzM0O0F0aGVyb3MgYXRoNmtsIHJlZ2RvbWFpbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyB0aGUgQVRINktMIE1vZHVsZXMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgQVRINktMYCBhbmQgYEFUSDZLTF9VU0JgIGFyZSBhdmFpbGFibGUuIEJlZm9yZSBJIHN0YXJ0IGRvd24gdGhhdCBwYXRoIHRob3VnaCwgSSBzaG91bGQgYWx3YXlzIGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnYCBhbmQgdGFrZSBhIGxvb2suIFRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgdG8gY29uZmlybSBleGFjdGx5IHdoaWNoIG90aGVyIG9wdGlvbnMgYXJlIHJlcXVpcmVkIG9yIG1pZ2h0IGluZmx1ZW5jZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZXNlIHNwZWNpZmljIG1vZHVsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgY29uZGl0aW9ucywgbm90IGp1c3QgdGhlIG9idmlvdXMgb25lcy4gQSB0aG9yb3VnaCBLY29uZmlnIGluc3BlY3Rpb24gaXMgY3JpdGljYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiAgIDI6XHRjb25maWcgQVRINktMXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIG1vYmlsZSBjaGlwc2V0cyBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgY29yZSBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvblxuICAgNzpcdFx0ICBBdGhlcm9zIEFSNjAwMyBhbmQgQVI2MDA0IGNoaXBzZXRzLiBZb3Ugc3RpbGwgbmVlZCBzZXBhcmF0ZVxuICAgODpcdFx0ICBidXMgZHJpdmVycyBmb3IgVVNCIGFuZCBTRElPIHRvIGJlIGFibGUgdG8gdXNlIHJlYWwgZGV2aWNlcy5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcbiAgMTE6XHRcdCAgYXRoNmtsX2NvcmUuIFBsZWFzZSBub3RlIHRoYXQgQVI2MDAyIGFuZCBBUjYwMDEgYXJlIG5vdFxuICAxMjpcdFx0ICBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIEFUSDZLTF9TRElPXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIGF0aDZrbCBTRElPIHN1cHBvcnRcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQVRINktMXG4gIDE3Olx0XHRkZXBlbmRzIG9uIE1NQ1xuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uXG4gIDIwOlx0XHQgIEF0aGVyb3MgQVI2MDAzIGFuZCBBUjYwMDQgY2hpcHNldHMgcnVubmluZyBvdmVyIFNESU8uIElmIHlvdVxuICAyMTpcdFx0ICBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIGF0aDZrbF9zZGlvLlxuICAyMjpcdFx0ICBQbGVhc2Ugbm90ZSB0aGF0IEFSNjAwMiBhbmQgQVI2MDAxIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXNcbiAgMjM6XHRcdCAgZHJpdmVyLlxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBBVEg2S0xfVVNCXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIGF0aDZrbCBVU0Igc3VwcG9ydFwmIzM0O1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBBVEg2S0xcbiAgMjg6XHRcdGRlcGVuZHMgb24gVVNCXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb25cbiAgMzE6XHRcdCAgQXRoZXJvcyBBUjYwMDQgY2hpcHNldCBhbmQgY2hpcHNldHMgYmFzZWQgb24gaXQgcnVubmluZyBvdmVyXG4gIDMyOlx0XHQgIFVTQi4gSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZVxuICAzMzpcdFx0ICBjYWxsZWQgYXRoNmtsX3VzYi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgQVRINktMX0RFQlVHXG4gIDM2Olx0XHRib29sIFwmIzM0O0F0aGVyb3MgYXRoNmtsIGRlYnVnZ2luZ1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBBVEg2S0xcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlcyBhdGg2a2wgZGVidWcgc3VwcG9ydCwgaW5jbHVkaW5nIGRlYnVnIG1lc3NhZ2VzXG4gIDQwOlx0XHQgIGVuYWJsZWQgd2l0aCBkZWJ1Z19tYXNrIG1vZHVsZSBwYXJhbWV0ZXIgYW5kIGRlYnVnZnNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgV2lyZWxlc3MgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIHRoZSBjb3JlIGNvbXBvbmVudHM6IGBBVEg2S0xgLCBgQVRINktMX1VTQmAsIGBDRkc4MDIxMWAsIGFuZCwgb2J2aW91c2x5LCB0aGUgYFVTQmAgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgY29ubmVjdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWxsIHByZXNlbnQgYW5kIGFjY291bnRlZCBmb3IuIEhvbGQgb24sIHRob3VnaC4uLiB0aGlua2luZyBhYm91dCBpdCwgYE1BQzgwMjExYCBpc24mIzM5O3QgKnN0cmljdGx5KiByZXF1aXJlZCBpbiB0aGUgc2FtZSB3YXksIGJ1dCBgQ0ZHODAyMTFgIGRlZmluaXRlbHkgaXMuIEl0JiMzOTtzIHRoZSBjb25maWd1cmF0aW9uIGxheWVyLCBhbmQgSSYjMzk7ZCBiZSBzdW5rIHdpdGhvdXQgaXQuCgpOb3csIGEga2V5IHF1ZXN0aW9uOiBjYW4gSSB0cmFjZSB0aGUgZGF0YSB0cmFuc21pc3Npb24gcGF0aD8gU3BlY2lmaWNhbGx5LCBpcyBgYXRoNmtsX2RhdGFfdHhgIHJlYWNoYWJsZT8gQWgsIHllcywgb2YgY291cnNlISBUaGF0JiMzOTtzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uIGZvciB0aGUgbmV0X2RldmljZS4gVGhhdCYjMzk7cyB0aGUgZ2F0ZXdheSBmb3IgZGF0YSBsZWF2aW5nIHRoZSBzeXN0ZW0uCgpMZXQmIzM5O3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSYjMzk7bGwgY2hlY2sgYGF0aDZrbF9pYnNzX21hcF9lcGlkYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgYXRoNmtsX2RhdGFfdHhgLCBzbyB0aGF0JiMzOTtzIGEgY3J1Y2lhbCBsaW5rIGluIHRoZSBjaGFpbi4KCkZpbmFsbHksIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhdGg2a2xfZGF0YV90eGAgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jYCB0byBzZWUgaG93IGl0IHdvcmtzIHVuZGVyIHRoZSBob29kLiBJdCYjMzk7cyB0aW1lIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBmbG93IGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjb25uZWN0ZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGg2a2xfZGF0YV90eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oPTkxNj12b2lkIGF0aDZrbF9mcmVlX2Nvb2tpZShzdHJ1Y3QgYXRoNmtsICphciwgc3RydWN0IGF0aDZrbF9jb29raWUgKmNvb2tpZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaDo5MTc6bmV0ZGV2X3R4X3QgYXRoNmtsX2RhdGFfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaC05MTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM9ODY4PXZvaWQgYXRoNmtsX3BzcG9sbF9ldmVudChzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmLCB1OCBhaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmMtOTExLVx0XHRjb25uLVx1MDAzZXN0YV9mbGFncyB8PSBTVEFfUFNfUE9MTEVEO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM6OTEyOlx0XHRhdGg2a2xfZGF0YV90eChza2IsIHZpZi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTkxMy1cdFx0Y29ubi1cdTAwM2VzdGFfZmxhZ3MgXHUwMDI2PSB+U1RBX1BTX1BPTExFRDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYz05MjQ9dm9pZCBhdGg2a2xfZHRpbWV4cGlyeV9ldmVudChzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTk1NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jOjk1NjpcdFx0YXRoNmtsX2RhdGFfdHgoc2tiLCB2aWYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYy05NTctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM9MTI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF0aDZrbF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTEyODUtXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IGF0aDZrbF9jbG9zZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jOjEyODY6XHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IGF0aDZrbF9kYXRhX3R4LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmMtMTI4Ny1cdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gYXRoNmtsX3NldF9mZWF0dXJlcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz0yODU9aW50IGF0aDZrbF9jb250cm9sX3R4KHZvaWQgKmRldnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMzU0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MzU1Om5ldGRldl90eF90IGF0aDZrbF9kYXRhX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0zNTYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jPTEyMzE9c3RhdGljIHZvaWQgYXRoNmtsX3VhcHNkX3RyaWdnZXJfZnJhbWVfcngoc3RydWN0IGF0aDZrbF92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xMjgwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MTI4MTpcdFx0YXRoNmtsX2RhdGFfdHgoc2tiLCB2aWYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xMjgyLVx0XHRjb25uLVx1MDAzZXN0YV9mbGFncyBcdTAwMjY9IH4oU1RBX1BTX0FQU0RfVFJJR0dFUik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM9MTMwMD12b2lkIGF0aDZrbF9yeChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0LCBzdHJ1Y3QgaHRjX3BhY2tldCAqcGFja2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTE0ODUtXHRcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlcHNxX2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MTQ4NjpcdFx0XHRcdFx0YXRoNmtsX2RhdGFfdHgoc2tidWZmLCB2aWYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xNDg3LVx0XHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2Vwc3FfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTQ5Mi1cdFx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2Vwc3FfbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYzoxNDkzOlx0XHRcdFx0XHRhdGg2a2xfZGF0YV90eChza2J1ZmYsIHZpZi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTE0OTQtXHRcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXBzcV9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xNTg5LVx0XHRpZiAoc2tiMSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjE1OTA6XHRcdFx0YXRoNmtsX2RhdGFfdHgoc2tiMSwgdmlmLVx1MDAzZW5kZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTU5MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk5MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVHJhbnNtaXNzaW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGF0aDZrbF9kYXRhX3R4YCBpcyBkZWZpbml0aXZlbHkgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb24gZm9yIHRoZSBuZXR3b3JrIGRldmljZS4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIGVudHJ5IGZvciBvdXRib3VuZCBkYXRhLiBHaXZlbiB0aGF0LCBhbmQgYWZ0ZXIgc29tZSBkaWdnaW5nLCB0aGUgbGlrZWx5IHNvdXJjZSBvZiB0aGUgcHJvYmxlbSBpcyBpbiBgYXRoNmtsX2lic3NfbWFwX2VwaWRgLiBMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgZnVuY3Rpb24gYW5kIHNlZSBpZiB0aGUgcm9vdCBjYXVzZSBpcyBub3cgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIHU4IGF0aDZrbF9pYnNzX21hcF9lcGlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gIDQzOlx0XHRcdFx0ICAgICAgIHUzMiAqbWFwX25vKVxuICA0NDpcdHtcbiAgNDU6XHRcdHN0cnVjdCBhdGg2a2wgKmFyID0gYXRoNmtsX3ByaXYoZGV2KTtcbiAgNDY6XHRcdHN0cnVjdCBldGhoZHIgKmV0aF9oZHI7XG4gIDQ3Olx0XHR1MzIgaSwgZXBfbWFwID0gLTE7XG4gIDQ4Olx0XHR1OCAqZGF0YXA7XG4gIDQ5Olx0XG4gIDUwOlx0XHQqbWFwX25vID0gMDtcbiAgNTE6XHRcdGRhdGFwID0gc2tiLVx1MDAzZWRhdGE7XG4gIDUyOlx0XHRldGhfaGRyID0gKHN0cnVjdCBldGhoZHIgKikgKGRhdGFwICYjNDM7IHNpemVvZihzdHJ1Y3Qgd21pX2RhdGFfaGRyKSk7XG4gIDUzOlx0XG4gIDU0Olx0XHRpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2hkci1cdTAwM2VoX2Rlc3QpKVxuICA1NTpcdFx0XHRyZXR1cm4gRU5EUE9JTlRfMjtcbiAgNTY6XHRcbiAgNTc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyLVx1MDAzZW5vZGVfbnVtOyBpJiM0MzsmIzQzOykge1xuICA1ODpcdFx0XHRpZiAobWVtY21wKGV0aF9oZHItXHUwMDNlaF9kZXN0LCBhci1cdTAwM2Vub2RlX21hcFtpXS5tYWNfYWRkcixcbiAgNTk6XHRcdFx0XHQgICBFVEhfQUxFTikgPT0gMCkge1xuICA2MDpcdFx0XHRcdCptYXBfbm8gPSBpICYjNDM7IDE7XG4gIDYxOlx0XHRcdFx0YXItXHUwMDNlbm9kZV9tYXBbaV0udHhfcGVuZCYjNDM7JiM0Mzs7XG4gIDYyOlx0XHRcdFx0cmV0dXJuIGFyLVx1MDAzZW5vZGVfbWFwW2ldLmVwX2lkO1xuICA2MzpcdFx0XHR9XG4gIDY0Olx0XG4gIDY1Olx0XHRcdGlmICgoZXBfbWFwID09IC0xKSBcdTAwMjZcdTAwMjYgIWFyLVx1MDAzZW5vZGVfbWFwW2ldLnR4X3BlbmQpXG4gIDY2Olx0XHRcdFx0ZXBfbWFwID0gaTtcbiAgNjc6XHRcdH1cbiAgNjg6XHRcbiAgNjk6XHRcdGlmIChlcF9tYXAgPT0gLTEpIHtcbiAgNzA6XHRcdFx0aWYgKGFyLVx1MDAzZW5vZGVfbnVtIFx1MDAzZT0gTUFYX05PREVfTlVNKVxuICA3MTpcdFx0XHRcdHJldHVybiBFTkRQT0lOVF9VTlVTRUQ7XG4gIDcyOlx0XHRcdGVwX21hcCA9IGFyLVx1MDAzZW5vZGVfbnVtJiM0MzsmIzQzOztcbiAgNzM6XHRcdH1cbiAgNzQ6XHRcbiAgNzU6XHRcdG1lbWNweShhci1cdTAwM2Vub2RlX21hcFtlcF9tYXBdLm1hY19hZGRyLCBldGhfaGRyLVx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xuICA3NjpcdFxuICA3NzpcdFx0Zm9yIChpID0gRU5EUE9JTlRfMjsgaSBcdTAwM2M9IEVORFBPSU5UXzU7IGkmIzQzOyYjNDM7KSB7XG4gIDc4Olx0XHRcdGlmICghYXItXHUwMDNldHhfcGVuZGluZ1tpXSkge1xuICA3OTpcdFx0XHRcdGFyLVx1MDAzZW5vZGVfbWFwW2VwX21hcF0uZXBfaWQgPSBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJ1ZyBBbmFseXNpcyBhbmQgRml4IGZvciBhdGg2a2wgRHJpdmVyKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3YXM6IGlmIGBhci0mZ3Q7bm9kZV9udW1gIGhpdHMgYE1BWF9OT0RFX05VTWAsIHRoZSBjb2RlIGNvcnJlY3RseSBoYW5kbGVzIHJldHVybmluZyBgRU5EUE9JTlRfVU5VU0VEYC4gVGhlIHByb2JsZW0gZGlkbiYjMzk7dCBzZWVtIGltbWVkaWF0ZWx5IG9idmlvdXMuIEl0IGxvb2tlZCBsaWtlIGFuIGVkZ2UgY2FzZSBoYW5kbGVkIGNvcnJlY3RseS4gVGhlbiwgSSBkdWcgZGVlcGVyIGFuZCBjb25zaWRlcmVkIHRoZSBzY2VuYXJpbyB3aGVuIGBhci0mZ3Q7bm9kZV9udW1gIHN0YXJ0cyBhdCBgTUFYX05PREVfTlVNIC0gMWAuIEluIHRoYXQgY2FzZSwgYGVwX21hcGAgYmVjb21lcyBgTUFYX05PREVfTlVNIC0gMWAgYW5kIGBhci0mZ3Q7bm9kZV9udW1gIGJlY29tZXMgYE1BWF9OT0RFX05VTWAsIGFuZCB0aGluZ3MgKmFwcGVhcmVkKiBmaW5lLiBUaGUgY29uZGl0aW9uYWwgY2hlY2sgd291bGQgYmUgZmFsc2UsIHNvIHRoZSBjb2RlIHdvdWxkIHByb2NlZWQuIEhvd2V2ZXIsIEkgcmVhbGl6ZWQgdGhlIHByb2JsZW0gd2FzbiYjMzk7dCBpbiB0aGUgaW1tZWRpYXRlIGBpZmAgc3RhdGVtZW50IGl0c2VsZiwgYnV0IHdoYXQgaGFwcGVuZWQgKmFmdGVyKiBpdCBpbiBzdWJzZXF1ZW50IGNhbGxzLiBgYXItJmd0O25vZGVfbnVtYCBnZXRzIGluY3JlbWVudGVkIGV2ZW4gd2hlbiBgRU5EUE9JTlRfVU5VU0VEYCBpcyByZXR1cm5lZCEgVGhpcyBpcyB3aGVyZSBpdCBoaXQgbWU6IHRoZSBsb29wIGl0ZXJhdGluZyBvbiBgYXItJmd0O25vZGVfbnVtYCB3b3VsZCBydW4gdXAgdG8gYE1BWF9OT0RFX05VTWAsIGJ1dCBgYXItJmd0O25vZGVfbWFwYCBvbmx5IGhhcyBgTUFYX05PREVfTlVNYCBlbGVtZW50cy4gVGhhdCBtZWFucyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBwcmV2ZW50IHRoZSBpbmNyZW1lbnQgaWYgdGhlIG5vZGUgbGltaXQgaGFzIGJlZW4gcmVhY2hlZC4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYnVnIGFuZCBsZWFkcyB0byBhIGNyaXRpY2FsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCwgdW5kZXIgdGhlIHJpZ2h0IGNvbmRpdGlvbnMsIGNvdWxkIGJlIGV4cGxvaXRlZC4gVGhlIGRyaXZlciBpcyBgYXRoNmtsYCwgYW5kIGl0JiMzOTtzIHVzaW5nIGEgVVNCIGludGVyZmFjZS4gV2UgY2FuIGxldmVyYWdlIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMgdG8gdGFyZ2V0IHRoaXMuCgpUaGUgdnVsbmVyYWJsZSBmdW5jdGlvbiBpcyBgYXRoNmtsX2lic3NfbWFwX2VwaWRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYXRoNmtsX2RhdGFfdHhgLiBgYXRoNmtsX2RhdGFfdHhgIGlzIHRoZSBuZXR3b3JrIGRyaXZlciYjMzk7cyBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBkaXJlY3RseSBpbnZvbHZlZCBpbiB0cmFuc21pdHRpbmcgcGFja2V0cywgaW1wbHlpbmcgdGhhdCBpZiB0aGUgY29uZGl0aW9uIHRyaWdnZXJpbmcgdGhlIGJ1ZyBjYW4gYmUgYWNoaWV2ZWQsIHdlJiMzOTt2ZSBnb3QgYSByZWFjaGFibGUgcGF0aC4gVG8gdHJpZ2dlciB0aGlzLCB3ZSYjMzk7bGwgbmVlZCBwYWNrZXRzIHRvIGJlIHNlbnQgdGhyb3VnaCB0aGUgbmV0d29yayBkZXZpY2UsIHdoaWNoIGlzIGNyZWF0ZWQgd2hlbiB0aGUgVVNCIGRldmljZSBpcyBwcm9iZWQuIFNvLCBgQVRINktMYCBhbmQgYEFUSDZLTF9VU0JgIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gQWxzbywgd2UmIzM5O2xsIG5lZWQgYENGRzgwMjExYCBhbmQgYFVTQmAuIEkgdGhlbiBzdGFydGVkIHRoaW5raW5nIGFib3V0IGEgZ29vZCB3YXkgdG8gZm9jdXMgdGhlIGZ1enppbmcuIGBhdGg2a2xfZGF0YV90eGAgaXMgdGVtcHRpbmcsIGJ1dCB0aGF0JiMzOTtzIGEgKmhvdCogcGF0aCBhbmQgdGhhdCYjMzk7cyBkaXNjb3VyYWdlZCwgYnV0IHRoaXMgaXMgYSBob3QgcGF0aCBmdW5jdGlvbiAoYG5kb19zdGFydF94bWl0YCkuIEhvd2V2ZXIsIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgaXMgb25seSBjYWxsZWQgd2hlbiBgY2hrX2FkaG9jX3BzX21hcHBpbmdgIGlzIHRydWUsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Noa19hZGhvY19wc19tYXBwaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM9MzU1PW5ldGRldl90eF90IGF0aDZrbF9kYXRhX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMzYzLVx0dTggYWMgPSA5OTsgLyogaW5pdGlhbGl6ZSB0byB1bm1hcHBlZCBhYyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MzY0Olx0Ym9vbCBjaGtfYWRob2NfcHNfbWFwcGluZyA9IGZhbHNlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMzY1LVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy00MzgtXHRcdCAgICBhci1cdTAwM2VpYnNzX3BzX2VuYWJsZSBcdTAwMjZcdTAwMjYgdGVzdF9iaXQoQ09OTkVDVEVELCBcdTAwMjZ2aWYtXHUwMDNlZmxhZ3MpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6NDM5Olx0XHRcdGNoa19hZGhvY19wc19tYXBwaW5nID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQ0MC1cdFx0ZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDUzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6NDU0Olx0aWYgKGNoa19hZGhvY19wc19tYXBwaW5nKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDU1LVx0XHRlaWQgPSBhdGg2a2xfaWJzc19tYXBfZXBpZChza2IsIGRldiwgXHUwMDI2bWFwX25vKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBEYXRhIFBhdGgqKgoKT2theSwgSSYjMzk7bSB0cmFjaW5nIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGlzc3VlIGlzIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgZGF0YSBwYXRoLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgc3ltcHRvbS4gTm93LCB3aGVyZSBpcyB0aGUgVVNCIHByb2JlIGZ1bmN0aW9uIHNpdHVhdGVkIHdpdGhpbiB0aGlzIHNldHVwPyBSaWdodCwgdGhhdCYjMzk7cyBgYXRoNmtsX3VzYl9wcm9iZWAuIExldCBtZSBqdXN0IHJlZnJlc2ggbXkgbWVtb3J5IOKAkyBJIGJlbGlldmUgdGhhdCYjMzk7cyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuY2AsIGNvcnJlY3Q/IEdvb2QsIHRoYXQgY29uZmlybXMgaXQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgYXRoNmtsX3VzYl9wcm9iZWAgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHRoZSByb290IGNhdXNlIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGl0c2VsZi4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoNmtsX3VzYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM9MTEwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDZrbF9oaWZfb3BzIGF0aDZrbF91c2Jfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmMtMTExNy0vKiBhdGg2a2wgdXNiIGRyaXZlciByZWdpc3RlcmVkIGZ1bmN0aW9ucyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYzoxMTE4OnN0YXRpYyBpbnQgYXRoNmtsX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTE5LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYz0xMjI1PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGg2a2xfdXNiX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmMtMTIyNi1cdC5uYW1lID0gXCYjMzQ7YXRoNmtsX3VzYlwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM6MTIyNzpcdC5wcm9iZSA9IGF0aDZrbF91c2JfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jLTEyMjgtXHQuc3VzcGVuZCA9IGF0aDZrbF91c2JfcG1fc3VzcGVuZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBBdGhlcm9zIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXRoNmtsYCBVU0IgZHJpdmVyLiBUaGUgb2J2aW91cyBlbnRyeSBwb2ludCBpcyBgYXRoNmtsX3VzYl9wcm9iZWAsIHRoYXQmIzM5O3Mgd2hlcmUgZXZlcnl0aGluZyBwcm9iYWJseSBzdGFydHMgb24gdGhlIFVTQiBzaWRlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBteSBpbml0aWFsIGludmVzdGlnYXRpb24gdGhlcmUuIEtub3dpbmcgaG93IHRoZXNlIHRoaW5ncyB0ZW5kIHRvIHdvcmssIEkgc2hvdWxkIGFsc28gY2hlY2sgb3V0IGBhdGg2a2xfY29yZV9pbml0YCBvciBwb3RlbnRpYWxseSBgYXRoNmtsX2luaXRfaHdfc3RhcnRgLCBhcyB0aG9zZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gb3IgaGFyZHdhcmUgYnJpbmctdXAuIFRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCBhcmUgcHJvYmFibHkgdHVja2VkIGF3YXkgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvaW5pdC5jYCBvciBwZXJoYXBzIGBjb3JlLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhvc2UgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9jb3JlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuYz02ND1FWFBPUlRfU1lNQk9MKGF0aDZrbF9jb3JlX3J4X2NvbXBsZXRlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5jLTY1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmM6NjY6aW50IGF0aDZrbF9jb3JlX2luaXQoc3RydWN0IGF0aDZrbCAqYXIsIGVudW0gYXRoNmtsX2h0Y190eXBlIGh0Y190eXBlKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmMtNjcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5jLTI2NC19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuYzoyNjU6RVhQT1JUX1NZTUJPTChhdGg2a2xfY29yZV9pbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5jLTI2Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaD05Nzk9c3RydWN0IGF0aDZrbCAqYXRoNmtsX2NvcmVfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaDo5ODA6aW50IGF0aDZrbF9jb3JlX2luaXQoc3RydWN0IGF0aDZrbCAqYXIsIGVudW0gYXRoNmtsX2h0Y190eXBlIGh0Y190eXBlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTk4MS12b2lkIGF0aDZrbF9jb3JlX2NsZWFudXAoc3RydWN0IGF0aDZrbCAqYXIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvc2Rpby5jPTEzMDY9c3RhdGljIGludCBhdGg2a2xfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvc2Rpby5jLTEzNzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3NkaW8uYzoxMzcyOlx0cmV0ID0gYXRoNmtsX2NvcmVfaW5pdChhciwgQVRINktMX0hUQ19UWVBFX01CT1gpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9zZGlvLmMtMTM3My1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jPTExMTg9c3RhdGljIGludCBhdGg2a2xfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYzoxMTYyOlx0cmV0ID0gYXRoNmtsX2NvcmVfaW5pdChhciwgQVRINktMX0hUQ19UWVBFX1BJUEUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTYzLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMwMwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGF0aDZrbCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgYXRoNmtsYCBkcml2ZXIgYW5kIHRyeWluZyB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgYW5hbHlzaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYGF0aDZrbF9jb3JlX2luaXRgIGlzIGEgdmVyeSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQg4oCTIGl0JiMzOTtzIG9mdGVuIHRoZSByb290IG9mIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIFNpbWlsYXJseSwgYGF0aDZrbF91c2JfcHJvYmVgIG1ha2VzIHNlbnNlLCBhc3N1bWluZyBpdCYjMzk7cyBhIFVTQiBkZXZpY2UuIEdvdHRhIGNoZWNrIHRob3NlIG91dC4KCk5vdywgYSBmdW5jdGlvbiBsaWtlIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgKmxvb2tzKiByZWxldmFudCwgYnV0IGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZyB3aGVuIEkmIzM5O20gbG9va2luZyBmb3IgZW50cnkgcG9pbnRzIG9yIHB1YmxpY2x5IGFjY2Vzc2libGUgc3ltYm9scy4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW50ZXJuYWwgdG8gYSBwYXJ0aWN1bGFyIGZpbGUuIEkgc2hvdWxkIGV4Y2x1ZGUgdGhhdCBmcm9tIG15IGRpcmVjdCBmb2N1cy4KCkFuZCB0aGVuIEkgY29uc2lkZXJlZCBgYXRoNmtsX2RhdGFfdHhgLCBidXQgdGhhdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGEgaG90LXBhdGggZGF0YSB0cmFuc21pc3Npb24gZnVuY3Rpb24uIFdlIGRvbiYjMzk7dCB3YW50IHRvIGdldCBib2dnZWQgZG93biBpbiB0aGUgbWludXRpYWUgb2YgZGF0YSBoYW5kbGluZyBhdCB0aGlzIHN0YWdlOyBpdCYjMzk7cyB0b28gZ3JhbnVsYXIuIExldCYjMzk7cyBrZWVwIHRoYXQgaW4gbWluZCBmb3IgbGF0ZXIsIGJ1dCBhdm9pZCBpdCBmb3Igbm93LgoKVGhlIHJlYWwga2V5IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgSUJTUyBtb2RlIGlzIGNvbmZpZ3VyZWQuIFNvLCBJIG5lZWQgdG8gaHVudCBkb3duIGEgY29uZmlndXJhdGlvbiBmdW5jdGlvbiwgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgYXRoNmtsX2NmZzgwMjExX2FkZF9pZmFjZWAsIG9yIHNpbWlsYXIgbmFtaW5nLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb250cm9sIHBsYW5lIHdpbGwgbGl2ZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vay4gSSYjMzk7bGwgZm9jdXMgbXkgZWZmb3J0cyB0aGVyZSwgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MTQ4Mj1zdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0xNTEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjE1MTM6c3RhdGljIHN0cnVjdCB3aXJlbGVzc19kZXYgKmF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0xNTE0LVx0XHRcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTM0NDA9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYXRoNmtsX2NmZzgwMjExX29wcyA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYzozNDQxOlx0LmFkZF92aXJ0dWFsX2ludGYgPSBhdGg2a2xfY2ZnODAyMTFfYWRkX2lmYWNlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NDItXHQuZGVsX3ZpcnR1YWxfaW50ZiA9IGF0aDZrbF9jZmc4MDIxMV9kZWxfaWZhY2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTM5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipFeGFtaW5pbmcgSW50ZXJmYWNlIENyZWF0aW9uIGZvciBJQlNTIFN1cHBvcnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGJlc3QgaGFuZGxlIHRoZSBJQlNTIG1vZGUgaW50ZXJmYWNlIGNyZWF0aW9uIHdpdGhpbiB0aGUgYGF0aDZrbGAgZHJpdmVyLiBUaGlua2luZyB0aGlzIHRocm91Z2gsIGBhdGg2a2xfY2ZnODAyMTFfYWRkX2lmYWNlYCBqdW1wcyBvdXQgYXMgYSBzdHJvbmcgcG9zc2liaWxpdHkuIEl0JiMzOTtzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgKmFkZGluZyogdGhlIGludGVyZmFjZSwgd2hpY2ggaXMgZXhhY3RseSB0aGUgcG9pbnQgd2hlcmUgSUJTUyBtb2RlIGNvbmZpZ3VyYXRpb24gbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIFRoaXMgZnVuY3Rpb24gd291bGQgbmVlZCB0byBwcm92aWRlIHRoZSBzdXBwb3J0IG5lZWRlZCB0byBjcmVhdGUgYW4gaW50ZXJmYWNlIGluIElCU1MgbW9kZS4KCk5vdywgd2hpbGUgYGF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2VgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgc3BvdCwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2VgIHRvIGJlIHN1cmUuIEl0IGhhbmRsZXMgaW50ZXJmYWNlICpjaGFuZ2VzKiwgYW5kIGl0JiMzOTtzIHBsYXVzaWJsZSB0aGVyZSBtaWdodCBiZSBzb21lIG92ZXJsYXAgb3IgZGVwZW5kZW5jaWVzIHRoZXJlLiBJIHNob3VsZCBjaGVjayBpZiBpdCBuZWVkcyB0byBiZSB1cGRhdGVkIG9yIGlmIHRoZSBjaGFuZ2UgdGhhdCBoYXMgdG8gYmUgbWFkZSBzaG91bGQgYmUgbWFkZSBpbiB0aGlzIGZ1bmN0aW9uIG9yIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RzLiBBIHRob3JvdWdoIHJldmlldyBvZiBib3RoIGlzIGxpa2VseSB0aGUgYmVzdCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGg2a2xfY2ZnODAyMTFfY2hhbmdlX2lmYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTE1NDI9c3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfZGVsX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTE1NjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MTU2MTpzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0xNTYyLVx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MzQ0MD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBhdGg2a2xfY2ZnODAyMTFfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0zNDQyLVx0LmRlbF92aXJ0dWFsX2ludGYgPSBhdGg2a2xfY2ZnODAyMTFfZGVsX2lmYWNlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjM0NDM6XHQuY2hhbmdlX3ZpcnR1YWxfaW50ZiA9IGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ0NC1cdC5zY2FuID0gYXRoNmtsX2NmZzgwMjExX3NjYW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODczCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqQ29uc2lkZXJpbmcgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24gYW5kIElCU1MgSm9pbmluZyoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgYGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2VgIGNhdGNoZXMgbXkgZXllLiBJdCBzZWVtcyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IEkmIzM5O20gZGVhbGluZyB3aXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIGFzc2VzcyB3aGF0IGl0IGRvZXMgdG8gcG90ZW50aWFsbHkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvdXIgSSYjMzk7bSBjdXJyZW50bHkgb2JzZXJ2aW5nLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBicm9hZGVyIHdvcmtmbG93IEkgbWlnaHQgYXMgd2VsbCBjb25zaWRlciBgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc2AgYXQgdGhlIHNhbWUgdGltZS4gVGhlIElCU1MgY29uZmlndXJhdGlvbiBwcm9jZXNzIGlzIGEgd2VsbC10cm9kZGVuIHBhdGguIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHdoZXRoZXIgdGhpcyBmaXRzIGludG8gdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoaXMgb3ZlcmFsbCBwaWN0dXJlLCBhbmQgaG93IHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgaW50ZXJmYWNlIGpvaW4gcHJvY2Vzcy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgYW4gb3BlbiBtaW5kIHRvIHNlZSBob3cgYm90aCB0aWUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9jZmc4MDIxMV9qb2luX2lic3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MTU2MT1zdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTYyMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYzoxNjI0OnN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTE2MjUtXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTM0NDA9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYXRoNmtsX2NmZzgwMjExX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ1NC1cdC5zZXRfcG93ZXJfbWdtdCA9IGF0aDZrbF9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYzozNDU1Olx0LmpvaW5faWJzcyA9IGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3MsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ1Ni1cdC5sZWF2ZV9pYnNzID0gYXRoNmtsX2NmZzgwMjExX2xlYXZlX2lic3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTY1CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgQnVnIExvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoaXMgaXNzdWUuIEJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiwgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgIGlzIGxvb2tpbmcgbGlrZSBhIHByaW1lIHN1c3BlY3QuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGF0IHRoZSBidWcgYXBwZWFycyB0byBiZSByb290ZWQgd2l0aGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAuIE15IGd1dCYjMzk7cyB0ZWxsaW5nIG1lIHRvIGludmVzdGlnYXRlIHRoZSBjb25uZWN0aW9uIGFuZCBmbG93IG9mIGRhdGEgYW5kIGNvbnRyb2wgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGNsb3NlbHkuIFdoYXQmIzM5O3MgdGhlIHN0YXRlIG9uIHRoZSBjb25uZWN0aW9uIGF0IHRob3NlIG1vbWVudHM/CgpOb3csIEkgbmVlZCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZSBhbmQgZ2V0IGFsbCB0aGUgY29udGV4dC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBub3RoaW5nIG9idmlvdXMgaXMgaGFwcGVuaW5nIHdoZW4gdGhlIElCU1MgaXMgbGVmdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsYXRlZCBmdW5jdGlvbiBhbmQgZXhhbWluZSBgYXRoNmtsX2NmZzgwMjExX2xlYXZlX2lic3NgLiBJJiMzOTtsbCB0cmFjZSB3aGF0IGhhcHBlbnMgdGhlcmUgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuIEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGJlIHJlbGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9jZmc4MDIxMV9sZWF2ZV9pYnNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTE2MjQ9c3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTE2OTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MTY5NDpzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTY5NS1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTM0NDA9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYXRoNmtsX2NmZzgwMjExX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ1NS1cdC5qb2luX2lic3MgPSBhdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjM0NTY6XHQubGVhdmVfaWJzcyA9IGF0aDZrbF9jZmc4MDIxMV9sZWF2ZV9pYnNzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NTctXHQuZ2V0X3N0YXRpb24gPSBhdGg2a2xfZ2V0X3N0YXRpb24sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjQzCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBhdGg2a2xgIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIGBhdGg2a2xgIGRyaXZlciwgY29uc2lkZXJpbmcgdGhlIGJ1ZyByZXBvcnQgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LgoKRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50cy4gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCB0aGUgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBhdGg2a2xfdXNiX3Byb2JlYCwgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgLCBhbmQgYGF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2VgLiBUaGVzZSBhcmUgbGlrZWx5IHRvIGJlIGNyaXRpY2FsIGZvciBleGVyY2lzaW5nIHRoZSB2dWxuZXJhYmxlIGNvZGUgcGF0aC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGxpa2UgSSBuZWVkIGBBVEg2S0xgIGFuZCBgQVRINktMX1VTQmAgZW5hYmxlZC4gSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBkZXBlbmRlbmNpZXMuIGBBVEg2S0xgIG5lZWRzIGBDRkc4MDIxMWAsIGFuZCBgQVRINktMX1VTQmAgZGVwZW5kcyBvbiBib3RoIGBBVEg2S0xgIGFuZCBgVVNCYC4gR290IGl0LiBTbyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdG8gaGF2ZSBlbmFibGVkLgoKVGhlIGJ1ZywgYXMgSSB1bmRlcnN0YW5kIGl0LCBsaWVzIHdpdGhpbiBgYXRoNmtsX2lic3NfbWFwX2VwaWRgLiBJdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBgY2hrX2FkaG9jX3BzX21hcHBpbmdgIGlzIHRydWUsIHdoaWNoIG9jY3VycyB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgaW4gQVAgbW9kZSBvciBBZC1Ib2MgKElCU1MpIG1vZGUgKmFuZCogcGFja2V0cyBhcmUgYmVpbmcgc2VudC4gVGhlIHZ1bG5lcmFiaWxpdHkgYXJpc2VzIGZyb20gYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3Mgd2hlcmUgYGFyLSZndDtub2RlX251bWAgZXhjZWVkcyBgTUFYX05PREVfTlVNYC4KClRoaXMgaXMgc2lnbmlmaWNhbnQuIFRoZSBidWcgaXMgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYm90aCBBUCBhbmQgSUJTUyBtb2Rlcywgd2hpY2ggaW5jcmVhc2VzIGl0cyBwcmFjdGljYWwgaW1wb3J0YW5jZS4gVGhlIGZhY3QgdGhhdCB0aGUgZHJpdmVyIHN1cHBvcnRzIFVTQiBhbmQgc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyBpcyBhIG1ham9yIGFkdmFudGFnZS4KCk9rYXksIGxldCYjMzk7cyBwdXQgaXQgYWxsIHRvZ2V0aGVyIGludG8gYSBjbGVhciBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IFllcywgYWJzb2x1dGVseS4KKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgY3JpdGljYWwgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGF0aDZrbF9pYnNzX21hcF9lcGlkYC4gVGhpcyBpc3N1ZSBpcyByZWFjaGFibGUgd2hlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGluIEFQIG1vZGUgb3IgQWQtSG9jIChJQlNTKSBtb2RlIHdoaWxlIHRyYW5zbWl0dGluZyBwYWNrZXRzLiBTeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgY2FuIGJlIHVzZWQgdG8gdGVzdCB0aGUgZHJpdmVyLCBhbmQgaXRzIFVTQiBjYXBhYmlsaXRpZXMgcHJvdmlkZSBhIG1lYW5zIHRvIGFjaGlldmUgdGhpcy4KKiAgICoqRm9jdXNTeW1ib2xzKio6IGBhdGg2a2xfdXNiX3Byb2JlYCwgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgLCBgYXRoNmtsX2NmZzgwMjExX2FkZF9pZmFjZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgQVRINktMYCwgYEFUSDZLTF9VU0JgCgpPbmUgbGFzdCB0aGluZywgc2luY2UgQVAgbW9kZSBpcyBtZW50aW9uZWQsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYGF0aDZrbF9jZmc4MDIxMV9zdGFydF9hcGAgYXMgYSBwb3RlbnRpYWwgYXJlYSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9jZmc4MDIxMV9zdGFydF9hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBob3cgQVAgbW9kZSBpcyBzdGFydGVkIGluIGF0aDZrbDoKCioqVW5kZXJzdGFuZGluZyB0aGUgQXRoNmtsIEFQIE1vZGUgSW5pdGlhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgQVAgbW9kZSBpcyBpbml0aWF0ZWQgd2l0aGluIHRoZSBhdGg2a2wgZHJpdmVyLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIGRyaXZlciBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBzb2Z0bWFjIHN0YXRlIHRvIHB1dCB0aGUgaGFyZHdhcmUgaW50byBBUCBtb2RlLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2hlcmUqIGluIHRoZSBjb2RlIGRvZXMgdGhpcyBoYXBwZW4uIElzIGl0IHRyaWdnZXJlZCBieSBhIGNvbW1hbmQgZnJvbSB1c2Vyc3BhY2UsIG9yIHBlcmhhcHMgYXV0b21hdGljYWxseSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gc29tZSBjb25maWd1cmF0aW9uPyBJcyB0aGVyZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZWRpY2F0ZWQgdG8gaXQgb3IgaXMgaXQgaW50ZWdyYXRlZCBpbnRvIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBmbG93PyBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBsb29raW5nIGF0IHRoZSBkcml2ZXImIzM5O3MgZW50cnkgcG9pbnRzIGFuZCBjb25maWd1cmF0aW9uIHJvdXRpbmVzIGZpcnN0LiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB1c2VkIHRvIGRldGVybWluZSB0aGUgZXhhY3Qgc3RlcHMgaW52b2x2ZWQuIEtub3dpbmcgdGhlIGludGVyYWN0aW9uIHdpbGwgYXNzaXN0IGluIGtub3dpbmcgd2hlcmUgdG8gYmVnaW4gbWFraW5nIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBmb3IgaG93IHRoaXMgbWlnaHQgZGlmZmVyIGZyb20gc3RhdGlvbiBtb2RlIGFzIHRoaXMgd291bGQgbGlrZWx5IGludm9sdmUgZGlmZmVyaW5nIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFydF9hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYz0yNzE1PXN0YXRpYyBpbnQgYXRoNmtsX2dldF9yc25fY2FwYWIoc3RydWN0IGNmZzgwMjExX2JlYWNvbl9kYXRhICpiZWFjb24sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTI3NjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6Mjc2NzpzdGF0aWMgaW50IGF0aDZrbF9zdGFydF9hcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTI3NjgtXHRcdFx0ICAgc3RydWN0IGNmZzgwMjExX2FwX3NldHRpbmdzICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYz0zNDQwPXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIGF0aDZrbF9jZmc4MDIxMV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NjUtI2VuZGlmXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MzQ2NjpcdC5zdGFydF9hcCA9IGF0aDZrbF9zdGFydF9hcCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0zNDY3LVx0LmNoYW5nZV9iZWFjb24gPSBhdGg2a2xfY2hhbmdlX2JlYWNvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNDYKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYXRoNmtsYCBNb2R1bGUgQ29uZmlndXJhdGlvbiBhbmQgQnVnIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuIEZpcnN0LCBJJiMzOTttIGFkZGluZyBgYXRoNmtsX3N0YXJ0X2FwYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdC4gTG9va2luZyBhdCB0aGUgZXhpc3RpbmcgbGlzdCwgaXQmIzM5O3M6IGBhdGg2a2xfdXNiX3Byb2JlYCwgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgLCBhbmQgbm93IGBhdGg2a2xfc3RhcnRfYXBgLiBJIGp1c3QgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHN0YXRpYy4gWWVzLCBpdCBpcyBzdGF0aWMgYnV0IGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgY2ZnODAyMTFfb3BzYC4gQWhhISBUaGF0IG1lYW5zIGl0IHdvbiYjMzk7dCBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIGl0JiMzOTtzIHBlcmZlY3RseSBzdWl0YWJsZSBmb3IgRm9jdXNTeW1ib2xzLiBUaGF0IGFwcGxpZXMgdG8gYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgIGFuZCBgYXRoNmtsX3VzYl9wcm9iZWAgYXMgd2VsbC4KCk5vdywgb24gdG8gdGhlIEVuYWJsZUNvbmZpZ3MuIEkgc2VlIGBBVEg2S0xgIGFuZCBgQVRINktMX1VTQmAuIFNob3VsZCBJIGluY2x1ZGUgYENGRzgwMjExYCBhbmQgYFVTQmA/IFdoaWxlIGBDRkc4MDIxMWAgYW5kIGBVU0JgIGFyZSBvZnRlbiBzdGFuZGFyZCwgSSBuZWVkIHRvIGxpc3QgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkIGZvciBLYnVpbGQuIGBBVEg2S0xgIGFuZCBgQVRINktMX1VTQmAgYXJlIHRoZSBzcGVjaWZpYyBvbmVzLCBzbyBJJiMzOTtsbCBzdGljayB3aXRoIHRob3NlLgoKRmluYWxseSwgdGhlIGJ1ZyBmaXguIExldCBtZSB3YWxrIHRocm91Z2ggaXQuCgpUaGUgb3JpZ2luYWwgY29kZSBoYWQgdGhpcyBwb3RlbnRpYWwgaXNzdWU6IGlmIGBhci0mZ3Q7bm9kZV9udW1gIHdhcyBlcXVhbCB0byBgTUFYX05PREVfTlVNYCwgdGhlIG9sZCBjb2RlIHdvdWxkIHNldCBgZXBfbWFwYCB0byBgTUFYX05PREVfTlVNYCwgaW5jcmVtZW50IGBhci0mZ3Q7bm9kZV9udW1gIHRvIGBNQVhfTk9ERV9OVU0gJiM0MzsgMWAsIGFuZCB0aGVuIHJldHVybiBgRU5EUE9JTlRfVU5VU0VEYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgbmV4dCB0aW1lIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBsb29wIGBmb3IgKGkgPSAwOyBpICZsdDsgYXItJmd0O25vZGVfbnVtOyBpJiM0MzsmIzQzOylgIHdvdWxkIHJ1biB1cCB0byBgTUFYX05PREVfTlVNYCwgYnV0IHRoZW4gYWNjZXNzIGBhci0mZ3Q7bm9kZV9tYXBbTUFYX05PREVfTlVNXWAsIHdoaWNoIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGFuIGFycmF5IG9mIGBNQVhfTk9ERV9OVU1gLiBUaGUgbmV3IGNvZGUgY29ycmVjdGx5IHByZXZlbnRzIHRoaXMgYnkgY2hlY2tpbmcgYGlmIChhci0mZ3Q7bm9kZV9udW0gJmd0Oz0gTUFYX05PREVfTlVNKWAgKmJlZm9yZSogaW5jcmVtZW50aW5nLCBhbmQgcmV0dXJuaW5nIGBFTkRQT0lOVF9VTlVTRURgIGlmIGl0JiMzOTtzIGFscmVhZHkgYXQgdGhlIG1heGltdW0uIFRoaXMgYXZvaWRzIHRoZSBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCkl0JiMzOTtzIGEgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGZpeCwgcHJldmVudGluZyBhIG1lbW9yeSBjb3JydXB0aW9uL09PQiBhY2Nlc3MsIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24uIFRoaXMgaXMgZ29vZCB0byBnby4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRINktMJiMzNDssCiAgICAmIzM0O0FUSDZLTF9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGg2a2xfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O2F0aDZrbF9jZmc4MDIxMV9qb2luX2lic3MmIzM0OywKICAgICYjMzQ7YXRoNmtsX3N0YXJ0X2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgd2hlbiBgYXItXHUwMDNlbm9kZV9udW1gIHJlYWNoZXMgYE1BWF9OT0RFX05VTWAuIFRoZSBidWcgaXMgcmVhY2hhYmxlIGluIEFQIG9yIEFkLUhvYyAoSUJTUykgbW9kZSB3aGVuIHNlbmRpbmcgcGFja2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRINktMJiMzNDssCiAgICAmIzM0O0FUSDZLTF9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGg2a2xfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O2F0aDZrbF9jZmc4MDIxMV9qb2luX2lic3MmIzM0OywKICAgICYjMzQ7YXRoNmtsX3N0YXJ0X2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgd2hlbiBgYXItXHUwMDNlbm9kZV9udW1gIHJlYWNoZXMgYE1BWF9OT0RFX05VTWAuIFRoZSBidWcgaXMgcmVhY2hhYmxlIGluIEFQIG9yIEFkLUhvYyAoSUJTUykgbW9kZSB3aGVuIHNlbmRpbmcgcGFja2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgYXItXHUwMDNlbm9kZV9udW1gIChhIGB1OGApIHdvdWxkIGNvbnRpbnVlIHRvIGluY3JlbWVudCBldmVuIGFmdGVyIHJlYWNoaW5nIGBNQVhfTk9ERV9OVU1gLCBldmVudHVhbGx5IHdyYXBwaW5nIGFyb3VuZCB0byAwIGFuZCBvdmVyd3JpdGluZyBleGlzdGluZyBlbnRyaWVzIGluIHRoZSBgbm9kZV9tYXBgIGFycmF5LiBUaGlzIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzIG9mIHRoaXMgbmF0dXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MmEyOGQxOTE2Y2IxN2RlZDEwMmU4MWJlYTUyMWQwOTNlMDM2ZTI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDg6NDE6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCmluZGV4IGQ4MTgyNTQxMzkwNjEuLmIzNDBjNzk1YjdhMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCkBAIC02NywxMCAmIzQzOzY3LDkgQEAgc3RhdGljIHU4IGF0aDZrbF9pYnNzX21hcF9lcGlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfQogCiAJaWYgKGVwX21hcCA9PSAtMSkgewotCQllcF9tYXAgPSBhci0mZ3Q7bm9kZV9udW07Ci0JCWFyLSZndDtub2RlX251bSYjNDM7JiM0Mzs7Ci0JCWlmIChhci0mZ3Q7bm9kZV9udW0gJmd0OyBNQVhfTk9ERV9OVU0pCiYjNDM7CQlpZiAoYXItJmd0O25vZGVfbnVtICZndDs9IE1BWF9OT0RFX05VTSkKIAkJCXJldHVybiBFTkRQT0lOVF9VTlVTRUQ7CiYjNDM7CQllcF9tYXAgPSBhci0mZ3Q7bm9kZV9udW0mIzQzOyYjNDM7OwogCX0KIAogCW1lbWNweShhci0mZ3Q7bm9kZV9tYXBbZXBfbWFwXS5tYWNfYWRkciwgZXRoX2hkci0mZ3Q7aF9kZXN0LCBFVEhfQUxFTik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYXRoNmtsIElCU1MgRW5kcG9pbnQgTWFwcGluZyBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCB0byBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGluIGBhdGg2a2wvdHhyeC5jYC4gSXQmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgdG8gaG93IGVuZHBvaW50IG1hcHBpbmdzIGFyZSBhc3NpZ25lZC4gSW5pdGlhbGx5LCBteSBmaXJzdCBpbXByZXNzaW9uIHdhcyB0aGF0IHRoZSBmaXggaW52b2x2ZWQgYW4gb2ZmLWJ5LW9uZSBlcnJvci4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzOgoKYGBgYwoJaWYgKGVwX21hcCA9PSAtMSkgewoJCWVwX21hcCA9IGFyLSZndDtub2RlX251bTsKCQlhci0mZ3Q7bm9kZV9udW0mIzQzOyYjNDM7OwoJCWlmIChhci0mZ3Q7bm9kZV9udW0gJmd0OyBNQVhfTk9ERV9OVU0pCgkJCXJldHVybiBFTkRQT0lOVF9VTlVTRUQ7Cgl9CmBgYAoKQW5kIG5vdyBpdCYjMzk7czoKCmBgYGMKCWlmIChlcF9tYXAgPT0gLTEpIHsKCQlpZiAoYXItJmd0O25vZGVfbnVtICZndDs9IE1BWF9OT0RFX05VTSkKCQkJcmV0dXJuIEVORFBPSU5UX1VOVVNFRDsKCQllcF9tYXAgPSBhci0mZ3Q7bm9kZV9udW0mIzQzOyYjNDM7OwoJfQpgYGAKClRoZSBpbnRlbnQgaXMgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLiBTbywgaWYgYGFyLSZndDtub2RlX251bWAgd2FzIGBNQVhfTk9ERV9OVU1gLCB0aGUgb2xkIGNvZGUgd291bGQgYXNzaWduIGBlcF9tYXBgIHRvIGBNQVhfTk9ERV9OVU1gLCBpbmNyZW1lbnQgYGFyLSZndDtub2RlX251bWAgdG8gYE1BWF9OT0RFX05VTSAmIzQzOyAxYCwgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmV0dXJuIGBFTkRQT0lOVF9VTlVTRURgLiBUaGlzIGxvb2tzIGxpa2UgaXQgd2FzIGF0dGVtcHRpbmcgdG8gYXZvaWQgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSByZXZpc2VkIGNvZGUgY2xlYXJseSBwcmV2ZW50cyB0aGUgYXNzaWdubWVudCBvZiBgZXBfbWFwYCBmcm9tIGJlaW5nIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgTUFYX05PREVfTlVNYCBhdCB0aGUgb3V0c2V0LgoKQnV0IHdhaXQsIEkgc3RhcnRlZCB0aGlua2luZyBhYm91dCB0aGUgZWRnZSBjYXNlcy4gTGV0JiMzOTtzIHJldmlzaXQgdGhlIG9sZCBjb2RlLiBJZiBgYXItJmd0O25vZGVfbnVtYCAqd2FzKiBgTUFYX05PREVfTlVNYCwgaXQgKndvdWxkKiBoYXZlIHJldHVybmVkIGBFTkRQT0lOVF9VTlVTRURgLiBJZiBpdCB3YXMgYE1BWF9OT0RFX05VTSAtIDFgIHdpdGggdGhlIHByZXZpb3VzIHZlcnNpb24sIGBlcF9tYXBgIGdldHMgYXNzaWduZWQsIGFuZCB0aGUgaW5jcmVtZW50IG1ha2VzIGBhci0mZ3Q7bm9kZV9udW1gIG5vdyBgTUFYX05PREVfTlVNYCwgd2hpY2ggYXZvaWRzIHRoZSBjaGVjay4gVGhhdCBzZWVtcyBjb3JyZWN0LCBnaXZlbiB0aGF0IGBhci0mZ3Q7bm9kZV9tYXBgIGlzIHNpemUgYE1BWF9OT0RFX05VTWAuIE9rYXksIGl0IHNlZW1zIEkgdW5kZXJzdGFuZC4gVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgY2hlY2sgKndvdWxkKiByZXR1cm4gYEVORFBPSU5UX1VOVVNFRGAgaWYgaXQgaGl0IGBNQVhfTk9ERV9OVU1gLCB3aGljaCBJIHNob3VsZCBoYXZlIHNlZW4gaW1tZWRpYXRlbHkuCgpOb3csIGRvZXMgdGhlIGBhci0mZ3Q7bm9kZV9tYXBgIGFycmF5IGFjdHVhbGx5IGhhdmUgYSBzaXplIG9mIGBNQVhfTk9ERV9OVU1gPyBHaXZlbiB0aGUgbG9naWMsIHRoaXMgaXMgaGlnaGx5IGxpa2VseSwgYW5kIHRoZSBjaGFuZ2UgcHJvdmlkZXMgY2xlYXJlciBib3VuZHMgY2hlY2tpbmcgYmVmb3JlIGFzc2lnbmluZyB0aGUgYGVwX21hcGAgYW5kIHByZXZlbnRzIGEgcG9zc2libGUgd3JpdGUgcGFzdCB0aGUgYm91bmRzIG9mIGBhci0mZ3Q7bm9kZV9tYXBgLiBUaGUgY2hhbmdlIGlzIGluZGVlZCBhIGNvcnJlY3QgYW5kIG5lY2Vzc2FyeSBmaXggdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBtYW5hZ2VtZW50IHdoZW4gbWFwcGluZyBJQlNTIGVuZHBvaW50cywgaW1wcm92aW5nIHRoZSBvdmVyYWxsIHJvYnVzdG5lc3Mgb2YgdGhlIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFYX05PREVfTlVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNDUtI2RlZmluZSBBVEg2S0xfTUFYX0VORFBPSU5UUyAgIDRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjQ2OiNkZWZpbmUgTUFYX05PREVfTlVNICAgICAgICAgICAxNVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNDctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmg9Njk0PXN0cnVjdCBhdGg2a2wge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTcyOC1cdHU4IHR4X3B3cjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjcyOTpcdHN0cnVjdCBhdGg2a2xfbm9kZV9tYXBwaW5nIG5vZGVfbWFwW01BWF9OT0RFX05VTV07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaC03MzAtXHR1OCBpYnNzX3BzX2VuYWJsZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz00Mj1zdGF0aWMgdTggYXRoNmtsX2lic3NfbWFwX2VwaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy02OS1cdGlmIChlcF9tYXAgPT0gLTEpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjcwOlx0XHRpZiAoYXItXHUwMDNlbm9kZV9udW0gXHUwMDNlPSBNQVhfTk9ERV9OVU0pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy03MS1cdFx0XHRyZXR1cm4gRU5EUE9JTlRfVU5VU0VEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBFbmRwb2ludCBBbGxvY2F0aW9uIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBhIHBvdGVudGlhbCBpc3N1ZSBtaWdodCBsaWUuIEl0IGxvb2tzIGxpa2UgYG5vZGVfbWFwYCBoYXMgYSBzaXplIG9mIGBNQVhfTk9ERV9OVU1gLiBUaGUgY3J1Y2lhbCBwYXJ0IHNlZW1zIHRvIGJlIGhvdyBgYXItJmd0O25vZGVfbnVtYCBpbnRlcmFjdHMgd2l0aCB0aGlzIG1hcC4KCkluaXRpYWxseSwgSSB3YWxrZWQgdGhyb3VnaCB0aGUgY2FzZSB3aGVyZSBgYXItJmd0O25vZGVfbnVtYCAqaXMqIGVxdWFsIHRvIGBNQVhfTk9ERV9OVU1gLiBJbiB0aGF0IHNjZW5hcmlvLCBgZXBfbWFwYCBiZWNvbWVzIGBNQVhfTk9ERV9OVU1gLCBhbmQgYGFyLSZndDtub2RlX251bWAgZ2V0cyBpbmNyZW1lbnRlZCB0byBgTUFYX05PREVfTlVNICYjNDM7IDFgLiBTaW5jZSBgTUFYX05PREVfTlVNICYjNDM7IDFgIGlzIGdyZWF0ZXIgdGhhbiBgTUFYX05PREVfTlVNYCwgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSByZXR1cm5zIGBFTkRQT0lOVF9VTlVTRURgLiBTZWVtcyBhbHJpZ2h0Li4uCgpUaGVuLCBJIHRob3VnaHQgYWJvdXQgd2hhdCBoYXBwZW5zIGlmIGBhci0mZ3Q7bm9kZV9udW1gICp3YXMqIGBNQVhfTk9ERV9OVU0gLSAxYCBpbml0aWFsbHkuIEluIHRoYXQgY2FzZSwgYGVwX21hcGAgYmVjb21lcyBgTUFYX05PREVfTlVNIC0gMWAsIGFuZCBgYXItJmd0O25vZGVfbnVtYCBpbmNyZW1lbnRzIHRvIGBNQVhfTk9ERV9OVU1gLiBUaGUgY3J1Y2lhbCBjaGVjayBgYXItJmd0O25vZGVfbnVtICZndDsgTUFYX05PREVfTlVNYCBiZWNvbWVzIGZhbHNlLCBhbmQgdGhlIGNvZGUgY29udGludWVzLCBtZWFuaW5nIHRoZSBtYXAgZW50cnkgYE1BWF9OT0RFX05VTSAtIDFgIGlzIHZhbGlkLiBBbGwgZ29vZC4KCkkgc3RhcnRlZCByZXZpc2l0aW5nIHRoZSBlZGdlIGNhc2Ugd2hlcmUgYGFyLSZndDtub2RlX251bWAgYmVnaW5zIGF0IGBNQVhfTk9ERV9OVU1gICh3aGljaCBJIGluaXRpYWxseSBkaXNtaXNzZWQgYXMgY29ycmVjdCkuICBJJiMzOTt2ZSByZWFsaXplZCB0aGF0IHRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgcmV0dXJucyBgRU5EUE9JTlRfVU5VU0VEYCwgYnV0IHRoZW4gaXQgc3RpbGwgKmluY3JlbWVudHMqIGBhci0mZ3Q7bm9kZV9udW1gLiAgVGhlIG5leHQgdGltZSwgYGFyLSZndDtub2RlX251bWAgd2lsbCBiZSBgTUFYX05PREVfTlVNICYjNDM7IDFgLiBUaGlzIGxlYWRzIHRvIGBlcF9tYXBgIGJlaW5nIGBNQVhfTk9ERV9OVU0gJiM0MzsgMWAuICBBbmQgYGFyLSZndDtub2RlX251bWAgZ2V0cyBpbmNyZW1lbnRlZCB0byBgTUFYX05PREVfTlVNICYjNDM7IDJgLiBJdCByZXR1cm5zIGBFTkRQT0lOVF9VTlVTRURgIGFnYWluLgoKU28sIHRoZSBjb2RlIGp1c3Qga2VlcHMgaW5jcmVtZW50aW5nIGBhci0mZ3Q7bm9kZV9udW1gISAgV2hpY2ggbWVhbnMgaXQgbWlnaHQgY2F1c2UgYW4gb3ZlcmZsb3cgb24gYHU4YCwgb3Igb3RoZXIgc2ltaWxhciB1bmludGVuZGVkIGJlaGF2aW9yLgoKTm93IEkgbmVlZCB0byBjaGVjayB0aGUgZGF0YSB0eXBlIG9mIGBhci0mZ3Q7bm9kZV9udW1gIHRvIHNlZSBleGFjdGx5IHdoYXQga2luZCBvZiBvdmVyZmxvdyBwb3NzaWJpbGl0aWVzIEkgbWlnaHQgZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9kZV9udW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaD02OTQ9c3RydWN0IGF0aDZrbCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNzMxLVx0Ym9vbCBpYnNzX2lmX2FjdGl2ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjczMjpcdHU4IG5vZGVfbnVtO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNzMzLVx0dTggbmV4dF9lcF9pZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5NgoJCQkJCQkJb3V0cHV0OiAxMTIKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBvdGVudGlhbCBCdWcqKgoKT2theSwgc28gYG5vZGVfbnVtYCBpcyBhIGB1OGAsIG1lYW5pbmcgaXQmIzM5O3MgZ29pbmcgdG8gd3JhcCBhcm91bmQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdhczogaWYgaXQgaW5jcmVtZW50cyBpbmRlZmluaXRlbHksIGl0JiMzOTtsbCBldmVudHVhbGx5IGhpdCAwLCByaWdodD8gQW5kIHdoZW4gYG5vZGVfbnVtYCBiZWNvbWVzIDAsIHRoZW4gYGVwX21hcGAgYWxzbyBiZWNvbWVzIDAuIFRoYXQmIzM5O3MgZmluZSwgYnV0IHRoZW4gYG5vZGVfbnVtYCBpbmNyZW1lbnRzIGFnYWluIHRvIDEuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hpbGUgYG5vZGVfbnVtYCBiZWNvbWVzIDAsIGl0IGFsc28gaW5jcmVtZW50cyBhZ2FpbiwgYW5kIGV2ZW50dWFsbHkgZ29lcyBwYXN0IHRoZSBkZWZpbmVkIHJhbmdlLCB3aGljaCB3b3VsZCBvdmVyd3JpdGUgZXhpc3RpbmcgZW50cmllcyEgSXMgdGhpcyBvdXQtb2YtYm91bmRzPyBObywgaXQmIzM5O3Mgb3ZlcndyaXRpbmcgc29tZXRoaW5nLCBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCldhaXQgYSBzZWNvbmQsIHRoZXJlJiMzOTtzIGFub3RoZXIgc2NlbmFyaW8uIFdoYXQgaWYgYG5vZGVfbnVtYCB3cmFwcyBhcm91bmQgYWZ0ZXIgcmVhY2hpbmcgMjU1PyBTbyBJIHRoaW5rIHRoZSBwcm9ibGVtIGlzIHRoYXQgYG5vZGVfbnVtYCB3cmFwcGluZyBhcm91bmQgY2F1c2VzIGVudHJpZXMgdG8gYmUgb3ZlcndyaXR0ZW4uIEl0IGxvb2tzIG1vcmUgbGlrZSBhIGxvZ2ljIGJ1ZyBhdCBmaXJzdC4gSSBjb25zaWRlcmVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlbiBJIGxvb2tlZCBjbG9zZWx5LCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBldmlkZW5jZSBvZiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmUuIAoKS0FTQU4gd291bGRuJiMzOTt0IGNhdGNoIHRoaXMgaWYgaXQganVzdCBvdmVyd3JpdGVzIGBub2RlX21hcFswXWAsIHJpZ2h0PyBSaWdodCEgVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcHJldmVudGluZyB0aGUgaW5jcmVtZW50IHdoZW4gYGFyLSZndDtub2RlX251bWAgaXMgYWxyZWFkeSBlcXVhbCB0byBvciBwYXN0IGBNQVhfTk9ERV9OVU1gLiBTbyBJIGFtIG5vdyBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuCgpJIHdpbGwgZG91YmxlIGNoZWNrIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBqdXN0IHRvIGJlIHN1cmUuIEkgY2FuIHNlZSB0aGF0IGBlcF9tYXBgIGlzIHVzZWQgYXMgYW4gaW5kZXggaW50byBgYXItJmd0O25vZGVfbWFwYCBhbmQgdGhlIGBtZW1jcHlgIHdyaXRlcyB0byBgbm9kZV9tYXBgLiBObyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwuIFRoZSBwYXRjaCBwcmV2ZW50cyBgYXItJmd0O25vZGVfbnVtYCBmcm9tIGV4Y2VlZGluZyBgTUFYX05PREVfTlVNYC4gVGhpcyBpcyBqdXN0IGEgc3RhbmRhcmQgaW50ZWdlciBvdmVyZmxvdy9sb2dpYyBidWcuIEl0IGRvZXNuJiMzOTt0IG5lZWQgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBhci1cdTAwM2Vub2RlX251bWAgKGEgYHU4YCkgd291bGQgY29udGludWUgdG8gaW5jcmVtZW50IGV2ZW4gYWZ0ZXIgcmVhY2hpbmcgYE1BWF9OT0RFX05VTWAsIGV2ZW50dWFsbHkgd3JhcHBpbmcgYXJvdW5kIHRvIDAgYW5kIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIGBub2RlX21hcGAgYXJyYXkuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgb2YgdGhpcyBuYXR1cmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgYXItXHUwMDNlbm9kZV9udW1gIChhIGB1OGApIHdvdWxkIGNvbnRpbnVlIHRvIGluY3JlbWVudCBldmVuIGFmdGVyIHJlYWNoaW5nIGBNQVhfTk9ERV9OVU1gLCBldmVudHVhbGx5IHdyYXBwaW5nIGFyb3VuZCB0byAwIGFuZCBvdmVyd3JpdGluZyBleGlzdGluZyBlbnRyaWVzIGluIHRoZSBgbm9kZV9tYXBgIGFycmF5LiBUaGlzIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzIG9mIHRoaXMgbmF0dXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MToxMy44ODAyNjQxMjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyODg4NDQ3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRINktMXCIsXG4gICAgXCJBVEg2S0xfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoNmtsX3VzYl9wcm9iZVwiLFxuICAgIFwiYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc1wiLFxuICAgIFwiYXRoNmtsX3N0YXJ0X2FwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgYXItXFx1MDAzZW5vZGVfbnVtYCAoYSBgdThgKSB3b3VsZCBjb250aW51ZSB0byBpbmNyZW1lbnQgZXZlbiBhZnRlciByZWFjaGluZyBgTUFYX05PREVfTlVNYCwgZXZlbnR1YWxseSB3cmFwcGluZyBhcm91bmQgdG8gMCBhbmQgb3ZlcndyaXRpbmcgZXhpc3RpbmcgZW50cmllcyBpbiB0aGUgYG5vZGVfbWFwYCBhcnJheS4gVGhpcyBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyBvZiB0aGlzIG5hdHVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBpbiBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIHdoZW4gYGFyLVxcdTAwM2Vub2RlX251bWAgcmVhY2hlcyBgTUFYX05PREVfTlVNYC4gVGhlIGJ1ZyBpcyByZWFjaGFibGUgaW4gQVAgb3IgQWQtSG9jIChJQlNTKSBtb2RlIHdoZW4gc2VuZGluZyBwYWNrZXRzLiBUaGUgZHJpdmVyIHN1cHBvcnRzIFVTQiBhbmQgY2FuIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjEzLjg4MDI3MTc5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0Njk5MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODJhMjhkMTkxNmNiMTdkZWQxMDJlODFiZWE1MjFkMDkzZTAzNmUyOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MToxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXFxuaW5kZXggZDgxODI1NDEzOTA2MS4uYjM0MGM3OTViN2EzMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXFxuQEAgLTY3LDEwICs2Nyw5IEBAIHN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZXBfbWFwID09IC0xKSB7XFxuLVxcdFxcdGVwX21hcCA9IGFyLVxcdTAwM2Vub2RlX251bTtcXG4tXFx0XFx0YXItXFx1MDAzZW5vZGVfbnVtKys7XFxuLVxcdFxcdGlmIChhci1cXHUwMDNlbm9kZV9udW0gXFx1MDAzZSBNQVhfTk9ERV9OVU0pXFxuK1xcdFxcdGlmIChhci1cXHUwMDNlbm9kZV9udW0gXFx1MDAzZT0gTUFYX05PREVfTlVNKVxcbiBcXHRcXHRcXHRyZXR1cm4gRU5EUE9JTlRfVU5VU0VEO1xcbitcXHRcXHRlcF9tYXAgPSBhci1cXHUwMDNlbm9kZV9udW0rKztcXG4gXFx0fVxcbiBcXG4gXFx0bWVtY3B5KGFyLVxcdTAwM2Vub2RlX21hcFtlcF9tYXBdLm1hY19hZGRyLCBldGhfaGRyLVxcdTAwM2VoX2Rlc3QsIEVUSF9BTEVOKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MTQuMzQ2MDIzMTA5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQwOTcxNTMyMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDZLTFwiLFxuICAgIFwiQVRINktMX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDZrbF91c2JfcHJvYmVcIixcbiAgICBcImF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NcIixcbiAgICBcImF0aDZrbF9zdGFydF9hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgd2hlbiBgYXItXFx1MDAzZW5vZGVfbnVtYCByZWFjaGVzIGBNQVhfTk9ERV9OVU1gLiBUaGUgYnVnIGlzIHJlYWNoYWJsZSBpbiBBUCBvciBBZC1Ib2MgKElCU1MpIG1vZGUgd2hlbiBzZW5kaW5nIHBhY2tldHMuIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGFuZCBjYW4gYmUgZnV6emVkIHZpYSBzeXprYWxsZXIncyBVU0IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODJhMjhkMTkxNmNiMTdkZWQxMDJlODFiZWE1MjFkMDkzZTAzNmUyOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjQxOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY1xuaW5kZXggZDgxODI1NDEzOTA2MS4uYjM0MGM3OTViN2EzMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY1xuQEAgLTY3LDEwICs2Nyw5IEBAIHN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGVwX21hcCA9PSAtMSkge1xuLVx0XHRlcF9tYXAgPSBhci1cdTAwM2Vub2RlX251bTtcbi1cdFx0YXItXHUwMDNlbm9kZV9udW0rKztcbi1cdFx0aWYgKGFyLVx1MDAzZW5vZGVfbnVtIFx1MDAzZSBNQVhfTk9ERV9OVU0pXG4rXHRcdGlmIChhci1cdTAwM2Vub2RlX251bSBcdTAwM2U9IE1BWF9OT0RFX05VTSlcbiBcdFx0XHRyZXR1cm4gRU5EUE9JTlRfVU5VU0VEO1xuK1x0XHRlcF9tYXAgPSBhci1cdTAwM2Vub2RlX251bSsrO1xuIFx0fVxuIFxuIFx0bWVtY3B5KGFyLVx1MDAzZW5vZGVfbWFwW2VwX21hcF0ubWFjX2FkZHIsIGV0aF9oZHItXHUwMDNlaF9kZXN0LCBFVEhfQUxFTik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MToxNC4zNDYwMjU1NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDc4MjQwNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBCdWcgRml4IGluIGF0aDZrbCdzIElCU1MgTWFwcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY2AsIHNwZWNpZmljYWxseSB0aGUgYGF0aDZrbF9pYnNzX21hcF9lcGlkYCBmdW5jdGlvbi4gVGhlIGNvZGUgY2hhbmdlIGlzIGEgbWlub3Igb25lLCBidXQgaXQgbG9va3MgbGlrZSBhIHBvdGVudGlhbCBjcml0aWNhbCBmaXguIEl0J3MgZXNzZW50aWFsbHkgcHJldmVudGluZyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBieSBjaGVja2luZyBpZiBgYXItXHUwMDNlbm9kZV9udW1gIGlzICphbHJlYWR5KiBhdCBgTUFYX05PREVfTlVNYCBiZWZvcmUgYXNzaWduaW5nIGl0LCBpbnN0ZWFkIG9mIGFzc2lnbmluZyBhbmQgdGhlbiBjaGVja2luZywgYW5kIHBvdGVudGlhbGx5IHdyYXBwaW5nLiBJIHN1c3BlY3QgaXQgd2FzIGNhdXNpbmcgYSBjcmFzaCBvciBkYXRhIGNvcnJ1cHRpb24gd2hlbiB0aGUgbm9kZSBjb3VudCBoaXRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUsIHdoaWNoIHdvdWxkIGJlIGJhZC5cblxuSG1tLCB0aGlzIGlzIGZvciB0aGUgYGF0aDZrbGAgZHJpdmVyLiBSaWdodCwgdGhhdCdzIHRoZSBBdGhlcm9zIEFSNjAwMyBhbmQgQVI2MDA0IFdpLUZpIGNoaXBzZXRzLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIG5vdyBpcywgY2FuIEkgYWN0dWFsbHkgKnRlc3QqIHRoaXMgZWZmZWN0aXZlbHk/IEhhcmR3YXJlIGRyaXZlcnMgbGlrZSB0aGlzIGFyZSBvZnRlbiBhIHBhaW4gdG8gZGVidWcgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJcyB0aGVyZSBhIHdheSB0byBkbyB0aGlzIGluIFFFTVUsIG9yIHdpbGwgSSBuZWVkIHBoeXNpY2FsIEFSNjAwMy9BUjYwMDQgaGFyZHdhcmU/IE1vc3Qgb2YgdGhlIHRpbWUsIEknZCBuZWVkIFNESU8gb3IgVVNCLlxuXG5XYWl0IGEgc2Vjb25k4oCmIEkgdGhpbmsgYGF0aDZrbGAgKmRvZXMqIGhhdmUgYSBVU0IgZHJpdmVyISBZZXAsIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jYC4gVGhhdOKAmXMgZ29vZCBuZXdzISBJZiBpdCdzIGdvdCBhIFVTQiBpbXBsZW1lbnRhdGlvbiwgdGhhdCBtZWFucyBzeXprYWxsZXIncyBVU0IgZnV6emluZyAoc3BlY2lmaWNhbGx5IHRoZSBgZHVtbXlfaGNkYCBzdXBwb3J0KSBtaWdodCBiZSBhcHBsaWNhYmxlIGhlcmUuIFRoYXQncyBhIGh1Z2Ugd2luIOKAkyBpdCBjb3VsZCBtYWtlIHRlc3RpbmcgdGhpcyBwYXRjaCBzaWduaWZpY2FudGx5IGVhc2llciwgYW5kIG1vcmUgc2NhbGFibGUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIFVTQiBwYXRoIGlzIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSBlbXVsYXRlZCwgYnV0IHRoaXMgaXMgYSBwcm9taXNpbmcgbGVhZC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgVVNCIGFzcGVjdCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDczLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MjAuODI0MjcwMTQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDEzNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9pYnNzX21hcF9lcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jPTM3PXN0YXRpYyBpbmxpbmUgdTggYXRoNmtsX2dldF9haWQodTggdGlkX211eClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjQyOnN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQzLVxcdFxcdFxcdCAgICAgICB1MzIgKm1hcF9ubylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jPTM1NT1uZXRkZXZfdHhfdCBhdGg2a2xfZGF0YV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDU0LVxcdGlmIChjaGtfYWRob2NfcHNfbWFwcGluZylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYzo0NTU6XFx0XFx0ZWlkID0gYXRoNmtsX2lic3NfbWFwX2VwaWQoc2tiLCBkZXYsIFxcdTAwMjZtYXBfbm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQ1Ni1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjIwLjg3NDI5NTMzOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzgyNDM1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgYXRoNmtsX2RhdGFfdHhgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYGF0aDZrbF9kYXRhX3R4YCBpcyB0aGUgbmV0d29yayBkcml2ZXIncyBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uIOKAkyB0aGUgY29yZSB0cmFuc21pdCBwYXRoLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBwaWVjaW5nIHRoaW5ncyB0b2dldGhlci4gVGhpcyBtZWFucyBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBtYXBwaW5nIG9yIHByZXBhcmluZyBkYXRhIGZvciB0cmFuc21pc3Npb24uXG5cblNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgYSBrZXkgZWxlbWVudCBpbiB0aGUgZGF0YSB0cmFuc21pc3Npb24gcHJvY2VzcywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IG9mIGBhdGg2a2xgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmc6IGlzIHRoaXMgYSBVU0IgZHJpdmVyPyBUaGlzIGluZm9ybWF0aW9uIHdpbGwgZ3JlYXRseSBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gY2FsbCwgYmVjYXVzZSBVU0IgaGFzIHBhcnRpY3VsYXIgcmVxdWlyZW1lbnRzIGFuZCBjb25zdHJhaW50cy4gSWYgaXQgKmlzKiBVU0IsIHRoYXQgcmFpc2VzIHNwZWNpZmljIHF1ZXN0aW9ucyBhYm91dCB0aGUgZGF0YSBmcmFtaW5nLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIGludGVycnVwdCBoYW5kbGluZyBpbnZvbHZlZC4gVW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBncmVhdGx5IGluZm9ybXMgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjI0LjAxMjU0MTQ0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM3NjY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfdXNiX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jPTEyMjU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0aDZrbF91c2JfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMjM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM6MTIzNjptb2R1bGVfdXNiX2RyaXZlcihhdGg2a2xfdXNiX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMjM3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MToyNC4wNjA5MjUzMDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMwMjYyNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGF0aDZrbCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgYXRoNmtsYCAqZG9lcyogaGF2ZSBhIFVTQiBkcml2ZXIuIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBvcGVucyBpdCB1cCB0byB0aGUgZnVsbCBzdWl0ZSBvZiBzeXprYWxsZXIncyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgZ29vZCBuZXdzLCBhIGRlZmluaXRlIGF2ZW51ZSB0byBleHBsb3JlIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgdGFyZ2V0aW5nIGl0cyBkYXRhIHRyYW5zbWlzc2lvbiBwYXRoLiBUaGUgZnVuY3Rpb24gYGF0aDZrbF9kYXRhX3R4YCBqdW1wcyBvdXQgYXMgdGhlIG9idmlvdXMgY2FuZGlkYXRlIGZvciBpbnRlbnNpdmUgZnV6emluZyBlZmZvcnRzLiBUaGF0IGZ1bmN0aW9uIGlzIHdoZXJlIEknbGwgY29uY2VudHJhdGUgbXkgaW5pdGlhbCBhdHRlbXB0cy4gTm93LCBsZXQncyBsb2NhdGUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSBmb3IgYGF0aDZrbGAsIHNvIEkgY2FuIHNlZSBob3cgaXQncyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIFRoYXQncyB0aGUgbmV4dCBzdGVwIHRvIGVuc3VyaW5nIG15IGZ1enppbmcgY29uZmlndXJhdGlvbiBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjIwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MjcuMTkxMTkxMTE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjMzMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEg2S0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZzoyOmNvbmZpZyBBVEg2S0xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBtb2JpbGUgY2hpcHNldHMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWc6MTQ6Y29uZmlnIEFUSDZLTF9TRElPXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDZrbCBTRElPIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjI1OmNvbmZpZyBBVEg2S0xfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDZrbCBVU0Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWc6MzU6Y29uZmlnIEFUSDZLTF9ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDZrbCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjQ1OmNvbmZpZyBBVEg2S0xfVFJBQ0lOR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy00Ni1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDZrbCB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctNTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjU3OmNvbmZpZyBBVEg2S0xfUkVHRE9NQUlOXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTU4LVxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoNmtsIHJlZ2RvbWFpbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MToyNy4yMzc4Mjk2MzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE1MTc5MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgdGhlIEFUSDZLTCBNb2R1bGVzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgQVRINktMYCBhbmQgYEFUSDZLTF9VU0JgIGFyZSBhdmFpbGFibGUuIEJlZm9yZSBJIHN0YXJ0IGRvd24gdGhhdCBwYXRoIHRob3VnaCwgSSBzaG91bGQgYWx3YXlzIGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQncyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rLiBUaGlzIGlzIHRoZSBiZXN0IHBsYWNlIHRvIGNvbmZpcm0gZXhhY3RseSB3aGljaCBvdGhlciBvcHRpb25zIGFyZSByZXF1aXJlZCBvciBtaWdodCBpbmZsdWVuY2UgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGVzZSBzcGVjaWZpYyBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbmRpdGlvbnMsIG5vdCBqdXN0IHRoZSBvYnZpb3VzIG9uZXMuIEEgdGhvcm91Z2ggS2NvbmZpZyBpbnNwZWN0aW9uIGlzIGNyaXRpY2FsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTozMC4yNTMwMTE4NzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuICAgMjpcXHRjb25maWcgQVRINktMXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBtb2JpbGUgY2hpcHNldHMgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBjb3JlIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uXFxuICAgNzpcXHRcXHQgIEF0aGVyb3MgQVI2MDAzIGFuZCBBUjYwMDQgY2hpcHNldHMuIFlvdSBzdGlsbCBuZWVkIHNlcGFyYXRlXFxuICAgODpcXHRcXHQgIGJ1cyBkcml2ZXJzIGZvciBVU0IgYW5kIFNESU8gdG8gYmUgYWJsZSB0byB1c2UgcmVhbCBkZXZpY2VzLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXFxuICAxMTpcXHRcXHQgIGF0aDZrbF9jb3JlLiBQbGVhc2Ugbm90ZSB0aGF0IEFSNjAwMiBhbmQgQVI2MDAxIGFyZSBub3RcXG4gIDEyOlxcdFxcdCAgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgQVRINktMX1NESU9cXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDZrbCBTRElPIHN1cHBvcnRcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIEFUSDZLTFxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBNTUNcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvblxcbiAgMjA6XFx0XFx0ICBBdGhlcm9zIEFSNjAwMyBhbmQgQVI2MDA0IGNoaXBzZXRzIHJ1bm5pbmcgb3ZlciBTRElPLiBJZiB5b3VcXG4gIDIxOlxcdFxcdCAgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdGg2a2xfc2Rpby5cXG4gIDIyOlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBBUjYwMDIgYW5kIEFSNjAwMSBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzXFxuICAyMzpcXHRcXHQgIGRyaXZlci5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIEFUSDZLTF9VU0JcXG4gIDI2OlxcdFxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDZrbCBVU0Igc3VwcG9ydFxcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQVRINktMXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIFVTQlxcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uXFxuICAzMTpcXHRcXHQgIEF0aGVyb3MgQVI2MDA0IGNoaXBzZXQgYW5kIGNoaXBzZXRzIGJhc2VkIG9uIGl0IHJ1bm5pbmcgb3ZlclxcbiAgMzI6XFx0XFx0ICBVU0IuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmVcXG4gIDMzOlxcdFxcdCAgY2FsbGVkIGF0aDZrbF91c2IuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBBVEg2S0xfREVCVUdcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoNmtsIGRlYnVnZ2luZ1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gQVRINktMXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZXMgYXRoNmtsIGRlYnVnIHN1cHBvcnQsIGluY2x1ZGluZyBkZWJ1ZyBtZXNzYWdlc1xcbiAgNDA6XFx0XFx0ICBlbmFibGVkIHdpdGggZGVidWdfbWFzayBtb2R1bGUgcGFyYW1ldGVyIGFuZCBkZWJ1Z2ZzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjMwLjI1MzA5NDk5NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMwODc4ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBXaXJlbGVzcyBEcml2ZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIHRoZSBjb3JlIGNvbXBvbmVudHM6IGBBVEg2S0xgLCBgQVRINktMX1VTQmAsIGBDRkc4MDIxMWAsIGFuZCwgb2J2aW91c2x5LCB0aGUgYFVTQmAgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgY29ubmVjdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWxsIHByZXNlbnQgYW5kIGFjY291bnRlZCBmb3IuIEhvbGQgb24sIHRob3VnaC4uLiB0aGlua2luZyBhYm91dCBpdCwgYE1BQzgwMjExYCBpc24ndCAqc3RyaWN0bHkqIHJlcXVpcmVkIGluIHRoZSBzYW1lIHdheSwgYnV0IGBDRkc4MDIxMWAgZGVmaW5pdGVseSBpcy4gSXQncyB0aGUgY29uZmlndXJhdGlvbiBsYXllciwgYW5kIEknZCBiZSBzdW5rIHdpdGhvdXQgaXQuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb246IGNhbiBJIHRyYWNlIHRoZSBkYXRhIHRyYW5zbWlzc2lvbiBwYXRoPyBTcGVjaWZpY2FsbHksIGlzIGBhdGg2a2xfZGF0YV90eGAgcmVhY2hhYmxlPyBBaCwgeWVzLCBvZiBjb3Vyc2UhIFRoYXQncyB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiBmb3IgdGhlIG5ldF9kZXZpY2UuIFRoYXQncyB0aGUgZ2F0ZXdheSBmb3IgZGF0YSBsZWF2aW5nIHRoZSBzeXN0ZW0uXG5cbkxldCdzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEknbGwgY2hlY2sgYGF0aDZrbF9pYnNzX21hcF9lcGlkYC4gSXQgbG9va3MgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGBhdGg2a2xfZGF0YV90eGAsIHNvIHRoYXQncyBhIGNydWNpYWwgbGluayBpbiB0aGUgY2hhaW4uXG5cbkZpbmFsbHksIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhdGg2a2xfZGF0YV90eGAgaXRzZWxmLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmNgIHRvIHNlZSBob3cgaXQgd29ya3MgdW5kZXIgdGhlIGhvb2QuIEl0J3MgdGltZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgZmxvdyBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY29ubmVjdGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjM1LjU4Mzk3NzIzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2Nzc4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoNmtsX2RhdGFfdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmg9OTE2PXZvaWQgYXRoNmtsX2ZyZWVfY29va2llKHN0cnVjdCBhdGg2a2wgKmFyLCBzdHJ1Y3QgYXRoNmtsX2Nvb2tpZSAqY29va2llKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaDo5MTc6bmV0ZGV2X3R4X3QgYXRoNmtsX2RhdGFfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtOTE4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM9ODY4PXZvaWQgYXRoNmtsX3BzcG9sbF9ldmVudChzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmLCB1OCBhaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYy05MTEtXFx0XFx0Y29ubi1cXHUwMDNlc3RhX2ZsYWdzIHw9IFNUQV9QU19QT0xMRUQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM6OTEyOlxcdFxcdGF0aDZrbF9kYXRhX3R4KHNrYiwgdmlmLVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYy05MTMtXFx0XFx0Y29ubi1cXHUwMDNlc3RhX2ZsYWdzIFxcdTAwMjY9IH5TVEFfUFNfUE9MTEVEO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM9OTI0PXZvaWQgYXRoNmtsX2R0aW1leHBpcnlfZXZlbnQoc3RydWN0IGF0aDZrbF92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTk1NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYzo5NTY6XFx0XFx0YXRoNmtsX2RhdGFfdHgoc2tiLCB2aWYtXFx1MDAzZW5kZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTk1Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jPTEyODM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhdGg2a2xfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTEyODUtXFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBhdGg2a2xfY2xvc2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM6MTI4NjpcXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IGF0aDZrbF9kYXRhX3R4LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTEyODctXFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSBhdGg2a2xfc2V0X2ZlYXR1cmVzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM9Mjg1PWludCBhdGg2a2xfY29udHJvbF90eCh2b2lkICpkZXZ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMzU0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjM1NTpuZXRkZXZfdHhfdCBhdGg2a2xfZGF0YV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTM1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz0xMjMxPXN0YXRpYyB2b2lkIGF0aDZrbF91YXBzZF90cmlnZ2VyX2ZyYW1lX3J4KHN0cnVjdCBhdGg2a2xfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xMjgwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjEyODE6XFx0XFx0YXRoNmtsX2RhdGFfdHgoc2tiLCB2aWYtXFx1MDAzZW5kZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTEyODItXFx0XFx0Y29ubi1cXHUwMDNlc3RhX2ZsYWdzIFxcdTAwMjY9IH4oU1RBX1BTX0FQU0RfVFJJR0dFUik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz0xMzAwPXZvaWQgYXRoNmtsX3J4KHN0cnVjdCBodGNfdGFyZ2V0ICp0YXJnZXQsIHN0cnVjdCBodGNfcGFja2V0ICpwYWNrZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xNDg1LVxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjb25uLVxcdTAwM2Vwc3FfbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MTQ4NjpcXHRcXHRcXHRcXHRcXHRhdGg2a2xfZGF0YV90eChza2J1ZmYsIHZpZi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTQ4Ny1cXHRcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXBzcV9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTE0OTItXFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXBzcV9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYzoxNDkzOlxcdFxcdFxcdFxcdFxcdGF0aDZrbF9kYXRhX3R4KHNrYnVmZiwgdmlmLVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xNDk0LVxcdFxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Y29ubi1cXHUwMDNlcHNxX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTU4OS1cXHRcXHRpZiAoc2tiMSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYzoxNTkwOlxcdFxcdFxcdGF0aDZrbF9kYXRhX3R4KHNrYjEsIHZpZi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTU5MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MzUuNjI4NjY4MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMDcxMjIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYW5zbWlzc2lvbiBGbG93KipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgYXRoNmtsX2RhdGFfdHhgIGlzIGRlZmluaXRpdmVseSB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlLiBJdCdzIHRoZSBwb2ludCBvZiBlbnRyeSBmb3Igb3V0Ym91bmQgZGF0YS4gR2l2ZW4gdGhhdCwgYW5kIGFmdGVyIHNvbWUgZGlnZ2luZywgdGhlIGxpa2VseSBzb3VyY2Ugb2YgdGhlIHByb2JsZW0gaXMgaW4gYGF0aDZrbF9pYnNzX21hcF9lcGlkYC4gTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGZ1bmN0aW9uIGFuZCBzZWUgaWYgdGhlIHJvb3QgY2F1c2UgaXMgbm93IG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5OTEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTozOC41NDkzODMzNjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RhdGljIHU4IGF0aDZrbF9pYnNzX21hcF9lcGlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICA0MzpcXHRcXHRcXHRcXHQgICAgICAgdTMyICptYXBfbm8pXFxuICA0NDpcXHR7XFxuICA0NTpcXHRcXHRzdHJ1Y3QgYXRoNmtsICphciA9IGF0aDZrbF9wcml2KGRldik7XFxuICA0NjpcXHRcXHRzdHJ1Y3QgZXRoaGRyICpldGhfaGRyO1xcbiAgNDc6XFx0XFx0dTMyIGksIGVwX21hcCA9IC0xO1xcbiAgNDg6XFx0XFx0dTggKmRhdGFwO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQqbWFwX25vID0gMDtcXG4gIDUxOlxcdFxcdGRhdGFwID0gc2tiLVxcdTAwM2VkYXRhO1xcbiAgNTI6XFx0XFx0ZXRoX2hkciA9IChzdHJ1Y3QgZXRoaGRyICopIChkYXRhcCArIHNpemVvZihzdHJ1Y3Qgd21pX2RhdGFfaGRyKSk7XFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfaGRyLVxcdTAwM2VoX2Rlc3QpKVxcbiAgNTU6XFx0XFx0XFx0cmV0dXJuIEVORFBPSU5UXzI7XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhci1cXHUwMDNlbm9kZV9udW07IGkrKykge1xcbiAgNTg6XFx0XFx0XFx0aWYgKG1lbWNtcChldGhfaGRyLVxcdTAwM2VoX2Rlc3QsIGFyLVxcdTAwM2Vub2RlX21hcFtpXS5tYWNfYWRkcixcXG4gIDU5OlxcdFxcdFxcdFxcdCAgIEVUSF9BTEVOKSA9PSAwKSB7XFxuICA2MDpcXHRcXHRcXHRcXHQqbWFwX25vID0gaSArIDE7XFxuICA2MTpcXHRcXHRcXHRcXHRhci1cXHUwMDNlbm9kZV9tYXBbaV0udHhfcGVuZCsrO1xcbiAgNjI6XFx0XFx0XFx0XFx0cmV0dXJuIGFyLVxcdTAwM2Vub2RlX21hcFtpXS5lcF9pZDtcXG4gIDYzOlxcdFxcdFxcdH1cXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0XFx0aWYgKChlcF9tYXAgPT0gLTEpIFxcdTAwMjZcXHUwMDI2ICFhci1cXHUwMDNlbm9kZV9tYXBbaV0udHhfcGVuZClcXG4gIDY2OlxcdFxcdFxcdFxcdGVwX21hcCA9IGk7XFxuICA2NzpcXHRcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGlmIChlcF9tYXAgPT0gLTEpIHtcXG4gIDcwOlxcdFxcdFxcdGlmIChhci1cXHUwMDNlbm9kZV9udW0gXFx1MDAzZT0gTUFYX05PREVfTlVNKVxcbiAgNzE6XFx0XFx0XFx0XFx0cmV0dXJuIEVORFBPSU5UX1VOVVNFRDtcXG4gIDcyOlxcdFxcdFxcdGVwX21hcCA9IGFyLVxcdTAwM2Vub2RlX251bSsrO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRtZW1jcHkoYXItXFx1MDAzZW5vZGVfbWFwW2VwX21hcF0ubWFjX2FkZHIsIGV0aF9oZHItXFx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRmb3IgKGkgPSBFTkRQT0lOVF8yOyBpIFxcdTAwM2M9IEVORFBPSU5UXzU7IGkrKykge1xcbiAgNzg6XFx0XFx0XFx0aWYgKCFhci1cXHUwMDNldHhfcGVuZGluZ1tpXSkge1xcbiAgNzk6XFx0XFx0XFx0XFx0YXItXFx1MDAzZW5vZGVfbWFwW2VwX21hcF0uZXBfaWQgPSBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTozOC41NDk5NDgwOTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgyNDQzOTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCdWcgQW5hbHlzaXMgYW5kIEZpeCBmb3IgYXRoNmtsIERyaXZlcioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3YXM6IGlmIGBhci1cdTAwM2Vub2RlX251bWAgaGl0cyBgTUFYX05PREVfTlVNYCwgdGhlIGNvZGUgY29ycmVjdGx5IGhhbmRsZXMgcmV0dXJuaW5nIGBFTkRQT0lOVF9VTlVTRURgLiBUaGUgcHJvYmxlbSBkaWRuJ3Qgc2VlbSBpbW1lZGlhdGVseSBvYnZpb3VzLiBJdCBsb29rZWQgbGlrZSBhbiBlZGdlIGNhc2UgaGFuZGxlZCBjb3JyZWN0bHkuIFRoZW4sIEkgZHVnIGRlZXBlciBhbmQgY29uc2lkZXJlZCB0aGUgc2NlbmFyaW8gd2hlbiBgYXItXHUwMDNlbm9kZV9udW1gIHN0YXJ0cyBhdCBgTUFYX05PREVfTlVNIC0gMWAuIEluIHRoYXQgY2FzZSwgYGVwX21hcGAgYmVjb21lcyBgTUFYX05PREVfTlVNIC0gMWAgYW5kIGBhci1cdTAwM2Vub2RlX251bWAgYmVjb21lcyBgTUFYX05PREVfTlVNYCwgYW5kIHRoaW5ncyAqYXBwZWFyZWQqIGZpbmUuIFRoZSBjb25kaXRpb25hbCBjaGVjayB3b3VsZCBiZSBmYWxzZSwgc28gdGhlIGNvZGUgd291bGQgcHJvY2VlZC4gSG93ZXZlciwgSSByZWFsaXplZCB0aGUgcHJvYmxlbSB3YXNuJ3QgaW4gdGhlIGltbWVkaWF0ZSBgaWZgIHN0YXRlbWVudCBpdHNlbGYsIGJ1dCB3aGF0IGhhcHBlbmVkICphZnRlciogaXQgaW4gc3Vic2VxdWVudCBjYWxscy4gYGFyLVx1MDAzZW5vZGVfbnVtYCBnZXRzIGluY3JlbWVudGVkIGV2ZW4gd2hlbiBgRU5EUE9JTlRfVU5VU0VEYCBpcyByZXR1cm5lZCEgVGhpcyBpcyB3aGVyZSBpdCBoaXQgbWU6IHRoZSBsb29wIGl0ZXJhdGluZyBvbiBgYXItXHUwMDNlbm9kZV9udW1gIHdvdWxkIHJ1biB1cCB0byBgTUFYX05PREVfTlVNYCwgYnV0IGBhci1cdTAwM2Vub2RlX21hcGAgb25seSBoYXMgYE1BWF9OT0RFX05VTWAgZWxlbWVudHMuIFRoYXQgbWVhbnMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBmaXggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogcHJldmVudCB0aGUgaW5jcmVtZW50IGlmIHRoZSBub2RlIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYnVnIGFuZCBsZWFkcyB0byBhIGNyaXRpY2FsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCwgdW5kZXIgdGhlIHJpZ2h0IGNvbmRpdGlvbnMsIGNvdWxkIGJlIGV4cGxvaXRlZC4gVGhlIGRyaXZlciBpcyBgYXRoNmtsYCwgYW5kIGl0J3MgdXNpbmcgYSBVU0IgaW50ZXJmYWNlLiBXZSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRvIHRhcmdldCB0aGlzLlxuXG5UaGUgdnVsbmVyYWJsZSBmdW5jdGlvbiBpcyBgYXRoNmtsX2lic3NfbWFwX2VwaWRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYXRoNmtsX2RhdGFfdHhgLiBgYXRoNmtsX2RhdGFfdHhgIGlzIHRoZSBuZXR3b3JrIGRyaXZlcidzIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb24sIHNvIGl0J3MgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdHJhbnNtaXR0aW5nIHBhY2tldHMsIGltcGx5aW5nIHRoYXQgaWYgdGhlIGNvbmRpdGlvbiB0cmlnZ2VyaW5nIHRoZSBidWcgY2FuIGJlIGFjaGlldmVkLCB3ZSd2ZSBnb3QgYSByZWFjaGFibGUgcGF0aC4gVG8gdHJpZ2dlciB0aGlzLCB3ZSdsbCBuZWVkIHBhY2tldHMgdG8gYmUgc2VudCB0aHJvdWdoIHRoZSBuZXR3b3JrIGRldmljZSwgd2hpY2ggaXMgY3JlYXRlZCB3aGVuIHRoZSBVU0IgZGV2aWNlIGlzIHByb2JlZC4gU28sIGBBVEg2S0xgIGFuZCBgQVRINktMX1VTQmAgbmVlZCB0byBiZSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBBbHNvLCB3ZSdsbCBuZWVkIGBDRkc4MDIxMWAgYW5kIGBVU0JgLiBJIHRoZW4gc3RhcnRlZCB0aGlua2luZyBhYm91dCBhIGdvb2Qgd2F5IHRvIGZvY3VzIHRoZSBmdXp6aW5nLiBgYXRoNmtsX2RhdGFfdHhgIGlzIHRlbXB0aW5nLCBidXQgdGhhdCdzIGEgKmhvdCogcGF0aCBhbmQgdGhhdCdzIGRpc2NvdXJhZ2VkLCBidXQgdGhpcyBpcyBhIGhvdCBwYXRoIGZ1bmN0aW9uIChgbmRvX3N0YXJ0X3htaXRgKS4gSG93ZXZlciwgYGF0aDZrbF9pYnNzX21hcF9lcGlkYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGBjaGtfYWRob2NfcHNfbWFwcGluZ2AgaXMgdHJ1ZSwgc28gdGhhdCdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6NDguMzc0MzkzOTYxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDgzMDU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGtfYWRob2NfcHNfbWFwcGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz0zNTU9bmV0ZGV2X3R4X3QgYXRoNmtsX2RhdGFfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTM2My1cXHR1OCBhYyA9IDk5OyAvKiBpbml0aWFsaXplIHRvIHVubWFwcGVkIGFjICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MzY0OlxcdGJvb2wgY2hrX2FkaG9jX3BzX21hcHBpbmcgPSBmYWxzZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0zNjUtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQzOC1cXHRcXHQgICAgYXItXFx1MDAzZWlic3NfcHNfZW5hYmxlIFxcdTAwMjZcXHUwMDI2IHRlc3RfYml0KENPTk5FQ1RFRCwgXFx1MDAyNnZpZi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjQzOTpcXHRcXHRcXHRjaGtfYWRob2NfcHNfbWFwcGluZyA9IHRydWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDQwLVxcdFxcdGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDUzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjQ1NDpcXHRpZiAoY2hrX2FkaG9jX3BzX21hcHBpbmcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDU1LVxcdFxcdGVpZCA9IGF0aDZrbF9pYnNzX21hcF9lcGlkKHNrYiwgZGV2LCBcXHUwMDI2bWFwX25vKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6NDguNDU1MjMwMjg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDQ4NTA0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIERhdGEgUGF0aCoqXG5cbk9rYXksIEknbSB0cmFjaW5nIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGlzc3VlIGlzIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgZGF0YSBwYXRoLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgc3ltcHRvbS4gTm93LCB3aGVyZSBpcyB0aGUgVVNCIHByb2JlIGZ1bmN0aW9uIHNpdHVhdGVkIHdpdGhpbiB0aGlzIHNldHVwPyBSaWdodCwgdGhhdCdzIGBhdGg2a2xfdXNiX3Byb2JlYC4gTGV0IG1lIGp1c3QgcmVmcmVzaCBteSBtZW1vcnkg4oCTIEkgYmVsaWV2ZSB0aGF0J3MgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmNgLCBjb3JyZWN0PyBHb29kLCB0aGF0IGNvbmZpcm1zIGl0LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gYGF0aDZrbF91c2JfcHJvYmVgIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgdGhlIHJvb3QgY2F1c2Ugd2l0aGluIHRoYXQgZnVuY3Rpb24gaXRzZWxmLiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODI5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6NTIuMjAwMDgzODc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkwMTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGg2a2xfdXNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM9MTEwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDZrbF9oaWZfb3BzIGF0aDZrbF91c2Jfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTE3LS8qIGF0aDZrbCB1c2IgZHJpdmVyIHJlZ2lzdGVyZWQgZnVuY3Rpb25zICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYzoxMTE4OnN0YXRpYyBpbnQgYXRoNmtsX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmMtMTExOS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYz0xMjI1PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGg2a2xfdXNiX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jLTEyMjYtXFx0Lm5hbWUgPSBcXFwiYXRoNmtsX3VzYlxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYzoxMjI3OlxcdC5wcm9iZSA9IGF0aDZrbF91c2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMjI4LVxcdC5zdXNwZW5kID0gYXRoNmtsX3VzYl9wbV9zdXNwZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTo1Mi4yNDU5OTM5MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4NzAwNzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQXRoZXJvcyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhdGg2a2xgIFVTQiBkcml2ZXIuIFRoZSBvYnZpb3VzIGVudHJ5IHBvaW50IGlzIGBhdGg2a2xfdXNiX3Byb2JlYCwgdGhhdCdzIHdoZXJlIGV2ZXJ5dGhpbmcgcHJvYmFibHkgc3RhcnRzIG9uIHRoZSBVU0Igc2lkZS4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHRoZXJlLiBLbm93aW5nIGhvdyB0aGVzZSB0aGluZ3MgdGVuZCB0byB3b3JrLCBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgYXRoNmtsX2NvcmVfaW5pdGAgb3IgcG90ZW50aWFsbHkgYGF0aDZrbF9pbml0X2h3X3N0YXJ0YCwgYXMgdGhvc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIG9yIGhhcmR3YXJlIGJyaW5nLXVwLiBUaGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgYXJlIHByb2JhYmx5IHR1Y2tlZCBhd2F5IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2luaXQuY2Agb3IgcGVyaGFwcyBgY29yZS5jYC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aG9zZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTo1NS44MzMwMDQ2NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDk1Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9jb3JlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmM9NjQ9RVhQT1JUX1NZTUJPTChhdGg2a2xfY29yZV9yeF9jb21wbGV0ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmMtNjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmM6NjY6aW50IGF0aDZrbF9jb3JlX2luaXQoc3RydWN0IGF0aDZrbCAqYXIsIGVudW0gYXRoNmtsX2h0Y190eXBlIGh0Y190eXBlKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5jLTY3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5jLTI2NC19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmM6MjY1OkVYUE9SVF9TWU1CT0woYXRoNmtsX2NvcmVfaW5pdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmMtMjY2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmg9OTc5PXN0cnVjdCBhdGg2a2wgKmF0aDZrbF9jb3JlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjk4MDppbnQgYXRoNmtsX2NvcmVfaW5pdChzdHJ1Y3QgYXRoNmtsICphciwgZW51bSBhdGg2a2xfaHRjX3R5cGUgaHRjX3R5cGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTk4MS12b2lkIGF0aDZrbF9jb3JlX2NsZWFudXAoc3RydWN0IGF0aDZrbCAqYXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9zZGlvLmM9MTMwNj1zdGF0aWMgaW50IGF0aDZrbF9zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3NkaW8uYy0xMzcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvc2Rpby5jOjEzNzI6XFx0cmV0ID0gYXRoNmtsX2NvcmVfaW5pdChhciwgQVRINktMX0hUQ19UWVBFX01CT1gpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvc2Rpby5jLTEzNzMtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYz0xMTE4PXN0YXRpYyBpbnQgYXRoNmtsX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTYxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM6MTE2MjpcXHRyZXQgPSBhdGg2a2xfY29yZV9pbml0KGFyLCBBVEg2S0xfSFRDX1RZUEVfUElQRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTYzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6NTUuODgxNTA2NjQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzkwMTg3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBhdGg2a2wgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBhdGg2a2xgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGZvciBhbmFseXNpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgYXRoNmtsX2NvcmVfaW5pdGAgaXMgYSB2ZXJ5IGxpa2VseSBzdGFydGluZyBwb2ludCDigJMgaXQncyBvZnRlbiB0aGUgcm9vdCBvZiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBTaW1pbGFybHksIGBhdGg2a2xfdXNiX3Byb2JlYCBtYWtlcyBzZW5zZSwgYXNzdW1pbmcgaXQncyBhIFVTQiBkZXZpY2UuIEdvdHRhIGNoZWNrIHRob3NlIG91dC5cblxuTm93LCBhIGZ1bmN0aW9uIGxpa2UgYGF0aDZrbF9pYnNzX21hcF9lcGlkYCAqbG9va3MqIHJlbGV2YW50LCBidXQgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgd2hlbiBJJ20gbG9va2luZyBmb3IgZW50cnkgcG9pbnRzIG9yIHB1YmxpY2x5IGFjY2Vzc2libGUgc3ltYm9scy4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW50ZXJuYWwgdG8gYSBwYXJ0aWN1bGFyIGZpbGUuIEkgc2hvdWxkIGV4Y2x1ZGUgdGhhdCBmcm9tIG15IGRpcmVjdCBmb2N1cy5cblxuQW5kIHRoZW4gSSBjb25zaWRlcmVkIGBhdGg2a2xfZGF0YV90eGAsIGJ1dCB0aGF0J3MgYWxtb3N0IGNlcnRhaW5seSBhIGhvdC1wYXRoIGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uLiBXZSBkb24ndCB3YW50IHRvIGdldCBib2dnZWQgZG93biBpbiB0aGUgbWludXRpYWUgb2YgZGF0YSBoYW5kbGluZyBhdCB0aGlzIHN0YWdlOyBpdCdzIHRvbyBncmFudWxhci4gTGV0J3Mga2VlcCB0aGF0IGluIG1pbmQgZm9yIGxhdGVyLCBidXQgYXZvaWQgaXQgZm9yIG5vdy5cblxuVGhlIHJlYWwga2V5IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgSUJTUyBtb2RlIGlzIGNvbmZpZ3VyZWQuIFNvLCBJIG5lZWQgdG8gaHVudCBkb3duIGEgY29uZmlndXJhdGlvbiBmdW5jdGlvbiwgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgYXRoNmtsX2NmZzgwMjExX2FkZF9pZmFjZWAsIG9yIHNpbWlsYXIgbmFtaW5nLiBUaGF0J3Mgd2hlcmUgdGhlIGNvbnRyb2wgcGxhbmUgd2lsbCBsaXZlLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2suIEknbGwgZm9jdXMgbXkgZWZmb3J0cyB0aGVyZSwgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzAzLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQyOjAwLjQyMDUyOTAwNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxODM1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoNmtsX2NmZzgwMjExX2FkZF9pZmFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MTQ4Mj1zdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTE1MTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjE1MTM6c3RhdGljIHN0cnVjdCB3aXJlbGVzc19kZXYgKmF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTUxNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTM0NDA9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYXRoNmtsX2NmZzgwMjExX29wcyA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MzQ0MTpcXHQuYWRkX3ZpcnR1YWxfaW50ZiA9IGF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NDItXFx0LmRlbF92aXJ0dWFsX2ludGYgPSBhdGg2a2xfY2ZnODAyMTFfZGVsX2lmYWNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MjowMC40NzA3MjI3NDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MTQwNDIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgSW50ZXJmYWNlIENyZWF0aW9uIGZvciBJQlNTIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBoYW5kbGUgdGhlIElCU1MgbW9kZSBpbnRlcmZhY2UgY3JlYXRpb24gd2l0aGluIHRoZSBgYXRoNmtsYCBkcml2ZXIuIFRoaW5raW5nIHRoaXMgdGhyb3VnaCwgYGF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2VgIGp1bXBzIG91dCBhcyBhIHN0cm9uZyBwb3NzaWJpbGl0eS4gSXQncyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yICphZGRpbmcqIHRoZSBpbnRlcmZhY2UsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIHBvaW50IHdoZXJlIElCU1MgbW9kZSBjb25maWd1cmF0aW9uIG1ha2VzIHRoZSBtb3N0IHNlbnNlLiBUaGlzIGZ1bmN0aW9uIHdvdWxkIG5lZWQgdG8gcHJvdmlkZSB0aGUgc3VwcG9ydCBuZWVkZWQgdG8gY3JlYXRlIGFuIGludGVyZmFjZSBpbiBJQlNTIG1vZGUuXG5cbk5vdywgd2hpbGUgYGF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2VgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgc3BvdCwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2VgIHRvIGJlIHN1cmUuIEl0IGhhbmRsZXMgaW50ZXJmYWNlICpjaGFuZ2VzKiwgYW5kIGl0J3MgcGxhdXNpYmxlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgb3ZlcmxhcCBvciBkZXBlbmRlbmNpZXMgdGhlcmUuIEkgc2hvdWxkIGNoZWNrIGlmIGl0IG5lZWRzIHRvIGJlIHVwZGF0ZWQgb3IgaWYgdGhlIGNoYW5nZSB0aGF0IGhhcyB0byBiZSBtYWRlIHNob3VsZCBiZSBtYWRlIGluIHRoaXMgZnVuY3Rpb24gb3IgaWYgdGhlcmUgYXJlIGFueSBjb25mbGljdHMuIEEgdGhvcm91Z2ggcmV2aWV3IG9mIGJvdGggaXMgbGlrZWx5IHRoZSBiZXN0IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTM5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDI6MDQuODIyMTI5NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzM2NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTE1NDI9c3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfZGVsX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTU2MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MTU2MTpzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTU2Mi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYz0zNDQwPXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIGF0aDZrbF9jZmc4MDIxMV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ0Mi1cXHQuZGVsX3ZpcnR1YWxfaW50ZiA9IGF0aDZrbF9jZmc4MDIxMV9kZWxfaWZhY2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjM0NDM6XFx0LmNoYW5nZV92aXJ0dWFsX2ludGYgPSBhdGg2a2xfY2ZnODAyMTFfY2hhbmdlX2lmYWNlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0zNDQ0LVxcdC5zY2FuID0gYXRoNmtsX2NmZzgwMjExX3NjYW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQyOjA0Ljg3NTQ3NjU1OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc2ODU4Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipDb25zaWRlcmluZyBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBhbmQgSUJTUyBKb2luaW5nKipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUsIGBhdGg2a2xfY2ZnODAyMTFfY2hhbmdlX2lmYWNlYCBjYXRjaGVzIG15IGV5ZS4gSXQgc2VlbXMgbGlrZSBhIHN0cm9uZyBjb250ZW5kZXIgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBJJ20gZGVhbGluZyB3aXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIGFzc2VzcyB3aGF0IGl0IGRvZXMgdG8gcG90ZW50aWFsbHkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvdXIgSSdtIGN1cnJlbnRseSBvYnNlcnZpbmcuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgYnJvYWRlciB3b3JrZmxvdyBJIG1pZ2h0IGFzIHdlbGwgY29uc2lkZXIgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgIGF0IHRoZSBzYW1lIHRpbWUuIFRoZSBJQlNTIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBpcyBhIHdlbGwtdHJvZGRlbiBwYXRoLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGV0aGVyIHRoaXMgZml0cyBpbnRvIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBjb2RlLiBMZXQncyBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoaXMgb3ZlcmFsbCBwaWN0dXJlLCBhbmQgaG93IHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgaW50ZXJmYWNlIGpvaW4gcHJvY2Vzcy4gSXQncyBpbXBvcnRhbnQgdG8ga2VlcCBhbiBvcGVuIG1pbmQgdG8gc2VlIGhvdyBib3RoIHRpZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzMsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MjowOC4wNTIzMzg2MDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjI0Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTE1NjE9c3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfY2hhbmdlX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTYyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MTYyNDpzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTYyNS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MzQ0MD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBhdGg2a2xfY2ZnODAyMTFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NTQtXFx0LnNldF9wb3dlcl9tZ210ID0gYXRoNmtsX2NmZzgwMjExX3NldF9wb3dlcl9tZ210LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYzozNDU1OlxcdC5qb2luX2lic3MgPSBhdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0zNDU2LVxcdC5sZWF2ZV9pYnNzID0gYXRoNmtsX2NmZzgwMjExX2xlYXZlX2lic3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQyOjA4LjEwMDU2OTc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mjg0MDI5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgQnVnIExvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGlzIGlzc3VlLiBCYXNlZCBvbiB3aGF0IEkndmUgc2VlbiwgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgIGlzIGxvb2tpbmcgbGlrZSBhIHByaW1lIHN1c3BlY3QuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGF0IHRoZSBidWcgYXBwZWFycyB0byBiZSByb290ZWQgd2l0aGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAuIE15IGd1dCdzIHRlbGxpbmcgbWUgdG8gaW52ZXN0aWdhdGUgdGhlIGNvbm5lY3Rpb24gYW5kIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgY2xvc2VseS4gV2hhdCdzIHRoZSBzdGF0ZSBvbiB0aGUgY29ubmVjdGlvbiBhdCB0aG9zZSBtb21lbnRzP1xuXG5Ob3csIEkgbmVlZCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZSBhbmQgZ2V0IGFsbCB0aGUgY29udGV4dC4gTGV0J3MgbWFrZSBzdXJlIG5vdGhpbmcgb2J2aW91cyBpcyBoYXBwZW5pbmcgd2hlbiB0aGUgSUJTUyBpcyBsZWZ0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0ZWQgZnVuY3Rpb24gYW5kIGV4YW1pbmUgYGF0aDZrbF9jZmc4MDIxMV9sZWF2ZV9pYnNzYC4gSSdsbCB0cmFjZSB3aGF0IGhhcHBlbnMgdGhlcmUgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuIEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGJlIHJlbGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTY1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDI6MTEuNzI4OTc1NzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODkzMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9jZmc4MDIxMV9sZWF2ZV9pYnNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYz0xNjI0PXN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTE2OTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjE2OTQ6c3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0xNjk1LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MzQ0MD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBhdGg2a2xfY2ZnODAyMTFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NTUtXFx0LmpvaW5faWJzcyA9IGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjM0NTY6XFx0LmxlYXZlX2lic3MgPSBhdGg2a2xfY2ZnODAyMTFfbGVhdmVfaWJzcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ1Ny1cXHQuZ2V0X3N0YXRpb24gPSBhdGg2a2xfZ2V0X3N0YXRpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQyOjExLjc3Njg3NDMwOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQxMDY2OTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgYXRoNmtsYCBEcml2ZXIgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoaXMgYGF0aDZrbGAgZHJpdmVyLCBjb25zaWRlcmluZyB0aGUgYnVnIHJlcG9ydCBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3QuXG5cbkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMuIEJhc2VkIG9uIHRoZSBhbmFseXNpcywgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgYXRoNmtsX3VzYl9wcm9iZWAsIGBhdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzYCwgYW5kIGBhdGg2a2xfY2ZnODAyMTFfYWRkX2lmYWNlYC4gVGhlc2UgYXJlIGxpa2VseSB0byBiZSBjcml0aWNhbCBmb3IgZXhlcmNpc2luZyB0aGUgdnVsbmVyYWJsZSBjb2RlIHBhdGguXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGxpa2UgSSBuZWVkIGBBVEg2S0xgIGFuZCBgQVRINktMX1VTQmAgZW5hYmxlZC4gSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBkZXBlbmRlbmNpZXMuIGBBVEg2S0xgIG5lZWRzIGBDRkc4MDIxMWAsIGFuZCBgQVRINktMX1VTQmAgZGVwZW5kcyBvbiBib3RoIGBBVEg2S0xgIGFuZCBgVVNCYC4gR290IGl0LiBTbyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdG8gaGF2ZSBlbmFibGVkLlxuXG5UaGUgYnVnLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgd2l0aGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAuIEl0J3MgdHJpZ2dlcmVkIHdoZW4gYGNoa19hZGhvY19wc19tYXBwaW5nYCBpcyB0cnVlLCB3aGljaCBvY2N1cnMgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGluIEFQIG1vZGUgb3IgQWQtSG9jIChJQlNTKSBtb2RlICphbmQqIHBhY2tldHMgYXJlIGJlaW5nIHNlbnQuIFRoZSB2dWxuZXJhYmlsaXR5IGFyaXNlcyBmcm9tIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIHdoZXJlIGBhci1cdTAwM2Vub2RlX251bWAgZXhjZWVkcyBgTUFYX05PREVfTlVNYC5cblxuVGhpcyBpcyBzaWduaWZpY2FudC4gVGhlIGJ1ZyBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBib3RoIEFQIGFuZCBJQlNTIG1vZGVzLCB3aGljaCBpbmNyZWFzZXMgaXRzIHByYWN0aWNhbCBpbXBvcnRhbmNlLiBUaGUgZmFjdCB0aGF0IHRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGFuZCBzeXprYWxsZXIncyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMgaXMgYSBtYWpvciBhZHZhbnRhZ2UuXG5cbk9rYXksIGxldCdzIHB1dCBpdCBhbGwgdG9nZXRoZXIgaW50byBhIGNsZWFyIHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBZZXMsIGFic29sdXRlbHkuXG4qICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBjcml0aWNhbCBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBpbiBgYXRoNmtsX2lic3NfbWFwX2VwaWRgLiBUaGlzIGlzc3VlIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBvcGVyYXRpbmcgaW4gQVAgbW9kZSBvciBBZC1Ib2MgKElCU1MpIG1vZGUgd2hpbGUgdHJhbnNtaXR0aW5nIHBhY2tldHMuIFN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhbiBiZSB1c2VkIHRvIHRlc3QgdGhlIGRyaXZlciwgYW5kIGl0cyBVU0IgY2FwYWJpbGl0aWVzIHByb3ZpZGUgYSBtZWFucyB0byBhY2hpZXZlIHRoaXMuXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYGF0aDZrbF91c2JfcHJvYmVgLCBgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc2AsIGBhdGg2a2xfY2ZnODAyMTFfYWRkX2lmYWNlYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgQVRINktMYCwgYEFUSDZLTF9VU0JgXG5cbk9uZSBsYXN0IHRoaW5nLCBzaW5jZSBBUCBtb2RlIGlzIG1lbnRpb25lZCwgSSBzaG91bGQgYWxzbyBjb25zaWRlciBgYXRoNmtsX2NmZzgwMjExX3N0YXJ0X2FwYCBhcyBhIHBvdGVudGlhbCBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQzLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjIwLjE4NzU0ODc4M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3MDg4MTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9jZmc4MDIxMV9zdGFydF9hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDM6MjAuMjM5MjgyMTAyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzQxNDYxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIGhvdyBBUCBtb2RlIGlzIHN0YXJ0ZWQgaW4gYXRoNmtsOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIEF0aDZrbCBBUCBNb2RlIEluaXRpYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgQVAgbW9kZSBpcyBpbml0aWF0ZWQgd2l0aGluIHRoZSBhdGg2a2wgZHJpdmVyLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIGRyaXZlciBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBzb2Z0bWFjIHN0YXRlIHRvIHB1dCB0aGUgaGFyZHdhcmUgaW50byBBUCBtb2RlLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2hlcmUqIGluIHRoZSBjb2RlIGRvZXMgdGhpcyBoYXBwZW4uIElzIGl0IHRyaWdnZXJlZCBieSBhIGNvbW1hbmQgZnJvbSB1c2Vyc3BhY2UsIG9yIHBlcmhhcHMgYXV0b21hdGljYWxseSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gc29tZSBjb25maWd1cmF0aW9uPyBJcyB0aGVyZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZWRpY2F0ZWQgdG8gaXQgb3IgaXMgaXQgaW50ZWdyYXRlZCBpbnRvIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBmbG93PyBJdCdzIHByb2JhYmx5IHdvcnRoIGxvb2tpbmcgYXQgdGhlIGRyaXZlcidzIGVudHJ5IHBvaW50cyBhbmQgY29uZmlndXJhdGlvbiByb3V0aW5lcyBmaXJzdC4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB1c2VkIHRvIGRldGVybWluZSB0aGUgZXhhY3Qgc3RlcHMgaW52b2x2ZWQuIEtub3dpbmcgdGhlIGludGVyYWN0aW9uIHdpbGwgYXNzaXN0IGluIGtub3dpbmcgd2hlcmUgdG8gYmVnaW4gbWFraW5nIGNoYW5nZXMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGZvciBob3cgdGhpcyBtaWdodCBkaWZmZXIgZnJvbSBzdGF0aW9uIG1vZGUgYXMgdGhpcyB3b3VsZCBsaWtlbHkgaW52b2x2ZSBkaWZmZXJpbmcgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDI2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDM6MjUuNzczNDMzMjAzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc4MDg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF9hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MjcxNT1zdGF0aWMgaW50IGF0aDZrbF9nZXRfcnNuX2NhcGFiKHN0cnVjdCBjZmc4MDIxMV9iZWFjb25fZGF0YSAqYmVhY29uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTI3NjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjI3Njc6c3RhdGljIGludCBhdGg2a2xfc3RhcnRfYXAoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMjc2OC1cXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfYXBfc2V0dGluZ3MgKmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MzQ0MD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBhdGg2a2xfY2ZnODAyMTFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NjUtI2VuZGlmXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjM0NjY6XFx0LnN0YXJ0X2FwID0gYXRoNmtsX3N0YXJ0X2FwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0zNDY3LVxcdC5jaGFuZ2VfYmVhY29uID0gYXRoNmtsX2NoYW5nZV9iZWFjb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjI1LjgyNDIxOTM5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDAxNzM5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgYXRoNmtsYCBNb2R1bGUgQ29uZmlndXJhdGlvbiBhbmQgQnVnIEZpeCoqXG5cbk9rYXksIGxldCdzIGdldCBzdGFydGVkLiBGaXJzdCwgSSdtIGFkZGluZyBgYXRoNmtsX3N0YXJ0X2FwYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdC4gTG9va2luZyBhdCB0aGUgZXhpc3RpbmcgbGlzdCwgaXQnczogYGF0aDZrbF91c2JfcHJvYmVgLCBgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc2AsIGFuZCBub3cgYGF0aDZrbF9zdGFydF9hcGAuIEkganVzdCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBzdGF0aWMuIFllcywgaXQgaXMgc3RhdGljIGJ1dCBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYGNmZzgwMjExX29wc2AuIEFoYSEgVGhhdCBtZWFucyBpdCB3b24ndCBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIGl0J3MgcGVyZmVjdGx5IHN1aXRhYmxlIGZvciBGb2N1c1N5bWJvbHMuIFRoYXQgYXBwbGllcyB0byBgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc2AgYW5kIGBhdGg2a2xfdXNiX3Byb2JlYCBhcyB3ZWxsLlxuXG5Ob3csIG9uIHRvIHRoZSBFbmFibGVDb25maWdzLiBJIHNlZSBgQVRINktMYCBhbmQgYEFUSDZLTF9VU0JgLiBTaG91bGQgSSBpbmNsdWRlIGBDRkc4MDIxMWAgYW5kIGBVU0JgPyBXaGlsZSBgQ0ZHODAyMTFgIGFuZCBgVVNCYCBhcmUgb2Z0ZW4gc3RhbmRhcmQsIEkgbmVlZCB0byBsaXN0IGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZCBmb3IgS2J1aWxkLiBgQVRINktMYCBhbmQgYEFUSDZLTF9VU0JgIGFyZSB0aGUgc3BlY2lmaWMgb25lcywgc28gSSdsbCBzdGljayB3aXRoIHRob3NlLlxuXG5GaW5hbGx5LCB0aGUgYnVnIGZpeC4gTGV0IG1lIHdhbGsgdGhyb3VnaCBpdC5cblxuVGhlIG9yaWdpbmFsIGNvZGUgaGFkIHRoaXMgcG90ZW50aWFsIGlzc3VlOiBpZiBgYXItXHUwMDNlbm9kZV9udW1gIHdhcyBlcXVhbCB0byBgTUFYX05PREVfTlVNYCwgdGhlIG9sZCBjb2RlIHdvdWxkIHNldCBgZXBfbWFwYCB0byBgTUFYX05PREVfTlVNYCwgaW5jcmVtZW50IGBhci1cdTAwM2Vub2RlX251bWAgdG8gYE1BWF9OT0RFX05VTSArIDFgLCBhbmQgdGhlbiByZXR1cm4gYEVORFBPSU5UX1VOVVNFRGAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIG5leHQgdGltZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgbG9vcCBgZm9yIChpID0gMDsgaSBcdTAwM2MgYXItXHUwMDNlbm9kZV9udW07IGkrKylgIHdvdWxkIHJ1biB1cCB0byBgTUFYX05PREVfTlVNYCwgYnV0IHRoZW4gYWNjZXNzIGBhci1cdTAwM2Vub2RlX21hcFtNQVhfTk9ERV9OVU1dYCwgd2hpY2ggaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gYW4gYXJyYXkgb2YgYE1BWF9OT0RFX05VTWAuIFRoZSBuZXcgY29kZSBjb3JyZWN0bHkgcHJldmVudHMgdGhpcyBieSBjaGVja2luZyBgaWYgKGFyLVx1MDAzZW5vZGVfbnVtIFx1MDAzZT0gTUFYX05PREVfTlVNKWAgKmJlZm9yZSogaW5jcmVtZW50aW5nLCBhbmQgcmV0dXJuaW5nIGBFTkRQT0lOVF9VTlVTRURgIGlmIGl0J3MgYWxyZWFkeSBhdCB0aGUgbWF4aW11bS4gVGhpcyBhdm9pZHMgdGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuXG5JdCdzIGEgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGZpeCwgcHJldmVudGluZyBhIG1lbW9yeSBjb3JydXB0aW9uL09PQiBhY2Nlc3MsIGFuZCBpdCdzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbi4gVGhpcyBpcyBnb29kIHRvIGdvLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQ2LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MzozNS4yMjU5NjQ3NjVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTU4MTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRINktMXCIsXG4gICAgXCJBVEg2S0xfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoNmtsX3VzYl9wcm9iZVwiLFxuICAgIFwiYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc1wiLFxuICAgIFwiYXRoNmtsX3N0YXJ0X2FwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGF0aDZrbF9pYnNzX21hcF9lcGlkYCB3aGVuIGBhci1cXHUwMDNlbm9kZV9udW1gIHJlYWNoZXMgYE1BWF9OT0RFX05VTWAuIFRoZSBidWcgaXMgcmVhY2hhYmxlIGluIEFQIG9yIEFkLUhvYyAoSUJTUykgbW9kZSB3aGVuIHNlbmRpbmcgcGFja2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlcidzIFVTQiBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDZLTFwiLFxuICAgIFwiQVRINktMX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDZrbF91c2JfcHJvYmVcIixcbiAgICBcImF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NcIixcbiAgICBcImF0aDZrbF9zdGFydF9hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgd2hlbiBgYXItXFx1MDAzZW5vZGVfbnVtYCByZWFjaGVzIGBNQVhfTk9ERV9OVU1gLiBUaGUgYnVnIGlzIHJlYWNoYWJsZSBpbiBBUCBvciBBZC1Ib2MgKElCU1MpIG1vZGUgd2hlbiBzZW5kaW5nIHBhY2tldHMuIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGFuZCBjYW4gYmUgZnV6emVkIHZpYSBzeXprYWxsZXIncyBVU0IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDM6MzUuMzE3NTYxMzczWiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg1MTUzNTg2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjM1LjMxODMyOTMxM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDg1MDc2MTcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYGFyLVxcdTAwM2Vub2RlX251bWAgKGEgYHU4YCkgd291bGQgY29udGludWUgdG8gaW5jcmVtZW50IGV2ZW4gYWZ0ZXIgcmVhY2hpbmcgYE1BWF9OT0RFX05VTWAsIGV2ZW50dWFsbHkgd3JhcHBpbmcgYXJvdW5kIHRvIDAgYW5kIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIGBub2RlX21hcGAgYXJyYXkuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgb2YgdGhpcyBuYXR1cmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODJhMjhkMTkxNmNiMTdkZWQxMDJlODFiZWE1MjFkMDkzZTAzNmUyOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjQxOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY1xuaW5kZXggZDgxODI1NDEzOTA2MS4uYjM0MGM3OTViN2EzMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY1xuQEAgLTY3LDEwICs2Nyw5IEBAIHN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGVwX21hcCA9PSAtMSkge1xuLVx0XHRlcF9tYXAgPSBhci1cdTAwM2Vub2RlX251bTtcbi1cdFx0YXItXHUwMDNlbm9kZV9udW0rKztcbi1cdFx0aWYgKGFyLVx1MDAzZW5vZGVfbnVtIFx1MDAzZSBNQVhfTk9ERV9OVU0pXG4rXHRcdGlmIChhci1cdTAwM2Vub2RlX251bSBcdTAwM2U9IE1BWF9OT0RFX05VTSlcbiBcdFx0XHRyZXR1cm4gRU5EUE9JTlRfVU5VU0VEO1xuK1x0XHRlcF9tYXAgPSBhci1cdTAwM2Vub2RlX251bSsrO1xuIFx0fVxuIFxuIFx0bWVtY3B5KGFyLVx1MDAzZW5vZGVfbWFwW2VwX21hcF0ubWFjX2FkZHIsIGV0aF9oZHItXHUwMDNlaF9kZXN0LCBFVEhfQUxFTik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MzozNS4zMTgzMzA3OTNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc4MzAyMjc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGF0aDZrbCBJQlNTIEVuZHBvaW50IE1hcHBpbmcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHRvIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgaW4gYGF0aDZrbC90eHJ4LmNgLiBJdCdzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlIHRvIGhvdyBlbmRwb2ludCBtYXBwaW5ncyBhcmUgYXNzaWduZWQuIEluaXRpYWxseSwgbXkgZmlyc3QgaW1wcmVzc2lvbiB3YXMgdGhhdCB0aGUgZml4IGludm9sdmVkIGFuIG9mZi1ieS1vbmUgZXJyb3IuIFRoZSBvcmlnaW5hbCBjb2RlIHdhczpcblxuYGBgY1xuXHRpZiAoZXBfbWFwID09IC0xKSB7XG5cdFx0ZXBfbWFwID0gYXItXHUwMDNlbm9kZV9udW07XG5cdFx0YXItXHUwMDNlbm9kZV9udW0rKztcblx0XHRpZiAoYXItXHUwMDNlbm9kZV9udW0gXHUwMDNlIE1BWF9OT0RFX05VTSlcblx0XHRcdHJldHVybiBFTkRQT0lOVF9VTlVTRUQ7XG5cdH1cbmBgYFxuXG5BbmQgbm93IGl0J3M6XG5cbmBgYGNcblx0aWYgKGVwX21hcCA9PSAtMSkge1xuXHRcdGlmIChhci1cdTAwM2Vub2RlX251bSBcdTAwM2U9IE1BWF9OT0RFX05VTSlcblx0XHRcdHJldHVybiBFTkRQT0lOVF9VTlVTRUQ7XG5cdFx0ZXBfbWFwID0gYXItXHUwMDNlbm9kZV9udW0rKztcblx0fVxuYGBgXG5cblRoZSBpbnRlbnQgaXMgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLiBTbywgaWYgYGFyLVx1MDAzZW5vZGVfbnVtYCB3YXMgYE1BWF9OT0RFX05VTWAsIHRoZSBvbGQgY29kZSB3b3VsZCBhc3NpZ24gYGVwX21hcGAgdG8gYE1BWF9OT0RFX05VTWAsIGluY3JlbWVudCBgYXItXHUwMDNlbm9kZV9udW1gIHRvIGBNQVhfTk9ERV9OVU0gKyAxYCwgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmV0dXJuIGBFTkRQT0lOVF9VTlVTRURgLiBUaGlzIGxvb2tzIGxpa2UgaXQgd2FzIGF0dGVtcHRpbmcgdG8gYXZvaWQgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSByZXZpc2VkIGNvZGUgY2xlYXJseSBwcmV2ZW50cyB0aGUgYXNzaWdubWVudCBvZiBgZXBfbWFwYCBmcm9tIGJlaW5nIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgTUFYX05PREVfTlVNYCBhdCB0aGUgb3V0c2V0LlxuXG5CdXQgd2FpdCwgSSBzdGFydGVkIHRoaW5raW5nIGFib3V0IHRoZSBlZGdlIGNhc2VzLiBMZXQncyByZXZpc2l0IHRoZSBvbGQgY29kZS4gSWYgYGFyLVx1MDAzZW5vZGVfbnVtYCAqd2FzKiBgTUFYX05PREVfTlVNYCwgaXQgKndvdWxkKiBoYXZlIHJldHVybmVkIGBFTkRQT0lOVF9VTlVTRURgLiBJZiBpdCB3YXMgYE1BWF9OT0RFX05VTSAtIDFgIHdpdGggdGhlIHByZXZpb3VzIHZlcnNpb24sIGBlcF9tYXBgIGdldHMgYXNzaWduZWQsIGFuZCB0aGUgaW5jcmVtZW50IG1ha2VzIGBhci1cdTAwM2Vub2RlX251bWAgbm93IGBNQVhfTk9ERV9OVU1gLCB3aGljaCBhdm9pZHMgdGhlIGNoZWNrLiBUaGF0IHNlZW1zIGNvcnJlY3QsIGdpdmVuIHRoYXQgYGFyLVx1MDAzZW5vZGVfbWFwYCBpcyBzaXplIGBNQVhfTk9ERV9OVU1gLiBPa2F5LCBpdCBzZWVtcyBJIHVuZGVyc3RhbmQuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgY2hlY2sgKndvdWxkKiByZXR1cm4gYEVORFBPSU5UX1VOVVNFRGAgaWYgaXQgaGl0IGBNQVhfTk9ERV9OVU1gLCB3aGljaCBJIHNob3VsZCBoYXZlIHNlZW4gaW1tZWRpYXRlbHkuXG5cbk5vdywgZG9lcyB0aGUgYGFyLVx1MDAzZW5vZGVfbWFwYCBhcnJheSBhY3R1YWxseSBoYXZlIGEgc2l6ZSBvZiBgTUFYX05PREVfTlVNYD8gR2l2ZW4gdGhlIGxvZ2ljLCB0aGlzIGlzIGhpZ2hseSBsaWtlbHksIGFuZCB0aGUgY2hhbmdlIHByb3ZpZGVzIGNsZWFyZXIgYm91bmRzIGNoZWNraW5nIGJlZm9yZSBhc3NpZ25pbmcgdGhlIGBlcF9tYXBgIGFuZCBwcmV2ZW50cyBhIHBvc3NpYmxlIHdyaXRlIHBhc3QgdGhlIGJvdW5kcyBvZiBgYXItXHUwMDNlbm9kZV9tYXBgLiBUaGUgY2hhbmdlIGlzIGluZGVlZCBhIGNvcnJlY3QgYW5kIG5lY2Vzc2FyeSBmaXggdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBtYW5hZ2VtZW50IHdoZW4gbWFwcGluZyBJQlNTIGVuZHBvaW50cywgaW1wcm92aW5nIHRoZSBvdmVyYWxsIHJvYnVzdG5lc3Mgb2YgdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjQyLjEwMTM1NzQzNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2MzQ5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFYX05PREVfTlVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTQ1LSNkZWZpbmUgQVRINktMX01BWF9FTkRQT0lOVFMgICA0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmg6NDY6I2RlZmluZSBNQVhfTk9ERV9OVU0gICAgICAgICAgIDE1XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNDctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaD02OTQ9c3RydWN0IGF0aDZrbCB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaC03MjgtXFx0dTggdHhfcHdyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjcyOTpcXHRzdHJ1Y3QgYXRoNmtsX25vZGVfbWFwcGluZyBub2RlX21hcFtNQVhfTk9ERV9OVU1dO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTczMC1cXHR1OCBpYnNzX3BzX2VuYWJsZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jPTQyPXN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNjktXFx0aWYgKGVwX21hcCA9PSAtMSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjcwOlxcdFxcdGlmIChhci1cXHUwMDNlbm9kZV9udW0gXFx1MDAzZT0gTUFYX05PREVfTlVNKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTcxLVxcdFxcdFxcdHJldHVybiBFTkRQT0lOVF9VTlVTRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjQyLjE1OTAwODkyNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTk1NTY0NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBFbmRwb2ludCBBbGxvY2F0aW9uIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBwb3RlbnRpYWwgaXNzdWUgbWlnaHQgbGllLiBJdCBsb29rcyBsaWtlIGBub2RlX21hcGAgaGFzIGEgc2l6ZSBvZiBgTUFYX05PREVfTlVNYC4gVGhlIGNydWNpYWwgcGFydCBzZWVtcyB0byBiZSBob3cgYGFyLVx1MDAzZW5vZGVfbnVtYCBpbnRlcmFjdHMgd2l0aCB0aGlzIG1hcC5cblxuSW5pdGlhbGx5LCBJIHdhbGtlZCB0aHJvdWdoIHRoZSBjYXNlIHdoZXJlIGBhci1cdTAwM2Vub2RlX251bWAgKmlzKiBlcXVhbCB0byBgTUFYX05PREVfTlVNYC4gSW4gdGhhdCBzY2VuYXJpbywgYGVwX21hcGAgYmVjb21lcyBgTUFYX05PREVfTlVNYCwgYW5kIGBhci1cdTAwM2Vub2RlX251bWAgZ2V0cyBpbmNyZW1lbnRlZCB0byBgTUFYX05PREVfTlVNICsgMWAuIFNpbmNlIGBNQVhfTk9ERV9OVU0gKyAxYCBpcyBncmVhdGVyIHRoYW4gYE1BWF9OT0RFX05VTWAsIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgcmV0dXJucyBgRU5EUE9JTlRfVU5VU0VEYC4gU2VlbXMgYWxyaWdodC4uLlxuXG5UaGVuLCBJIHRob3VnaHQgYWJvdXQgd2hhdCBoYXBwZW5zIGlmIGBhci1cdTAwM2Vub2RlX251bWAgKndhcyogYE1BWF9OT0RFX05VTSAtIDFgIGluaXRpYWxseS4gSW4gdGhhdCBjYXNlLCBgZXBfbWFwYCBiZWNvbWVzIGBNQVhfTk9ERV9OVU0gLSAxYCwgYW5kIGBhci1cdTAwM2Vub2RlX251bWAgaW5jcmVtZW50cyB0byBgTUFYX05PREVfTlVNYC4gVGhlIGNydWNpYWwgY2hlY2sgYGFyLVx1MDAzZW5vZGVfbnVtIFx1MDAzZSBNQVhfTk9ERV9OVU1gIGJlY29tZXMgZmFsc2UsIGFuZCB0aGUgY29kZSBjb250aW51ZXMsIG1lYW5pbmcgdGhlIG1hcCBlbnRyeSBgTUFYX05PREVfTlVNIC0gMWAgaXMgdmFsaWQuIEFsbCBnb29kLlxuXG5JIHN0YXJ0ZWQgcmV2aXNpdGluZyB0aGUgZWRnZSBjYXNlIHdoZXJlIGBhci1cdTAwM2Vub2RlX251bWAgYmVnaW5zIGF0IGBNQVhfTk9ERV9OVU1gICh3aGljaCBJIGluaXRpYWxseSBkaXNtaXNzZWQgYXMgY29ycmVjdCkuICBJJ3ZlIHJlYWxpemVkIHRoYXQgdGhlIHByb2JsZW0gaXMgdGhhdCBpdCByZXR1cm5zIGBFTkRQT0lOVF9VTlVTRURgLCBidXQgdGhlbiBpdCBzdGlsbCAqaW5jcmVtZW50cyogYGFyLVx1MDAzZW5vZGVfbnVtYC4gIFRoZSBuZXh0IHRpbWUsIGBhci1cdTAwM2Vub2RlX251bWAgd2lsbCBiZSBgTUFYX05PREVfTlVNICsgMWAuIFRoaXMgbGVhZHMgdG8gYGVwX21hcGAgYmVpbmcgYE1BWF9OT0RFX05VTSArIDFgLiAgQW5kIGBhci1cdTAwM2Vub2RlX251bWAgZ2V0cyBpbmNyZW1lbnRlZCB0byBgTUFYX05PREVfTlVNICsgMmAuIEl0IHJldHVybnMgYEVORFBPSU5UX1VOVVNFRGAgYWdhaW4uXG5cblNvLCB0aGUgY29kZSBqdXN0IGtlZXBzIGluY3JlbWVudGluZyBgYXItXHUwMDNlbm9kZV9udW1gISAgV2hpY2ggbWVhbnMgaXQgbWlnaHQgY2F1c2UgYW4gb3ZlcmZsb3cgb24gYHU4YCwgb3Igb3RoZXIgc2ltaWxhciB1bmludGVuZGVkIGJlaGF2aW9yLlxuXG5Ob3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBkYXRhIHR5cGUgb2YgYGFyLVx1MDAzZW5vZGVfbnVtYCB0byBzZWUgZXhhY3RseSB3aGF0IGtpbmQgb2Ygb3ZlcmZsb3cgcG9zc2liaWxpdGllcyBJIG1pZ2h0IGZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDM6NDkuMzU0NTc3MjA1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE2MzI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJub2RlX251bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaD02OTQ9c3RydWN0IGF0aDZrbCB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaC03MzEtXFx0Ym9vbCBpYnNzX2lmX2FjdGl2ZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaDo3MzI6XFx0dTggbm9kZV9udW07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNzMzLVxcdHU4IG5leHRfZXBfaWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjQ5LjQwNTc1NzgwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzYzMzA0OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQb3RlbnRpYWwgQnVnKipcblxuT2theSwgc28gYG5vZGVfbnVtYCBpcyBhIGB1OGAsIG1lYW5pbmcgaXQncyBnb2luZyB0byB3cmFwIGFyb3VuZC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2FzOiBpZiBpdCBpbmNyZW1lbnRzIGluZGVmaW5pdGVseSwgaXQnbGwgZXZlbnR1YWxseSBoaXQgMCwgcmlnaHQ/IEFuZCB3aGVuIGBub2RlX251bWAgYmVjb21lcyAwLCB0aGVuIGBlcF9tYXBgIGFsc28gYmVjb21lcyAwLiBUaGF0J3MgZmluZSwgYnV0IHRoZW4gYG5vZGVfbnVtYCBpbmNyZW1lbnRzIGFnYWluIHRvIDEuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hpbGUgYG5vZGVfbnVtYCBiZWNvbWVzIDAsIGl0IGFsc28gaW5jcmVtZW50cyBhZ2FpbiwgYW5kIGV2ZW50dWFsbHkgZ29lcyBwYXN0IHRoZSBkZWZpbmVkIHJhbmdlLCB3aGljaCB3b3VsZCBvdmVyd3JpdGUgZXhpc3RpbmcgZW50cmllcyEgSXMgdGhpcyBvdXQtb2YtYm91bmRzPyBObywgaXQncyBvdmVyd3JpdGluZyBzb21ldGhpbmcsIG5vdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGFub3RoZXIgc2NlbmFyaW8uIFdoYXQgaWYgYG5vZGVfbnVtYCB3cmFwcyBhcm91bmQgYWZ0ZXIgcmVhY2hpbmcgMjU1PyBTbyBJIHRoaW5rIHRoZSBwcm9ibGVtIGlzIHRoYXQgYG5vZGVfbnVtYCB3cmFwcGluZyBhcm91bmQgY2F1c2VzIGVudHJpZXMgdG8gYmUgb3ZlcndyaXR0ZW4uIEl0IGxvb2tzIG1vcmUgbGlrZSBhIGxvZ2ljIGJ1ZyBhdCBmaXJzdC4gSSBjb25zaWRlcmVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlbiBJIGxvb2tlZCBjbG9zZWx5LCBhbmQgSSBkb24ndCBzZWUgYW55IGV2aWRlbmNlIG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGVyZS4gXG5cbktBU0FOIHdvdWxkbid0IGNhdGNoIHRoaXMgaWYgaXQganVzdCBvdmVyd3JpdGVzIGBub2RlX21hcFswXWAsIHJpZ2h0PyBSaWdodCEgVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcHJldmVudGluZyB0aGUgaW5jcmVtZW50IHdoZW4gYGFyLVx1MDAzZW5vZGVfbnVtYCBpcyBhbHJlYWR5IGVxdWFsIHRvIG9yIHBhc3QgYE1BWF9OT0RFX05VTWAuIFNvIEkgYW0gbm93IGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBpcyBmYWxzZS5cblxuSSB3aWxsIGRvdWJsZSBjaGVjayB0aGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBqdXN0IHRvIGJlIHN1cmUuIEkgY2FuIHNlZSB0aGF0IGBlcF9tYXBgIGlzIHVzZWQgYXMgYW4gaW5kZXggaW50byBgYXItXHUwMDNlbm9kZV9tYXBgIGFuZCB0aGUgYG1lbWNweWAgd3JpdGVzIHRvIGBub2RlX21hcGAuIE5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbC4gVGhlIHBhdGNoIHByZXZlbnRzIGBhci1cdTAwM2Vub2RlX251bWAgZnJvbSBleGNlZWRpbmcgYE1BWF9OT0RFX05VTWAuIFRoaXMgaXMganVzdCBhIHN0YW5kYXJkIGludGVnZXIgb3ZlcmZsb3cvbG9naWMgYnVnLiBJdCBkb2Vzbid0IG5lZWQgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTYsIk91dHB1dFRva2VucyI6MTEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjU2LjE2OTA2NjQyN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYGFyLVxcdTAwM2Vub2RlX251bWAgKGEgYHU4YCkgd291bGQgY29udGludWUgdG8gaW5jcmVtZW50IGV2ZW4gYWZ0ZXIgcmVhY2hpbmcgYE1BWF9OT0RFX05VTWAsIGV2ZW50dWFsbHkgd3JhcHBpbmcgYXJvdW5kIHRvIDAgYW5kIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIGBub2RlX21hcGAgYXJyYXkuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgb2YgdGhpcyBuYXR1cmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYGFyLVxcdTAwM2Vub2RlX251bWAgKGEgYHU4YCkgd291bGQgY29udGludWUgdG8gaW5jcmVtZW50IGV2ZW4gYWZ0ZXIgcmVhY2hpbmcgYE1BWF9OT0RFX05VTWAsIGV2ZW50dWFsbHkgd3JhcHBpbmcgYXJvdW5kIHRvIDAgYW5kIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIGBub2RlX21hcGAgYXJyYXkuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgb2YgdGhpcyBuYXR1cmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvfd2r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 08:22:45 +0000 UTC FinishedAt: 2026-08-14 08:43:57 +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": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH6KL", "ATH6KL_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH6KL", "ATH6KL_USB" ], "series_id": "af9a9ead-76e2-438f-b2b1-067c58420de7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath6kl_usb_probe", "ath6kl_cfg80211_join_ibss", "ath6kl_start_ap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDZLTCYjMzQ7LAogICAgJiMzNDtBVEg2S0xfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoNmtsX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDthdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzJiMzNDssCiAgICAmIzM0O2F0aDZrbF9zdGFydF9hcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBhci1cdTAwM2Vub2RlX251bWAgKGEgYHU4YCkgd291bGQgY29udGludWUgdG8gaW5jcmVtZW50IGV2ZW4gYWZ0ZXIgcmVhY2hpbmcgYE1BWF9OT0RFX05VTWAsIGV2ZW50dWFsbHkgd3JhcHBpbmcgYXJvdW5kIHRvIDAgYW5kIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIGBub2RlX21hcGAgYXJyYXkuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgb2YgdGhpcyBuYXR1cmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgd2hlbiBgYXItXHUwMDNlbm9kZV9udW1gIHJlYWNoZXMgYE1BWF9OT0RFX05VTWAuIFRoZSBidWcgaXMgcmVhY2hhYmxlIGluIEFQIG9yIEFkLUhvYyAoSUJTUykgbW9kZSB3aGVuIHNlbmRpbmcgcGFja2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgyYTI4ZDE5MTZjYjE3ZGVkMTAyZTgxYmVhNTIxZDA5M2UwMzZlMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MToxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXG5pbmRleCBkODE4MjU0MTM5MDYxLi5iMzQwYzc5NWI3YTMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXG5AQCAtNjcsMTAgJiM0Mzs2Nyw5IEBAIHN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGVwX21hcCA9PSAtMSkge1xuLVx0XHRlcF9tYXAgPSBhci1cdTAwM2Vub2RlX251bTtcbi1cdFx0YXItXHUwMDNlbm9kZV9udW0mIzQzOyYjNDM7O1xuLVx0XHRpZiAoYXItXHUwMDNlbm9kZV9udW0gXHUwMDNlIE1BWF9OT0RFX05VTSlcbiYjNDM7XHRcdGlmIChhci1cdTAwM2Vub2RlX251bSBcdTAwM2U9IE1BWF9OT0RFX05VTSlcbiBcdFx0XHRyZXR1cm4gRU5EUE9JTlRfVU5VU0VEO1xuJiM0MztcdFx0ZXBfbWFwID0gYXItXHUwMDNlbm9kZV9udW0mIzQzOyYjNDM7O1xuIFx0fVxuIFxuIFx0bWVtY3B5KGFyLVx1MDAzZW5vZGVfbWFwW2VwX21hcF0ubWFjX2FkZHIsIGV0aF9oZHItXHUwMDNlaF9kZXN0LCBFVEhfQUxFTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDZLTCYjMzQ7LAogICAgJiMzNDtBVEg2S0xfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoNmtsX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDthdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzJiMzNDssCiAgICAmIzM0O2F0aDZrbF9zdGFydF9hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBpbiBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIHdoZW4gYGFyLVx1MDAzZW5vZGVfbnVtYCByZWFjaGVzIGBNQVhfTk9ERV9OVU1gLiBUaGUgYnVnIGlzIHJlYWNoYWJsZSBpbiBBUCBvciBBZC1Ib2MgKElCU1MpIG1vZGUgd2hlbiBzZW5kaW5nIHBhY2tldHMuIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGFuZCBjYW4gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MmEyOGQxOTE2Y2IxN2RlZDEwMmU4MWJlYTUyMWQwOTNlMDM2ZTI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDg6NDE6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCmluZGV4IGQ4MTgyNTQxMzkwNjEuLmIzNDBjNzk1YjdhMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCkBAIC02NywxMCAmIzQzOzY3LDkgQEAgc3RhdGljIHU4IGF0aDZrbF9pYnNzX21hcF9lcGlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfQogCiAJaWYgKGVwX21hcCA9PSAtMSkgewotCQllcF9tYXAgPSBhci0mZ3Q7bm9kZV9udW07Ci0JCWFyLSZndDtub2RlX251bSYjNDM7JiM0Mzs7Ci0JCWlmIChhci0mZ3Q7bm9kZV9udW0gJmd0OyBNQVhfTk9ERV9OVU0pCiYjNDM7CQlpZiAoYXItJmd0O25vZGVfbnVtICZndDs9IE1BWF9OT0RFX05VTSkKIAkJCXJldHVybiBFTkRQT0lOVF9VTlVTRUQ7CiYjNDM7CQllcF9tYXAgPSBhci0mZ3Q7bm9kZV9udW0mIzQzOyYjNDM7OwogCX0KIAogCW1lbWNweShhci0mZ3Q7bm9kZV9tYXBbZXBfbWFwXS5tYWNfYWRkciwgZXRoX2hkci0mZ3Q7aF9kZXN0LCBFVEhfQUxFTik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzMKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBGaXggaW4gYXRoNmtsJiMzOTtzIElCU1MgTWFwcGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGZ1bmN0aW9uLiBUaGUgY29kZSBjaGFuZ2UgaXMgYSBtaW5vciBvbmUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGNyaXRpY2FsIGZpeC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcHJldmVudGluZyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBieSBjaGVja2luZyBpZiBgYXItJmd0O25vZGVfbnVtYCBpcyAqYWxyZWFkeSogYXQgYE1BWF9OT0RFX05VTWAgYmVmb3JlIGFzc2lnbmluZyBpdCwgaW5zdGVhZCBvZiBhc3NpZ25pbmcgYW5kIHRoZW4gY2hlY2tpbmcsIGFuZCBwb3RlbnRpYWxseSB3cmFwcGluZy4gSSBzdXNwZWN0IGl0IHdhcyBjYXVzaW5nIGEgY3Jhc2ggb3IgZGF0YSBjb3JydXB0aW9uIHdoZW4gdGhlIG5vZGUgY291bnQgaGl0cyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLCB3aGljaCB3b3VsZCBiZSBiYWQuCgpIbW0sIHRoaXMgaXMgZm9yIHRoZSBgYXRoNmtsYCBkcml2ZXIuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBBdGhlcm9zIEFSNjAwMyBhbmQgQVI2MDA0IFdpLUZpIGNoaXBzZXRzLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIG5vdyBpcywgY2FuIEkgYWN0dWFsbHkgKnRlc3QqIHRoaXMgZWZmZWN0aXZlbHk/IEhhcmR3YXJlIGRyaXZlcnMgbGlrZSB0aGlzIGFyZSBvZnRlbiBhIHBhaW4gdG8gZGVidWcgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJcyB0aGVyZSBhIHdheSB0byBkbyB0aGlzIGluIFFFTVUsIG9yIHdpbGwgSSBuZWVkIHBoeXNpY2FsIEFSNjAwMy9BUjYwMDQgaGFyZHdhcmU/IE1vc3Qgb2YgdGhlIHRpbWUsIEkmIzM5O2QgbmVlZCBTRElPIG9yIFVTQi4KCldhaXQgYSBzZWNvbmTigKYgSSB0aGluayBgYXRoNmtsYCAqZG9lcyogaGF2ZSBhIFVTQiBkcml2ZXIhIFllcCwgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmNgLiBUaGF04oCZcyBnb29kIG5ld3MhIElmIGl0JiMzOTtzIGdvdCBhIFVTQiBpbXBsZW1lbnRhdGlvbiwgdGhhdCBtZWFucyBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgKHNwZWNpZmljYWxseSB0aGUgYGR1bW15X2hjZGAgc3VwcG9ydCkgbWlnaHQgYmUgYXBwbGljYWJsZSBoZXJlLiBUaGF0JiMzOTtzIGEgaHVnZSB3aW4g4oCTIGl0IGNvdWxkIG1ha2UgdGVzdGluZyB0aGlzIHBhdGNoIHNpZ25pZmljYW50bHkgZWFzaWVyLCBhbmQgbW9yZSBzY2FsYWJsZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIFVTQiBwYXRoIGlzIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSBlbXVsYXRlZCwgYnV0IHRoaXMgaXMgYSBwcm9taXNpbmcgbGVhZC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgVVNCIGFzcGVjdCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9pYnNzX21hcF9lcGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM9Mzc9c3RhdGljIGlubGluZSB1OCBhdGg2a2xfZ2V0X2FpZCh1OCB0aWRfbXV4KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6NDI6c3RhdGljIHU4IGF0aDZrbF9pYnNzX21hcF9lcGlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy00My1cdFx0XHQgICAgICAgdTMyICptYXBfbm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM9MzU1PW5ldGRldl90eF90IGF0aDZrbF9kYXRhX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDU0LVx0aWYgKGNoa19hZGhvY19wc19tYXBwaW5nKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6NDU1Olx0XHRlaWQgPSBhdGg2a2xfaWJzc19tYXBfZXBpZChza2IsIGRldiwgXHUwMDI2bWFwX25vKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQ1Ni1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgRnVuY3Rpb24qKgoKT2theSwgc28gYGF0aDZrbF9pYnNzX21hcF9lcGlkYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYGF0aDZrbF9kYXRhX3R4YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBgYXRoNmtsX2RhdGFfdHhgIGlzIHRoZSBuZXR3b3JrIGRyaXZlciYjMzk7cyBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uIOKAkyB0aGUgY29yZSB0cmFuc21pdCBwYXRoLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBwaWVjaW5nIHRoaW5ncyB0b2dldGhlci4gVGhpcyBtZWFucyBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBtYXBwaW5nIG9yIHByZXBhcmluZyBkYXRhIGZvciB0cmFuc21pc3Npb24uCgpTaW5jZSB0aGlzIHNlZW1zIHRvIGJlIGEga2V5IGVsZW1lbnQgaW4gdGhlIGRhdGEgdHJhbnNtaXNzaW9uIHByb2Nlc3MsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBvZiBgYXRoNmtsYC4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBpcyB0aGlzIGEgVVNCIGRyaXZlcj8gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGdyZWF0bHkgaW5mbHVlbmNlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwsIGJlY2F1c2UgVVNCIGhhcyBwYXJ0aWN1bGFyIHJlcXVpcmVtZW50cyBhbmQgY29uc3RyYWludHMuIElmIGl0ICppcyogVVNCLCB0aGF0IHJhaXNlcyBzcGVjaWZpYyBxdWVzdGlvbnMgYWJvdXQgdGhlIGRhdGEgZnJhbWluZywgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgaW52b2x2ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZ3JlYXRseSBpbmZvcm1zIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3VzYl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jPTEyMjU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0aDZrbF91c2JfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmMtMTIzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM6MTIzNjptb2R1bGVfdXNiX2RyaXZlcihhdGg2a2xfdXNiX2RyaXZlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jLTEyMzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGF0aDZrbCBEcml2ZXIqKgoKT2theSwgc28gYGF0aDZrbGAgKmRvZXMqIGhhdmUgYSBVU0IgZHJpdmVyLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIG9wZW5zIGl0IHVwIHRvIHRoZSBmdWxsIHN1aXRlIG9mIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgZ29vZCBuZXdzLCBhIGRlZmluaXRlIGF2ZW51ZSB0byBleHBsb3JlIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgdGFyZ2V0aW5nIGl0cyBkYXRhIHRyYW5zbWlzc2lvbiBwYXRoLiBUaGUgZnVuY3Rpb24gYGF0aDZrbF9kYXRhX3R4YCBqdW1wcyBvdXQgYXMgdGhlIG9idmlvdXMgY2FuZGlkYXRlIGZvciBpbnRlbnNpdmUgZnV6emluZyBlZmZvcnRzLiBUaGF0IGZ1bmN0aW9uIGlzIHdoZXJlIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG15IGluaXRpYWwgYXR0ZW1wdHMuIE5vdywgbGV0JiMzOTtzIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIGZvciBgYXRoNmtsYCwgc28gSSBjYW4gc2VlIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCB0byBlbnN1cmluZyBteSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVRINktMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjI6Y29uZmlnIEFUSDZLTFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIG1vYmlsZSBjaGlwc2V0cyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTEzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjE0OmNvbmZpZyBBVEg2S0xfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBhdGg2a2wgU0RJTyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTI0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjI1OmNvbmZpZyBBVEg2S0xfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIGF0aDZrbCBVU0Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0zNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZzozNTpjb25maWcgQVRINktMX0RFQlVHXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctMzYtXHRib29sIFwmIzM0O0F0aGVyb3MgYXRoNmtsIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy00NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZzo0NTpjb25maWcgQVRINktMX1RSQUNJTkdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg2a2wgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTU2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjU3OmNvbmZpZyBBVEg2S0xfUkVHRE9NQUlOXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctNTgtXHRib29sIFwmIzM0O0F0aGVyb3MgYXRoNmtsIHJlZ2RvbWFpbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyB0aGUgQVRINktMIE1vZHVsZXMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgQVRINktMYCBhbmQgYEFUSDZLTF9VU0JgIGFyZSBhdmFpbGFibGUuIEJlZm9yZSBJIHN0YXJ0IGRvd24gdGhhdCBwYXRoIHRob3VnaCwgSSBzaG91bGQgYWx3YXlzIGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnYCBhbmQgdGFrZSBhIGxvb2suIFRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgdG8gY29uZmlybSBleGFjdGx5IHdoaWNoIG90aGVyIG9wdGlvbnMgYXJlIHJlcXVpcmVkIG9yIG1pZ2h0IGluZmx1ZW5jZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZXNlIHNwZWNpZmljIG1vZHVsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgY29uZGl0aW9ucywgbm90IGp1c3QgdGhlIG9idmlvdXMgb25lcy4gQSB0aG9yb3VnaCBLY29uZmlnIGluc3BlY3Rpb24gaXMgY3JpdGljYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiAgIDI6XHRjb25maWcgQVRINktMXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIG1vYmlsZSBjaGlwc2V0cyBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgY29yZSBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvblxuICAgNzpcdFx0ICBBdGhlcm9zIEFSNjAwMyBhbmQgQVI2MDA0IGNoaXBzZXRzLiBZb3Ugc3RpbGwgbmVlZCBzZXBhcmF0ZVxuICAgODpcdFx0ICBidXMgZHJpdmVycyBmb3IgVVNCIGFuZCBTRElPIHRvIGJlIGFibGUgdG8gdXNlIHJlYWwgZGV2aWNlcy5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcbiAgMTE6XHRcdCAgYXRoNmtsX2NvcmUuIFBsZWFzZSBub3RlIHRoYXQgQVI2MDAyIGFuZCBBUjYwMDEgYXJlIG5vdFxuICAxMjpcdFx0ICBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIEFUSDZLTF9TRElPXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIGF0aDZrbCBTRElPIHN1cHBvcnRcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQVRINktMXG4gIDE3Olx0XHRkZXBlbmRzIG9uIE1NQ1xuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uXG4gIDIwOlx0XHQgIEF0aGVyb3MgQVI2MDAzIGFuZCBBUjYwMDQgY2hpcHNldHMgcnVubmluZyBvdmVyIFNESU8uIElmIHlvdVxuICAyMTpcdFx0ICBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIGF0aDZrbF9zZGlvLlxuICAyMjpcdFx0ICBQbGVhc2Ugbm90ZSB0aGF0IEFSNjAwMiBhbmQgQVI2MDAxIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXNcbiAgMjM6XHRcdCAgZHJpdmVyLlxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBBVEg2S0xfVVNCXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIGF0aDZrbCBVU0Igc3VwcG9ydFwmIzM0O1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBBVEg2S0xcbiAgMjg6XHRcdGRlcGVuZHMgb24gVVNCXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb25cbiAgMzE6XHRcdCAgQXRoZXJvcyBBUjYwMDQgY2hpcHNldCBhbmQgY2hpcHNldHMgYmFzZWQgb24gaXQgcnVubmluZyBvdmVyXG4gIDMyOlx0XHQgIFVTQi4gSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZVxuICAzMzpcdFx0ICBjYWxsZWQgYXRoNmtsX3VzYi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgQVRINktMX0RFQlVHXG4gIDM2Olx0XHRib29sIFwmIzM0O0F0aGVyb3MgYXRoNmtsIGRlYnVnZ2luZ1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBBVEg2S0xcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlcyBhdGg2a2wgZGVidWcgc3VwcG9ydCwgaW5jbHVkaW5nIGRlYnVnIG1lc3NhZ2VzXG4gIDQwOlx0XHQgIGVuYWJsZWQgd2l0aCBkZWJ1Z19tYXNrIG1vZHVsZSBwYXJhbWV0ZXIgYW5kIGRlYnVnZnNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgV2lyZWxlc3MgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIHRoZSBjb3JlIGNvbXBvbmVudHM6IGBBVEg2S0xgLCBgQVRINktMX1VTQmAsIGBDRkc4MDIxMWAsIGFuZCwgb2J2aW91c2x5LCB0aGUgYFVTQmAgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgY29ubmVjdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWxsIHByZXNlbnQgYW5kIGFjY291bnRlZCBmb3IuIEhvbGQgb24sIHRob3VnaC4uLiB0aGlua2luZyBhYm91dCBpdCwgYE1BQzgwMjExYCBpc24mIzM5O3QgKnN0cmljdGx5KiByZXF1aXJlZCBpbiB0aGUgc2FtZSB3YXksIGJ1dCBgQ0ZHODAyMTFgIGRlZmluaXRlbHkgaXMuIEl0JiMzOTtzIHRoZSBjb25maWd1cmF0aW9uIGxheWVyLCBhbmQgSSYjMzk7ZCBiZSBzdW5rIHdpdGhvdXQgaXQuCgpOb3csIGEga2V5IHF1ZXN0aW9uOiBjYW4gSSB0cmFjZSB0aGUgZGF0YSB0cmFuc21pc3Npb24gcGF0aD8gU3BlY2lmaWNhbGx5LCBpcyBgYXRoNmtsX2RhdGFfdHhgIHJlYWNoYWJsZT8gQWgsIHllcywgb2YgY291cnNlISBUaGF0JiMzOTtzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uIGZvciB0aGUgbmV0X2RldmljZS4gVGhhdCYjMzk7cyB0aGUgZ2F0ZXdheSBmb3IgZGF0YSBsZWF2aW5nIHRoZSBzeXN0ZW0uCgpMZXQmIzM5O3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSYjMzk7bGwgY2hlY2sgYGF0aDZrbF9pYnNzX21hcF9lcGlkYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgYXRoNmtsX2RhdGFfdHhgLCBzbyB0aGF0JiMzOTtzIGEgY3J1Y2lhbCBsaW5rIGluIHRoZSBjaGFpbi4KCkZpbmFsbHksIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhdGg2a2xfZGF0YV90eGAgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jYCB0byBzZWUgaG93IGl0IHdvcmtzIHVuZGVyIHRoZSBob29kLiBJdCYjMzk7cyB0aW1lIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBmbG93IGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjb25uZWN0ZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGg2a2xfZGF0YV90eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oPTkxNj12b2lkIGF0aDZrbF9mcmVlX2Nvb2tpZShzdHJ1Y3QgYXRoNmtsICphciwgc3RydWN0IGF0aDZrbF9jb29raWUgKmNvb2tpZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaDo5MTc6bmV0ZGV2X3R4X3QgYXRoNmtsX2RhdGFfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaC05MTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM9ODY4PXZvaWQgYXRoNmtsX3BzcG9sbF9ldmVudChzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmLCB1OCBhaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmMtOTExLVx0XHRjb25uLVx1MDAzZXN0YV9mbGFncyB8PSBTVEFfUFNfUE9MTEVEO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM6OTEyOlx0XHRhdGg2a2xfZGF0YV90eChza2IsIHZpZi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTkxMy1cdFx0Y29ubi1cdTAwM2VzdGFfZmxhZ3MgXHUwMDI2PSB+U1RBX1BTX1BPTExFRDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYz05MjQ9dm9pZCBhdGg2a2xfZHRpbWV4cGlyeV9ldmVudChzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTk1NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jOjk1NjpcdFx0YXRoNmtsX2RhdGFfdHgoc2tiLCB2aWYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYy05NTctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM9MTI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF0aDZrbF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTEyODUtXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IGF0aDZrbF9jbG9zZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jOjEyODY6XHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IGF0aDZrbF9kYXRhX3R4LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmMtMTI4Ny1cdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gYXRoNmtsX3NldF9mZWF0dXJlcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz0yODU9aW50IGF0aDZrbF9jb250cm9sX3R4KHZvaWQgKmRldnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMzU0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MzU1Om5ldGRldl90eF90IGF0aDZrbF9kYXRhX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0zNTYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jPTEyMzE9c3RhdGljIHZvaWQgYXRoNmtsX3VhcHNkX3RyaWdnZXJfZnJhbWVfcngoc3RydWN0IGF0aDZrbF92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xMjgwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MTI4MTpcdFx0YXRoNmtsX2RhdGFfdHgoc2tiLCB2aWYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xMjgyLVx0XHRjb25uLVx1MDAzZXN0YV9mbGFncyBcdTAwMjY9IH4oU1RBX1BTX0FQU0RfVFJJR0dFUik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM9MTMwMD12b2lkIGF0aDZrbF9yeChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0LCBzdHJ1Y3QgaHRjX3BhY2tldCAqcGFja2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTE0ODUtXHRcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlcHNxX2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MTQ4NjpcdFx0XHRcdFx0YXRoNmtsX2RhdGFfdHgoc2tidWZmLCB2aWYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xNDg3LVx0XHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2Vwc3FfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTQ5Mi1cdFx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2Vwc3FfbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYzoxNDkzOlx0XHRcdFx0XHRhdGg2a2xfZGF0YV90eChza2J1ZmYsIHZpZi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTE0OTQtXHRcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXBzcV9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xNTg5LVx0XHRpZiAoc2tiMSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjE1OTA6XHRcdFx0YXRoNmtsX2RhdGFfdHgoc2tiMSwgdmlmLVx1MDAzZW5kZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTU5MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk5MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVHJhbnNtaXNzaW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGF0aDZrbF9kYXRhX3R4YCBpcyBkZWZpbml0aXZlbHkgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb24gZm9yIHRoZSBuZXR3b3JrIGRldmljZS4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIGVudHJ5IGZvciBvdXRib3VuZCBkYXRhLiBHaXZlbiB0aGF0LCBhbmQgYWZ0ZXIgc29tZSBkaWdnaW5nLCB0aGUgbGlrZWx5IHNvdXJjZSBvZiB0aGUgcHJvYmxlbSBpcyBpbiBgYXRoNmtsX2lic3NfbWFwX2VwaWRgLiBMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgZnVuY3Rpb24gYW5kIHNlZSBpZiB0aGUgcm9vdCBjYXVzZSBpcyBub3cgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIHU4IGF0aDZrbF9pYnNzX21hcF9lcGlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gIDQzOlx0XHRcdFx0ICAgICAgIHUzMiAqbWFwX25vKVxuICA0NDpcdHtcbiAgNDU6XHRcdHN0cnVjdCBhdGg2a2wgKmFyID0gYXRoNmtsX3ByaXYoZGV2KTtcbiAgNDY6XHRcdHN0cnVjdCBldGhoZHIgKmV0aF9oZHI7XG4gIDQ3Olx0XHR1MzIgaSwgZXBfbWFwID0gLTE7XG4gIDQ4Olx0XHR1OCAqZGF0YXA7XG4gIDQ5Olx0XG4gIDUwOlx0XHQqbWFwX25vID0gMDtcbiAgNTE6XHRcdGRhdGFwID0gc2tiLVx1MDAzZWRhdGE7XG4gIDUyOlx0XHRldGhfaGRyID0gKHN0cnVjdCBldGhoZHIgKikgKGRhdGFwICYjNDM7IHNpemVvZihzdHJ1Y3Qgd21pX2RhdGFfaGRyKSk7XG4gIDUzOlx0XG4gIDU0Olx0XHRpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2hkci1cdTAwM2VoX2Rlc3QpKVxuICA1NTpcdFx0XHRyZXR1cm4gRU5EUE9JTlRfMjtcbiAgNTY6XHRcbiAgNTc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyLVx1MDAzZW5vZGVfbnVtOyBpJiM0MzsmIzQzOykge1xuICA1ODpcdFx0XHRpZiAobWVtY21wKGV0aF9oZHItXHUwMDNlaF9kZXN0LCBhci1cdTAwM2Vub2RlX21hcFtpXS5tYWNfYWRkcixcbiAgNTk6XHRcdFx0XHQgICBFVEhfQUxFTikgPT0gMCkge1xuICA2MDpcdFx0XHRcdCptYXBfbm8gPSBpICYjNDM7IDE7XG4gIDYxOlx0XHRcdFx0YXItXHUwMDNlbm9kZV9tYXBbaV0udHhfcGVuZCYjNDM7JiM0Mzs7XG4gIDYyOlx0XHRcdFx0cmV0dXJuIGFyLVx1MDAzZW5vZGVfbWFwW2ldLmVwX2lkO1xuICA2MzpcdFx0XHR9XG4gIDY0Olx0XG4gIDY1Olx0XHRcdGlmICgoZXBfbWFwID09IC0xKSBcdTAwMjZcdTAwMjYgIWFyLVx1MDAzZW5vZGVfbWFwW2ldLnR4X3BlbmQpXG4gIDY2Olx0XHRcdFx0ZXBfbWFwID0gaTtcbiAgNjc6XHRcdH1cbiAgNjg6XHRcbiAgNjk6XHRcdGlmIChlcF9tYXAgPT0gLTEpIHtcbiAgNzA6XHRcdFx0aWYgKGFyLVx1MDAzZW5vZGVfbnVtIFx1MDAzZT0gTUFYX05PREVfTlVNKVxuICA3MTpcdFx0XHRcdHJldHVybiBFTkRQT0lOVF9VTlVTRUQ7XG4gIDcyOlx0XHRcdGVwX21hcCA9IGFyLVx1MDAzZW5vZGVfbnVtJiM0MzsmIzQzOztcbiAgNzM6XHRcdH1cbiAgNzQ6XHRcbiAgNzU6XHRcdG1lbWNweShhci1cdTAwM2Vub2RlX21hcFtlcF9tYXBdLm1hY19hZGRyLCBldGhfaGRyLVx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xuICA3NjpcdFxuICA3NzpcdFx0Zm9yIChpID0gRU5EUE9JTlRfMjsgaSBcdTAwM2M9IEVORFBPSU5UXzU7IGkmIzQzOyYjNDM7KSB7XG4gIDc4Olx0XHRcdGlmICghYXItXHUwMDNldHhfcGVuZGluZ1tpXSkge1xuICA3OTpcdFx0XHRcdGFyLVx1MDAzZW5vZGVfbWFwW2VwX21hcF0uZXBfaWQgPSBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJ1ZyBBbmFseXNpcyBhbmQgRml4IGZvciBhdGg2a2wgRHJpdmVyKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3YXM6IGlmIGBhci0mZ3Q7bm9kZV9udW1gIGhpdHMgYE1BWF9OT0RFX05VTWAsIHRoZSBjb2RlIGNvcnJlY3RseSBoYW5kbGVzIHJldHVybmluZyBgRU5EUE9JTlRfVU5VU0VEYC4gVGhlIHByb2JsZW0gZGlkbiYjMzk7dCBzZWVtIGltbWVkaWF0ZWx5IG9idmlvdXMuIEl0IGxvb2tlZCBsaWtlIGFuIGVkZ2UgY2FzZSBoYW5kbGVkIGNvcnJlY3RseS4gVGhlbiwgSSBkdWcgZGVlcGVyIGFuZCBjb25zaWRlcmVkIHRoZSBzY2VuYXJpbyB3aGVuIGBhci0mZ3Q7bm9kZV9udW1gIHN0YXJ0cyBhdCBgTUFYX05PREVfTlVNIC0gMWAuIEluIHRoYXQgY2FzZSwgYGVwX21hcGAgYmVjb21lcyBgTUFYX05PREVfTlVNIC0gMWAgYW5kIGBhci0mZ3Q7bm9kZV9udW1gIGJlY29tZXMgYE1BWF9OT0RFX05VTWAsIGFuZCB0aGluZ3MgKmFwcGVhcmVkKiBmaW5lLiBUaGUgY29uZGl0aW9uYWwgY2hlY2sgd291bGQgYmUgZmFsc2UsIHNvIHRoZSBjb2RlIHdvdWxkIHByb2NlZWQuIEhvd2V2ZXIsIEkgcmVhbGl6ZWQgdGhlIHByb2JsZW0gd2FzbiYjMzk7dCBpbiB0aGUgaW1tZWRpYXRlIGBpZmAgc3RhdGVtZW50IGl0c2VsZiwgYnV0IHdoYXQgaGFwcGVuZWQgKmFmdGVyKiBpdCBpbiBzdWJzZXF1ZW50IGNhbGxzLiBgYXItJmd0O25vZGVfbnVtYCBnZXRzIGluY3JlbWVudGVkIGV2ZW4gd2hlbiBgRU5EUE9JTlRfVU5VU0VEYCBpcyByZXR1cm5lZCEgVGhpcyBpcyB3aGVyZSBpdCBoaXQgbWU6IHRoZSBsb29wIGl0ZXJhdGluZyBvbiBgYXItJmd0O25vZGVfbnVtYCB3b3VsZCBydW4gdXAgdG8gYE1BWF9OT0RFX05VTWAsIGJ1dCBgYXItJmd0O25vZGVfbWFwYCBvbmx5IGhhcyBgTUFYX05PREVfTlVNYCBlbGVtZW50cy4gVGhhdCBtZWFucyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBwcmV2ZW50IHRoZSBpbmNyZW1lbnQgaWYgdGhlIG5vZGUgbGltaXQgaGFzIGJlZW4gcmVhY2hlZC4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYnVnIGFuZCBsZWFkcyB0byBhIGNyaXRpY2FsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCwgdW5kZXIgdGhlIHJpZ2h0IGNvbmRpdGlvbnMsIGNvdWxkIGJlIGV4cGxvaXRlZC4gVGhlIGRyaXZlciBpcyBgYXRoNmtsYCwgYW5kIGl0JiMzOTtzIHVzaW5nIGEgVVNCIGludGVyZmFjZS4gV2UgY2FuIGxldmVyYWdlIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMgdG8gdGFyZ2V0IHRoaXMuCgpUaGUgdnVsbmVyYWJsZSBmdW5jdGlvbiBpcyBgYXRoNmtsX2lic3NfbWFwX2VwaWRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYXRoNmtsX2RhdGFfdHhgLiBgYXRoNmtsX2RhdGFfdHhgIGlzIHRoZSBuZXR3b3JrIGRyaXZlciYjMzk7cyBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBkaXJlY3RseSBpbnZvbHZlZCBpbiB0cmFuc21pdHRpbmcgcGFja2V0cywgaW1wbHlpbmcgdGhhdCBpZiB0aGUgY29uZGl0aW9uIHRyaWdnZXJpbmcgdGhlIGJ1ZyBjYW4gYmUgYWNoaWV2ZWQsIHdlJiMzOTt2ZSBnb3QgYSByZWFjaGFibGUgcGF0aC4gVG8gdHJpZ2dlciB0aGlzLCB3ZSYjMzk7bGwgbmVlZCBwYWNrZXRzIHRvIGJlIHNlbnQgdGhyb3VnaCB0aGUgbmV0d29yayBkZXZpY2UsIHdoaWNoIGlzIGNyZWF0ZWQgd2hlbiB0aGUgVVNCIGRldmljZSBpcyBwcm9iZWQuIFNvLCBgQVRINktMYCBhbmQgYEFUSDZLTF9VU0JgIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gQWxzbywgd2UmIzM5O2xsIG5lZWQgYENGRzgwMjExYCBhbmQgYFVTQmAuIEkgdGhlbiBzdGFydGVkIHRoaW5raW5nIGFib3V0IGEgZ29vZCB3YXkgdG8gZm9jdXMgdGhlIGZ1enppbmcuIGBhdGg2a2xfZGF0YV90eGAgaXMgdGVtcHRpbmcsIGJ1dCB0aGF0JiMzOTtzIGEgKmhvdCogcGF0aCBhbmQgdGhhdCYjMzk7cyBkaXNjb3VyYWdlZCwgYnV0IHRoaXMgaXMgYSBob3QgcGF0aCBmdW5jdGlvbiAoYG5kb19zdGFydF94bWl0YCkuIEhvd2V2ZXIsIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgaXMgb25seSBjYWxsZWQgd2hlbiBgY2hrX2FkaG9jX3BzX21hcHBpbmdgIGlzIHRydWUsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Noa19hZGhvY19wc19tYXBwaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM9MzU1PW5ldGRldl90eF90IGF0aDZrbF9kYXRhX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMzYzLVx0dTggYWMgPSA5OTsgLyogaW5pdGlhbGl6ZSB0byB1bm1hcHBlZCBhYyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MzY0Olx0Ym9vbCBjaGtfYWRob2NfcHNfbWFwcGluZyA9IGZhbHNlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMzY1LVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy00MzgtXHRcdCAgICBhci1cdTAwM2VpYnNzX3BzX2VuYWJsZSBcdTAwMjZcdTAwMjYgdGVzdF9iaXQoQ09OTkVDVEVELCBcdTAwMjZ2aWYtXHUwMDNlZmxhZ3MpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6NDM5Olx0XHRcdGNoa19hZGhvY19wc19tYXBwaW5nID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQ0MC1cdFx0ZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDUzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6NDU0Olx0aWYgKGNoa19hZGhvY19wc19tYXBwaW5nKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDU1LVx0XHRlaWQgPSBhdGg2a2xfaWJzc19tYXBfZXBpZChza2IsIGRldiwgXHUwMDI2bWFwX25vKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBEYXRhIFBhdGgqKgoKT2theSwgSSYjMzk7bSB0cmFjaW5nIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGlzc3VlIGlzIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgZGF0YSBwYXRoLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgc3ltcHRvbS4gTm93LCB3aGVyZSBpcyB0aGUgVVNCIHByb2JlIGZ1bmN0aW9uIHNpdHVhdGVkIHdpdGhpbiB0aGlzIHNldHVwPyBSaWdodCwgdGhhdCYjMzk7cyBgYXRoNmtsX3VzYl9wcm9iZWAuIExldCBtZSBqdXN0IHJlZnJlc2ggbXkgbWVtb3J5IOKAkyBJIGJlbGlldmUgdGhhdCYjMzk7cyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuY2AsIGNvcnJlY3Q/IEdvb2QsIHRoYXQgY29uZmlybXMgaXQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgYXRoNmtsX3VzYl9wcm9iZWAgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHRoZSByb290IGNhdXNlIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGl0c2VsZi4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoNmtsX3VzYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM9MTEwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDZrbF9oaWZfb3BzIGF0aDZrbF91c2Jfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmMtMTExNy0vKiBhdGg2a2wgdXNiIGRyaXZlciByZWdpc3RlcmVkIGZ1bmN0aW9ucyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYzoxMTE4OnN0YXRpYyBpbnQgYXRoNmtsX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTE5LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYz0xMjI1PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGg2a2xfdXNiX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmMtMTIyNi1cdC5uYW1lID0gXCYjMzQ7YXRoNmtsX3VzYlwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM6MTIyNzpcdC5wcm9iZSA9IGF0aDZrbF91c2JfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jLTEyMjgtXHQuc3VzcGVuZCA9IGF0aDZrbF91c2JfcG1fc3VzcGVuZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBBdGhlcm9zIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXRoNmtsYCBVU0IgZHJpdmVyLiBUaGUgb2J2aW91cyBlbnRyeSBwb2ludCBpcyBgYXRoNmtsX3VzYl9wcm9iZWAsIHRoYXQmIzM5O3Mgd2hlcmUgZXZlcnl0aGluZyBwcm9iYWJseSBzdGFydHMgb24gdGhlIFVTQiBzaWRlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBteSBpbml0aWFsIGludmVzdGlnYXRpb24gdGhlcmUuIEtub3dpbmcgaG93IHRoZXNlIHRoaW5ncyB0ZW5kIHRvIHdvcmssIEkgc2hvdWxkIGFsc28gY2hlY2sgb3V0IGBhdGg2a2xfY29yZV9pbml0YCBvciBwb3RlbnRpYWxseSBgYXRoNmtsX2luaXRfaHdfc3RhcnRgLCBhcyB0aG9zZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gb3IgaGFyZHdhcmUgYnJpbmctdXAuIFRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCBhcmUgcHJvYmFibHkgdHVja2VkIGF3YXkgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvaW5pdC5jYCBvciBwZXJoYXBzIGBjb3JlLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhvc2UgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9jb3JlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuYz02ND1FWFBPUlRfU1lNQk9MKGF0aDZrbF9jb3JlX3J4X2NvbXBsZXRlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5jLTY1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmM6NjY6aW50IGF0aDZrbF9jb3JlX2luaXQoc3RydWN0IGF0aDZrbCAqYXIsIGVudW0gYXRoNmtsX2h0Y190eXBlIGh0Y190eXBlKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmMtNjcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5jLTI2NC19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuYzoyNjU6RVhQT1JUX1NZTUJPTChhdGg2a2xfY29yZV9pbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5jLTI2Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaD05Nzk9c3RydWN0IGF0aDZrbCAqYXRoNmtsX2NvcmVfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaDo5ODA6aW50IGF0aDZrbF9jb3JlX2luaXQoc3RydWN0IGF0aDZrbCAqYXIsIGVudW0gYXRoNmtsX2h0Y190eXBlIGh0Y190eXBlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTk4MS12b2lkIGF0aDZrbF9jb3JlX2NsZWFudXAoc3RydWN0IGF0aDZrbCAqYXIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvc2Rpby5jPTEzMDY9c3RhdGljIGludCBhdGg2a2xfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvc2Rpby5jLTEzNzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3NkaW8uYzoxMzcyOlx0cmV0ID0gYXRoNmtsX2NvcmVfaW5pdChhciwgQVRINktMX0hUQ19UWVBFX01CT1gpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9zZGlvLmMtMTM3My1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jPTExMTg9c3RhdGljIGludCBhdGg2a2xfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYzoxMTYyOlx0cmV0ID0gYXRoNmtsX2NvcmVfaW5pdChhciwgQVRINktMX0hUQ19UWVBFX1BJUEUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTYzLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMwMwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGF0aDZrbCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgYXRoNmtsYCBkcml2ZXIgYW5kIHRyeWluZyB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgYW5hbHlzaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYGF0aDZrbF9jb3JlX2luaXRgIGlzIGEgdmVyeSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQg4oCTIGl0JiMzOTtzIG9mdGVuIHRoZSByb290IG9mIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIFNpbWlsYXJseSwgYGF0aDZrbF91c2JfcHJvYmVgIG1ha2VzIHNlbnNlLCBhc3N1bWluZyBpdCYjMzk7cyBhIFVTQiBkZXZpY2UuIEdvdHRhIGNoZWNrIHRob3NlIG91dC4KCk5vdywgYSBmdW5jdGlvbiBsaWtlIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgKmxvb2tzKiByZWxldmFudCwgYnV0IGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZyB3aGVuIEkmIzM5O20gbG9va2luZyBmb3IgZW50cnkgcG9pbnRzIG9yIHB1YmxpY2x5IGFjY2Vzc2libGUgc3ltYm9scy4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW50ZXJuYWwgdG8gYSBwYXJ0aWN1bGFyIGZpbGUuIEkgc2hvdWxkIGV4Y2x1ZGUgdGhhdCBmcm9tIG15IGRpcmVjdCBmb2N1cy4KCkFuZCB0aGVuIEkgY29uc2lkZXJlZCBgYXRoNmtsX2RhdGFfdHhgLCBidXQgdGhhdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGEgaG90LXBhdGggZGF0YSB0cmFuc21pc3Npb24gZnVuY3Rpb24uIFdlIGRvbiYjMzk7dCB3YW50IHRvIGdldCBib2dnZWQgZG93biBpbiB0aGUgbWludXRpYWUgb2YgZGF0YSBoYW5kbGluZyBhdCB0aGlzIHN0YWdlOyBpdCYjMzk7cyB0b28gZ3JhbnVsYXIuIExldCYjMzk7cyBrZWVwIHRoYXQgaW4gbWluZCBmb3IgbGF0ZXIsIGJ1dCBhdm9pZCBpdCBmb3Igbm93LgoKVGhlIHJlYWwga2V5IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgSUJTUyBtb2RlIGlzIGNvbmZpZ3VyZWQuIFNvLCBJIG5lZWQgdG8gaHVudCBkb3duIGEgY29uZmlndXJhdGlvbiBmdW5jdGlvbiwgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgYXRoNmtsX2NmZzgwMjExX2FkZF9pZmFjZWAsIG9yIHNpbWlsYXIgbmFtaW5nLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb250cm9sIHBsYW5lIHdpbGwgbGl2ZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vay4gSSYjMzk7bGwgZm9jdXMgbXkgZWZmb3J0cyB0aGVyZSwgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MTQ4Mj1zdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0xNTEyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjE1MTM6c3RhdGljIHN0cnVjdCB3aXJlbGVzc19kZXYgKmF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0xNTE0LVx0XHRcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTM0NDA9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYXRoNmtsX2NmZzgwMjExX29wcyA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYzozNDQxOlx0LmFkZF92aXJ0dWFsX2ludGYgPSBhdGg2a2xfY2ZnODAyMTFfYWRkX2lmYWNlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NDItXHQuZGVsX3ZpcnR1YWxfaW50ZiA9IGF0aDZrbF9jZmc4MDIxMV9kZWxfaWZhY2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTM5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipFeGFtaW5pbmcgSW50ZXJmYWNlIENyZWF0aW9uIGZvciBJQlNTIFN1cHBvcnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGJlc3QgaGFuZGxlIHRoZSBJQlNTIG1vZGUgaW50ZXJmYWNlIGNyZWF0aW9uIHdpdGhpbiB0aGUgYGF0aDZrbGAgZHJpdmVyLiBUaGlua2luZyB0aGlzIHRocm91Z2gsIGBhdGg2a2xfY2ZnODAyMTFfYWRkX2lmYWNlYCBqdW1wcyBvdXQgYXMgYSBzdHJvbmcgcG9zc2liaWxpdHkuIEl0JiMzOTtzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgKmFkZGluZyogdGhlIGludGVyZmFjZSwgd2hpY2ggaXMgZXhhY3RseSB0aGUgcG9pbnQgd2hlcmUgSUJTUyBtb2RlIGNvbmZpZ3VyYXRpb24gbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIFRoaXMgZnVuY3Rpb24gd291bGQgbmVlZCB0byBwcm92aWRlIHRoZSBzdXBwb3J0IG5lZWRlZCB0byBjcmVhdGUgYW4gaW50ZXJmYWNlIGluIElCU1MgbW9kZS4KCk5vdywgd2hpbGUgYGF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2VgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgc3BvdCwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2VgIHRvIGJlIHN1cmUuIEl0IGhhbmRsZXMgaW50ZXJmYWNlICpjaGFuZ2VzKiwgYW5kIGl0JiMzOTtzIHBsYXVzaWJsZSB0aGVyZSBtaWdodCBiZSBzb21lIG92ZXJsYXAgb3IgZGVwZW5kZW5jaWVzIHRoZXJlLiBJIHNob3VsZCBjaGVjayBpZiBpdCBuZWVkcyB0byBiZSB1cGRhdGVkIG9yIGlmIHRoZSBjaGFuZ2UgdGhhdCBoYXMgdG8gYmUgbWFkZSBzaG91bGQgYmUgbWFkZSBpbiB0aGlzIGZ1bmN0aW9uIG9yIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RzLiBBIHRob3JvdWdoIHJldmlldyBvZiBib3RoIGlzIGxpa2VseSB0aGUgYmVzdCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGg2a2xfY2ZnODAyMTFfY2hhbmdlX2lmYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTE1NDI9c3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfZGVsX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTE1NjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MTU2MTpzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0xNTYyLVx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MzQ0MD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBhdGg2a2xfY2ZnODAyMTFfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0zNDQyLVx0LmRlbF92aXJ0dWFsX2ludGYgPSBhdGg2a2xfY2ZnODAyMTFfZGVsX2lmYWNlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjM0NDM6XHQuY2hhbmdlX3ZpcnR1YWxfaW50ZiA9IGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ0NC1cdC5zY2FuID0gYXRoNmtsX2NmZzgwMjExX3NjYW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODczCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqQ29uc2lkZXJpbmcgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24gYW5kIElCU1MgSm9pbmluZyoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgYGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2VgIGNhdGNoZXMgbXkgZXllLiBJdCBzZWVtcyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IEkmIzM5O20gZGVhbGluZyB3aXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIGFzc2VzcyB3aGF0IGl0IGRvZXMgdG8gcG90ZW50aWFsbHkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvdXIgSSYjMzk7bSBjdXJyZW50bHkgb2JzZXJ2aW5nLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBicm9hZGVyIHdvcmtmbG93IEkgbWlnaHQgYXMgd2VsbCBjb25zaWRlciBgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc2AgYXQgdGhlIHNhbWUgdGltZS4gVGhlIElCU1MgY29uZmlndXJhdGlvbiBwcm9jZXNzIGlzIGEgd2VsbC10cm9kZGVuIHBhdGguIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHdoZXRoZXIgdGhpcyBmaXRzIGludG8gdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoaXMgb3ZlcmFsbCBwaWN0dXJlLCBhbmQgaG93IHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgaW50ZXJmYWNlIGpvaW4gcHJvY2Vzcy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgYW4gb3BlbiBtaW5kIHRvIHNlZSBob3cgYm90aCB0aWUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9jZmc4MDIxMV9qb2luX2lic3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MTU2MT1zdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTYyMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYzoxNjI0OnN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTE2MjUtXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTM0NDA9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYXRoNmtsX2NmZzgwMjExX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ1NC1cdC5zZXRfcG93ZXJfbWdtdCA9IGF0aDZrbF9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYzozNDU1Olx0LmpvaW5faWJzcyA9IGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3MsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ1Ni1cdC5sZWF2ZV9pYnNzID0gYXRoNmtsX2NmZzgwMjExX2xlYXZlX2lic3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTY1CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgQnVnIExvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoaXMgaXNzdWUuIEJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiwgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgIGlzIGxvb2tpbmcgbGlrZSBhIHByaW1lIHN1c3BlY3QuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGF0IHRoZSBidWcgYXBwZWFycyB0byBiZSByb290ZWQgd2l0aGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAuIE15IGd1dCYjMzk7cyB0ZWxsaW5nIG1lIHRvIGludmVzdGlnYXRlIHRoZSBjb25uZWN0aW9uIGFuZCBmbG93IG9mIGRhdGEgYW5kIGNvbnRyb2wgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGNsb3NlbHkuIFdoYXQmIzM5O3MgdGhlIHN0YXRlIG9uIHRoZSBjb25uZWN0aW9uIGF0IHRob3NlIG1vbWVudHM/CgpOb3csIEkgbmVlZCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZSBhbmQgZ2V0IGFsbCB0aGUgY29udGV4dC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBub3RoaW5nIG9idmlvdXMgaXMgaGFwcGVuaW5nIHdoZW4gdGhlIElCU1MgaXMgbGVmdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsYXRlZCBmdW5jdGlvbiBhbmQgZXhhbWluZSBgYXRoNmtsX2NmZzgwMjExX2xlYXZlX2lic3NgLiBJJiMzOTtsbCB0cmFjZSB3aGF0IGhhcHBlbnMgdGhlcmUgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuIEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGJlIHJlbGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9jZmc4MDIxMV9sZWF2ZV9pYnNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTE2MjQ9c3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTE2OTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MTY5NDpzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTY5NS1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTM0NDA9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYXRoNmtsX2NmZzgwMjExX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ1NS1cdC5qb2luX2lic3MgPSBhdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjM0NTY6XHQubGVhdmVfaWJzcyA9IGF0aDZrbF9jZmc4MDIxMV9sZWF2ZV9pYnNzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NTctXHQuZ2V0X3N0YXRpb24gPSBhdGg2a2xfZ2V0X3N0YXRpb24sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjQzCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBhdGg2a2xgIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIGBhdGg2a2xgIGRyaXZlciwgY29uc2lkZXJpbmcgdGhlIGJ1ZyByZXBvcnQgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LgoKRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50cy4gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCB0aGUgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBhdGg2a2xfdXNiX3Byb2JlYCwgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgLCBhbmQgYGF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2VgLiBUaGVzZSBhcmUgbGlrZWx5IHRvIGJlIGNyaXRpY2FsIGZvciBleGVyY2lzaW5nIHRoZSB2dWxuZXJhYmxlIGNvZGUgcGF0aC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGxpa2UgSSBuZWVkIGBBVEg2S0xgIGFuZCBgQVRINktMX1VTQmAgZW5hYmxlZC4gSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBkZXBlbmRlbmNpZXMuIGBBVEg2S0xgIG5lZWRzIGBDRkc4MDIxMWAsIGFuZCBgQVRINktMX1VTQmAgZGVwZW5kcyBvbiBib3RoIGBBVEg2S0xgIGFuZCBgVVNCYC4gR290IGl0LiBTbyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdG8gaGF2ZSBlbmFibGVkLgoKVGhlIGJ1ZywgYXMgSSB1bmRlcnN0YW5kIGl0LCBsaWVzIHdpdGhpbiBgYXRoNmtsX2lic3NfbWFwX2VwaWRgLiBJdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBgY2hrX2FkaG9jX3BzX21hcHBpbmdgIGlzIHRydWUsIHdoaWNoIG9jY3VycyB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgaW4gQVAgbW9kZSBvciBBZC1Ib2MgKElCU1MpIG1vZGUgKmFuZCogcGFja2V0cyBhcmUgYmVpbmcgc2VudC4gVGhlIHZ1bG5lcmFiaWxpdHkgYXJpc2VzIGZyb20gYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3Mgd2hlcmUgYGFyLSZndDtub2RlX251bWAgZXhjZWVkcyBgTUFYX05PREVfTlVNYC4KClRoaXMgaXMgc2lnbmlmaWNhbnQuIFRoZSBidWcgaXMgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYm90aCBBUCBhbmQgSUJTUyBtb2Rlcywgd2hpY2ggaW5jcmVhc2VzIGl0cyBwcmFjdGljYWwgaW1wb3J0YW5jZS4gVGhlIGZhY3QgdGhhdCB0aGUgZHJpdmVyIHN1cHBvcnRzIFVTQiBhbmQgc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyBpcyBhIG1ham9yIGFkdmFudGFnZS4KCk9rYXksIGxldCYjMzk7cyBwdXQgaXQgYWxsIHRvZ2V0aGVyIGludG8gYSBjbGVhciBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IFllcywgYWJzb2x1dGVseS4KKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgY3JpdGljYWwgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGF0aDZrbF9pYnNzX21hcF9lcGlkYC4gVGhpcyBpc3N1ZSBpcyByZWFjaGFibGUgd2hlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGluIEFQIG1vZGUgb3IgQWQtSG9jIChJQlNTKSBtb2RlIHdoaWxlIHRyYW5zbWl0dGluZyBwYWNrZXRzLiBTeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgY2FuIGJlIHVzZWQgdG8gdGVzdCB0aGUgZHJpdmVyLCBhbmQgaXRzIFVTQiBjYXBhYmlsaXRpZXMgcHJvdmlkZSBhIG1lYW5zIHRvIGFjaGlldmUgdGhpcy4KKiAgICoqRm9jdXNTeW1ib2xzKio6IGBhdGg2a2xfdXNiX3Byb2JlYCwgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgLCBgYXRoNmtsX2NmZzgwMjExX2FkZF9pZmFjZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgQVRINktMYCwgYEFUSDZLTF9VU0JgCgpPbmUgbGFzdCB0aGluZywgc2luY2UgQVAgbW9kZSBpcyBtZW50aW9uZWQsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYGF0aDZrbF9jZmc4MDIxMV9zdGFydF9hcGAgYXMgYSBwb3RlbnRpYWwgYXJlYSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDZrbF9jZmc4MDIxMV9zdGFydF9hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBob3cgQVAgbW9kZSBpcyBzdGFydGVkIGluIGF0aDZrbDoKCioqVW5kZXJzdGFuZGluZyB0aGUgQXRoNmtsIEFQIE1vZGUgSW5pdGlhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgQVAgbW9kZSBpcyBpbml0aWF0ZWQgd2l0aGluIHRoZSBhdGg2a2wgZHJpdmVyLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIGRyaXZlciBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBzb2Z0bWFjIHN0YXRlIHRvIHB1dCB0aGUgaGFyZHdhcmUgaW50byBBUCBtb2RlLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2hlcmUqIGluIHRoZSBjb2RlIGRvZXMgdGhpcyBoYXBwZW4uIElzIGl0IHRyaWdnZXJlZCBieSBhIGNvbW1hbmQgZnJvbSB1c2Vyc3BhY2UsIG9yIHBlcmhhcHMgYXV0b21hdGljYWxseSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gc29tZSBjb25maWd1cmF0aW9uPyBJcyB0aGVyZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZWRpY2F0ZWQgdG8gaXQgb3IgaXMgaXQgaW50ZWdyYXRlZCBpbnRvIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBmbG93PyBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBsb29raW5nIGF0IHRoZSBkcml2ZXImIzM5O3MgZW50cnkgcG9pbnRzIGFuZCBjb25maWd1cmF0aW9uIHJvdXRpbmVzIGZpcnN0LiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB1c2VkIHRvIGRldGVybWluZSB0aGUgZXhhY3Qgc3RlcHMgaW52b2x2ZWQuIEtub3dpbmcgdGhlIGludGVyYWN0aW9uIHdpbGwgYXNzaXN0IGluIGtub3dpbmcgd2hlcmUgdG8gYmVnaW4gbWFraW5nIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBmb3IgaG93IHRoaXMgbWlnaHQgZGlmZmVyIGZyb20gc3RhdGlvbiBtb2RlIGFzIHRoaXMgd291bGQgbGlrZWx5IGludm9sdmUgZGlmZmVyaW5nIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFydF9hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYz0yNzE1PXN0YXRpYyBpbnQgYXRoNmtsX2dldF9yc25fY2FwYWIoc3RydWN0IGNmZzgwMjExX2JlYWNvbl9kYXRhICpiZWFjb24sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTI3NjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6Mjc2NzpzdGF0aWMgaW50IGF0aDZrbF9zdGFydF9hcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTI3NjgtXHRcdFx0ICAgc3RydWN0IGNmZzgwMjExX2FwX3NldHRpbmdzICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYz0zNDQwPXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIGF0aDZrbF9jZmc4MDIxMV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NjUtI2VuZGlmXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MzQ2NjpcdC5zdGFydF9hcCA9IGF0aDZrbF9zdGFydF9hcCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0zNDY3LVx0LmNoYW5nZV9iZWFjb24gPSBhdGg2a2xfY2hhbmdlX2JlYWNvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNDYKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYXRoNmtsYCBNb2R1bGUgQ29uZmlndXJhdGlvbiBhbmQgQnVnIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuIEZpcnN0LCBJJiMzOTttIGFkZGluZyBgYXRoNmtsX3N0YXJ0X2FwYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdC4gTG9va2luZyBhdCB0aGUgZXhpc3RpbmcgbGlzdCwgaXQmIzM5O3M6IGBhdGg2a2xfdXNiX3Byb2JlYCwgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgLCBhbmQgbm93IGBhdGg2a2xfc3RhcnRfYXBgLiBJIGp1c3QgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHN0YXRpYy4gWWVzLCBpdCBpcyBzdGF0aWMgYnV0IGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgY2ZnODAyMTFfb3BzYC4gQWhhISBUaGF0IG1lYW5zIGl0IHdvbiYjMzk7dCBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIGl0JiMzOTtzIHBlcmZlY3RseSBzdWl0YWJsZSBmb3IgRm9jdXNTeW1ib2xzLiBUaGF0IGFwcGxpZXMgdG8gYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgIGFuZCBgYXRoNmtsX3VzYl9wcm9iZWAgYXMgd2VsbC4KCk5vdywgb24gdG8gdGhlIEVuYWJsZUNvbmZpZ3MuIEkgc2VlIGBBVEg2S0xgIGFuZCBgQVRINktMX1VTQmAuIFNob3VsZCBJIGluY2x1ZGUgYENGRzgwMjExYCBhbmQgYFVTQmA/IFdoaWxlIGBDRkc4MDIxMWAgYW5kIGBVU0JgIGFyZSBvZnRlbiBzdGFuZGFyZCwgSSBuZWVkIHRvIGxpc3QgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkIGZvciBLYnVpbGQuIGBBVEg2S0xgIGFuZCBgQVRINktMX1VTQmAgYXJlIHRoZSBzcGVjaWZpYyBvbmVzLCBzbyBJJiMzOTtsbCBzdGljayB3aXRoIHRob3NlLgoKRmluYWxseSwgdGhlIGJ1ZyBmaXguIExldCBtZSB3YWxrIHRocm91Z2ggaXQuCgpUaGUgb3JpZ2luYWwgY29kZSBoYWQgdGhpcyBwb3RlbnRpYWwgaXNzdWU6IGlmIGBhci0mZ3Q7bm9kZV9udW1gIHdhcyBlcXVhbCB0byBgTUFYX05PREVfTlVNYCwgdGhlIG9sZCBjb2RlIHdvdWxkIHNldCBgZXBfbWFwYCB0byBgTUFYX05PREVfTlVNYCwgaW5jcmVtZW50IGBhci0mZ3Q7bm9kZV9udW1gIHRvIGBNQVhfTk9ERV9OVU0gJiM0MzsgMWAsIGFuZCB0aGVuIHJldHVybiBgRU5EUE9JTlRfVU5VU0VEYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgbmV4dCB0aW1lIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBsb29wIGBmb3IgKGkgPSAwOyBpICZsdDsgYXItJmd0O25vZGVfbnVtOyBpJiM0MzsmIzQzOylgIHdvdWxkIHJ1biB1cCB0byBgTUFYX05PREVfTlVNYCwgYnV0IHRoZW4gYWNjZXNzIGBhci0mZ3Q7bm9kZV9tYXBbTUFYX05PREVfTlVNXWAsIHdoaWNoIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGFuIGFycmF5IG9mIGBNQVhfTk9ERV9OVU1gLiBUaGUgbmV3IGNvZGUgY29ycmVjdGx5IHByZXZlbnRzIHRoaXMgYnkgY2hlY2tpbmcgYGlmIChhci0mZ3Q7bm9kZV9udW0gJmd0Oz0gTUFYX05PREVfTlVNKWAgKmJlZm9yZSogaW5jcmVtZW50aW5nLCBhbmQgcmV0dXJuaW5nIGBFTkRQT0lOVF9VTlVTRURgIGlmIGl0JiMzOTtzIGFscmVhZHkgYXQgdGhlIG1heGltdW0uIFRoaXMgYXZvaWRzIHRoZSBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCkl0JiMzOTtzIGEgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGZpeCwgcHJldmVudGluZyBhIG1lbW9yeSBjb3JydXB0aW9uL09PQiBhY2Nlc3MsIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24uIFRoaXMgaXMgZ29vZCB0byBnby4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRINktMJiMzNDssCiAgICAmIzM0O0FUSDZLTF9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGg2a2xfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O2F0aDZrbF9jZmc4MDIxMV9qb2luX2lic3MmIzM0OywKICAgICYjMzQ7YXRoNmtsX3N0YXJ0X2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgd2hlbiBgYXItXHUwMDNlbm9kZV9udW1gIHJlYWNoZXMgYE1BWF9OT0RFX05VTWAuIFRoZSBidWcgaXMgcmVhY2hhYmxlIGluIEFQIG9yIEFkLUhvYyAoSUJTUykgbW9kZSB3aGVuIHNlbmRpbmcgcGFja2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRINktMJiMzNDssCiAgICAmIzM0O0FUSDZLTF9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGg2a2xfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O2F0aDZrbF9jZmc4MDIxMV9qb2luX2lic3MmIzM0OywKICAgICYjMzQ7YXRoNmtsX3N0YXJ0X2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgd2hlbiBgYXItXHUwMDNlbm9kZV9udW1gIHJlYWNoZXMgYE1BWF9OT0RFX05VTWAuIFRoZSBidWcgaXMgcmVhY2hhYmxlIGluIEFQIG9yIEFkLUhvYyAoSUJTUykgbW9kZSB3aGVuIHNlbmRpbmcgcGFja2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgYXItXHUwMDNlbm9kZV9udW1gIChhIGB1OGApIHdvdWxkIGNvbnRpbnVlIHRvIGluY3JlbWVudCBldmVuIGFmdGVyIHJlYWNoaW5nIGBNQVhfTk9ERV9OVU1gLCBldmVudHVhbGx5IHdyYXBwaW5nIGFyb3VuZCB0byAwIGFuZCBvdmVyd3JpdGluZyBleGlzdGluZyBlbnRyaWVzIGluIHRoZSBgbm9kZV9tYXBgIGFycmF5LiBUaGlzIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzIG9mIHRoaXMgbmF0dXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MmEyOGQxOTE2Y2IxN2RlZDEwMmU4MWJlYTUyMWQwOTNlMDM2ZTI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDg6NDE6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCmluZGV4IGQ4MTgyNTQxMzkwNjEuLmIzNDBjNzk1YjdhMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jCkBAIC02NywxMCAmIzQzOzY3LDkgQEAgc3RhdGljIHU4IGF0aDZrbF9pYnNzX21hcF9lcGlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfQogCiAJaWYgKGVwX21hcCA9PSAtMSkgewotCQllcF9tYXAgPSBhci0mZ3Q7bm9kZV9udW07Ci0JCWFyLSZndDtub2RlX251bSYjNDM7JiM0Mzs7Ci0JCWlmIChhci0mZ3Q7bm9kZV9udW0gJmd0OyBNQVhfTk9ERV9OVU0pCiYjNDM7CQlpZiAoYXItJmd0O25vZGVfbnVtICZndDs9IE1BWF9OT0RFX05VTSkKIAkJCXJldHVybiBFTkRQT0lOVF9VTlVTRUQ7CiYjNDM7CQllcF9tYXAgPSBhci0mZ3Q7bm9kZV9udW0mIzQzOyYjNDM7OwogCX0KIAogCW1lbWNweShhci0mZ3Q7bm9kZV9tYXBbZXBfbWFwXS5tYWNfYWRkciwgZXRoX2hkci0mZ3Q7aF9kZXN0LCBFVEhfQUxFTik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYXRoNmtsIElCU1MgRW5kcG9pbnQgTWFwcGluZyBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCB0byBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGluIGBhdGg2a2wvdHhyeC5jYC4gSXQmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgdG8gaG93IGVuZHBvaW50IG1hcHBpbmdzIGFyZSBhc3NpZ25lZC4gSW5pdGlhbGx5LCBteSBmaXJzdCBpbXByZXNzaW9uIHdhcyB0aGF0IHRoZSBmaXggaW52b2x2ZWQgYW4gb2ZmLWJ5LW9uZSBlcnJvci4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzOgoKYGBgYwoJaWYgKGVwX21hcCA9PSAtMSkgewoJCWVwX21hcCA9IGFyLSZndDtub2RlX251bTsKCQlhci0mZ3Q7bm9kZV9udW0mIzQzOyYjNDM7OwoJCWlmIChhci0mZ3Q7bm9kZV9udW0gJmd0OyBNQVhfTk9ERV9OVU0pCgkJCXJldHVybiBFTkRQT0lOVF9VTlVTRUQ7Cgl9CmBgYAoKQW5kIG5vdyBpdCYjMzk7czoKCmBgYGMKCWlmIChlcF9tYXAgPT0gLTEpIHsKCQlpZiAoYXItJmd0O25vZGVfbnVtICZndDs9IE1BWF9OT0RFX05VTSkKCQkJcmV0dXJuIEVORFBPSU5UX1VOVVNFRDsKCQllcF9tYXAgPSBhci0mZ3Q7bm9kZV9udW0mIzQzOyYjNDM7OwoJfQpgYGAKClRoZSBpbnRlbnQgaXMgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLiBTbywgaWYgYGFyLSZndDtub2RlX251bWAgd2FzIGBNQVhfTk9ERV9OVU1gLCB0aGUgb2xkIGNvZGUgd291bGQgYXNzaWduIGBlcF9tYXBgIHRvIGBNQVhfTk9ERV9OVU1gLCBpbmNyZW1lbnQgYGFyLSZndDtub2RlX251bWAgdG8gYE1BWF9OT0RFX05VTSAmIzQzOyAxYCwgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmV0dXJuIGBFTkRQT0lOVF9VTlVTRURgLiBUaGlzIGxvb2tzIGxpa2UgaXQgd2FzIGF0dGVtcHRpbmcgdG8gYXZvaWQgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSByZXZpc2VkIGNvZGUgY2xlYXJseSBwcmV2ZW50cyB0aGUgYXNzaWdubWVudCBvZiBgZXBfbWFwYCBmcm9tIGJlaW5nIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgTUFYX05PREVfTlVNYCBhdCB0aGUgb3V0c2V0LgoKQnV0IHdhaXQsIEkgc3RhcnRlZCB0aGlua2luZyBhYm91dCB0aGUgZWRnZSBjYXNlcy4gTGV0JiMzOTtzIHJldmlzaXQgdGhlIG9sZCBjb2RlLiBJZiBgYXItJmd0O25vZGVfbnVtYCAqd2FzKiBgTUFYX05PREVfTlVNYCwgaXQgKndvdWxkKiBoYXZlIHJldHVybmVkIGBFTkRQT0lOVF9VTlVTRURgLiBJZiBpdCB3YXMgYE1BWF9OT0RFX05VTSAtIDFgIHdpdGggdGhlIHByZXZpb3VzIHZlcnNpb24sIGBlcF9tYXBgIGdldHMgYXNzaWduZWQsIGFuZCB0aGUgaW5jcmVtZW50IG1ha2VzIGBhci0mZ3Q7bm9kZV9udW1gIG5vdyBgTUFYX05PREVfTlVNYCwgd2hpY2ggYXZvaWRzIHRoZSBjaGVjay4gVGhhdCBzZWVtcyBjb3JyZWN0LCBnaXZlbiB0aGF0IGBhci0mZ3Q7bm9kZV9tYXBgIGlzIHNpemUgYE1BWF9OT0RFX05VTWAuIE9rYXksIGl0IHNlZW1zIEkgdW5kZXJzdGFuZC4gVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgY2hlY2sgKndvdWxkKiByZXR1cm4gYEVORFBPSU5UX1VOVVNFRGAgaWYgaXQgaGl0IGBNQVhfTk9ERV9OVU1gLCB3aGljaCBJIHNob3VsZCBoYXZlIHNlZW4gaW1tZWRpYXRlbHkuCgpOb3csIGRvZXMgdGhlIGBhci0mZ3Q7bm9kZV9tYXBgIGFycmF5IGFjdHVhbGx5IGhhdmUgYSBzaXplIG9mIGBNQVhfTk9ERV9OVU1gPyBHaXZlbiB0aGUgbG9naWMsIHRoaXMgaXMgaGlnaGx5IGxpa2VseSwgYW5kIHRoZSBjaGFuZ2UgcHJvdmlkZXMgY2xlYXJlciBib3VuZHMgY2hlY2tpbmcgYmVmb3JlIGFzc2lnbmluZyB0aGUgYGVwX21hcGAgYW5kIHByZXZlbnRzIGEgcG9zc2libGUgd3JpdGUgcGFzdCB0aGUgYm91bmRzIG9mIGBhci0mZ3Q7bm9kZV9tYXBgLiBUaGUgY2hhbmdlIGlzIGluZGVlZCBhIGNvcnJlY3QgYW5kIG5lY2Vzc2FyeSBmaXggdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBtYW5hZ2VtZW50IHdoZW4gbWFwcGluZyBJQlNTIGVuZHBvaW50cywgaW1wcm92aW5nIHRoZSBvdmVyYWxsIHJvYnVzdG5lc3Mgb2YgdGhlIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFYX05PREVfTlVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNDUtI2RlZmluZSBBVEg2S0xfTUFYX0VORFBPSU5UUyAgIDRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjQ2OiNkZWZpbmUgTUFYX05PREVfTlVNICAgICAgICAgICAxNVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNDctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmg9Njk0PXN0cnVjdCBhdGg2a2wge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTcyOC1cdHU4IHR4X3B3cjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjcyOTpcdHN0cnVjdCBhdGg2a2xfbm9kZV9tYXBwaW5nIG5vZGVfbWFwW01BWF9OT0RFX05VTV07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaC03MzAtXHR1OCBpYnNzX3BzX2VuYWJsZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz00Mj1zdGF0aWMgdTggYXRoNmtsX2lic3NfbWFwX2VwaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy02OS1cdGlmIChlcF9tYXAgPT0gLTEpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjcwOlx0XHRpZiAoYXItXHUwMDNlbm9kZV9udW0gXHUwMDNlPSBNQVhfTk9ERV9OVU0pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy03MS1cdFx0XHRyZXR1cm4gRU5EUE9JTlRfVU5VU0VEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBFbmRwb2ludCBBbGxvY2F0aW9uIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBhIHBvdGVudGlhbCBpc3N1ZSBtaWdodCBsaWUuIEl0IGxvb2tzIGxpa2UgYG5vZGVfbWFwYCBoYXMgYSBzaXplIG9mIGBNQVhfTk9ERV9OVU1gLiBUaGUgY3J1Y2lhbCBwYXJ0IHNlZW1zIHRvIGJlIGhvdyBgYXItJmd0O25vZGVfbnVtYCBpbnRlcmFjdHMgd2l0aCB0aGlzIG1hcC4KCkluaXRpYWxseSwgSSB3YWxrZWQgdGhyb3VnaCB0aGUgY2FzZSB3aGVyZSBgYXItJmd0O25vZGVfbnVtYCAqaXMqIGVxdWFsIHRvIGBNQVhfTk9ERV9OVU1gLiBJbiB0aGF0IHNjZW5hcmlvLCBgZXBfbWFwYCBiZWNvbWVzIGBNQVhfTk9ERV9OVU1gLCBhbmQgYGFyLSZndDtub2RlX251bWAgZ2V0cyBpbmNyZW1lbnRlZCB0byBgTUFYX05PREVfTlVNICYjNDM7IDFgLiBTaW5jZSBgTUFYX05PREVfTlVNICYjNDM7IDFgIGlzIGdyZWF0ZXIgdGhhbiBgTUFYX05PREVfTlVNYCwgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSByZXR1cm5zIGBFTkRQT0lOVF9VTlVTRURgLiBTZWVtcyBhbHJpZ2h0Li4uCgpUaGVuLCBJIHRob3VnaHQgYWJvdXQgd2hhdCBoYXBwZW5zIGlmIGBhci0mZ3Q7bm9kZV9udW1gICp3YXMqIGBNQVhfTk9ERV9OVU0gLSAxYCBpbml0aWFsbHkuIEluIHRoYXQgY2FzZSwgYGVwX21hcGAgYmVjb21lcyBgTUFYX05PREVfTlVNIC0gMWAsIGFuZCBgYXItJmd0O25vZGVfbnVtYCBpbmNyZW1lbnRzIHRvIGBNQVhfTk9ERV9OVU1gLiBUaGUgY3J1Y2lhbCBjaGVjayBgYXItJmd0O25vZGVfbnVtICZndDsgTUFYX05PREVfTlVNYCBiZWNvbWVzIGZhbHNlLCBhbmQgdGhlIGNvZGUgY29udGludWVzLCBtZWFuaW5nIHRoZSBtYXAgZW50cnkgYE1BWF9OT0RFX05VTSAtIDFgIGlzIHZhbGlkLiBBbGwgZ29vZC4KCkkgc3RhcnRlZCByZXZpc2l0aW5nIHRoZSBlZGdlIGNhc2Ugd2hlcmUgYGFyLSZndDtub2RlX251bWAgYmVnaW5zIGF0IGBNQVhfTk9ERV9OVU1gICh3aGljaCBJIGluaXRpYWxseSBkaXNtaXNzZWQgYXMgY29ycmVjdCkuICBJJiMzOTt2ZSByZWFsaXplZCB0aGF0IHRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgcmV0dXJucyBgRU5EUE9JTlRfVU5VU0VEYCwgYnV0IHRoZW4gaXQgc3RpbGwgKmluY3JlbWVudHMqIGBhci0mZ3Q7bm9kZV9udW1gLiAgVGhlIG5leHQgdGltZSwgYGFyLSZndDtub2RlX251bWAgd2lsbCBiZSBgTUFYX05PREVfTlVNICYjNDM7IDFgLiBUaGlzIGxlYWRzIHRvIGBlcF9tYXBgIGJlaW5nIGBNQVhfTk9ERV9OVU0gJiM0MzsgMWAuICBBbmQgYGFyLSZndDtub2RlX251bWAgZ2V0cyBpbmNyZW1lbnRlZCB0byBgTUFYX05PREVfTlVNICYjNDM7IDJgLiBJdCByZXR1cm5zIGBFTkRQT0lOVF9VTlVTRURgIGFnYWluLgoKU28sIHRoZSBjb2RlIGp1c3Qga2VlcHMgaW5jcmVtZW50aW5nIGBhci0mZ3Q7bm9kZV9udW1gISAgV2hpY2ggbWVhbnMgaXQgbWlnaHQgY2F1c2UgYW4gb3ZlcmZsb3cgb24gYHU4YCwgb3Igb3RoZXIgc2ltaWxhciB1bmludGVuZGVkIGJlaGF2aW9yLgoKTm93IEkgbmVlZCB0byBjaGVjayB0aGUgZGF0YSB0eXBlIG9mIGBhci0mZ3Q7bm9kZV9udW1gIHRvIHNlZSBleGFjdGx5IHdoYXQga2luZCBvZiBvdmVyZmxvdyBwb3NzaWJpbGl0aWVzIEkgbWlnaHQgZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9kZV9udW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaD02OTQ9c3RydWN0IGF0aDZrbCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNzMxLVx0Ym9vbCBpYnNzX2lmX2FjdGl2ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjczMjpcdHU4IG5vZGVfbnVtO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNzMzLVx0dTggbmV4dF9lcF9pZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5NgoJCQkJCQkJb3V0cHV0OiAxMTIKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBvdGVudGlhbCBCdWcqKgoKT2theSwgc28gYG5vZGVfbnVtYCBpcyBhIGB1OGAsIG1lYW5pbmcgaXQmIzM5O3MgZ29pbmcgdG8gd3JhcCBhcm91bmQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdhczogaWYgaXQgaW5jcmVtZW50cyBpbmRlZmluaXRlbHksIGl0JiMzOTtsbCBldmVudHVhbGx5IGhpdCAwLCByaWdodD8gQW5kIHdoZW4gYG5vZGVfbnVtYCBiZWNvbWVzIDAsIHRoZW4gYGVwX21hcGAgYWxzbyBiZWNvbWVzIDAuIFRoYXQmIzM5O3MgZmluZSwgYnV0IHRoZW4gYG5vZGVfbnVtYCBpbmNyZW1lbnRzIGFnYWluIHRvIDEuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hpbGUgYG5vZGVfbnVtYCBiZWNvbWVzIDAsIGl0IGFsc28gaW5jcmVtZW50cyBhZ2FpbiwgYW5kIGV2ZW50dWFsbHkgZ29lcyBwYXN0IHRoZSBkZWZpbmVkIHJhbmdlLCB3aGljaCB3b3VsZCBvdmVyd3JpdGUgZXhpc3RpbmcgZW50cmllcyEgSXMgdGhpcyBvdXQtb2YtYm91bmRzPyBObywgaXQmIzM5O3Mgb3ZlcndyaXRpbmcgc29tZXRoaW5nLCBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCldhaXQgYSBzZWNvbmQsIHRoZXJlJiMzOTtzIGFub3RoZXIgc2NlbmFyaW8uIFdoYXQgaWYgYG5vZGVfbnVtYCB3cmFwcyBhcm91bmQgYWZ0ZXIgcmVhY2hpbmcgMjU1PyBTbyBJIHRoaW5rIHRoZSBwcm9ibGVtIGlzIHRoYXQgYG5vZGVfbnVtYCB3cmFwcGluZyBhcm91bmQgY2F1c2VzIGVudHJpZXMgdG8gYmUgb3ZlcndyaXR0ZW4uIEl0IGxvb2tzIG1vcmUgbGlrZSBhIGxvZ2ljIGJ1ZyBhdCBmaXJzdC4gSSBjb25zaWRlcmVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlbiBJIGxvb2tlZCBjbG9zZWx5LCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBldmlkZW5jZSBvZiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmUuIAoKS0FTQU4gd291bGRuJiMzOTt0IGNhdGNoIHRoaXMgaWYgaXQganVzdCBvdmVyd3JpdGVzIGBub2RlX21hcFswXWAsIHJpZ2h0PyBSaWdodCEgVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcHJldmVudGluZyB0aGUgaW5jcmVtZW50IHdoZW4gYGFyLSZndDtub2RlX251bWAgaXMgYWxyZWFkeSBlcXVhbCB0byBvciBwYXN0IGBNQVhfTk9ERV9OVU1gLiBTbyBJIGFtIG5vdyBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuCgpJIHdpbGwgZG91YmxlIGNoZWNrIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBqdXN0IHRvIGJlIHN1cmUuIEkgY2FuIHNlZSB0aGF0IGBlcF9tYXBgIGlzIHVzZWQgYXMgYW4gaW5kZXggaW50byBgYXItJmd0O25vZGVfbWFwYCBhbmQgdGhlIGBtZW1jcHlgIHdyaXRlcyB0byBgbm9kZV9tYXBgLiBObyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwuIFRoZSBwYXRjaCBwcmV2ZW50cyBgYXItJmd0O25vZGVfbnVtYCBmcm9tIGV4Y2VlZGluZyBgTUFYX05PREVfTlVNYC4gVGhpcyBpcyBqdXN0IGEgc3RhbmRhcmQgaW50ZWdlciBvdmVyZmxvdy9sb2dpYyBidWcuIEl0IGRvZXNuJiMzOTt0IG5lZWQgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBhci1cdTAwM2Vub2RlX251bWAgKGEgYHU4YCkgd291bGQgY29udGludWUgdG8gaW5jcmVtZW50IGV2ZW4gYWZ0ZXIgcmVhY2hpbmcgYE1BWF9OT0RFX05VTWAsIGV2ZW50dWFsbHkgd3JhcHBpbmcgYXJvdW5kIHRvIDAgYW5kIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIGBub2RlX21hcGAgYXJyYXkuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgb2YgdGhpcyBuYXR1cmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgYXItXHUwMDNlbm9kZV9udW1gIChhIGB1OGApIHdvdWxkIGNvbnRpbnVlIHRvIGluY3JlbWVudCBldmVuIGFmdGVyIHJlYWNoaW5nIGBNQVhfTk9ERV9OVU1gLCBldmVudHVhbGx5IHdyYXBwaW5nIGFyb3VuZCB0byAwIGFuZCBvdmVyd3JpdGluZyBleGlzdGluZyBlbnRyaWVzIGluIHRoZSBgbm9kZV9tYXBgIGFycmF5LiBUaGlzIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzIG9mIHRoaXMgbmF0dXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MToxMy44ODAyNjQxMjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyODg4NDQ3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRINktMXCIsXG4gICAgXCJBVEg2S0xfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoNmtsX3VzYl9wcm9iZVwiLFxuICAgIFwiYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc1wiLFxuICAgIFwiYXRoNmtsX3N0YXJ0X2FwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgYXItXFx1MDAzZW5vZGVfbnVtYCAoYSBgdThgKSB3b3VsZCBjb250aW51ZSB0byBpbmNyZW1lbnQgZXZlbiBhZnRlciByZWFjaGluZyBgTUFYX05PREVfTlVNYCwgZXZlbnR1YWxseSB3cmFwcGluZyBhcm91bmQgdG8gMCBhbmQgb3ZlcndyaXRpbmcgZXhpc3RpbmcgZW50cmllcyBpbiB0aGUgYG5vZGVfbWFwYCBhcnJheS4gVGhpcyBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyBvZiB0aGlzIG5hdHVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBpbiBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIHdoZW4gYGFyLVxcdTAwM2Vub2RlX251bWAgcmVhY2hlcyBgTUFYX05PREVfTlVNYC4gVGhlIGJ1ZyBpcyByZWFjaGFibGUgaW4gQVAgb3IgQWQtSG9jIChJQlNTKSBtb2RlIHdoZW4gc2VuZGluZyBwYWNrZXRzLiBUaGUgZHJpdmVyIHN1cHBvcnRzIFVTQiBhbmQgY2FuIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjEzLjg4MDI3MTc5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0Njk5MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODJhMjhkMTkxNmNiMTdkZWQxMDJlODFiZWE1MjFkMDkzZTAzNmUyOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODo0MToxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXFxuaW5kZXggZDgxODI1NDEzOTA2MS4uYjM0MGM3OTViN2EzMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXFxuQEAgLTY3LDEwICs2Nyw5IEBAIHN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZXBfbWFwID09IC0xKSB7XFxuLVxcdFxcdGVwX21hcCA9IGFyLVxcdTAwM2Vub2RlX251bTtcXG4tXFx0XFx0YXItXFx1MDAzZW5vZGVfbnVtKys7XFxuLVxcdFxcdGlmIChhci1cXHUwMDNlbm9kZV9udW0gXFx1MDAzZSBNQVhfTk9ERV9OVU0pXFxuK1xcdFxcdGlmIChhci1cXHUwMDNlbm9kZV9udW0gXFx1MDAzZT0gTUFYX05PREVfTlVNKVxcbiBcXHRcXHRcXHRyZXR1cm4gRU5EUE9JTlRfVU5VU0VEO1xcbitcXHRcXHRlcF9tYXAgPSBhci1cXHUwMDNlbm9kZV9udW0rKztcXG4gXFx0fVxcbiBcXG4gXFx0bWVtY3B5KGFyLVxcdTAwM2Vub2RlX21hcFtlcF9tYXBdLm1hY19hZGRyLCBldGhfaGRyLVxcdTAwM2VoX2Rlc3QsIEVUSF9BTEVOKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MTQuMzQ2MDIzMTA5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQwOTcxNTMyMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDZLTFwiLFxuICAgIFwiQVRINktMX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDZrbF91c2JfcHJvYmVcIixcbiAgICBcImF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NcIixcbiAgICBcImF0aDZrbF9zdGFydF9hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgd2hlbiBgYXItXFx1MDAzZW5vZGVfbnVtYCByZWFjaGVzIGBNQVhfTk9ERV9OVU1gLiBUaGUgYnVnIGlzIHJlYWNoYWJsZSBpbiBBUCBvciBBZC1Ib2MgKElCU1MpIG1vZGUgd2hlbiBzZW5kaW5nIHBhY2tldHMuIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGFuZCBjYW4gYmUgZnV6emVkIHZpYSBzeXprYWxsZXIncyBVU0IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODJhMjhkMTkxNmNiMTdkZWQxMDJlODFiZWE1MjFkMDkzZTAzNmUyOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjQxOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY1xuaW5kZXggZDgxODI1NDEzOTA2MS4uYjM0MGM3OTViN2EzMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY1xuQEAgLTY3LDEwICs2Nyw5IEBAIHN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGVwX21hcCA9PSAtMSkge1xuLVx0XHRlcF9tYXAgPSBhci1cdTAwM2Vub2RlX251bTtcbi1cdFx0YXItXHUwMDNlbm9kZV9udW0rKztcbi1cdFx0aWYgKGFyLVx1MDAzZW5vZGVfbnVtIFx1MDAzZSBNQVhfTk9ERV9OVU0pXG4rXHRcdGlmIChhci1cdTAwM2Vub2RlX251bSBcdTAwM2U9IE1BWF9OT0RFX05VTSlcbiBcdFx0XHRyZXR1cm4gRU5EUE9JTlRfVU5VU0VEO1xuK1x0XHRlcF9tYXAgPSBhci1cdTAwM2Vub2RlX251bSsrO1xuIFx0fVxuIFxuIFx0bWVtY3B5KGFyLVx1MDAzZW5vZGVfbWFwW2VwX21hcF0ubWFjX2FkZHIsIGV0aF9oZHItXHUwMDNlaF9kZXN0LCBFVEhfQUxFTik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MToxNC4zNDYwMjU1NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDc4MjQwNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBCdWcgRml4IGluIGF0aDZrbCdzIElCU1MgTWFwcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY2AsIHNwZWNpZmljYWxseSB0aGUgYGF0aDZrbF9pYnNzX21hcF9lcGlkYCBmdW5jdGlvbi4gVGhlIGNvZGUgY2hhbmdlIGlzIGEgbWlub3Igb25lLCBidXQgaXQgbG9va3MgbGlrZSBhIHBvdGVudGlhbCBjcml0aWNhbCBmaXguIEl0J3MgZXNzZW50aWFsbHkgcHJldmVudGluZyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBieSBjaGVja2luZyBpZiBgYXItXHUwMDNlbm9kZV9udW1gIGlzICphbHJlYWR5KiBhdCBgTUFYX05PREVfTlVNYCBiZWZvcmUgYXNzaWduaW5nIGl0LCBpbnN0ZWFkIG9mIGFzc2lnbmluZyBhbmQgdGhlbiBjaGVja2luZywgYW5kIHBvdGVudGlhbGx5IHdyYXBwaW5nLiBJIHN1c3BlY3QgaXQgd2FzIGNhdXNpbmcgYSBjcmFzaCBvciBkYXRhIGNvcnJ1cHRpb24gd2hlbiB0aGUgbm9kZSBjb3VudCBoaXRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUsIHdoaWNoIHdvdWxkIGJlIGJhZC5cblxuSG1tLCB0aGlzIGlzIGZvciB0aGUgYGF0aDZrbGAgZHJpdmVyLiBSaWdodCwgdGhhdCdzIHRoZSBBdGhlcm9zIEFSNjAwMyBhbmQgQVI2MDA0IFdpLUZpIGNoaXBzZXRzLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIG5vdyBpcywgY2FuIEkgYWN0dWFsbHkgKnRlc3QqIHRoaXMgZWZmZWN0aXZlbHk/IEhhcmR3YXJlIGRyaXZlcnMgbGlrZSB0aGlzIGFyZSBvZnRlbiBhIHBhaW4gdG8gZGVidWcgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJcyB0aGVyZSBhIHdheSB0byBkbyB0aGlzIGluIFFFTVUsIG9yIHdpbGwgSSBuZWVkIHBoeXNpY2FsIEFSNjAwMy9BUjYwMDQgaGFyZHdhcmU/IE1vc3Qgb2YgdGhlIHRpbWUsIEknZCBuZWVkIFNESU8gb3IgVVNCLlxuXG5XYWl0IGEgc2Vjb25k4oCmIEkgdGhpbmsgYGF0aDZrbGAgKmRvZXMqIGhhdmUgYSBVU0IgZHJpdmVyISBZZXAsIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jYC4gVGhhdOKAmXMgZ29vZCBuZXdzISBJZiBpdCdzIGdvdCBhIFVTQiBpbXBsZW1lbnRhdGlvbiwgdGhhdCBtZWFucyBzeXprYWxsZXIncyBVU0IgZnV6emluZyAoc3BlY2lmaWNhbGx5IHRoZSBgZHVtbXlfaGNkYCBzdXBwb3J0KSBtaWdodCBiZSBhcHBsaWNhYmxlIGhlcmUuIFRoYXQncyBhIGh1Z2Ugd2luIOKAkyBpdCBjb3VsZCBtYWtlIHRlc3RpbmcgdGhpcyBwYXRjaCBzaWduaWZpY2FudGx5IGVhc2llciwgYW5kIG1vcmUgc2NhbGFibGUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIFVTQiBwYXRoIGlzIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSBlbXVsYXRlZCwgYnV0IHRoaXMgaXMgYSBwcm9taXNpbmcgbGVhZC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgVVNCIGFzcGVjdCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDczLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MjAuODI0MjcwMTQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDEzNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9pYnNzX21hcF9lcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jPTM3PXN0YXRpYyBpbmxpbmUgdTggYXRoNmtsX2dldF9haWQodTggdGlkX211eClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjQyOnN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQzLVxcdFxcdFxcdCAgICAgICB1MzIgKm1hcF9ubylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jPTM1NT1uZXRkZXZfdHhfdCBhdGg2a2xfZGF0YV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDU0LVxcdGlmIChjaGtfYWRob2NfcHNfbWFwcGluZylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYzo0NTU6XFx0XFx0ZWlkID0gYXRoNmtsX2lic3NfbWFwX2VwaWQoc2tiLCBkZXYsIFxcdTAwMjZtYXBfbm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQ1Ni1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjIwLjg3NDI5NTMzOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzgyNDM1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgYXRoNmtsX2RhdGFfdHhgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYGF0aDZrbF9kYXRhX3R4YCBpcyB0aGUgbmV0d29yayBkcml2ZXIncyBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uIOKAkyB0aGUgY29yZSB0cmFuc21pdCBwYXRoLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBwaWVjaW5nIHRoaW5ncyB0b2dldGhlci4gVGhpcyBtZWFucyBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBtYXBwaW5nIG9yIHByZXBhcmluZyBkYXRhIGZvciB0cmFuc21pc3Npb24uXG5cblNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgYSBrZXkgZWxlbWVudCBpbiB0aGUgZGF0YSB0cmFuc21pc3Npb24gcHJvY2VzcywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IG9mIGBhdGg2a2xgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmc6IGlzIHRoaXMgYSBVU0IgZHJpdmVyPyBUaGlzIGluZm9ybWF0aW9uIHdpbGwgZ3JlYXRseSBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gY2FsbCwgYmVjYXVzZSBVU0IgaGFzIHBhcnRpY3VsYXIgcmVxdWlyZW1lbnRzIGFuZCBjb25zdHJhaW50cy4gSWYgaXQgKmlzKiBVU0IsIHRoYXQgcmFpc2VzIHNwZWNpZmljIHF1ZXN0aW9ucyBhYm91dCB0aGUgZGF0YSBmcmFtaW5nLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIGludGVycnVwdCBoYW5kbGluZyBpbnZvbHZlZC4gVW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBncmVhdGx5IGluZm9ybXMgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjI0LjAxMjU0MTQ0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM3NjY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfdXNiX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jPTEyMjU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0aDZrbF91c2JfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMjM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM6MTIzNjptb2R1bGVfdXNiX2RyaXZlcihhdGg2a2xfdXNiX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMjM3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MToyNC4wNjA5MjUzMDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMwMjYyNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGF0aDZrbCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgYXRoNmtsYCAqZG9lcyogaGF2ZSBhIFVTQiBkcml2ZXIuIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBvcGVucyBpdCB1cCB0byB0aGUgZnVsbCBzdWl0ZSBvZiBzeXprYWxsZXIncyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgZ29vZCBuZXdzLCBhIGRlZmluaXRlIGF2ZW51ZSB0byBleHBsb3JlIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgdGFyZ2V0aW5nIGl0cyBkYXRhIHRyYW5zbWlzc2lvbiBwYXRoLiBUaGUgZnVuY3Rpb24gYGF0aDZrbF9kYXRhX3R4YCBqdW1wcyBvdXQgYXMgdGhlIG9idmlvdXMgY2FuZGlkYXRlIGZvciBpbnRlbnNpdmUgZnV6emluZyBlZmZvcnRzLiBUaGF0IGZ1bmN0aW9uIGlzIHdoZXJlIEknbGwgY29uY2VudHJhdGUgbXkgaW5pdGlhbCBhdHRlbXB0cy4gTm93LCBsZXQncyBsb2NhdGUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSBmb3IgYGF0aDZrbGAsIHNvIEkgY2FuIHNlZSBob3cgaXQncyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIFRoYXQncyB0aGUgbmV4dCBzdGVwIHRvIGVuc3VyaW5nIG15IGZ1enppbmcgY29uZmlndXJhdGlvbiBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjIwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MjcuMTkxMTkxMTE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjMzMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEg2S0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZzoyOmNvbmZpZyBBVEg2S0xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBtb2JpbGUgY2hpcHNldHMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWc6MTQ6Y29uZmlnIEFUSDZLTF9TRElPXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDZrbCBTRElPIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjI1OmNvbmZpZyBBVEg2S0xfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDZrbCBVU0Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWc6MzU6Y29uZmlnIEFUSDZLTF9ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDZrbCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjQ1OmNvbmZpZyBBVEg2S0xfVFJBQ0lOR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZy00Ni1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDZrbCB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL0tjb25maWctNTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnOjU3OmNvbmZpZyBBVEg2S0xfUkVHRE9NQUlOXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnLTU4LVxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoNmtsIHJlZ2RvbWFpbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MToyNy4yMzc4Mjk2MzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE1MTc5MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgdGhlIEFUSDZLTCBNb2R1bGVzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgQVRINktMYCBhbmQgYEFUSDZLTF9VU0JgIGFyZSBhdmFpbGFibGUuIEJlZm9yZSBJIHN0YXJ0IGRvd24gdGhhdCBwYXRoIHRob3VnaCwgSSBzaG91bGQgYWx3YXlzIGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQncyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rLiBUaGlzIGlzIHRoZSBiZXN0IHBsYWNlIHRvIGNvbmZpcm0gZXhhY3RseSB3aGljaCBvdGhlciBvcHRpb25zIGFyZSByZXF1aXJlZCBvciBtaWdodCBpbmZsdWVuY2UgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGVzZSBzcGVjaWZpYyBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbmRpdGlvbnMsIG5vdCBqdXN0IHRoZSBvYnZpb3VzIG9uZXMuIEEgdGhvcm91Z2ggS2NvbmZpZyBpbnNwZWN0aW9uIGlzIGNyaXRpY2FsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTozMC4yNTMwMTE4NzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuICAgMjpcXHRjb25maWcgQVRINktMXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBtb2JpbGUgY2hpcHNldHMgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBjb3JlIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uXFxuICAgNzpcXHRcXHQgIEF0aGVyb3MgQVI2MDAzIGFuZCBBUjYwMDQgY2hpcHNldHMuIFlvdSBzdGlsbCBuZWVkIHNlcGFyYXRlXFxuICAgODpcXHRcXHQgIGJ1cyBkcml2ZXJzIGZvciBVU0IgYW5kIFNESU8gdG8gYmUgYWJsZSB0byB1c2UgcmVhbCBkZXZpY2VzLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXFxuICAxMTpcXHRcXHQgIGF0aDZrbF9jb3JlLiBQbGVhc2Ugbm90ZSB0aGF0IEFSNjAwMiBhbmQgQVI2MDAxIGFyZSBub3RcXG4gIDEyOlxcdFxcdCAgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgQVRINktMX1NESU9cXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDZrbCBTRElPIHN1cHBvcnRcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIEFUSDZLTFxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBNTUNcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvblxcbiAgMjA6XFx0XFx0ICBBdGhlcm9zIEFSNjAwMyBhbmQgQVI2MDA0IGNoaXBzZXRzIHJ1bm5pbmcgb3ZlciBTRElPLiBJZiB5b3VcXG4gIDIxOlxcdFxcdCAgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdGg2a2xfc2Rpby5cXG4gIDIyOlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBBUjYwMDIgYW5kIEFSNjAwMSBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzXFxuICAyMzpcXHRcXHQgIGRyaXZlci5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIEFUSDZLTF9VU0JcXG4gIDI2OlxcdFxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIGF0aDZrbCBVU0Igc3VwcG9ydFxcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQVRINktMXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIFVTQlxcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uXFxuICAzMTpcXHRcXHQgIEF0aGVyb3MgQVI2MDA0IGNoaXBzZXQgYW5kIGNoaXBzZXRzIGJhc2VkIG9uIGl0IHJ1bm5pbmcgb3ZlclxcbiAgMzI6XFx0XFx0ICBVU0IuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmVcXG4gIDMzOlxcdFxcdCAgY2FsbGVkIGF0aDZrbF91c2IuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBBVEg2S0xfREVCVUdcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoNmtsIGRlYnVnZ2luZ1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gQVRINktMXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZXMgYXRoNmtsIGRlYnVnIHN1cHBvcnQsIGluY2x1ZGluZyBkZWJ1ZyBtZXNzYWdlc1xcbiAgNDA6XFx0XFx0ICBlbmFibGVkIHdpdGggZGVidWdfbWFzayBtb2R1bGUgcGFyYW1ldGVyIGFuZCBkZWJ1Z2ZzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjMwLjI1MzA5NDk5NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMwODc4ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBXaXJlbGVzcyBEcml2ZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIHRoZSBjb3JlIGNvbXBvbmVudHM6IGBBVEg2S0xgLCBgQVRINktMX1VTQmAsIGBDRkc4MDIxMWAsIGFuZCwgb2J2aW91c2x5LCB0aGUgYFVTQmAgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgY29ubmVjdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWxsIHByZXNlbnQgYW5kIGFjY291bnRlZCBmb3IuIEhvbGQgb24sIHRob3VnaC4uLiB0aGlua2luZyBhYm91dCBpdCwgYE1BQzgwMjExYCBpc24ndCAqc3RyaWN0bHkqIHJlcXVpcmVkIGluIHRoZSBzYW1lIHdheSwgYnV0IGBDRkc4MDIxMWAgZGVmaW5pdGVseSBpcy4gSXQncyB0aGUgY29uZmlndXJhdGlvbiBsYXllciwgYW5kIEknZCBiZSBzdW5rIHdpdGhvdXQgaXQuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb246IGNhbiBJIHRyYWNlIHRoZSBkYXRhIHRyYW5zbWlzc2lvbiBwYXRoPyBTcGVjaWZpY2FsbHksIGlzIGBhdGg2a2xfZGF0YV90eGAgcmVhY2hhYmxlPyBBaCwgeWVzLCBvZiBjb3Vyc2UhIFRoYXQncyB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiBmb3IgdGhlIG5ldF9kZXZpY2UuIFRoYXQncyB0aGUgZ2F0ZXdheSBmb3IgZGF0YSBsZWF2aW5nIHRoZSBzeXN0ZW0uXG5cbkxldCdzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEknbGwgY2hlY2sgYGF0aDZrbF9pYnNzX21hcF9lcGlkYC4gSXQgbG9va3MgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGBhdGg2a2xfZGF0YV90eGAsIHNvIHRoYXQncyBhIGNydWNpYWwgbGluayBpbiB0aGUgY2hhaW4uXG5cbkZpbmFsbHksIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhdGg2a2xfZGF0YV90eGAgaXRzZWxmLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmNgIHRvIHNlZSBob3cgaXQgd29ya3MgdW5kZXIgdGhlIGhvb2QuIEl0J3MgdGltZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgZmxvdyBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY29ubmVjdGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQxOjM1LjU4Mzk3NzIzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2Nzc4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoNmtsX2RhdGFfdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmg9OTE2PXZvaWQgYXRoNmtsX2ZyZWVfY29va2llKHN0cnVjdCBhdGg2a2wgKmFyLCBzdHJ1Y3QgYXRoNmtsX2Nvb2tpZSAqY29va2llKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaDo5MTc6bmV0ZGV2X3R4X3QgYXRoNmtsX2RhdGFfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtOTE4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM9ODY4PXZvaWQgYXRoNmtsX3BzcG9sbF9ldmVudChzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmLCB1OCBhaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYy05MTEtXFx0XFx0Y29ubi1cXHUwMDNlc3RhX2ZsYWdzIHw9IFNUQV9QU19QT0xMRUQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM6OTEyOlxcdFxcdGF0aDZrbF9kYXRhX3R4KHNrYiwgdmlmLVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYy05MTMtXFx0XFx0Y29ubi1cXHUwMDNlc3RhX2ZsYWdzIFxcdTAwMjY9IH5TVEFfUFNfUE9MTEVEO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM9OTI0PXZvaWQgYXRoNmtsX2R0aW1leHBpcnlfZXZlbnQoc3RydWN0IGF0aDZrbF92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTk1NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYzo5NTY6XFx0XFx0YXRoNmtsX2RhdGFfdHgoc2tiLCB2aWYtXFx1MDAzZW5kZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTk1Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jPTEyODM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhdGg2a2xfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTEyODUtXFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBhdGg2a2xfY2xvc2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9tYWluLmM6MTI4NjpcXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IGF0aDZrbF9kYXRhX3R4LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jLTEyODctXFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSBhdGg2a2xfc2V0X2ZlYXR1cmVzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM9Mjg1PWludCBhdGg2a2xfY29udHJvbF90eCh2b2lkICpkZXZ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMzU0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjM1NTpuZXRkZXZfdHhfdCBhdGg2a2xfZGF0YV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTM1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz0xMjMxPXN0YXRpYyB2b2lkIGF0aDZrbF91YXBzZF90cmlnZ2VyX2ZyYW1lX3J4KHN0cnVjdCBhdGg2a2xfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xMjgwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjEyODE6XFx0XFx0YXRoNmtsX2RhdGFfdHgoc2tiLCB2aWYtXFx1MDAzZW5kZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTEyODItXFx0XFx0Y29ubi1cXHUwMDNlc3RhX2ZsYWdzIFxcdTAwMjY9IH4oU1RBX1BTX0FQU0RfVFJJR0dFUik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz0xMzAwPXZvaWQgYXRoNmtsX3J4KHN0cnVjdCBodGNfdGFyZ2V0ICp0YXJnZXQsIHN0cnVjdCBodGNfcGFja2V0ICpwYWNrZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xNDg1LVxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjb25uLVxcdTAwM2Vwc3FfbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MTQ4NjpcXHRcXHRcXHRcXHRcXHRhdGg2a2xfZGF0YV90eChza2J1ZmYsIHZpZi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTQ4Ny1cXHRcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXBzcV9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTE0OTItXFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXBzcV9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYzoxNDkzOlxcdFxcdFxcdFxcdFxcdGF0aDZrbF9kYXRhX3R4KHNrYnVmZiwgdmlmLVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0xNDk0LVxcdFxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Y29ubi1cXHUwMDNlcHNxX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTU4OS1cXHRcXHRpZiAoc2tiMSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYzoxNTkwOlxcdFxcdFxcdGF0aDZrbF9kYXRhX3R4KHNrYjEsIHZpZi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTU5MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6MzUuNjI4NjY4MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMDcxMjIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYW5zbWlzc2lvbiBGbG93KipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgYXRoNmtsX2RhdGFfdHhgIGlzIGRlZmluaXRpdmVseSB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlLiBJdCdzIHRoZSBwb2ludCBvZiBlbnRyeSBmb3Igb3V0Ym91bmQgZGF0YS4gR2l2ZW4gdGhhdCwgYW5kIGFmdGVyIHNvbWUgZGlnZ2luZywgdGhlIGxpa2VseSBzb3VyY2Ugb2YgdGhlIHByb2JsZW0gaXMgaW4gYGF0aDZrbF9pYnNzX21hcF9lcGlkYC4gTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgYXRoNmtsX2lic3NfbWFwX2VwaWRgIGZ1bmN0aW9uIGFuZCBzZWUgaWYgdGhlIHJvb3QgY2F1c2UgaXMgbm93IG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5OTEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTozOC41NDkzODMzNjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RhdGljIHU4IGF0aDZrbF9pYnNzX21hcF9lcGlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICA0MzpcXHRcXHRcXHRcXHQgICAgICAgdTMyICptYXBfbm8pXFxuICA0NDpcXHR7XFxuICA0NTpcXHRcXHRzdHJ1Y3QgYXRoNmtsICphciA9IGF0aDZrbF9wcml2KGRldik7XFxuICA0NjpcXHRcXHRzdHJ1Y3QgZXRoaGRyICpldGhfaGRyO1xcbiAgNDc6XFx0XFx0dTMyIGksIGVwX21hcCA9IC0xO1xcbiAgNDg6XFx0XFx0dTggKmRhdGFwO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQqbWFwX25vID0gMDtcXG4gIDUxOlxcdFxcdGRhdGFwID0gc2tiLVxcdTAwM2VkYXRhO1xcbiAgNTI6XFx0XFx0ZXRoX2hkciA9IChzdHJ1Y3QgZXRoaGRyICopIChkYXRhcCArIHNpemVvZihzdHJ1Y3Qgd21pX2RhdGFfaGRyKSk7XFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfaGRyLVxcdTAwM2VoX2Rlc3QpKVxcbiAgNTU6XFx0XFx0XFx0cmV0dXJuIEVORFBPSU5UXzI7XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhci1cXHUwMDNlbm9kZV9udW07IGkrKykge1xcbiAgNTg6XFx0XFx0XFx0aWYgKG1lbWNtcChldGhfaGRyLVxcdTAwM2VoX2Rlc3QsIGFyLVxcdTAwM2Vub2RlX21hcFtpXS5tYWNfYWRkcixcXG4gIDU5OlxcdFxcdFxcdFxcdCAgIEVUSF9BTEVOKSA9PSAwKSB7XFxuICA2MDpcXHRcXHRcXHRcXHQqbWFwX25vID0gaSArIDE7XFxuICA2MTpcXHRcXHRcXHRcXHRhci1cXHUwMDNlbm9kZV9tYXBbaV0udHhfcGVuZCsrO1xcbiAgNjI6XFx0XFx0XFx0XFx0cmV0dXJuIGFyLVxcdTAwM2Vub2RlX21hcFtpXS5lcF9pZDtcXG4gIDYzOlxcdFxcdFxcdH1cXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0XFx0aWYgKChlcF9tYXAgPT0gLTEpIFxcdTAwMjZcXHUwMDI2ICFhci1cXHUwMDNlbm9kZV9tYXBbaV0udHhfcGVuZClcXG4gIDY2OlxcdFxcdFxcdFxcdGVwX21hcCA9IGk7XFxuICA2NzpcXHRcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGlmIChlcF9tYXAgPT0gLTEpIHtcXG4gIDcwOlxcdFxcdFxcdGlmIChhci1cXHUwMDNlbm9kZV9udW0gXFx1MDAzZT0gTUFYX05PREVfTlVNKVxcbiAgNzE6XFx0XFx0XFx0XFx0cmV0dXJuIEVORFBPSU5UX1VOVVNFRDtcXG4gIDcyOlxcdFxcdFxcdGVwX21hcCA9IGFyLVxcdTAwM2Vub2RlX251bSsrO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRtZW1jcHkoYXItXFx1MDAzZW5vZGVfbWFwW2VwX21hcF0ubWFjX2FkZHIsIGV0aF9oZHItXFx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRmb3IgKGkgPSBFTkRQT0lOVF8yOyBpIFxcdTAwM2M9IEVORFBPSU5UXzU7IGkrKykge1xcbiAgNzg6XFx0XFx0XFx0aWYgKCFhci1cXHUwMDNldHhfcGVuZGluZ1tpXSkge1xcbiAgNzk6XFx0XFx0XFx0XFx0YXItXFx1MDAzZW5vZGVfbWFwW2VwX21hcF0uZXBfaWQgPSBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTozOC41NDk5NDgwOTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgyNDQzOTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCdWcgQW5hbHlzaXMgYW5kIEZpeCBmb3IgYXRoNmtsIERyaXZlcioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3YXM6IGlmIGBhci1cdTAwM2Vub2RlX251bWAgaGl0cyBgTUFYX05PREVfTlVNYCwgdGhlIGNvZGUgY29ycmVjdGx5IGhhbmRsZXMgcmV0dXJuaW5nIGBFTkRQT0lOVF9VTlVTRURgLiBUaGUgcHJvYmxlbSBkaWRuJ3Qgc2VlbSBpbW1lZGlhdGVseSBvYnZpb3VzLiBJdCBsb29rZWQgbGlrZSBhbiBlZGdlIGNhc2UgaGFuZGxlZCBjb3JyZWN0bHkuIFRoZW4sIEkgZHVnIGRlZXBlciBhbmQgY29uc2lkZXJlZCB0aGUgc2NlbmFyaW8gd2hlbiBgYXItXHUwMDNlbm9kZV9udW1gIHN0YXJ0cyBhdCBgTUFYX05PREVfTlVNIC0gMWAuIEluIHRoYXQgY2FzZSwgYGVwX21hcGAgYmVjb21lcyBgTUFYX05PREVfTlVNIC0gMWAgYW5kIGBhci1cdTAwM2Vub2RlX251bWAgYmVjb21lcyBgTUFYX05PREVfTlVNYCwgYW5kIHRoaW5ncyAqYXBwZWFyZWQqIGZpbmUuIFRoZSBjb25kaXRpb25hbCBjaGVjayB3b3VsZCBiZSBmYWxzZSwgc28gdGhlIGNvZGUgd291bGQgcHJvY2VlZC4gSG93ZXZlciwgSSByZWFsaXplZCB0aGUgcHJvYmxlbSB3YXNuJ3QgaW4gdGhlIGltbWVkaWF0ZSBgaWZgIHN0YXRlbWVudCBpdHNlbGYsIGJ1dCB3aGF0IGhhcHBlbmVkICphZnRlciogaXQgaW4gc3Vic2VxdWVudCBjYWxscy4gYGFyLVx1MDAzZW5vZGVfbnVtYCBnZXRzIGluY3JlbWVudGVkIGV2ZW4gd2hlbiBgRU5EUE9JTlRfVU5VU0VEYCBpcyByZXR1cm5lZCEgVGhpcyBpcyB3aGVyZSBpdCBoaXQgbWU6IHRoZSBsb29wIGl0ZXJhdGluZyBvbiBgYXItXHUwMDNlbm9kZV9udW1gIHdvdWxkIHJ1biB1cCB0byBgTUFYX05PREVfTlVNYCwgYnV0IGBhci1cdTAwM2Vub2RlX21hcGAgb25seSBoYXMgYE1BWF9OT0RFX05VTWAgZWxlbWVudHMuIFRoYXQgbWVhbnMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBmaXggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogcHJldmVudCB0aGUgaW5jcmVtZW50IGlmIHRoZSBub2RlIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYnVnIGFuZCBsZWFkcyB0byBhIGNyaXRpY2FsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCwgdW5kZXIgdGhlIHJpZ2h0IGNvbmRpdGlvbnMsIGNvdWxkIGJlIGV4cGxvaXRlZC4gVGhlIGRyaXZlciBpcyBgYXRoNmtsYCwgYW5kIGl0J3MgdXNpbmcgYSBVU0IgaW50ZXJmYWNlLiBXZSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRvIHRhcmdldCB0aGlzLlxuXG5UaGUgdnVsbmVyYWJsZSBmdW5jdGlvbiBpcyBgYXRoNmtsX2lic3NfbWFwX2VwaWRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYXRoNmtsX2RhdGFfdHhgLiBgYXRoNmtsX2RhdGFfdHhgIGlzIHRoZSBuZXR3b3JrIGRyaXZlcidzIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb24sIHNvIGl0J3MgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdHJhbnNtaXR0aW5nIHBhY2tldHMsIGltcGx5aW5nIHRoYXQgaWYgdGhlIGNvbmRpdGlvbiB0cmlnZ2VyaW5nIHRoZSBidWcgY2FuIGJlIGFjaGlldmVkLCB3ZSd2ZSBnb3QgYSByZWFjaGFibGUgcGF0aC4gVG8gdHJpZ2dlciB0aGlzLCB3ZSdsbCBuZWVkIHBhY2tldHMgdG8gYmUgc2VudCB0aHJvdWdoIHRoZSBuZXR3b3JrIGRldmljZSwgd2hpY2ggaXMgY3JlYXRlZCB3aGVuIHRoZSBVU0IgZGV2aWNlIGlzIHByb2JlZC4gU28sIGBBVEg2S0xgIGFuZCBgQVRINktMX1VTQmAgbmVlZCB0byBiZSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBBbHNvLCB3ZSdsbCBuZWVkIGBDRkc4MDIxMWAgYW5kIGBVU0JgLiBJIHRoZW4gc3RhcnRlZCB0aGlua2luZyBhYm91dCBhIGdvb2Qgd2F5IHRvIGZvY3VzIHRoZSBmdXp6aW5nLiBgYXRoNmtsX2RhdGFfdHhgIGlzIHRlbXB0aW5nLCBidXQgdGhhdCdzIGEgKmhvdCogcGF0aCBhbmQgdGhhdCdzIGRpc2NvdXJhZ2VkLCBidXQgdGhpcyBpcyBhIGhvdCBwYXRoIGZ1bmN0aW9uIChgbmRvX3N0YXJ0X3htaXRgKS4gSG93ZXZlciwgYGF0aDZrbF9pYnNzX21hcF9lcGlkYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGBjaGtfYWRob2NfcHNfbWFwcGluZ2AgaXMgdHJ1ZSwgc28gdGhhdCdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6NDguMzc0MzkzOTYxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDgzMDU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGtfYWRob2NfcHNfbWFwcGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz0zNTU9bmV0ZGV2X3R4X3QgYXRoNmtsX2RhdGFfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTM2My1cXHR1OCBhYyA9IDk5OyAvKiBpbml0aWFsaXplIHRvIHVubWFwcGVkIGFjICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MzY0OlxcdGJvb2wgY2hrX2FkaG9jX3BzX21hcHBpbmcgPSBmYWxzZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYy0zNjUtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTQzOC1cXHRcXHQgICAgYXItXFx1MDAzZWlic3NfcHNfZW5hYmxlIFxcdTAwMjZcXHUwMDI2IHRlc3RfYml0KENPTk5FQ1RFRCwgXFx1MDAyNnZpZi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjQzOTpcXHRcXHRcXHRjaGtfYWRob2NfcHNfbWFwcGluZyA9IHRydWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDQwLVxcdFxcdGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDUzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjQ1NDpcXHRpZiAoY2hrX2FkaG9jX3BzX21hcHBpbmcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNDU1LVxcdFxcdGVpZCA9IGF0aDZrbF9pYnNzX21hcF9lcGlkKHNrYiwgZGV2LCBcXHUwMDI2bWFwX25vKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6NDguNDU1MjMwMjg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDQ4NTA0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIERhdGEgUGF0aCoqXG5cbk9rYXksIEknbSB0cmFjaW5nIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGlzc3VlIGlzIG9yaWdpbmF0aW5nIHdpdGhpbiB0aGUgZGF0YSBwYXRoLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgc3ltcHRvbS4gTm93LCB3aGVyZSBpcyB0aGUgVVNCIHByb2JlIGZ1bmN0aW9uIHNpdHVhdGVkIHdpdGhpbiB0aGlzIHNldHVwPyBSaWdodCwgdGhhdCdzIGBhdGg2a2xfdXNiX3Byb2JlYC4gTGV0IG1lIGp1c3QgcmVmcmVzaCBteSBtZW1vcnkg4oCTIEkgYmVsaWV2ZSB0aGF0J3MgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmNgLCBjb3JyZWN0PyBHb29kLCB0aGF0IGNvbmZpcm1zIGl0LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gYGF0aDZrbF91c2JfcHJvYmVgIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgdGhlIHJvb3QgY2F1c2Ugd2l0aGluIHRoYXQgZnVuY3Rpb24gaXRzZWxmLiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODI5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6NTIuMjAwMDgzODc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkwMTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGg2a2xfdXNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM9MTEwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDZrbF9oaWZfb3BzIGF0aDZrbF91c2Jfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTE3LS8qIGF0aDZrbCB1c2IgZHJpdmVyIHJlZ2lzdGVyZWQgZnVuY3Rpb25zICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYzoxMTE4OnN0YXRpYyBpbnQgYXRoNmtsX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmMtMTExOS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYz0xMjI1PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGg2a2xfdXNiX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3VzYi5jLTEyMjYtXFx0Lm5hbWUgPSBcXFwiYXRoNmtsX3VzYlxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYzoxMjI3OlxcdC5wcm9iZSA9IGF0aDZrbF91c2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMjI4LVxcdC5zdXNwZW5kID0gYXRoNmtsX3VzYl9wbV9zdXNwZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTo1Mi4yNDU5OTM5MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4NzAwNzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQXRoZXJvcyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhdGg2a2xgIFVTQiBkcml2ZXIuIFRoZSBvYnZpb3VzIGVudHJ5IHBvaW50IGlzIGBhdGg2a2xfdXNiX3Byb2JlYCwgdGhhdCdzIHdoZXJlIGV2ZXJ5dGhpbmcgcHJvYmFibHkgc3RhcnRzIG9uIHRoZSBVU0Igc2lkZS4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHRoZXJlLiBLbm93aW5nIGhvdyB0aGVzZSB0aGluZ3MgdGVuZCB0byB3b3JrLCBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgYXRoNmtsX2NvcmVfaW5pdGAgb3IgcG90ZW50aWFsbHkgYGF0aDZrbF9pbml0X2h3X3N0YXJ0YCwgYXMgdGhvc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIG9yIGhhcmR3YXJlIGJyaW5nLXVwLiBUaGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgYXJlIHByb2JhYmx5IHR1Y2tlZCBhd2F5IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2luaXQuY2Agb3IgcGVyaGFwcyBgY29yZS5jYC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aG9zZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MTo1NS44MzMwMDQ2NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDk1Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9jb3JlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmM9NjQ9RVhQT1JUX1NZTUJPTChhdGg2a2xfY29yZV9yeF9jb21wbGV0ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmMtNjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmM6NjY6aW50IGF0aDZrbF9jb3JlX2luaXQoc3RydWN0IGF0aDZrbCAqYXIsIGVudW0gYXRoNmtsX2h0Y190eXBlIGh0Y190eXBlKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5jLTY3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5jLTI2NC19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmM6MjY1OkVYUE9SVF9TWU1CT0woYXRoNmtsX2NvcmVfaW5pdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmMtMjY2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmg9OTc5PXN0cnVjdCBhdGg2a2wgKmF0aDZrbF9jb3JlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjk4MDppbnQgYXRoNmtsX2NvcmVfaW5pdChzdHJ1Y3QgYXRoNmtsICphciwgZW51bSBhdGg2a2xfaHRjX3R5cGUgaHRjX3R5cGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTk4MS12b2lkIGF0aDZrbF9jb3JlX2NsZWFudXAoc3RydWN0IGF0aDZrbCAqYXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9zZGlvLmM9MTMwNj1zdGF0aWMgaW50IGF0aDZrbF9zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3NkaW8uYy0xMzcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvc2Rpby5jOjEzNzI6XFx0cmV0ID0gYXRoNmtsX2NvcmVfaW5pdChhciwgQVRINktMX0hUQ19UWVBFX01CT1gpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvc2Rpby5jLTEzNzMtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYz0xMTE4PXN0YXRpYyBpbnQgYXRoNmtsX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTYxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdXNiLmM6MTE2MjpcXHRyZXQgPSBhdGg2a2xfY29yZV9pbml0KGFyLCBBVEg2S0xfSFRDX1RZUEVfUElQRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC91c2IuYy0xMTYzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDE6NTUuODgxNTA2NjQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzkwMTg3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBhdGg2a2wgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBhdGg2a2xgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGZvciBhbmFseXNpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgYXRoNmtsX2NvcmVfaW5pdGAgaXMgYSB2ZXJ5IGxpa2VseSBzdGFydGluZyBwb2ludCDigJMgaXQncyBvZnRlbiB0aGUgcm9vdCBvZiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBTaW1pbGFybHksIGBhdGg2a2xfdXNiX3Byb2JlYCBtYWtlcyBzZW5zZSwgYXNzdW1pbmcgaXQncyBhIFVTQiBkZXZpY2UuIEdvdHRhIGNoZWNrIHRob3NlIG91dC5cblxuTm93LCBhIGZ1bmN0aW9uIGxpa2UgYGF0aDZrbF9pYnNzX21hcF9lcGlkYCAqbG9va3MqIHJlbGV2YW50LCBidXQgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgd2hlbiBJJ20gbG9va2luZyBmb3IgZW50cnkgcG9pbnRzIG9yIHB1YmxpY2x5IGFjY2Vzc2libGUgc3ltYm9scy4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW50ZXJuYWwgdG8gYSBwYXJ0aWN1bGFyIGZpbGUuIEkgc2hvdWxkIGV4Y2x1ZGUgdGhhdCBmcm9tIG15IGRpcmVjdCBmb2N1cy5cblxuQW5kIHRoZW4gSSBjb25zaWRlcmVkIGBhdGg2a2xfZGF0YV90eGAsIGJ1dCB0aGF0J3MgYWxtb3N0IGNlcnRhaW5seSBhIGhvdC1wYXRoIGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uLiBXZSBkb24ndCB3YW50IHRvIGdldCBib2dnZWQgZG93biBpbiB0aGUgbWludXRpYWUgb2YgZGF0YSBoYW5kbGluZyBhdCB0aGlzIHN0YWdlOyBpdCdzIHRvbyBncmFudWxhci4gTGV0J3Mga2VlcCB0aGF0IGluIG1pbmQgZm9yIGxhdGVyLCBidXQgYXZvaWQgaXQgZm9yIG5vdy5cblxuVGhlIHJlYWwga2V5IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgSUJTUyBtb2RlIGlzIGNvbmZpZ3VyZWQuIFNvLCBJIG5lZWQgdG8gaHVudCBkb3duIGEgY29uZmlndXJhdGlvbiBmdW5jdGlvbiwgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgYXRoNmtsX2NmZzgwMjExX2FkZF9pZmFjZWAsIG9yIHNpbWlsYXIgbmFtaW5nLiBUaGF0J3Mgd2hlcmUgdGhlIGNvbnRyb2wgcGxhbmUgd2lsbCBsaXZlLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2suIEknbGwgZm9jdXMgbXkgZWZmb3J0cyB0aGVyZSwgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzAzLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQyOjAwLjQyMDUyOTAwNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxODM1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoNmtsX2NmZzgwMjExX2FkZF9pZmFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MTQ4Mj1zdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTE1MTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjE1MTM6c3RhdGljIHN0cnVjdCB3aXJlbGVzc19kZXYgKmF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTUxNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTM0NDA9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYXRoNmtsX2NmZzgwMjExX29wcyA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MzQ0MTpcXHQuYWRkX3ZpcnR1YWxfaW50ZiA9IGF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NDItXFx0LmRlbF92aXJ0dWFsX2ludGYgPSBhdGg2a2xfY2ZnODAyMTFfZGVsX2lmYWNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MjowMC40NzA3MjI3NDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MTQwNDIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgSW50ZXJmYWNlIENyZWF0aW9uIGZvciBJQlNTIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBoYW5kbGUgdGhlIElCU1MgbW9kZSBpbnRlcmZhY2UgY3JlYXRpb24gd2l0aGluIHRoZSBgYXRoNmtsYCBkcml2ZXIuIFRoaW5raW5nIHRoaXMgdGhyb3VnaCwgYGF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2VgIGp1bXBzIG91dCBhcyBhIHN0cm9uZyBwb3NzaWJpbGl0eS4gSXQncyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yICphZGRpbmcqIHRoZSBpbnRlcmZhY2UsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIHBvaW50IHdoZXJlIElCU1MgbW9kZSBjb25maWd1cmF0aW9uIG1ha2VzIHRoZSBtb3N0IHNlbnNlLiBUaGlzIGZ1bmN0aW9uIHdvdWxkIG5lZWQgdG8gcHJvdmlkZSB0aGUgc3VwcG9ydCBuZWVkZWQgdG8gY3JlYXRlIGFuIGludGVyZmFjZSBpbiBJQlNTIG1vZGUuXG5cbk5vdywgd2hpbGUgYGF0aDZrbF9jZmc4MDIxMV9hZGRfaWZhY2VgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgc3BvdCwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2VgIHRvIGJlIHN1cmUuIEl0IGhhbmRsZXMgaW50ZXJmYWNlICpjaGFuZ2VzKiwgYW5kIGl0J3MgcGxhdXNpYmxlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgb3ZlcmxhcCBvciBkZXBlbmRlbmNpZXMgdGhlcmUuIEkgc2hvdWxkIGNoZWNrIGlmIGl0IG5lZWRzIHRvIGJlIHVwZGF0ZWQgb3IgaWYgdGhlIGNoYW5nZSB0aGF0IGhhcyB0byBiZSBtYWRlIHNob3VsZCBiZSBtYWRlIGluIHRoaXMgZnVuY3Rpb24gb3IgaWYgdGhlcmUgYXJlIGFueSBjb25mbGljdHMuIEEgdGhvcm91Z2ggcmV2aWV3IG9mIGJvdGggaXMgbGlrZWx5IHRoZSBiZXN0IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTM5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDI6MDQuODIyMTI5NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzM2NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTE1NDI9c3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfZGVsX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTU2MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MTU2MTpzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTU2Mi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYz0zNDQwPXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIGF0aDZrbF9jZmc4MDIxMV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ0Mi1cXHQuZGVsX3ZpcnR1YWxfaW50ZiA9IGF0aDZrbF9jZmc4MDIxMV9kZWxfaWZhY2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjM0NDM6XFx0LmNoYW5nZV92aXJ0dWFsX2ludGYgPSBhdGg2a2xfY2ZnODAyMTFfY2hhbmdlX2lmYWNlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0zNDQ0LVxcdC5zY2FuID0gYXRoNmtsX2NmZzgwMjExX3NjYW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQyOjA0Ljg3NTQ3NjU1OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc2ODU4Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipDb25zaWRlcmluZyBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBhbmQgSUJTUyBKb2luaW5nKipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUsIGBhdGg2a2xfY2ZnODAyMTFfY2hhbmdlX2lmYWNlYCBjYXRjaGVzIG15IGV5ZS4gSXQgc2VlbXMgbGlrZSBhIHN0cm9uZyBjb250ZW5kZXIgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBJJ20gZGVhbGluZyB3aXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIGFzc2VzcyB3aGF0IGl0IGRvZXMgdG8gcG90ZW50aWFsbHkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvdXIgSSdtIGN1cnJlbnRseSBvYnNlcnZpbmcuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgYnJvYWRlciB3b3JrZmxvdyBJIG1pZ2h0IGFzIHdlbGwgY29uc2lkZXIgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgIGF0IHRoZSBzYW1lIHRpbWUuIFRoZSBJQlNTIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBpcyBhIHdlbGwtdHJvZGRlbiBwYXRoLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGV0aGVyIHRoaXMgZml0cyBpbnRvIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBjb2RlLiBMZXQncyBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoaXMgb3ZlcmFsbCBwaWN0dXJlLCBhbmQgaG93IHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgaW50ZXJmYWNlIGpvaW4gcHJvY2Vzcy4gSXQncyBpbXBvcnRhbnQgdG8ga2VlcCBhbiBvcGVuIG1pbmQgdG8gc2VlIGhvdyBib3RoIHRpZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzMsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MjowOC4wNTIzMzg2MDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjI0Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jPTE1NjE9c3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfY2hhbmdlX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTYyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM6MTYyNDpzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMTYyNS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MzQ0MD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBhdGg2a2xfY2ZnODAyMTFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NTQtXFx0LnNldF9wb3dlcl9tZ210ID0gYXRoNmtsX2NmZzgwMjExX3NldF9wb3dlcl9tZ210LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYzozNDU1OlxcdC5qb2luX2lic3MgPSBhdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0zNDU2LVxcdC5sZWF2ZV9pYnNzID0gYXRoNmtsX2NmZzgwMjExX2xlYXZlX2lic3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQyOjA4LjEwMDU2OTc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mjg0MDI5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgQnVnIExvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGlzIGlzc3VlLiBCYXNlZCBvbiB3aGF0IEkndmUgc2VlbiwgYGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NgIGlzIGxvb2tpbmcgbGlrZSBhIHByaW1lIHN1c3BlY3QuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGF0IHRoZSBidWcgYXBwZWFycyB0byBiZSByb290ZWQgd2l0aGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAuIE15IGd1dCdzIHRlbGxpbmcgbWUgdG8gaW52ZXN0aWdhdGUgdGhlIGNvbm5lY3Rpb24gYW5kIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgY2xvc2VseS4gV2hhdCdzIHRoZSBzdGF0ZSBvbiB0aGUgY29ubmVjdGlvbiBhdCB0aG9zZSBtb21lbnRzP1xuXG5Ob3csIEkgbmVlZCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZSBhbmQgZ2V0IGFsbCB0aGUgY29udGV4dC4gTGV0J3MgbWFrZSBzdXJlIG5vdGhpbmcgb2J2aW91cyBpcyBoYXBwZW5pbmcgd2hlbiB0aGUgSUJTUyBpcyBsZWZ0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0ZWQgZnVuY3Rpb24gYW5kIGV4YW1pbmUgYGF0aDZrbF9jZmc4MDIxMV9sZWF2ZV9pYnNzYC4gSSdsbCB0cmFjZSB3aGF0IGhhcHBlbnMgdGhlcmUgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuIEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGJlIHJlbGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTY1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDI6MTEuNzI4OTc1NzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODkzMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9jZmc4MDIxMV9sZWF2ZV9pYnNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYz0xNjI0PXN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTE2OTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjE2OTQ6c3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0xNjk1LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MzQ0MD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBhdGg2a2xfY2ZnODAyMTFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NTUtXFx0LmpvaW5faWJzcyA9IGF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjM0NTY6XFx0LmxlYXZlX2lic3MgPSBhdGg2a2xfY2ZnODAyMTFfbGVhdmVfaWJzcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMzQ1Ny1cXHQuZ2V0X3N0YXRpb24gPSBhdGg2a2xfZ2V0X3N0YXRpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQyOjExLjc3Njg3NDMwOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQxMDY2OTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgYXRoNmtsYCBEcml2ZXIgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoaXMgYGF0aDZrbGAgZHJpdmVyLCBjb25zaWRlcmluZyB0aGUgYnVnIHJlcG9ydCBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3QuXG5cbkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMuIEJhc2VkIG9uIHRoZSBhbmFseXNpcywgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgYXRoNmtsX3VzYl9wcm9iZWAsIGBhdGg2a2xfY2ZnODAyMTFfam9pbl9pYnNzYCwgYW5kIGBhdGg2a2xfY2ZnODAyMTFfYWRkX2lmYWNlYC4gVGhlc2UgYXJlIGxpa2VseSB0byBiZSBjcml0aWNhbCBmb3IgZXhlcmNpc2luZyB0aGUgdnVsbmVyYWJsZSBjb2RlIHBhdGguXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGxpa2UgSSBuZWVkIGBBVEg2S0xgIGFuZCBgQVRINktMX1VTQmAgZW5hYmxlZC4gSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBkZXBlbmRlbmNpZXMuIGBBVEg2S0xgIG5lZWRzIGBDRkc4MDIxMWAsIGFuZCBgQVRINktMX1VTQmAgZGVwZW5kcyBvbiBib3RoIGBBVEg2S0xgIGFuZCBgVVNCYC4gR290IGl0LiBTbyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdG8gaGF2ZSBlbmFibGVkLlxuXG5UaGUgYnVnLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgd2l0aGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAuIEl0J3MgdHJpZ2dlcmVkIHdoZW4gYGNoa19hZGhvY19wc19tYXBwaW5nYCBpcyB0cnVlLCB3aGljaCBvY2N1cnMgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGluIEFQIG1vZGUgb3IgQWQtSG9jIChJQlNTKSBtb2RlICphbmQqIHBhY2tldHMgYXJlIGJlaW5nIHNlbnQuIFRoZSB2dWxuZXJhYmlsaXR5IGFyaXNlcyBmcm9tIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIHdoZXJlIGBhci1cdTAwM2Vub2RlX251bWAgZXhjZWVkcyBgTUFYX05PREVfTlVNYC5cblxuVGhpcyBpcyBzaWduaWZpY2FudC4gVGhlIGJ1ZyBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBib3RoIEFQIGFuZCBJQlNTIG1vZGVzLCB3aGljaCBpbmNyZWFzZXMgaXRzIHByYWN0aWNhbCBpbXBvcnRhbmNlLiBUaGUgZmFjdCB0aGF0IHRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGFuZCBzeXprYWxsZXIncyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMgaXMgYSBtYWpvciBhZHZhbnRhZ2UuXG5cbk9rYXksIGxldCdzIHB1dCBpdCBhbGwgdG9nZXRoZXIgaW50byBhIGNsZWFyIHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBZZXMsIGFic29sdXRlbHkuXG4qICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBjcml0aWNhbCBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBpbiBgYXRoNmtsX2lic3NfbWFwX2VwaWRgLiBUaGlzIGlzc3VlIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBvcGVyYXRpbmcgaW4gQVAgbW9kZSBvciBBZC1Ib2MgKElCU1MpIG1vZGUgd2hpbGUgdHJhbnNtaXR0aW5nIHBhY2tldHMuIFN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhbiBiZSB1c2VkIHRvIHRlc3QgdGhlIGRyaXZlciwgYW5kIGl0cyBVU0IgY2FwYWJpbGl0aWVzIHByb3ZpZGUgYSBtZWFucyB0byBhY2hpZXZlIHRoaXMuXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYGF0aDZrbF91c2JfcHJvYmVgLCBgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc2AsIGBhdGg2a2xfY2ZnODAyMTFfYWRkX2lmYWNlYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgQVRINktMYCwgYEFUSDZLTF9VU0JgXG5cbk9uZSBsYXN0IHRoaW5nLCBzaW5jZSBBUCBtb2RlIGlzIG1lbnRpb25lZCwgSSBzaG91bGQgYWxzbyBjb25zaWRlciBgYXRoNmtsX2NmZzgwMjExX3N0YXJ0X2FwYCBhcyBhIHBvdGVudGlhbCBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQzLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjIwLjE4NzU0ODc4M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3MDg4MTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDZrbF9jZmc4MDIxMV9zdGFydF9hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDM6MjAuMjM5MjgyMTAyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzQxNDYxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIGhvdyBBUCBtb2RlIGlzIHN0YXJ0ZWQgaW4gYXRoNmtsOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIEF0aDZrbCBBUCBNb2RlIEluaXRpYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgQVAgbW9kZSBpcyBpbml0aWF0ZWQgd2l0aGluIHRoZSBhdGg2a2wgZHJpdmVyLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIGRyaXZlciBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBzb2Z0bWFjIHN0YXRlIHRvIHB1dCB0aGUgaGFyZHdhcmUgaW50byBBUCBtb2RlLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2hlcmUqIGluIHRoZSBjb2RlIGRvZXMgdGhpcyBoYXBwZW4uIElzIGl0IHRyaWdnZXJlZCBieSBhIGNvbW1hbmQgZnJvbSB1c2Vyc3BhY2UsIG9yIHBlcmhhcHMgYXV0b21hdGljYWxseSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gc29tZSBjb25maWd1cmF0aW9uPyBJcyB0aGVyZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZWRpY2F0ZWQgdG8gaXQgb3IgaXMgaXQgaW50ZWdyYXRlZCBpbnRvIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBmbG93PyBJdCdzIHByb2JhYmx5IHdvcnRoIGxvb2tpbmcgYXQgdGhlIGRyaXZlcidzIGVudHJ5IHBvaW50cyBhbmQgY29uZmlndXJhdGlvbiByb3V0aW5lcyBmaXJzdC4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB1c2VkIHRvIGRldGVybWluZSB0aGUgZXhhY3Qgc3RlcHMgaW52b2x2ZWQuIEtub3dpbmcgdGhlIGludGVyYWN0aW9uIHdpbGwgYXNzaXN0IGluIGtub3dpbmcgd2hlcmUgdG8gYmVnaW4gbWFraW5nIGNoYW5nZXMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGZvciBob3cgdGhpcyBtaWdodCBkaWZmZXIgZnJvbSBzdGF0aW9uIG1vZGUgYXMgdGhpcyB3b3VsZCBsaWtlbHkgaW52b2x2ZSBkaWZmZXJpbmcgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDI2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDM6MjUuNzczNDMzMjAzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc4MDg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF9hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MjcxNT1zdGF0aWMgaW50IGF0aDZrbF9nZXRfcnNuX2NhcGFiKHN0cnVjdCBjZmc4MDIxMV9iZWFjb25fZGF0YSAqYmVhY29uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTI3NjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjI3Njc6c3RhdGljIGludCBhdGg2a2xfc3RhcnRfYXAoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMtMjc2OC1cXHRcXHRcXHQgICBzdHJ1Y3QgY2ZnODAyMTFfYXBfc2V0dGluZ3MgKmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmM9MzQ0MD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBhdGg2a2xfY2ZnODAyMTFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jLTM0NjUtI2VuZGlmXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jOjM0NjY6XFx0LnN0YXJ0X2FwID0gYXRoNmtsX3N0YXJ0X2FwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYy0zNDY3LVxcdC5jaGFuZ2VfYmVhY29uID0gYXRoNmtsX2NoYW5nZV9iZWFjb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjI1LjgyNDIxOTM5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDAxNzM5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgYXRoNmtsYCBNb2R1bGUgQ29uZmlndXJhdGlvbiBhbmQgQnVnIEZpeCoqXG5cbk9rYXksIGxldCdzIGdldCBzdGFydGVkLiBGaXJzdCwgSSdtIGFkZGluZyBgYXRoNmtsX3N0YXJ0X2FwYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdC4gTG9va2luZyBhdCB0aGUgZXhpc3RpbmcgbGlzdCwgaXQnczogYGF0aDZrbF91c2JfcHJvYmVgLCBgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc2AsIGFuZCBub3cgYGF0aDZrbF9zdGFydF9hcGAuIEkganVzdCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBzdGF0aWMuIFllcywgaXQgaXMgc3RhdGljIGJ1dCBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYGNmZzgwMjExX29wc2AuIEFoYSEgVGhhdCBtZWFucyBpdCB3b24ndCBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIGl0J3MgcGVyZmVjdGx5IHN1aXRhYmxlIGZvciBGb2N1c1N5bWJvbHMuIFRoYXQgYXBwbGllcyB0byBgYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc2AgYW5kIGBhdGg2a2xfdXNiX3Byb2JlYCBhcyB3ZWxsLlxuXG5Ob3csIG9uIHRvIHRoZSBFbmFibGVDb25maWdzLiBJIHNlZSBgQVRINktMYCBhbmQgYEFUSDZLTF9VU0JgLiBTaG91bGQgSSBpbmNsdWRlIGBDRkc4MDIxMWAgYW5kIGBVU0JgPyBXaGlsZSBgQ0ZHODAyMTFgIGFuZCBgVVNCYCBhcmUgb2Z0ZW4gc3RhbmRhcmQsIEkgbmVlZCB0byBsaXN0IGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZCBmb3IgS2J1aWxkLiBgQVRINktMYCBhbmQgYEFUSDZLTF9VU0JgIGFyZSB0aGUgc3BlY2lmaWMgb25lcywgc28gSSdsbCBzdGljayB3aXRoIHRob3NlLlxuXG5GaW5hbGx5LCB0aGUgYnVnIGZpeC4gTGV0IG1lIHdhbGsgdGhyb3VnaCBpdC5cblxuVGhlIG9yaWdpbmFsIGNvZGUgaGFkIHRoaXMgcG90ZW50aWFsIGlzc3VlOiBpZiBgYXItXHUwMDNlbm9kZV9udW1gIHdhcyBlcXVhbCB0byBgTUFYX05PREVfTlVNYCwgdGhlIG9sZCBjb2RlIHdvdWxkIHNldCBgZXBfbWFwYCB0byBgTUFYX05PREVfTlVNYCwgaW5jcmVtZW50IGBhci1cdTAwM2Vub2RlX251bWAgdG8gYE1BWF9OT0RFX05VTSArIDFgLCBhbmQgdGhlbiByZXR1cm4gYEVORFBPSU5UX1VOVVNFRGAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIG5leHQgdGltZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgbG9vcCBgZm9yIChpID0gMDsgaSBcdTAwM2MgYXItXHUwMDNlbm9kZV9udW07IGkrKylgIHdvdWxkIHJ1biB1cCB0byBgTUFYX05PREVfTlVNYCwgYnV0IHRoZW4gYWNjZXNzIGBhci1cdTAwM2Vub2RlX21hcFtNQVhfTk9ERV9OVU1dYCwgd2hpY2ggaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gYW4gYXJyYXkgb2YgYE1BWF9OT0RFX05VTWAuIFRoZSBuZXcgY29kZSBjb3JyZWN0bHkgcHJldmVudHMgdGhpcyBieSBjaGVja2luZyBgaWYgKGFyLVx1MDAzZW5vZGVfbnVtIFx1MDAzZT0gTUFYX05PREVfTlVNKWAgKmJlZm9yZSogaW5jcmVtZW50aW5nLCBhbmQgcmV0dXJuaW5nIGBFTkRQT0lOVF9VTlVTRURgIGlmIGl0J3MgYWxyZWFkeSBhdCB0aGUgbWF4aW11bS4gVGhpcyBhdm9pZHMgdGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuXG5JdCdzIGEgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGZpeCwgcHJldmVudGluZyBhIG1lbW9yeSBjb3JydXB0aW9uL09PQiBhY2Nlc3MsIGFuZCBpdCdzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbi4gVGhpcyBpcyBnb29kIHRvIGdvLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQ2LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MzozNS4yMjU5NjQ3NjVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTU4MTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRINktMXCIsXG4gICAgXCJBVEg2S0xfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoNmtsX3VzYl9wcm9iZVwiLFxuICAgIFwiYXRoNmtsX2NmZzgwMjExX2pvaW5faWJzc1wiLFxuICAgIFwiYXRoNmtsX3N0YXJ0X2FwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGF0aDZrbF9pYnNzX21hcF9lcGlkYCB3aGVuIGBhci1cXHUwMDNlbm9kZV9udW1gIHJlYWNoZXMgYE1BWF9OT0RFX05VTWAuIFRoZSBidWcgaXMgcmVhY2hhYmxlIGluIEFQIG9yIEFkLUhvYyAoSUJTUykgbW9kZSB3aGVuIHNlbmRpbmcgcGFja2V0cy4gVGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgYW5kIGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlcidzIFVTQiBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDZLTFwiLFxuICAgIFwiQVRINktMX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDZrbF91c2JfcHJvYmVcIixcbiAgICBcImF0aDZrbF9jZmc4MDIxMV9qb2luX2lic3NcIixcbiAgICBcImF0aDZrbF9zdGFydF9hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgd2hlbiBgYXItXFx1MDAzZW5vZGVfbnVtYCByZWFjaGVzIGBNQVhfTk9ERV9OVU1gLiBUaGUgYnVnIGlzIHJlYWNoYWJsZSBpbiBBUCBvciBBZC1Ib2MgKElCU1MpIG1vZGUgd2hlbiBzZW5kaW5nIHBhY2tldHMuIFRoZSBkcml2ZXIgc3VwcG9ydHMgVVNCIGFuZCBjYW4gYmUgZnV6emVkIHZpYSBzeXprYWxsZXIncyBVU0IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDM6MzUuMzE3NTYxMzczWiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg1MTUzNTg2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjM1LjMxODMyOTMxM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDg1MDc2MTcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYGFyLVxcdTAwM2Vub2RlX251bWAgKGEgYHU4YCkgd291bGQgY29udGludWUgdG8gaW5jcmVtZW50IGV2ZW4gYWZ0ZXIgcmVhY2hpbmcgYE1BWF9OT0RFX05VTWAsIGV2ZW50dWFsbHkgd3JhcHBpbmcgYXJvdW5kIHRvIDAgYW5kIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIGBub2RlX21hcGAgYXJyYXkuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgb2YgdGhpcyBuYXR1cmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODJhMjhkMTkxNmNiMTdkZWQxMDJlODFiZWE1MjFkMDkzZTAzNmUyOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjQxOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY1xuaW5kZXggZDgxODI1NDEzOTA2MS4uYjM0MGM3OTViN2EzMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguY1xuQEAgLTY3LDEwICs2Nyw5IEBAIHN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGVwX21hcCA9PSAtMSkge1xuLVx0XHRlcF9tYXAgPSBhci1cdTAwM2Vub2RlX251bTtcbi1cdFx0YXItXHUwMDNlbm9kZV9udW0rKztcbi1cdFx0aWYgKGFyLVx1MDAzZW5vZGVfbnVtIFx1MDAzZSBNQVhfTk9ERV9OVU0pXG4rXHRcdGlmIChhci1cdTAwM2Vub2RlX251bSBcdTAwM2U9IE1BWF9OT0RFX05VTSlcbiBcdFx0XHRyZXR1cm4gRU5EUE9JTlRfVU5VU0VEO1xuK1x0XHRlcF9tYXAgPSBhci1cdTAwM2Vub2RlX251bSsrO1xuIFx0fVxuIFxuIFx0bWVtY3B5KGFyLVx1MDAzZW5vZGVfbWFwW2VwX21hcF0ubWFjX2FkZHIsIGV0aF9oZHItXHUwMDNlaF9kZXN0LCBFVEhfQUxFTik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODo0MzozNS4zMTgzMzA3OTNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc4MzAyMjc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGF0aDZrbCBJQlNTIEVuZHBvaW50IE1hcHBpbmcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHRvIGBhdGg2a2xfaWJzc19tYXBfZXBpZGAgaW4gYGF0aDZrbC90eHJ4LmNgLiBJdCdzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlIHRvIGhvdyBlbmRwb2ludCBtYXBwaW5ncyBhcmUgYXNzaWduZWQuIEluaXRpYWxseSwgbXkgZmlyc3QgaW1wcmVzc2lvbiB3YXMgdGhhdCB0aGUgZml4IGludm9sdmVkIGFuIG9mZi1ieS1vbmUgZXJyb3IuIFRoZSBvcmlnaW5hbCBjb2RlIHdhczpcblxuYGBgY1xuXHRpZiAoZXBfbWFwID09IC0xKSB7XG5cdFx0ZXBfbWFwID0gYXItXHUwMDNlbm9kZV9udW07XG5cdFx0YXItXHUwMDNlbm9kZV9udW0rKztcblx0XHRpZiAoYXItXHUwMDNlbm9kZV9udW0gXHUwMDNlIE1BWF9OT0RFX05VTSlcblx0XHRcdHJldHVybiBFTkRQT0lOVF9VTlVTRUQ7XG5cdH1cbmBgYFxuXG5BbmQgbm93IGl0J3M6XG5cbmBgYGNcblx0aWYgKGVwX21hcCA9PSAtMSkge1xuXHRcdGlmIChhci1cdTAwM2Vub2RlX251bSBcdTAwM2U9IE1BWF9OT0RFX05VTSlcblx0XHRcdHJldHVybiBFTkRQT0lOVF9VTlVTRUQ7XG5cdFx0ZXBfbWFwID0gYXItXHUwMDNlbm9kZV9udW0rKztcblx0fVxuYGBgXG5cblRoZSBpbnRlbnQgaXMgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLiBTbywgaWYgYGFyLVx1MDAzZW5vZGVfbnVtYCB3YXMgYE1BWF9OT0RFX05VTWAsIHRoZSBvbGQgY29kZSB3b3VsZCBhc3NpZ24gYGVwX21hcGAgdG8gYE1BWF9OT0RFX05VTWAsIGluY3JlbWVudCBgYXItXHUwMDNlbm9kZV9udW1gIHRvIGBNQVhfTk9ERV9OVU0gKyAxYCwgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmV0dXJuIGBFTkRQT0lOVF9VTlVTRURgLiBUaGlzIGxvb2tzIGxpa2UgaXQgd2FzIGF0dGVtcHRpbmcgdG8gYXZvaWQgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSByZXZpc2VkIGNvZGUgY2xlYXJseSBwcmV2ZW50cyB0aGUgYXNzaWdubWVudCBvZiBgZXBfbWFwYCBmcm9tIGJlaW5nIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgTUFYX05PREVfTlVNYCBhdCB0aGUgb3V0c2V0LlxuXG5CdXQgd2FpdCwgSSBzdGFydGVkIHRoaW5raW5nIGFib3V0IHRoZSBlZGdlIGNhc2VzLiBMZXQncyByZXZpc2l0IHRoZSBvbGQgY29kZS4gSWYgYGFyLVx1MDAzZW5vZGVfbnVtYCAqd2FzKiBgTUFYX05PREVfTlVNYCwgaXQgKndvdWxkKiBoYXZlIHJldHVybmVkIGBFTkRQT0lOVF9VTlVTRURgLiBJZiBpdCB3YXMgYE1BWF9OT0RFX05VTSAtIDFgIHdpdGggdGhlIHByZXZpb3VzIHZlcnNpb24sIGBlcF9tYXBgIGdldHMgYXNzaWduZWQsIGFuZCB0aGUgaW5jcmVtZW50IG1ha2VzIGBhci1cdTAwM2Vub2RlX251bWAgbm93IGBNQVhfTk9ERV9OVU1gLCB3aGljaCBhdm9pZHMgdGhlIGNoZWNrLiBUaGF0IHNlZW1zIGNvcnJlY3QsIGdpdmVuIHRoYXQgYGFyLVx1MDAzZW5vZGVfbWFwYCBpcyBzaXplIGBNQVhfTk9ERV9OVU1gLiBPa2F5LCBpdCBzZWVtcyBJIHVuZGVyc3RhbmQuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgY2hlY2sgKndvdWxkKiByZXR1cm4gYEVORFBPSU5UX1VOVVNFRGAgaWYgaXQgaGl0IGBNQVhfTk9ERV9OVU1gLCB3aGljaCBJIHNob3VsZCBoYXZlIHNlZW4gaW1tZWRpYXRlbHkuXG5cbk5vdywgZG9lcyB0aGUgYGFyLVx1MDAzZW5vZGVfbWFwYCBhcnJheSBhY3R1YWxseSBoYXZlIGEgc2l6ZSBvZiBgTUFYX05PREVfTlVNYD8gR2l2ZW4gdGhlIGxvZ2ljLCB0aGlzIGlzIGhpZ2hseSBsaWtlbHksIGFuZCB0aGUgY2hhbmdlIHByb3ZpZGVzIGNsZWFyZXIgYm91bmRzIGNoZWNraW5nIGJlZm9yZSBhc3NpZ25pbmcgdGhlIGBlcF9tYXBgIGFuZCBwcmV2ZW50cyBhIHBvc3NpYmxlIHdyaXRlIHBhc3QgdGhlIGJvdW5kcyBvZiBgYXItXHUwMDNlbm9kZV9tYXBgLiBUaGUgY2hhbmdlIGlzIGluZGVlZCBhIGNvcnJlY3QgYW5kIG5lY2Vzc2FyeSBmaXggdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBtYW5hZ2VtZW50IHdoZW4gbWFwcGluZyBJQlNTIGVuZHBvaW50cywgaW1wcm92aW5nIHRoZSBvdmVyYWxsIHJvYnVzdG5lc3Mgb2YgdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjQyLjEwMTM1NzQzNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2MzQ5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFYX05PREVfTlVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTQ1LSNkZWZpbmUgQVRINktMX01BWF9FTkRQT0lOVFMgICA0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmg6NDY6I2RlZmluZSBNQVhfTk9ERV9OVU0gICAgICAgICAgIDE1XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNDctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaD02OTQ9c3RydWN0IGF0aDZrbCB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaC03MjgtXFx0dTggdHhfcHdyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjcyOTpcXHRzdHJ1Y3QgYXRoNmtsX25vZGVfbWFwcGluZyBub2RlX21hcFtNQVhfTk9ERV9OVU1dO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTczMC1cXHR1OCBpYnNzX3BzX2VuYWJsZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jPTQyPXN0YXRpYyB1OCBhdGg2a2xfaWJzc19tYXBfZXBpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtNjktXFx0aWYgKGVwX21hcCA9PSAtMSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jOjcwOlxcdFxcdGlmIChhci1cXHUwMDNlbm9kZV9udW0gXFx1MDAzZT0gTUFYX05PREVfTlVNKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTcxLVxcdFxcdFxcdHJldHVybiBFTkRQT0lOVF9VTlVTRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjQyLjE1OTAwODkyNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTk1NTY0NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBFbmRwb2ludCBBbGxvY2F0aW9uIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBwb3RlbnRpYWwgaXNzdWUgbWlnaHQgbGllLiBJdCBsb29rcyBsaWtlIGBub2RlX21hcGAgaGFzIGEgc2l6ZSBvZiBgTUFYX05PREVfTlVNYC4gVGhlIGNydWNpYWwgcGFydCBzZWVtcyB0byBiZSBob3cgYGFyLVx1MDAzZW5vZGVfbnVtYCBpbnRlcmFjdHMgd2l0aCB0aGlzIG1hcC5cblxuSW5pdGlhbGx5LCBJIHdhbGtlZCB0aHJvdWdoIHRoZSBjYXNlIHdoZXJlIGBhci1cdTAwM2Vub2RlX251bWAgKmlzKiBlcXVhbCB0byBgTUFYX05PREVfTlVNYC4gSW4gdGhhdCBzY2VuYXJpbywgYGVwX21hcGAgYmVjb21lcyBgTUFYX05PREVfTlVNYCwgYW5kIGBhci1cdTAwM2Vub2RlX251bWAgZ2V0cyBpbmNyZW1lbnRlZCB0byBgTUFYX05PREVfTlVNICsgMWAuIFNpbmNlIGBNQVhfTk9ERV9OVU0gKyAxYCBpcyBncmVhdGVyIHRoYW4gYE1BWF9OT0RFX05VTWAsIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgcmV0dXJucyBgRU5EUE9JTlRfVU5VU0VEYC4gU2VlbXMgYWxyaWdodC4uLlxuXG5UaGVuLCBJIHRob3VnaHQgYWJvdXQgd2hhdCBoYXBwZW5zIGlmIGBhci1cdTAwM2Vub2RlX251bWAgKndhcyogYE1BWF9OT0RFX05VTSAtIDFgIGluaXRpYWxseS4gSW4gdGhhdCBjYXNlLCBgZXBfbWFwYCBiZWNvbWVzIGBNQVhfTk9ERV9OVU0gLSAxYCwgYW5kIGBhci1cdTAwM2Vub2RlX251bWAgaW5jcmVtZW50cyB0byBgTUFYX05PREVfTlVNYC4gVGhlIGNydWNpYWwgY2hlY2sgYGFyLVx1MDAzZW5vZGVfbnVtIFx1MDAzZSBNQVhfTk9ERV9OVU1gIGJlY29tZXMgZmFsc2UsIGFuZCB0aGUgY29kZSBjb250aW51ZXMsIG1lYW5pbmcgdGhlIG1hcCBlbnRyeSBgTUFYX05PREVfTlVNIC0gMWAgaXMgdmFsaWQuIEFsbCBnb29kLlxuXG5JIHN0YXJ0ZWQgcmV2aXNpdGluZyB0aGUgZWRnZSBjYXNlIHdoZXJlIGBhci1cdTAwM2Vub2RlX251bWAgYmVnaW5zIGF0IGBNQVhfTk9ERV9OVU1gICh3aGljaCBJIGluaXRpYWxseSBkaXNtaXNzZWQgYXMgY29ycmVjdCkuICBJJ3ZlIHJlYWxpemVkIHRoYXQgdGhlIHByb2JsZW0gaXMgdGhhdCBpdCByZXR1cm5zIGBFTkRQT0lOVF9VTlVTRURgLCBidXQgdGhlbiBpdCBzdGlsbCAqaW5jcmVtZW50cyogYGFyLVx1MDAzZW5vZGVfbnVtYC4gIFRoZSBuZXh0IHRpbWUsIGBhci1cdTAwM2Vub2RlX251bWAgd2lsbCBiZSBgTUFYX05PREVfTlVNICsgMWAuIFRoaXMgbGVhZHMgdG8gYGVwX21hcGAgYmVpbmcgYE1BWF9OT0RFX05VTSArIDFgLiAgQW5kIGBhci1cdTAwM2Vub2RlX251bWAgZ2V0cyBpbmNyZW1lbnRlZCB0byBgTUFYX05PREVfTlVNICsgMmAuIEl0IHJldHVybnMgYEVORFBPSU5UX1VOVVNFRGAgYWdhaW4uXG5cblNvLCB0aGUgY29kZSBqdXN0IGtlZXBzIGluY3JlbWVudGluZyBgYXItXHUwMDNlbm9kZV9udW1gISAgV2hpY2ggbWVhbnMgaXQgbWlnaHQgY2F1c2UgYW4gb3ZlcmZsb3cgb24gYHU4YCwgb3Igb3RoZXIgc2ltaWxhciB1bmludGVuZGVkIGJlaGF2aW9yLlxuXG5Ob3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBkYXRhIHR5cGUgb2YgYGFyLVx1MDAzZW5vZGVfbnVtYCB0byBzZWUgZXhhY3RseSB3aGF0IGtpbmQgb2Ygb3ZlcmZsb3cgcG9zc2liaWxpdGllcyBJIG1pZ2h0IGZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6NDM6NDkuMzU0NTc3MjA1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE2MzI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJub2RlX251bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaD02OTQ9c3RydWN0IGF0aDZrbCB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaC03MzEtXFx0Ym9vbCBpYnNzX2lmX2FjdGl2ZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaDo3MzI6XFx0dTggbm9kZV9udW07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtNzMzLVxcdHU4IG5leHRfZXBfaWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjQ5LjQwNTc1NzgwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzYzMzA0OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQb3RlbnRpYWwgQnVnKipcblxuT2theSwgc28gYG5vZGVfbnVtYCBpcyBhIGB1OGAsIG1lYW5pbmcgaXQncyBnb2luZyB0byB3cmFwIGFyb3VuZC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2FzOiBpZiBpdCBpbmNyZW1lbnRzIGluZGVmaW5pdGVseSwgaXQnbGwgZXZlbnR1YWxseSBoaXQgMCwgcmlnaHQ/IEFuZCB3aGVuIGBub2RlX251bWAgYmVjb21lcyAwLCB0aGVuIGBlcF9tYXBgIGFsc28gYmVjb21lcyAwLiBUaGF0J3MgZmluZSwgYnV0IHRoZW4gYG5vZGVfbnVtYCBpbmNyZW1lbnRzIGFnYWluIHRvIDEuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hpbGUgYG5vZGVfbnVtYCBiZWNvbWVzIDAsIGl0IGFsc28gaW5jcmVtZW50cyBhZ2FpbiwgYW5kIGV2ZW50dWFsbHkgZ29lcyBwYXN0IHRoZSBkZWZpbmVkIHJhbmdlLCB3aGljaCB3b3VsZCBvdmVyd3JpdGUgZXhpc3RpbmcgZW50cmllcyEgSXMgdGhpcyBvdXQtb2YtYm91bmRzPyBObywgaXQncyBvdmVyd3JpdGluZyBzb21ldGhpbmcsIG5vdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGFub3RoZXIgc2NlbmFyaW8uIFdoYXQgaWYgYG5vZGVfbnVtYCB3cmFwcyBhcm91bmQgYWZ0ZXIgcmVhY2hpbmcgMjU1PyBTbyBJIHRoaW5rIHRoZSBwcm9ibGVtIGlzIHRoYXQgYG5vZGVfbnVtYCB3cmFwcGluZyBhcm91bmQgY2F1c2VzIGVudHJpZXMgdG8gYmUgb3ZlcndyaXR0ZW4uIEl0IGxvb2tzIG1vcmUgbGlrZSBhIGxvZ2ljIGJ1ZyBhdCBmaXJzdC4gSSBjb25zaWRlcmVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlbiBJIGxvb2tlZCBjbG9zZWx5LCBhbmQgSSBkb24ndCBzZWUgYW55IGV2aWRlbmNlIG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGVyZS4gXG5cbktBU0FOIHdvdWxkbid0IGNhdGNoIHRoaXMgaWYgaXQganVzdCBvdmVyd3JpdGVzIGBub2RlX21hcFswXWAsIHJpZ2h0PyBSaWdodCEgVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcHJldmVudGluZyB0aGUgaW5jcmVtZW50IHdoZW4gYGFyLVx1MDAzZW5vZGVfbnVtYCBpcyBhbHJlYWR5IGVxdWFsIHRvIG9yIHBhc3QgYE1BWF9OT0RFX05VTWAuIFNvIEkgYW0gbm93IGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBpcyBmYWxzZS5cblxuSSB3aWxsIGRvdWJsZSBjaGVjayB0aGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBqdXN0IHRvIGJlIHN1cmUuIEkgY2FuIHNlZSB0aGF0IGBlcF9tYXBgIGlzIHVzZWQgYXMgYW4gaW5kZXggaW50byBgYXItXHUwMDNlbm9kZV9tYXBgIGFuZCB0aGUgYG1lbWNweWAgd3JpdGVzIHRvIGBub2RlX21hcGAuIE5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbC4gVGhlIHBhdGNoIHByZXZlbnRzIGBhci1cdTAwM2Vub2RlX251bWAgZnJvbSBleGNlZWRpbmcgYE1BWF9OT0RFX05VTWAuIFRoaXMgaXMganVzdCBhIHN0YW5kYXJkIGludGVnZXIgb3ZlcmZsb3cvbG9naWMgYnVnLiBJdCBkb2Vzbid0IG5lZWQgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTYsIk91dHB1dFRva2VucyI6MTEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjQzOjU2LjE2OTA2NjQyN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYGFyLVxcdTAwM2Vub2RlX251bWAgKGEgYHU4YCkgd291bGQgY29udGludWUgdG8gaW5jcmVtZW50IGV2ZW4gYWZ0ZXIgcmVhY2hpbmcgYE1BWF9OT0RFX05VTWAsIGV2ZW50dWFsbHkgd3JhcHBpbmcgYXJvdW5kIHRvIDAgYW5kIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIGBub2RlX21hcGAgYXJyYXkuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgb2YgdGhpcyBuYXR1cmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYGFyLVxcdTAwM2Vub2RlX251bWAgKGEgYHU4YCkgd291bGQgY29udGludWUgdG8gaW5jcmVtZW50IGV2ZW4gYWZ0ZXIgcmVhY2hpbmcgYE1BWF9OT0RFX05VTWAsIGV2ZW50dWFsbHkgd3JhcHBpbmcgYXJvdW5kIHRvIDAgYW5kIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGVudHJpZXMgaW4gdGhlIGBub2RlX21hcGAgYXJyYXkuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgb2YgdGhpcyBuYXR1cmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvfd2r[1] Phase: Succeeded StartedAt: 2026-08-14 08:44:07 +0000 UTC FinishedAt: 2026-08-14 08:44:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 08:44:07 +0000 UTC FinishedAt: 2026-08-14 08:44:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2] Phase: Succeeded StartedAt: 2026-08-14 08:44:07 +0000 UTC FinishedAt: 2026-08-14 10:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 08:44:07 +0000 UTC FinishedAt: 2026-08-14 10:46:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 08:44:07 +0000 UTC FinishedAt: 2026-08-14 08:44:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 08:44:07 +0000 UTC FinishedAt: 2026-08-14 08:44:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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-workflowvfd2r/series-workflowvfd2r-convert-artifact-2247404571/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 08:44:17 +0000 UTC FinishedAt: 2026-08-14 09:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 08:44:17 +0000 UTC FinishedAt: 2026-08-14 09:08:00 +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:*dafa059c-540e-4634-b3e6-55823e222352,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-workflowvfd2r/series-workflowvfd2r-convert-artifact-2247404571/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": "3b22fab1-82c6-41fa-b1df-b710eb2d231f", "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-workflowvfd2r/series-workflowvfd2r-build-action-2536126553/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 08:44:17 +0000 UTC FinishedAt: 2026-08-14 09:07:50 +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:*dafa059c-540e-4634-b3e6-55823e222352,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-workflowvfd2r/series-workflowvfd2r-convert-artifact-2247404571/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": "3b22fab1-82c6-41fa-b1df-b710eb2d231f", "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-workflowvfd2r/series-workflowvfd2r-build-action-2536126553/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:08:00 +0000 UTC FinishedAt: 2026-08-14 09:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:08:00 +0000 UTC FinishedAt: 2026-08-14 09:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:08:00 +0000 UTC FinishedAt: 2026-08-14 09:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:08:00 +0000 UTC FinishedAt: 2026-08-14 09:08:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-workflowvfd2r/series-workflowvfd2r-convert-artifact-2481347186/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:08:10 +0000 UTC FinishedAt: 2026-08-14 09:10:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:08:10 +0000 UTC FinishedAt: 2026-08-14 09:10:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3b22fab1-82c6-41fa-b1df-b710eb2d231f,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-workflowvfd2r/series-workflowvfd2r-build-action-2536126553/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-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:10:16 +0000 UTC FinishedAt: 2026-08-14 09:10:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:10:16 +0000 UTC FinishedAt: 2026-08-14 09:10:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:10:16 +0000 UTC FinishedAt: 2026-08-14 09:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:10:16 +0000 UTC FinishedAt: 2026-08-14 09:42:44 +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:*dafa059c-540e-4634-b3e6-55823e222352,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-workflowvfd2r/series-workflowvfd2r-convert-artifact-2481347186/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": "6ce8d806-1b62-4346-acb9-d7acd87d109a", "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-workflowvfd2r/series-workflowvfd2r-build-action-3147061766/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:10:16 +0000 UTC FinishedAt: 2026-08-14 09:42:20 +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:*dafa059c-540e-4634-b3e6-55823e222352,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-workflowvfd2r/series-workflowvfd2r-convert-artifact-2481347186/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": "6ce8d806-1b62-4346-acb9-d7acd87d109a", "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-workflowvfd2r/series-workflowvfd2r-build-action-3147061766/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:42:44 +0000 UTC FinishedAt: 2026-08-14 09:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:42:44 +0000 UTC FinishedAt: 2026-08-14 09:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:42:44 +0000 UTC FinishedAt: 2026-08-14 09:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:42:44 +0000 UTC FinishedAt: 2026-08-14 09:44:28 +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:*6ce8d806-1b62-4346-acb9-d7acd87d109a,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-workflowvfd2r/series-workflowvfd2r-build-action-3147061766/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-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:44:38 +0000 UTC FinishedAt: 2026-08-14 10:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:44:38 +0000 UTC FinishedAt: 2026-08-14 10:46:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"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:*3b22fab1-82c6-41fa-b1df-b710eb2d231f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ce8d806-1b62-4346-acb9-d7acd87d109a,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-workflowvfd2r/series-workflowvfd2r-build-action-2536126553/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-workflowvfd2r/series-workflowvfd2r-build-action-3147061766/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:44:38 +0000 UTC FinishedAt: 2026-08-14 09:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:44:38 +0000 UTC FinishedAt: 2026-08-14 09:44:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"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-workflowvfd2r/series-workflowvfd2r-convert-artifact-344038343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:44:38 +0000 UTC FinishedAt: 2026-08-14 09:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:44:38 +0000 UTC FinishedAt: 2026-08-14 09:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:44:38 +0000 UTC FinishedAt: 2026-08-14 09:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:44:48 +0000 UTC FinishedAt: 2026-08-14 10:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvfd2r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath6kl_usb_probe","ath6kl_cfg80211_join_ibss","ath6kl_start_ap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH6KL","ATH6KL_USB"],"series_id":"af9a9ead-76e2-438f-b2b1-067c58420de7","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-08-14 09:44:48 +0000 UTC FinishedAt: 2026-08-14 10:46:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3b22fab1-82c6-41fa-b1df-b710eb2d231f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ce8d806-1b62-4346-acb9-d7acd87d109a,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-workflowvfd2r/series-workflowvfd2r-build-action-2536126553/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-workflowvfd2r/series-workflowvfd2r-build-action-3147061766/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-workflowvfd2r/series-workflowvfd2r-convert-artifact-344038343/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,}