Name: series-workflowc2lwm Phase: Succeeded StartedAt: 2026-07-29 21:13:03 +0000 UTC FinishedAt: 2026-07-29 22:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[0] Phase: Succeeded StartedAt: 2026-07-29 21:13:03 +0000 UTC FinishedAt: 2026-07-29 21:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 21:13:03 +0000 UTC FinishedAt: 2026-07-29 21:45:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_TEAM", "CAN", "CAN_DEV", "CAN_VCAN", "IEEE802154", "MAC802154", "IEEE802154_DRIVERS", "IEEE802154_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_TEAM", "CAN", "CAN_DEV", "CAN_VCAN", "IEEE802154", "MAC802154", "IEEE802154_DRIVERS", "IEEE802154_HWSIM" ], "series_id": "e0faf45d-b7b0-483e-96d3-a27fcc248199" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "team_add_slave" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9URUFNJiMzNDssCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fREVWJiMzNDssCiAgICAmIzM0O0NBTl9WQ0FOJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGVhbV9hZGRfc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0ZWFtX3BvcnRfYWRkYCAoY2FsbGVkIHZpYSBgdGVhbV9hZGRfc2xhdmVgKSB0byBwcmV2ZW50IGFkZGluZyBDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBhcyB0ZWFtIHBvcnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdGVhbSBkZXZpY2VzLiBGdXp6aW5nIHJlcXVpcmVzIHRoZSB0ZWFtIGRyaXZlciBhbmQgdmlydHVhbCBDQU4vSUVFRTgwMjE1NCBkZXZpY2VzIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MzBiYjRhYTY3Nzc5ODg1NThiOGMwYWFiOTMwYjFmMjVmOGIxOGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMjE6NDM6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcbmluZGV4IGZlYWE3NWZiZjhmYzIuLmQ4YzQ2MTA1ZmM4YmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXG5AQCAtMTIyNCw2ICYjNDM7MTIyNCwxNyBAQCBzdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0XHRpZiAocG9ydF9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOIHx8XG4mIzQzO1x0XHQgICAgcG9ydF9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxuJiM0MztcdFx0ICAgIHBvcnRfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0NBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbiYjMzk7dCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFwmIzM0Oyk7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgJXMgaXMgQ0FOIG9yIElFRUUgODAyLjE1LjQuIFRoZXNlIGRldmljZSB0eXBlcyBjYW4mIzM5O3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgcG9ydG5hbWUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKG5ldGlmX2lzX3RlYW1fcG9ydChwb3J0X2RldikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtEZXZpY2UgaXMgYWxyZWFkeSBhIHBvcnQgb2YgYSB0ZWFtIGRldmljZVwmIzM0Oyk7XG4gXHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgJXMgaXMgYWxyZWFkeSBhIHBvcnQgXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9URUFNJiMzNDssCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fREVWJiMzNDssCiAgICAmIzM0O0NBTl9WQ0FOJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGVhbV9hZGRfc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0ZWFtX3BvcnRfYWRkYCAoY2FsbGVkIHZpYSBgdGVhbV9hZGRfc2xhdmVgKSB0byBwcmV2ZW50IGFkZGluZyBDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBhcyB0ZWFtIHBvcnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdGVhbSBkZXZpY2VzLiBGdXp6aW5nIHJlcXVpcmVzIHRoZSB0ZWFtIGRyaXZlciBhbmQgdmlydHVhbCBDQU4vSUVFRTgwMjE1NCBkZXZpY2VzIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MzBiYjRhYTY3Nzc5ODg1NThiOGMwYWFiOTMwYjFmMjVmOGIxOGIyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMjE6NDM6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jIGIvZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYwppbmRleCBmZWFhNzVmYmY4ZmMyLi5kOGM0NjEwNWZjOGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMKQEAgLTEyMjQsNiAmIzQzOzEyMjQsMTcgQEAgc3RhdGljIGludCB0ZWFtX3BvcnRfYWRkKHN0cnVjdCB0ZWFtICp0ZWFtLCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwkJaWYgKHBvcnRfZGV2LSZndDt0eXBlID09IEFSUEhSRF9DQU4gfHwKJiM0MzsJCSAgICBwb3J0X2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fAomIzQzOwkJICAgIHBvcnRfZGV2LSZndDt0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O0NBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbiYjMzk7dCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydCYjMzQ7KTsKJiM0MzsJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtEZXZpY2UgJXMgaXMgQ0FOIG9yIElFRUUgODAyLjE1LjQuIFRoZXNlIGRldmljZSB0eXBlcyBjYW4mIzM5O3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcbiYjMzQ7LAomIzQzOwkJCQkgICBwb3J0bmFtZSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAobmV0aWZfaXNfdGVhbV9wb3J0KHBvcnRfZGV2KSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7RGV2aWNlIGlzIGFscmVhZHkgYSBwb3J0IG9mIGEgdGVhbSBkZXZpY2UmIzM0Oyk7CiAJCW5ldGRldl9lcnIoZGV2LCAmIzM0O0RldmljZSAlcyBpcyBhbHJlYWR5IGEgcG9ydCAmIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGVhbSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiB0aGUgYHRlYW1fcG9ydF9hZGRgIGZ1bmN0aW9uLiBUaGUgcHVycG9zZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byBhY3RpdmVseSBwcmV2ZW50IENBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGZyb20gYmVpbmcgYWRkZWQgYXMgdGVhbSBwb3J0cy4gVGhhdCYjMzk7cyBhIHZlcnkgc3BlY2lmaWMgZnVuY3Rpb25hbCBjaGFuZ2UsIGNsZWFybHkgdGFyZ2V0aW5nIGEgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgY29uZmlndXJhdGlvbi4KClRoaW5raW5nIGFib3V0IGl0LCB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBgdGVhbV9wb3J0X2FkZGAgaXMgdGhyb3VnaCBuZXRsaW5rIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gc29tZW9uZSBpcyB0cnlpbmcgdG8gYWRkIGEgcG9ydCB0byBhIHRlYW0gZGV2aWNlLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIHByZXZlbnQgc29tZSBvYnNjdXJlLCBidXQgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUsIGJlaGF2aW9yLiBJdCYjMzk7cyBhIHRhcmdldGVkIGRlZmVuc2UgYWdhaW5zdCBhIHNwZWNpZmljLCBhbGJlaXQgcGVyaGFwcyByYXJlLCBzY2VuYXJpby4KClNpbmNlIGl0IGludm9sdmVzIHRoZSB0ZWFtIGRyaXZlciwgdGhlIHdob2xlIHRoaW5nIGlzIGdvdmVybmVkIGJ5IHRoZSBgQ09ORklHX05FVF9URUFNYCBLY29uZmlnIG9wdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIGFueSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBORVRfVEVBTWAuIEkgc2hvdWxkIHByb2JhYmx5IGVuc3VyZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhlIG1vZHVsZSBkb2VzIG5vdCBicmVhayBhbnkgb3RoZXIgbmV0d29yayBpbnRlcmZhY2UgYXMgYSByZWdyZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVEVBTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzoyOm1lbnVjb25maWcgTkVUX1RFQU1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RXRoZXJuZXQgdGVhbSBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZz0xNj1pZiBORVRfVEVBTVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTE3LVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjE4OmNvbmZpZyBORVRfVEVBTV9NT0RFX0JST0FEQ0FTVFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjYXN0IG1vZGUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzoyOTpjb25maWcgTkVUX1RFQU1fTU9ERV9ST1VORFJPQklOXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMzAtXHR0cmlzdGF0ZSBcJiMzNDtSb3VuZC1yb2JpbiBtb2RlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNDAtXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6NDE6Y29uZmlnIE5FVF9URUFNX01PREVfUkFORE9NXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtSYW5kb20gbW9kZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTUyLVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjUzOmNvbmZpZyBORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7QWN0aXZlLWJhY2t1cCBtb2RlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNjUtXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6NjY6Y29uZmlnIE5FVF9URUFNX01PREVfTE9BREJBTEFOQ0VcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy02Ny1cdHRyaXN0YXRlIFwmIzM0O0xvYWQtYmFsYW5jZSBtb2RlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYHRlYW1fcG9ydF9hZGRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGBORVRfVEVBTWAsIGFuZCBpdCYjMzk7cyBwb2ludGluZyBtZSB0b3dhcmRzIHRoZSBmdW5jdGlvbiBgdGVhbV9wb3J0X2FkZGAuIE15IGV4cGVydCBpbnR1aXRpb24gaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgdGhhdCB3b3VsZCBsaWtlbHkgYmVuZWZpdCBmcm9tIGZ1enppbmcuIEFueXRpbWUgSSBzZWUgYSBuZXR3b3JrLXJlbGF0ZWQgZnVuY3Rpb24sIGVzcGVjaWFsbHkgb25lIGRlYWxpbmcgd2l0aCB0aGUgYWRkaXRpb24gb2YgYSBwb3J0LCBteSBtaW5kIGdvZXMgc3RyYWlnaHQgdG8gZWRnZSBjYXNlcywgYnVmZmVyIG92ZXJmbG93cywgYW5kIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEJlZm9yZSBJIGRpdmUgaW4sIHRob3VnaCwgSSBuZWVkIHRvIGtub3cgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbjogSXMgYHRlYW1fcG9ydF9hZGRgIGEgc3RhdGljIGZ1bmN0aW9uPyBUaGF0IHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgbXkgZnV6emluZyBzdHJhdGVneSBhbmQgaG93IEkgYXBwcm9hY2ggdGVzdGluZyBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgdmlzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZSBiZWZvcmUgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RlYW1fcG9ydF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NDA9c3RhdGljIHN0cnVjdCB0ZWFtX3BvcnQgKnRlYW1fcG9ydF9nZXRfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNDgtICogU2luY2UgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIGRldmljZSBhZGRyZXNzIGZvciBvcGVuIHBvcnQgZGV2aWNlIGlzIHRlc3RlZCBpblxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzo0OTogKiB0ZWFtX3BvcnRfYWRkLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sIG9mIHJldHVybiB2YWx1ZVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy01MC0gKi9cbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTEyMDk9c3RhdGljIGludCB0ZWFtX2Rldl90eXBlX2NoZWNrX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MTIxMjpzdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMy1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjExNz1zdGF0aWMgaW50IHRlYW1fYWRkX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2Rldixcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMjMtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIxMjQ6XHRyZXR1cm4gdGVhbV9wb3J0X2FkZCh0ZWFtLCBwb3J0X2RldiwgZXh0YWNrKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjEyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgdGVhbV9wb3J0X2FkZGAgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSBub3RpY2VkIHRoYXQgYHRlYW1fcG9ydF9hZGRgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBzcGVjaWZpYyBiZWhhdmlvci4gTm93LCB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGNvbWVzIGZyb20gYHRlYW1fYWRkX3NsYXZlYC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGB0ZWFtX2FkZF9zbGF2ZWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHB1cnBvc2Ugb2YgY2FsbGluZyB0aGlzIHN0YXRpYyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBmcm9tIGB0ZWFtX2FkZF9zbGF2ZWAgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2h5IHRoaXMgYHRlYW1fcG9ydF9hZGRgIGZ1bmN0aW9uIGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZWFtX2FkZF9zbGF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMDk4PXN0YXRpYyBpbnQgdGVhbV9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTE2LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMTE3OnN0YXRpYyBpbnQgdGVhbV9hZGRfc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTE4LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjE4MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRlYW1fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxOTktI2VuZGlmXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIyMDA6XHQubmRvX2FkZF9zbGF2ZVx0XHQ9IHRlYW1fYWRkX3NsYXZlLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMjAxLVx0Lm5kb19kZWxfc2xhdmVcdFx0PSB0ZWFtX2RlbF9zbGF2ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTE4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRlYW0gSW50ZXJmYWNlIFNsYXZlIEFkZGl0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBzbGF2ZSBpbnRlcmZhY2VzIGdldCBhZGRlZCB0byBhIHRlYW0gaW50ZXJmYWNlLiBgdGVhbV9hZGRfc2xhdmVgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIGFuIGBuZG9gIGNhbGxiYWNrLCBzcGVjaWZpY2FsbHkgYG5kb19hZGRfc2xhdmVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZnVsbCBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyB0byBjb25zaWRlcj8gTGV0IG1lIHRoaW5rLi4uIHBlcmhhcHMgYHRlYW1fbmxfY21kX3BvcnRfbGlzdF9nZXRgPyBIbW0sIG5vLCBJIGRvdWJ0IHRoYXQmIzM5O3MgZm9yICphZGRpbmcqIGEgcG9ydDsgaXQgc291bmRzIG1vcmUgbGlrZSBsaXN0aW5nIHRoZW0uCgpXYWl0IGEgc2Vjb25kLCAqaG93KiBpcyBhIHBvcnQgYWN0dWFsbHkgYWRkZWQgaW4gdGhlIGZpcnN0IHBsYWNlPyBMZXQgbWUgdHJhY2UgdGhpcyBiYWNrLi4uIEl0IHNlZW1zIGxpa2UgYHRlYW1fYWRkX3NsYXZlYCBpcyB0aGUgcHJpbWFyeSBtZWNoYW5pc20sIGFuZCB0aGF0JiMzOTtzIHRoZSBzYW1lIGFzIGBuZG9fYWRkX3NsYXZlYC4gUmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBpdCBpcyBjYWxsZWQgYnkgYGRvX3NldGxpbmtgIG9yIGBpZmVuc2xhdmVgIGlvY3RsIGNhbGxzLCBJIHNob3VsZCByZW1lbWJlciB0aGF0IGZvciB0aGUgZnV0dXJlLiBJJiMzOTttIHJlY2FsbGluZyBzb21ldGhpbmcgYWJvdXQgYG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2xpbmtgIGluIHRoaXMgY29udGV4dCwgYnV0IEkgZG9uJiMzOTt0IHRoaW5rIGl0IGlzIGNhbGxpbmcgdGhlIGBuZG9fYWRkX3NsYXZlYC4gU28sIEkgc2hvdWxkIGhhdmUgYSBsb29rIGluIHRoZXNlIGlvY3RsIGNvbW1hbmRzLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgTmV0bGluayBpbnRlcmZhY2UgZm9yIHRlYW0uIEl0JiMzOTtzIGFsbW9zdCBndWFyYW50ZWVkIHRoZXJlIHdpbGwgYmUgTmV0bGluayBmdW5jdGlvbmFsaXR5IGhlcmUgdG9vLiBJIHNob3VsZCBjaGVjayBgdGVhbV9ubF9jbWRfcG9ydF9hZGRgLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgTmV0bGluayBzaWRlIG9mIHRoaW5ncyBoYXBwZW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgc3BhY2UgaW50ZXJhY3RzIHdpdGggYWxsIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGVhbV9ubF9jbWRfcG9ydF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQ29tbWFuZCBMaW5lIE9wdGlvbiBTZXR0aW5ncyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIGluc3RpbmN0IGhlcmUgaXMgdG8gZGVsdmUgaW50byB0aGUgbWVjaGFuaXNtIHRoYXQgbWFuYWdlcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIHRoZSB0ZWFtIG5ldHdvcmsgbGlicmFyeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgc2V0dGluZ3MgYXJlIGhhbmRsZWQuIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgZnVuY3Rpb25zIG5hbWVkIHNpbWlsYXJseSB0byBgdGVhbV9ubF9jbWRfb3B0aW9uc19zZXRgLCBvciBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMuIEkgZXhwZWN0IHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIGZ1bmN0aW9uLCBvciBwZXJoYXBzIGEgcmVsYXRlZCBmYW1pbHkgb2YgZnVuY3Rpb25zLCByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIHRoZSBwYXJzZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhbmQgYWN0dWFsbHkgY29uZmlndXJpbmcgdGhlIG5ldHdvcmsgbGlicmFyeSYjMzk7cyBiZWhhdmlvciBiYXNlZCBvbiB0aG9zZSBhcmd1bWVudHMuIE15IGd1ZXNzIGlzIHRoZXJlIHdvdWxkIGJlIGFzc29jaWF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgZGVzaWduIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB3ZSBjYW4gYXBwcm9hY2ggbW9yZSBjb21wbGV4IHNjZW5hcmlvcywgb3IgZGVidWcgYW55IGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZWFtX25sX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0ZWFtJiMzOTtzIGdvbmUgd2l0aCBnZW5lcmljIG5ldGxpbmssIGVoPyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIGNvbnNpZGVyYXRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGF2YWlsYWJsZSBmdW5jdGlvbnMgYW5kIHRoZSBvdmVyYWxsIGFwcHJvYWNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQsIHdoYXQgdGhlIGZhbWlseSBJRCBpcywgYW5kIHdoYXQga2luZCBvZiBtZXNzYWdlcyB0aGV5JiMzOTtyZSBzbGluZ2luZyBhcm91bmQuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCB0aGUgbGlrZWxpaG9vZCBvZiByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgZXJyb3IgY29kZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgdGhleSBhcmUgdXNpbmcgdGhlIHNvY2tldCBhbmQgbWVzc2FnZSBwYXNzaW5nLiBJcyB0aGlzIGEgY3VzdG9tIGZhbWlseT8gQXJlIHRoZXkgbGV2ZXJhZ2luZyBleGlzdGluZyBnZW5lcmljIG5ldGxpbmsgYXR0cmlidXRlcywgb3IgaGF2ZSB0aGV5IGRlZmluZWQgdGhlaXIgb3duPyBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgb3ZlcmFsbCBkZXNpZ24uIElzIHRoaXMgYSBjbGVhbiBzZXBhcmF0aW9uIGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBjb21wb25lbnRzPyBBcmUgdGhleSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBuZXRsaW5rJiMzOTtzIGFzeW5jaHJvbm91cyBuYXR1cmUsIG9yIGhhdmUgdGhleSBmYWxsZW4gaW50byB0aGUgdHJhcCBvZiBzeW5jaHJvbm91cyBjYWxscz8gSSYjMzk7bSBvbiB0aGUgbG9va291dCBmb3IgYW55dGhpbmcgdGhhdCBzbWVsbHMgbGlrZSBpbmVmZmljaWVudCBkYXRhIHNlcmlhbGl6YXRpb24sIGV4Y2Vzc2l2ZSBjb3B5aW5nLCBvciBwb29yIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWdpZXMuIFRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50IHdpbGwgaW5mb3JtIG15IGFwcHJvYWNoIHRvIGZ1cnRoZXIgY29kZSByZXZpZXcgb3IgdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZWFtX25sXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yNDQ0PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB0ZWFtX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNDU4LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNDU5OnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgdGVhbV9ubF9mYW1pbHk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NjAtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI0NjE6aW50IHRlYW1fbmxfbm9vcF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NjIte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ3MS1cdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgaW5mby1cdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVx1MDAzZXNuZF9zZXEsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI0NzI6XHRcdFx0ICBcdTAwMjZ0ZWFtX25sX2ZhbWlseSwgMCwgVEVBTV9DTURfTk9PUCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NzMtXHRpZiAoIWhkcikge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ5MS0gKi9cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjQ5MjpzdGF0aWMgc3RydWN0IHRlYW0gKnRlYW1fbmxfdGVhbV9nZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ5My17XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNTEyLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNTEzOnN0YXRpYyB2b2lkIHRlYW1fbmxfdGVhbV9wdXQoc3RydWN0IHRlYW0gKnRlYW0pXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI1MTQte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUxNy1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjUxODp0eXBlZGVmIGludCB0ZWFtX25sX3NlbmRfZnVuY190KHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI1MTktXHRcdFx0XHRzdHJ1Y3QgdGVhbSAqdGVhbSwgdTMyIHBvcnRpZCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI1MjAtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI1MjE6c3RhdGljIGludCB0ZWFtX25sX3NlbmRfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGVhbSAqdGVhbSwgdTMyIHBvcnRpZClcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUyMi17XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNTI1LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNTI2OnN0YXRpYyBpbnQgdGVhbV9ubF9maWxsX29uZV9vcHRpb25fZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0ZWFtICp0ZWFtLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNTI3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCB0ZWFtX29wdGlvbl9pbnN0ICpvcHRfaW5zdClcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTI2MDc9c3RhdGljIGludCBfX3NlbmRfYW5kX2FsbG9jX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI2MDgtXHRcdFx0XHRzdHJ1Y3QgdGVhbSAqdGVhbSwgdTMyIHBvcnRpZCxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjYwOTpcdFx0XHRcdHRlYW1fbmxfc2VuZF9mdW5jX3QgKnNlbmRfZnVuYylcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjYxMC17XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjIzLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNjI0OnN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNjI1Olx0XHRcdFx0ICAgIGludCBmbGFncywgdGVhbV9ubF9zZW5kX2Z1bmNfdCAqc2VuZF9mdW5jLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjI2LVx0XHRcdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnNlbF9vcHRfaW5zdF9saXN0KVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY0NC1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjY0NTpcdGhkciA9IGdlbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFx1MDAyNnRlYW1fbmxfZmFtaWx5LCBmbGFncyB8IE5MTV9GX01VTFRJLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjQ2LVx0XHRcdCAgVEVBTV9DTURfT1BUSU9OU19HRVQpO1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY2MS1cdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShvcHRfaW5zdCwgc2VsX29wdF9pbnN0X2xpc3QsIHRtcF9saXN0KSB7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI2NjI6XHRcdGVyciA9IHRlYW1fbmxfZmlsbF9vbmVfb3B0aW9uX2dldChza2IsIHRlYW0sIG9wdF9pbnN0KTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY2My1cdFx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY5Ny1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjY5ODppbnQgdGVhbV9ubF9vcHRpb25zX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI2OTkte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcwNi1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjcwNzpcdHRlYW0gPSB0ZWFtX25sX3RlYW1fZ2V0KGluZm8pO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzA4LVx0aWYgKCF0ZWFtKSB7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzE0LVx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm9wdF9pbnN0LVx1MDAzZXRtcF9saXN0LCBcdTAwMjZzZWxfb3B0X2luc3RfbGlzdCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3MTU6XHRlcnIgPSB0ZWFtX25sX3NlbmRfb3B0aW9uc19nZXQodGVhbSwgaW5mby1cdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVx1MDAzZXNuZF9zZXEsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3MTY6XHRcdFx0XHQgICAgICAgTkxNX0ZfQUNLLCB0ZWFtX25sX3NlbmRfdW5pY2FzdCxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcxNy1cdFx0XHRcdCAgICAgICBcdTAwMjZzZWxfb3B0X2luc3RfbGlzdCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MTgtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3MTk6XHR0ZWFtX25sX3RlYW1fcHV0KHRlYW0pO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzIwLVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyNi1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjcyNzpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9ldmVudF9vcHRpb25zX2dldChzdHJ1Y3QgdGVhbSAqdGVhbSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyOC1cdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpzZWxfb3B0X2luc3RfbGlzdCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MjktXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3MzA6aW50IHRlYW1fbmxfb3B0aW9uc19zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzMxLXtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MzgtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3Mzk6XHR0ZWFtID0gdGVhbV9ubF90ZWFtX2dldChpbmZvKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjc0MC1cdGlmICghdGVhbSkge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjg3MC1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjg3MTpcdFx0ZXJyID0gdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHRlYW0sIFx1MDAyNm9wdF9pbnN0X2xpc3QpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yODcyLVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjg3Ni10ZWFtX3B1dDpcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjg3NzpcdHRlYW1fbmxfdGVhbV9wdXQodGVhbSk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI4NzgtcnRubF91bmxvY2s6XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yODgyLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyODgzOnN0YXRpYyBpbnQgdGVhbV9ubF9maWxsX29uZV9wb3J0X2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yODg0LVx0XHRcdFx0ICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjkxMi1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjkxMzpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9wb3J0X2xpc3RfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyOTE0Olx0XHRcdFx0ICAgICAgaW50IGZsYWdzLCB0ZWFtX25sX3NlbmRfZnVuY190ICpzZW5kX2Z1bmMsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5MTUtXHRcdFx0XHQgICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpvbmVfcG9ydClcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5MzMtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI5MzQ6XHRoZHIgPSBnZW5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBcdTAwMjZ0ZWFtX25sX2ZhbWlseSwgZmxhZ3MgfCBOTE1fRl9NVUxUSSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjkzNS1cdFx0XHQgIFRFQU1fQ01EX1BPUlRfTElTVF9HRVQpO1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjk1NC1cdGlmIChvbmVfcG9ydCkge1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyOTU1Olx0XHRlcnIgPSB0ZWFtX25sX2ZpbGxfb25lX3BvcnRfZ2V0KHNrYiwgb25lX3BvcnQpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTU2LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjk1OS1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHBvcnQsIFx1MDAyNnRlYW0tXHUwMDNlcG9ydF9saXN0LCBsaXN0KSB7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI5NjA6XHRcdFx0ZXJyID0gdGVhbV9ubF9maWxsX29uZV9wb3J0X2dldChza2IsIHBvcnQpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTYxLVx0XHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5OTYtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI5OTc6aW50IHRlYW1fbmxfcG9ydF9saXN0X2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5OTgtXHRcdFx0ICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDA0LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDA1Olx0dGVhbSA9IHRlYW1fbmxfdGVhbV9nZXQoaW5mbyk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMDYtXHRpZiAoIXRlYW0pIHtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMTAtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMTE6XHRlcnIgPSB0ZWFtX25sX3NlbmRfcG9ydF9saXN0X2dldCh0ZWFtLCBpbmZvLVx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXHUwMDNlc25kX3NlcSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzAxMjpcdFx0XHRcdFx0IE5MTV9GX0FDSywgdGVhbV9ubF9zZW5kX3VuaWNhc3QsIE5VTEwpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDEzLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDE0Olx0dGVhbV9ubF90ZWFtX3B1dCh0ZWFtKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAxNS1cbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMjEtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMjI6c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCB0ZWFtX25sX21jZ3Jwc1tdID0ge1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDIzLVx0eyAubmFtZSA9IFRFQU1fR0VOTF9DSEFOR0VfRVZFTlRfTUNfR1JQX05BTUUsIH0sXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDI1LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDI2OnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgdGVhbV9ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDI3LVx0Lm5hbWVcdFx0PSBURUFNX0dFTkxfTkFNRSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAyOC1cdC52ZXJzaW9uXHQ9IFRFQU1fR0VOTF9WRVJTSU9OLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDI5Olx0Lm1heGF0dHJcdD0gQVJSQVlfU0laRSh0ZWFtX25sX3BvbGljeSkgLSAxLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDMwOlx0LnBvbGljeSA9IHRlYW1fbmxfcG9saWN5LFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDMxLVx0Lm5ldG5zb2tcdD0gdHJ1ZSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzMi1cdC5tb2R1bGVcdFx0PSBUSElTX01PRFVMRSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzAzMzpcdC5zbWFsbF9vcHNcdD0gdGVhbV9ubF9vcHMsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMzQ6XHQubl9zbWFsbF9vcHNcdD0gQVJSQVlfU0laRSh0ZWFtX25sX29wcyksXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMzUtXHQucmVzdl9zdGFydF9vcFx0PSBURUFNX0NNRF9QT1JUX0xJU1RfR0VUICYjNDM7IDEsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMzY6XHQubWNncnBzXHRcdD0gdGVhbV9ubF9tY2dycHMsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMzc6XHQubl9tY2dycHNcdD0gQVJSQVlfU0laRSh0ZWFtX25sX21jZ3JwcyksXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMzgtfTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzOS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA0MDpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9tdWx0aWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA0MS1cdFx0XHRcdCAgc3RydWN0IHRlYW0gKnRlYW0sIHUzMiBwb3J0aWQpXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNDIte1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDQzOlx0cmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKFx1MDAyNnRlYW1fbmxfZmFtaWx5LFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDQ0LVx0XHRcdFx0ICAgICAgIGRldl9uZXQobmV0ZGV2X2Zyb21fcHJpdih0ZWFtKSksXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDQ3LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDQ4OnN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDQ5LVx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKnNlbF9vcHRfaW5zdF9saXN0KVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDUwLXtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA1MTpcdHJldHVybiB0ZWFtX25sX3NlbmRfb3B0aW9uc19nZXQodGVhbSwgMCwgMCwgMCwgdGVhbV9ubF9zZW5kX211bHRpY2FzdCxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA1Mi1cdFx0XHRcdFx0c2VsX29wdF9pbnN0X2xpc3QpO1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA1NC1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA1NTpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9ldmVudF9wb3J0X2dldChzdHJ1Y3QgdGVhbSAqdGVhbSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA1Ni1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0KVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDU3LXtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA1ODpcdHJldHVybiB0ZWFtX25sX3NlbmRfcG9ydF9saXN0X2dldCh0ZWFtLCAwLCAwLCAwLCB0ZWFtX25sX3NlbmRfbXVsdGljYXN0LFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDU5LVx0XHRcdFx0XHQgIHBvcnQpO1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA2MS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA2MjpzdGF0aWMgaW50IF9faW5pdCB0ZWFtX25sX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA2My17XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwNjQ6XHRyZXR1cm4gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoXHUwMDI2dGVhbV9ubF9mYW1pbHkpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDY1LX1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA2Ni1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA2NzpzdGF0aWMgdm9pZCBfX2V4aXQgdGVhbV9ubF9maW5pKHZvaWQpXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNjgte1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDY5Olx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcdTAwMjZ0ZWFtX25sX2ZhbWlseSk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNzAtfVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzA3Nz1zdGF0aWMgdm9pZCBfX3RlYW1fb3B0aW9uc19jaGFuZ2VfY2hlY2soc3RydWN0IHRlYW0gKnRlYW0pXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDg2LVx0fVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDg3Olx0ZXJyID0gdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHRlYW0sIFx1MDAyNnNlbF9vcHRfaW5zdF9saXN0KTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA4OC1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRVNSQ0gpXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zMDk2PXN0YXRpYyB2b2lkIF9fdGVhbV9wb3J0X2NoYW5nZV9zZW5kKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsIGJvb2wgbGlua3VwKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzExNi1zZW5kX2V2ZW50OlxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMTE3Olx0ZXJyID0gdGVhbV9ubF9zZW5kX2V2ZW50X3BvcnRfZ2V0KHBvcnQtXHUwMDNldGVhbSwgcG9ydCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMxMTgtXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVTUkNIKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzIzOT1zdGF0aWMgaW50IF9faW5pdCB0ZWFtX21vZHVsZV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMjQ4LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMjQ5Olx0ZXJyID0gdGVhbV9ubF9pbml0KCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMyNTAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzI2ND1zdGF0aWMgdm9pZCBfX2V4aXQgdGVhbV9tb2R1bGVfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMjY1LXtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzI2NjpcdHRlYW1fbmxfZmluaSgpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMjY3LVx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2dGVhbV9saW5rX29wcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVsdmluZyBpbnRvIHRoZSBUZWFtIERldmljZSBTbGF2ZSBBZGRpdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGB0ZWFtX2FkZF9zbGF2ZWAgd2FzIHRyaWdnZXJlZCBieSB0aGUgYFJUTV9ORVdMSU5LYCBuZXRsaW5rIG1lc3NhZ2UsIHNwZWNpZmljYWxseSB3aGVuIGl0IGNvbnRhaW5lZCBlaXRoZXIgYElGTEFfTUFTVEVSYCBvciBgSUZMQV9MSU5LYCBhdHRyaWJ1dGVzLiBCdXQgd2FpdCBhIHNlY29uZCwgSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZS4gVGhlIGFjdHVhbCBtZWNoYW5pc20gZm9yIGFkZGluZyBhIHNsYXZlIHRvIGEgdGVhbSBkZXZpY2UgaXMgbGlrZWx5IGhhbmRsZWQgdGhyb3VnaCB0aGUgYHJ0bmxfbGlua19vcHNgIHN0cnVjdHVyZSBvciB0aGUgYG5kb19hZGRfc2xhdmVgIG9wZXJhdGlvbi4KClJpZ2h0LCB0aGF0IGZlZWxzIG1vcmUgY29ycmVjdC4gVGhlIG1vcmUgZ2VuZXJhbCBhcHByb2FjaCwgd2hlbiBhZGRpbmcgYSBzbGF2ZSB0byBhbnkgbWFzdGVyIGRldmljZSwgaXMgZ2VuZXJhbGx5IG1hbmFnZWQgd2l0aGluIGBkb19zZXRsaW5rYCBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBGcm9tIHRoZXJlLCBpdCB3b3VsZCBjYWxsIGVpdGhlciBgbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGlua2Agb3IgdGhlIGFmb3JlbWVudGlvbmVkIGBuZG9fYWRkX3NsYXZlYC4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGdvIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGB0ZWFtX2FkZF9zbGF2ZWAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gZW5zdXJlIG15IG1lbnRhbCBtb2RlbCBpcyBjb21wbGV0ZSBhbmQgYWNjdXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RlYW1fYWRkX3NsYXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTIwOTg9c3RhdGljIGludCB0ZWFtX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMTYtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIxMTc6c3RhdGljIGludCB0ZWFtX2FkZF9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMTgtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGVhbV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE5OS0jZW5kaWZcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjIwMDpcdC5uZG9fYWRkX3NsYXZlXHRcdD0gdGVhbV9hZGRfc2xhdmUsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIyMDEtXHQubmRvX2RlbF9zbGF2ZVx0XHQ9IHRlYW1fZGVsX3NsYXZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzNwoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c3NpbmcgRnV6emluZyBFZmZvcnRzIGluIGB0ZWFtX2NvcmUuY2AqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgdGVhbV9hZGRfc2xhdmVgIGlzIGFzc2lnbmVkIHRvIGAubmRvX2FkZF9zbGF2ZWAsIGFuZCB0aGF0JiMzOTtzIGdvb2QuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdGFyZ2V0IGl0IGZvciBmdXp6aW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyIGl0JiMzOTtzIHN0YXRpYy4gSG1tLCBzYW1lIGdvZXMgZm9yIGB0ZWFtX3BvcnRfYWRkYC4gVGhpcyBpcyBhIHNsaWdodCBwcm9ibGVtLiBXZSB3YW50IHRvIGF2b2lkIHN0YXRpYyBmdW5jdGlvbnMsIGFzIHRoZXkgYXJlIG5vdCBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuIElzIHRoZXJlIGFueXRoaW5nICpub24qLXN0YXRpYyBpbiBgdGVhbV9jb3JlLmNgIHRoYXQgb2ZmZXJzIGEgYmV0dGVyIGZ1enppbmcgdGFyZ2V0PyBMZXQmIzM5O3MgdGFrZSBhIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgdGVhbV9jb3JlLmNgIHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1vcmUgdmlhYmxlIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz02Nj1zdGF0aWMgaW50IHRlYW1fcG9ydF9zZXRfdGVhbV9kZXZfYWRkcihzdHJ1Y3QgdGVhbSAqdGVhbSxcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTcxLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzo3MjppbnQgdGVhbV9tb2Rlb3BfcG9ydF9lbnRlcihzdHJ1Y3QgdGVhbSAqdGVhbSwgc3RydWN0IHRlYW1fcG9ydCAqcG9ydClcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNzMte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NzY9RVhQT1JUX1NZTUJPTCh0ZWFtX21vZGVvcF9wb3J0X2VudGVyKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNzctXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjc4OnZvaWQgdGVhbV9tb2Rlb3BfcG9ydF9jaGFuZ2VfZGV2X2FkZHIoc3RydWN0IHRlYW0gKnRlYW0sXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTc5LVx0XHRcdFx0ICAgICAgc3RydWN0IHRlYW1fcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTMzMj1zdGF0aWMgdm9pZCBfX3RlYW1fb3B0aW9uc19jaGFuZ2VfY2hlY2soc3RydWN0IHRlYW0gKnRlYW0pO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMzMtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMzNDppbnQgdGVhbV9vcHRpb25zX3JlZ2lzdGVyKHN0cnVjdCB0ZWFtICp0ZWFtLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMzUtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgdGVhbV9vcHRpb24gKm9wdGlvbixcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTM0Nj1FWFBPUlRfU1lNQk9MKHRlYW1fb3B0aW9uc19yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM0Ny1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzQ4OnZvaWQgdGVhbV9vcHRpb25zX3VucmVnaXN0ZXIoc3RydWN0IHRlYW0gKnRlYW0sXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM0OS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0ZWFtX29wdGlvbiAqb3B0aW9uLFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzY5PXN0YXRpYyBpbnQgdGVhbV9vcHRpb25fc2V0KHN0cnVjdCB0ZWFtICp0ZWFtLFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzc3LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozNzg6dm9pZCB0ZWFtX29wdGlvbl9pbnN0X3NldF9jaGFuZ2Uoc3RydWN0IHRlYW1fb3B0aW9uX2luc3RfaW5mbyAqb3B0X2luc3RfaW5mbylcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzc5LXtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTM4NT1FWFBPUlRfU1lNQk9MKHRlYW1fb3B0aW9uX2luc3Rfc2V0X2NoYW5nZSk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM4Ni1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mzg3OnZvaWQgdGVhbV9vcHRpb25zX2NoYW5nZV9jaGVjayhzdHJ1Y3QgdGVhbSAqdGVhbSlcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzg4LXtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTM5MT1FWFBPUlRfU1lNQk9MKHRlYW1fb3B0aW9uc19jaGFuZ2VfY2hlY2spO1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzk3LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozOTg6c3RhdGljIExJU1RfSEVBRChtb2RlX2xpc3QpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozOTk6c3RhdGljIERFRklORV9TUElOTE9DSyhtb2RlX2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQwMC1cbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTQxNz1zdGF0aWMgYm9vbCBpc19nb29kX21vZGVfbmFtZShjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNDI2LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzo0Mjc6aW50IHRlYW1fbW9kZV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgdGVhbV9tb2RlICptb2RlKVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy00Mjgte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NDUyPUVYUE9SVF9TWU1CT0wodGVhbV9tb2RlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNDUzLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzo0NTQ6dm9pZCB0ZWFtX21vZGVfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgdGVhbV9tb2RlICptb2RlKVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy00NTUte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjQ1OT1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IHRlYW1fbmxfZmFtaWx5O1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNDYwLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNDYxOmludCB0ZWFtX25sX25vb3BfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNDYyLXtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTI2MjQ9c3RhdGljIGludCB0ZWFtX25sX3NlbmRfb3B0aW9uc19nZXQoc3RydWN0IHRlYW0gKnRlYW0sIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjk3LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNjk4OmludCB0ZWFtX25sX29wdGlvbnNfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY5OS17XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yNzI3PXN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyOS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjczMDppbnQgdGVhbV9ubF9vcHRpb25zX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MzEte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjkxMz1zdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9wb3J0X2xpc3RfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjk5Ni1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjk5NzppbnQgdGVhbV9ubF9wb3J0X2xpc3RfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjk5OC1cdFx0XHQgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGB0ZWFtX2FkZF9zbGF2ZWAgU3ltYm9sKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9sIGZvciBhbmFseXppbmcgdGhlIHNsYXZlIGFkZGl0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBuZXR3b3JrIHRlYW1pbmcgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBgbmRvX2FkZF9zbGF2ZWAsIHNpbmNlIHRoYXQmIzM5O3MgdGhlIGdlbmVyaWMgbmV0ZGV2IG9wZXJhdGlvbiB0aGF0IGFwcGVhcnMgdG8gYmUgdGhlIGVudHJ5IHBvaW50LiBJIHF1aWNrbHkgdHJhY2VkIHRoZSBjYWxsIHN0YWNrOiBgbmRvX2FkZF9zbGF2ZWAgaXMgY2FsbGVkIGZyb20gYG5ldC9jb3JlL3J0bmV0bGluay5jYCB0aHJvdWdoIGBkb19zZXRsaW5rYCwgdGhlbiBgbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGlua2AsIGZ1cnRoZXIgZG93biB0byBgX19uZXRkZXZfdXBwZXJfZGV2X2xpbmtgIGFuZCBmaW5hbGx5IGNhbGxpbmcgdGhlIHNwZWNpZmljIGRldmljZSYjMzk7cyBpbXBsZW1lbnRhdGlvbiB2aWEgYG9wcy0mZ3Q7bmRvX2FkZF9zbGF2ZWAuIFNvLCBJIHRob3VnaHQgbWF5YmUgSSBjb3VsZCBmb2N1cyBvbiBgdGVhbV9hZGRfc2xhdmVgIGlmIGl0JiMzOTtzIGZlYXNpYmxlIHRvIGNvbmNlbnRyYXRlIG9uIHN0YXRpYyBmdW5jdGlvbnMuCgpCdXQgd2FpdCBhIG1vbWVudC4gVGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBjbGVhcjogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBhIGNvbXBpbGVyJiMzOTtzIHBsYXlncm91bmQgYW5kIGRvbiYjMzk7dCBnZXQgZGlzdGluY3Qgc3ltYm9scy4gSG93ZXZlciwgSSBiZWxpZXZlIGB0ZWFtX2FkZF9zbGF2ZWAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIChgLm5kb19hZGRfc2xhdmVgKSwgc28gaXQgY2FuJiMzOTt0IGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgKmRvZXMqIGhhdmUgYSBjbGVhciBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgdmFsaWQgZm9jdXMuCgpJIGFsc28gY29uc2lkZXJlZCBgdGVhbV9wb3J0X2FkZGAgYXMgYSBwb3RlbnRpYWwgb3B0aW9uLiBJdCBpcyBzdGF0aWMsIGFuZCBteSBpbnR1aXRpb24gc3VnZ2VzdHMgdGhhdCBpdCBtaWdodCBiZSBpbmxpbmVkIGdpdmVuIGl0cyB0aWdodCBjb3VwbGluZyB3aXRoIGB0ZWFtX2FkZF9zbGF2ZWAuIFRodXMsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHRlYW1fcG9ydF9hZGRgIGlzIHVzZWQgYW55d2hlcmUgZWxzZSB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RlYW1fcG9ydF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NDA9c3RhdGljIHN0cnVjdCB0ZWFtX3BvcnQgKnRlYW1fcG9ydF9nZXRfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNDgtICogU2luY2UgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIGRldmljZSBhZGRyZXNzIGZvciBvcGVuIHBvcnQgZGV2aWNlIGlzIHRlc3RlZCBpblxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzo0OTogKiB0ZWFtX3BvcnRfYWRkLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sIG9mIHJldHVybiB2YWx1ZVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy01MC0gKi9cbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTEyMDk9c3RhdGljIGludCB0ZWFtX2Rldl90eXBlX2NoZWNrX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MTIxMjpzdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMy1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjExNz1zdGF0aWMgaW50IHRlYW1fYWRkX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2Rldixcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMjMtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIxMjQ6XHRyZXR1cm4gdGVhbV9wb3J0X2FkZCh0ZWFtLCBwb3J0X2RldiwgZXh0YWNrKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjEyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjk1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYHRlYW1fcG9ydF9hZGRgIEZ1bmN0aW9uIGFuZCBpdHMgQ29udGV4dCoqCgpSaWdodCwgc28gYHRlYW1fcG9ydF9hZGRgIGlzIG9ubHkgZXZlciBjYWxsZWQgYnkgYHRlYW1fYWRkX3NsYXZlYC4gIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgaW5saW5lZCwgb3IgYXQgbGVhc3QgaGlnaGx5IGludGVncmF0ZWQgd2l0aGluIHRoYXQgZnVuY3Rpb24mIzM5O3Mgc2NvcGUuIFNvLCBgdGVhbV9hZGRfc2xhdmVgIGlzIGRlZmluaXRlbHkgdGhlIG1vcmUgZnJ1aXRmdWwgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiB3b3Jrcy4gTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5lZWRlZD8KCkhtbSwgYE5FVF9URUFNYCBpcyB0aGUgYmlnIG9uZSwgb2YgY291cnNlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIG5lZWRzIHRvIGJlIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVEVBTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzoyOm1lbnVjb25maWcgTkVUX1RFQU1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RXRoZXJuZXQgdGVhbSBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZz0xNj1pZiBORVRfVEVBTVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTE3LVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjE4OmNvbmZpZyBORVRfVEVBTV9NT0RFX0JST0FEQ0FTVFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjYXN0IG1vZGUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzoyOTpjb25maWcgTkVUX1RFQU1fTU9ERV9ST1VORFJPQklOXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMzAtXHR0cmlzdGF0ZSBcJiMzNDtSb3VuZC1yb2JpbiBtb2RlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNDAtXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6NDE6Y29uZmlnIE5FVF9URUFNX01PREVfUkFORE9NXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtSYW5kb20gbW9kZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTUyLVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjUzOmNvbmZpZyBORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7QWN0aXZlLWJhY2t1cCBtb2RlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNjUtXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6NjY6Y29uZmlnIE5FVF9URUFNX01PREVfTE9BREJBTEFOQ0VcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy02Ny1cdHRyaXN0YXRlIFwmIzM0O0xvYWQtYmFsYW5jZSBtb2RlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5FVF9URUFNIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9URUFNYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBzZWUgdGhlICphY3R1YWwqIGNvbm5lY3Rpb25zLiBXaGF0IHN5c3RlbXMsIHNlcnZpY2VzLCBvciBldmVuIHNwZWNpZmljIGNvZGUgbW9kdWxlcyByZWx5IG9uIGBORVRfVEVBTWA/IEkmIzM5O20gbm90IGludGVyZXN0ZWQgaW4gc3VyZmFjZS1sZXZlbCBtZW50aW9uczsgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGNyaXRpY2FsIHBhdGhzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBkaXJlY3QgY2FsbHMsIGluZGlyZWN0IGRlcGVuZGVuY2llcyB0aHJvdWdoIHNoYXJlZCBsaWJyYXJpZXMsIG9yIGV2ZW4gc29mdCBkZXBlbmRlbmNpZXMgbWVkaWF0ZWQgYnkgbWVzc2FnZSBxdWV1ZXMgb3IgZGF0YSBzdG9yZXM/IFRoZSBnb2FsIGlzIGEgY2xlYXIgZGVwZW5kZW5jeSBncmFwaCwgcHJlZmVyYWJseSB3aXRoIHNvbWUgaW5kaWNhdGlvbiBvZiB0aGUgaW1wYWN0IGxldmVsIGZvciBhbnkgcGFydGljdWxhciBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gYXNzZXNzIGhvdyBmcmFnaWxlIHRoZSBzeXN0ZW0gaXMsIHdoYXQgcmVmYWN0b3Jpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgdGhlIHBvdGVudGlhbCBibGFzdCByYWRpdXMgaWYgd2UgbmVlZCB0byBtYWtlIGNoYW5nZXMgdG8gYE5FVF9URUFNYCBkb3duIHRoZSBsaW5lLiBJIGtub3cgdGhlIGRldmlsIGlzIG9mdGVuIGluIHRoZSBkZXRhaWxzLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgYXJlYXMgSSBuZWVkIHRvIGZvY3VzIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgTkVUX1RFQU1cbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0V0aGVybmV0IHRlYW0gZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBhbGxvd3Mgb25lIHRvIGNyZWF0ZSB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCB0ZWFtcyB0b2dldGhlclxuICAgNjpcdFx0ICBtdWx0aXBsZSBldGhlcm5ldCBkZXZpY2VzLlxuICAgNzpcdFxuICAgODpcdFx0ICBUZWFtIGRldmljZXMgY2FuIGJlIGFkZGVkIHVzaW5nIHRoZSBcJiMzNDtpcFwmIzM0OyBjb21tYW5kIGZyb20gdGhlXG4gICA5Olx0XHQgIGlwcm91dGUyIHBhY2thZ2U6XG4gIDEwOlx0XG4gIDExOlx0XHQgIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgWyBhZGRyZXNzIE1BQyBdIFsgTkFNRSBdIHR5cGUgdGVhbVwmIzM0O1xuICAxMjpcdFxuICAxMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDE0Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHRlYW0uXG4gIDE1Olx0XG4gIDE2Olx0aWYgTkVUX1RFQU1cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTkVUX1RFQU1fTU9ERV9CUk9BRENBU1RcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY2FzdCBtb2RlIHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gTkVUX1RFQU1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgTkVUX1RFQU1gIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYE5FVF9URUFNYC4gSW5pdGlhbGx5LCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jaWVzIGxpc3RlZCwgc28gYE5FVF9URUFNYCBpdHNlbGYgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLiBIb3dldmVyLCBJJiMzOTt2ZSBnb3QgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gVGhlIHBhdGNoIGluY2x1ZGVzIGNoZWNrcyBmb3IgYEFSUEhSRF9DQU5gIGFuZCBgQVJQSFJEX0lFRUU4MDIxNTRgLiBOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXA6IGRvIHdlICpuZWVkKiBDQU4gYW5kIElFRUU4MDIxNTQgaW50ZXJmYWNlcyBwcmVzZW50IHRvIGZ1bGx5IHRlc3QgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBuZXcgZXJyb3IgcGF0aCBpdCBpbnRyb2R1Y2VzPyBZZXMsIHRvIHRydWx5IHZhbGlkYXRlIHRoZSBjb2RlIGNoYW5nZXMgYW5kIGV4ZXJjaXNlIHRoYXQgbmV3IGVycm9yIGhhbmRsaW5nLCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0byBoYXZlIGJvdGggQ0FOIGFuZCBJRUVFODAyMTU0IGRldmljZXMgYXZhaWxhYmxlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3MgYXJlIHNldCBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciBDQU4gYW5kIElFRUU4MDIxNTQgdG8gZW5zdXJlIHRoZXkgYXJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnLTUtXG5uZXQvY2FuL0tjb25maWc6NjptZW51Y29uZmlnIENBTlxubmV0L2Nhbi9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2Nhbi9LY29uZmlnPTIyPWlmIENBTlxubmV0L2Nhbi9LY29uZmlnLTIzLVxubmV0L2Nhbi9LY29uZmlnOjI0OmNvbmZpZyBDQU5fUkFXXG5uZXQvY2FuL0tjb25maWctMjUtXHR0cmlzdGF0ZSBcJiMzNDtSYXcgQ0FOIFByb3RvY29sIChyYXcgYWNjZXNzIHdpdGggQ0FOLUlEIGZpbHRlcmluZylcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWctMzMtXG5uZXQvY2FuL0tjb25maWc6MzQ6Y29uZmlnIENBTl9CQ01cbm5ldC9jYW4vS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY2FzdCBNYW5hZ2VyIENBTiBQcm90b2NvbCAod2l0aCBjb250ZW50IGZpbHRlcmluZylcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWctNDUtXG5uZXQvY2FuL0tjb25maWc6NDY6Y29uZmlnIENBTl9HV1xubmV0L2Nhbi9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7Q0FOIEdhdGV3YXkvUm91dGVyICh3aXRoIG5ldGxpbmsgY29uZmlndXJhdGlvbilcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xubmV0L2Nhbi9LY29uZmlnLTU4LVxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcbm5ldC9jYW4vS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0lTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMjkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipDb25zaWRlcmluZyBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgQ0FOLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYENBTmAgaXMgdGhlIGtleSBpZGVudGlmaWVyIGZvciB0aGUgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpOb3csIHRoYXQgYnJpbmdzIG1lIHRvIHRoZSBuZXh0IHByb3RvY29sIG9yIHN0YW5kYXJkIEkmIzM5O20gd29ya2luZyB3aXRoIG9yIHRoaW5raW5nIGFib3V0OiBJRUVFIDgwMi4xNS40LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgdGhhdCBzdGFuZGFyZCBhcyB3ZWxsLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBzeW50YXggb3IgbWV0aG9kIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUVFRTgwMjE1NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZz0xND1pZiBJRUVFODAyMTU0XG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTctXHRib29sIFwmIzM0O0lFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjIxOmNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSBsb29raW5nIGF0IHNldHRpbmcgdXAgdGhpcyBuZXcgZGV2aWNlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgb2YgY291cnNlLCB0aGUgYElFRUU4MDIxNTRgIGNvbmZpZ3VyYXRpb247IHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS4gQnV0IHdhaXQgYSBtaW51dGUsIEkgdGhpbmsgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBhbm90aGVyIHBpZWNlIG9mIHRoaXMgcHV6emxlLiBUbyBzaW11bGF0ZSBvciBjcmVhdGUgdGhlIENBTiBkZXZpY2UsIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBDQU5fVkNBTmAuIFRoYXQgd2lsbCBiZSBpbXBvcnRhbnQgZm9yIHRlc3RpbmcuIE9rYXksIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOX1ZDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vS2NvbmZpZz0yMz1pZiBDQU5fREVWXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0yNC1cbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjI1OmNvbmZpZyBDQU5fVkNBTlxuZHJpdmVycy9uZXQvY2FuL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIExvY2FsIENBTiBJbnRlcmZhY2UgKHZjYW4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTQ2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipDb25zaWRlcmluZyBJbXBsZW1lbnRhdGlvbiBTdHJhdGVnaWVzIGZvciBJRUVFODAyLjE1LjQqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IElFRUU4MDIuMTUuNCBpbXBsZW1lbnRhdGlvbiwgYW5kIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHRlc3RpbmcgYW5kIHNpbXVsYXRpb24gYXNwZWN0cy4gV2UmIzM5O2xsIGxpa2VseSBuZWVkIGEgdmlydHVhbCByZXByZXNlbnRhdGlvbiwgYSBkZXZpY2UgdGhhdCBjYW4gc3RhbmQgaW4gZm9yIGEgcGh5c2ljYWwgb25lLCBidXQgYWxsb3cgdXMgdG8gc2ltdWxhdGUgYmVoYXZpb3IuIFNvbWV0aGluZyBsaWtlIGEgYE1BQzgwMjE1NF9IV1NJTWAg4oCTIHBlcmhhcHMgaGFyZHdhcmUgc2ltdWxhdGlvbiDigJMgb3IgYSBgSUVFRTgwMjE1NF9GQUtFTEJgIOKAkyBtYXliZSBhICYjMzk7ZmFrZSBsb3dlciBib3VuZCYjMzk7IHRvIG1vZGVsIHNvbWUgY29uc3RyYWludHMg4oCTIHdvdWxkIGJlIGlkZWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCB0byBlbnN1cmUgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudCB3aXRob3V0IHJlcXVpcmluZyBhY3R1YWwgcGh5c2ljYWwgaGFyZHdhcmUgYXQgZXZlcnkgc3RlcC4gVGhpcyBuZWVkcyBjYXJlZnVsIGNvbnNpZGVyYXRpb247IGl0JiMzOTtzIGEga2V5IHBpZWNlIGluIGVuc3VyaW5nIGEgcm9idXN0IGFuZCBlZmZpY2llbnQgZGVzaWduIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxNTQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTU0L0tjb25maWc6Mjpjb25maWcgTUFDODAyMTU0XG5uZXQvbWFjODAyMTU0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTUuNCBTb2Z0IE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjE1NClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTmF2aWdhdGluZyB0aGUgSUVFRSA4MDIuMTUuNCBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhbiA4MDIuMTUuNCBuZXR3b3JrIGRyaXZlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTttIHJlYXNvbmFibHkgc3VyZSBJJiMzOTtsbCBmaW5kIHdoYXQgSSBuZWVkIGluIGVpdGhlciBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnYCBvciwgcGVyaGFwcyBpZiBpdCYjMzk7cyB1c2luZyB0aGUgbWFjODAyMTU0IHN0YWNrLCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTU0L0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCB0aGUgZ28tdG8gbG9jYXRpb25zIGZvciB0aGVzZSBzb3J0cyBvZiBsb3ctbGV2ZWwgbmV0d29ya2luZyBvcHRpb25zLiBJdCYjMzk7cyBhIGJpdCBvZiBhIGNvaW4gZmxpcCBpbml0aWFsbHksIHNvIEkmIzM5O2xsIGNoZWNrIGJvdGggYW5kIHNlZSB3aGljaCBvbmUgaGFzIHRoZSBtb3JlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2xzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBzcGVjaWZpYyBzY2VuYXJpbyBJJiMzOTttIGRlYWxpbmcgd2l0aC4gUHJvYmFibHkgdGhlIGZpcnN0LCBidXQgSSBzaG91bGQgY2hlY2sgdGhlIGxhdHRlciB0byBiZSBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qODAyMTU0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI6bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEzLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjE0OmNvbmZpZyBJRUVFODAyMTU0X0ZBS0VMQlxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMy1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyNDpjb25maWcgSUVFRTgwMjE1NF9BVDg2UkYyMzBcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yNS1cdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFx1MDAyNlx1MDAyNiBNQUM4MDIxNTRcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMzUtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MzY6Y29uZmlnIElFRUU4MDIxNTRfTVJGMjRKNDBcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zNy1cdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBNUkYyNEo0MCB0cmFuc2NlaXZlciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNDctXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6NDg6Y29uZmlnIElFRUU4MDIxNTRfQ0MyNTIwXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNDktXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTU4LVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjU5OmNvbmZpZyBJRUVFODAyMTU0X0FUVVNCXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtBVFVTQiB0cmFuc2NlaXZlciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNjgtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6Njk6Y29uZmlnIElFRUU4MDIxNTRfQURGNzI0MlxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7QURGNzI0MiB0cmFuc2NlaXZlciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNzktXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6ODA6Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctODEtXHR0cmlzdGF0ZSBcJiMzNDtDYXNjb2RhIENBODIxMCB0cmFuc2NlaXZlciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctOTEtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6OTI6Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlNcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7Q0E4MjEwIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEwMS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxMDI6Y29uZmlnIElFRUU4MDIxNTRfTUNSMjBBXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTAzLVx0dHJpc3RhdGUgXCYjMzQ7TUNSMjBBIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMTMtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MTE0OmNvbmZpZyBJRUVFODAyMTU0X0hXU0lNXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTE1LVx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY3OAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipFdmFsdWF0aW5nIFNpbXVsYXRpb24gQXBwcm9hY2hlcyBmb3IgSUVFRSA4MDIuMTUuNCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBkaWZmZXJlbnQgc2ltdWxhdGlvbiBvcHRpb25zIGZvciBJRUVFIDgwMi4xNS40LiBgSUVFRTgwMjE1NF9IV1NJTWAgYW5kIGBJRUVFODAyMTU0X0ZBS0VMQmAgc2VlbSBsaWtlIHByb21pc2luZyBzdGFydGluZyBwb2ludHMuIEkmIzM5O3ZlIGhlYXJkIGdvb2QgdGhpbmdzIGFib3V0IHRoZW0sIGJ1dCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJRUVFODAyMTU0X0hXU0lNYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGxpYnJhcmllcyBpdCByZWxpZXMgb24uIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgb3ZlcmFsbCBjb21wbGV4aXR5LCBwb3J0YWJpbGl0eSwgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzLiBJdCBpcyB2aXRhbCB0byBtZSwgYXMgYW4gZXhwZXJ0LCB0byB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiBlYWNoIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XG4gMTExOlx0XHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cbiAxMTI6XHRcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAmIzM5O21jcjIwYSYjMzk7LlxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBJRUVFODAyMTU0X0hXU0lNXG4gMTE1Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4gMTE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxNTRcJiMzNDtcbiAxMTc6XHRcdGhlbHBcbiAxMTg6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuIDExOTpcdFx0ICBJRUVFIDgwMi4xNS40IG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjE1NCkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAxMjA6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd3BhbiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy5cbiAxMjE6XHRcbiAxMjI6XHRcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvIHNheSBNIGhlcmUuXG4gMTIzOlx0XHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJiMzOTttYWM4MDIxNTRfaHdzaW0mIzM5Oy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQ6CgoqKkNvbXBvbmVudCBDb25maWd1cmF0aW9uIFJldmlldyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBGaXJzdCwgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gSUVFRSA4MDIuMTUuNCwgSSBhYnNvbHV0ZWx5IG5lZWQgYElFRUU4MDIxNTRgLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZSBNQUMgbGF5ZXIgc3VwcG9ydCAoYE1BQzgwMjE1NGApIGhhcyB0byBiZSBpbmNsdWRlZC4gQW5kIG5hdHVyYWxseSwgSSYjMzk7bGwgbmVlZCB0aGUgZHJpdmVycyBhc3NvY2lhdGVkIHdpdGggSUVFRSA4MDIuMTUuNCAoYElFRUU4MDIxNTRfRFJJVkVSU2ApLCBhbG9uZyB3aXRoIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIGVsZW1lbnRzIChgSUVFRTgwMjE1NF9IV1NJTWApIHNvIHRoYXQgSSBjYW4gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgd29ya2luZyBjb3JyZWN0bHkgd2l0aG91dCBuZWVkaW5nIGFuIGFjdHVhbCA4MDIuMTUuNCByYWRpby4KCk5vdywgc2hpZnRpbmcgZ2VhcnMgdG8gQ0FOLCB0aGUgY29yZSBgQ0FOYCBmdW5jdGlvbmFsaXR5IGlzIG9idmlvdXNseSByZXF1aXJlZC4gSSYjMzk7bGwgbmVlZCBgQ0FOX1ZDQU5gIGFzIHdlbGwuIEhhbmcgb24uLi4gaXNuJiMzOTt0IGBDQU5fVkNBTmAgZGVwZW5kZW50IG9uIHNvbWV0aGluZz8gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYENBTl9ERVZgIG9wdGlvbi4gSnVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOX0RFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTItXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZzozOm1lbnVjb25maWcgQ0FOX0RFVlxuZHJpdmVycy9uZXQvY2FuL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0NBTiBEZXZpY2UgRHJpdmVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY0MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSBzZWUgd2UgbmVlZCBgQ0FOX0RFVmAuIFRpbWUgdG8gcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbC4gTGV0JiMzOTtzIHNlZS4uLiB3ZSYjMzk7dmUgZ290IGBORVRfVEVBTWAsIGBDQU5gLCBgQ0FOX0RFVmAsIGBDQU5fVkNBTmAsIGBJRUVFODAyMTU0YCwgYE1BQzgwMjE1NGAsIGBJRUVFODAyMTU0X0RSSVZFUlNgLCBhbmQgYElFRUU4MDIxNTRfSFdTSU1gLiBUaGF0IGNvdmVycyB0aGUgbGlrZWx5IHN1c3BlY3RzLgoKV2FpdCBhIHNlY29uZCwgSSBzZWUgYHRlYW1fYWRkX3NsYXZlYCBpcyBhc3NpZ25lZCB0byBgLm5kb19hZGRfc2xhdmVgLiBPa2F5LCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRoYXQgZGVzZXJ2ZSBvdXIgYXR0ZW50aW9uPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB0ZWFtX3BvcnRfYWRkYCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMgYW5kIG1pZ2h0IGJlIGlubGluZWQsIHNvIGl0IG1heSBuZWVkIGRpZmZlcmVudCBhdHRlbnRpb24uIFBlcmhhcHMgaXQmIzM5O3Mgd29ydGggY2hlY2tpbmcgaWYgYHRlYW1fcG9ydF9hZGRgICppcyogaW5saW5lZD8gSSBjYW4gbG9vayBhdCBpdHMgc2l6ZSwgdGhvdWdoIEkgdGhpbmsgSSYjMzk7bGwgZm9jdXMgb24gYHRlYW1fYWRkX3NsYXZlYCBmb3Igbm93IC0gaXQmIzM5O3MgYSBjbGVhbmVyIHN5bWJvbCB0byBpbnZlc3RpZ2F0ZS4gRWl0aGVyIHRoYXQsIG9yIEkmIzM5O2xsIGp1c3QgY2hlY2sgaWYgYHRlYW1fcG9ydF9hZGRgIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IHdvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMTI6XHRzdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcbjEyMTM6XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTIxNDpcdHtcbjEyMTU6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHRlYW0pO1xuMTIxNjpcdFx0c3RydWN0IHRlYW1fcG9ydCAqcG9ydDtcbjEyMTc6XHRcdGNoYXIgKnBvcnRuYW1lID0gcG9ydF9kZXYtXHUwMDNlbmFtZTtcbjEyMTg6XHRcdGludCBlcnI7XG4xMjE5Olx0XG4xMjIwOlx0XHRpZiAocG9ydF9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9MT09QQkFDSykge1xuMTIyMTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0xvb3BiYWNrIGRldmljZSBjYW4mIzM5O3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcJiMzNDspO1xuMTIyMjpcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7RGV2aWNlICVzIGlzIGxvb3BiYWNrIGRldmljZS4gTG9vcGJhY2sgZGV2aWNlcyBjYW4mIzM5O3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcXG5cJiMzNDssXG4xMjIzOlx0XHRcdFx0ICAgcG9ydG5hbWUpO1xuMTIyNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyMjU6XHRcdH1cbjEyMjY6XHRcbjEyMjc6XHRcdFx0aWYgKHBvcnRfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxuMTIyODpcdFx0XHQgICAgcG9ydF9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxuMTIyOTpcdFx0XHQgICAgcG9ydF9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7XG4xMjMwOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuMTIzMTpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O0NBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbiYjMzk7dCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFwmIzM0Oyk7XG4xMjMyOlx0XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O0RldmljZSAlcyBpcyBDQU4gb3IgSUVFRSA4MDIuMTUuNC4gVGhlc2UgZGV2aWNlIHR5cGVzIGNhbiYjMzk7dCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcblwmIzM0OyxcbjEyMzM6XHRcdFx0XHRcdCAgIHBvcnRuYW1lKTtcbjEyMzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyMzU6XHRcdFx0fVxuMTIzNjpcdFx0fVxuMTIzNzpcdFxuMTIzODpcdFx0aWYgKG5ldGlmX2lzX3RlYW1fcG9ydChwb3J0X2RldikpIHtcbjEyMzk6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtEZXZpY2UgaXMgYWxyZWFkeSBhIHBvcnQgb2YgYSB0ZWFtIGRldmljZVwmIzM0Oyk7XG4xMjQwOlx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgJXMgaXMgYWxyZWFkeSBhIHBvcnQgXCYjMzQ7XG4xMjQxOlx0XHRcdFx0XHRcJiMzNDtvZiBhIHRlYW0gZGV2aWNlXFxuXCYjMzQ7LCBwb3J0bmFtZSk7XG4xMjQyOlx0XHRcdHJldHVybiAtRUJVU1k7XG4xMjQzOlx0XHR9XG4xMjQ0Olx0XG4xMjQ1Olx0XHRpZiAoZGV2ID09IHBvcnRfZGV2KSB7XG4xMjQ2Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IGVuc2xhdmUgdGVhbSBkZXZpY2UgdG8gaXRzZWxmXCYjMzQ7KTtcbjEyNDc6XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O0Nhbm5vdCBlbnNsYXZlIHRlYW0gZGV2aWNlIHRvIGl0c2VsZlxcblwmIzM0Oyk7XG4xMjQ4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI0OTpcdFx0fVxuMTI1MDpcdFxuMTI1MTpcdFx0aWYgKG5ldGRldl9oYXNfdXBwZXJfZGV2KGRldiwgcG9ydF9kZXYpKSB7XG4xMjUyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RGV2aWNlIGlzIGFscmVhZHkgYW4gdXBwZXIgZGV2aWNlIG9mIHRoZSB0ZWFtIGludGVyZmFjZVwmIzM0Oyk7XG4xMjUzOlx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgJXMgaXMgYWxyZWFkeSBhbiB1cHBlciBkZXZpY2Ugb2YgdGhlIHRlYW0gaW50ZXJmYWNlXFxuXCYjMzQ7LFxuMTI1NDpcdFx0XHRcdCAgIHBvcnRuYW1lKTtcbjEyNTU6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjEyNTY6XHRcdH1cbjEyNTc6XHRcbjEyNTg6XHRcdGlmIChuZXRkZXZfaGFzX3VwcGVyX2Rldihwb3J0X2RldiwgZGV2KSkge1xuMTI1OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0RldmljZSBpcyBhbHJlYWR5IGEgbG93ZXIgZGV2aWNlIG9mIHRoZSB0ZWFtIGludGVyZmFjZVwmIzM0Oyk7XG4xMjYwOlx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgJXMgaXMgYWxyZWFkeSBhIGxvd2VyIGRldmljZSBvZiB0aGUgdGVhbSBpbnRlcmZhY2VcXG5cJiMzNDssXG4xMjYxOlx0XHRcdFx0ICAgcG9ydG5hbWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA4OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbmV0d29ya2luZyBjb2RlOgoKKipBbmFseXppbmcgVGVhbSBJbnRlcmZhY2UgU2xhdmUgQWRkaXRpb24qKgoKUmlnaHQsIHNvIGB0ZWFtX3BvcnRfYWRkYCBpcyBhIGhlZnR5IGZ1bmN0aW9uLCBsaWtlbHkgbm90IGlubGluZWQuIEl0JiMzOTtzIHByb2JhYmx5IGRvaW5nIGEgYnVuY2ggb2Ygc2V0dXAsIGNvbmZpZ3VyYXRpb24sIGFuZCBkZXZpY2UtbGV2ZWwgbWFuaXB1bGF0aW9ucy4gVGhlIG1vcmUgaW50ZXJlc3RpbmcgZW50cnkgcG9pbnQsIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIGdyb3VuZCBsZXZlbCwgaXMgZGVmaW5pdGVseSBgdGVhbV9hZGRfc2xhdmVgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGh5cG90aGVzaXMgYW5kIGRpdmUgcmlnaHQgaW50byBgdGVhbV9hZGRfc2xhdmVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGFkZGluZyBhIHNsYXZlIGludGVyZmFjZSB0byB0aGUgdGVhbSBwcm9iYWJseSByZXNpZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMTc6XHRzdGF0aWMgaW50IHRlYW1fYWRkX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcbjIxMTg6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjIxMTk6XHR7XG4yMTIwOlx0XHRzdHJ1Y3QgdGVhbSAqdGVhbSA9IG5ldGRldl9wcml2KGRldik7XG4yMTIxOlx0XG4yMTIyOlx0XHRBU1NFUlRfUlROTCgpO1xuMjEyMzpcdFxuMjEyNDpcdFx0cmV0dXJuIHRlYW1fcG9ydF9hZGQodGVhbSwgcG9ydF9kZXYsIGV4dGFjayk7XG4yMTI1Olx0fVxuMjEyNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ2MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUZWFtIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGB0ZWFtX2FkZF9zbGF2ZWAgaXMgZXNzZW50aWFsbHkgYSB0aGluIGxheWVyIG92ZXIgYHRlYW1fcG9ydF9hZGRgLiBTaW5jZSBpdCYjMzk7cyBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIsIGlubGluaW5nIGlzIG91dCB0aGUgd2luZG93IGZvciBgdGVhbV9hZGRfc2xhdmVgLCBidXQgYHRlYW1fcG9ydF9hZGRgIGlzIHRoZSBtb3JlIGxpa2VseSBjYW5kaWRhdGUgdG8gYmUgaW5saW5lZCBpbnRvIGl0LiBUaGF0IG1lYW5zIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgdGVhbV9hZGRfc2xhdmVgIGl0c2VsZiBmb3Igbm93LgoKTGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4uLiBgTkVUX1RFQU1gLCBgQ0FOYCwgYENBTl9ERVZgLCBgQ0FOX1ZDQU5gLCBgSUVFRTgwMjE1NGAsIGBNQUM4MDIxNTRgLCBgSUVFRTgwMjE1NF9EUklWRVJTYCwgYW5kIGBJRUVFODAyMTU0X0hXU0lNYC4KCkhvbGQgb24uLi4gSSBkb24mIzM5O3QgdGhpbmsgSSBuZWVkIGBJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTGAuIEFuZCBmb3IgQ0FOLCBqdXN0IGBDQU5fVkNBTmAgc2VlbXMgc3VmZmljaWVudCBmb3IgY3JlYXRpbmcgYSBDQU4gZGV2aWNlOyBJIGRvbiYjMzk7dCBuZWVkIGBDQU5fUkFXYCBvciBgQ0FOX0JDTWAuIFdhaXQgYSBzZWNvbmQuLi4gYENBTl9WQ0FOYCBpcyBhIHZpcnR1YWwgZGV2aWNlISBQZXJmZWN0IGZvciBmdXp6aW5nISBBbmQgdGhlIHNhbWUgZ29lcyBmb3IgYElFRUU4MDIxNTRfSFdTSU1gIOKAkyBhbm90aGVyIHZpcnR1YWwgODAyLjE1LjQgZGV2aWNlIGlkZWFsIGZvciBmdXp6aW5nLgoKTm93LCBqdXN0IHRvIGJlIHN1cmUsIGxldCYjMzk7cyB2ZXJpZnkgYElFRUU4MDIxNTRfSFdTSU1gJiMzOTtzIGRlcGVuZGVuY2llcy4gSXQgc2VlbXMgaXQgcmVxdWlyZXMgYElFRUU4MDIxNTRfRFJJVkVSU2AgYW5kIGBNQUM4MDIxNTRgLiBgTUFDODAyMTU0YCBpbiB0dXJuIHJlcXVpcmVzIGBJRUVFODAyMTU0YC4gT2theSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1BQzgwMjE1NGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxNTQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTU0L0tjb25maWc6Mjpjb25maWcgTUFDODAyMTU0XG5uZXQvbWFjODAyMTU0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTUuNCBTb2Z0IE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjE1NClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIE1BQyA4MDIuMTUuNCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L21hYzgwMjE1NC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBJRUVFIDgwMi4xNS40IE1BQyBsYXllciBpbiB0aGUga2VybmVsIHJlc2lkZXMuIEkga25vdyB0aGlzIGZpbGUgaW50aW1hdGVseSDigJMgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIgdG8gY3VzdG9taXppbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBzdGFjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBpbiBoZXJlLCBlc3BlY2lhbGx5IGlmIEkmIzM5O20gbG9va2luZyBhdCBtb2RpZnlpbmcgb3IgZGVidWdnaW5nIHNvbWUgODAyLjE1LjQgcmVsYXRlZCBkcml2ZXIgb3IgZnVuY3Rpb25hbGl0eS4gSSBleHBlY3QgdG8gZmluZCB0aGUgdXN1YWwgc3VzcGVjdHM6IG9wdGlvbnMgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB2YXJpb3VzIE1BQyBmZWF0dXJlcywgc2VsZWN0aW5nIGRlZmF1bHQgcGFyYW1ldGVycywgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIGRpZmZlcmVudCBQSFkgaW50ZXJmYWNlcyB0aGF0IHRoaXMgTUFDIGxheWVyIHN1cHBvcnRzLiBJJiMzOTttIGhvcGluZyBJJiMzOTtsbCBhbHNvIHNlZSBzb21lIG5ldyBhZGRpdGlvbnMgdG8ga2VlcCB1cCB3aXRoIHRoZSBsYXRlc3Qgd2lyZWxlc3Mgc3RhbmRhcmRzLCBzdWNoIGFzIElFRUUgODAyLjE1LjQtMjAyMC4gSeKAmWxsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9ucyBjYW4gc3VwcG9ydCB0aGUgbmV3IHdpcmVsZXNzIHN0YW5kYXJkIHRvIGJlIGNvbXBsaWFudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTU0XG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRcbiAgIDU6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICAgODpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQ1RSXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgyNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgODAyLjE1LjQgTGFuZHNjYXBlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCB0aGUgZnVuZGFtZW50YWwgcmVsYXRpb25zaGlwIGhlcmUuIENsZWFybHksIGBNQUM4MDIxNTRgIGlzIGJ1aWx0IHVwb24gdGhlIGZvdW5kYXRpb24gb2YgYElFRUU4MDIxNTRgLiBUaGF04oCZcyB0aGUgY29yZSByZWxhdGlvbnNoaXAgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgdGhlIE1BQyBsYXllciByZWx5aW5nIG9uIHRoZSBicm9hZGVyIHBoeXNpY2FsIGFuZCBNQUMgc3BlY2lmaWNhdGlvbnMuIEl0JiMzOTtzIHRoZSBtb3N0IGJhc2ljIGRlcGVuZGVuY3kuCgpOb3csIHRoZSBmb2xsb3ctdXAsIGFuZCB0aGUgbW9yZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBmb3IgbWUsIGNvbmNlcm5zIGBJRUVFODAyMTU0X0RSSVZFUlNgLiBBcmUgdGhlc2UgbmVjZXNzYXJpbHkgbW9ub2xpdGhpYz8gRG8gd2Ugc2VlIHRpZ2h0IGNvdXBsaW5nIG9yIGxvb3NlIGNvdXBsaW5nIGJldHdlZW4gdGhlIGRyaXZlcnMgYW5kIHRoYXQgcHJvdG9jb2w/IEFyZSB0aGUgZHJpdmVyIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYywgb3IgY2FuIHdlIHRhbGsgYWJvdXQgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnM/IFdlIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZXNlIGRyaXZlcnMgYXJlIHN0cnVjdHVyZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc3RhY2suIFRoZXkmIzM5O3JlIGNyaXRpY2FsLiBBcmUgdGhleSB0aWdodGx5IGJvdW5kIHRvIHNwZWNpZmljIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIGlzIHRoZXJlIGEgbW9yZSBhYnN0cmFjdCBsYXllciBpbnZvbHZlZD8gSSBpbW1lZGlhdGVseSB3YW50IHRvIGtub3cgaG93IGFkYXB0YWJsZSB0aGV5IGFyZS4gSG93IHBvcnRhYmxlIGFyZSB3ZSB0YWxraW5nPyBUaGF04oCZcyB3aGF04oCZcyByZWFsbHkgcmVsZXZhbnQgdG8gbWUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElFRUU4MDIxNTRfRFJJVkVSU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBkcml2ZXJzXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IElFRUU4MDIxNTRcbiAgIDU6XHRcdGRlZmF1bHQgeVxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBMb3ctUmF0ZVxuICAgODpcdFx0ICBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuIFRoaXMgb3B0aW9uIGFsb25lXG4gICA5Olx0XHQgIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXG4gIDEwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzEzCgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDcxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIE5ldHdvcmsgVGVhbSBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCBhIGRlcGVuZGVuY3kgY2hhaW4uIGBJRUVFODAyMTU0X0RSSVZFUlNgIGhpbmdlcyBvbiBgTkVUREVWSUNFU2AgYW5kIGBJRUVFODAyMTU0YC4gVGhlcmVmb3JlLCB0byBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQsIEkmIzM5O2xsIG5lZWQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBORVRfVEVBTWAsIGBDQU5gLCBgQ0FOX0RFVmAsIGBDQU5fVkNBTmAsIGBJRUVFODAyMTU0YCwgYE1BQzgwMjE1NGAsIGBJRUVFODAyMTU0X0RSSVZFUlNgLCBhbmQgYElFRUU4MDIxNTRfSFdTSU1gLgoKTm93LCB0aGUgY29yZSBvZiB0aGUgaXNzdWU6IGB0ZWFtX3BvcnRfYWRkYCBnZXRzIGNhbGxlZCB3aGVuIHdlJiMzOTtyZSB0cnlpbmcgdG8gYWRkIGEgcG9ydCB0byBhIHRlYW0gZGV2aWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBwb3J0IGlzIENBTiBvciBJRUVFODAyMTU0LiBJZiBzbywgaXQgaW1tZWRpYXRlbHkgdGhyb3dzIGFuIGVycm9yLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGZpeCwgZGVzaWduZWQgdG8gcHJldmVudCBhIGNyYXNoIG9yIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgaXQgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluay4gR2l2ZW4gdGhpcywgaXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc29saWRpZnkgdGhlIGVudHJ5IHBvaW50LiBJcyBgdGVhbV9hZGRfc2xhdmVgIHRoZSBvbmx5IHBsYWNlIGB0ZWFtX3BvcnRfYWRkYCBnZXRzIGNhbGxlZD8gQSBxdWljayBncmVwIGNvbmZpcm1lZCBpdDsgYHRlYW1fcG9ydF9hZGRgIGlzICpvbmx5KiBjYWxsZWQgYnkgYHRlYW1fYWRkX3NsYXZlYC4gU28sIGB0ZWFtX2FkZF9zbGF2ZWAgaXMgb3VyIGtleSBzeW1ib2wuCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIGBORVRfVEVBTWAgaXMgYSB0cmlzdGF0ZSwgc28gZW5hYmxpbmcgaXQgaXMgZnVuZGFtZW50YWwuIFdoaWxlIHdlJiMzOTtyZSBhdCBpdCwgZW5hYmxpbmcgdGhlIGRpZmZlcmVudCBtb2RlcyDigJMgYE5FVF9URUFNX01PREVfQlJPQURDQVNUYCwgYE5FVF9URUFNX01PREVfUk9VTkRST0JJTmAsIGBORVRfVEVBTV9NT0RFX1JBTkRPTWAsIGBORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUGAsIGBORVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFYCDigJMgY291bGQgYmUgcHJ1ZGVudCBmb3IgYnJvYWRlciB0ZXN0aW5nLCBldmVuIHRob3VnaCB0aGUgYnVnJiMzOTtzIGluIGB0ZWFtX2NvcmUuY2AsIHdoaWNoIGNvbXBpbGVzIHdpdGgganVzdCBgTkVUX1RFQU1gLiBTbywgYE5FVF9URUFNYCBpcyBzdWZmaWNpZW50LCBidXQgdGhvc2Ugb3RoZXJzIG1pZ2h0IGV4cGFuZCB0aGUgdGVzdCBzdXJmYWNlLgoKRmluYWxseSwgbGV0JiMzOTtzIHJldmlzaXQgdGhlIHBhdGNoIGl0c2VsZi4KCmBgYGMKJiM0MzsJCWlmIChwb3J0X2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfQ0FOIHx8CiYjNDM7CQkgICAgcG9ydF9kZXYtJmd0O3R5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTQgfHwKJiM0MzsJCSAgICBwb3J0X2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW4mIzM5O3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnQmIzM0Oyk7CiYjNDM7CQkJbmV0ZGV2X2VycihkZXYsICYjMzQ7RGV2aWNlICVzIGlzIENBTiBvciBJRUVFIDgwMi4xNS40LiBUaGVzZSBkZXZpY2UgdHlwZXMgY2FuJiMzOTt0IGJlIGFkZGVkIGFzIGEgdGVhbSBwb3J0XG4mIzM0OywKJiM0MzsJCQkJICAgcG9ydG5hbWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQpgYGAKCkl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrOiBpZiB0aGUgZGV2aWNlIHR5cGUgbWF0Y2hlcyBgQVJQSFJEX0NBTmAsIGBBUlBIUkRfSUVFRTgwMjE1NGAsIG9yIGBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SYCwgd2UgZ2V0IHRoZSBlcnJvci4KClRvIHJlY2FwLCB0aGUgZm9jdXMgc3ltYm9sIGlzIGB0ZWFtX2FkZF9zbGF2ZWAsIGFuZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGBORVRfVEVBTWAsIGBDQU5gLCBgQ0FOX0RFVmAsIGBDQU5fVkNBTmAsIGBJRUVFODAyMTU0YCwgYE1BQzgwMjE1NGAsIGBJRUVFODAyMTU0X0RSSVZFUlNgLCBhbmQgYElFRUU4MDIxNTRfSFdTSU1gLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1RFQU0mIzM0OywKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O0NBTl9ERVYmIzM0OywKICAgICYjMzQ7Q0FOX1ZDQU4mIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9EUklWRVJTJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0ZWFtX2FkZF9zbGF2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRlYW1fcG9ydF9hZGRgIChjYWxsZWQgdmlhIGB0ZWFtX2FkZF9zbGF2ZWApIHRvIHByZXZlbnQgYWRkaW5nIENBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGFzIHRlYW0gcG9ydHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjb25maWd1cmluZyB0ZWFtIGRldmljZXMuIEZ1enppbmcgcmVxdWlyZXMgdGhlIHRlYW0gZHJpdmVyIGFuZCB2aXJ0dWFsIENBTi9JRUVFODAyMTU0IGRldmljZXMgdG8gYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1RFQU0mIzM0OywKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O0NBTl9ERVYmIzM0OywKICAgICYjMzQ7Q0FOX1ZDQU4mIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9EUklWRVJTJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0ZWFtX2FkZF9zbGF2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRlYW1fcG9ydF9hZGRgIChjYWxsZWQgdmlhIGB0ZWFtX2FkZF9zbGF2ZWApIHRvIHByZXZlbnQgYWRkaW5nIENBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGFzIHRlYW0gcG9ydHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjb25maWd1cmluZyB0ZWFtIGRldmljZXMuIEZ1enppbmcgcmVxdWlyZXMgdGhlIHRlYW0gZHJpdmVyIGFuZCB2aXJ0dWFsIENBTi9JRUVFODAyMTU0IGRldmljZXMgdG8gYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjA4LjgyNTI1ODAwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjAzMTIzMjAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVEVBTVwiLFxuICAgIFwiQ0FOXCIsXG4gICAgXCJDQU5fREVWXCIsXG4gICAgXCJDQU5fVkNBTlwiLFxuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X0RSSVZFUlNcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZWFtX2FkZF9zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiBgdGVhbV9wb3J0X2FkZGAgKGNhbGxlZCB2aWEgYHRlYW1fYWRkX3NsYXZlYCkgdG8gcHJldmVudCBhZGRpbmcgQ0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgYXMgdGVhbSBwb3J0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRlYW0gZGV2aWNlcy4gRnV6emluZyByZXF1aXJlcyB0aGUgdGVhbSBkcml2ZXIgYW5kIHZpcnR1YWwgQ0FOL0lFRUU4MDIxNTQgZGV2aWNlcyB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzowOC44MjUyNjU2MDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjQ2NTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDczMGJiNGFhNjc3Nzk4ODU1OGI4YzBhYWI5MzBiMWYyNWY4YjE4YjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjkgMjE6NDM6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcXG5pbmRleCBmZWFhNzVmYmY4ZmMyLi5kOGM0NjEwNWZjOGJkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXFxuQEAgLTEyMjQsNiArMTIyNCwxNyBAQCBzdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdFxcdGlmIChwb3J0X2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOIHx8XFxuK1xcdFxcdCAgICBwb3J0X2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxcbitcXHRcXHQgICAgcG9ydF9kZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiQ0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgY2FuJ3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcXFwiKTtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJEZXZpY2UgJXMgaXMgQ0FOIG9yIElFRUUgODAyLjE1LjQuIFRoZXNlIGRldmljZSB0eXBlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgcG9ydG5hbWUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRpZiAobmV0aWZfaXNfdGVhbV9wb3J0KHBvcnRfZGV2KSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJEZXZpY2UgaXMgYWxyZWFkeSBhIHBvcnQgb2YgYSB0ZWFtIGRldmljZVxcXCIpO1xcbiBcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIkRldmljZSAlcyBpcyBhbHJlYWR5IGEgcG9ydCBcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjA5LjMxMjUyOTI3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMTU0Mzk1MjU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVEVBTVwiLFxuICAgIFwiQ0FOXCIsXG4gICAgXCJDQU5fREVWXCIsXG4gICAgXCJDQU5fVkNBTlwiLFxuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X0RSSVZFUlNcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZWFtX2FkZF9zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiBgdGVhbV9wb3J0X2FkZGAgKGNhbGxlZCB2aWEgYHRlYW1fYWRkX3NsYXZlYCkgdG8gcHJldmVudCBhZGRpbmcgQ0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgYXMgdGVhbSBwb3J0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRlYW0gZGV2aWNlcy4gRnV6emluZyByZXF1aXJlcyB0aGUgdGVhbSBkcml2ZXIgYW5kIHZpcnR1YWwgQ0FOL0lFRUU4MDIxNTQgZGV2aWNlcyB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MzBiYjRhYTY3Nzc5ODg1NThiOGMwYWFiOTMwYjFmMjVmOGIxOGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMjE6NDM6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jIGIvZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY1xuaW5kZXggZmVhYTc1ZmJmOGZjMi4uZDhjNDYxMDVmYzhiZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcbkBAIC0xMjI0LDYgKzEyMjQsMTcgQEAgc3RhdGljIGludCB0ZWFtX3BvcnRfYWRkKHN0cnVjdCB0ZWFtICp0ZWFtLCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0XHRpZiAocG9ydF9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOIHx8XG4rXHRcdCAgICBwb3J0X2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0IHx8XG4rXHRcdCAgICBwb3J0X2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHtcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFwiKTtcbitcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCJEZXZpY2UgJXMgaXMgQ0FOIG9yIElFRUUgODAyLjE1LjQuIFRoZXNlIGRldmljZSB0eXBlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcblwiLFxuK1x0XHRcdFx0ICAgcG9ydG5hbWUpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRpZiAobmV0aWZfaXNfdGVhbV9wb3J0KHBvcnRfZGV2KSkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiRGV2aWNlIGlzIGFscmVhZHkgYSBwb3J0IG9mIGEgdGVhbSBkZXZpY2VcIik7XG4gXHRcdG5ldGRldl9lcnIoZGV2LCBcIkRldmljZSAlcyBpcyBhbHJlYWR5IGEgcG9ydCBcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MDkuMzEyNTMwNzA3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NDYxNTk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRlYW0gRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY2AuIEl0IHNlZW1zIHRoZXkndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gdGhlIGB0ZWFtX3BvcnRfYWRkYCBmdW5jdGlvbi4gVGhlIHB1cnBvc2UsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gYWN0aXZlbHkgcHJldmVudCBDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBmcm9tIGJlaW5nIGFkZGVkIGFzIHRlYW0gcG9ydHMuIFRoYXQncyBhIHZlcnkgc3BlY2lmaWMgZnVuY3Rpb25hbCBjaGFuZ2UsIGNsZWFybHkgdGFyZ2V0aW5nIGEgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgY29uZmlndXJhdGlvbi5cblxuVGhpbmtpbmcgYWJvdXQgaXQsIHRoZSBvbmx5IHdheSB0byB0cmlnZ2VyIGB0ZWFtX3BvcnRfYWRkYCBpcyB0aHJvdWdoIG5ldGxpbmsg4oCTIHNwZWNpZmljYWxseSwgd2hlbiBzb21lb25lIGlzIHRyeWluZyB0byBhZGQgYSBwb3J0IHRvIGEgdGVhbSBkZXZpY2UuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgcHJldmVudCBzb21lIG9ic2N1cmUsIGJ1dCBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSwgYmVoYXZpb3IuIEl0J3MgYSB0YXJnZXRlZCBkZWZlbnNlIGFnYWluc3QgYSBzcGVjaWZpYywgYWxiZWl0IHBlcmhhcHMgcmFyZSwgc2NlbmFyaW8uXG5cblNpbmNlIGl0IGludm9sdmVzIHRoZSB0ZWFtIGRyaXZlciwgdGhlIHdob2xlIHRoaW5nIGlzIGdvdmVybmVkIGJ5IHRoZSBgQ09ORklHX05FVF9URUFNYCBLY29uZmlnIG9wdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIGFueSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBORVRfVEVBTWAuIEkgc2hvdWxkIHByb2JhYmx5IGVuc3VyZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhlIG1vZHVsZSBkb2VzIG5vdCBicmVhayBhbnkgb3RoZXIgbmV0d29yayBpbnRlcmZhY2UgYXMgYSByZWdyZXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MTMuMzA3MTQ5MzY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODkzODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfVEVBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90ZWFtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfVEVBTVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJFdGhlcm5ldCB0ZWFtIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnPTE2PWlmIE5FVF9URUFNXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzoxODpjb25maWcgTkVUX1RFQU1fTU9ERV9CUk9BRENBU1RcXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkJyb2FkY2FzdCBtb2RlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjI5OmNvbmZpZyBORVRfVEVBTV9NT0RFX1JPVU5EUk9CSU5cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlJvdW5kLXJvYmluIG1vZGUgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6NDE6Y29uZmlnIE5FVF9URUFNX01PREVfUkFORE9NXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJSYW5kb20gbW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTUyLVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzo1Mzpjb25maWcgTkVUX1RFQU1fTU9ERV9BQ1RJVkVCQUNLVVBcXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIkFjdGl2ZS1iYWNrdXAgbW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTY1LVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzo2Njpjb25maWcgTkVUX1RFQU1fTU9ERV9MT0FEQkFMQU5DRVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy02Ny1cXHR0cmlzdGF0ZSBcXFwiTG9hZC1iYWxhbmNlIG1vZGUgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MTMuMzUyMDQ5MjU3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMDYwMjAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgdGVhbV9wb3J0X2FkZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGBORVRfVEVBTWAsIGFuZCBpdCdzIHBvaW50aW5nIG1lIHRvd2FyZHMgdGhlIGZ1bmN0aW9uIGB0ZWFtX3BvcnRfYWRkYC4gTXkgZXhwZXJ0IGludHVpdGlvbiBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyB0aGF0IHdvdWxkIGxpa2VseSBiZW5lZml0IGZyb20gZnV6emluZy4gQW55dGltZSBJIHNlZSBhIG5ldHdvcmstcmVsYXRlZCBmdW5jdGlvbiwgZXNwZWNpYWxseSBvbmUgZGVhbGluZyB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIHBvcnQsIG15IG1pbmQgZ29lcyBzdHJhaWdodCB0byBlZGdlIGNhc2VzLCBidWZmZXIgb3ZlcmZsb3dzLCBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gQmVmb3JlIEkgZGl2ZSBpbiwgdGhvdWdoLCBJIG5lZWQgdG8ga25vdyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uOiBJcyBgdGVhbV9wb3J0X2FkZGAgYSBzdGF0aWMgZnVuY3Rpb24/IFRoYXQgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBteSBmdXp6aW5nIHN0cmF0ZWd5IGFuZCBob3cgSSBhcHByb2FjaCB0ZXN0aW5nIGl0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHZpc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UgYmVmb3JlIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjE2LjU4MjY2MjU4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ1NTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZWFtX3BvcnRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz00MD1zdGF0aWMgc3RydWN0IHRlYW1fcG9ydCAqdGVhbV9wb3J0X2dldF9ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQ4LSAqIFNpbmNlIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBkZXZpY2UgYWRkcmVzcyBmb3Igb3BlbiBwb3J0IGRldmljZSBpcyB0ZXN0ZWQgaW5cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjQ5OiAqIHRlYW1fcG9ydF9hZGQsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRob3V0IGNvbnRyb2wgb2YgcmV0dXJuIHZhbHVlXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy01MC0gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTIwOT1zdGF0aWMgaW50IHRlYW1fZGV2X3R5cGVfY2hlY2tfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTEyMTEtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoxMjEyOnN0YXRpYyBpbnQgdGVhbV9wb3J0X2FkZChzdHJ1Y3QgdGVhbSAqdGVhbSwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMy1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMTE3PXN0YXRpYyBpbnQgdGVhbV9hZGRfc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTIzLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjEyNDpcXHRyZXR1cm4gdGVhbV9wb3J0X2FkZCh0ZWFtLCBwb3J0X2RldiwgZXh0YWNrKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzoxNi42MzAxMjIyMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQ0ODM4NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYHRlYW1fcG9ydF9hZGRgIEZ1bmN0aW9uIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkndmUgbm90aWNlZCB0aGF0IGB0ZWFtX3BvcnRfYWRkYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgc3BlY2lmaWMgYmVoYXZpb3IuIE5vdywgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBjb21lcyBmcm9tIGB0ZWFtX2FkZF9zbGF2ZWAuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGB0ZWFtX2FkZF9zbGF2ZWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHB1cnBvc2Ugb2YgY2FsbGluZyB0aGlzIHN0YXRpYyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBmcm9tIGB0ZWFtX2FkZF9zbGF2ZWAgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2h5IHRoaXMgYHRlYW1fcG9ydF9hZGRgIGZ1bmN0aW9uIGlzIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjE5LjQ3NDk2NDA2NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc5OTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZWFtX2FkZF9zbGF2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjA5OD1zdGF0aWMgaW50IHRlYW1fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTE2LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjExNzpzdGF0aWMgaW50IHRlYW1fYWRkX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMTgtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTIxODE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0ZWFtX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxOTktI2VuZGlmXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMjAwOlxcdC5uZG9fYWRkX3NsYXZlXFx0XFx0PSB0ZWFtX2FkZF9zbGF2ZSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIyMDEtXFx0Lm5kb19kZWxfc2xhdmVcXHRcXHQ9IHRlYW1fZGVsX3NsYXZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzoxOS41MjA3Njc4MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODI2MTg5ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRlYW0gSW50ZXJmYWNlIFNsYXZlIEFkZGl0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgc2xhdmUgaW50ZXJmYWNlcyBnZXQgYWRkZWQgdG8gYSB0ZWFtIGludGVyZmFjZS4gYHRlYW1fYWRkX3NsYXZlYCBpcyBjbGVhcmx5IGEga2V5IGZ1bmN0aW9uLCBidXQgaXQncyBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCBtZWFucyBpdCdzIHBhcnQgb2YgYW4gYG5kb2AgY2FsbGJhY2ssIHNwZWNpZmljYWxseSBgbmRvX2FkZF9zbGF2ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBmdWxsIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzIHRvIGNvbnNpZGVyPyBMZXQgbWUgdGhpbmsuLi4gcGVyaGFwcyBgdGVhbV9ubF9jbWRfcG9ydF9saXN0X2dldGA/IEhtbSwgbm8sIEkgZG91YnQgdGhhdCdzIGZvciAqYWRkaW5nKiBhIHBvcnQ7IGl0IHNvdW5kcyBtb3JlIGxpa2UgbGlzdGluZyB0aGVtLlxuXG5XYWl0IGEgc2Vjb25kLCAqaG93KiBpcyBhIHBvcnQgYWN0dWFsbHkgYWRkZWQgaW4gdGhlIGZpcnN0IHBsYWNlPyBMZXQgbWUgdHJhY2UgdGhpcyBiYWNrLi4uIEl0IHNlZW1zIGxpa2UgYHRlYW1fYWRkX3NsYXZlYCBpcyB0aGUgcHJpbWFyeSBtZWNoYW5pc20sIGFuZCB0aGF0J3MgdGhlIHNhbWUgYXMgYG5kb19hZGRfc2xhdmVgLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGl0IGlzIGNhbGxlZCBieSBgZG9fc2V0bGlua2Agb3IgYGlmZW5zbGF2ZWAgaW9jdGwgY2FsbHMsIEkgc2hvdWxkIHJlbWVtYmVyIHRoYXQgZm9yIHRoZSBmdXR1cmUuIEknbSByZWNhbGxpbmcgc29tZXRoaW5nIGFib3V0IGBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9saW5rYCBpbiB0aGlzIGNvbnRleHQsIGJ1dCBJIGRvbid0IHRoaW5rIGl0IGlzIGNhbGxpbmcgdGhlIGBuZG9fYWRkX3NsYXZlYC4gU28sIEkgc2hvdWxkIGhhdmUgYSBsb29rIGluIHRoZXNlIGlvY3RsIGNvbW1hbmRzLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIE5ldGxpbmsgaW50ZXJmYWNlIGZvciB0ZWFtLiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRoZXJlIHdpbGwgYmUgTmV0bGluayBmdW5jdGlvbmFsaXR5IGhlcmUgdG9vLiBJIHNob3VsZCBjaGVjayBgdGVhbV9ubF9jbWRfcG9ydF9hZGRgLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBOZXRsaW5rIHNpZGUgb2YgdGhpbmdzIGhhcHBlbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlciBzcGFjZSBpbnRlcmFjdHMgd2l0aCBhbGwgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzoyNC4zNDY5NjA3NTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzY5MDU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZWFtX25sX2NtZF9wb3J0X2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzoyNC4zOTQ3NDExNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2Njk4MjkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDb21tYW5kIExpbmUgT3B0aW9uIFNldHRpbmdzKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCBpbnN0aW5jdCBoZXJlIGlzIHRvIGRlbHZlIGludG8gdGhlIG1lY2hhbmlzbSB0aGF0IG1hbmFnZXMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZvciB0aGUgdGVhbSBuZXR3b3JrIGxpYnJhcnkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHNldHRpbmdzIGFyZSBoYW5kbGVkLiBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGZ1bmN0aW9ucyBuYW1lZCBzaW1pbGFybHkgdG8gYHRlYW1fbmxfY21kX29wdGlvbnNfc2V0YCwgb3Igc29tZXRoaW5nIGFsb25nIHRob3NlIGxpbmVzLiBJIGV4cGVjdCB0aGVyZSdzIGEgZGVkaWNhdGVkIGZ1bmN0aW9uLCBvciBwZXJoYXBzIGEgcmVsYXRlZCBmYW1pbHkgb2YgZnVuY3Rpb25zLCByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIHRoZSBwYXJzZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhbmQgYWN0dWFsbHkgY29uZmlndXJpbmcgdGhlIG5ldHdvcmsgbGlicmFyeSdzIGJlaGF2aW9yIGJhc2VkIG9uIHRob3NlIGFyZ3VtZW50cy4gTXkgZ3Vlc3MgaXMgdGhlcmUgd291bGQgYmUgYXNzb2NpYXRlZCBmdW5jdGlvbnMgYXMgd2VsbC4gS25vd2luZyB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkZXNpZ24gd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHdlIGNhbiBhcHByb2FjaCBtb3JlIGNvbXBsZXggc2NlbmFyaW9zLCBvciBkZWJ1ZyBhbnkgZXJyb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjUyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MjcuNTYxNzI2NjA1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQxODk5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVhbV9ubF9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MjcuNjA2MTUxNTQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTUyMDY2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTmV0bGluayBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0ZWFtJ3MgZ29uZSB3aXRoIGdlbmVyaWMgbmV0bGluaywgZWg/IEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBjb25zaWRlcmF0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBhdmFpbGFibGUgZnVuY3Rpb25zIGFuZCB0aGUgb3ZlcmFsbCBhcHByb2FjaC4gTGV0J3Mgc2VlIHdoYXQgdGhleSd2ZSBpbXBsZW1lbnRlZCwgd2hhdCB0aGUgZmFtaWx5IElEIGlzLCBhbmQgd2hhdCBraW5kIG9mIG1lc3NhZ2VzIHRoZXkncmUgc2xpbmdpbmcgYXJvdW5kLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCB0aGUgbGlrZWxpaG9vZCBvZiByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgdGhleSdyZSBoYW5kbGluZyBlcnJvciBjb2Rlcy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IHRoZXkgYXJlIHVzaW5nIHRoZSBzb2NrZXQgYW5kIG1lc3NhZ2UgcGFzc2luZy4gSXMgdGhpcyBhIGN1c3RvbSBmYW1pbHk/IEFyZSB0aGV5IGxldmVyYWdpbmcgZXhpc3RpbmcgZ2VuZXJpYyBuZXRsaW5rIGF0dHJpYnV0ZXMsIG9yIGhhdmUgdGhleSBkZWZpbmVkIHRoZWlyIG93bj8gSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgb3ZlcmFsbCBkZXNpZ24uIElzIHRoaXMgYSBjbGVhbiBzZXBhcmF0aW9uIGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBjb21wb25lbnRzPyBBcmUgdGhleSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBuZXRsaW5rJ3MgYXN5bmNocm9ub3VzIG5hdHVyZSwgb3IgaGF2ZSB0aGV5IGZhbGxlbiBpbnRvIHRoZSB0cmFwIG9mIHN5bmNocm9ub3VzIGNhbGxzPyBJJ20gb24gdGhlIGxvb2tvdXQgZm9yIGFueXRoaW5nIHRoYXQgc21lbGxzIGxpa2UgaW5lZmZpY2llbnQgZGF0YSBzZXJpYWxpemF0aW9uLCBleGNlc3NpdmUgY29weWluZywgb3IgcG9vciBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzLiBUaGlzIGluaXRpYWwgYXNzZXNzbWVudCB3aWxsIGluZm9ybSBteSBhcHByb2FjaCB0byBmdXJ0aGVyIGNvZGUgcmV2aWV3IG9yIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjMwLjk2MTM2MDYxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNTk2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVhbV9ubF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTI0NDQ9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIHRlYW1fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ1OC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI0NTk6c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSB0ZWFtX25sX2ZhbWlseTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NjAtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNDYxOmludCB0ZWFtX25sX25vb3BfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NzEtXFx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVxcdTAwM2VzbmRfc2VxLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjQ3MjpcXHRcXHRcXHQgIFxcdTAwMjZ0ZWFtX25sX2ZhbWlseSwgMCwgVEVBTV9DTURfTk9PUCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNDczLVxcdGlmICghaGRyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0OTEtICovXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNDkyOnN0YXRpYyBzdHJ1Y3QgdGVhbSAqdGVhbV9ubF90ZWFtX2dldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ5My17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI1MTItXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNTEzOnN0YXRpYyB2b2lkIHRlYW1fbmxfdGVhbV9wdXQoc3RydWN0IHRlYW0gKnRlYW0pXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNTE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUxNy1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI1MTg6dHlwZWRlZiBpbnQgdGVhbV9ubF9zZW5kX2Z1bmNfdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUxOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGVhbSAqdGVhbSwgdTMyIHBvcnRpZCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNTIwLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjUyMTpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF91bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUyMi17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI1MjUtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNTI2OnN0YXRpYyBpbnQgdGVhbV9ubF9maWxsX29uZV9vcHRpb25fZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0ZWFtICp0ZWFtLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUyNy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRlYW1fb3B0aW9uX2luc3QgKm9wdF9pbnN0KVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yNjA3PXN0YXRpYyBpbnQgX19zZW5kX2FuZF9hbGxvY19za2Ioc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjYwOC1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGVhbSAqdGVhbSwgdTMyIHBvcnRpZCxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI2MDk6XFx0XFx0XFx0XFx0dGVhbV9ubF9zZW5kX2Z1bmNfdCAqc2VuZF9mdW5jKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjYxMC17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI2MjMtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNjI0OnN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjYyNTpcXHRcXHRcXHRcXHQgICAgaW50IGZsYWdzLCB0ZWFtX25sX3NlbmRfZnVuY190ICpzZW5kX2Z1bmMsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjI2LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpzZWxfb3B0X2luc3RfbGlzdClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY0NC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI2NDU6XFx0aGRyID0gZ2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgXFx1MDAyNnRlYW1fbmxfZmFtaWx5LCBmbGFncyB8IE5MTV9GX01VTFRJLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY0Ni1cXHRcXHRcXHQgIFRFQU1fQ01EX09QVElPTlNfR0VUKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY2MS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20ob3B0X2luc3QsIHNlbF9vcHRfaW5zdF9saXN0LCB0bXBfbGlzdCkge1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjY2MjpcXHRcXHRlcnIgPSB0ZWFtX25sX2ZpbGxfb25lX29wdGlvbl9nZXQoc2tiLCB0ZWFtLCBvcHRfaW5zdCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjYzLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY5Ny1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI2OTg6aW50IHRlYW1fbmxfb3B0aW9uc19nZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY5OS17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MDYtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNzA3OlxcdHRlYW0gPSB0ZWFtX25sX3RlYW1fZ2V0KGluZm8pO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcwOC1cXHRpZiAoIXRlYW0pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcxNC1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZvcHRfaW5zdC1cXHUwMDNldG1wX2xpc3QsIFxcdTAwMjZzZWxfb3B0X2luc3RfbGlzdCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNzE1OlxcdGVyciA9IHRlYW1fbmxfc2VuZF9vcHRpb25zX2dldCh0ZWFtLCBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVxcdTAwM2VzbmRfc2VxLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjcxNjpcXHRcXHRcXHRcXHQgICAgICAgTkxNX0ZfQUNLLCB0ZWFtX25sX3NlbmRfdW5pY2FzdCxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MTctXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZzZWxfb3B0X2luc3RfbGlzdCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzE4LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjcxOTpcXHR0ZWFtX25sX3RlYW1fcHV0KHRlYW0pO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyNi1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3Mjc6c3RhdGljIGludCB0ZWFtX25sX3NlbmRfZXZlbnRfb3B0aW9uc19nZXQoc3RydWN0IHRlYW0gKnRlYW0sXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzI4LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqc2VsX29wdF9pbnN0X2xpc3QpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyOS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3MzA6aW50IHRlYW1fbmxfb3B0aW9uc19zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjczMS17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MzgtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNzM5OlxcdHRlYW0gPSB0ZWFtX25sX3RlYW1fZ2V0KGluZm8pO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjc0MC1cXHRpZiAoIXRlYW0pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjg3MC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI4NzE6XFx0XFx0ZXJyID0gdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHRlYW0sIFxcdTAwMjZvcHRfaW5zdF9saXN0KTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI4NzItXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjg3Ni10ZWFtX3B1dDpcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI4Nzc6XFx0dGVhbV9ubF90ZWFtX3B1dCh0ZWFtKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI4NzgtcnRubF91bmxvY2s6XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI4ODItXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyODgzOnN0YXRpYyBpbnQgdGVhbV9ubF9maWxsX29uZV9wb3J0X2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjg4NC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5MTItXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyOTEzOnN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX3BvcnRfbGlzdF9nZXQoc3RydWN0IHRlYW0gKnRlYW0sIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyOTE0OlxcdFxcdFxcdFxcdCAgICAgIGludCBmbGFncywgdGVhbV9ubF9zZW5kX2Z1bmNfdCAqc2VuZF9mdW5jLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjkxNS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpvbmVfcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjkzMy1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI5MzQ6XFx0aGRyID0gZ2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgXFx1MDAyNnRlYW1fbmxfZmFtaWx5LCBmbGFncyB8IE5MTV9GX01VTFRJLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjkzNS1cXHRcXHRcXHQgIFRFQU1fQ01EX1BPUlRfTElTVF9HRVQpO1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTU0LVxcdGlmIChvbmVfcG9ydCkge1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjk1NTpcXHRcXHRlcnIgPSB0ZWFtX25sX2ZpbGxfb25lX3BvcnRfZ2V0KHNrYiwgb25lX3BvcnQpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjk1Ni1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTU5LVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShwb3J0LCBcXHUwMDI2dGVhbS1cXHUwMDNlcG9ydF9saXN0LCBsaXN0KSB7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyOTYwOlxcdFxcdFxcdGVyciA9IHRlYW1fbmxfZmlsbF9vbmVfcG9ydF9nZXQoc2tiLCBwb3J0KTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5NjEtXFx0XFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTk2LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjk5NzppbnQgdGVhbV9ubF9wb3J0X2xpc3RfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5OTgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMDQtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDA1OlxcdHRlYW0gPSB0ZWFtX25sX3RlYW1fZ2V0KGluZm8pO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAwNi1cXHRpZiAoIXRlYW0pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAxMC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMTE6XFx0ZXJyID0gdGVhbV9ubF9zZW5kX3BvcnRfbGlzdF9nZXQodGVhbSwgaW5mby1cXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cXHUwMDNlc25kX3NlcSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMTI6XFx0XFx0XFx0XFx0XFx0IE5MTV9GX0FDSywgdGVhbV9ubF9zZW5kX3VuaWNhc3QsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAxMy1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMTQ6XFx0dGVhbV9ubF90ZWFtX3B1dCh0ZWFtKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMTUtXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMjEtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDIyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgdGVhbV9ubF9tY2dycHNbXSA9IHtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMjMtXFx0eyAubmFtZSA9IFRFQU1fR0VOTF9DSEFOR0VfRVZFTlRfTUNfR1JQX05BTUUsIH0sXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMjUtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDI2OnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgdGVhbV9ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAyNy1cXHQubmFtZVxcdFxcdD0gVEVBTV9HRU5MX05BTUUsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDI4LVxcdC52ZXJzaW9uXFx0PSBURUFNX0dFTkxfVkVSU0lPTixcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMjk6XFx0Lm1heGF0dHJcXHQ9IEFSUkFZX1NJWkUodGVhbV9ubF9wb2xpY3kpIC0gMSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMzA6XFx0LnBvbGljeSA9IHRlYW1fbmxfcG9saWN5LFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzMS1cXHQubmV0bnNva1xcdD0gdHJ1ZSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMzItXFx0Lm1vZHVsZVxcdFxcdD0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDMzOlxcdC5zbWFsbF9vcHNcXHQ9IHRlYW1fbmxfb3BzLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzAzNDpcXHQubl9zbWFsbF9vcHNcXHQ9IEFSUkFZX1NJWkUodGVhbV9ubF9vcHMpLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzNS1cXHQucmVzdl9zdGFydF9vcFxcdD0gVEVBTV9DTURfUE9SVF9MSVNUX0dFVCArIDEsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDM2OlxcdC5tY2dycHNcXHRcXHQ9IHRlYW1fbmxfbWNncnBzLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzAzNzpcXHQubl9tY2dycHNcXHQ9IEFSUkFZX1NJWkUodGVhbV9ubF9tY2dycHMpLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzOC19O1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzOS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwNDA6c3RhdGljIGludCB0ZWFtX25sX3NlbmRfbXVsdGljYXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDQxLVxcdFxcdFxcdFxcdCAgc3RydWN0IHRlYW0gKnRlYW0sIHUzMiBwb3J0aWQpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDQyLXtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwNDM6XFx0cmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKFxcdTAwMjZ0ZWFtX25sX2ZhbWlseSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNDQtXFx0XFx0XFx0XFx0ICAgICAgIGRldl9uZXQobmV0ZGV2X2Zyb21fcHJpdih0ZWFtKSksXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNDctXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDQ4OnN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA0OS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKnNlbF9vcHRfaW5zdF9saXN0KVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA1MC17XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDUxOlxcdHJldHVybiB0ZWFtX25sX3NlbmRfb3B0aW9uc19nZXQodGVhbSwgMCwgMCwgMCwgdGVhbV9ubF9zZW5kX211bHRpY2FzdCxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNTItXFx0XFx0XFx0XFx0XFx0c2VsX29wdF9pbnN0X2xpc3QpO1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDU0LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA1NTpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9ldmVudF9wb3J0X2dldChzdHJ1Y3QgdGVhbSAqdGVhbSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNTYtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDU3LXtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwNTg6XFx0cmV0dXJuIHRlYW1fbmxfc2VuZF9wb3J0X2xpc3RfZ2V0KHRlYW0sIDAsIDAsIDAsIHRlYW1fbmxfc2VuZF9tdWx0aWNhc3QsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDU5LVxcdFxcdFxcdFxcdFxcdCAgcG9ydCk7XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNjEtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDYyOnN0YXRpYyBpbnQgX19pbml0IHRlYW1fbmxfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA2My17XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDY0OlxcdHJldHVybiBnZW5sX3JlZ2lzdGVyX2ZhbWlseShcXHUwMDI2dGVhbV9ubF9mYW1pbHkpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA2NS19XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDY2LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA2NzpzdGF0aWMgdm9pZCBfX2V4aXQgdGVhbV9ubF9maW5pKHZvaWQpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDY4LXtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwNjk6XFx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcXHUwMDI2dGVhbV9ubF9mYW1pbHkpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA3MC19XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTMwNzc9c3RhdGljIHZvaWQgX190ZWFtX29wdGlvbnNfY2hhbmdlX2NoZWNrKHN0cnVjdCB0ZWFtICp0ZWFtKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDg2LVxcdH1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwODc6XFx0ZXJyID0gdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHRlYW0sIFxcdTAwMjZzZWxfb3B0X2luc3RfbGlzdCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDg4LVxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FU1JDSClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzA5Nj1zdGF0aWMgdm9pZCBfX3RlYW1fcG9ydF9jaGFuZ2Vfc2VuZChzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LCBib29sIGxpbmt1cClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzExNi1zZW5kX2V2ZW50OlxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzExNzpcXHRlcnIgPSB0ZWFtX25sX3NlbmRfZXZlbnRfcG9ydF9nZXQocG9ydC1cXHUwMDNldGVhbSwgcG9ydCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMTE4LVxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FU1JDSClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzIzOT1zdGF0aWMgaW50IF9faW5pdCB0ZWFtX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMyNDgtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMjQ5OlxcdGVyciA9IHRlYW1fbmxfaW5pdCgpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzI1MC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zMjY0PXN0YXRpYyB2b2lkIF9fZXhpdCB0ZWFtX21vZHVsZV9leGl0KHZvaWQpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMjY1LXtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMyNjY6XFx0dGVhbV9ubF9maW5pKCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMjY3LVxcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFxcdTAwMjZ0ZWFtX2xpbmtfb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MzEuMDA2NjI1NTc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjg0MTI1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVsdmluZyBpbnRvIHRoZSBUZWFtIERldmljZSBTbGF2ZSBBZGRpdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgdGVhbV9hZGRfc2xhdmVgIHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGBSVE1fTkVXTElOS2AgbmV0bGluayBtZXNzYWdlLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCBjb250YWluZWQgZWl0aGVyIGBJRkxBX01BU1RFUmAgb3IgYElGTEFfTElOS2AgYXR0cmlidXRlcy4gQnV0IHdhaXQgYSBzZWNvbmQsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UuIFRoZSBhY3R1YWwgbWVjaGFuaXNtIGZvciBhZGRpbmcgYSBzbGF2ZSB0byBhIHRlYW0gZGV2aWNlIGlzIGxpa2VseSBoYW5kbGVkIHRocm91Z2ggdGhlIGBydG5sX2xpbmtfb3BzYCBzdHJ1Y3R1cmUgb3IgdGhlIGBuZG9fYWRkX3NsYXZlYCBvcGVyYXRpb24uXG5cblJpZ2h0LCB0aGF0IGZlZWxzIG1vcmUgY29ycmVjdC4gVGhlIG1vcmUgZ2VuZXJhbCBhcHByb2FjaCwgd2hlbiBhZGRpbmcgYSBzbGF2ZSB0byBhbnkgbWFzdGVyIGRldmljZSwgaXMgZ2VuZXJhbGx5IG1hbmFnZWQgd2l0aGluIGBkb19zZXRsaW5rYCBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBGcm9tIHRoZXJlLCBpdCB3b3VsZCBjYWxsIGVpdGhlciBgbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGlua2Agb3IgdGhlIGFmb3JlbWVudGlvbmVkIGBuZG9fYWRkX3NsYXZlYC5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZ28gYmFjayBhbmQgcmUtZXhhbWluZSB0aGUgYHRlYW1fYWRkX3NsYXZlYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byBlbnN1cmUgbXkgbWVudGFsIG1vZGVsIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc3MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzozNS4zNzUwNDA5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0NDQzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVhbV9hZGRfc2xhdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTIwOTg9c3RhdGljIGludCB0ZWFtX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjExNi1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIxMTc6c3RhdGljIGludCB0ZWFtX2FkZF9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTE4LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGVhbV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTk5LSNlbmRpZlxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjIwMDpcXHQubmRvX2FkZF9zbGF2ZVxcdFxcdD0gdGVhbV9hZGRfc2xhdmUsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMjAxLVxcdC5uZG9fZGVsX3NsYXZlXFx0XFx0PSB0ZWFtX2RlbF9zbGF2ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MzUuNDIxNDkyNzg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDIxMDU4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNzaW5nIEZ1enppbmcgRWZmb3J0cyBpbiBgdGVhbV9jb3JlLmNgKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgdGVhbV9hZGRfc2xhdmVgIGlzIGFzc2lnbmVkIHRvIGAubmRvX2FkZF9zbGF2ZWAsIGFuZCB0aGF0J3MgZ29vZC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB0YXJnZXQgaXQgZm9yIGZ1enppbmcsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgaXQncyBzdGF0aWMuIEhtbSwgc2FtZSBnb2VzIGZvciBgdGVhbV9wb3J0X2FkZGAuIFRoaXMgaXMgYSBzbGlnaHQgcHJvYmxlbS4gV2Ugd2FudCB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zLCBhcyB0aGV5IGFyZSBub3QgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLiBJcyB0aGVyZSBhbnl0aGluZyAqbm9uKi1zdGF0aWMgaW4gYHRlYW1fY29yZS5jYCB0aGF0IG9mZmVycyBhIGJldHRlciBmdXp6aW5nIHRhcmdldD8gTGV0J3MgdGFrZSBhIGxvb2suIEknbGwgbmVlZCB0byBnZW5lcmF0ZSBhIGxpc3Qgb2YgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGB0ZWFtX2NvcmUuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbW9yZSB2aWFibGUgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQzNywiT3V0cHV0VG9rZW5zIjo2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzozOS4yNjM2MDI2NzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODAxODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NjY9c3RhdGljIGludCB0ZWFtX3BvcnRfc2V0X3RlYW1fZGV2X2FkZHIoc3RydWN0IHRlYW0gKnRlYW0sXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTcxLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6NzI6aW50IHRlYW1fbW9kZW9wX3BvcnRfZW50ZXIoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy03My17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTc2PUVYUE9SVF9TWU1CT0wodGVhbV9tb2Rlb3BfcG9ydF9lbnRlcik7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy03Ny1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjc4OnZvaWQgdGVhbV9tb2Rlb3BfcG9ydF9jaGFuZ2VfZGV2X2FkZHIoc3RydWN0IHRlYW0gKnRlYW0sXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy03OS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zMzI9c3RhdGljIHZvaWQgX190ZWFtX29wdGlvbnNfY2hhbmdlX2NoZWNrKHN0cnVjdCB0ZWFtICp0ZWFtKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMzMy1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMzNDppbnQgdGVhbV9vcHRpb25zX3JlZ2lzdGVyKHN0cnVjdCB0ZWFtICp0ZWFtLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzM1LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHRlYW1fb3B0aW9uICpvcHRpb24sXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTM0Nj1FWFBPUlRfU1lNQk9MKHRlYW1fb3B0aW9uc19yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zNDctXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozNDg6dm9pZCB0ZWFtX29wdGlvbnNfdW5yZWdpc3RlcihzdHJ1Y3QgdGVhbSAqdGVhbSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM0OS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0ZWFtX29wdGlvbiAqb3B0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zNjk9c3RhdGljIGludCB0ZWFtX29wdGlvbl9zZXQoc3RydWN0IHRlYW0gKnRlYW0sXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM3Ny1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjM3ODp2b2lkIHRlYW1fb3B0aW9uX2luc3Rfc2V0X2NoYW5nZShzdHJ1Y3QgdGVhbV9vcHRpb25faW5zdF9pbmZvICpvcHRfaW5zdF9pbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzc5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9Mzg1PUVYUE9SVF9TWU1CT0wodGVhbV9vcHRpb25faW5zdF9zZXRfY2hhbmdlKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM4Ni1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjM4Nzp2b2lkIHRlYW1fb3B0aW9uc19jaGFuZ2VfY2hlY2soc3RydWN0IHRlYW0gKnRlYW0pXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zODgte1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zOTE9RVhQT1JUX1NZTUJPTCh0ZWFtX29wdGlvbnNfY2hhbmdlX2NoZWNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzk3LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mzk4OnN0YXRpYyBMSVNUX0hFQUQobW9kZV9saXN0KTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjM5OTpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1vZGVfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQwMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NDE3PXN0YXRpYyBib29sIGlzX2dvb2RfbW9kZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQyNi1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjQyNzppbnQgdGVhbV9tb2RlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCB0ZWFtX21vZGUgKm1vZGUpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy00Mjgte1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz00NTI9RVhQT1JUX1NZTUJPTCh0ZWFtX21vZGVfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNDUzLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6NDU0OnZvaWQgdGVhbV9tb2RlX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IHRlYW1fbW9kZSAqbW9kZSlcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQ1NS17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTI0NTk9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSB0ZWFtX25sX2ZhbWlseTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NjAtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNDYxOmludCB0ZWFtX25sX25vb3BfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTI2MjQ9c3RhdGljIGludCB0ZWFtX25sX3NlbmRfb3B0aW9uc19nZXQoc3RydWN0IHRlYW0gKnRlYW0sIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI2OTctXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNjk4OmludCB0ZWFtX25sX29wdGlvbnNfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI2OTkte1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yNzI3PXN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLFxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzI5LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjczMDppbnQgdGVhbV9ubF9vcHRpb25zX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzMxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjkxMz1zdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9wb3J0X2xpc3RfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTk2LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjk5NzppbnQgdGVhbV9ubF9wb3J0X2xpc3RfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5OTgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjM5LjMwOTQxNDczMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODU3MjUzNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgdGVhbV9hZGRfc2xhdmVgIFN5bWJvbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBmb2N1cyBzeW1ib2wgZm9yIGFuYWx5emluZyB0aGUgc2xhdmUgYWRkaXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIG5ldHdvcmsgdGVhbWluZyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGBuZG9fYWRkX3NsYXZlYCwgc2luY2UgdGhhdCdzIHRoZSBnZW5lcmljIG5ldGRldiBvcGVyYXRpb24gdGhhdCBhcHBlYXJzIHRvIGJlIHRoZSBlbnRyeSBwb2ludC4gSSBxdWlja2x5IHRyYWNlZCB0aGUgY2FsbCBzdGFjazogYG5kb19hZGRfc2xhdmVgIGlzIGNhbGxlZCBmcm9tIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgdGhyb3VnaCBgZG9fc2V0bGlua2AsIHRoZW4gYG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2xpbmtgLCBmdXJ0aGVyIGRvd24gdG8gYF9fbmV0ZGV2X3VwcGVyX2Rldl9saW5rYCBhbmQgZmluYWxseSBjYWxsaW5nIHRoZSBzcGVjaWZpYyBkZXZpY2UncyBpbXBsZW1lbnRhdGlvbiB2aWEgYG9wcy1cdTAwM2VuZG9fYWRkX3NsYXZlYC4gU28sIEkgdGhvdWdodCBtYXliZSBJIGNvdWxkIGZvY3VzIG9uIGB0ZWFtX2FkZF9zbGF2ZWAgaWYgaXQncyBmZWFzaWJsZSB0byBjb25jZW50cmF0ZSBvbiBzdGF0aWMgZnVuY3Rpb25zLlxuXG5CdXQgd2FpdCBhIG1vbWVudC4gVGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBjbGVhcjogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBhIGNvbXBpbGVyJ3MgcGxheWdyb3VuZCBhbmQgZG9uJ3QgZ2V0IGRpc3RpbmN0IHN5bWJvbHMuIEhvd2V2ZXIsIEkgYmVsaWV2ZSBgdGVhbV9hZGRfc2xhdmVgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYC5uZG9fYWRkX3NsYXZlYCksIHNvIGl0IGNhbid0IGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgKmRvZXMqIGhhdmUgYSBjbGVhciBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgdmFsaWQgZm9jdXMuXG5cbkkgYWxzbyBjb25zaWRlcmVkIGB0ZWFtX3BvcnRfYWRkYCBhcyBhIHBvdGVudGlhbCBvcHRpb24uIEl0IGlzIHN0YXRpYywgYW5kIG15IGludHVpdGlvbiBzdWdnZXN0cyB0aGF0IGl0IG1pZ2h0IGJlIGlubGluZWQgZ2l2ZW4gaXRzIHRpZ2h0IGNvdXBsaW5nIHdpdGggYHRlYW1fYWRkX3NsYXZlYC4gVGh1cywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGVhbV9wb3J0X2FkZGAgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIHRvIGNvbmZpcm0gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6NDUuMTY2NjcwNjY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjczMjkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZWFtX3BvcnRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz00MD1zdGF0aWMgc3RydWN0IHRlYW1fcG9ydCAqdGVhbV9wb3J0X2dldF9ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQ4LSAqIFNpbmNlIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBkZXZpY2UgYWRkcmVzcyBmb3Igb3BlbiBwb3J0IGRldmljZSBpcyB0ZXN0ZWQgaW5cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjQ5OiAqIHRlYW1fcG9ydF9hZGQsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRob3V0IGNvbnRyb2wgb2YgcmV0dXJuIHZhbHVlXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy01MC0gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTIwOT1zdGF0aWMgaW50IHRlYW1fZGV2X3R5cGVfY2hlY2tfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTEyMTEtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoxMjEyOnN0YXRpYyBpbnQgdGVhbV9wb3J0X2FkZChzdHJ1Y3QgdGVhbSAqdGVhbSwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMy1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMTE3PXN0YXRpYyBpbnQgdGVhbV9hZGRfc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTIzLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjEyNDpcXHRyZXR1cm4gdGVhbV9wb3J0X2FkZCh0ZWFtLCBwb3J0X2RldiwgZXh0YWNrKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0Mzo0NS4yMTM0MDg2MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MDgyMTY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgYHRlYW1fcG9ydF9hZGRgIEZ1bmN0aW9uIGFuZCBpdHMgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBgdGVhbV9wb3J0X2FkZGAgaXMgb25seSBldmVyIGNhbGxlZCBieSBgdGVhbV9hZGRfc2xhdmVgLiAgVGhhdCBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbmxpbmVkLCBvciBhdCBsZWFzdCBoaWdobHkgaW50ZWdyYXRlZCB3aXRoaW4gdGhhdCBmdW5jdGlvbidzIHNjb3BlLiBTbywgYHRlYW1fYWRkX3NsYXZlYCBpcyBkZWZpbml0ZWx5IHRoZSBtb3JlIGZydWl0ZnVsIHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBuZWVkZWQ/XG5cbkhtbSwgYE5FVF9URUFNYCBpcyB0aGUgYmlnIG9uZSwgb2YgY291cnNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGF0IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBuZWVkcyB0byBiZSBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjQ4Ljc4NDIzMjQ2NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MjIwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9URUFNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90ZWFtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9URUFNXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkV0aGVybmV0IHRlYW0gZHJpdmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc9MTY9aWYgTkVUX1RFQU1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMTctXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjE4OmNvbmZpZyBORVRfVEVBTV9NT0RFX0JST0FEQ0FTVFxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjYXN0IG1vZGUgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6Mjk6Y29uZmlnIE5FVF9URUFNX01PREVfUk9VTkRST0JJTlxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiUm91bmQtcm9iaW4gbW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzo0MTpjb25maWcgTkVUX1RFQU1fTU9ERV9SQU5ET01cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIlJhbmRvbSBtb2RlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNTItXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjUzOmNvbmZpZyBORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUFxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiQWN0aXZlLWJhY2t1cCBtb2RlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNjUtXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjY2OmNvbmZpZyBORVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTY3LVxcdHRyaXN0YXRlIFxcXCJMb2FkLWJhbGFuY2UgbW9kZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0Mzo0OC44MzA4NTkwMjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NjAzODc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBORVRfVEVBTSBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX1RFQU1gLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlIHRoZSAqYWN0dWFsKiBjb25uZWN0aW9ucy4gV2hhdCBzeXN0ZW1zLCBzZXJ2aWNlcywgb3IgZXZlbiBzcGVjaWZpYyBjb2RlIG1vZHVsZXMgcmVseSBvbiBgTkVUX1RFQU1gPyBJJ20gbm90IGludGVyZXN0ZWQgaW4gc3VyZmFjZS1sZXZlbCBtZW50aW9uczsgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGNyaXRpY2FsIHBhdGhzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBkaXJlY3QgY2FsbHMsIGluZGlyZWN0IGRlcGVuZGVuY2llcyB0aHJvdWdoIHNoYXJlZCBsaWJyYXJpZXMsIG9yIGV2ZW4gc29mdCBkZXBlbmRlbmNpZXMgbWVkaWF0ZWQgYnkgbWVzc2FnZSBxdWV1ZXMgb3IgZGF0YSBzdG9yZXM/IFRoZSBnb2FsIGlzIGEgY2xlYXIgZGVwZW5kZW5jeSBncmFwaCwgcHJlZmVyYWJseSB3aXRoIHNvbWUgaW5kaWNhdGlvbiBvZiB0aGUgaW1wYWN0IGxldmVsIGZvciBhbnkgcGFydGljdWxhciBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gYXNzZXNzIGhvdyBmcmFnaWxlIHRoZSBzeXN0ZW0gaXMsIHdoYXQgcmVmYWN0b3Jpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgdGhlIHBvdGVudGlhbCBibGFzdCByYWRpdXMgaWYgd2UgbmVlZCB0byBtYWtlIGNoYW5nZXMgdG8gYE5FVF9URUFNYCBkb3duIHRoZSBsaW5lLiBJIGtub3cgdGhlIGRldmlsIGlzIG9mdGVuIGluIHRoZSBkZXRhaWxzLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgYXJlYXMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk1NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjUyLjAxNjkwMDkxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBORVRfVEVBTVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkV0aGVybmV0IHRlYW0gZHJpdmVyIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdGVhbXMgdG9nZXRoZXJcXG4gICA2OlxcdFxcdCAgbXVsdGlwbGUgZXRoZXJuZXQgZGV2aWNlcy5cXG4gICA3OlxcdFxcbiAgIDg6XFx0XFx0ICBUZWFtIGRldmljZXMgY2FuIGJlIGFkZGVkIHVzaW5nIHRoZSBcXFwiaXBcXFwiIGNvbW1hbmQgZnJvbSB0aGVcXG4gICA5OlxcdFxcdCAgaXByb3V0ZTIgcGFja2FnZTpcXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBcXFwiaXAgbGluayBhZGQgbGluayBbIGFkZHJlc3MgTUFDIF0gWyBOQU1FIF0gdHlwZSB0ZWFtXFxcIlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDE0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdGVhbS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0aWYgTkVUX1RFQU1cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE5FVF9URUFNX01PREVfQlJPQURDQVNUXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJvYWRjYXN0IG1vZGUgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gTkVUX1RFQU1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6NTIuMDE2OTg3NDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNzA4Mjg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBORVRfVEVBTWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYE5FVF9URUFNYC4gSW5pdGlhbGx5LCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jaWVzIGxpc3RlZCwgc28gYE5FVF9URUFNYCBpdHNlbGYgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLiBIb3dldmVyLCBJJ3ZlIGdvdCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGUgcGF0Y2ggaW5jbHVkZXMgY2hlY2tzIGZvciBgQVJQSFJEX0NBTmAgYW5kIGBBUlBIUkRfSUVFRTgwMjE1NGAuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gcG9wcyB1cDogZG8gd2UgKm5lZWQqIENBTiBhbmQgSUVFRTgwMjE1NCBpbnRlcmZhY2VzIHByZXNlbnQgdG8gZnVsbHkgdGVzdCB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIG5ldyBlcnJvciBwYXRoIGl0IGludHJvZHVjZXM/IFllcywgdG8gdHJ1bHkgdmFsaWRhdGUgdGhlIGNvZGUgY2hhbmdlcyBhbmQgZXhlcmNpc2UgdGhhdCBuZXcgZXJyb3IgaGFuZGxpbmcsIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gaGF2ZSBib3RoIENBTiBhbmQgSUVFRTgwMjE1NCBkZXZpY2VzIGF2YWlsYWJsZS4gTGV0J3MgbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3MgYXJlIHNldCBjb3JyZWN0bHkuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMgZm9yIENBTiBhbmQgSUVFRTgwMjE1NCB0byBlbnN1cmUgdGhleSBhcmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0Mzo1NS42NTQwNzI5NDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDI2MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vS2NvbmZpZy01LVxcbm5ldC9jYW4vS2NvbmZpZzo2Om1lbnVjb25maWcgQ0FOXFxubmV0L2Nhbi9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkNBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvY2FuL0tjb25maWc9MjI9aWYgQ0FOXFxubmV0L2Nhbi9LY29uZmlnLTIzLVxcbm5ldC9jYW4vS2NvbmZpZzoyNDpjb25maWcgQ0FOX1JBV1xcbm5ldC9jYW4vS2NvbmZpZy0yNS1cXHR0cmlzdGF0ZSBcXFwiUmF3IENBTiBQcm90b2NvbCAocmF3IGFjY2VzcyB3aXRoIENBTi1JRCBmaWx0ZXJpbmcpXFxcIlxcbi0tXFxubmV0L2Nhbi9LY29uZmlnLTMzLVxcbm5ldC9jYW4vS2NvbmZpZzozNDpjb25maWcgQ0FOX0JDTVxcbm5ldC9jYW4vS2NvbmZpZy0zNS1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjYXN0IE1hbmFnZXIgQ0FOIFByb3RvY29sICh3aXRoIGNvbnRlbnQgZmlsdGVyaW5nKVxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZy00NS1cXG5uZXQvY2FuL0tjb25maWc6NDY6Y29uZmlnIENBTl9HV1xcbm5ldC9jYW4vS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiQ0FOIEdhdGV3YXkvUm91dGVyICh3aXRoIG5ldGxpbmsgY29uZmlndXJhdGlvbilcXFwiXFxuLS1cXG5uZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxubmV0L2Nhbi9LY29uZmlnLTU4LVxcbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXFxubmV0L2Nhbi9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0Mzo1NS42OTkxMDQxMTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NTY4NjY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqQ29uc2lkZXJpbmcgQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzKipcblxuQWxyaWdodCwgc28gSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IENBTiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDQU5gIGlzIHRoZSBrZXkgaWRlbnRpZmllciBmb3IgdGhlIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIHRoYXQgYnJpbmdzIG1lIHRvIHRoZSBuZXh0IHByb3RvY29sIG9yIHN0YW5kYXJkIEknbSB3b3JraW5nIHdpdGggb3IgdGhpbmtpbmcgYWJvdXQ6IElFRUUgODAyLjE1LjQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciB0aGF0IHN0YW5kYXJkIGFzIHdlbGwuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gc3ludGF4IG9yIG1ldGhvZCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMjksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0Mzo1OS4wNDQ3OTM1OTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTk3MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJRUVFODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZWVlODAyMTU0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MjptZW51Y29uZmlnIElFRUU4MDIxNTRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIklFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc9MTQ9aWYgSUVFRTgwMjE1NFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE3LVxcdGJvb2wgXFxcIklFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyMTpjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjU5LjA5Mjk5NjQ2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjEzNDA5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSBsb29raW5nIGF0IHNldHRpbmcgdXAgdGhpcyBuZXcgZGV2aWNlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgb2YgY291cnNlLCB0aGUgYElFRUU4MDIxNTRgIGNvbmZpZ3VyYXRpb247IHRoYXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBnaXZlbiB0aGUgYXJjaGl0ZWN0dXJlLiBCdXQgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgYW5vdGhlciBwaWVjZSBvZiB0aGlzIHB1enpsZS4gVG8gc2ltdWxhdGUgb3IgY3JlYXRlIHRoZSBDQU4gZGV2aWNlLCBJJ2xsIG5lZWQgdG8gdXNlIGBDQU5fVkNBTmAuIFRoYXQgd2lsbCBiZSBpbXBvcnRhbnQgZm9yIHRlc3RpbmcuIE9rYXksIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MDIuMDU0MzQxMDExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI0MDQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX1ZDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvY2FuL0tjb25maWc9MjM9aWYgQ0FOX0RFVlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI0LVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjI1OmNvbmZpZyBDQU5fVkNBTlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIExvY2FsIENBTiBJbnRlcmZhY2UgKHZjYW4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0NDowMi4wOTg1ODY0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDEyNDUyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQ29uc2lkZXJpbmcgSW1wbGVtZW50YXRpb24gU3RyYXRlZ2llcyBmb3IgSUVFRTgwMi4xNS40KipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgSUVFRTgwMi4xNS40IGltcGxlbWVudGF0aW9uLCBhbmQgSSdtIHRoaW5raW5nIGFib3V0IHRoZSB0ZXN0aW5nIGFuZCBzaW11bGF0aW9uIGFzcGVjdHMuIFdlJ2xsIGxpa2VseSBuZWVkIGEgdmlydHVhbCByZXByZXNlbnRhdGlvbiwgYSBkZXZpY2UgdGhhdCBjYW4gc3RhbmQgaW4gZm9yIGEgcGh5c2ljYWwgb25lLCBidXQgYWxsb3cgdXMgdG8gc2ltdWxhdGUgYmVoYXZpb3IuIFNvbWV0aGluZyBsaWtlIGEgYE1BQzgwMjE1NF9IV1NJTWAg4oCTIHBlcmhhcHMgaGFyZHdhcmUgc2ltdWxhdGlvbiDigJMgb3IgYSBgSUVFRTgwMjE1NF9GQUtFTEJgIOKAkyBtYXliZSBhICdmYWtlIGxvd2VyIGJvdW5kJyB0byBtb2RlbCBzb21lIGNvbnN0cmFpbnRzIOKAkyB3b3VsZCBiZSBpZGVhbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gZW5zdXJlIGNvbXByZWhlbnNpdmUgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQgd2l0aG91dCByZXF1aXJpbmcgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlIGF0IGV2ZXJ5IHN0ZXAuIFRoaXMgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uOyBpdCdzIGEga2V5IHBpZWNlIGluIGVuc3VyaW5nIGEgcm9idXN0IGFuZCBlZmZpY2llbnQgZGVzaWduIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTQ2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MDUuNDk5ODM1MTYzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMzNTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxNTQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTU0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTU0L0tjb25maWc6Mjpjb25maWcgTUFDODAyMTU0XFxubmV0L21hYzgwMjE1NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTUuNCBTb2Z0IE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjE1NClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjA1LjU0NDE3NDc0MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkzOTUyMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBJRUVFIDgwMi4xNS40IEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYW4gODAyLjE1LjQgbmV0d29yayBkcml2ZXIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJ20gcmVhc29uYWJseSBzdXJlIEknbGwgZmluZCB3aGF0IEkgbmVlZCBpbiBlaXRoZXIgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2Agb3IsIHBlcmhhcHMgaWYgaXQncyB1c2luZyB0aGUgbWFjODAyMTU0IHN0YWNrLCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTU0L0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCB0aGUgZ28tdG8gbG9jYXRpb25zIGZvciB0aGVzZSBzb3J0cyBvZiBsb3ctbGV2ZWwgbmV0d29ya2luZyBvcHRpb25zLiBJdCdzIGEgYml0IG9mIGEgY29pbiBmbGlwIGluaXRpYWxseSwgc28gSSdsbCBjaGVjayBib3RoIGFuZCBzZWUgd2hpY2ggb25lIGhhcyB0aGUgbW9yZSByZWxldmFudCBjb25maWcgc3ltYm9scyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgc3BlY2lmaWMgc2NlbmFyaW8gSSdtIGRlYWxpbmcgd2l0aC4gUHJvYmFibHkgdGhlIGZpcnN0LCBidXQgSSBzaG91bGQgY2hlY2sgdGhlIGxhdHRlciB0byBiZSBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0NDowOC43MzgxMjk4MjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzAzODcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgLio4MDIxNTRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NF9EUklWRVJTXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgZHJpdmVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MTQ6Y29uZmlnIElFRUU4MDIxNTRfRkFLRUxCXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIzLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyNDpjb25maWcgSUVFRTgwMjE1NF9BVDg2UkYyMzBcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMjUtXFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMzUtXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjM2OmNvbmZpZyBJRUVFODAyMTU0X01SRjI0SjQwXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTM3LVxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgTVJGMjRKNDAgdHJhbnNjZWl2ZXIgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTQ3LVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo0ODpjb25maWcgSUVFRTgwMjE1NF9DQzI1MjBcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNDktXFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNTgtXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjU5OmNvbmZpZyBJRUVFODAyMTU0X0FUVVNCXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJBVFVTQiB0cmFuc2NlaXZlciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNjgtXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjY5OmNvbmZpZyBJRUVFODAyMTU0X0FERjcyNDJcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIkFERjcyNDIgdHJhbnNjZWl2ZXIgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTc5LVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo4MDpjb25maWcgSUVFRTgwMjE1NF9DQTgyMTBcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctODEtXFx0dHJpc3RhdGUgXFxcIkNhc2NvZGEgQ0E4MjEwIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy05MS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6OTI6Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlNcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiQ0E4MjEwIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEwMS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MTAyOmNvbmZpZyBJRUVFODAyMTU0X01DUjIwQVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMDMtXFx0dHJpc3RhdGUgXFxcIk1DUjIwQSB0cmFuc2NlaXZlciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTEzLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxMTQ6Y29uZmlnIElFRUU4MDIxNTRfSFdTSU1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTE1LVxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0NDowOC45MzUxNzc3NDRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNDI2NDk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkV2YWx1YXRpbmcgU2ltdWxhdGlvbiBBcHByb2FjaGVzIGZvciBJRUVFIDgwMi4xNS40KipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBkaWZmZXJlbnQgc2ltdWxhdGlvbiBvcHRpb25zIGZvciBJRUVFIDgwMi4xNS40LiBgSUVFRTgwMjE1NF9IV1NJTWAgYW5kIGBJRUVFODAyMTU0X0ZBS0VMQmAgc2VlbSBsaWtlIHByb21pc2luZyBzdGFydGluZyBwb2ludHMuIEkndmUgaGVhcmQgZ29vZCB0aGluZ3MgYWJvdXQgdGhlbSwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElFRUU4MDIxNTRfSFdTSU1gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgbGlicmFyaWVzIGl0IHJlbGllcyBvbi4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBvdmVyYWxsIGNvbXBsZXhpdHksIHBvcnRhYmlsaXR5LCBhbmQgcG90ZW50aWFsIGludGVncmF0aW9uIGNoYWxsZW5nZXMuIEl0IGlzIHZpdGFsIHRvIG1lLCBhcyBhbiBleHBlcnQsIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGVhY2ggYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Njc4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MTIuMjQ5NDQ1MDk5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFxuIDExMTpcXHRcXHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cXG4gMTEyOlxcdFxcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnbWNyMjBhJy5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0Y29uZmlnIElFRUU4MDIxNTRfSFdTSU1cXG4gMTE1OlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcbiAxMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjE1NFxcXCJcXG4gMTE3OlxcdFxcdGhlbHBcXG4gMTE4OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxcbiAxMTk6XFx0XFx0ICBJRUVFIDgwMi4xNS40IG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjE1NCkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcXG4gMTIwOlxcdFxcdCAgbmVlZGVkIGZvciBub3JtYWwgd3BhbiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy5cXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28gc2F5IE0gaGVyZS5cXG4gMTIzOlxcdFxcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnbWFjODAyMTU0X2h3c2ltJy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MTIuMjQ5NTA4MDg5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTc0NzkyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gbG9va2luZyBhdDpcblxuKipDb21wb25lbnQgQ29uZmlndXJhdGlvbiBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIGRvd24gdGhlc2UgY29uZmlndXJhdGlvbnMuIEZpcnN0LCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBJRUVFIDgwMi4xNS40LCBJIGFic29sdXRlbHkgbmVlZCBgSUVFRTgwMjE1NGAuIFRoZW4sIG9mIGNvdXJzZSwgdGhlIE1BQyBsYXllciBzdXBwb3J0IChgTUFDODAyMTU0YCkgaGFzIHRvIGJlIGluY2x1ZGVkLiBBbmQgbmF0dXJhbGx5LCBJJ2xsIG5lZWQgdGhlIGRyaXZlcnMgYXNzb2NpYXRlZCB3aXRoIElFRUUgODAyLjE1LjQgKGBJRUVFODAyMTU0X0RSSVZFUlNgKSwgYWxvbmcgd2l0aCB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBlbGVtZW50cyAoYElFRUU4MDIxNTRfSFdTSU1gKSBzbyB0aGF0IEkgY2FuIGVuc3VyZSBldmVyeXRoaW5nIGlzIHdvcmtpbmcgY29ycmVjdGx5IHdpdGhvdXQgbmVlZGluZyBhbiBhY3R1YWwgODAyLjE1LjQgcmFkaW8uXG5cbk5vdywgc2hpZnRpbmcgZ2VhcnMgdG8gQ0FOLCB0aGUgY29yZSBgQ0FOYCBmdW5jdGlvbmFsaXR5IGlzIG9idmlvdXNseSByZXF1aXJlZC4gSSdsbCBuZWVkIGBDQU5fVkNBTmAgYXMgd2VsbC4gSGFuZyBvbi4uLiBpc24ndCBgQ0FOX1ZDQU5gIGRlcGVuZGVudCBvbiBzb21ldGhpbmc/IExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBDQU5fREVWYCBvcHRpb24uIEp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjE2LjcwNjk5MDYzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc1Mzk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX0RFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0yLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjM6bWVudWNvbmZpZyBDQU5fREVWXFxuZHJpdmVycy9uZXQvY2FuL0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiQ0FOIERldmljZSBEcml2ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0NDoxNi43NTY3NDg5MTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMTc1NzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB3ZSBuZWVkIGBDQU5fREVWYC4gVGltZSB0byBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3JpdGljYWwuIExldCdzIHNlZS4uLiB3ZSd2ZSBnb3QgYE5FVF9URUFNYCwgYENBTmAsIGBDQU5fREVWYCwgYENBTl9WQ0FOYCwgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYElFRUU4MDIxNTRfRFJJVkVSU2AsIGFuZCBgSUVFRTgwMjE1NF9IV1NJTWAuIFRoYXQgY292ZXJzIHRoZSBsaWtlbHkgc3VzcGVjdHMuXG5cbldhaXQgYSBzZWNvbmQsIEkgc2VlIGB0ZWFtX2FkZF9zbGF2ZWAgaXMgYXNzaWduZWQgdG8gYC5uZG9fYWRkX3NsYXZlYC4gT2theSwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRoYXQgZGVzZXJ2ZSBvdXIgYXR0ZW50aW9uPyBJJ20gdGhpbmtpbmcgYWJvdXQgYHRlYW1fcG9ydF9hZGRgIHNpbmNlIGl0J3Mgc3RhdGljIGFuZCBtaWdodCBiZSBpbmxpbmVkLCBzbyBpdCBtYXkgbmVlZCBkaWZmZXJlbnQgYXR0ZW50aW9uLiBQZXJoYXBzIGl0J3Mgd29ydGggY2hlY2tpbmcgaWYgYHRlYW1fcG9ydF9hZGRgICppcyogaW5saW5lZD8gSSBjYW4gbG9vayBhdCBpdHMgc2l6ZSwgdGhvdWdoIEkgdGhpbmsgSSdsbCBmb2N1cyBvbiBgdGVhbV9hZGRfc2xhdmVgIGZvciBub3cgLSBpdCdzIGEgY2xlYW5lciBzeW1ib2wgdG8gaW52ZXN0aWdhdGUuIEVpdGhlciB0aGF0LCBvciBJJ2xsIGp1c3QgY2hlY2sgaWYgYHRlYW1fcG9ydF9hZGRgIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IHdvdWxkbid0IGJlIGlubGluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjQyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjIxLjI4ODUwODc5OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEyOlxcdHN0YXRpYyBpbnQgdGVhbV9wb3J0X2FkZChzdHJ1Y3QgdGVhbSAqdGVhbSwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxcbjEyMTM6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMjE0OlxcdHtcXG4xMjE1OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHRlYW0pO1xcbjEyMTY6XFx0XFx0c3RydWN0IHRlYW1fcG9ydCAqcG9ydDtcXG4xMjE3OlxcdFxcdGNoYXIgKnBvcnRuYW1lID0gcG9ydF9kZXYtXFx1MDAzZW5hbWU7XFxuMTIxODpcXHRcXHRpbnQgZXJyO1xcbjEyMTk6XFx0XFxuMTIyMDpcXHRcXHRpZiAocG9ydF9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XFxuMTIyMTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJMb29wYmFjayBkZXZpY2UgY2FuJ3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcXFwiKTtcXG4xMjIyOlxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiRGV2aWNlICVzIGlzIGxvb3BiYWNrIGRldmljZS4gTG9vcGJhY2sgZGV2aWNlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcXFxuXFxcIixcXG4xMjIzOlxcdFxcdFxcdFxcdCAgIHBvcnRuYW1lKTtcXG4xMjI0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyMjU6XFx0XFx0fVxcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRcXHRpZiAocG9ydF9kZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxcbjEyMjg6XFx0XFx0XFx0ICAgIHBvcnRfZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0IHx8XFxuMTIyOTpcXHRcXHRcXHQgICAgcG9ydF9kZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xcbjEyMzA6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjEyMzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcXCIpO1xcbjEyMzI6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJEZXZpY2UgJXMgaXMgQ0FOIG9yIElFRUUgODAyLjE1LjQuIFRoZXNlIGRldmljZSB0eXBlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcXFxuXFxcIixcXG4xMjMzOlxcdFxcdFxcdFxcdFxcdCAgIHBvcnRuYW1lKTtcXG4xMjM0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyMzU6XFx0XFx0XFx0fVxcbjEyMzY6XFx0XFx0fVxcbjEyMzc6XFx0XFxuMTIzODpcXHRcXHRpZiAobmV0aWZfaXNfdGVhbV9wb3J0KHBvcnRfZGV2KSkge1xcbjEyMzk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRGV2aWNlIGlzIGFscmVhZHkgYSBwb3J0IG9mIGEgdGVhbSBkZXZpY2VcXFwiKTtcXG4xMjQwOlxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiRGV2aWNlICVzIGlzIGFscmVhZHkgYSBwb3J0IFxcXCJcXG4xMjQxOlxcdFxcdFxcdFxcdFxcdFxcXCJvZiBhIHRlYW0gZGV2aWNlXFxcXG5cXFwiLCBwb3J0bmFtZSk7XFxuMTI0MjpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjEyNDM6XFx0XFx0fVxcbjEyNDQ6XFx0XFxuMTI0NTpcXHRcXHRpZiAoZGV2ID09IHBvcnRfZGV2KSB7XFxuMTI0NjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDYW5ub3QgZW5zbGF2ZSB0ZWFtIGRldmljZSB0byBpdHNlbGZcXFwiKTtcXG4xMjQ3OlxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiQ2Fubm90IGVuc2xhdmUgdGVhbSBkZXZpY2UgdG8gaXRzZWxmXFxcXG5cXFwiKTtcXG4xMjQ4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNDk6XFx0XFx0fVxcbjEyNTA6XFx0XFxuMTI1MTpcXHRcXHRpZiAobmV0ZGV2X2hhc191cHBlcl9kZXYoZGV2LCBwb3J0X2RldikpIHtcXG4xMjUyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkRldmljZSBpcyBhbHJlYWR5IGFuIHVwcGVyIGRldmljZSBvZiB0aGUgdGVhbSBpbnRlcmZhY2VcXFwiKTtcXG4xMjUzOlxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiRGV2aWNlICVzIGlzIGFscmVhZHkgYW4gdXBwZXIgZGV2aWNlIG9mIHRoZSB0ZWFtIGludGVyZmFjZVxcXFxuXFxcIixcXG4xMjU0OlxcdFxcdFxcdFxcdCAgIHBvcnRuYW1lKTtcXG4xMjU1OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTI1NjpcXHRcXHR9XFxuMTI1NzpcXHRcXG4xMjU4OlxcdFxcdGlmIChuZXRkZXZfaGFzX3VwcGVyX2Rldihwb3J0X2RldiwgZGV2KSkge1xcbjEyNTk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRGV2aWNlIGlzIGFscmVhZHkgYSBsb3dlciBkZXZpY2Ugb2YgdGhlIHRlYW0gaW50ZXJmYWNlXFxcIik7XFxuMTI2MDpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIkRldmljZSAlcyBpcyBhbHJlYWR5IGEgbG93ZXIgZGV2aWNlIG9mIHRoZSB0ZWFtIGludGVyZmFjZVxcXFxuXFxcIixcXG4xMjYxOlxcdFxcdFxcdFxcdCAgIHBvcnRuYW1lKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MjEuMjg4NzQyMDk5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTg0MzU3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbmV0d29ya2luZyBjb2RlOlxuXG4qKkFuYWx5emluZyBUZWFtIEludGVyZmFjZSBTbGF2ZSBBZGRpdGlvbioqXG5cblJpZ2h0LCBzbyBgdGVhbV9wb3J0X2FkZGAgaXMgYSBoZWZ0eSBmdW5jdGlvbiwgbGlrZWx5IG5vdCBpbmxpbmVkLiBJdCdzIHByb2JhYmx5IGRvaW5nIGEgYnVuY2ggb2Ygc2V0dXAsIGNvbmZpZ3VyYXRpb24sIGFuZCBkZXZpY2UtbGV2ZWwgbWFuaXB1bGF0aW9ucy4gVGhlIG1vcmUgaW50ZXJlc3RpbmcgZW50cnkgcG9pbnQsIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgZ3JvdW5kIGxldmVsLCBpcyBkZWZpbml0ZWx5IGB0ZWFtX2FkZF9zbGF2ZWAuIExldCdzIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzIGFuZCBkaXZlIHJpZ2h0IGludG8gYHRlYW1fYWRkX3NsYXZlYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGFkZGluZyBhIHNsYXZlIGludGVyZmFjZSB0byB0aGUgdGVhbSBwcm9iYWJseSByZXNpZGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA4OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MjQuNDg3MTgxNDc2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMTcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMTc6XFx0c3RhdGljIGludCB0ZWFtX2FkZF9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYsXFxuMjExODpcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4yMTE5OlxcdHtcXG4yMTIwOlxcdFxcdHN0cnVjdCB0ZWFtICp0ZWFtID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4yMTIxOlxcdFxcbjIxMjI6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4yMTIzOlxcdFxcbjIxMjQ6XFx0XFx0cmV0dXJuIHRlYW1fcG9ydF9hZGQodGVhbSwgcG9ydF9kZXYsIGV4dGFjayk7XFxuMjEyNTpcXHR9XFxuMjEyNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MjQuNDg3MzI5MzU2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjI1NzA4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGVhbSBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGB0ZWFtX2FkZF9zbGF2ZWAgaXMgZXNzZW50aWFsbHkgYSB0aGluIGxheWVyIG92ZXIgYHRlYW1fcG9ydF9hZGRgLiBTaW5jZSBpdCdzIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciwgaW5saW5pbmcgaXMgb3V0IHRoZSB3aW5kb3cgZm9yIGB0ZWFtX2FkZF9zbGF2ZWAsIGJ1dCBgdGVhbV9wb3J0X2FkZGAgaXMgdGhlIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSB0byBiZSBpbmxpbmVkIGludG8gaXQuIFRoYXQgbWVhbnMgSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGB0ZWFtX2FkZF9zbGF2ZWAgaXRzZWxmIGZvciBub3cuXG5cbkxldCBtZSBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuLi4gYE5FVF9URUFNYCwgYENBTmAsIGBDQU5fREVWYCwgYENBTl9WQ0FOYCwgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYElFRUU4MDIxNTRfRFJJVkVSU2AsIGFuZCBgSUVFRTgwMjE1NF9IV1NJTWAuXG5cbkhvbGQgb24uLi4gSSBkb24ndCB0aGluayBJIG5lZWQgYElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMYC4gQW5kIGZvciBDQU4sIGp1c3QgYENBTl9WQ0FOYCBzZWVtcyBzdWZmaWNpZW50IGZvciBjcmVhdGluZyBhIENBTiBkZXZpY2U7IEkgZG9uJ3QgbmVlZCBgQ0FOX1JBV2Agb3IgYENBTl9CQ01gLiBXYWl0IGEgc2Vjb25kLi4uIGBDQU5fVkNBTmAgaXMgYSB2aXJ0dWFsIGRldmljZSEgUGVyZmVjdCBmb3IgZnV6emluZyEgQW5kIHRoZSBzYW1lIGdvZXMgZm9yIGBJRUVFODAyMTU0X0hXU0lNYCDigJMgYW5vdGhlciB2aXJ0dWFsIDgwMi4xNS40IGRldmljZSBpZGVhbCBmb3IgZnV6emluZy5cblxuTm93LCBqdXN0IHRvIGJlIHN1cmUsIGxldCdzIHZlcmlmeSBgSUVFRTgwMjE1NF9IV1NJTWAncyBkZXBlbmRlbmNpZXMuIEl0IHNlZW1zIGl0IHJlcXVpcmVzIGBJRUVFODAyMTU0X0RSSVZFUlNgIGFuZCBgTUFDODAyMTU0YC4gYE1BQzgwMjE1NGAgaW4gdHVybiByZXF1aXJlcyBgSUVFRTgwMjE1NGAuIE9rYXksIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxNTRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ2MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjMwLjYwOTkwNjA5NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NTQ0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjE1NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTU0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjE1NC9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjE1NFxcbm5ldC9tYWM4MDIxNTQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0NDozMC42NTY0NjUyMjNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMjQyMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIE1BQyA4MDIuMTUuNCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBuZXQvbWFjODAyMTU0L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIElFRUUgODAyLjE1LjQgTUFDIGxheWVyIGluIHRoZSBrZXJuZWwgcmVzaWRlcy4gSSBrbm93IHRoaXMgZmlsZSBpbnRpbWF0ZWx5IOKAkyBpdCdzIHRoZSBnYXRla2VlcGVyIHRvIGN1c3RvbWl6aW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiBoZXJlLCBlc3BlY2lhbGx5IGlmIEknbSBsb29raW5nIGF0IG1vZGlmeWluZyBvciBkZWJ1Z2dpbmcgc29tZSA4MDIuMTUuNCByZWxhdGVkIGRyaXZlciBvciBmdW5jdGlvbmFsaXR5LiBJIGV4cGVjdCB0byBmaW5kIHRoZSB1c3VhbCBzdXNwZWN0czogb3B0aW9ucyBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHZhcmlvdXMgTUFDIGZlYXR1cmVzLCBzZWxlY3RpbmcgZGVmYXVsdCBwYXJhbWV0ZXJzLCBhbmQgcG90ZW50aWFsbHkgY29uZmlndXJpbmcgZGlmZmVyZW50IFBIWSBpbnRlcmZhY2VzIHRoYXQgdGhpcyBNQUMgbGF5ZXIgc3VwcG9ydHMuIEknbSBob3BpbmcgSSdsbCBhbHNvIHNlZSBzb21lIG5ldyBhZGRpdGlvbnMgdG8ga2VlcCB1cCB3aXRoIHRoZSBsYXRlc3Qgd2lyZWxlc3Mgc3RhbmRhcmRzLCBzdWNoIGFzIElFRUUgODAyLjE1LjQtMjAyMC4gSeKAmWxsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9ucyBjYW4gc3VwcG9ydCB0aGUgbmV3IHdpcmVsZXNzIHN0YW5kYXJkIHRvIGJlIGNvbXBsaWFudC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM2OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjM0LjY4ODg4ODcwM1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTU0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBNQUM4MDIxNTRcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0XFxuICAgNTpcXHRcXHRzZWxlY3QgQ1JDX0NDSVRUXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NUUlxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MzQuNjg4OTYyMTkzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTYwMDAyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgODAyLjE1LjQgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgdGhlIGZ1bmRhbWVudGFsIHJlbGF0aW9uc2hpcCBoZXJlLiBDbGVhcmx5LCBgTUFDODAyMTU0YCBpcyBidWlsdCB1cG9uIHRoZSBmb3VuZGF0aW9uIG9mIGBJRUVFODAyMTU0YC4gVGhhdOKAmXMgdGhlIGNvcmUgcmVsYXRpb25zaGlwIHdlJ3JlIGRlYWxpbmcgd2l0aCwgdGhlIE1BQyBsYXllciByZWx5aW5nIG9uIHRoZSBicm9hZGVyIHBoeXNpY2FsIGFuZCBNQUMgc3BlY2lmaWNhdGlvbnMuIEl0J3MgdGhlIG1vc3QgYmFzaWMgZGVwZW5kZW5jeS5cblxuTm93LCB0aGUgZm9sbG93LXVwLCBhbmQgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gZm9yIG1lLCBjb25jZXJucyBgSUVFRTgwMjE1NF9EUklWRVJTYC4gQXJlIHRoZXNlIG5lY2Vzc2FyaWx5IG1vbm9saXRoaWM/IERvIHdlIHNlZSB0aWdodCBjb3VwbGluZyBvciBsb29zZSBjb3VwbGluZyBiZXR3ZWVuIHRoZSBkcml2ZXJzIGFuZCB0aGF0IHByb3RvY29sPyBBcmUgdGhlIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWMsIG9yIGNhbiB3ZSB0YWxrIGFib3V0IGdlbmVyaWMgaW1wbGVtZW50YXRpb25zPyBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBzdHJ1Y3R1cmVkIHRvIGludGVyYWN0IHdpdGggdGhlIHN0YWNrLiBUaGV5J3JlIGNyaXRpY2FsLiBBcmUgdGhleSB0aWdodGx5IGJvdW5kIHRvIHNwZWNpZmljIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIGlzIHRoZXJlIGEgbW9yZSBhYnN0cmFjdCBsYXllciBpbnZvbHZlZD8gSSBpbW1lZGlhdGVseSB3YW50IHRvIGtub3cgaG93IGFkYXB0YWJsZSB0aGV5IGFyZS4gSG93IHBvcnRhYmxlIGFyZSB3ZSB0YWxraW5nPyBUaGF04oCZcyB3aGF04oCZcyByZWFsbHkgcmVsZXZhbnQgdG8gbWUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MjQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjQwLjA0NDk2NzEyN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgSUVFRTgwMjE1NF9EUklWRVJTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMTUuNCBkcml2ZXJzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IElFRUU4MDIxNTRcXG4gICA1OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBMb3ctUmF0ZVxcbiAgIDg6XFx0XFx0ICBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuIFRoaXMgb3B0aW9uIGFsb25lXFxuICAgOTpcXHRcXHQgIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6NDAuMDQ1MDQ0MzE3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzIwOTA4MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGEgTmV0d29yayBUZWFtIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCBhIGRlcGVuZGVuY3kgY2hhaW4uIGBJRUVFODAyMTU0X0RSSVZFUlNgIGhpbmdlcyBvbiBgTkVUREVWSUNFU2AgYW5kIGBJRUVFODAyMTU0YC4gVGhlcmVmb3JlLCB0byBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQsIEknbGwgbmVlZCB0aGVzZSBjb25maWd1cmF0aW9uczogYE5FVF9URUFNYCwgYENBTmAsIGBDQU5fREVWYCwgYENBTl9WQ0FOYCwgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYElFRUU4MDIxNTRfRFJJVkVSU2AsIGFuZCBgSUVFRTgwMjE1NF9IV1NJTWAuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhlIGlzc3VlOiBgdGVhbV9wb3J0X2FkZGAgZ2V0cyBjYWxsZWQgd2hlbiB3ZSdyZSB0cnlpbmcgdG8gYWRkIGEgcG9ydCB0byBhIHRlYW0gZGV2aWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBwb3J0IGlzIENBTiBvciBJRUVFODAyMTU0LiBJZiBzbywgaXQgaW1tZWRpYXRlbHkgdGhyb3dzIGFuIGVycm9yLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGZpeCwgZGVzaWduZWQgdG8gcHJldmVudCBhIGNyYXNoIG9yIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgaXQgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluay4gR2l2ZW4gdGhpcywgaXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBzb2xpZGlmeSB0aGUgZW50cnkgcG9pbnQuIElzIGB0ZWFtX2FkZF9zbGF2ZWAgdGhlIG9ubHkgcGxhY2UgYHRlYW1fcG9ydF9hZGRgIGdldHMgY2FsbGVkPyBBIHF1aWNrIGdyZXAgY29uZmlybWVkIGl0OyBgdGVhbV9wb3J0X2FkZGAgaXMgKm9ubHkqIGNhbGxlZCBieSBgdGVhbV9hZGRfc2xhdmVgLiBTbywgYHRlYW1fYWRkX3NsYXZlYCBpcyBvdXIga2V5IHN5bWJvbC5cblxuTm93LCBsZXQncyBleHBsb3JlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIGBORVRfVEVBTWAgaXMgYSB0cmlzdGF0ZSwgc28gZW5hYmxpbmcgaXQgaXMgZnVuZGFtZW50YWwuIFdoaWxlIHdlJ3JlIGF0IGl0LCBlbmFibGluZyB0aGUgZGlmZmVyZW50IG1vZGVzIOKAkyBgTkVUX1RFQU1fTU9ERV9CUk9BRENBU1RgLCBgTkVUX1RFQU1fTU9ERV9ST1VORFJPQklOYCwgYE5FVF9URUFNX01PREVfUkFORE9NYCwgYE5FVF9URUFNX01PREVfQUNUSVZFQkFDS1VQYCwgYE5FVF9URUFNX01PREVfTE9BREJBTEFOQ0VgIOKAkyBjb3VsZCBiZSBwcnVkZW50IGZvciBicm9hZGVyIHRlc3RpbmcsIGV2ZW4gdGhvdWdoIHRoZSBidWcncyBpbiBgdGVhbV9jb3JlLmNgLCB3aGljaCBjb21waWxlcyB3aXRoIGp1c3QgYE5FVF9URUFNYC4gU28sIGBORVRfVEVBTWAgaXMgc3VmZmljaWVudCwgYnV0IHRob3NlIG90aGVycyBtaWdodCBleHBhbmQgdGhlIHRlc3Qgc3VyZmFjZS5cblxuRmluYWxseSwgbGV0J3MgcmV2aXNpdCB0aGUgcGF0Y2ggaXRzZWxmLlxuXG5gYGBjXG4rXHRcdGlmIChwb3J0X2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9DQU4gfHxcbitcdFx0ICAgIHBvcnRfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTQgfHxcbitcdFx0ICAgIHBvcnRfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkNBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbid0IGJlIGFkZGVkIGFzIGEgdGVhbSBwb3J0XCIpO1xuK1x0XHRcdG5ldGRldl9lcnIoZGV2LCBcIkRldmljZSAlcyBpcyBDQU4gb3IgSUVFRSA4MDIuMTUuNC4gVGhlc2UgZGV2aWNlIHR5cGVzIGNhbid0IGJlIGFkZGVkIGFzIGEgdGVhbSBwb3J0XFxuXCIsXG4rXHRcdFx0XHQgICBwb3J0bmFtZSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbmBgYFxuXG5JdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrOiBpZiB0aGUgZGV2aWNlIHR5cGUgbWF0Y2hlcyBgQVJQSFJEX0NBTmAsIGBBUlBIUkRfSUVFRTgwMjE1NGAsIG9yIGBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SYCwgd2UgZ2V0IHRoZSBlcnJvci5cblxuVG8gcmVjYXAsIHRoZSBmb2N1cyBzeW1ib2wgaXMgYHRlYW1fYWRkX3NsYXZlYCwgYW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgYE5FVF9URUFNYCwgYENBTmAsIGBDQU5fREVWYCwgYENBTl9WQ0FOYCwgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYElFRUU4MDIxNTRfRFJJVkVSU2AsIGFuZCBgSUVFRTgwMjE1NF9IV1NJTWAuIEknbSByZWFkeSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzMTMsIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6NTAuNzY1OTU3ODA0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1MjAzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9URUFNXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9ERVZcIixcbiAgICBcIkNBTl9WQ0FOXCIsXG4gICAgXCJJRUVFODAyMTU0XCIsXG4gICAgXCJNQUM4MDIxNTRcIixcbiAgICBcIklFRUU4MDIxNTRfRFJJVkVSU1wiLFxuICAgIFwiSUVFRTgwMjE1NF9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRlYW1fYWRkX3NsYXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0ZWFtX3BvcnRfYWRkYCAoY2FsbGVkIHZpYSBgdGVhbV9hZGRfc2xhdmVgKSB0byBwcmV2ZW50IGFkZGluZyBDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBhcyB0ZWFtIHBvcnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdGVhbSBkZXZpY2VzLiBGdXp6aW5nIHJlcXVpcmVzIHRoZSB0ZWFtIGRyaXZlciBhbmQgdmlydHVhbCBDQU4vSUVFRTgwMjE1NCBkZXZpY2VzIHRvIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1RFQU1cIixcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0RFVlwiLFxuICAgIFwiQ0FOX1ZDQU5cIixcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIk1BQzgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9EUklWRVJTXCIsXG4gICAgXCJJRUVFODAyMTU0X0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGVhbV9hZGRfc2xhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRlYW1fcG9ydF9hZGRgIChjYWxsZWQgdmlhIGB0ZWFtX2FkZF9zbGF2ZWApIHRvIHByZXZlbnQgYWRkaW5nIENBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGFzIHRlYW0gcG9ydHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjb25maWd1cmluZyB0ZWFtIGRldmljZXMuIEZ1enppbmcgcmVxdWlyZXMgdGhlIHRlYW0gZHJpdmVyIGFuZCB2aXJ0dWFsIENBTi9JRUVFODAyMTU0IGRldmljZXMgdG8gYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowc2lwm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 21:13:03 +0000 UTC FinishedAt: 2026-07-29 21:44:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_TEAM", "CAN", "CAN_DEV", "CAN_VCAN", "IEEE802154", "MAC802154", "IEEE802154_DRIVERS", "IEEE802154_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_TEAM", "CAN", "CAN_DEV", "CAN_VCAN", "IEEE802154", "MAC802154", "IEEE802154_DRIVERS", "IEEE802154_HWSIM" ], "series_id": "e0faf45d-b7b0-483e-96d3-a27fcc248199" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "team_add_slave" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9URUFNJiMzNDssCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fREVWJiMzNDssCiAgICAmIzM0O0NBTl9WQ0FOJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGVhbV9hZGRfc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0ZWFtX3BvcnRfYWRkYCAoY2FsbGVkIHZpYSBgdGVhbV9hZGRfc2xhdmVgKSB0byBwcmV2ZW50IGFkZGluZyBDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBhcyB0ZWFtIHBvcnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdGVhbSBkZXZpY2VzLiBGdXp6aW5nIHJlcXVpcmVzIHRoZSB0ZWFtIGRyaXZlciBhbmQgdmlydHVhbCBDQU4vSUVFRTgwMjE1NCBkZXZpY2VzIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MzBiYjRhYTY3Nzc5ODg1NThiOGMwYWFiOTMwYjFmMjVmOGIxOGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMjE6NDM6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcbmluZGV4IGZlYWE3NWZiZjhmYzIuLmQ4YzQ2MTA1ZmM4YmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXG5AQCAtMTIyNCw2ICYjNDM7MTIyNCwxNyBAQCBzdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0XHRpZiAocG9ydF9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOIHx8XG4mIzQzO1x0XHQgICAgcG9ydF9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxuJiM0MztcdFx0ICAgIHBvcnRfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0NBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbiYjMzk7dCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFwmIzM0Oyk7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgJXMgaXMgQ0FOIG9yIElFRUUgODAyLjE1LjQuIFRoZXNlIGRldmljZSB0eXBlcyBjYW4mIzM5O3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgcG9ydG5hbWUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKG5ldGlmX2lzX3RlYW1fcG9ydChwb3J0X2RldikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtEZXZpY2UgaXMgYWxyZWFkeSBhIHBvcnQgb2YgYSB0ZWFtIGRldmljZVwmIzM0Oyk7XG4gXHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgJXMgaXMgYWxyZWFkeSBhIHBvcnQgXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9URUFNJiMzNDssCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fREVWJiMzNDssCiAgICAmIzM0O0NBTl9WQ0FOJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGVhbV9hZGRfc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0ZWFtX3BvcnRfYWRkYCAoY2FsbGVkIHZpYSBgdGVhbV9hZGRfc2xhdmVgKSB0byBwcmV2ZW50IGFkZGluZyBDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBhcyB0ZWFtIHBvcnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdGVhbSBkZXZpY2VzLiBGdXp6aW5nIHJlcXVpcmVzIHRoZSB0ZWFtIGRyaXZlciBhbmQgdmlydHVhbCBDQU4vSUVFRTgwMjE1NCBkZXZpY2VzIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MzBiYjRhYTY3Nzc5ODg1NThiOGMwYWFiOTMwYjFmMjVmOGIxOGIyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMjE6NDM6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jIGIvZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYwppbmRleCBmZWFhNzVmYmY4ZmMyLi5kOGM0NjEwNWZjOGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMKQEAgLTEyMjQsNiAmIzQzOzEyMjQsMTcgQEAgc3RhdGljIGludCB0ZWFtX3BvcnRfYWRkKHN0cnVjdCB0ZWFtICp0ZWFtLCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwkJaWYgKHBvcnRfZGV2LSZndDt0eXBlID09IEFSUEhSRF9DQU4gfHwKJiM0MzsJCSAgICBwb3J0X2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fAomIzQzOwkJICAgIHBvcnRfZGV2LSZndDt0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O0NBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbiYjMzk7dCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydCYjMzQ7KTsKJiM0MzsJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtEZXZpY2UgJXMgaXMgQ0FOIG9yIElFRUUgODAyLjE1LjQuIFRoZXNlIGRldmljZSB0eXBlcyBjYW4mIzM5O3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcbiYjMzQ7LAomIzQzOwkJCQkgICBwb3J0bmFtZSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAobmV0aWZfaXNfdGVhbV9wb3J0KHBvcnRfZGV2KSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7RGV2aWNlIGlzIGFscmVhZHkgYSBwb3J0IG9mIGEgdGVhbSBkZXZpY2UmIzM0Oyk7CiAJCW5ldGRldl9lcnIoZGV2LCAmIzM0O0RldmljZSAlcyBpcyBhbHJlYWR5IGEgcG9ydCAmIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGVhbSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiB0aGUgYHRlYW1fcG9ydF9hZGRgIGZ1bmN0aW9uLiBUaGUgcHVycG9zZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byBhY3RpdmVseSBwcmV2ZW50IENBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGZyb20gYmVpbmcgYWRkZWQgYXMgdGVhbSBwb3J0cy4gVGhhdCYjMzk7cyBhIHZlcnkgc3BlY2lmaWMgZnVuY3Rpb25hbCBjaGFuZ2UsIGNsZWFybHkgdGFyZ2V0aW5nIGEgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgY29uZmlndXJhdGlvbi4KClRoaW5raW5nIGFib3V0IGl0LCB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBgdGVhbV9wb3J0X2FkZGAgaXMgdGhyb3VnaCBuZXRsaW5rIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gc29tZW9uZSBpcyB0cnlpbmcgdG8gYWRkIGEgcG9ydCB0byBhIHRlYW0gZGV2aWNlLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIHByZXZlbnQgc29tZSBvYnNjdXJlLCBidXQgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUsIGJlaGF2aW9yLiBJdCYjMzk7cyBhIHRhcmdldGVkIGRlZmVuc2UgYWdhaW5zdCBhIHNwZWNpZmljLCBhbGJlaXQgcGVyaGFwcyByYXJlLCBzY2VuYXJpby4KClNpbmNlIGl0IGludm9sdmVzIHRoZSB0ZWFtIGRyaXZlciwgdGhlIHdob2xlIHRoaW5nIGlzIGdvdmVybmVkIGJ5IHRoZSBgQ09ORklHX05FVF9URUFNYCBLY29uZmlnIG9wdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIGFueSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBORVRfVEVBTWAuIEkgc2hvdWxkIHByb2JhYmx5IGVuc3VyZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhlIG1vZHVsZSBkb2VzIG5vdCBicmVhayBhbnkgb3RoZXIgbmV0d29yayBpbnRlcmZhY2UgYXMgYSByZWdyZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVEVBTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzoyOm1lbnVjb25maWcgTkVUX1RFQU1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RXRoZXJuZXQgdGVhbSBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZz0xNj1pZiBORVRfVEVBTVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTE3LVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjE4OmNvbmZpZyBORVRfVEVBTV9NT0RFX0JST0FEQ0FTVFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjYXN0IG1vZGUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzoyOTpjb25maWcgTkVUX1RFQU1fTU9ERV9ST1VORFJPQklOXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMzAtXHR0cmlzdGF0ZSBcJiMzNDtSb3VuZC1yb2JpbiBtb2RlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNDAtXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6NDE6Y29uZmlnIE5FVF9URUFNX01PREVfUkFORE9NXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtSYW5kb20gbW9kZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTUyLVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjUzOmNvbmZpZyBORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7QWN0aXZlLWJhY2t1cCBtb2RlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNjUtXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6NjY6Y29uZmlnIE5FVF9URUFNX01PREVfTE9BREJBTEFOQ0VcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy02Ny1cdHRyaXN0YXRlIFwmIzM0O0xvYWQtYmFsYW5jZSBtb2RlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYHRlYW1fcG9ydF9hZGRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGBORVRfVEVBTWAsIGFuZCBpdCYjMzk7cyBwb2ludGluZyBtZSB0b3dhcmRzIHRoZSBmdW5jdGlvbiBgdGVhbV9wb3J0X2FkZGAuIE15IGV4cGVydCBpbnR1aXRpb24gaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgdGhhdCB3b3VsZCBsaWtlbHkgYmVuZWZpdCBmcm9tIGZ1enppbmcuIEFueXRpbWUgSSBzZWUgYSBuZXR3b3JrLXJlbGF0ZWQgZnVuY3Rpb24sIGVzcGVjaWFsbHkgb25lIGRlYWxpbmcgd2l0aCB0aGUgYWRkaXRpb24gb2YgYSBwb3J0LCBteSBtaW5kIGdvZXMgc3RyYWlnaHQgdG8gZWRnZSBjYXNlcywgYnVmZmVyIG92ZXJmbG93cywgYW5kIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEJlZm9yZSBJIGRpdmUgaW4sIHRob3VnaCwgSSBuZWVkIHRvIGtub3cgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbjogSXMgYHRlYW1fcG9ydF9hZGRgIGEgc3RhdGljIGZ1bmN0aW9uPyBUaGF0IHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgbXkgZnV6emluZyBzdHJhdGVneSBhbmQgaG93IEkgYXBwcm9hY2ggdGVzdGluZyBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgdmlzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZSBiZWZvcmUgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RlYW1fcG9ydF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NDA9c3RhdGljIHN0cnVjdCB0ZWFtX3BvcnQgKnRlYW1fcG9ydF9nZXRfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNDgtICogU2luY2UgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIGRldmljZSBhZGRyZXNzIGZvciBvcGVuIHBvcnQgZGV2aWNlIGlzIHRlc3RlZCBpblxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzo0OTogKiB0ZWFtX3BvcnRfYWRkLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sIG9mIHJldHVybiB2YWx1ZVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy01MC0gKi9cbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTEyMDk9c3RhdGljIGludCB0ZWFtX2Rldl90eXBlX2NoZWNrX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MTIxMjpzdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMy1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjExNz1zdGF0aWMgaW50IHRlYW1fYWRkX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2Rldixcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMjMtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIxMjQ6XHRyZXR1cm4gdGVhbV9wb3J0X2FkZCh0ZWFtLCBwb3J0X2RldiwgZXh0YWNrKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjEyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgdGVhbV9wb3J0X2FkZGAgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSBub3RpY2VkIHRoYXQgYHRlYW1fcG9ydF9hZGRgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBzcGVjaWZpYyBiZWhhdmlvci4gTm93LCB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGNvbWVzIGZyb20gYHRlYW1fYWRkX3NsYXZlYC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGB0ZWFtX2FkZF9zbGF2ZWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHB1cnBvc2Ugb2YgY2FsbGluZyB0aGlzIHN0YXRpYyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBmcm9tIGB0ZWFtX2FkZF9zbGF2ZWAgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2h5IHRoaXMgYHRlYW1fcG9ydF9hZGRgIGZ1bmN0aW9uIGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZWFtX2FkZF9zbGF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMDk4PXN0YXRpYyBpbnQgdGVhbV9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTE2LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMTE3OnN0YXRpYyBpbnQgdGVhbV9hZGRfc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTE4LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjE4MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRlYW1fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxOTktI2VuZGlmXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIyMDA6XHQubmRvX2FkZF9zbGF2ZVx0XHQ9IHRlYW1fYWRkX3NsYXZlLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMjAxLVx0Lm5kb19kZWxfc2xhdmVcdFx0PSB0ZWFtX2RlbF9zbGF2ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTE4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRlYW0gSW50ZXJmYWNlIFNsYXZlIEFkZGl0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBzbGF2ZSBpbnRlcmZhY2VzIGdldCBhZGRlZCB0byBhIHRlYW0gaW50ZXJmYWNlLiBgdGVhbV9hZGRfc2xhdmVgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIGFuIGBuZG9gIGNhbGxiYWNrLCBzcGVjaWZpY2FsbHkgYG5kb19hZGRfc2xhdmVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZnVsbCBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyB0byBjb25zaWRlcj8gTGV0IG1lIHRoaW5rLi4uIHBlcmhhcHMgYHRlYW1fbmxfY21kX3BvcnRfbGlzdF9nZXRgPyBIbW0sIG5vLCBJIGRvdWJ0IHRoYXQmIzM5O3MgZm9yICphZGRpbmcqIGEgcG9ydDsgaXQgc291bmRzIG1vcmUgbGlrZSBsaXN0aW5nIHRoZW0uCgpXYWl0IGEgc2Vjb25kLCAqaG93KiBpcyBhIHBvcnQgYWN0dWFsbHkgYWRkZWQgaW4gdGhlIGZpcnN0IHBsYWNlPyBMZXQgbWUgdHJhY2UgdGhpcyBiYWNrLi4uIEl0IHNlZW1zIGxpa2UgYHRlYW1fYWRkX3NsYXZlYCBpcyB0aGUgcHJpbWFyeSBtZWNoYW5pc20sIGFuZCB0aGF0JiMzOTtzIHRoZSBzYW1lIGFzIGBuZG9fYWRkX3NsYXZlYC4gUmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBpdCBpcyBjYWxsZWQgYnkgYGRvX3NldGxpbmtgIG9yIGBpZmVuc2xhdmVgIGlvY3RsIGNhbGxzLCBJIHNob3VsZCByZW1lbWJlciB0aGF0IGZvciB0aGUgZnV0dXJlLiBJJiMzOTttIHJlY2FsbGluZyBzb21ldGhpbmcgYWJvdXQgYG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2xpbmtgIGluIHRoaXMgY29udGV4dCwgYnV0IEkgZG9uJiMzOTt0IHRoaW5rIGl0IGlzIGNhbGxpbmcgdGhlIGBuZG9fYWRkX3NsYXZlYC4gU28sIEkgc2hvdWxkIGhhdmUgYSBsb29rIGluIHRoZXNlIGlvY3RsIGNvbW1hbmRzLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgTmV0bGluayBpbnRlcmZhY2UgZm9yIHRlYW0uIEl0JiMzOTtzIGFsbW9zdCBndWFyYW50ZWVkIHRoZXJlIHdpbGwgYmUgTmV0bGluayBmdW5jdGlvbmFsaXR5IGhlcmUgdG9vLiBJIHNob3VsZCBjaGVjayBgdGVhbV9ubF9jbWRfcG9ydF9hZGRgLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgTmV0bGluayBzaWRlIG9mIHRoaW5ncyBoYXBwZW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgc3BhY2UgaW50ZXJhY3RzIHdpdGggYWxsIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGVhbV9ubF9jbWRfcG9ydF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQ29tbWFuZCBMaW5lIE9wdGlvbiBTZXR0aW5ncyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIGluc3RpbmN0IGhlcmUgaXMgdG8gZGVsdmUgaW50byB0aGUgbWVjaGFuaXNtIHRoYXQgbWFuYWdlcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIHRoZSB0ZWFtIG5ldHdvcmsgbGlicmFyeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgc2V0dGluZ3MgYXJlIGhhbmRsZWQuIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgZnVuY3Rpb25zIG5hbWVkIHNpbWlsYXJseSB0byBgdGVhbV9ubF9jbWRfb3B0aW9uc19zZXRgLCBvciBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMuIEkgZXhwZWN0IHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIGZ1bmN0aW9uLCBvciBwZXJoYXBzIGEgcmVsYXRlZCBmYW1pbHkgb2YgZnVuY3Rpb25zLCByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIHRoZSBwYXJzZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhbmQgYWN0dWFsbHkgY29uZmlndXJpbmcgdGhlIG5ldHdvcmsgbGlicmFyeSYjMzk7cyBiZWhhdmlvciBiYXNlZCBvbiB0aG9zZSBhcmd1bWVudHMuIE15IGd1ZXNzIGlzIHRoZXJlIHdvdWxkIGJlIGFzc29jaWF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgZGVzaWduIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB3ZSBjYW4gYXBwcm9hY2ggbW9yZSBjb21wbGV4IHNjZW5hcmlvcywgb3IgZGVidWcgYW55IGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZWFtX25sX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0ZWFtJiMzOTtzIGdvbmUgd2l0aCBnZW5lcmljIG5ldGxpbmssIGVoPyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIGNvbnNpZGVyYXRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGF2YWlsYWJsZSBmdW5jdGlvbnMgYW5kIHRoZSBvdmVyYWxsIGFwcHJvYWNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQsIHdoYXQgdGhlIGZhbWlseSBJRCBpcywgYW5kIHdoYXQga2luZCBvZiBtZXNzYWdlcyB0aGV5JiMzOTtyZSBzbGluZ2luZyBhcm91bmQuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCB0aGUgbGlrZWxpaG9vZCBvZiByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgZXJyb3IgY29kZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgdGhleSBhcmUgdXNpbmcgdGhlIHNvY2tldCBhbmQgbWVzc2FnZSBwYXNzaW5nLiBJcyB0aGlzIGEgY3VzdG9tIGZhbWlseT8gQXJlIHRoZXkgbGV2ZXJhZ2luZyBleGlzdGluZyBnZW5lcmljIG5ldGxpbmsgYXR0cmlidXRlcywgb3IgaGF2ZSB0aGV5IGRlZmluZWQgdGhlaXIgb3duPyBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgb3ZlcmFsbCBkZXNpZ24uIElzIHRoaXMgYSBjbGVhbiBzZXBhcmF0aW9uIGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBjb21wb25lbnRzPyBBcmUgdGhleSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBuZXRsaW5rJiMzOTtzIGFzeW5jaHJvbm91cyBuYXR1cmUsIG9yIGhhdmUgdGhleSBmYWxsZW4gaW50byB0aGUgdHJhcCBvZiBzeW5jaHJvbm91cyBjYWxscz8gSSYjMzk7bSBvbiB0aGUgbG9va291dCBmb3IgYW55dGhpbmcgdGhhdCBzbWVsbHMgbGlrZSBpbmVmZmljaWVudCBkYXRhIHNlcmlhbGl6YXRpb24sIGV4Y2Vzc2l2ZSBjb3B5aW5nLCBvciBwb29yIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWdpZXMuIFRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50IHdpbGwgaW5mb3JtIG15IGFwcHJvYWNoIHRvIGZ1cnRoZXIgY29kZSByZXZpZXcgb3IgdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZWFtX25sXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yNDQ0PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB0ZWFtX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNDU4LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNDU5OnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgdGVhbV9ubF9mYW1pbHk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NjAtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI0NjE6aW50IHRlYW1fbmxfbm9vcF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NjIte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ3MS1cdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgaW5mby1cdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVx1MDAzZXNuZF9zZXEsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI0NzI6XHRcdFx0ICBcdTAwMjZ0ZWFtX25sX2ZhbWlseSwgMCwgVEVBTV9DTURfTk9PUCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NzMtXHRpZiAoIWhkcikge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ5MS0gKi9cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjQ5MjpzdGF0aWMgc3RydWN0IHRlYW0gKnRlYW1fbmxfdGVhbV9nZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ5My17XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNTEyLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNTEzOnN0YXRpYyB2b2lkIHRlYW1fbmxfdGVhbV9wdXQoc3RydWN0IHRlYW0gKnRlYW0pXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI1MTQte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUxNy1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjUxODp0eXBlZGVmIGludCB0ZWFtX25sX3NlbmRfZnVuY190KHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI1MTktXHRcdFx0XHRzdHJ1Y3QgdGVhbSAqdGVhbSwgdTMyIHBvcnRpZCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI1MjAtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI1MjE6c3RhdGljIGludCB0ZWFtX25sX3NlbmRfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGVhbSAqdGVhbSwgdTMyIHBvcnRpZClcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUyMi17XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNTI1LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNTI2OnN0YXRpYyBpbnQgdGVhbV9ubF9maWxsX29uZV9vcHRpb25fZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0ZWFtICp0ZWFtLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNTI3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCB0ZWFtX29wdGlvbl9pbnN0ICpvcHRfaW5zdClcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTI2MDc9c3RhdGljIGludCBfX3NlbmRfYW5kX2FsbG9jX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI2MDgtXHRcdFx0XHRzdHJ1Y3QgdGVhbSAqdGVhbSwgdTMyIHBvcnRpZCxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjYwOTpcdFx0XHRcdHRlYW1fbmxfc2VuZF9mdW5jX3QgKnNlbmRfZnVuYylcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjYxMC17XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjIzLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNjI0OnN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNjI1Olx0XHRcdFx0ICAgIGludCBmbGFncywgdGVhbV9ubF9zZW5kX2Z1bmNfdCAqc2VuZF9mdW5jLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjI2LVx0XHRcdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnNlbF9vcHRfaW5zdF9saXN0KVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY0NC1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjY0NTpcdGhkciA9IGdlbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFx1MDAyNnRlYW1fbmxfZmFtaWx5LCBmbGFncyB8IE5MTV9GX01VTFRJLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjQ2LVx0XHRcdCAgVEVBTV9DTURfT1BUSU9OU19HRVQpO1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY2MS1cdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShvcHRfaW5zdCwgc2VsX29wdF9pbnN0X2xpc3QsIHRtcF9saXN0KSB7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI2NjI6XHRcdGVyciA9IHRlYW1fbmxfZmlsbF9vbmVfb3B0aW9uX2dldChza2IsIHRlYW0sIG9wdF9pbnN0KTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY2My1cdFx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY5Ny1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjY5ODppbnQgdGVhbV9ubF9vcHRpb25zX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI2OTkte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcwNi1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjcwNzpcdHRlYW0gPSB0ZWFtX25sX3RlYW1fZ2V0KGluZm8pO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzA4LVx0aWYgKCF0ZWFtKSB7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzE0LVx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm9wdF9pbnN0LVx1MDAzZXRtcF9saXN0LCBcdTAwMjZzZWxfb3B0X2luc3RfbGlzdCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3MTU6XHRlcnIgPSB0ZWFtX25sX3NlbmRfb3B0aW9uc19nZXQodGVhbSwgaW5mby1cdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVx1MDAzZXNuZF9zZXEsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3MTY6XHRcdFx0XHQgICAgICAgTkxNX0ZfQUNLLCB0ZWFtX25sX3NlbmRfdW5pY2FzdCxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcxNy1cdFx0XHRcdCAgICAgICBcdTAwMjZzZWxfb3B0X2luc3RfbGlzdCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MTgtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3MTk6XHR0ZWFtX25sX3RlYW1fcHV0KHRlYW0pO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzIwLVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyNi1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjcyNzpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9ldmVudF9vcHRpb25zX2dldChzdHJ1Y3QgdGVhbSAqdGVhbSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyOC1cdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpzZWxfb3B0X2luc3RfbGlzdCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MjktXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3MzA6aW50IHRlYW1fbmxfb3B0aW9uc19zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzMxLXtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MzgtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3Mzk6XHR0ZWFtID0gdGVhbV9ubF90ZWFtX2dldChpbmZvKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjc0MC1cdGlmICghdGVhbSkge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjg3MC1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjg3MTpcdFx0ZXJyID0gdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHRlYW0sIFx1MDAyNm9wdF9pbnN0X2xpc3QpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yODcyLVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjg3Ni10ZWFtX3B1dDpcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjg3NzpcdHRlYW1fbmxfdGVhbV9wdXQodGVhbSk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI4NzgtcnRubF91bmxvY2s6XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yODgyLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyODgzOnN0YXRpYyBpbnQgdGVhbV9ubF9maWxsX29uZV9wb3J0X2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yODg0LVx0XHRcdFx0ICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjkxMi1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjkxMzpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9wb3J0X2xpc3RfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyOTE0Olx0XHRcdFx0ICAgICAgaW50IGZsYWdzLCB0ZWFtX25sX3NlbmRfZnVuY190ICpzZW5kX2Z1bmMsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5MTUtXHRcdFx0XHQgICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpvbmVfcG9ydClcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5MzMtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI5MzQ6XHRoZHIgPSBnZW5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBcdTAwMjZ0ZWFtX25sX2ZhbWlseSwgZmxhZ3MgfCBOTE1fRl9NVUxUSSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjkzNS1cdFx0XHQgIFRFQU1fQ01EX1BPUlRfTElTVF9HRVQpO1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjk1NC1cdGlmIChvbmVfcG9ydCkge1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyOTU1Olx0XHRlcnIgPSB0ZWFtX25sX2ZpbGxfb25lX3BvcnRfZ2V0KHNrYiwgb25lX3BvcnQpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTU2LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjk1OS1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHBvcnQsIFx1MDAyNnRlYW0tXHUwMDNlcG9ydF9saXN0LCBsaXN0KSB7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI5NjA6XHRcdFx0ZXJyID0gdGVhbV9ubF9maWxsX29uZV9wb3J0X2dldChza2IsIHBvcnQpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTYxLVx0XHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5OTYtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI5OTc6aW50IHRlYW1fbmxfcG9ydF9saXN0X2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5OTgtXHRcdFx0ICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDA0LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDA1Olx0dGVhbSA9IHRlYW1fbmxfdGVhbV9nZXQoaW5mbyk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMDYtXHRpZiAoIXRlYW0pIHtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMTAtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMTE6XHRlcnIgPSB0ZWFtX25sX3NlbmRfcG9ydF9saXN0X2dldCh0ZWFtLCBpbmZvLVx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXHUwMDNlc25kX3NlcSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzAxMjpcdFx0XHRcdFx0IE5MTV9GX0FDSywgdGVhbV9ubF9zZW5kX3VuaWNhc3QsIE5VTEwpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDEzLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDE0Olx0dGVhbV9ubF90ZWFtX3B1dCh0ZWFtKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAxNS1cbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMjEtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMjI6c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCB0ZWFtX25sX21jZ3Jwc1tdID0ge1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDIzLVx0eyAubmFtZSA9IFRFQU1fR0VOTF9DSEFOR0VfRVZFTlRfTUNfR1JQX05BTUUsIH0sXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDI1LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDI2OnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgdGVhbV9ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDI3LVx0Lm5hbWVcdFx0PSBURUFNX0dFTkxfTkFNRSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAyOC1cdC52ZXJzaW9uXHQ9IFRFQU1fR0VOTF9WRVJTSU9OLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDI5Olx0Lm1heGF0dHJcdD0gQVJSQVlfU0laRSh0ZWFtX25sX3BvbGljeSkgLSAxLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDMwOlx0LnBvbGljeSA9IHRlYW1fbmxfcG9saWN5LFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDMxLVx0Lm5ldG5zb2tcdD0gdHJ1ZSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzMi1cdC5tb2R1bGVcdFx0PSBUSElTX01PRFVMRSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzAzMzpcdC5zbWFsbF9vcHNcdD0gdGVhbV9ubF9vcHMsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMzQ6XHQubl9zbWFsbF9vcHNcdD0gQVJSQVlfU0laRSh0ZWFtX25sX29wcyksXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMzUtXHQucmVzdl9zdGFydF9vcFx0PSBURUFNX0NNRF9QT1JUX0xJU1RfR0VUICYjNDM7IDEsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMzY6XHQubWNncnBzXHRcdD0gdGVhbV9ubF9tY2dycHMsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMzc6XHQubl9tY2dycHNcdD0gQVJSQVlfU0laRSh0ZWFtX25sX21jZ3JwcyksXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMzgtfTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzOS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA0MDpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9tdWx0aWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA0MS1cdFx0XHRcdCAgc3RydWN0IHRlYW0gKnRlYW0sIHUzMiBwb3J0aWQpXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNDIte1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDQzOlx0cmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKFx1MDAyNnRlYW1fbmxfZmFtaWx5LFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDQ0LVx0XHRcdFx0ICAgICAgIGRldl9uZXQobmV0ZGV2X2Zyb21fcHJpdih0ZWFtKSksXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDQ3LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDQ4OnN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDQ5LVx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKnNlbF9vcHRfaW5zdF9saXN0KVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDUwLXtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA1MTpcdHJldHVybiB0ZWFtX25sX3NlbmRfb3B0aW9uc19nZXQodGVhbSwgMCwgMCwgMCwgdGVhbV9ubF9zZW5kX211bHRpY2FzdCxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA1Mi1cdFx0XHRcdFx0c2VsX29wdF9pbnN0X2xpc3QpO1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA1NC1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA1NTpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9ldmVudF9wb3J0X2dldChzdHJ1Y3QgdGVhbSAqdGVhbSxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA1Ni1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0KVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDU3LXtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA1ODpcdHJldHVybiB0ZWFtX25sX3NlbmRfcG9ydF9saXN0X2dldCh0ZWFtLCAwLCAwLCAwLCB0ZWFtX25sX3NlbmRfbXVsdGljYXN0LFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDU5LVx0XHRcdFx0XHQgIHBvcnQpO1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA2MS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA2MjpzdGF0aWMgaW50IF9faW5pdCB0ZWFtX25sX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA2My17XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwNjQ6XHRyZXR1cm4gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoXHUwMDI2dGVhbV9ubF9mYW1pbHkpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDY1LX1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA2Ni1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA2NzpzdGF0aWMgdm9pZCBfX2V4aXQgdGVhbV9ubF9maW5pKHZvaWQpXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNjgte1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDY5Olx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcdTAwMjZ0ZWFtX25sX2ZhbWlseSk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNzAtfVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzA3Nz1zdGF0aWMgdm9pZCBfX3RlYW1fb3B0aW9uc19jaGFuZ2VfY2hlY2soc3RydWN0IHRlYW0gKnRlYW0pXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDg2LVx0fVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDg3Olx0ZXJyID0gdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHRlYW0sIFx1MDAyNnNlbF9vcHRfaW5zdF9saXN0KTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA4OC1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRVNSQ0gpXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zMDk2PXN0YXRpYyB2b2lkIF9fdGVhbV9wb3J0X2NoYW5nZV9zZW5kKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsIGJvb2wgbGlua3VwKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzExNi1zZW5kX2V2ZW50OlxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMTE3Olx0ZXJyID0gdGVhbV9ubF9zZW5kX2V2ZW50X3BvcnRfZ2V0KHBvcnQtXHUwMDNldGVhbSwgcG9ydCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMxMTgtXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVTUkNIKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzIzOT1zdGF0aWMgaW50IF9faW5pdCB0ZWFtX21vZHVsZV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMjQ4LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMjQ5Olx0ZXJyID0gdGVhbV9ubF9pbml0KCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMyNTAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzI2ND1zdGF0aWMgdm9pZCBfX2V4aXQgdGVhbV9tb2R1bGVfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMjY1LXtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzI2NjpcdHRlYW1fbmxfZmluaSgpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMjY3LVx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2dGVhbV9saW5rX29wcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVsdmluZyBpbnRvIHRoZSBUZWFtIERldmljZSBTbGF2ZSBBZGRpdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGB0ZWFtX2FkZF9zbGF2ZWAgd2FzIHRyaWdnZXJlZCBieSB0aGUgYFJUTV9ORVdMSU5LYCBuZXRsaW5rIG1lc3NhZ2UsIHNwZWNpZmljYWxseSB3aGVuIGl0IGNvbnRhaW5lZCBlaXRoZXIgYElGTEFfTUFTVEVSYCBvciBgSUZMQV9MSU5LYCBhdHRyaWJ1dGVzLiBCdXQgd2FpdCBhIHNlY29uZCwgSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZS4gVGhlIGFjdHVhbCBtZWNoYW5pc20gZm9yIGFkZGluZyBhIHNsYXZlIHRvIGEgdGVhbSBkZXZpY2UgaXMgbGlrZWx5IGhhbmRsZWQgdGhyb3VnaCB0aGUgYHJ0bmxfbGlua19vcHNgIHN0cnVjdHVyZSBvciB0aGUgYG5kb19hZGRfc2xhdmVgIG9wZXJhdGlvbi4KClJpZ2h0LCB0aGF0IGZlZWxzIG1vcmUgY29ycmVjdC4gVGhlIG1vcmUgZ2VuZXJhbCBhcHByb2FjaCwgd2hlbiBhZGRpbmcgYSBzbGF2ZSB0byBhbnkgbWFzdGVyIGRldmljZSwgaXMgZ2VuZXJhbGx5IG1hbmFnZWQgd2l0aGluIGBkb19zZXRsaW5rYCBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBGcm9tIHRoZXJlLCBpdCB3b3VsZCBjYWxsIGVpdGhlciBgbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGlua2Agb3IgdGhlIGFmb3JlbWVudGlvbmVkIGBuZG9fYWRkX3NsYXZlYC4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGdvIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGB0ZWFtX2FkZF9zbGF2ZWAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gZW5zdXJlIG15IG1lbnRhbCBtb2RlbCBpcyBjb21wbGV0ZSBhbmQgYWNjdXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RlYW1fYWRkX3NsYXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTIwOTg9c3RhdGljIGludCB0ZWFtX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMTYtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIxMTc6c3RhdGljIGludCB0ZWFtX2FkZF9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMTgtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGVhbV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE5OS0jZW5kaWZcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjIwMDpcdC5uZG9fYWRkX3NsYXZlXHRcdD0gdGVhbV9hZGRfc2xhdmUsXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIyMDEtXHQubmRvX2RlbF9zbGF2ZVx0XHQ9IHRlYW1fZGVsX3NsYXZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzNwoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c3NpbmcgRnV6emluZyBFZmZvcnRzIGluIGB0ZWFtX2NvcmUuY2AqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgdGVhbV9hZGRfc2xhdmVgIGlzIGFzc2lnbmVkIHRvIGAubmRvX2FkZF9zbGF2ZWAsIGFuZCB0aGF0JiMzOTtzIGdvb2QuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdGFyZ2V0IGl0IGZvciBmdXp6aW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyIGl0JiMzOTtzIHN0YXRpYy4gSG1tLCBzYW1lIGdvZXMgZm9yIGB0ZWFtX3BvcnRfYWRkYC4gVGhpcyBpcyBhIHNsaWdodCBwcm9ibGVtLiBXZSB3YW50IHRvIGF2b2lkIHN0YXRpYyBmdW5jdGlvbnMsIGFzIHRoZXkgYXJlIG5vdCBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuIElzIHRoZXJlIGFueXRoaW5nICpub24qLXN0YXRpYyBpbiBgdGVhbV9jb3JlLmNgIHRoYXQgb2ZmZXJzIGEgYmV0dGVyIGZ1enppbmcgdGFyZ2V0PyBMZXQmIzM5O3MgdGFrZSBhIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgdGVhbV9jb3JlLmNgIHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1vcmUgdmlhYmxlIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz02Nj1zdGF0aWMgaW50IHRlYW1fcG9ydF9zZXRfdGVhbV9kZXZfYWRkcihzdHJ1Y3QgdGVhbSAqdGVhbSxcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTcxLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzo3MjppbnQgdGVhbV9tb2Rlb3BfcG9ydF9lbnRlcihzdHJ1Y3QgdGVhbSAqdGVhbSwgc3RydWN0IHRlYW1fcG9ydCAqcG9ydClcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNzMte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NzY9RVhQT1JUX1NZTUJPTCh0ZWFtX21vZGVvcF9wb3J0X2VudGVyKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNzctXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjc4OnZvaWQgdGVhbV9tb2Rlb3BfcG9ydF9jaGFuZ2VfZGV2X2FkZHIoc3RydWN0IHRlYW0gKnRlYW0sXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTc5LVx0XHRcdFx0ICAgICAgc3RydWN0IHRlYW1fcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTMzMj1zdGF0aWMgdm9pZCBfX3RlYW1fb3B0aW9uc19jaGFuZ2VfY2hlY2soc3RydWN0IHRlYW0gKnRlYW0pO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMzMtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMzNDppbnQgdGVhbV9vcHRpb25zX3JlZ2lzdGVyKHN0cnVjdCB0ZWFtICp0ZWFtLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMzUtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgdGVhbV9vcHRpb24gKm9wdGlvbixcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTM0Nj1FWFBPUlRfU1lNQk9MKHRlYW1fb3B0aW9uc19yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM0Ny1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzQ4OnZvaWQgdGVhbV9vcHRpb25zX3VucmVnaXN0ZXIoc3RydWN0IHRlYW0gKnRlYW0sXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM0OS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0ZWFtX29wdGlvbiAqb3B0aW9uLFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzY5PXN0YXRpYyBpbnQgdGVhbV9vcHRpb25fc2V0KHN0cnVjdCB0ZWFtICp0ZWFtLFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzc3LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozNzg6dm9pZCB0ZWFtX29wdGlvbl9pbnN0X3NldF9jaGFuZ2Uoc3RydWN0IHRlYW1fb3B0aW9uX2luc3RfaW5mbyAqb3B0X2luc3RfaW5mbylcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzc5LXtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTM4NT1FWFBPUlRfU1lNQk9MKHRlYW1fb3B0aW9uX2luc3Rfc2V0X2NoYW5nZSk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM4Ni1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mzg3OnZvaWQgdGVhbV9vcHRpb25zX2NoYW5nZV9jaGVjayhzdHJ1Y3QgdGVhbSAqdGVhbSlcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzg4LXtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTM5MT1FWFBPUlRfU1lNQk9MKHRlYW1fb3B0aW9uc19jaGFuZ2VfY2hlY2spO1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzk3LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozOTg6c3RhdGljIExJU1RfSEVBRChtb2RlX2xpc3QpO1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozOTk6c3RhdGljIERFRklORV9TUElOTE9DSyhtb2RlX2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQwMC1cbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTQxNz1zdGF0aWMgYm9vbCBpc19nb29kX21vZGVfbmFtZShjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNDI2LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzo0Mjc6aW50IHRlYW1fbW9kZV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgdGVhbV9tb2RlICptb2RlKVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy00Mjgte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NDUyPUVYUE9SVF9TWU1CT0wodGVhbV9tb2RlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNDUzLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzo0NTQ6dm9pZCB0ZWFtX21vZGVfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgdGVhbV9tb2RlICptb2RlKVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy00NTUte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjQ1OT1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IHRlYW1fbmxfZmFtaWx5O1xuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNDYwLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNDYxOmludCB0ZWFtX25sX25vb3BfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNDYyLXtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTI2MjQ9c3RhdGljIGludCB0ZWFtX25sX3NlbmRfb3B0aW9uc19nZXQoc3RydWN0IHRlYW0gKnRlYW0sIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjk3LVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNjk4OmludCB0ZWFtX25sX29wdGlvbnNfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY5OS17XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yNzI3PXN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyOS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjczMDppbnQgdGVhbV9ubF9vcHRpb25zX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MzEte1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjkxMz1zdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9wb3J0X2xpc3RfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjk5Ni1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjk5NzppbnQgdGVhbV9ubF9wb3J0X2xpc3RfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjk5OC1cdFx0XHQgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGB0ZWFtX2FkZF9zbGF2ZWAgU3ltYm9sKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9sIGZvciBhbmFseXppbmcgdGhlIHNsYXZlIGFkZGl0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBuZXR3b3JrIHRlYW1pbmcgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBgbmRvX2FkZF9zbGF2ZWAsIHNpbmNlIHRoYXQmIzM5O3MgdGhlIGdlbmVyaWMgbmV0ZGV2IG9wZXJhdGlvbiB0aGF0IGFwcGVhcnMgdG8gYmUgdGhlIGVudHJ5IHBvaW50LiBJIHF1aWNrbHkgdHJhY2VkIHRoZSBjYWxsIHN0YWNrOiBgbmRvX2FkZF9zbGF2ZWAgaXMgY2FsbGVkIGZyb20gYG5ldC9jb3JlL3J0bmV0bGluay5jYCB0aHJvdWdoIGBkb19zZXRsaW5rYCwgdGhlbiBgbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGlua2AsIGZ1cnRoZXIgZG93biB0byBgX19uZXRkZXZfdXBwZXJfZGV2X2xpbmtgIGFuZCBmaW5hbGx5IGNhbGxpbmcgdGhlIHNwZWNpZmljIGRldmljZSYjMzk7cyBpbXBsZW1lbnRhdGlvbiB2aWEgYG9wcy0mZ3Q7bmRvX2FkZF9zbGF2ZWAuIFNvLCBJIHRob3VnaHQgbWF5YmUgSSBjb3VsZCBmb2N1cyBvbiBgdGVhbV9hZGRfc2xhdmVgIGlmIGl0JiMzOTtzIGZlYXNpYmxlIHRvIGNvbmNlbnRyYXRlIG9uIHN0YXRpYyBmdW5jdGlvbnMuCgpCdXQgd2FpdCBhIG1vbWVudC4gVGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBjbGVhcjogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBhIGNvbXBpbGVyJiMzOTtzIHBsYXlncm91bmQgYW5kIGRvbiYjMzk7dCBnZXQgZGlzdGluY3Qgc3ltYm9scy4gSG93ZXZlciwgSSBiZWxpZXZlIGB0ZWFtX2FkZF9zbGF2ZWAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIChgLm5kb19hZGRfc2xhdmVgKSwgc28gaXQgY2FuJiMzOTt0IGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgKmRvZXMqIGhhdmUgYSBjbGVhciBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgdmFsaWQgZm9jdXMuCgpJIGFsc28gY29uc2lkZXJlZCBgdGVhbV9wb3J0X2FkZGAgYXMgYSBwb3RlbnRpYWwgb3B0aW9uLiBJdCBpcyBzdGF0aWMsIGFuZCBteSBpbnR1aXRpb24gc3VnZ2VzdHMgdGhhdCBpdCBtaWdodCBiZSBpbmxpbmVkIGdpdmVuIGl0cyB0aWdodCBjb3VwbGluZyB3aXRoIGB0ZWFtX2FkZF9zbGF2ZWAuIFRodXMsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHRlYW1fcG9ydF9hZGRgIGlzIHVzZWQgYW55d2hlcmUgZWxzZSB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RlYW1fcG9ydF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NDA9c3RhdGljIHN0cnVjdCB0ZWFtX3BvcnQgKnRlYW1fcG9ydF9nZXRfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNDgtICogU2luY2UgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIGRldmljZSBhZGRyZXNzIGZvciBvcGVuIHBvcnQgZGV2aWNlIGlzIHRlc3RlZCBpblxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzo0OTogKiB0ZWFtX3BvcnRfYWRkLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sIG9mIHJldHVybiB2YWx1ZVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy01MC0gKi9cbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTEyMDk9c3RhdGljIGludCB0ZWFtX2Rldl90eXBlX2NoZWNrX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MTIxMjpzdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMy1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjExNz1zdGF0aWMgaW50IHRlYW1fYWRkX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2Rldixcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMjMtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIxMjQ6XHRyZXR1cm4gdGVhbV9wb3J0X2FkZCh0ZWFtLCBwb3J0X2RldiwgZXh0YWNrKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjEyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjk1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYHRlYW1fcG9ydF9hZGRgIEZ1bmN0aW9uIGFuZCBpdHMgQ29udGV4dCoqCgpSaWdodCwgc28gYHRlYW1fcG9ydF9hZGRgIGlzIG9ubHkgZXZlciBjYWxsZWQgYnkgYHRlYW1fYWRkX3NsYXZlYC4gIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgaW5saW5lZCwgb3IgYXQgbGVhc3QgaGlnaGx5IGludGVncmF0ZWQgd2l0aGluIHRoYXQgZnVuY3Rpb24mIzM5O3Mgc2NvcGUuIFNvLCBgdGVhbV9hZGRfc2xhdmVgIGlzIGRlZmluaXRlbHkgdGhlIG1vcmUgZnJ1aXRmdWwgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiB3b3Jrcy4gTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5lZWRlZD8KCkhtbSwgYE5FVF9URUFNYCBpcyB0aGUgYmlnIG9uZSwgb2YgY291cnNlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIG5lZWRzIHRvIGJlIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVEVBTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90ZWFtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzoyOm1lbnVjb25maWcgTkVUX1RFQU1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RXRoZXJuZXQgdGVhbSBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZz0xNj1pZiBORVRfVEVBTVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTE3LVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjE4OmNvbmZpZyBORVRfVEVBTV9NT0RFX0JST0FEQ0FTVFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjYXN0IG1vZGUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzoyOTpjb25maWcgTkVUX1RFQU1fTU9ERV9ST1VORFJPQklOXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMzAtXHR0cmlzdGF0ZSBcJiMzNDtSb3VuZC1yb2JpbiBtb2RlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNDAtXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6NDE6Y29uZmlnIE5FVF9URUFNX01PREVfUkFORE9NXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtSYW5kb20gbW9kZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTUyLVxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjUzOmNvbmZpZyBORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7QWN0aXZlLWJhY2t1cCBtb2RlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNjUtXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6NjY6Y29uZmlnIE5FVF9URUFNX01PREVfTE9BREJBTEFOQ0VcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy02Ny1cdHRyaXN0YXRlIFwmIzM0O0xvYWQtYmFsYW5jZSBtb2RlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5FVF9URUFNIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9URUFNYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBzZWUgdGhlICphY3R1YWwqIGNvbm5lY3Rpb25zLiBXaGF0IHN5c3RlbXMsIHNlcnZpY2VzLCBvciBldmVuIHNwZWNpZmljIGNvZGUgbW9kdWxlcyByZWx5IG9uIGBORVRfVEVBTWA/IEkmIzM5O20gbm90IGludGVyZXN0ZWQgaW4gc3VyZmFjZS1sZXZlbCBtZW50aW9uczsgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGNyaXRpY2FsIHBhdGhzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBkaXJlY3QgY2FsbHMsIGluZGlyZWN0IGRlcGVuZGVuY2llcyB0aHJvdWdoIHNoYXJlZCBsaWJyYXJpZXMsIG9yIGV2ZW4gc29mdCBkZXBlbmRlbmNpZXMgbWVkaWF0ZWQgYnkgbWVzc2FnZSBxdWV1ZXMgb3IgZGF0YSBzdG9yZXM/IFRoZSBnb2FsIGlzIGEgY2xlYXIgZGVwZW5kZW5jeSBncmFwaCwgcHJlZmVyYWJseSB3aXRoIHNvbWUgaW5kaWNhdGlvbiBvZiB0aGUgaW1wYWN0IGxldmVsIGZvciBhbnkgcGFydGljdWxhciBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gYXNzZXNzIGhvdyBmcmFnaWxlIHRoZSBzeXN0ZW0gaXMsIHdoYXQgcmVmYWN0b3Jpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgdGhlIHBvdGVudGlhbCBibGFzdCByYWRpdXMgaWYgd2UgbmVlZCB0byBtYWtlIGNoYW5nZXMgdG8gYE5FVF9URUFNYCBkb3duIHRoZSBsaW5lLiBJIGtub3cgdGhlIGRldmlsIGlzIG9mdGVuIGluIHRoZSBkZXRhaWxzLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgYXJlYXMgSSBuZWVkIHRvIGZvY3VzIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgTkVUX1RFQU1cbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0V0aGVybmV0IHRlYW0gZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBhbGxvd3Mgb25lIHRvIGNyZWF0ZSB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCB0ZWFtcyB0b2dldGhlclxuICAgNjpcdFx0ICBtdWx0aXBsZSBldGhlcm5ldCBkZXZpY2VzLlxuICAgNzpcdFxuICAgODpcdFx0ICBUZWFtIGRldmljZXMgY2FuIGJlIGFkZGVkIHVzaW5nIHRoZSBcJiMzNDtpcFwmIzM0OyBjb21tYW5kIGZyb20gdGhlXG4gICA5Olx0XHQgIGlwcm91dGUyIHBhY2thZ2U6XG4gIDEwOlx0XG4gIDExOlx0XHQgIFwmIzM0O2lwIGxpbmsgYWRkIGxpbmsgWyBhZGRyZXNzIE1BQyBdIFsgTkFNRSBdIHR5cGUgdGVhbVwmIzM0O1xuICAxMjpcdFxuICAxMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDE0Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHRlYW0uXG4gIDE1Olx0XG4gIDE2Olx0aWYgTkVUX1RFQU1cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTkVUX1RFQU1fTU9ERV9CUk9BRENBU1RcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY2FzdCBtb2RlIHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gTkVUX1RFQU1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgTkVUX1RFQU1gIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYE5FVF9URUFNYC4gSW5pdGlhbGx5LCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jaWVzIGxpc3RlZCwgc28gYE5FVF9URUFNYCBpdHNlbGYgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLiBIb3dldmVyLCBJJiMzOTt2ZSBnb3QgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gVGhlIHBhdGNoIGluY2x1ZGVzIGNoZWNrcyBmb3IgYEFSUEhSRF9DQU5gIGFuZCBgQVJQSFJEX0lFRUU4MDIxNTRgLiBOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXA6IGRvIHdlICpuZWVkKiBDQU4gYW5kIElFRUU4MDIxNTQgaW50ZXJmYWNlcyBwcmVzZW50IHRvIGZ1bGx5IHRlc3QgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBuZXcgZXJyb3IgcGF0aCBpdCBpbnRyb2R1Y2VzPyBZZXMsIHRvIHRydWx5IHZhbGlkYXRlIHRoZSBjb2RlIGNoYW5nZXMgYW5kIGV4ZXJjaXNlIHRoYXQgbmV3IGVycm9yIGhhbmRsaW5nLCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0byBoYXZlIGJvdGggQ0FOIGFuZCBJRUVFODAyMTU0IGRldmljZXMgYXZhaWxhYmxlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3MgYXJlIHNldCBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciBDQU4gYW5kIElFRUU4MDIxNTQgdG8gZW5zdXJlIHRoZXkgYXJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnLTUtXG5uZXQvY2FuL0tjb25maWc6NjptZW51Y29uZmlnIENBTlxubmV0L2Nhbi9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2Nhbi9LY29uZmlnPTIyPWlmIENBTlxubmV0L2Nhbi9LY29uZmlnLTIzLVxubmV0L2Nhbi9LY29uZmlnOjI0OmNvbmZpZyBDQU5fUkFXXG5uZXQvY2FuL0tjb25maWctMjUtXHR0cmlzdGF0ZSBcJiMzNDtSYXcgQ0FOIFByb3RvY29sIChyYXcgYWNjZXNzIHdpdGggQ0FOLUlEIGZpbHRlcmluZylcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWctMzMtXG5uZXQvY2FuL0tjb25maWc6MzQ6Y29uZmlnIENBTl9CQ01cbm5ldC9jYW4vS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY2FzdCBNYW5hZ2VyIENBTiBQcm90b2NvbCAod2l0aCBjb250ZW50IGZpbHRlcmluZylcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWctNDUtXG5uZXQvY2FuL0tjb25maWc6NDY6Y29uZmlnIENBTl9HV1xubmV0L2Nhbi9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7Q0FOIEdhdGV3YXkvUm91dGVyICh3aXRoIG5ldGxpbmsgY29uZmlndXJhdGlvbilcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xubmV0L2Nhbi9LY29uZmlnLTU4LVxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcbm5ldC9jYW4vS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0lTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMjkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipDb25zaWRlcmluZyBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgQ0FOLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYENBTmAgaXMgdGhlIGtleSBpZGVudGlmaWVyIGZvciB0aGUgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpOb3csIHRoYXQgYnJpbmdzIG1lIHRvIHRoZSBuZXh0IHByb3RvY29sIG9yIHN0YW5kYXJkIEkmIzM5O20gd29ya2luZyB3aXRoIG9yIHRoaW5raW5nIGFib3V0OiBJRUVFIDgwMi4xNS40LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgdGhhdCBzdGFuZGFyZCBhcyB3ZWxsLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBzeW50YXggb3IgbWV0aG9kIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUVFRTgwMjE1NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZz0xND1pZiBJRUVFODAyMTU0XG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTctXHRib29sIFwmIzM0O0lFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjIxOmNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSBsb29raW5nIGF0IHNldHRpbmcgdXAgdGhpcyBuZXcgZGV2aWNlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgb2YgY291cnNlLCB0aGUgYElFRUU4MDIxNTRgIGNvbmZpZ3VyYXRpb247IHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS4gQnV0IHdhaXQgYSBtaW51dGUsIEkgdGhpbmsgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBhbm90aGVyIHBpZWNlIG9mIHRoaXMgcHV6emxlLiBUbyBzaW11bGF0ZSBvciBjcmVhdGUgdGhlIENBTiBkZXZpY2UsIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBDQU5fVkNBTmAuIFRoYXQgd2lsbCBiZSBpbXBvcnRhbnQgZm9yIHRlc3RpbmcuIE9rYXksIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOX1ZDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vS2NvbmZpZz0yMz1pZiBDQU5fREVWXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0yNC1cbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjI1OmNvbmZpZyBDQU5fVkNBTlxuZHJpdmVycy9uZXQvY2FuL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIExvY2FsIENBTiBJbnRlcmZhY2UgKHZjYW4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTQ2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipDb25zaWRlcmluZyBJbXBsZW1lbnRhdGlvbiBTdHJhdGVnaWVzIGZvciBJRUVFODAyLjE1LjQqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IElFRUU4MDIuMTUuNCBpbXBsZW1lbnRhdGlvbiwgYW5kIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHRlc3RpbmcgYW5kIHNpbXVsYXRpb24gYXNwZWN0cy4gV2UmIzM5O2xsIGxpa2VseSBuZWVkIGEgdmlydHVhbCByZXByZXNlbnRhdGlvbiwgYSBkZXZpY2UgdGhhdCBjYW4gc3RhbmQgaW4gZm9yIGEgcGh5c2ljYWwgb25lLCBidXQgYWxsb3cgdXMgdG8gc2ltdWxhdGUgYmVoYXZpb3IuIFNvbWV0aGluZyBsaWtlIGEgYE1BQzgwMjE1NF9IV1NJTWAg4oCTIHBlcmhhcHMgaGFyZHdhcmUgc2ltdWxhdGlvbiDigJMgb3IgYSBgSUVFRTgwMjE1NF9GQUtFTEJgIOKAkyBtYXliZSBhICYjMzk7ZmFrZSBsb3dlciBib3VuZCYjMzk7IHRvIG1vZGVsIHNvbWUgY29uc3RyYWludHMg4oCTIHdvdWxkIGJlIGlkZWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCB0byBlbnN1cmUgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudCB3aXRob3V0IHJlcXVpcmluZyBhY3R1YWwgcGh5c2ljYWwgaGFyZHdhcmUgYXQgZXZlcnkgc3RlcC4gVGhpcyBuZWVkcyBjYXJlZnVsIGNvbnNpZGVyYXRpb247IGl0JiMzOTtzIGEga2V5IHBpZWNlIGluIGVuc3VyaW5nIGEgcm9idXN0IGFuZCBlZmZpY2llbnQgZGVzaWduIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxNTQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTU0L0tjb25maWc6Mjpjb25maWcgTUFDODAyMTU0XG5uZXQvbWFjODAyMTU0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTUuNCBTb2Z0IE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjE1NClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTmF2aWdhdGluZyB0aGUgSUVFRSA4MDIuMTUuNCBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhbiA4MDIuMTUuNCBuZXR3b3JrIGRyaXZlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTttIHJlYXNvbmFibHkgc3VyZSBJJiMzOTtsbCBmaW5kIHdoYXQgSSBuZWVkIGluIGVpdGhlciBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnYCBvciwgcGVyaGFwcyBpZiBpdCYjMzk7cyB1c2luZyB0aGUgbWFjODAyMTU0IHN0YWNrLCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTU0L0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCB0aGUgZ28tdG8gbG9jYXRpb25zIGZvciB0aGVzZSBzb3J0cyBvZiBsb3ctbGV2ZWwgbmV0d29ya2luZyBvcHRpb25zLiBJdCYjMzk7cyBhIGJpdCBvZiBhIGNvaW4gZmxpcCBpbml0aWFsbHksIHNvIEkmIzM5O2xsIGNoZWNrIGJvdGggYW5kIHNlZSB3aGljaCBvbmUgaGFzIHRoZSBtb3JlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2xzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBzcGVjaWZpYyBzY2VuYXJpbyBJJiMzOTttIGRlYWxpbmcgd2l0aC4gUHJvYmFibHkgdGhlIGZpcnN0LCBidXQgSSBzaG91bGQgY2hlY2sgdGhlIGxhdHRlciB0byBiZSBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qODAyMTU0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI6bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEzLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjE0OmNvbmZpZyBJRUVFODAyMTU0X0ZBS0VMQlxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMy1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyNDpjb25maWcgSUVFRTgwMjE1NF9BVDg2UkYyMzBcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yNS1cdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFx1MDAyNlx1MDAyNiBNQUM4MDIxNTRcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMzUtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MzY6Y29uZmlnIElFRUU4MDIxNTRfTVJGMjRKNDBcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zNy1cdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBNUkYyNEo0MCB0cmFuc2NlaXZlciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNDctXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6NDg6Y29uZmlnIElFRUU4MDIxNTRfQ0MyNTIwXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNDktXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTU4LVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjU5OmNvbmZpZyBJRUVFODAyMTU0X0FUVVNCXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtBVFVTQiB0cmFuc2NlaXZlciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNjgtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6Njk6Y29uZmlnIElFRUU4MDIxNTRfQURGNzI0MlxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7QURGNzI0MiB0cmFuc2NlaXZlciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNzktXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6ODA6Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctODEtXHR0cmlzdGF0ZSBcJiMzNDtDYXNjb2RhIENBODIxMCB0cmFuc2NlaXZlciBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctOTEtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6OTI6Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlNcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7Q0E4MjEwIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEwMS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxMDI6Y29uZmlnIElFRUU4MDIxNTRfTUNSMjBBXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTAzLVx0dHJpc3RhdGUgXCYjMzQ7TUNSMjBBIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMTMtXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MTE0OmNvbmZpZyBJRUVFODAyMTU0X0hXU0lNXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTE1LVx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY3OAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipFdmFsdWF0aW5nIFNpbXVsYXRpb24gQXBwcm9hY2hlcyBmb3IgSUVFRSA4MDIuMTUuNCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBkaWZmZXJlbnQgc2ltdWxhdGlvbiBvcHRpb25zIGZvciBJRUVFIDgwMi4xNS40LiBgSUVFRTgwMjE1NF9IV1NJTWAgYW5kIGBJRUVFODAyMTU0X0ZBS0VMQmAgc2VlbSBsaWtlIHByb21pc2luZyBzdGFydGluZyBwb2ludHMuIEkmIzM5O3ZlIGhlYXJkIGdvb2QgdGhpbmdzIGFib3V0IHRoZW0sIGJ1dCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBJRUVFODAyMTU0X0hXU0lNYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGxpYnJhcmllcyBpdCByZWxpZXMgb24uIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgb3ZlcmFsbCBjb21wbGV4aXR5LCBwb3J0YWJpbGl0eSwgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzLiBJdCBpcyB2aXRhbCB0byBtZSwgYXMgYW4gZXhwZXJ0LCB0byB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiBlYWNoIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XG4gMTExOlx0XHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cbiAxMTI6XHRcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAmIzM5O21jcjIwYSYjMzk7LlxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBJRUVFODAyMTU0X0hXU0lNXG4gMTE1Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4gMTE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxNTRcJiMzNDtcbiAxMTc6XHRcdGhlbHBcbiAxMTg6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuIDExOTpcdFx0ICBJRUVFIDgwMi4xNS40IG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjE1NCkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAxMjA6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd3BhbiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy5cbiAxMjE6XHRcbiAxMjI6XHRcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvIHNheSBNIGhlcmUuXG4gMTIzOlx0XHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJiMzOTttYWM4MDIxNTRfaHdzaW0mIzM5Oy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQ6CgoqKkNvbXBvbmVudCBDb25maWd1cmF0aW9uIFJldmlldyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBGaXJzdCwgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gSUVFRSA4MDIuMTUuNCwgSSBhYnNvbHV0ZWx5IG5lZWQgYElFRUU4MDIxNTRgLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZSBNQUMgbGF5ZXIgc3VwcG9ydCAoYE1BQzgwMjE1NGApIGhhcyB0byBiZSBpbmNsdWRlZC4gQW5kIG5hdHVyYWxseSwgSSYjMzk7bGwgbmVlZCB0aGUgZHJpdmVycyBhc3NvY2lhdGVkIHdpdGggSUVFRSA4MDIuMTUuNCAoYElFRUU4MDIxNTRfRFJJVkVSU2ApLCBhbG9uZyB3aXRoIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIGVsZW1lbnRzIChgSUVFRTgwMjE1NF9IV1NJTWApIHNvIHRoYXQgSSBjYW4gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgd29ya2luZyBjb3JyZWN0bHkgd2l0aG91dCBuZWVkaW5nIGFuIGFjdHVhbCA4MDIuMTUuNCByYWRpby4KCk5vdywgc2hpZnRpbmcgZ2VhcnMgdG8gQ0FOLCB0aGUgY29yZSBgQ0FOYCBmdW5jdGlvbmFsaXR5IGlzIG9idmlvdXNseSByZXF1aXJlZC4gSSYjMzk7bGwgbmVlZCBgQ0FOX1ZDQU5gIGFzIHdlbGwuIEhhbmcgb24uLi4gaXNuJiMzOTt0IGBDQU5fVkNBTmAgZGVwZW5kZW50IG9uIHNvbWV0aGluZz8gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYENBTl9ERVZgIG9wdGlvbi4gSnVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOX0RFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTItXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZzozOm1lbnVjb25maWcgQ0FOX0RFVlxuZHJpdmVycy9uZXQvY2FuL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0NBTiBEZXZpY2UgRHJpdmVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY0MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSBzZWUgd2UgbmVlZCBgQ0FOX0RFVmAuIFRpbWUgdG8gcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbC4gTGV0JiMzOTtzIHNlZS4uLiB3ZSYjMzk7dmUgZ290IGBORVRfVEVBTWAsIGBDQU5gLCBgQ0FOX0RFVmAsIGBDQU5fVkNBTmAsIGBJRUVFODAyMTU0YCwgYE1BQzgwMjE1NGAsIGBJRUVFODAyMTU0X0RSSVZFUlNgLCBhbmQgYElFRUU4MDIxNTRfSFdTSU1gLiBUaGF0IGNvdmVycyB0aGUgbGlrZWx5IHN1c3BlY3RzLgoKV2FpdCBhIHNlY29uZCwgSSBzZWUgYHRlYW1fYWRkX3NsYXZlYCBpcyBhc3NpZ25lZCB0byBgLm5kb19hZGRfc2xhdmVgLiBPa2F5LCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRoYXQgZGVzZXJ2ZSBvdXIgYXR0ZW50aW9uPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB0ZWFtX3BvcnRfYWRkYCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMgYW5kIG1pZ2h0IGJlIGlubGluZWQsIHNvIGl0IG1heSBuZWVkIGRpZmZlcmVudCBhdHRlbnRpb24uIFBlcmhhcHMgaXQmIzM5O3Mgd29ydGggY2hlY2tpbmcgaWYgYHRlYW1fcG9ydF9hZGRgICppcyogaW5saW5lZD8gSSBjYW4gbG9vayBhdCBpdHMgc2l6ZSwgdGhvdWdoIEkgdGhpbmsgSSYjMzk7bGwgZm9jdXMgb24gYHRlYW1fYWRkX3NsYXZlYCBmb3Igbm93IC0gaXQmIzM5O3MgYSBjbGVhbmVyIHN5bWJvbCB0byBpbnZlc3RpZ2F0ZS4gRWl0aGVyIHRoYXQsIG9yIEkmIzM5O2xsIGp1c3QgY2hlY2sgaWYgYHRlYW1fcG9ydF9hZGRgIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IHdvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMTI6XHRzdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcbjEyMTM6XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTIxNDpcdHtcbjEyMTU6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHRlYW0pO1xuMTIxNjpcdFx0c3RydWN0IHRlYW1fcG9ydCAqcG9ydDtcbjEyMTc6XHRcdGNoYXIgKnBvcnRuYW1lID0gcG9ydF9kZXYtXHUwMDNlbmFtZTtcbjEyMTg6XHRcdGludCBlcnI7XG4xMjE5Olx0XG4xMjIwOlx0XHRpZiAocG9ydF9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9MT09QQkFDSykge1xuMTIyMTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0xvb3BiYWNrIGRldmljZSBjYW4mIzM5O3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcJiMzNDspO1xuMTIyMjpcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7RGV2aWNlICVzIGlzIGxvb3BiYWNrIGRldmljZS4gTG9vcGJhY2sgZGV2aWNlcyBjYW4mIzM5O3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcXG5cJiMzNDssXG4xMjIzOlx0XHRcdFx0ICAgcG9ydG5hbWUpO1xuMTIyNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyMjU6XHRcdH1cbjEyMjY6XHRcbjEyMjc6XHRcdFx0aWYgKHBvcnRfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxuMTIyODpcdFx0XHQgICAgcG9ydF9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxuMTIyOTpcdFx0XHQgICAgcG9ydF9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7XG4xMjMwOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuMTIzMTpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O0NBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbiYjMzk7dCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFwmIzM0Oyk7XG4xMjMyOlx0XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O0RldmljZSAlcyBpcyBDQU4gb3IgSUVFRSA4MDIuMTUuNC4gVGhlc2UgZGV2aWNlIHR5cGVzIGNhbiYjMzk7dCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcblwmIzM0OyxcbjEyMzM6XHRcdFx0XHRcdCAgIHBvcnRuYW1lKTtcbjEyMzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyMzU6XHRcdFx0fVxuMTIzNjpcdFx0fVxuMTIzNzpcdFxuMTIzODpcdFx0aWYgKG5ldGlmX2lzX3RlYW1fcG9ydChwb3J0X2RldikpIHtcbjEyMzk6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtEZXZpY2UgaXMgYWxyZWFkeSBhIHBvcnQgb2YgYSB0ZWFtIGRldmljZVwmIzM0Oyk7XG4xMjQwOlx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgJXMgaXMgYWxyZWFkeSBhIHBvcnQgXCYjMzQ7XG4xMjQxOlx0XHRcdFx0XHRcJiMzNDtvZiBhIHRlYW0gZGV2aWNlXFxuXCYjMzQ7LCBwb3J0bmFtZSk7XG4xMjQyOlx0XHRcdHJldHVybiAtRUJVU1k7XG4xMjQzOlx0XHR9XG4xMjQ0Olx0XG4xMjQ1Olx0XHRpZiAoZGV2ID09IHBvcnRfZGV2KSB7XG4xMjQ2Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IGVuc2xhdmUgdGVhbSBkZXZpY2UgdG8gaXRzZWxmXCYjMzQ7KTtcbjEyNDc6XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O0Nhbm5vdCBlbnNsYXZlIHRlYW0gZGV2aWNlIHRvIGl0c2VsZlxcblwmIzM0Oyk7XG4xMjQ4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI0OTpcdFx0fVxuMTI1MDpcdFxuMTI1MTpcdFx0aWYgKG5ldGRldl9oYXNfdXBwZXJfZGV2KGRldiwgcG9ydF9kZXYpKSB7XG4xMjUyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RGV2aWNlIGlzIGFscmVhZHkgYW4gdXBwZXIgZGV2aWNlIG9mIHRoZSB0ZWFtIGludGVyZmFjZVwmIzM0Oyk7XG4xMjUzOlx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgJXMgaXMgYWxyZWFkeSBhbiB1cHBlciBkZXZpY2Ugb2YgdGhlIHRlYW0gaW50ZXJmYWNlXFxuXCYjMzQ7LFxuMTI1NDpcdFx0XHRcdCAgIHBvcnRuYW1lKTtcbjEyNTU6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjEyNTY6XHRcdH1cbjEyNTc6XHRcbjEyNTg6XHRcdGlmIChuZXRkZXZfaGFzX3VwcGVyX2Rldihwb3J0X2RldiwgZGV2KSkge1xuMTI1OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0RldmljZSBpcyBhbHJlYWR5IGEgbG93ZXIgZGV2aWNlIG9mIHRoZSB0ZWFtIGludGVyZmFjZVwmIzM0Oyk7XG4xMjYwOlx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgJXMgaXMgYWxyZWFkeSBhIGxvd2VyIGRldmljZSBvZiB0aGUgdGVhbSBpbnRlcmZhY2VcXG5cJiMzNDssXG4xMjYxOlx0XHRcdFx0ICAgcG9ydG5hbWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA4OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbmV0d29ya2luZyBjb2RlOgoKKipBbmFseXppbmcgVGVhbSBJbnRlcmZhY2UgU2xhdmUgQWRkaXRpb24qKgoKUmlnaHQsIHNvIGB0ZWFtX3BvcnRfYWRkYCBpcyBhIGhlZnR5IGZ1bmN0aW9uLCBsaWtlbHkgbm90IGlubGluZWQuIEl0JiMzOTtzIHByb2JhYmx5IGRvaW5nIGEgYnVuY2ggb2Ygc2V0dXAsIGNvbmZpZ3VyYXRpb24sIGFuZCBkZXZpY2UtbGV2ZWwgbWFuaXB1bGF0aW9ucy4gVGhlIG1vcmUgaW50ZXJlc3RpbmcgZW50cnkgcG9pbnQsIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIGdyb3VuZCBsZXZlbCwgaXMgZGVmaW5pdGVseSBgdGVhbV9hZGRfc2xhdmVgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGh5cG90aGVzaXMgYW5kIGRpdmUgcmlnaHQgaW50byBgdGVhbV9hZGRfc2xhdmVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGFkZGluZyBhIHNsYXZlIGludGVyZmFjZSB0byB0aGUgdGVhbSBwcm9iYWJseSByZXNpZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMTc6XHRzdGF0aWMgaW50IHRlYW1fYWRkX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcbjIxMTg6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjIxMTk6XHR7XG4yMTIwOlx0XHRzdHJ1Y3QgdGVhbSAqdGVhbSA9IG5ldGRldl9wcml2KGRldik7XG4yMTIxOlx0XG4yMTIyOlx0XHRBU1NFUlRfUlROTCgpO1xuMjEyMzpcdFxuMjEyNDpcdFx0cmV0dXJuIHRlYW1fcG9ydF9hZGQodGVhbSwgcG9ydF9kZXYsIGV4dGFjayk7XG4yMTI1Olx0fVxuMjEyNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ2MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUZWFtIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGB0ZWFtX2FkZF9zbGF2ZWAgaXMgZXNzZW50aWFsbHkgYSB0aGluIGxheWVyIG92ZXIgYHRlYW1fcG9ydF9hZGRgLiBTaW5jZSBpdCYjMzk7cyBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIsIGlubGluaW5nIGlzIG91dCB0aGUgd2luZG93IGZvciBgdGVhbV9hZGRfc2xhdmVgLCBidXQgYHRlYW1fcG9ydF9hZGRgIGlzIHRoZSBtb3JlIGxpa2VseSBjYW5kaWRhdGUgdG8gYmUgaW5saW5lZCBpbnRvIGl0LiBUaGF0IG1lYW5zIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgdGVhbV9hZGRfc2xhdmVgIGl0c2VsZiBmb3Igbm93LgoKTGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4uLiBgTkVUX1RFQU1gLCBgQ0FOYCwgYENBTl9ERVZgLCBgQ0FOX1ZDQU5gLCBgSUVFRTgwMjE1NGAsIGBNQUM4MDIxNTRgLCBgSUVFRTgwMjE1NF9EUklWRVJTYCwgYW5kIGBJRUVFODAyMTU0X0hXU0lNYC4KCkhvbGQgb24uLi4gSSBkb24mIzM5O3QgdGhpbmsgSSBuZWVkIGBJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTGAuIEFuZCBmb3IgQ0FOLCBqdXN0IGBDQU5fVkNBTmAgc2VlbXMgc3VmZmljaWVudCBmb3IgY3JlYXRpbmcgYSBDQU4gZGV2aWNlOyBJIGRvbiYjMzk7dCBuZWVkIGBDQU5fUkFXYCBvciBgQ0FOX0JDTWAuIFdhaXQgYSBzZWNvbmQuLi4gYENBTl9WQ0FOYCBpcyBhIHZpcnR1YWwgZGV2aWNlISBQZXJmZWN0IGZvciBmdXp6aW5nISBBbmQgdGhlIHNhbWUgZ29lcyBmb3IgYElFRUU4MDIxNTRfSFdTSU1gIOKAkyBhbm90aGVyIHZpcnR1YWwgODAyLjE1LjQgZGV2aWNlIGlkZWFsIGZvciBmdXp6aW5nLgoKTm93LCBqdXN0IHRvIGJlIHN1cmUsIGxldCYjMzk7cyB2ZXJpZnkgYElFRUU4MDIxNTRfSFdTSU1gJiMzOTtzIGRlcGVuZGVuY2llcy4gSXQgc2VlbXMgaXQgcmVxdWlyZXMgYElFRUU4MDIxNTRfRFJJVkVSU2AgYW5kIGBNQUM4MDIxNTRgLiBgTUFDODAyMTU0YCBpbiB0dXJuIHJlcXVpcmVzIGBJRUVFODAyMTU0YC4gT2theSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1BQzgwMjE1NGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxNTQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTU0L0tjb25maWc6Mjpjb25maWcgTUFDODAyMTU0XG5uZXQvbWFjODAyMTU0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTUuNCBTb2Z0IE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjE1NClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIE1BQyA4MDIuMTUuNCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L21hYzgwMjE1NC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBJRUVFIDgwMi4xNS40IE1BQyBsYXllciBpbiB0aGUga2VybmVsIHJlc2lkZXMuIEkga25vdyB0aGlzIGZpbGUgaW50aW1hdGVseSDigJMgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIgdG8gY3VzdG9taXppbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBzdGFjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBpbiBoZXJlLCBlc3BlY2lhbGx5IGlmIEkmIzM5O20gbG9va2luZyBhdCBtb2RpZnlpbmcgb3IgZGVidWdnaW5nIHNvbWUgODAyLjE1LjQgcmVsYXRlZCBkcml2ZXIgb3IgZnVuY3Rpb25hbGl0eS4gSSBleHBlY3QgdG8gZmluZCB0aGUgdXN1YWwgc3VzcGVjdHM6IG9wdGlvbnMgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB2YXJpb3VzIE1BQyBmZWF0dXJlcywgc2VsZWN0aW5nIGRlZmF1bHQgcGFyYW1ldGVycywgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIGRpZmZlcmVudCBQSFkgaW50ZXJmYWNlcyB0aGF0IHRoaXMgTUFDIGxheWVyIHN1cHBvcnRzLiBJJiMzOTttIGhvcGluZyBJJiMzOTtsbCBhbHNvIHNlZSBzb21lIG5ldyBhZGRpdGlvbnMgdG8ga2VlcCB1cCB3aXRoIHRoZSBsYXRlc3Qgd2lyZWxlc3Mgc3RhbmRhcmRzLCBzdWNoIGFzIElFRUUgODAyLjE1LjQtMjAyMC4gSeKAmWxsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9ucyBjYW4gc3VwcG9ydCB0aGUgbmV3IHdpcmVsZXNzIHN0YW5kYXJkIHRvIGJlIGNvbXBsaWFudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTU0XG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRcbiAgIDU6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICAgODpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQ1RSXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgyNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgODAyLjE1LjQgTGFuZHNjYXBlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCB0aGUgZnVuZGFtZW50YWwgcmVsYXRpb25zaGlwIGhlcmUuIENsZWFybHksIGBNQUM4MDIxNTRgIGlzIGJ1aWx0IHVwb24gdGhlIGZvdW5kYXRpb24gb2YgYElFRUU4MDIxNTRgLiBUaGF04oCZcyB0aGUgY29yZSByZWxhdGlvbnNoaXAgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgdGhlIE1BQyBsYXllciByZWx5aW5nIG9uIHRoZSBicm9hZGVyIHBoeXNpY2FsIGFuZCBNQUMgc3BlY2lmaWNhdGlvbnMuIEl0JiMzOTtzIHRoZSBtb3N0IGJhc2ljIGRlcGVuZGVuY3kuCgpOb3csIHRoZSBmb2xsb3ctdXAsIGFuZCB0aGUgbW9yZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBmb3IgbWUsIGNvbmNlcm5zIGBJRUVFODAyMTU0X0RSSVZFUlNgLiBBcmUgdGhlc2UgbmVjZXNzYXJpbHkgbW9ub2xpdGhpYz8gRG8gd2Ugc2VlIHRpZ2h0IGNvdXBsaW5nIG9yIGxvb3NlIGNvdXBsaW5nIGJldHdlZW4gdGhlIGRyaXZlcnMgYW5kIHRoYXQgcHJvdG9jb2w/IEFyZSB0aGUgZHJpdmVyIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYywgb3IgY2FuIHdlIHRhbGsgYWJvdXQgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnM/IFdlIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZXNlIGRyaXZlcnMgYXJlIHN0cnVjdHVyZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc3RhY2suIFRoZXkmIzM5O3JlIGNyaXRpY2FsLiBBcmUgdGhleSB0aWdodGx5IGJvdW5kIHRvIHNwZWNpZmljIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIGlzIHRoZXJlIGEgbW9yZSBhYnN0cmFjdCBsYXllciBpbnZvbHZlZD8gSSBpbW1lZGlhdGVseSB3YW50IHRvIGtub3cgaG93IGFkYXB0YWJsZSB0aGV5IGFyZS4gSG93IHBvcnRhYmxlIGFyZSB3ZSB0YWxraW5nPyBUaGF04oCZcyB3aGF04oCZcyByZWFsbHkgcmVsZXZhbnQgdG8gbWUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElFRUU4MDIxNTRfRFJJVkVSU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBkcml2ZXJzXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IElFRUU4MDIxNTRcbiAgIDU6XHRcdGRlZmF1bHQgeVxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBMb3ctUmF0ZVxuICAgODpcdFx0ICBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuIFRoaXMgb3B0aW9uIGFsb25lXG4gICA5Olx0XHQgIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXG4gIDEwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzEzCgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDcxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIE5ldHdvcmsgVGVhbSBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCBhIGRlcGVuZGVuY3kgY2hhaW4uIGBJRUVFODAyMTU0X0RSSVZFUlNgIGhpbmdlcyBvbiBgTkVUREVWSUNFU2AgYW5kIGBJRUVFODAyMTU0YC4gVGhlcmVmb3JlLCB0byBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQsIEkmIzM5O2xsIG5lZWQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBORVRfVEVBTWAsIGBDQU5gLCBgQ0FOX0RFVmAsIGBDQU5fVkNBTmAsIGBJRUVFODAyMTU0YCwgYE1BQzgwMjE1NGAsIGBJRUVFODAyMTU0X0RSSVZFUlNgLCBhbmQgYElFRUU4MDIxNTRfSFdTSU1gLgoKTm93LCB0aGUgY29yZSBvZiB0aGUgaXNzdWU6IGB0ZWFtX3BvcnRfYWRkYCBnZXRzIGNhbGxlZCB3aGVuIHdlJiMzOTtyZSB0cnlpbmcgdG8gYWRkIGEgcG9ydCB0byBhIHRlYW0gZGV2aWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBwb3J0IGlzIENBTiBvciBJRUVFODAyMTU0LiBJZiBzbywgaXQgaW1tZWRpYXRlbHkgdGhyb3dzIGFuIGVycm9yLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGZpeCwgZGVzaWduZWQgdG8gcHJldmVudCBhIGNyYXNoIG9yIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgaXQgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluay4gR2l2ZW4gdGhpcywgaXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc29saWRpZnkgdGhlIGVudHJ5IHBvaW50LiBJcyBgdGVhbV9hZGRfc2xhdmVgIHRoZSBvbmx5IHBsYWNlIGB0ZWFtX3BvcnRfYWRkYCBnZXRzIGNhbGxlZD8gQSBxdWljayBncmVwIGNvbmZpcm1lZCBpdDsgYHRlYW1fcG9ydF9hZGRgIGlzICpvbmx5KiBjYWxsZWQgYnkgYHRlYW1fYWRkX3NsYXZlYC4gU28sIGB0ZWFtX2FkZF9zbGF2ZWAgaXMgb3VyIGtleSBzeW1ib2wuCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIGBORVRfVEVBTWAgaXMgYSB0cmlzdGF0ZSwgc28gZW5hYmxpbmcgaXQgaXMgZnVuZGFtZW50YWwuIFdoaWxlIHdlJiMzOTtyZSBhdCBpdCwgZW5hYmxpbmcgdGhlIGRpZmZlcmVudCBtb2RlcyDigJMgYE5FVF9URUFNX01PREVfQlJPQURDQVNUYCwgYE5FVF9URUFNX01PREVfUk9VTkRST0JJTmAsIGBORVRfVEVBTV9NT0RFX1JBTkRPTWAsIGBORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUGAsIGBORVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFYCDigJMgY291bGQgYmUgcHJ1ZGVudCBmb3IgYnJvYWRlciB0ZXN0aW5nLCBldmVuIHRob3VnaCB0aGUgYnVnJiMzOTtzIGluIGB0ZWFtX2NvcmUuY2AsIHdoaWNoIGNvbXBpbGVzIHdpdGgganVzdCBgTkVUX1RFQU1gLiBTbywgYE5FVF9URUFNYCBpcyBzdWZmaWNpZW50LCBidXQgdGhvc2Ugb3RoZXJzIG1pZ2h0IGV4cGFuZCB0aGUgdGVzdCBzdXJmYWNlLgoKRmluYWxseSwgbGV0JiMzOTtzIHJldmlzaXQgdGhlIHBhdGNoIGl0c2VsZi4KCmBgYGMKJiM0MzsJCWlmIChwb3J0X2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfQ0FOIHx8CiYjNDM7CQkgICAgcG9ydF9kZXYtJmd0O3R5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTQgfHwKJiM0MzsJCSAgICBwb3J0X2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW4mIzM5O3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnQmIzM0Oyk7CiYjNDM7CQkJbmV0ZGV2X2VycihkZXYsICYjMzQ7RGV2aWNlICVzIGlzIENBTiBvciBJRUVFIDgwMi4xNS40LiBUaGVzZSBkZXZpY2UgdHlwZXMgY2FuJiMzOTt0IGJlIGFkZGVkIGFzIGEgdGVhbSBwb3J0XG4mIzM0OywKJiM0MzsJCQkJICAgcG9ydG5hbWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQpgYGAKCkl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrOiBpZiB0aGUgZGV2aWNlIHR5cGUgbWF0Y2hlcyBgQVJQSFJEX0NBTmAsIGBBUlBIUkRfSUVFRTgwMjE1NGAsIG9yIGBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SYCwgd2UgZ2V0IHRoZSBlcnJvci4KClRvIHJlY2FwLCB0aGUgZm9jdXMgc3ltYm9sIGlzIGB0ZWFtX2FkZF9zbGF2ZWAsIGFuZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGBORVRfVEVBTWAsIGBDQU5gLCBgQ0FOX0RFVmAsIGBDQU5fVkNBTmAsIGBJRUVFODAyMTU0YCwgYE1BQzgwMjE1NGAsIGBJRUVFODAyMTU0X0RSSVZFUlNgLCBhbmQgYElFRUU4MDIxNTRfSFdTSU1gLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1RFQU0mIzM0OywKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O0NBTl9ERVYmIzM0OywKICAgICYjMzQ7Q0FOX1ZDQU4mIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9EUklWRVJTJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0ZWFtX2FkZF9zbGF2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRlYW1fcG9ydF9hZGRgIChjYWxsZWQgdmlhIGB0ZWFtX2FkZF9zbGF2ZWApIHRvIHByZXZlbnQgYWRkaW5nIENBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGFzIHRlYW0gcG9ydHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjb25maWd1cmluZyB0ZWFtIGRldmljZXMuIEZ1enppbmcgcmVxdWlyZXMgdGhlIHRlYW0gZHJpdmVyIGFuZCB2aXJ0dWFsIENBTi9JRUVFODAyMTU0IGRldmljZXMgdG8gYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1RFQU0mIzM0OywKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O0NBTl9ERVYmIzM0OywKICAgICYjMzQ7Q0FOX1ZDQU4mIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxNTQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NF9EUklWRVJTJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0ZWFtX2FkZF9zbGF2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRlYW1fcG9ydF9hZGRgIChjYWxsZWQgdmlhIGB0ZWFtX2FkZF9zbGF2ZWApIHRvIHByZXZlbnQgYWRkaW5nIENBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGFzIHRlYW0gcG9ydHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjb25maWd1cmluZyB0ZWFtIGRldmljZXMuIEZ1enppbmcgcmVxdWlyZXMgdGhlIHRlYW0gZHJpdmVyIGFuZCB2aXJ0dWFsIENBTi9JRUVFODAyMTU0IGRldmljZXMgdG8gYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjA4LjgyNTI1ODAwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjAzMTIzMjAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVEVBTVwiLFxuICAgIFwiQ0FOXCIsXG4gICAgXCJDQU5fREVWXCIsXG4gICAgXCJDQU5fVkNBTlwiLFxuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X0RSSVZFUlNcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZWFtX2FkZF9zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiBgdGVhbV9wb3J0X2FkZGAgKGNhbGxlZCB2aWEgYHRlYW1fYWRkX3NsYXZlYCkgdG8gcHJldmVudCBhZGRpbmcgQ0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgYXMgdGVhbSBwb3J0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRlYW0gZGV2aWNlcy4gRnV6emluZyByZXF1aXJlcyB0aGUgdGVhbSBkcml2ZXIgYW5kIHZpcnR1YWwgQ0FOL0lFRUU4MDIxNTQgZGV2aWNlcyB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzowOC44MjUyNjU2MDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjQ2NTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDczMGJiNGFhNjc3Nzk4ODU1OGI4YzBhYWI5MzBiMWYyNWY4YjE4YjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjkgMjE6NDM6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcXG5pbmRleCBmZWFhNzVmYmY4ZmMyLi5kOGM0NjEwNWZjOGJkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXFxuQEAgLTEyMjQsNiArMTIyNCwxNyBAQCBzdGF0aWMgaW50IHRlYW1fcG9ydF9hZGQoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdFxcdGlmIChwb3J0X2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOIHx8XFxuK1xcdFxcdCAgICBwb3J0X2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxcbitcXHRcXHQgICAgcG9ydF9kZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiQ0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgY2FuJ3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcXFwiKTtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJEZXZpY2UgJXMgaXMgQ0FOIG9yIElFRUUgODAyLjE1LjQuIFRoZXNlIGRldmljZSB0eXBlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgcG9ydG5hbWUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRpZiAobmV0aWZfaXNfdGVhbV9wb3J0KHBvcnRfZGV2KSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJEZXZpY2UgaXMgYWxyZWFkeSBhIHBvcnQgb2YgYSB0ZWFtIGRldmljZVxcXCIpO1xcbiBcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIkRldmljZSAlcyBpcyBhbHJlYWR5IGEgcG9ydCBcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjA5LjMxMjUyOTI3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMTU0Mzk1MjU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVEVBTVwiLFxuICAgIFwiQ0FOXCIsXG4gICAgXCJDQU5fREVWXCIsXG4gICAgXCJDQU5fVkNBTlwiLFxuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X0RSSVZFUlNcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZWFtX2FkZF9zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiBgdGVhbV9wb3J0X2FkZGAgKGNhbGxlZCB2aWEgYHRlYW1fYWRkX3NsYXZlYCkgdG8gcHJldmVudCBhZGRpbmcgQ0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgYXMgdGVhbSBwb3J0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRlYW0gZGV2aWNlcy4gRnV6emluZyByZXF1aXJlcyB0aGUgdGVhbSBkcml2ZXIgYW5kIHZpcnR1YWwgQ0FOL0lFRUU4MDIxNTQgZGV2aWNlcyB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MzBiYjRhYTY3Nzc5ODg1NThiOGMwYWFiOTMwYjFmMjVmOGIxOGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMjE6NDM6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jIGIvZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY1xuaW5kZXggZmVhYTc1ZmJmOGZjMi4uZDhjNDYxMDVmYzhiZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcbkBAIC0xMjI0LDYgKzEyMjQsMTcgQEAgc3RhdGljIGludCB0ZWFtX3BvcnRfYWRkKHN0cnVjdCB0ZWFtICp0ZWFtLCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0XHRpZiAocG9ydF9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOIHx8XG4rXHRcdCAgICBwb3J0X2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0IHx8XG4rXHRcdCAgICBwb3J0X2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHtcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFwiKTtcbitcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCJEZXZpY2UgJXMgaXMgQ0FOIG9yIElFRUUgODAyLjE1LjQuIFRoZXNlIGRldmljZSB0eXBlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcblwiLFxuK1x0XHRcdFx0ICAgcG9ydG5hbWUpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRpZiAobmV0aWZfaXNfdGVhbV9wb3J0KHBvcnRfZGV2KSkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiRGV2aWNlIGlzIGFscmVhZHkgYSBwb3J0IG9mIGEgdGVhbSBkZXZpY2VcIik7XG4gXHRcdG5ldGRldl9lcnIoZGV2LCBcIkRldmljZSAlcyBpcyBhbHJlYWR5IGEgcG9ydCBcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MDkuMzEyNTMwNzA3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NDYxNTk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRlYW0gRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY2AuIEl0IHNlZW1zIHRoZXkndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gdGhlIGB0ZWFtX3BvcnRfYWRkYCBmdW5jdGlvbi4gVGhlIHB1cnBvc2UsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gYWN0aXZlbHkgcHJldmVudCBDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBmcm9tIGJlaW5nIGFkZGVkIGFzIHRlYW0gcG9ydHMuIFRoYXQncyBhIHZlcnkgc3BlY2lmaWMgZnVuY3Rpb25hbCBjaGFuZ2UsIGNsZWFybHkgdGFyZ2V0aW5nIGEgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgY29uZmlndXJhdGlvbi5cblxuVGhpbmtpbmcgYWJvdXQgaXQsIHRoZSBvbmx5IHdheSB0byB0cmlnZ2VyIGB0ZWFtX3BvcnRfYWRkYCBpcyB0aHJvdWdoIG5ldGxpbmsg4oCTIHNwZWNpZmljYWxseSwgd2hlbiBzb21lb25lIGlzIHRyeWluZyB0byBhZGQgYSBwb3J0IHRvIGEgdGVhbSBkZXZpY2UuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgcHJldmVudCBzb21lIG9ic2N1cmUsIGJ1dCBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSwgYmVoYXZpb3IuIEl0J3MgYSB0YXJnZXRlZCBkZWZlbnNlIGFnYWluc3QgYSBzcGVjaWZpYywgYWxiZWl0IHBlcmhhcHMgcmFyZSwgc2NlbmFyaW8uXG5cblNpbmNlIGl0IGludm9sdmVzIHRoZSB0ZWFtIGRyaXZlciwgdGhlIHdob2xlIHRoaW5nIGlzIGdvdmVybmVkIGJ5IHRoZSBgQ09ORklHX05FVF9URUFNYCBLY29uZmlnIG9wdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIGFueSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBORVRfVEVBTWAuIEkgc2hvdWxkIHByb2JhYmx5IGVuc3VyZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhlIG1vZHVsZSBkb2VzIG5vdCBicmVhayBhbnkgb3RoZXIgbmV0d29yayBpbnRlcmZhY2UgYXMgYSByZWdyZXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MTMuMzA3MTQ5MzY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODkzODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfVEVBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90ZWFtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfVEVBTVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJFdGhlcm5ldCB0ZWFtIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnPTE2PWlmIE5FVF9URUFNXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzoxODpjb25maWcgTkVUX1RFQU1fTU9ERV9CUk9BRENBU1RcXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkJyb2FkY2FzdCBtb2RlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjI5OmNvbmZpZyBORVRfVEVBTV9NT0RFX1JPVU5EUk9CSU5cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlJvdW5kLXJvYmluIG1vZGUgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6NDE6Y29uZmlnIE5FVF9URUFNX01PREVfUkFORE9NXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJSYW5kb20gbW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTUyLVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzo1Mzpjb25maWcgTkVUX1RFQU1fTU9ERV9BQ1RJVkVCQUNLVVBcXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIkFjdGl2ZS1iYWNrdXAgbW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTY1LVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzo2Njpjb25maWcgTkVUX1RFQU1fTU9ERV9MT0FEQkFMQU5DRVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy02Ny1cXHR0cmlzdGF0ZSBcXFwiTG9hZC1iYWxhbmNlIG1vZGUgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MTMuMzUyMDQ5MjU3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMDYwMjAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgdGVhbV9wb3J0X2FkZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGBORVRfVEVBTWAsIGFuZCBpdCdzIHBvaW50aW5nIG1lIHRvd2FyZHMgdGhlIGZ1bmN0aW9uIGB0ZWFtX3BvcnRfYWRkYC4gTXkgZXhwZXJ0IGludHVpdGlvbiBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyB0aGF0IHdvdWxkIGxpa2VseSBiZW5lZml0IGZyb20gZnV6emluZy4gQW55dGltZSBJIHNlZSBhIG5ldHdvcmstcmVsYXRlZCBmdW5jdGlvbiwgZXNwZWNpYWxseSBvbmUgZGVhbGluZyB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIHBvcnQsIG15IG1pbmQgZ29lcyBzdHJhaWdodCB0byBlZGdlIGNhc2VzLCBidWZmZXIgb3ZlcmZsb3dzLCBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gQmVmb3JlIEkgZGl2ZSBpbiwgdGhvdWdoLCBJIG5lZWQgdG8ga25vdyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uOiBJcyBgdGVhbV9wb3J0X2FkZGAgYSBzdGF0aWMgZnVuY3Rpb24/IFRoYXQgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBteSBmdXp6aW5nIHN0cmF0ZWd5IGFuZCBob3cgSSBhcHByb2FjaCB0ZXN0aW5nIGl0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHZpc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UgYmVmb3JlIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjE2LjU4MjY2MjU4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ1NTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZWFtX3BvcnRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz00MD1zdGF0aWMgc3RydWN0IHRlYW1fcG9ydCAqdGVhbV9wb3J0X2dldF9ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQ4LSAqIFNpbmNlIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBkZXZpY2UgYWRkcmVzcyBmb3Igb3BlbiBwb3J0IGRldmljZSBpcyB0ZXN0ZWQgaW5cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjQ5OiAqIHRlYW1fcG9ydF9hZGQsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRob3V0IGNvbnRyb2wgb2YgcmV0dXJuIHZhbHVlXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy01MC0gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTIwOT1zdGF0aWMgaW50IHRlYW1fZGV2X3R5cGVfY2hlY2tfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTEyMTEtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoxMjEyOnN0YXRpYyBpbnQgdGVhbV9wb3J0X2FkZChzdHJ1Y3QgdGVhbSAqdGVhbSwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMy1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMTE3PXN0YXRpYyBpbnQgdGVhbV9hZGRfc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTIzLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjEyNDpcXHRyZXR1cm4gdGVhbV9wb3J0X2FkZCh0ZWFtLCBwb3J0X2RldiwgZXh0YWNrKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzoxNi42MzAxMjIyMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQ0ODM4NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYHRlYW1fcG9ydF9hZGRgIEZ1bmN0aW9uIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkndmUgbm90aWNlZCB0aGF0IGB0ZWFtX3BvcnRfYWRkYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgc3BlY2lmaWMgYmVoYXZpb3IuIE5vdywgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBjb21lcyBmcm9tIGB0ZWFtX2FkZF9zbGF2ZWAuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGB0ZWFtX2FkZF9zbGF2ZWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHB1cnBvc2Ugb2YgY2FsbGluZyB0aGlzIHN0YXRpYyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBmcm9tIGB0ZWFtX2FkZF9zbGF2ZWAgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2h5IHRoaXMgYHRlYW1fcG9ydF9hZGRgIGZ1bmN0aW9uIGlzIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjE5LjQ3NDk2NDA2NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc5OTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZWFtX2FkZF9zbGF2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjA5OD1zdGF0aWMgaW50IHRlYW1fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTE2LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjExNzpzdGF0aWMgaW50IHRlYW1fYWRkX3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpwb3J0X2RldixcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMTgtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTIxODE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0ZWFtX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxOTktI2VuZGlmXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMjAwOlxcdC5uZG9fYWRkX3NsYXZlXFx0XFx0PSB0ZWFtX2FkZF9zbGF2ZSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIyMDEtXFx0Lm5kb19kZWxfc2xhdmVcXHRcXHQ9IHRlYW1fZGVsX3NsYXZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzoxOS41MjA3Njc4MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODI2MTg5ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRlYW0gSW50ZXJmYWNlIFNsYXZlIEFkZGl0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgc2xhdmUgaW50ZXJmYWNlcyBnZXQgYWRkZWQgdG8gYSB0ZWFtIGludGVyZmFjZS4gYHRlYW1fYWRkX3NsYXZlYCBpcyBjbGVhcmx5IGEga2V5IGZ1bmN0aW9uLCBidXQgaXQncyBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCBtZWFucyBpdCdzIHBhcnQgb2YgYW4gYG5kb2AgY2FsbGJhY2ssIHNwZWNpZmljYWxseSBgbmRvX2FkZF9zbGF2ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBmdWxsIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzIHRvIGNvbnNpZGVyPyBMZXQgbWUgdGhpbmsuLi4gcGVyaGFwcyBgdGVhbV9ubF9jbWRfcG9ydF9saXN0X2dldGA/IEhtbSwgbm8sIEkgZG91YnQgdGhhdCdzIGZvciAqYWRkaW5nKiBhIHBvcnQ7IGl0IHNvdW5kcyBtb3JlIGxpa2UgbGlzdGluZyB0aGVtLlxuXG5XYWl0IGEgc2Vjb25kLCAqaG93KiBpcyBhIHBvcnQgYWN0dWFsbHkgYWRkZWQgaW4gdGhlIGZpcnN0IHBsYWNlPyBMZXQgbWUgdHJhY2UgdGhpcyBiYWNrLi4uIEl0IHNlZW1zIGxpa2UgYHRlYW1fYWRkX3NsYXZlYCBpcyB0aGUgcHJpbWFyeSBtZWNoYW5pc20sIGFuZCB0aGF0J3MgdGhlIHNhbWUgYXMgYG5kb19hZGRfc2xhdmVgLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGl0IGlzIGNhbGxlZCBieSBgZG9fc2V0bGlua2Agb3IgYGlmZW5zbGF2ZWAgaW9jdGwgY2FsbHMsIEkgc2hvdWxkIHJlbWVtYmVyIHRoYXQgZm9yIHRoZSBmdXR1cmUuIEknbSByZWNhbGxpbmcgc29tZXRoaW5nIGFib3V0IGBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9saW5rYCBpbiB0aGlzIGNvbnRleHQsIGJ1dCBJIGRvbid0IHRoaW5rIGl0IGlzIGNhbGxpbmcgdGhlIGBuZG9fYWRkX3NsYXZlYC4gU28sIEkgc2hvdWxkIGhhdmUgYSBsb29rIGluIHRoZXNlIGlvY3RsIGNvbW1hbmRzLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIE5ldGxpbmsgaW50ZXJmYWNlIGZvciB0ZWFtLiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRoZXJlIHdpbGwgYmUgTmV0bGluayBmdW5jdGlvbmFsaXR5IGhlcmUgdG9vLiBJIHNob3VsZCBjaGVjayBgdGVhbV9ubF9jbWRfcG9ydF9hZGRgLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBOZXRsaW5rIHNpZGUgb2YgdGhpbmdzIGhhcHBlbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlciBzcGFjZSBpbnRlcmFjdHMgd2l0aCBhbGwgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzoyNC4zNDY5NjA3NTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzY5MDU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZWFtX25sX2NtZF9wb3J0X2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzoyNC4zOTQ3NDExNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2Njk4MjkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDb21tYW5kIExpbmUgT3B0aW9uIFNldHRpbmdzKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCBpbnN0aW5jdCBoZXJlIGlzIHRvIGRlbHZlIGludG8gdGhlIG1lY2hhbmlzbSB0aGF0IG1hbmFnZXMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZvciB0aGUgdGVhbSBuZXR3b3JrIGxpYnJhcnkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHNldHRpbmdzIGFyZSBoYW5kbGVkLiBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGZ1bmN0aW9ucyBuYW1lZCBzaW1pbGFybHkgdG8gYHRlYW1fbmxfY21kX29wdGlvbnNfc2V0YCwgb3Igc29tZXRoaW5nIGFsb25nIHRob3NlIGxpbmVzLiBJIGV4cGVjdCB0aGVyZSdzIGEgZGVkaWNhdGVkIGZ1bmN0aW9uLCBvciBwZXJoYXBzIGEgcmVsYXRlZCBmYW1pbHkgb2YgZnVuY3Rpb25zLCByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIHRoZSBwYXJzZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhbmQgYWN0dWFsbHkgY29uZmlndXJpbmcgdGhlIG5ldHdvcmsgbGlicmFyeSdzIGJlaGF2aW9yIGJhc2VkIG9uIHRob3NlIGFyZ3VtZW50cy4gTXkgZ3Vlc3MgaXMgdGhlcmUgd291bGQgYmUgYXNzb2NpYXRlZCBmdW5jdGlvbnMgYXMgd2VsbC4gS25vd2luZyB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkZXNpZ24gd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHdlIGNhbiBhcHByb2FjaCBtb3JlIGNvbXBsZXggc2NlbmFyaW9zLCBvciBkZWJ1ZyBhbnkgZXJyb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjUyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MjcuNTYxNzI2NjA1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQxODk5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVhbV9ubF9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MjcuNjA2MTUxNTQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTUyMDY2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTmV0bGluayBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0ZWFtJ3MgZ29uZSB3aXRoIGdlbmVyaWMgbmV0bGluaywgZWg/IEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBjb25zaWRlcmF0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBhdmFpbGFibGUgZnVuY3Rpb25zIGFuZCB0aGUgb3ZlcmFsbCBhcHByb2FjaC4gTGV0J3Mgc2VlIHdoYXQgdGhleSd2ZSBpbXBsZW1lbnRlZCwgd2hhdCB0aGUgZmFtaWx5IElEIGlzLCBhbmQgd2hhdCBraW5kIG9mIG1lc3NhZ2VzIHRoZXkncmUgc2xpbmdpbmcgYXJvdW5kLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCB0aGUgbGlrZWxpaG9vZCBvZiByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgdGhleSdyZSBoYW5kbGluZyBlcnJvciBjb2Rlcy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IHRoZXkgYXJlIHVzaW5nIHRoZSBzb2NrZXQgYW5kIG1lc3NhZ2UgcGFzc2luZy4gSXMgdGhpcyBhIGN1c3RvbSBmYW1pbHk/IEFyZSB0aGV5IGxldmVyYWdpbmcgZXhpc3RpbmcgZ2VuZXJpYyBuZXRsaW5rIGF0dHJpYnV0ZXMsIG9yIGhhdmUgdGhleSBkZWZpbmVkIHRoZWlyIG93bj8gSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgb3ZlcmFsbCBkZXNpZ24uIElzIHRoaXMgYSBjbGVhbiBzZXBhcmF0aW9uIGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBjb21wb25lbnRzPyBBcmUgdGhleSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBuZXRsaW5rJ3MgYXN5bmNocm9ub3VzIG5hdHVyZSwgb3IgaGF2ZSB0aGV5IGZhbGxlbiBpbnRvIHRoZSB0cmFwIG9mIHN5bmNocm9ub3VzIGNhbGxzPyBJJ20gb24gdGhlIGxvb2tvdXQgZm9yIGFueXRoaW5nIHRoYXQgc21lbGxzIGxpa2UgaW5lZmZpY2llbnQgZGF0YSBzZXJpYWxpemF0aW9uLCBleGNlc3NpdmUgY29weWluZywgb3IgcG9vciBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzLiBUaGlzIGluaXRpYWwgYXNzZXNzbWVudCB3aWxsIGluZm9ybSBteSBhcHByb2FjaCB0byBmdXJ0aGVyIGNvZGUgcmV2aWV3IG9yIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjMwLjk2MTM2MDYxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNTk2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVhbV9ubF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTI0NDQ9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIHRlYW1fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ1OC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI0NTk6c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSB0ZWFtX25sX2ZhbWlseTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NjAtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNDYxOmludCB0ZWFtX25sX25vb3BfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NzEtXFx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVxcdTAwM2VzbmRfc2VxLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjQ3MjpcXHRcXHRcXHQgIFxcdTAwMjZ0ZWFtX25sX2ZhbWlseSwgMCwgVEVBTV9DTURfTk9PUCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNDczLVxcdGlmICghaGRyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0OTEtICovXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNDkyOnN0YXRpYyBzdHJ1Y3QgdGVhbSAqdGVhbV9ubF90ZWFtX2dldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ5My17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI1MTItXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNTEzOnN0YXRpYyB2b2lkIHRlYW1fbmxfdGVhbV9wdXQoc3RydWN0IHRlYW0gKnRlYW0pXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNTE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUxNy1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI1MTg6dHlwZWRlZiBpbnQgdGVhbV9ubF9zZW5kX2Z1bmNfdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUxOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGVhbSAqdGVhbSwgdTMyIHBvcnRpZCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNTIwLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjUyMTpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF91bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUyMi17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI1MjUtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNTI2OnN0YXRpYyBpbnQgdGVhbV9ubF9maWxsX29uZV9vcHRpb25fZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0ZWFtICp0ZWFtLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjUyNy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRlYW1fb3B0aW9uX2luc3QgKm9wdF9pbnN0KVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yNjA3PXN0YXRpYyBpbnQgX19zZW5kX2FuZF9hbGxvY19za2Ioc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjYwOC1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGVhbSAqdGVhbSwgdTMyIHBvcnRpZCxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI2MDk6XFx0XFx0XFx0XFx0dGVhbV9ubF9zZW5kX2Z1bmNfdCAqc2VuZF9mdW5jKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjYxMC17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI2MjMtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNjI0OnN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjYyNTpcXHRcXHRcXHRcXHQgICAgaW50IGZsYWdzLCB0ZWFtX25sX3NlbmRfZnVuY190ICpzZW5kX2Z1bmMsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjI2LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpzZWxfb3B0X2luc3RfbGlzdClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY0NC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI2NDU6XFx0aGRyID0gZ2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgXFx1MDAyNnRlYW1fbmxfZmFtaWx5LCBmbGFncyB8IE5MTV9GX01VTFRJLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY0Ni1cXHRcXHRcXHQgIFRFQU1fQ01EX09QVElPTlNfR0VUKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY2MS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20ob3B0X2luc3QsIHNlbF9vcHRfaW5zdF9saXN0LCB0bXBfbGlzdCkge1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjY2MjpcXHRcXHRlcnIgPSB0ZWFtX25sX2ZpbGxfb25lX29wdGlvbl9nZXQoc2tiLCB0ZWFtLCBvcHRfaW5zdCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNjYzLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY5Ny1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI2OTg6aW50IHRlYW1fbmxfb3B0aW9uc19nZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjY5OS17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MDYtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNzA3OlxcdHRlYW0gPSB0ZWFtX25sX3RlYW1fZ2V0KGluZm8pO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcwOC1cXHRpZiAoIXRlYW0pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcxNC1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZvcHRfaW5zdC1cXHUwMDNldG1wX2xpc3QsIFxcdTAwMjZzZWxfb3B0X2luc3RfbGlzdCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNzE1OlxcdGVyciA9IHRlYW1fbmxfc2VuZF9vcHRpb25zX2dldCh0ZWFtLCBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVxcdTAwM2VzbmRfc2VxLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjcxNjpcXHRcXHRcXHRcXHQgICAgICAgTkxNX0ZfQUNLLCB0ZWFtX25sX3NlbmRfdW5pY2FzdCxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MTctXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZzZWxfb3B0X2luc3RfbGlzdCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzE4LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjcxOTpcXHR0ZWFtX25sX3RlYW1fcHV0KHRlYW0pO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyNi1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3Mjc6c3RhdGljIGludCB0ZWFtX25sX3NlbmRfZXZlbnRfb3B0aW9uc19nZXQoc3RydWN0IHRlYW0gKnRlYW0sXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzI4LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqc2VsX29wdF9pbnN0X2xpc3QpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjcyOS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI3MzA6aW50IHRlYW1fbmxfb3B0aW9uc19zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjczMS17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI3MzgtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNzM5OlxcdHRlYW0gPSB0ZWFtX25sX3RlYW1fZ2V0KGluZm8pO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjc0MC1cXHRpZiAoIXRlYW0pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjg3MC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI4NzE6XFx0XFx0ZXJyID0gdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHRlYW0sIFxcdTAwMjZvcHRfaW5zdF9saXN0KTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI4NzItXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjg3Ni10ZWFtX3B1dDpcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI4Nzc6XFx0dGVhbV9ubF90ZWFtX3B1dCh0ZWFtKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI4NzgtcnRubF91bmxvY2s6XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI4ODItXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyODgzOnN0YXRpYyBpbnQgdGVhbV9ubF9maWxsX29uZV9wb3J0X2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjg4NC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5MTItXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyOTEzOnN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX3BvcnRfbGlzdF9nZXQoc3RydWN0IHRlYW0gKnRlYW0sIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyOTE0OlxcdFxcdFxcdFxcdCAgICAgIGludCBmbGFncywgdGVhbV9ubF9zZW5kX2Z1bmNfdCAqc2VuZF9mdW5jLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjkxNS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpvbmVfcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjkzMy1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjI5MzQ6XFx0aGRyID0gZ2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgXFx1MDAyNnRlYW1fbmxfZmFtaWx5LCBmbGFncyB8IE5MTV9GX01VTFRJLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjkzNS1cXHRcXHRcXHQgIFRFQU1fQ01EX1BPUlRfTElTVF9HRVQpO1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTU0LVxcdGlmIChvbmVfcG9ydCkge1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjk1NTpcXHRcXHRlcnIgPSB0ZWFtX25sX2ZpbGxfb25lX3BvcnRfZ2V0KHNrYiwgb25lX3BvcnQpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjk1Ni1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTU5LVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShwb3J0LCBcXHUwMDI2dGVhbS1cXHUwMDNlcG9ydF9saXN0LCBsaXN0KSB7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyOTYwOlxcdFxcdFxcdGVyciA9IHRlYW1fbmxfZmlsbF9vbmVfcG9ydF9nZXQoc2tiLCBwb3J0KTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5NjEtXFx0XFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTk2LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjk5NzppbnQgdGVhbV9ubF9wb3J0X2xpc3RfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5OTgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMDQtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDA1OlxcdHRlYW0gPSB0ZWFtX25sX3RlYW1fZ2V0KGluZm8pO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAwNi1cXHRpZiAoIXRlYW0pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAxMC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMTE6XFx0ZXJyID0gdGVhbV9ubF9zZW5kX3BvcnRfbGlzdF9nZXQodGVhbSwgaW5mby1cXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cXHUwMDNlc25kX3NlcSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMTI6XFx0XFx0XFx0XFx0XFx0IE5MTV9GX0FDSywgdGVhbV9ubF9zZW5kX3VuaWNhc3QsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAxMy1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMTQ6XFx0dGVhbV9ubF90ZWFtX3B1dCh0ZWFtKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMTUtXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMjEtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDIyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgdGVhbV9ubF9tY2dycHNbXSA9IHtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMjMtXFx0eyAubmFtZSA9IFRFQU1fR0VOTF9DSEFOR0VfRVZFTlRfTUNfR1JQX05BTUUsIH0sXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMjUtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDI2OnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgdGVhbV9ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAyNy1cXHQubmFtZVxcdFxcdD0gVEVBTV9HRU5MX05BTUUsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDI4LVxcdC52ZXJzaW9uXFx0PSBURUFNX0dFTkxfVkVSU0lPTixcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMjk6XFx0Lm1heGF0dHJcXHQ9IEFSUkFZX1NJWkUodGVhbV9ubF9wb2xpY3kpIC0gMSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwMzA6XFx0LnBvbGljeSA9IHRlYW1fbmxfcG9saWN5LFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzMS1cXHQubmV0bnNva1xcdD0gdHJ1ZSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwMzItXFx0Lm1vZHVsZVxcdFxcdD0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDMzOlxcdC5zbWFsbF9vcHNcXHQ9IHRlYW1fbmxfb3BzLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzAzNDpcXHQubl9zbWFsbF9vcHNcXHQ9IEFSUkFZX1NJWkUodGVhbV9ubF9vcHMpLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzNS1cXHQucmVzdl9zdGFydF9vcFxcdD0gVEVBTV9DTURfUE9SVF9MSVNUX0dFVCArIDEsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDM2OlxcdC5tY2dycHNcXHRcXHQ9IHRlYW1fbmxfbWNncnBzLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzAzNzpcXHQubl9tY2dycHNcXHQ9IEFSUkFZX1NJWkUodGVhbV9ubF9tY2dycHMpLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzOC19O1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzAzOS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwNDA6c3RhdGljIGludCB0ZWFtX25sX3NlbmRfbXVsdGljYXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDQxLVxcdFxcdFxcdFxcdCAgc3RydWN0IHRlYW0gKnRlYW0sIHUzMiBwb3J0aWQpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDQyLXtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwNDM6XFx0cmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKFxcdTAwMjZ0ZWFtX25sX2ZhbWlseSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNDQtXFx0XFx0XFx0XFx0ICAgICAgIGRldl9uZXQobmV0ZGV2X2Zyb21fcHJpdih0ZWFtKSksXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNDctXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDQ4OnN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA0OS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKnNlbF9vcHRfaW5zdF9saXN0KVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA1MC17XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDUxOlxcdHJldHVybiB0ZWFtX25sX3NlbmRfb3B0aW9uc19nZXQodGVhbSwgMCwgMCwgMCwgdGVhbV9ubF9zZW5kX211bHRpY2FzdCxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNTItXFx0XFx0XFx0XFx0XFx0c2VsX29wdF9pbnN0X2xpc3QpO1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDU0LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA1NTpzdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9ldmVudF9wb3J0X2dldChzdHJ1Y3QgdGVhbSAqdGVhbSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNTYtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDU3LXtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwNTg6XFx0cmV0dXJuIHRlYW1fbmxfc2VuZF9wb3J0X2xpc3RfZ2V0KHRlYW0sIDAsIDAsIDAsIHRlYW1fbmxfc2VuZF9tdWx0aWNhc3QsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDU5LVxcdFxcdFxcdFxcdFxcdCAgcG9ydCk7XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwNjEtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDYyOnN0YXRpYyBpbnQgX19pbml0IHRlYW1fbmxfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA2My17XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDY0OlxcdHJldHVybiBnZW5sX3JlZ2lzdGVyX2ZhbWlseShcXHUwMDI2dGVhbV9ubF9mYW1pbHkpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA2NS19XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDY2LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA2NzpzdGF0aWMgdm9pZCBfX2V4aXQgdGVhbV9ubF9maW5pKHZvaWQpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDY4LXtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwNjk6XFx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcXHUwMDI2dGVhbV9ubF9mYW1pbHkpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA3MC19XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTMwNzc9c3RhdGljIHZvaWQgX190ZWFtX29wdGlvbnNfY2hhbmdlX2NoZWNrKHN0cnVjdCB0ZWFtICp0ZWFtKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDg2LVxcdH1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwODc6XFx0ZXJyID0gdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHRlYW0sIFxcdTAwMjZzZWxfb3B0X2luc3RfbGlzdCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMDg4LVxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FU1JDSClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzA5Nj1zdGF0aWMgdm9pZCBfX3RlYW1fcG9ydF9jaGFuZ2Vfc2VuZChzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LCBib29sIGxpbmt1cClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzExNi1zZW5kX2V2ZW50OlxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzExNzpcXHRlcnIgPSB0ZWFtX25sX3NlbmRfZXZlbnRfcG9ydF9nZXQocG9ydC1cXHUwMDNldGVhbSwgcG9ydCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMTE4LVxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FU1JDSClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzIzOT1zdGF0aWMgaW50IF9faW5pdCB0ZWFtX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMyNDgtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMjQ5OlxcdGVyciA9IHRlYW1fbmxfaW5pdCgpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzI1MC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zMjY0PXN0YXRpYyB2b2lkIF9fZXhpdCB0ZWFtX21vZHVsZV9leGl0KHZvaWQpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMjY1LXtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMyNjY6XFx0dGVhbV9ubF9maW5pKCk7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zMjY3LVxcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFxcdTAwMjZ0ZWFtX2xpbmtfb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MzEuMDA2NjI1NTc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjg0MTI1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVsdmluZyBpbnRvIHRoZSBUZWFtIERldmljZSBTbGF2ZSBBZGRpdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgdGVhbV9hZGRfc2xhdmVgIHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGBSVE1fTkVXTElOS2AgbmV0bGluayBtZXNzYWdlLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCBjb250YWluZWQgZWl0aGVyIGBJRkxBX01BU1RFUmAgb3IgYElGTEFfTElOS2AgYXR0cmlidXRlcy4gQnV0IHdhaXQgYSBzZWNvbmQsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UuIFRoZSBhY3R1YWwgbWVjaGFuaXNtIGZvciBhZGRpbmcgYSBzbGF2ZSB0byBhIHRlYW0gZGV2aWNlIGlzIGxpa2VseSBoYW5kbGVkIHRocm91Z2ggdGhlIGBydG5sX2xpbmtfb3BzYCBzdHJ1Y3R1cmUgb3IgdGhlIGBuZG9fYWRkX3NsYXZlYCBvcGVyYXRpb24uXG5cblJpZ2h0LCB0aGF0IGZlZWxzIG1vcmUgY29ycmVjdC4gVGhlIG1vcmUgZ2VuZXJhbCBhcHByb2FjaCwgd2hlbiBhZGRpbmcgYSBzbGF2ZSB0byBhbnkgbWFzdGVyIGRldmljZSwgaXMgZ2VuZXJhbGx5IG1hbmFnZWQgd2l0aGluIGBkb19zZXRsaW5rYCBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBGcm9tIHRoZXJlLCBpdCB3b3VsZCBjYWxsIGVpdGhlciBgbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGlua2Agb3IgdGhlIGFmb3JlbWVudGlvbmVkIGBuZG9fYWRkX3NsYXZlYC5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZ28gYmFjayBhbmQgcmUtZXhhbWluZSB0aGUgYHRlYW1fYWRkX3NsYXZlYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byBlbnN1cmUgbXkgbWVudGFsIG1vZGVsIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc3MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzozNS4zNzUwNDA5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0NDQzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVhbV9hZGRfc2xhdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTIwOTg9c3RhdGljIGludCB0ZWFtX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjExNi1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIxMTc6c3RhdGljIGludCB0ZWFtX2FkZF9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTE4LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGVhbV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTk5LSNlbmRpZlxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjIwMDpcXHQubmRvX2FkZF9zbGF2ZVxcdFxcdD0gdGVhbV9hZGRfc2xhdmUsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMjAxLVxcdC5uZG9fZGVsX3NsYXZlXFx0XFx0PSB0ZWFtX2RlbF9zbGF2ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6MzUuNDIxNDkyNzg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDIxMDU4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNzaW5nIEZ1enppbmcgRWZmb3J0cyBpbiBgdGVhbV9jb3JlLmNgKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgdGVhbV9hZGRfc2xhdmVgIGlzIGFzc2lnbmVkIHRvIGAubmRvX2FkZF9zbGF2ZWAsIGFuZCB0aGF0J3MgZ29vZC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB0YXJnZXQgaXQgZm9yIGZ1enppbmcsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgaXQncyBzdGF0aWMuIEhtbSwgc2FtZSBnb2VzIGZvciBgdGVhbV9wb3J0X2FkZGAuIFRoaXMgaXMgYSBzbGlnaHQgcHJvYmxlbS4gV2Ugd2FudCB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zLCBhcyB0aGV5IGFyZSBub3QgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLiBJcyB0aGVyZSBhbnl0aGluZyAqbm9uKi1zdGF0aWMgaW4gYHRlYW1fY29yZS5jYCB0aGF0IG9mZmVycyBhIGJldHRlciBmdXp6aW5nIHRhcmdldD8gTGV0J3MgdGFrZSBhIGxvb2suIEknbGwgbmVlZCB0byBnZW5lcmF0ZSBhIGxpc3Qgb2YgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGB0ZWFtX2NvcmUuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbW9yZSB2aWFibGUgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQzNywiT3V0cHV0VG9rZW5zIjo2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0MzozOS4yNjM2MDI2NzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODAxODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NjY9c3RhdGljIGludCB0ZWFtX3BvcnRfc2V0X3RlYW1fZGV2X2FkZHIoc3RydWN0IHRlYW0gKnRlYW0sXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTcxLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6NzI6aW50IHRlYW1fbW9kZW9wX3BvcnRfZW50ZXIoc3RydWN0IHRlYW0gKnRlYW0sIHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy03My17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTc2PUVYUE9SVF9TWU1CT0wodGVhbV9tb2Rlb3BfcG9ydF9lbnRlcik7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy03Ny1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjc4OnZvaWQgdGVhbV9tb2Rlb3BfcG9ydF9jaGFuZ2VfZGV2X2FkZHIoc3RydWN0IHRlYW0gKnRlYW0sXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy03OS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zMzI9c3RhdGljIHZvaWQgX190ZWFtX29wdGlvbnNfY2hhbmdlX2NoZWNrKHN0cnVjdCB0ZWFtICp0ZWFtKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMzMy1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMzNDppbnQgdGVhbV9vcHRpb25zX3JlZ2lzdGVyKHN0cnVjdCB0ZWFtICp0ZWFtLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzM1LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHRlYW1fb3B0aW9uICpvcHRpb24sXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTM0Nj1FWFBPUlRfU1lNQk9MKHRlYW1fb3B0aW9uc19yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zNDctXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozNDg6dm9pZCB0ZWFtX29wdGlvbnNfdW5yZWdpc3RlcihzdHJ1Y3QgdGVhbSAqdGVhbSxcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM0OS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0ZWFtX29wdGlvbiAqb3B0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zNjk9c3RhdGljIGludCB0ZWFtX29wdGlvbl9zZXQoc3RydWN0IHRlYW0gKnRlYW0sXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM3Ny1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjM3ODp2b2lkIHRlYW1fb3B0aW9uX2luc3Rfc2V0X2NoYW5nZShzdHJ1Y3QgdGVhbV9vcHRpb25faW5zdF9pbmZvICpvcHRfaW5zdF9pbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzc5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9Mzg1PUVYUE9SVF9TWU1CT0wodGVhbV9vcHRpb25faW5zdF9zZXRfY2hhbmdlKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTM4Ni1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjM4Nzp2b2lkIHRlYW1fb3B0aW9uc19jaGFuZ2VfY2hlY2soc3RydWN0IHRlYW0gKnRlYW0pXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0zODgte1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zOTE9RVhQT1JUX1NZTUJPTCh0ZWFtX29wdGlvbnNfY2hhbmdlX2NoZWNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzk3LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mzk4OnN0YXRpYyBMSVNUX0hFQUQobW9kZV9saXN0KTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjM5OTpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1vZGVfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQwMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9NDE3PXN0YXRpYyBib29sIGlzX2dvb2RfbW9kZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQyNi1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjQyNzppbnQgdGVhbV9tb2RlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCB0ZWFtX21vZGUgKm1vZGUpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy00Mjgte1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz00NTI9RVhQT1JUX1NZTUJPTCh0ZWFtX21vZGVfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtNDUzLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6NDU0OnZvaWQgdGVhbV9tb2RlX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IHRlYW1fbW9kZSAqbW9kZSlcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQ1NS17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTI0NTk9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSB0ZWFtX25sX2ZhbWlseTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI0NjAtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNDYxOmludCB0ZWFtX25sX25vb3BfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjQ2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTI2MjQ9c3RhdGljIGludCB0ZWFtX25sX3NlbmRfb3B0aW9uc19nZXQoc3RydWN0IHRlYW0gKnRlYW0sIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI2OTctXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyNjk4OmludCB0ZWFtX25sX29wdGlvbnNfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI2OTkte1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yNzI3PXN0YXRpYyBpbnQgdGVhbV9ubF9zZW5kX2V2ZW50X29wdGlvbnNfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLFxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzI5LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjczMDppbnQgdGVhbV9ubF9vcHRpb25zX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yNzMxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjkxMz1zdGF0aWMgaW50IHRlYW1fbmxfc2VuZF9wb3J0X2xpc3RfZ2V0KHN0cnVjdCB0ZWFtICp0ZWFtLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yOTk2LVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6Mjk5NzppbnQgdGVhbV9ubF9wb3J0X2xpc3RfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTI5OTgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjM5LjMwOTQxNDczMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODU3MjUzNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgdGVhbV9hZGRfc2xhdmVgIFN5bWJvbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBmb2N1cyBzeW1ib2wgZm9yIGFuYWx5emluZyB0aGUgc2xhdmUgYWRkaXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIG5ldHdvcmsgdGVhbWluZyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGBuZG9fYWRkX3NsYXZlYCwgc2luY2UgdGhhdCdzIHRoZSBnZW5lcmljIG5ldGRldiBvcGVyYXRpb24gdGhhdCBhcHBlYXJzIHRvIGJlIHRoZSBlbnRyeSBwb2ludC4gSSBxdWlja2x5IHRyYWNlZCB0aGUgY2FsbCBzdGFjazogYG5kb19hZGRfc2xhdmVgIGlzIGNhbGxlZCBmcm9tIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgdGhyb3VnaCBgZG9fc2V0bGlua2AsIHRoZW4gYG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2xpbmtgLCBmdXJ0aGVyIGRvd24gdG8gYF9fbmV0ZGV2X3VwcGVyX2Rldl9saW5rYCBhbmQgZmluYWxseSBjYWxsaW5nIHRoZSBzcGVjaWZpYyBkZXZpY2UncyBpbXBsZW1lbnRhdGlvbiB2aWEgYG9wcy1cdTAwM2VuZG9fYWRkX3NsYXZlYC4gU28sIEkgdGhvdWdodCBtYXliZSBJIGNvdWxkIGZvY3VzIG9uIGB0ZWFtX2FkZF9zbGF2ZWAgaWYgaXQncyBmZWFzaWJsZSB0byBjb25jZW50cmF0ZSBvbiBzdGF0aWMgZnVuY3Rpb25zLlxuXG5CdXQgd2FpdCBhIG1vbWVudC4gVGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBjbGVhcjogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBhIGNvbXBpbGVyJ3MgcGxheWdyb3VuZCBhbmQgZG9uJ3QgZ2V0IGRpc3RpbmN0IHN5bWJvbHMuIEhvd2V2ZXIsIEkgYmVsaWV2ZSBgdGVhbV9hZGRfc2xhdmVgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYC5uZG9fYWRkX3NsYXZlYCksIHNvIGl0IGNhbid0IGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgKmRvZXMqIGhhdmUgYSBjbGVhciBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgdmFsaWQgZm9jdXMuXG5cbkkgYWxzbyBjb25zaWRlcmVkIGB0ZWFtX3BvcnRfYWRkYCBhcyBhIHBvdGVudGlhbCBvcHRpb24uIEl0IGlzIHN0YXRpYywgYW5kIG15IGludHVpdGlvbiBzdWdnZXN0cyB0aGF0IGl0IG1pZ2h0IGJlIGlubGluZWQgZ2l2ZW4gaXRzIHRpZ2h0IGNvdXBsaW5nIHdpdGggYHRlYW1fYWRkX3NsYXZlYC4gVGh1cywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGVhbV9wb3J0X2FkZGAgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIHRvIGNvbmZpcm0gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6NDUuMTY2NjcwNjY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjczMjkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZWFtX3BvcnRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz00MD1zdGF0aWMgc3RydWN0IHRlYW1fcG9ydCAqdGVhbV9wb3J0X2dldF9ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTQ4LSAqIFNpbmNlIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBkZXZpY2UgYWRkcmVzcyBmb3Igb3BlbiBwb3J0IGRldmljZSBpcyB0ZXN0ZWQgaW5cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjQ5OiAqIHRlYW1fcG9ydF9hZGQsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRob3V0IGNvbnRyb2wgb2YgcmV0dXJuIHZhbHVlXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy01MC0gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTIwOT1zdGF0aWMgaW50IHRlYW1fZGV2X3R5cGVfY2hlY2tfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTEyMTEtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoxMjEyOnN0YXRpYyBpbnQgdGVhbV9wb3J0X2FkZChzdHJ1Y3QgdGVhbSAqdGVhbSwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTIxMy1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMTE3PXN0YXRpYyBpbnQgdGVhbV9hZGRfc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMTIzLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MjEyNDpcXHRyZXR1cm4gdGVhbV9wb3J0X2FkZCh0ZWFtLCBwb3J0X2RldiwgZXh0YWNrKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIxMjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0Mzo0NS4yMTM0MDg2MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MDgyMTY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgYHRlYW1fcG9ydF9hZGRgIEZ1bmN0aW9uIGFuZCBpdHMgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBgdGVhbV9wb3J0X2FkZGAgaXMgb25seSBldmVyIGNhbGxlZCBieSBgdGVhbV9hZGRfc2xhdmVgLiAgVGhhdCBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbmxpbmVkLCBvciBhdCBsZWFzdCBoaWdobHkgaW50ZWdyYXRlZCB3aXRoaW4gdGhhdCBmdW5jdGlvbidzIHNjb3BlLiBTbywgYHRlYW1fYWRkX3NsYXZlYCBpcyBkZWZpbml0ZWx5IHRoZSBtb3JlIGZydWl0ZnVsIHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBuZWVkZWQ/XG5cbkhtbSwgYE5FVF9URUFNYCBpcyB0aGUgYmlnIG9uZSwgb2YgY291cnNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGF0IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBuZWVkcyB0byBiZSBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjQ4Ljc4NDIzMjQ2NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MjIwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9URUFNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90ZWFtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9URUFNXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkV0aGVybmV0IHRlYW0gZHJpdmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc9MTY9aWYgTkVUX1RFQU1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctMTctXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjE4OmNvbmZpZyBORVRfVEVBTV9NT0RFX0JST0FEQ0FTVFxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjYXN0IG1vZGUgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWc6Mjk6Y29uZmlnIE5FVF9URUFNX01PREVfUk9VTkRST0JJTlxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiUm91bmQtcm9iaW4gbW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZzo0MTpjb25maWcgTkVUX1RFQU1fTU9ERV9SQU5ET01cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIlJhbmRvbSBtb2RlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNTItXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjUzOmNvbmZpZyBORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUFxcbmRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiQWN0aXZlLWJhY2t1cCBtb2RlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL0tjb25maWctNjUtXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnOjY2OmNvbmZpZyBORVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFXFxuZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnLTY3LVxcdHRyaXN0YXRlIFxcXCJMb2FkLWJhbGFuY2UgbW9kZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0Mzo0OC44MzA4NTkwMjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NjAzODc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBORVRfVEVBTSBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX1RFQU1gLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlIHRoZSAqYWN0dWFsKiBjb25uZWN0aW9ucy4gV2hhdCBzeXN0ZW1zLCBzZXJ2aWNlcywgb3IgZXZlbiBzcGVjaWZpYyBjb2RlIG1vZHVsZXMgcmVseSBvbiBgTkVUX1RFQU1gPyBJJ20gbm90IGludGVyZXN0ZWQgaW4gc3VyZmFjZS1sZXZlbCBtZW50aW9uczsgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGNyaXRpY2FsIHBhdGhzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBkaXJlY3QgY2FsbHMsIGluZGlyZWN0IGRlcGVuZGVuY2llcyB0aHJvdWdoIHNoYXJlZCBsaWJyYXJpZXMsIG9yIGV2ZW4gc29mdCBkZXBlbmRlbmNpZXMgbWVkaWF0ZWQgYnkgbWVzc2FnZSBxdWV1ZXMgb3IgZGF0YSBzdG9yZXM/IFRoZSBnb2FsIGlzIGEgY2xlYXIgZGVwZW5kZW5jeSBncmFwaCwgcHJlZmVyYWJseSB3aXRoIHNvbWUgaW5kaWNhdGlvbiBvZiB0aGUgaW1wYWN0IGxldmVsIGZvciBhbnkgcGFydGljdWxhciBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gYXNzZXNzIGhvdyBmcmFnaWxlIHRoZSBzeXN0ZW0gaXMsIHdoYXQgcmVmYWN0b3Jpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgdGhlIHBvdGVudGlhbCBibGFzdCByYWRpdXMgaWYgd2UgbmVlZCB0byBtYWtlIGNoYW5nZXMgdG8gYE5FVF9URUFNYCBkb3duIHRoZSBsaW5lLiBJIGtub3cgdGhlIGRldmlsIGlzIG9mdGVuIGluIHRoZSBkZXRhaWxzLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgYXJlYXMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk1NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjUyLjAxNjkwMDkxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3RlYW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBORVRfVEVBTVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkV0aGVybmV0IHRlYW0gZHJpdmVyIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdGVhbXMgdG9nZXRoZXJcXG4gICA2OlxcdFxcdCAgbXVsdGlwbGUgZXRoZXJuZXQgZGV2aWNlcy5cXG4gICA3OlxcdFxcbiAgIDg6XFx0XFx0ICBUZWFtIGRldmljZXMgY2FuIGJlIGFkZGVkIHVzaW5nIHRoZSBcXFwiaXBcXFwiIGNvbW1hbmQgZnJvbSB0aGVcXG4gICA5OlxcdFxcdCAgaXByb3V0ZTIgcGFja2FnZTpcXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBcXFwiaXAgbGluayBhZGQgbGluayBbIGFkZHJlc3MgTUFDIF0gWyBOQU1FIF0gdHlwZSB0ZWFtXFxcIlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDE0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdGVhbS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0aWYgTkVUX1RFQU1cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE5FVF9URUFNX01PREVfQlJPQURDQVNUXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJvYWRjYXN0IG1vZGUgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gTkVUX1RFQU1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDM6NTIuMDE2OTg3NDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNzA4Mjg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBORVRfVEVBTWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYE5FVF9URUFNYC4gSW5pdGlhbGx5LCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jaWVzIGxpc3RlZCwgc28gYE5FVF9URUFNYCBpdHNlbGYgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLiBIb3dldmVyLCBJJ3ZlIGdvdCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGUgcGF0Y2ggaW5jbHVkZXMgY2hlY2tzIGZvciBgQVJQSFJEX0NBTmAgYW5kIGBBUlBIUkRfSUVFRTgwMjE1NGAuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gcG9wcyB1cDogZG8gd2UgKm5lZWQqIENBTiBhbmQgSUVFRTgwMjE1NCBpbnRlcmZhY2VzIHByZXNlbnQgdG8gZnVsbHkgdGVzdCB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIG5ldyBlcnJvciBwYXRoIGl0IGludHJvZHVjZXM/IFllcywgdG8gdHJ1bHkgdmFsaWRhdGUgdGhlIGNvZGUgY2hhbmdlcyBhbmQgZXhlcmNpc2UgdGhhdCBuZXcgZXJyb3IgaGFuZGxpbmcsIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gaGF2ZSBib3RoIENBTiBhbmQgSUVFRTgwMjE1NCBkZXZpY2VzIGF2YWlsYWJsZS4gTGV0J3MgbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3MgYXJlIHNldCBjb3JyZWN0bHkuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMgZm9yIENBTiBhbmQgSUVFRTgwMjE1NCB0byBlbnN1cmUgdGhleSBhcmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0Mzo1NS42NTQwNzI5NDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDI2MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vS2NvbmZpZy01LVxcbm5ldC9jYW4vS2NvbmZpZzo2Om1lbnVjb25maWcgQ0FOXFxubmV0L2Nhbi9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkNBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvY2FuL0tjb25maWc9MjI9aWYgQ0FOXFxubmV0L2Nhbi9LY29uZmlnLTIzLVxcbm5ldC9jYW4vS2NvbmZpZzoyNDpjb25maWcgQ0FOX1JBV1xcbm5ldC9jYW4vS2NvbmZpZy0yNS1cXHR0cmlzdGF0ZSBcXFwiUmF3IENBTiBQcm90b2NvbCAocmF3IGFjY2VzcyB3aXRoIENBTi1JRCBmaWx0ZXJpbmcpXFxcIlxcbi0tXFxubmV0L2Nhbi9LY29uZmlnLTMzLVxcbm5ldC9jYW4vS2NvbmZpZzozNDpjb25maWcgQ0FOX0JDTVxcbm5ldC9jYW4vS2NvbmZpZy0zNS1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjYXN0IE1hbmFnZXIgQ0FOIFByb3RvY29sICh3aXRoIGNvbnRlbnQgZmlsdGVyaW5nKVxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZy00NS1cXG5uZXQvY2FuL0tjb25maWc6NDY6Y29uZmlnIENBTl9HV1xcbm5ldC9jYW4vS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiQ0FOIEdhdGV3YXkvUm91dGVyICh3aXRoIG5ldGxpbmsgY29uZmlndXJhdGlvbilcXFwiXFxuLS1cXG5uZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxubmV0L2Nhbi9LY29uZmlnLTU4LVxcbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXFxubmV0L2Nhbi9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0Mzo1NS42OTkxMDQxMTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NTY4NjY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqQ29uc2lkZXJpbmcgQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzKipcblxuQWxyaWdodCwgc28gSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IENBTiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDQU5gIGlzIHRoZSBrZXkgaWRlbnRpZmllciBmb3IgdGhlIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIHRoYXQgYnJpbmdzIG1lIHRvIHRoZSBuZXh0IHByb3RvY29sIG9yIHN0YW5kYXJkIEknbSB3b3JraW5nIHdpdGggb3IgdGhpbmtpbmcgYWJvdXQ6IElFRUUgODAyLjE1LjQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciB0aGF0IHN0YW5kYXJkIGFzIHdlbGwuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gc3ludGF4IG9yIG1ldGhvZCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMjksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0Mzo1OS4wNDQ3OTM1OTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTk3MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJRUVFODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZWVlODAyMTU0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MjptZW51Y29uZmlnIElFRUU4MDIxNTRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIklFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc9MTQ9aWYgSUVFRTgwMjE1NFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE3LVxcdGJvb2wgXFxcIklFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyMTpjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQzOjU5LjA5Mjk5NjQ2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjEzNDA5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSBsb29raW5nIGF0IHNldHRpbmcgdXAgdGhpcyBuZXcgZGV2aWNlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgb2YgY291cnNlLCB0aGUgYElFRUU4MDIxNTRgIGNvbmZpZ3VyYXRpb247IHRoYXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBnaXZlbiB0aGUgYXJjaGl0ZWN0dXJlLiBCdXQgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgYW5vdGhlciBwaWVjZSBvZiB0aGlzIHB1enpsZS4gVG8gc2ltdWxhdGUgb3IgY3JlYXRlIHRoZSBDQU4gZGV2aWNlLCBJJ2xsIG5lZWQgdG8gdXNlIGBDQU5fVkNBTmAuIFRoYXQgd2lsbCBiZSBpbXBvcnRhbnQgZm9yIHRlc3RpbmcuIE9rYXksIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MDIuMDU0MzQxMDExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI0MDQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX1ZDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvY2FuL0tjb25maWc9MjM9aWYgQ0FOX0RFVlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI0LVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjI1OmNvbmZpZyBDQU5fVkNBTlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIExvY2FsIENBTiBJbnRlcmZhY2UgKHZjYW4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0NDowMi4wOTg1ODY0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDEyNDUyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQ29uc2lkZXJpbmcgSW1wbGVtZW50YXRpb24gU3RyYXRlZ2llcyBmb3IgSUVFRTgwMi4xNS40KipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgSUVFRTgwMi4xNS40IGltcGxlbWVudGF0aW9uLCBhbmQgSSdtIHRoaW5raW5nIGFib3V0IHRoZSB0ZXN0aW5nIGFuZCBzaW11bGF0aW9uIGFzcGVjdHMuIFdlJ2xsIGxpa2VseSBuZWVkIGEgdmlydHVhbCByZXByZXNlbnRhdGlvbiwgYSBkZXZpY2UgdGhhdCBjYW4gc3RhbmQgaW4gZm9yIGEgcGh5c2ljYWwgb25lLCBidXQgYWxsb3cgdXMgdG8gc2ltdWxhdGUgYmVoYXZpb3IuIFNvbWV0aGluZyBsaWtlIGEgYE1BQzgwMjE1NF9IV1NJTWAg4oCTIHBlcmhhcHMgaGFyZHdhcmUgc2ltdWxhdGlvbiDigJMgb3IgYSBgSUVFRTgwMjE1NF9GQUtFTEJgIOKAkyBtYXliZSBhICdmYWtlIGxvd2VyIGJvdW5kJyB0byBtb2RlbCBzb21lIGNvbnN0cmFpbnRzIOKAkyB3b3VsZCBiZSBpZGVhbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gZW5zdXJlIGNvbXByZWhlbnNpdmUgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQgd2l0aG91dCByZXF1aXJpbmcgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlIGF0IGV2ZXJ5IHN0ZXAuIFRoaXMgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uOyBpdCdzIGEga2V5IHBpZWNlIGluIGVuc3VyaW5nIGEgcm9idXN0IGFuZCBlZmZpY2llbnQgZGVzaWduIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTQ2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MDUuNDk5ODM1MTYzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMzNTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxNTQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTU0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTU0L0tjb25maWc6Mjpjb25maWcgTUFDODAyMTU0XFxubmV0L21hYzgwMjE1NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTUuNCBTb2Z0IE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjE1NClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjA1LjU0NDE3NDc0MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkzOTUyMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBJRUVFIDgwMi4xNS40IEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYW4gODAyLjE1LjQgbmV0d29yayBkcml2ZXIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJ20gcmVhc29uYWJseSBzdXJlIEknbGwgZmluZCB3aGF0IEkgbmVlZCBpbiBlaXRoZXIgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2Agb3IsIHBlcmhhcHMgaWYgaXQncyB1c2luZyB0aGUgbWFjODAyMTU0IHN0YWNrLCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTU0L0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCB0aGUgZ28tdG8gbG9jYXRpb25zIGZvciB0aGVzZSBzb3J0cyBvZiBsb3ctbGV2ZWwgbmV0d29ya2luZyBvcHRpb25zLiBJdCdzIGEgYml0IG9mIGEgY29pbiBmbGlwIGluaXRpYWxseSwgc28gSSdsbCBjaGVjayBib3RoIGFuZCBzZWUgd2hpY2ggb25lIGhhcyB0aGUgbW9yZSByZWxldmFudCBjb25maWcgc3ltYm9scyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgc3BlY2lmaWMgc2NlbmFyaW8gSSdtIGRlYWxpbmcgd2l0aC4gUHJvYmFibHkgdGhlIGZpcnN0LCBidXQgSSBzaG91bGQgY2hlY2sgdGhlIGxhdHRlciB0byBiZSBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0NDowOC43MzgxMjk4MjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzAzODcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgLio4MDIxNTRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NF9EUklWRVJTXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgZHJpdmVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MTQ6Y29uZmlnIElFRUU4MDIxNTRfRkFLRUxCXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIzLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyNDpjb25maWcgSUVFRTgwMjE1NF9BVDg2UkYyMzBcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMjUtXFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMzUtXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjM2OmNvbmZpZyBJRUVFODAyMTU0X01SRjI0SjQwXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTM3LVxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgTVJGMjRKNDAgdHJhbnNjZWl2ZXIgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTQ3LVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo0ODpjb25maWcgSUVFRTgwMjE1NF9DQzI1MjBcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNDktXFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNTgtXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjU5OmNvbmZpZyBJRUVFODAyMTU0X0FUVVNCXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJBVFVTQiB0cmFuc2NlaXZlciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNjgtXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjY5OmNvbmZpZyBJRUVFODAyMTU0X0FERjcyNDJcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIkFERjcyNDIgdHJhbnNjZWl2ZXIgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTc5LVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzo4MDpjb25maWcgSUVFRTgwMjE1NF9DQTgyMTBcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctODEtXFx0dHJpc3RhdGUgXFxcIkNhc2NvZGEgQ0E4MjEwIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy05MS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6OTI6Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlNcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiQ0E4MjEwIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEwMS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MTAyOmNvbmZpZyBJRUVFODAyMTU0X01DUjIwQVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMDMtXFx0dHJpc3RhdGUgXFxcIk1DUjIwQSB0cmFuc2NlaXZlciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTEzLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxMTQ6Y29uZmlnIElFRUU4MDIxNTRfSFdTSU1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWctMTE1LVxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0NDowOC45MzUxNzc3NDRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNDI2NDk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkV2YWx1YXRpbmcgU2ltdWxhdGlvbiBBcHByb2FjaGVzIGZvciBJRUVFIDgwMi4xNS40KipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBkaWZmZXJlbnQgc2ltdWxhdGlvbiBvcHRpb25zIGZvciBJRUVFIDgwMi4xNS40LiBgSUVFRTgwMjE1NF9IV1NJTWAgYW5kIGBJRUVFODAyMTU0X0ZBS0VMQmAgc2VlbSBsaWtlIHByb21pc2luZyBzdGFydGluZyBwb2ludHMuIEkndmUgaGVhcmQgZ29vZCB0aGluZ3MgYWJvdXQgdGhlbSwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElFRUU4MDIxNTRfSFdTSU1gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgbGlicmFyaWVzIGl0IHJlbGllcyBvbi4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBvdmVyYWxsIGNvbXBsZXhpdHksIHBvcnRhYmlsaXR5LCBhbmQgcG90ZW50aWFsIGludGVncmF0aW9uIGNoYWxsZW5nZXMuIEl0IGlzIHZpdGFsIHRvIG1lLCBhcyBhbiBleHBlcnQsIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGVhY2ggYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Njc4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MTIuMjQ5NDQ1MDk5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFxuIDExMTpcXHRcXHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cXG4gMTEyOlxcdFxcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnbWNyMjBhJy5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0Y29uZmlnIElFRUU4MDIxNTRfSFdTSU1cXG4gMTE1OlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcbiAxMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjE1NFxcXCJcXG4gMTE3OlxcdFxcdGhlbHBcXG4gMTE4OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxcbiAxMTk6XFx0XFx0ICBJRUVFIDgwMi4xNS40IG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjE1NCkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcXG4gMTIwOlxcdFxcdCAgbmVlZGVkIGZvciBub3JtYWwgd3BhbiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy5cXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28gc2F5IE0gaGVyZS5cXG4gMTIzOlxcdFxcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnbWFjODAyMTU0X2h3c2ltJy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MTIuMjQ5NTA4MDg5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTc0NzkyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gbG9va2luZyBhdDpcblxuKipDb21wb25lbnQgQ29uZmlndXJhdGlvbiBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIGRvd24gdGhlc2UgY29uZmlndXJhdGlvbnMuIEZpcnN0LCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBJRUVFIDgwMi4xNS40LCBJIGFic29sdXRlbHkgbmVlZCBgSUVFRTgwMjE1NGAuIFRoZW4sIG9mIGNvdXJzZSwgdGhlIE1BQyBsYXllciBzdXBwb3J0IChgTUFDODAyMTU0YCkgaGFzIHRvIGJlIGluY2x1ZGVkLiBBbmQgbmF0dXJhbGx5LCBJJ2xsIG5lZWQgdGhlIGRyaXZlcnMgYXNzb2NpYXRlZCB3aXRoIElFRUUgODAyLjE1LjQgKGBJRUVFODAyMTU0X0RSSVZFUlNgKSwgYWxvbmcgd2l0aCB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBlbGVtZW50cyAoYElFRUU4MDIxNTRfSFdTSU1gKSBzbyB0aGF0IEkgY2FuIGVuc3VyZSBldmVyeXRoaW5nIGlzIHdvcmtpbmcgY29ycmVjdGx5IHdpdGhvdXQgbmVlZGluZyBhbiBhY3R1YWwgODAyLjE1LjQgcmFkaW8uXG5cbk5vdywgc2hpZnRpbmcgZ2VhcnMgdG8gQ0FOLCB0aGUgY29yZSBgQ0FOYCBmdW5jdGlvbmFsaXR5IGlzIG9idmlvdXNseSByZXF1aXJlZC4gSSdsbCBuZWVkIGBDQU5fVkNBTmAgYXMgd2VsbC4gSGFuZyBvbi4uLiBpc24ndCBgQ0FOX1ZDQU5gIGRlcGVuZGVudCBvbiBzb21ldGhpbmc/IExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBDQU5fREVWYCBvcHRpb24uIEp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjE2LjcwNjk5MDYzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc1Mzk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX0RFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0yLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjM6bWVudWNvbmZpZyBDQU5fREVWXFxuZHJpdmVycy9uZXQvY2FuL0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiQ0FOIERldmljZSBEcml2ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0NDoxNi43NTY3NDg5MTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMTc1NzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB3ZSBuZWVkIGBDQU5fREVWYC4gVGltZSB0byBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3JpdGljYWwuIExldCdzIHNlZS4uLiB3ZSd2ZSBnb3QgYE5FVF9URUFNYCwgYENBTmAsIGBDQU5fREVWYCwgYENBTl9WQ0FOYCwgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYElFRUU4MDIxNTRfRFJJVkVSU2AsIGFuZCBgSUVFRTgwMjE1NF9IV1NJTWAuIFRoYXQgY292ZXJzIHRoZSBsaWtlbHkgc3VzcGVjdHMuXG5cbldhaXQgYSBzZWNvbmQsIEkgc2VlIGB0ZWFtX2FkZF9zbGF2ZWAgaXMgYXNzaWduZWQgdG8gYC5uZG9fYWRkX3NsYXZlYC4gT2theSwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRoYXQgZGVzZXJ2ZSBvdXIgYXR0ZW50aW9uPyBJJ20gdGhpbmtpbmcgYWJvdXQgYHRlYW1fcG9ydF9hZGRgIHNpbmNlIGl0J3Mgc3RhdGljIGFuZCBtaWdodCBiZSBpbmxpbmVkLCBzbyBpdCBtYXkgbmVlZCBkaWZmZXJlbnQgYXR0ZW50aW9uLiBQZXJoYXBzIGl0J3Mgd29ydGggY2hlY2tpbmcgaWYgYHRlYW1fcG9ydF9hZGRgICppcyogaW5saW5lZD8gSSBjYW4gbG9vayBhdCBpdHMgc2l6ZSwgdGhvdWdoIEkgdGhpbmsgSSdsbCBmb2N1cyBvbiBgdGVhbV9hZGRfc2xhdmVgIGZvciBub3cgLSBpdCdzIGEgY2xlYW5lciBzeW1ib2wgdG8gaW52ZXN0aWdhdGUuIEVpdGhlciB0aGF0LCBvciBJJ2xsIGp1c3QgY2hlY2sgaWYgYHRlYW1fcG9ydF9hZGRgIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IHdvdWxkbid0IGJlIGlubGluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjQyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjIxLjI4ODUwODc5OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEyOlxcdHN0YXRpYyBpbnQgdGVhbV9wb3J0X2FkZChzdHJ1Y3QgdGVhbSAqdGVhbSwgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2LFxcbjEyMTM6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMjE0OlxcdHtcXG4xMjE1OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHRlYW0pO1xcbjEyMTY6XFx0XFx0c3RydWN0IHRlYW1fcG9ydCAqcG9ydDtcXG4xMjE3OlxcdFxcdGNoYXIgKnBvcnRuYW1lID0gcG9ydF9kZXYtXFx1MDAzZW5hbWU7XFxuMTIxODpcXHRcXHRpbnQgZXJyO1xcbjEyMTk6XFx0XFxuMTIyMDpcXHRcXHRpZiAocG9ydF9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XFxuMTIyMTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJMb29wYmFjayBkZXZpY2UgY2FuJ3QgYmUgYWRkZWQgYXMgYSB0ZWFtIHBvcnRcXFwiKTtcXG4xMjIyOlxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiRGV2aWNlICVzIGlzIGxvb3BiYWNrIGRldmljZS4gTG9vcGJhY2sgZGV2aWNlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcXFxuXFxcIixcXG4xMjIzOlxcdFxcdFxcdFxcdCAgIHBvcnRuYW1lKTtcXG4xMjI0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyMjU6XFx0XFx0fVxcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRcXHRpZiAocG9ydF9kZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxcbjEyMjg6XFx0XFx0XFx0ICAgIHBvcnRfZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0IHx8XFxuMTIyOTpcXHRcXHRcXHQgICAgcG9ydF9kZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xcbjEyMzA6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjEyMzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcXCIpO1xcbjEyMzI6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJEZXZpY2UgJXMgaXMgQ0FOIG9yIElFRUUgODAyLjE1LjQuIFRoZXNlIGRldmljZSB0eXBlcyBjYW4ndCBiZSBhZGRlZCBhcyBhIHRlYW0gcG9ydFxcXFxuXFxcIixcXG4xMjMzOlxcdFxcdFxcdFxcdFxcdCAgIHBvcnRuYW1lKTtcXG4xMjM0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyMzU6XFx0XFx0XFx0fVxcbjEyMzY6XFx0XFx0fVxcbjEyMzc6XFx0XFxuMTIzODpcXHRcXHRpZiAobmV0aWZfaXNfdGVhbV9wb3J0KHBvcnRfZGV2KSkge1xcbjEyMzk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRGV2aWNlIGlzIGFscmVhZHkgYSBwb3J0IG9mIGEgdGVhbSBkZXZpY2VcXFwiKTtcXG4xMjQwOlxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiRGV2aWNlICVzIGlzIGFscmVhZHkgYSBwb3J0IFxcXCJcXG4xMjQxOlxcdFxcdFxcdFxcdFxcdFxcXCJvZiBhIHRlYW0gZGV2aWNlXFxcXG5cXFwiLCBwb3J0bmFtZSk7XFxuMTI0MjpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjEyNDM6XFx0XFx0fVxcbjEyNDQ6XFx0XFxuMTI0NTpcXHRcXHRpZiAoZGV2ID09IHBvcnRfZGV2KSB7XFxuMTI0NjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDYW5ub3QgZW5zbGF2ZSB0ZWFtIGRldmljZSB0byBpdHNlbGZcXFwiKTtcXG4xMjQ3OlxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiQ2Fubm90IGVuc2xhdmUgdGVhbSBkZXZpY2UgdG8gaXRzZWxmXFxcXG5cXFwiKTtcXG4xMjQ4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNDk6XFx0XFx0fVxcbjEyNTA6XFx0XFxuMTI1MTpcXHRcXHRpZiAobmV0ZGV2X2hhc191cHBlcl9kZXYoZGV2LCBwb3J0X2RldikpIHtcXG4xMjUyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkRldmljZSBpcyBhbHJlYWR5IGFuIHVwcGVyIGRldmljZSBvZiB0aGUgdGVhbSBpbnRlcmZhY2VcXFwiKTtcXG4xMjUzOlxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiRGV2aWNlICVzIGlzIGFscmVhZHkgYW4gdXBwZXIgZGV2aWNlIG9mIHRoZSB0ZWFtIGludGVyZmFjZVxcXFxuXFxcIixcXG4xMjU0OlxcdFxcdFxcdFxcdCAgIHBvcnRuYW1lKTtcXG4xMjU1OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTI1NjpcXHRcXHR9XFxuMTI1NzpcXHRcXG4xMjU4OlxcdFxcdGlmIChuZXRkZXZfaGFzX3VwcGVyX2Rldihwb3J0X2RldiwgZGV2KSkge1xcbjEyNTk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRGV2aWNlIGlzIGFscmVhZHkgYSBsb3dlciBkZXZpY2Ugb2YgdGhlIHRlYW0gaW50ZXJmYWNlXFxcIik7XFxuMTI2MDpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIkRldmljZSAlcyBpcyBhbHJlYWR5IGEgbG93ZXIgZGV2aWNlIG9mIHRoZSB0ZWFtIGludGVyZmFjZVxcXFxuXFxcIixcXG4xMjYxOlxcdFxcdFxcdFxcdCAgIHBvcnRuYW1lKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MjEuMjg4NzQyMDk5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTg0MzU3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbmV0d29ya2luZyBjb2RlOlxuXG4qKkFuYWx5emluZyBUZWFtIEludGVyZmFjZSBTbGF2ZSBBZGRpdGlvbioqXG5cblJpZ2h0LCBzbyBgdGVhbV9wb3J0X2FkZGAgaXMgYSBoZWZ0eSBmdW5jdGlvbiwgbGlrZWx5IG5vdCBpbmxpbmVkLiBJdCdzIHByb2JhYmx5IGRvaW5nIGEgYnVuY2ggb2Ygc2V0dXAsIGNvbmZpZ3VyYXRpb24sIGFuZCBkZXZpY2UtbGV2ZWwgbWFuaXB1bGF0aW9ucy4gVGhlIG1vcmUgaW50ZXJlc3RpbmcgZW50cnkgcG9pbnQsIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgZ3JvdW5kIGxldmVsLCBpcyBkZWZpbml0ZWx5IGB0ZWFtX2FkZF9zbGF2ZWAuIExldCdzIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzIGFuZCBkaXZlIHJpZ2h0IGludG8gYHRlYW1fYWRkX3NsYXZlYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGFkZGluZyBhIHNsYXZlIGludGVyZmFjZSB0byB0aGUgdGVhbSBwcm9iYWJseSByZXNpZGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA4OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MjQuNDg3MTgxNDc2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMTcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMTc6XFx0c3RhdGljIGludCB0ZWFtX2FkZF9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqcG9ydF9kZXYsXFxuMjExODpcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4yMTE5OlxcdHtcXG4yMTIwOlxcdFxcdHN0cnVjdCB0ZWFtICp0ZWFtID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4yMTIxOlxcdFxcbjIxMjI6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4yMTIzOlxcdFxcbjIxMjQ6XFx0XFx0cmV0dXJuIHRlYW1fcG9ydF9hZGQodGVhbSwgcG9ydF9kZXYsIGV4dGFjayk7XFxuMjEyNTpcXHR9XFxuMjEyNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MjQuNDg3MzI5MzU2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjI1NzA4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGVhbSBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGB0ZWFtX2FkZF9zbGF2ZWAgaXMgZXNzZW50aWFsbHkgYSB0aGluIGxheWVyIG92ZXIgYHRlYW1fcG9ydF9hZGRgLiBTaW5jZSBpdCdzIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciwgaW5saW5pbmcgaXMgb3V0IHRoZSB3aW5kb3cgZm9yIGB0ZWFtX2FkZF9zbGF2ZWAsIGJ1dCBgdGVhbV9wb3J0X2FkZGAgaXMgdGhlIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSB0byBiZSBpbmxpbmVkIGludG8gaXQuIFRoYXQgbWVhbnMgSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGB0ZWFtX2FkZF9zbGF2ZWAgaXRzZWxmIGZvciBub3cuXG5cbkxldCBtZSBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuLi4gYE5FVF9URUFNYCwgYENBTmAsIGBDQU5fREVWYCwgYENBTl9WQ0FOYCwgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYElFRUU4MDIxNTRfRFJJVkVSU2AsIGFuZCBgSUVFRTgwMjE1NF9IV1NJTWAuXG5cbkhvbGQgb24uLi4gSSBkb24ndCB0aGluayBJIG5lZWQgYElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMYC4gQW5kIGZvciBDQU4sIGp1c3QgYENBTl9WQ0FOYCBzZWVtcyBzdWZmaWNpZW50IGZvciBjcmVhdGluZyBhIENBTiBkZXZpY2U7IEkgZG9uJ3QgbmVlZCBgQ0FOX1JBV2Agb3IgYENBTl9CQ01gLiBXYWl0IGEgc2Vjb25kLi4uIGBDQU5fVkNBTmAgaXMgYSB2aXJ0dWFsIGRldmljZSEgUGVyZmVjdCBmb3IgZnV6emluZyEgQW5kIHRoZSBzYW1lIGdvZXMgZm9yIGBJRUVFODAyMTU0X0hXU0lNYCDigJMgYW5vdGhlciB2aXJ0dWFsIDgwMi4xNS40IGRldmljZSBpZGVhbCBmb3IgZnV6emluZy5cblxuTm93LCBqdXN0IHRvIGJlIHN1cmUsIGxldCdzIHZlcmlmeSBgSUVFRTgwMjE1NF9IV1NJTWAncyBkZXBlbmRlbmNpZXMuIEl0IHNlZW1zIGl0IHJlcXVpcmVzIGBJRUVFODAyMTU0X0RSSVZFUlNgIGFuZCBgTUFDODAyMTU0YC4gYE1BQzgwMjE1NGAgaW4gdHVybiByZXF1aXJlcyBgSUVFRTgwMjE1NGAuIE9rYXksIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxNTRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ2MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjMwLjYwOTkwNjA5NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NTQ0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjE1NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTU0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjE1NC9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjE1NFxcbm5ldC9tYWM4MDIxNTQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMTo0NDozMC42NTY0NjUyMjNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMjQyMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIE1BQyA4MDIuMTUuNCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBuZXQvbWFjODAyMTU0L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIElFRUUgODAyLjE1LjQgTUFDIGxheWVyIGluIHRoZSBrZXJuZWwgcmVzaWRlcy4gSSBrbm93IHRoaXMgZmlsZSBpbnRpbWF0ZWx5IOKAkyBpdCdzIHRoZSBnYXRla2VlcGVyIHRvIGN1c3RvbWl6aW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiBoZXJlLCBlc3BlY2lhbGx5IGlmIEknbSBsb29raW5nIGF0IG1vZGlmeWluZyBvciBkZWJ1Z2dpbmcgc29tZSA4MDIuMTUuNCByZWxhdGVkIGRyaXZlciBvciBmdW5jdGlvbmFsaXR5LiBJIGV4cGVjdCB0byBmaW5kIHRoZSB1c3VhbCBzdXNwZWN0czogb3B0aW9ucyBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHZhcmlvdXMgTUFDIGZlYXR1cmVzLCBzZWxlY3RpbmcgZGVmYXVsdCBwYXJhbWV0ZXJzLCBhbmQgcG90ZW50aWFsbHkgY29uZmlndXJpbmcgZGlmZmVyZW50IFBIWSBpbnRlcmZhY2VzIHRoYXQgdGhpcyBNQUMgbGF5ZXIgc3VwcG9ydHMuIEknbSBob3BpbmcgSSdsbCBhbHNvIHNlZSBzb21lIG5ldyBhZGRpdGlvbnMgdG8ga2VlcCB1cCB3aXRoIHRoZSBsYXRlc3Qgd2lyZWxlc3Mgc3RhbmRhcmRzLCBzdWNoIGFzIElFRUUgODAyLjE1LjQtMjAyMC4gSeKAmWxsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9ucyBjYW4gc3VwcG9ydCB0aGUgbmV3IHdpcmVsZXNzIHN0YW5kYXJkIHRvIGJlIGNvbXBsaWFudC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM2OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjM0LjY4ODg4ODcwM1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTU0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBNQUM4MDIxNTRcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0XFxuICAgNTpcXHRcXHRzZWxlY3QgQ1JDX0NDSVRUXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NUUlxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6MzQuNjg4OTYyMTkzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTYwMDAyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgODAyLjE1LjQgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgdGhlIGZ1bmRhbWVudGFsIHJlbGF0aW9uc2hpcCBoZXJlLiBDbGVhcmx5LCBgTUFDODAyMTU0YCBpcyBidWlsdCB1cG9uIHRoZSBmb3VuZGF0aW9uIG9mIGBJRUVFODAyMTU0YC4gVGhhdOKAmXMgdGhlIGNvcmUgcmVsYXRpb25zaGlwIHdlJ3JlIGRlYWxpbmcgd2l0aCwgdGhlIE1BQyBsYXllciByZWx5aW5nIG9uIHRoZSBicm9hZGVyIHBoeXNpY2FsIGFuZCBNQUMgc3BlY2lmaWNhdGlvbnMuIEl0J3MgdGhlIG1vc3QgYmFzaWMgZGVwZW5kZW5jeS5cblxuTm93LCB0aGUgZm9sbG93LXVwLCBhbmQgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gZm9yIG1lLCBjb25jZXJucyBgSUVFRTgwMjE1NF9EUklWRVJTYC4gQXJlIHRoZXNlIG5lY2Vzc2FyaWx5IG1vbm9saXRoaWM/IERvIHdlIHNlZSB0aWdodCBjb3VwbGluZyBvciBsb29zZSBjb3VwbGluZyBiZXR3ZWVuIHRoZSBkcml2ZXJzIGFuZCB0aGF0IHByb3RvY29sPyBBcmUgdGhlIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWMsIG9yIGNhbiB3ZSB0YWxrIGFib3V0IGdlbmVyaWMgaW1wbGVtZW50YXRpb25zPyBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBzdHJ1Y3R1cmVkIHRvIGludGVyYWN0IHdpdGggdGhlIHN0YWNrLiBUaGV5J3JlIGNyaXRpY2FsLiBBcmUgdGhleSB0aWdodGx5IGJvdW5kIHRvIHNwZWNpZmljIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIGlzIHRoZXJlIGEgbW9yZSBhYnN0cmFjdCBsYXllciBpbnZvbHZlZD8gSSBpbW1lZGlhdGVseSB3YW50IHRvIGtub3cgaG93IGFkYXB0YWJsZSB0aGV5IGFyZS4gSG93IHBvcnRhYmxlIGFyZSB3ZSB0YWxraW5nPyBUaGF04oCZcyB3aGF04oCZcyByZWFsbHkgcmVsZXZhbnQgdG8gbWUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MjQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIxOjQ0OjQwLjA0NDk2NzEyN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnVjb25maWcgSUVFRTgwMjE1NF9EUklWRVJTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMTUuNCBkcml2ZXJzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IElFRUU4MDIxNTRcXG4gICA1OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBMb3ctUmF0ZVxcbiAgIDg6XFx0XFx0ICBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuIFRoaXMgb3B0aW9uIGFsb25lXFxuICAgOTpcXHRcXHQgIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6NDAuMDQ1MDQ0MzE3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzIwOTA4MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGEgTmV0d29yayBUZWFtIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCBhIGRlcGVuZGVuY3kgY2hhaW4uIGBJRUVFODAyMTU0X0RSSVZFUlNgIGhpbmdlcyBvbiBgTkVUREVWSUNFU2AgYW5kIGBJRUVFODAyMTU0YC4gVGhlcmVmb3JlLCB0byBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQsIEknbGwgbmVlZCB0aGVzZSBjb25maWd1cmF0aW9uczogYE5FVF9URUFNYCwgYENBTmAsIGBDQU5fREVWYCwgYENBTl9WQ0FOYCwgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYElFRUU4MDIxNTRfRFJJVkVSU2AsIGFuZCBgSUVFRTgwMjE1NF9IV1NJTWAuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhlIGlzc3VlOiBgdGVhbV9wb3J0X2FkZGAgZ2V0cyBjYWxsZWQgd2hlbiB3ZSdyZSB0cnlpbmcgdG8gYWRkIGEgcG9ydCB0byBhIHRlYW0gZGV2aWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBwb3J0IGlzIENBTiBvciBJRUVFODAyMTU0LiBJZiBzbywgaXQgaW1tZWRpYXRlbHkgdGhyb3dzIGFuIGVycm9yLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGZpeCwgZGVzaWduZWQgdG8gcHJldmVudCBhIGNyYXNoIG9yIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgaXQgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluay4gR2l2ZW4gdGhpcywgaXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBzb2xpZGlmeSB0aGUgZW50cnkgcG9pbnQuIElzIGB0ZWFtX2FkZF9zbGF2ZWAgdGhlIG9ubHkgcGxhY2UgYHRlYW1fcG9ydF9hZGRgIGdldHMgY2FsbGVkPyBBIHF1aWNrIGdyZXAgY29uZmlybWVkIGl0OyBgdGVhbV9wb3J0X2FkZGAgaXMgKm9ubHkqIGNhbGxlZCBieSBgdGVhbV9hZGRfc2xhdmVgLiBTbywgYHRlYW1fYWRkX3NsYXZlYCBpcyBvdXIga2V5IHN5bWJvbC5cblxuTm93LCBsZXQncyBleHBsb3JlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIGBORVRfVEVBTWAgaXMgYSB0cmlzdGF0ZSwgc28gZW5hYmxpbmcgaXQgaXMgZnVuZGFtZW50YWwuIFdoaWxlIHdlJ3JlIGF0IGl0LCBlbmFibGluZyB0aGUgZGlmZmVyZW50IG1vZGVzIOKAkyBgTkVUX1RFQU1fTU9ERV9CUk9BRENBU1RgLCBgTkVUX1RFQU1fTU9ERV9ST1VORFJPQklOYCwgYE5FVF9URUFNX01PREVfUkFORE9NYCwgYE5FVF9URUFNX01PREVfQUNUSVZFQkFDS1VQYCwgYE5FVF9URUFNX01PREVfTE9BREJBTEFOQ0VgIOKAkyBjb3VsZCBiZSBwcnVkZW50IGZvciBicm9hZGVyIHRlc3RpbmcsIGV2ZW4gdGhvdWdoIHRoZSBidWcncyBpbiBgdGVhbV9jb3JlLmNgLCB3aGljaCBjb21waWxlcyB3aXRoIGp1c3QgYE5FVF9URUFNYC4gU28sIGBORVRfVEVBTWAgaXMgc3VmZmljaWVudCwgYnV0IHRob3NlIG90aGVycyBtaWdodCBleHBhbmQgdGhlIHRlc3Qgc3VyZmFjZS5cblxuRmluYWxseSwgbGV0J3MgcmV2aXNpdCB0aGUgcGF0Y2ggaXRzZWxmLlxuXG5gYGBjXG4rXHRcdGlmIChwb3J0X2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9DQU4gfHxcbitcdFx0ICAgIHBvcnRfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTQgfHxcbitcdFx0ICAgIHBvcnRfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkNBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbid0IGJlIGFkZGVkIGFzIGEgdGVhbSBwb3J0XCIpO1xuK1x0XHRcdG5ldGRldl9lcnIoZGV2LCBcIkRldmljZSAlcyBpcyBDQU4gb3IgSUVFRSA4MDIuMTUuNC4gVGhlc2UgZGV2aWNlIHR5cGVzIGNhbid0IGJlIGFkZGVkIGFzIGEgdGVhbSBwb3J0XFxuXCIsXG4rXHRcdFx0XHQgICBwb3J0bmFtZSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbmBgYFxuXG5JdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrOiBpZiB0aGUgZGV2aWNlIHR5cGUgbWF0Y2hlcyBgQVJQSFJEX0NBTmAsIGBBUlBIUkRfSUVFRTgwMjE1NGAsIG9yIGBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SYCwgd2UgZ2V0IHRoZSBlcnJvci5cblxuVG8gcmVjYXAsIHRoZSBmb2N1cyBzeW1ib2wgaXMgYHRlYW1fYWRkX3NsYXZlYCwgYW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgYE5FVF9URUFNYCwgYENBTmAsIGBDQU5fREVWYCwgYENBTl9WQ0FOYCwgYElFRUU4MDIxNTRgLCBgTUFDODAyMTU0YCwgYElFRUU4MDIxNTRfRFJJVkVSU2AsIGFuZCBgSUVFRTgwMjE1NF9IV1NJTWAuIEknbSByZWFkeSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzMTMsIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjE6NDQ6NTAuNzY1OTU3ODA0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1MjAzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9URUFNXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9ERVZcIixcbiAgICBcIkNBTl9WQ0FOXCIsXG4gICAgXCJJRUVFODAyMTU0XCIsXG4gICAgXCJNQUM4MDIxNTRcIixcbiAgICBcIklFRUU4MDIxNTRfRFJJVkVSU1wiLFxuICAgIFwiSUVFRTgwMjE1NF9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRlYW1fYWRkX3NsYXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGB0ZWFtX3BvcnRfYWRkYCAoY2FsbGVkIHZpYSBgdGVhbV9hZGRfc2xhdmVgKSB0byBwcmV2ZW50IGFkZGluZyBDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBhcyB0ZWFtIHBvcnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdGVhbSBkZXZpY2VzLiBGdXp6aW5nIHJlcXVpcmVzIHRoZSB0ZWFtIGRyaXZlciBhbmQgdmlydHVhbCBDQU4vSUVFRTgwMjE1NCBkZXZpY2VzIHRvIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1RFQU1cIixcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0RFVlwiLFxuICAgIFwiQ0FOX1ZDQU5cIixcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIk1BQzgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9EUklWRVJTXCIsXG4gICAgXCJJRUVFODAyMTU0X0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGVhbV9hZGRfc2xhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gYHRlYW1fcG9ydF9hZGRgIChjYWxsZWQgdmlhIGB0ZWFtX2FkZF9zbGF2ZWApIHRvIHByZXZlbnQgYWRkaW5nIENBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGFzIHRlYW0gcG9ydHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgd2hlbiBjb25maWd1cmluZyB0ZWFtIGRldmljZXMuIEZ1enppbmcgcmVxdWlyZXMgdGhlIHRlYW0gZHJpdmVyIGFuZCB2aXJ0dWFsIENBTi9JRUVFODAyMTU0IGRldmljZXMgdG8gYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowc2lwm[1] Phase: Succeeded StartedAt: 2026-07-29 21:45:00 +0000 UTC FinishedAt: 2026-07-29 21:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 21:45:00 +0000 UTC FinishedAt: 2026-07-29 21:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2] Phase: Succeeded StartedAt: 2026-07-29 21:45:00 +0000 UTC FinishedAt: 2026-07-29 22:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-29 21:45:00 +0000 UTC FinishedAt: 2026-07-29 22:45:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 21:45:00 +0000 UTC FinishedAt: 2026-07-29 21:45:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 21:45:00 +0000 UTC FinishedAt: 2026-07-29 21:45:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc2lwm/series-workflowc2lwm-convert-artifact-231152640/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 21:45:19 +0000 UTC FinishedAt: 2026-07-29 22:28:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 21:45:19 +0000 UTC FinishedAt: 2026-07-29 22:28:54 +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:*0bf20155-9848-40d1-b1f8-d4748dcf998e,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-workflowc2lwm/series-workflowc2lwm-convert-artifact-231152640/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": "c9f54d34-a8a6-4e8d-8909-abf9e9c573ff", "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-workflowc2lwm/series-workflowc2lwm-build-action-2278656707/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Failed StartedAt: 2026-07-29 21:45:19 +0000 UTC FinishedAt: 2026-07-29 21:51:09 +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:*0bf20155-9848-40d1-b1f8-d4748dcf998e,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-workflowc2lwm/series-workflowc2lwm-convert-artifact-231152640/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:*,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-workflowc2lwm/series-workflowc2lwm-build-action-3956565702/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*143,} --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(1) Phase: Succeeded StartedAt: 2026-07-29 21:56:33 +0000 UTC FinishedAt: 2026-07-29 22:28:42 +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:*0bf20155-9848-40d1-b1f8-d4748dcf998e,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-workflowc2lwm/series-workflowc2lwm-convert-artifact-231152640/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": "c9f54d34-a8a6-4e8d-8909-abf9e9c573ff", "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-workflowc2lwm/series-workflowc2lwm-build-action-2278656707/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 22:28:54 +0000 UTC FinishedAt: 2026-07-29 22:28:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 22:28:54 +0000 UTC FinishedAt: 2026-07-29 22:28:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 22:28:54 +0000 UTC FinishedAt: 2026-07-29 22:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 22:28:54 +0000 UTC FinishedAt: 2026-07-29 22:28:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc2lwm/series-workflowc2lwm-convert-artifact-604449703/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 22:29:08 +0000 UTC FinishedAt: 2026-07-29 22:30:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 22:29:08 +0000 UTC FinishedAt: 2026-07-29 22:30:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c9f54d34-a8a6-4e8d-8909-abf9e9c573ff,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-workflowc2lwm/series-workflowc2lwm-build-action-2278656707/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-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 22:30:57 +0000 UTC FinishedAt: 2026-07-29 22:30:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 22:30:57 +0000 UTC FinishedAt: 2026-07-29 22:30:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 22:30:57 +0000 UTC FinishedAt: 2026-07-29 22:45:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 22:30:57 +0000 UTC FinishedAt: 2026-07-29 22:45:36 +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:*0bf20155-9848-40d1-b1f8-d4748dcf998e,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-workflowc2lwm/series-workflowc2lwm-convert-artifact-604449703/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": "08aac67c-0bc8-4532-a3e2-acb78eba26e8", "success": false },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-workflowc2lwm/series-workflowc2lwm-build-action-1951898923/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 22:30:57 +0000 UTC FinishedAt: 2026-07-29 22:45:26 +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:*0bf20155-9848-40d1-b1f8-d4748dcf998e,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-workflowc2lwm/series-workflowc2lwm-convert-artifact-604449703/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": "08aac67c-0bc8-4532-a3e2-acb78eba26e8", "success": false },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-workflowc2lwm/series-workflowc2lwm-build-action-1951898923/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-07-29 22:45:36 +0000 UTC FinishedAt: 2026-07-29 22:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2lwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["team_add_slave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_TEAM","CAN","CAN_DEV","CAN_VCAN","IEEE802154","MAC802154","IEEE802154_DRIVERS","IEEE802154_HWSIM"],"series_id":"e0faf45d-b7b0-483e-96d3-a27fcc248199","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-07-29 22:45:36 +0000 UTC FinishedAt: 2026-07-29 22:45:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}