Name: series-workflowg2w59 Phase: Succeeded StartedAt: 2026-09-08 11:32:34 +0000 UTC FinishedAt: 2026-09-08 13:51:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[0] Phase: Succeeded StartedAt: 2026-09-08 11:32:34 +0000 UTC FinishedAt: 2026-09-08 11:35:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 11:32:34 +0000 UTC FinishedAt: 2026-09-08 11:35:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_SUPPORT", "USB_PHY", "NOP_USB_XCEIV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_SUPPORT", "USB_PHY", "NOP_USB_XCEIV" ], "series_id": "94ac6ed0-1963-4775-818e-afdf00285564" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "usb_phy_notify_charger_work", "usb_add_phy_dev", "usb_phy_set_charger_state", "usb_phy_set_charger_current" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1VTQl9QSFkmIzM0OywKICAgICYjMzQ7Tk9QX1VTQl9YQ0VJViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayYjMzQ7LAogICAgJiMzNDt1c2JfYWRkX3BoeV9kZXYmIzM0OywKICAgICYjMzQ7dXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSYjMzQ7LAogICAgJiMzNDt1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFVTQiBQSFkgdWV2ZW50IG5vdGlmaWNhdGlvbiBieSBzZW5kaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKClgIHVzaW5nIGBrb2JqZWN0X3VldmVudF9lbnYoKWAgcmF0aGVyIHRoYW4gdmlhIGEgYGRldmljZV90eXBlLnVldmVudGAgY2FsbGJhY2suIFxuXG5BbGwgc3RhY2sgYnVmZmVycyBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2ggKGB1Y2hnZXJfc3RhdGVgLCBgdWNoZ2VyX3R5cGVgLCBhbmQgYGVudnBgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIChgPSB7IDAgfWAgLyBleHBsaWNpdCBpbml0aWFsaXphdGlvbiB3aXRoIE5VTEwgdGVybWluYXRvcikgYmVmb3JlIHN0cmluZyBmb3JtYXR0aW5nIHZpYSBgc25wcmludGYoKWAgYW5kIGJlaW5nIHBhc3NlZCB0byBga29iamVjdF91ZXZlbnRfZW52KClgLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHJpc2tzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGFycmF5IGluZGV4aW5nIChlLmcuIGB1c2JfY2hnZXJfdHlwZWApIGFyZSBib3VuZHMgY2hlY2sgLyBvdXQtb2YtYm91bmRzIHJlYWQgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTiwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdWV2ZW50IHJlcG9ydGluZyBtZWNoYW5pc20gZm9yIFVTQiBQSFkgY2hhcmdlciBldmVudHMgaW4gZHJpdmVycy91c2IvcGh5L3BoeS5jLiBJbnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgZGV2aWNlIHR5cGUgYW5kIGltcGxlbWVudGluZyBhIGN1c3RvbSB1ZXZlbnQgY2FsbGJhY2ssIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgY2hhcmdlciBzdGF0ZSBhbmQgdHlwZSBhcmUgbm93IGNvbnN0cnVjdGVkIGFuZCBwYXNzZWQgZGlyZWN0bHkgdmlhIGtvYmplY3RfdWV2ZW50X2VudigpIHdpdGhpbiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgUEhZIGNvcmUgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NmVmZDU3MWMzZDIxMTdhODg2ZGQ3ZDFkNDQ4YTViYzA2YWFmZjJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMTozNDoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LmMgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmNcbmluZGV4IDVhOWI5MzUzZjM0M2QuLjdjODVjN2NhMWQzMDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9waHkvcGh5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xuQEAgLTQyLDEyICYjNDM7NDIsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3R5cGVbXSA9IHtcbiBcdFtBQ0FfVFlQRV1cdFx0XHQ9IFwmIzM0O1VTQl9DSEFSR0VSX0FDQV9UWVBFXCYjMzQ7LFxuIH07XG4gXG4tc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl9zdGF0ZVtdID0ge1xuLVx0W1VTQl9DSEFSR0VSX0RFRkFVTFRdXHQ9IFwmIzM0O1VTQl9DSEFSR0VSX0RFRkFVTFRcJiMzNDssXG4tXHRbVVNCX0NIQVJHRVJfUFJFU0VOVF1cdD0gXCYjMzQ7VVNCX0NIQVJHRVJfUFJFU0VOVFwmIzM0Oyxcbi1cdFtVU0JfQ0hBUkdFUl9BQlNFTlRdXHQ9IFwmIzM0O1VTQl9DSEFSR0VSX0FCU0VOVFwmIzM0Oyxcbi19O1xuLVxuIHN0YXRpYyBzdHJ1Y3QgdXNiX3BoeSAqX191c2JfZmluZF9waHkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiBcdGVudW0gdXNiX3BoeV90eXBlIHR5cGUpXG4ge1xuQEAgLTgwLDE4ICYjNDM7NzQsNiBAQCBzdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fb2ZfdXNiX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbiBcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fZGV2aWNlX3RvX3VzYl9waHkoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KVxuLXtcbi1cdHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5O1xuLVxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh1c2JfcGh5LCBcdTAwMjZwaHlfbGlzdCwgaGVhZCkge1xuLVx0XHRpZiAodXNiX3BoeS1cdTAwM2VkZXYgPT0gZGV2KVxuLVx0XHRcdHJldHVybiB1c2JfcGh5O1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcbiB7XG4gXHR1c2JfcGh5LVx1MDAzZWNoZ19jdXIuc2RwX21pbiA9IERFRkFVTFRfU0RQX0NVUl9NSU47XG5AQCAtMTIzLDYgJiM0MzsxMDUsOSBAQCBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4gc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX3BoeSwgY2hnX3dvcmspO1xuJiM0MztcdGNoYXIgdWNoZ2VyX3N0YXRlWzUwXSA9IHsgMCB9O1xuJiM0MztcdGNoYXIgdWNoZ2VyX3R5cGVbNTBdID0geyAwIH07XG4mIzQzO1x0Y2hhciAqZW52cFtdID0geyB1Y2hnZXJfc3RhdGUsIHVjaGdlcl90eXBlLCBOVUxMIH07XG4gXHR1bnNpZ25lZCBpbnQgbWluLCBtYXg7XG4gXG4gXHRzd2l0Y2ggKHVzYl9waHktXHUwMDNlY2hnX3N0YXRlKSB7XG5AQCAtMTMwLDExICYjNDM7MTE1LDE1IEBAIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHVzYl9waHlfZ2V0X2NoYXJnZXJfY3VycmVudCh1c2JfcGh5LCBcdTAwMjZtaW4sIFx1MDAyNm1heCk7XG4gXG4gXHRcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnVzYl9waHktXHUwMDNlbm90aWZpZXIsIG1heCwgdXNiX3BoeSk7XG4mIzQzO1x0XHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcbiYjNDM7XHRcdFx0IFwmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzXCYjMzQ7LCBcJiMzNDtVU0JfQ0hBUkdFUl9QUkVTRU5UXCYjMzQ7KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFVTQl9DSEFSR0VSX0FCU0VOVDpcbiBcdFx0dXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHVzYl9waHkpO1xuIFxuIFx0XHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZ1c2JfcGh5LVx1MDAzZW5vdGlmaWVyLCAwLCB1c2JfcGh5KTtcbiYjNDM7XHRcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxuJiM0MztcdFx0XHQgXCYjMzQ7VVNCX0NIQVJHRVJfU1RBVEU9JXNcJiMzNDssIFwmIzM0O1VTQl9DSEFSR0VSX0FCU0VOVFwmIzM0Oyk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X3dhcm4odXNiX3BoeS1cdTAwM2VkZXYsIFwmIzM0O1Vua25vd24gVVNCIGNoYXJnZXIgc3RhdGU6ICVkXFxuXCYjMzQ7LFxuQEAgLTE0MiwzNiAmIzQzOzEzMSw5IEBAIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGtvYmplY3RfdWV2ZW50KFx1MDAyNnVzYl9waHktXHUwMDNlZGV2LVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbi19XG4tXG4tc3RhdGljIGludCB1c2JfcGh5X3VldmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudilcbi17XG4tXHRjb25zdCBzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeTtcbi1cdGNoYXIgdWNoZ2VyX3N0YXRlWzUwXSA9IHsgMCB9O1xuLVx0Y2hhciB1Y2hnZXJfdHlwZVs1MF0gPSB7IDAgfTtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xuLVx0dXNiX3BoeSA9IF9fZGV2aWNlX3RvX3VzYl9waHkoZGV2KTtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGh5X2xvY2ssIGZsYWdzKTtcbi1cbi1cdGlmICghdXNiX3BoeSlcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tXG4tXHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcbi1cdFx0IFwmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzXCYjMzQ7LCB1c2JfY2hnZXJfc3RhdGVbdXNiX3BoeS1cdTAwM2VjaGdfc3RhdGVdKTtcbi1cbiBcdHNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSxcbiBcdFx0IFwmIzM0O1VTQl9DSEFSR0VSX1RZUEU9JXNcJiMzNDssIHVzYl9jaGdlcl90eXBlW3VzYl9waHktXHUwMDNlY2hnX3R5cGVdKTtcbi1cbi1cdGlmIChhZGRfdWV2ZW50X3ZhcihlbnYsIHVjaGdlcl9zdGF0ZSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0aWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgdWNoZ2VyX3R5cGUpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdHJldHVybiAwO1xuJiM0MztcdGtvYmplY3RfdWV2ZW50X2VudihcdTAwMjZ1c2JfcGh5LVx1MDAzZWRldi1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxuQEAgLTY3NSwxMSAmIzQzOzYzNyw2IEBAIGludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodXNiX2FkZF9waHkpO1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdXNiX3BoeV9kZXZfdHlwZSA9IHtcbi1cdC5uYW1lID0gXCYjMzQ7dXNiX3BoeVwmIzM0Oyxcbi1cdC51ZXZlbnQgPSB1c2JfcGh5X3VldmVudCxcbi19O1xuLVxuIC8qKlxuICAqIHVzYl9hZGRfcGh5X2RldiAtIGRlY2xhcmUgdGhlIFVTQiBQSFlcbiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxuQEAgLTcwNSw4ICYjNDM7NjYyLDYgQEAgaW50IHVzYl9hZGRfcGh5X2RldihzdHJ1Y3QgdXNiX3BoeSAqeClcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHR4LVx1MDAzZWRldi1cdTAwM2V0eXBlID0gXHUwMDI2dXNiX3BoeV9kZXZfdHlwZTtcbi1cbiBcdEFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoXHUwMDI2eC1cdTAwM2Vub3RpZmllcik7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1VTQl9QSFkmIzM0OywKICAgICYjMzQ7Tk9QX1VTQl9YQ0VJViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayYjMzQ7LAogICAgJiMzNDt1c2JfYWRkX3BoeV9kZXYmIzM0OywKICAgICYjMzQ7dXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSYjMzQ7LAogICAgJiMzNDt1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1ZXZlbnQgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3IgVVNCIFBIWSBjaGFyZ2VyIGV2ZW50cyBpbiBkcml2ZXJzL3VzYi9waHkvcGh5LmMuIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHlwZSBhbmQgaW1wbGVtZW50aW5nIGEgY3VzdG9tIHVldmVudCBjYWxsYmFjaywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjaGFyZ2VyIHN0YXRlIGFuZCB0eXBlIGFyZSBub3cgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCBkaXJlY3RseSB2aWEga29iamVjdF91ZXZlbnRfZW52KCkgd2l0aGluIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBQSFkgY29yZSBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2ZWZkNTcxYzNkMjExN2E4ODZkZDdkMWQ0NDhhNWJjMDZhYWZmMmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDExOjM0OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS5jIGIvZHJpdmVycy91c2IvcGh5L3BoeS5jCmluZGV4IDVhOWI5MzUzZjM0M2QuLjdjODVjN2NhMWQzMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmMKQEAgLTQyLDEyICYjNDM7NDIsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3R5cGVbXSA9IHsKIAlbQUNBX1RZUEVdCQkJPSAmIzM0O1VTQl9DSEFSR0VSX0FDQV9UWVBFJiMzNDssCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3N0YXRlW10gPSB7Ci0JW1VTQl9DSEFSR0VSX0RFRkFVTFRdCT0gJiMzNDtVU0JfQ0hBUkdFUl9ERUZBVUxUJiMzNDssCi0JW1VTQl9DSEFSR0VSX1BSRVNFTlRdCT0gJiMzNDtVU0JfQ0hBUkdFUl9QUkVTRU5UJiMzNDssCi0JW1VTQl9DSEFSR0VSX0FCU0VOVF0JPSAmIzM0O1VTQl9DSEFSR0VSX0FCU0VOVCYjMzQ7LAotfTsKLQogc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogCWVudW0gdXNiX3BoeV90eXBlIHR5cGUpCiB7CkBAIC04MCwxOCAmIzQzOzc0LDYgQEAgc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiAJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3BoeSAqX19kZXZpY2VfdG9fdXNiX3BoeShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVzYl9waHkgKnVzYl9waHk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVzYl9waHksICZhbXA7cGh5X2xpc3QsIGhlYWQpIHsKLQkJaWYgKHVzYl9waHktJmd0O2RldiA9PSBkZXYpCi0JCQlyZXR1cm4gdXNiX3BoeTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIHZvaWQgdXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KQogewogCXVzYl9waHktJmd0O2NoZ19jdXIuc2RwX21pbiA9IERFRkFVTFRfU0RQX0NVUl9NSU47CkBAIC0xMjMsNiAmIzQzOzEwNSw5IEBAIHN0YXRpYyB2b2lkIHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSkKIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTsKJiM0MzsJY2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07CiYjNDM7CWNoYXIgdWNoZ2VyX3R5cGVbNTBdID0geyAwIH07CiYjNDM7CWNoYXIgKmVudnBbXSA9IHsgdWNoZ2VyX3N0YXRlLCB1Y2hnZXJfdHlwZSwgTlVMTCB9OwogCXVuc2lnbmVkIGludCBtaW4sIG1heDsKIAogCXN3aXRjaCAodXNiX3BoeS0mZ3Q7Y2hnX3N0YXRlKSB7CkBAIC0xMzAsMTEgJiM0MzsxMTUsMTUgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJdXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KHVzYl9waHksICZhbXA7bWluLCAmYW1wO21heCk7CiAKIAkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFtcDt1c2JfcGh5LSZndDtub3RpZmllciwgbWF4LCB1c2JfcGh5KTsKJiM0MzsJCXNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLAomIzQzOwkJCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssICYjMzQ7VVNCX0NIQVJHRVJfUFJFU0VOVCYjMzQ7KTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfQ0hBUkdFUl9BQlNFTlQ6CiAJCXVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudCh1c2JfcGh5KTsKIAogCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO3VzYl9waHktJmd0O25vdGlmaWVyLCAwLCB1c2JfcGh5KTsKJiM0MzsJCXNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLAomIzQzOwkJCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssICYjMzQ7VVNCX0NIQVJHRVJfQUJTRU5UJiMzNDspOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfd2Fybih1c2JfcGh5LSZndDtkZXYsICYjMzQ7VW5rbm93biBVU0IgY2hhcmdlciBzdGF0ZTogJWRcbiYjMzQ7LApAQCAtMTQyLDM2ICYjNDM7MTMxLDkgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJcmV0dXJuOwogCX0KIAotCWtvYmplY3RfdWV2ZW50KCZhbXA7dXNiX3BoeS0mZ3Q7ZGV2LSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7Ci19Ci0KLXN0YXRpYyBpbnQgdXNiX3BoeV91ZXZlbnQoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCi17Ci0JY29uc3Qgc3RydWN0IHVzYl9waHkgKnVzYl9waHk7Ci0JY2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07Ci0JY2hhciB1Y2hnZXJfdHlwZVs1MF0gPSB7IDAgfTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaHlfbG9jaywgZmxhZ3MpOwotCXVzYl9waHkgPSBfX2RldmljZV90b191c2JfcGh5KGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BoeV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIXVzYl9waHkpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc25wcmludGYodWNoZ2VyX3N0YXRlLCBBUlJBWV9TSVpFKHVjaGdlcl9zdGF0ZSksCi0JCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssIHVzYl9jaGdlcl9zdGF0ZVt1c2JfcGh5LSZndDtjaGdfc3RhdGVdKTsKLQogCXNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSwKIAkJICYjMzQ7VVNCX0NIQVJHRVJfVFlQRT0lcyYjMzQ7LCB1c2JfY2hnZXJfdHlwZVt1c2JfcGh5LSZndDtjaGdfdHlwZV0pOwotCi0JaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgdWNoZ2VyX3N0YXRlKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoYWRkX3VldmVudF92YXIoZW52LCB1Y2hnZXJfdHlwZSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuIDA7CiYjNDM7CWtvYmplY3RfdWV2ZW50X2VudigmYW1wO3VzYl9waHktJmd0O2Rldi0mZ3Q7a29iaiwgS09CSl9DSEFOR0UsIGVudnApOwogfQogCiBzdGF0aWMgdm9pZCBfX3VzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZShzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSkKQEAgLTY3NSwxMSAmIzQzOzYzNyw2IEBAIGludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hZGRfcGh5KTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfcGh5X2Rldl90eXBlID0gewotCS5uYW1lID0gJiMzNDt1c2JfcGh5JiMzNDssCi0JLnVldmVudCA9IHVzYl9waHlfdWV2ZW50LAotfTsKLQogLyoqCiAgKiB1c2JfYWRkX3BoeV9kZXYgLSBkZWNsYXJlIHRoZSBVU0IgUEhZCiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTApAQCAtNzA1LDggJiM0Mzs2NjIsNiBAQCBpbnQgdXNiX2FkZF9waHlfZGV2KHN0cnVjdCB1c2JfcGh5ICp4KQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQl4LSZndDtkZXYtJmd0O3R5cGUgPSAmYW1wO3VzYl9waHlfZGV2X3R5cGU7Ci0KIAlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZhbXA7eC0mZ3Q7bm90aWZpZXIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaHlfbG9jaywgZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0IgUEhZIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gbWV0aG9kaWNhbGx5IGJyZWFrIGRvd24gdGhlIHBhdGNoIGFuZCBpdHMgaW5zdHJ1Y3Rpb25zLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBzY29wZSBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHBvdGVudGlhbCBpbnRlZ3JhdGlvbi4gVGhlIGZvY3VzIGlzIGNsZWFybHkgb24gdGhlIFVTQiBQSFksIHNvIEkgbmVlZCB0byBlc3RhYmxpc2ggYSBwcmVjaXNlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMuCgpNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgbWFkZSB0byBgZHJpdmVycy91c2IvcGh5L3BoeS5jYC4gSSBuZWVkIHRvIHRob3JvdWdobHkgZGlzc2VjdCB0aGUgY29kZSBkaWZmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBmdW5jdGlvbnMgYWx0ZXJlZCwgYWRkaXRpb25zLCBvciByZW1vdmFscy4gSSBhbHNvIHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gYGRyaXZlcnMvdXNiL3BoeS9gLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2hhbmdlcyBpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgdGhpcyBwYXRjaCBtaWdodCBpbnRyb2R1Y2UsIGFzIHRoZXNlIGFsd2F5cyByZXF1aXJlIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBkdXJpbmcgaW50ZWdyYXRpb24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHByb2plY3QmIzM5O3MgY3VycmVudCBVU0IgUEhZIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcGF0Y2ggYWRkcyBuZXcgZmVhdHVyZXMsIGZpeGVzIGJ1Z3MsIG9yIHNpbXBseSByZWZhY3RvcnMgZXhpc3RpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOT1BfVVNCX1hDRUlWfFVTQl9QSFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9waHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvcGh5L0tjb25maWc9NT1tZW51IFwmIzM0O1VTQiBQaHlzaWNhbCBMYXllciBkcml2ZXJzXCYjMzQ7XG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy02LVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6Nzpjb25maWcgVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctOC1cdHNlbGVjdCBFWFRDT05cbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz0xND1jb25maWcgQUI4NTAwX1VTQlxuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTE2LVx0ZGVwZW5kcyBvbiBBQjg1MDBfQ09SRVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6MTc6XHRzZWxlY3QgVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTgtXHRoZWxwXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9MjM9Y29uZmlnIEZTTF9VU0IyX09UR1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTI2LVx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCB0aGlzIGNhbiYjMzk7dCBiZSAmIzM5O3kmIzM5O1xuZHJpdmVycy91c2IvcGh5L0tjb25maWc6Mjc6XHRzZWxlY3QgVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMjgtXHRoZWxwXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzAtXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzozMTpjb25maWcgS0VZU1RPTkVfVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtLZXlzdG9uZSBVU0IgUEhZIERyaXZlclwmIzM0O1xuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzMtXHRkZXBlbmRzIG9uIEFSQ0hfS0VZU1RPTkUgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzozNDpcdGRlcGVuZHMgb24gTk9QX1VTQl9YQ0VJVlxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzUtXHRoZWxwXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzktXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo0MDpjb25maWcgTk9QX1VTQl9YQ0VJVlxuZHJpdmVycy91c2IvcGh5L0tjb25maWctNDEtXHR0cmlzdGF0ZSBcJiMzNDtOT1AgVVNCIFRyYW5zY2VpdmVyIERyaXZlclwmIzM0O1xuZHJpdmVycy91c2IvcGh5L0tjb25maWctNDItXHRkZXBlbmRzIG9uIFVTQl9HQURHRVQgfHwgIVVTQl9HQURHRVQgIyBpZiBVU0JfR0FER0VUPW0sIE5PUCBjYW4mIzM5O3QgYmUgYnVpbHQtaW5cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnOjQzOlx0c2VsZWN0IFVTQl9QSFlcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTQ0LVx0aGVscFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTUyPWNvbmZpZyBBTTMzNVhfUEhZX1VTQlxuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTU0LVx0ZGVwZW5kcyBvbiBBUk0gfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo1NTpcdGRlcGVuZHMgb24gTk9QX1VTQl9YQ0VJVlxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6NTY6XHRzZWxlY3QgVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctNTctXHRzZWxlY3QgQU0zMzVYX0NPTlRST0xfVVNCXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9NzU9Y29uZmlnIFVTQl9HUElPX1ZCVVNcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy03OS1cdGRlcGVuZHMgb24gIVVTQl9DT05OX0dQSU9cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnOjgwOlx0c2VsZWN0IFVTQl9QSFlcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTgxLVx0aGVscFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTEwMD1jb25maWcgVEFIVk9fVVNCXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTAzLVx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCB0aGlzIGNhbiYjMzk7dCBiZSAmIzM5O3kmIzM5O1xuZHJpdmVycy91c2IvcGh5L0tjb25maWc6MTA0Olx0c2VsZWN0IFVTQl9QSFlcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTEwNS1cdGhlbHBcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz0xMTY9Y29uZmlnIFVTQl9JU1AxMzAxXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTE5LVx0ZGVwZW5kcyBvbiBJMkNcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnOjEyMDpcdHNlbGVjdCBVU0JfUEhZXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xMjEtXHRoZWxwXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9MTI5PWNvbmZpZyBVU0JfTVhTX1BIWVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTEzMi1cdHNlbGVjdCBTVE1QX0RFVklDRVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6MTMzOlx0c2VsZWN0IFVTQl9QSFlcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTEzNC1cdGhlbHBcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz0xMzk9Y29uZmlnIFVTQl9URUdSQV9QSFlcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xNDItXHRzZWxlY3QgVVNCX0NPTU1PTlxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6MTQzOlx0c2VsZWN0IFVTQl9QSFlcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTE0NC1cdHNlbGVjdCBVU0JfVUxQSVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZS00LSNcbmRyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19VU0JfUEhZKVx0XHRcdCYjNDM7PSBwaHkub1xuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX09GKVx0XHRcdCYjNDM7PSBvZi5vXG4tLVxuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlPTExPW9iai0kKENPTkZJR19GU0xfVVNCMl9PVEcpXHRcdCYjNDM7PSBwaHktZnNsLXVzYi5vXG5kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX05PUF9VU0JfWENFSVYpXHRcdCYjNDM7PSBwaHktZ2VuZXJpYy5vXG5kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGUtMTMtb2JqLSQoQ09ORklHX1RBSFZPX1VTQilcdFx0XHQmIzQzOz0gcGh5LXRhaHZvLm9cbi0tXG5kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1VTQl9VTFBJX1ZJRVdQT1JUKVx0XHQmIzQzOz0gcGh5LXVscGktdmlld3BvcnQub1xuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19LRVlTVE9ORV9VU0JfUEhZKVx0XHQmIzQzOz0gcGh5LWtleXN0b25lLm9cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy0zMS0jZGVmaW5lIEFCODUwNV9VU0JfTElORV9TVEFUX1JFRyAweDk0XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzozMjojZGVmaW5lIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHIDB4OEFcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTMzLVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTM3LS8qIEJhbmsgQUI4NTAwX0RFQlVHICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzozODojZGVmaW5lIEFCODUwMF9VU0JfUEhZX1RVTkUxIDB4MDVcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjM5OiNkZWZpbmUgQUI4NTAwX1VTQl9QSFlfVFVORTIgMHgwNlxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6NDA6I2RlZmluZSBBQjg1MDBfVVNCX1BIWV9UVU5FMyAweDA3XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy00MS1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYz0yNDA9c3RhdGljIHZvaWQgYWI4NTAwX3VzYl93ZF9saW5rc3RhdHVzKHN0cnVjdCBhYjg1MDBfdXNiICphYiwgdTggYml0KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTI0NC1cdFx0YWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVx1MDAzZWRldixcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjI0NTpcdFx0XHRcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMjQ2LVx0XHRcdFx0Yml0LCBiaXQpO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTI1MT1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3BoeV9lbmFibGUoc3RydWN0IGFiODUwMF91c2IgKmFiLCBib29sIHNlbF9ob3N0KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTI2Ny1cdGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzoyNjg6XHRcdFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy0yNjktXHRcdFx0Yml0LCBiaXQpO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTI3Mj1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3BoeV9kaXNhYmxlKHN0cnVjdCBhYjg1MDBfdXNiICphYiwgYm9vbCBzZWxfaG9zdClcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy0yODAtXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXHUwMDNlZGV2LFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6MjgxOlx0XHRcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMjgyLVx0XHRcdGJpdCwgMCk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM9NTYyPXN0YXRpYyBpcnFyZXR1cm5fdCBhYjg1MDBfdXNiX2Rpc2Nvbm5lY3RfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNTk3LVx0XHRcdGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo1OTg6XHRcdFx0XHRcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNTk5LVx0XHRcdFx0XHRBQjg1MDBfQklUX1BIWV9DVFJMX0RFVklDRV9FTiwgMCk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM9NjgyPXN0YXRpYyB2b2lkIGFiODUwMF91c2JfcmVzdGFydF9waHkoc3RydWN0IGFiODUwMF91c2IgKmFiKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTY4NC1cdGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo2ODU6XHRcdFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy02ODYtXHRcdFx0QUI4NTAwX0JJVF9QSFlfQ1RSTF9ERVZJQ0VfRU4sXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNjkxLVx0YWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVx1MDAzZWRldixcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjY5MjpcdFx0XHRBQjg1MDBfVVNCLCBBQjg1MDBfVVNCX1BIWV9DVFJMX1JFRyxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTY5My1cdFx0XHRBQjg1MDBfQklUX1BIWV9DVFJMX0RFVklDRV9FTixcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy02OTYtXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXHUwMDNlZGV2LFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6Njk3Olx0XHRcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNjk4LVx0XHRcdEFCODUwMF9CSVRfUEhZX0NUUkxfSE9TVF9FTixcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy03MDMtXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXHUwMDNlZGV2LFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6NzA0Olx0XHRcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNzA1LVx0XHRcdEFCODUwMF9CSVRfUEhZX0NUUkxfSE9TVF9FTixcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYz03ODg9c3RhdGljIHZvaWQgYWI4NTAwX3VzYl9zZXRfYWI4NTAwX3R1bmluZ192YWx1ZXMoc3RydWN0IGFiODUwMF91c2IgKmFiKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTc5OS1cdGVyciA9IGFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4MDA6XHRcdFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMSwgMHhDOCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MDEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTgwNS1cdGVyciA9IGFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4MDY6XHRcdFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMiwgMHgwMCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MDctXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTgxMS1cdGVyciA9IGFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4MTI6XHRcdFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMywgMHg3OCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MTMtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTgyNT1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3NldF9hYjg1MDVfdHVuaW5nX3ZhbHVlcyhzdHJ1Y3QgYWI4NTAwX3VzYiAqYWIpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtODM3LVx0ZXJyID0gYWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVx1MDAzZWRldixcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjgzODpcdFx0XHRBQjg1MDBfREVCVUcsIEFCODUwMF9VU0JfUEhZX1RVTkUxLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtODM5LVx0XHRcdDB4QzgsIDB4QzgpO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTg0NC1cdGVyciA9IGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4NDU6XHRcdFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMixcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTg0Ni1cdFx0XHQweDYwLCAweDYwKTtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04NTEtXHRlcnIgPSBhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXHUwMDNlZGV2LFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6ODUyOlx0XHRcdEFCODUwMF9ERUJVRywgQUI4NTAwX1VTQl9QSFlfVFVORTMsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04NTMtXHRcdFx0MHhGQywgMHg4MCk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM9ODY4PXN0YXRpYyBpbnQgYWI4NTAwX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTkzOC1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjkzOTpcdGVyciA9IHVzYl9hZGRfcGh5KFx1MDAyNmFiLVx1MDAzZXBoeSwgVVNCX1BIWV9UWVBFX1VTQjIpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtOTQwLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jPTc3Mz1zdGF0aWMgaW50IGZzbF9vdGdfY29uZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jLTgxNy1cdC8qIFN0b3JlIHRoZSBvdGcgdHJhbnNjZWl2ZXIgKi9cbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jOjgxODpcdHN0YXR1cyA9IHVzYl9hZGRfcGh5KFx1MDAyNmZzbF9vdGdfdGMtXHUwMDNlcGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWZzbC11c2IuYy04MTktXHRpZiAoc3RhdHVzKSB7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM9ODMzPXN0YXRpYyBpbnQgdXNiX290Z19zdGFydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jLTgzNS1cdHN0cnVjdCBmc2xfb3RnICpwX290ZztcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jOjgzNjpcdHN0cnVjdCB1c2JfcGh5ICpvdGdfdHJhbnMgPSB1c2JfZ2V0X3BoeShVU0JfUEhZX1RZUEVfVVNCMik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWZzbC11c2IuYy04MzctXHRzdHJ1Y3Qgb3RnX2ZzbSAqZnNtO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTE5Nj1pbnQgdXNiX3BoeV9nZW5fY3JlYXRlX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB1c2JfcGh5X2dlbmVyaWMgKm5vcClcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE5Ny17XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoxOTg6XHRlbnVtIHVzYl9waHlfdHlwZSB0eXBlID0gVVNCX1BIWV9UWVBFX1VTQjI7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xOTktXHRpbnQgZXJyID0gMDtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdwaW8tdmJ1cy11c2IuYz0yMzE9c3RhdGljIGludCBncGlvX3ZidXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdwaW8tdmJ1cy11c2IuYy0zMTUtXHQvKiBvbmx5IGFjdGl2ZSB3aGVuIGEgZ2FkZ2V0IGlzIHJlZ2lzdGVyZWQgKi9cbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jOjMxNjpcdGVyciA9IHVzYl9hZGRfcGh5KFx1MDAyNmdwaW9fdmJ1cy1cdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jLTMxNy1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYz05NT1zdGF0aWMgaW50IGlzcDEzMDFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYy0xMTEtXHRwaHktXHUwMDNlc2V0X3ZidXMgPSBpc3AxMzAxX3BoeV9zZXRfdmJ1cztcbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jOjExMjpcdHBoeS1cdTAwM2V0eXBlID0gVVNCX1BIWV9UWVBFX1VTQjI7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYy0xMTMtXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTE4LS8qIFVTQiBQSFkgY29udHJvbCByZWdpc3RlciBvZmZzZXRzICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MTk6I2RlZmluZSBVU0JfUEhZX0NUTF9VVE1JXHRcdDB4MDAwMFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jOjIwOiNkZWZpbmUgVVNCX1BIWV9DVExfUElQRVx0XHQweDAwMDRcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzoyMTojZGVmaW5lIFVTQl9QSFlfQ1RMX1BBUkFNXzFcdFx0MHgwMDA4XG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MjI6I2RlZmluZSBVU0JfUEhZX0NUTF9QQVJBTV8yXHRcdDB4MDAwY1xuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jOjIzOiNkZWZpbmUgVVNCX1BIWV9DVExfQ0xPQ0tcdFx0MHgwMDEwXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MjQ6I2RlZmluZSBVU0JfUEhZX0NUTF9QTExcdFx0XHQweDAwMTRcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy0yNS1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM9NDQ9c3RhdGljIGludCBrZXlzdG9uZV91c2JwaHlfaW5pdChzdHJ1Y3QgdXNiX3BoeSAqcGh5KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy00OC1cbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzo0OTpcdHZhbCAgPSBrZXlzdG9uZV91c2JwaHlfcmVhZGwoa19waHktXHUwMDNlcGh5X2N0cmwsIFVTQl9QSFlfQ1RMX0NMT0NLKTtcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzo1MDpcdGtleXN0b25lX3VzYnBoeV93cml0ZWwoa19waHktXHUwMDNlcGh5X2N0cmwsIFVTQl9QSFlfQ1RMX0NMT0NLLFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTUxLVx0XHRcdFx0dmFsIHwgUEhZX1JFRl9TU1BfRU4pO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYz01NT1zdGF0aWMgdm9pZCBrZXlzdG9uZV91c2JwaHlfc2h1dGRvd24oc3RydWN0IHVzYl9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtNTktXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6NjA6XHR2YWwgID0ga2V5c3RvbmVfdXNicGh5X3JlYWRsKGtfcGh5LVx1MDAzZXBoeV9jdHJsLCBVU0JfUEhZX0NUTF9DTE9DSyk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6NjE6XHRrZXlzdG9uZV91c2JwaHlfd3JpdGVsKGtfcGh5LVx1MDAzZXBoeV9jdHJsLCBVU0JfUEhZX0NUTF9DTE9DSyxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy02Mi1cdFx0XHRcdHZhbCBcdTAwMjYgflBIWV9SRUZfU1NQX0VOKTtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy0xMjYtXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYzoxMjc6I2RlZmluZSBVU0JfUEhZX1ZMTFNfV0FLRVVQX0VOXHRcdFx0QklUKDApXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy0xMjgtXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmM9NzU4PXN0YXRpYyBpbnQgbXhzX3BoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg0NS1cdG14c19waHktXHUwMDNlcGh5Lm5vdGlmeV9kaXNjb25uZWN0XHQ9IG14c19waHlfb25fZGlzY29ubmVjdDtcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jOjg0NjpcdG14c19waHktXHUwMDNlcGh5LnR5cGVcdFx0PSBVU0JfUEhZX1RZUEVfVVNCMjtcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg0Ny1cdG14c19waHktXHUwMDNlcGh5LnNldF93YWtldXBcdFx0PSBteHNfcGh5X3NldF93YWtldXA7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmM9ODc5PXN0YXRpYyB2b2lkIG14c19waHlfd2FrZXVwX2VuYWJsZShzdHJ1Y3QgbXhzX3BoeSAqbXhzX3BoeSwgYm9vbCBvbilcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg4MC17XG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYzo4ODE6XHR1MzIgbWFzayA9IFVTQl9QSFlfVkxMU19XQUtFVVBfRU47XG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy04ODItXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jPTMxOT1zdGF0aWMgaW50IHRhaHZvX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGFodm8uYy0zODMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRhaHZvLmM6Mzg0Olx0cmV0ID0gdXNiX2FkZF9waHkoXHUwMDI2dHUtXHUwMDNlcGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRhaHZvLmMtMzg1LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjAtI2RlZmluZSAgIFVTQl9TVVNQX0NMUlx0XHRcdFx0QklUKDUpXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjYxOiNkZWZpbmUgICBVU0JfUEhZX0NMS19WQUxJRFx0XHRcdEJJVCg3KVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy02Mi0jZGVmaW5lICAgVVRNSVBfUkVTRVRcdFx0XHRcdEJJVCgxMSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTY5LVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3MDojZGVmaW5lIFVTQl9QSFlfVkJVU19TRU5TT1JTXHRcdFx0MHg0MDRcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzEtI2RlZmluZSAgIEJfU0VTU19WTERfV0FLRVVQX0VOXHRcdFx0QklUKDE0KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzQtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjc1OiNkZWZpbmUgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRFx0XHRcdDB4NDA4XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc2LSNkZWZpbmUgICBJRF9JTlRfRU5cdFx0XHRcdEJJVCgwKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9NDg0PXN0YXRpYyB2b2lkIHV0bWlfcGh5X2Nsa19kaXNhYmxlKHN0cnVjdCB0ZWdyYV91c2JfcGh5ICpwaHkpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy00OTMtXHQgKi9cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NDk0Olx0aWYgKHV0bWlfd2FpdF9yZWdpc3RlcihiYXNlICYjNDM7IFVTQl9TVVNQX0NUUkwsIFVTQl9QSFlfQ0xLX1ZBTElELCAwKSA9PSAwKVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy00OTUtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTUxMC1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NTExOlx0aWYgKHV0bWlfd2FpdF9yZWdpc3RlcihiYXNlICYjNDM7IFVTQl9TVVNQX0NUUkwsIFVTQl9QSFlfQ0xLX1ZBTElELCAwKSlcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNTEyLVx0XHRkZXZfZXJyKHBoeS1cdTAwM2V1X3BoeS5kZXYsXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz01MTY9c3RhdGljIHZvaWQgdXRtaV9waHlfY2xrX2VuYWJsZShzdHJ1Y3QgdGVncmFfdXNiX3BoeSAqcGh5KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNTI1LVx0ICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjUyNjpcdGlmICh1dG1pX3dhaXRfcmVnaXN0ZXIoYmFzZSAmIzQzOyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NTI3Olx0XHRcdCAgICAgICBVU0JfUEhZX0NMS19WQUxJRCkgPT0gMClcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNTI4LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy01NDMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjU0NDpcdGlmICh1dG1pX3dhaXRfcmVnaXN0ZXIoYmFzZSAmIzQzOyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NTQ1Olx0XHRcdCAgICAgICBVU0JfUEhZX0NMS19WQUxJRCkpXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTU0Ni1cdFx0ZGV2X2VycihwaHktXHUwMDNldV9waHkuZGV2LFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9NTUwPXN0YXRpYyBpbnQgdXRtaV9waHlfcG93ZXJfb24oc3RydWN0IHRlZ3JhX3VzYl9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYxNS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NjE2Olx0XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYxNy1cdFx0dmFsIFx1MDAyNj0gflZCVVNfV0FLRVVQX1dBS0VVUF9FTjtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjE4LVx0XHR2YWwgXHUwMDI2PSB+KElEX0NIR19ERVQgfCBWQlVTX1dBS0VVUF9DSEdfREVUKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NjE5Olx0XHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYyMC1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NjIxOlx0XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1NFTlNPUlMpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy02MjItXHRcdHZhbCBcdTAwMjY9IH4oQV9WQlVTX1ZMRF9XQUtFVVBfRU4gfCBBX1NFU1NfVkxEX1dBS0VVUF9FTik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYyMy1cdFx0dmFsIFx1MDAyNj0gfihCX1NFU1NfVkxEX1dBS0VVUF9FTik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjYyNDpcdFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICYjNDM7IFVTQl9QSFlfVkJVU19TRU5TT1JTKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjI1LVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9NzE2PXN0YXRpYyBpbnQgdXRtaV9waHlfcG93ZXJfb2ZmKHN0cnVjdCB0ZWdyYV91c2JfcGh5ICpwaHkpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03MjUtXHRpZiAocGh5LVx1MDAzZXdha2V1cF9lbmFibGVkIFx1MDAyNlx1MDAyNiBwaHktXHUwMDNlbW9kZSAhPSBVU0JfRFJfTU9ERV9IT1NUKVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3MjY6XHRcdHJlYWRsX3JlbGF4ZWRfcG9sbF90aW1lb3V0KGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzI3LVx0XHRcdFx0XHQgICB2YWwsICEodmFsIFx1MDAyNiBWQlVTX1dBS0VVUF9TVFMpLFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzY2LVx0XHRpZiAocGh5LVx1MDAzZW1vZGUgIT0gVVNCX0RSX01PREVfSE9TVCkge1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3Njc6XHRcdFx0dmFsID0gcmVhZGxfcmVsYXhlZChiYXNlICYjNDM7IFVTQl9QSFlfVkJVU19XQUtFVVBfSUQpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03NjgtXHRcdFx0dmFsIHw9IFZCVVNfV0FLRVVQX1dBS0VVUF9FTjtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzY5LVx0XHRcdHZhbCBcdTAwMjY9IH4oSURfQ0hHX0RFVCB8IFZCVVNfV0FLRVVQX0NIR19ERVQpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3NzA6XHRcdFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICYjNDM7IFVTQl9QSFlfVkJVU19XQUtFVVBfSUQpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03NzEtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjc3MjpcdFx0XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1NFTlNPUlMpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03NzMtXHRcdFx0dmFsIHw9IEFfVkJVU19WTERfV0FLRVVQX0VOO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3NzQ6XHRcdFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICYjNDM7IFVTQl9QSFlfVkJVU19TRU5TT1JTKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzc1LVx0XHR9XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz04ODk9c3RhdGljIGludCB1aHNpY19waHlfcG93ZXJfb24oc3RydWN0IHRlZ3JhX3VzYl9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTk3Ny1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6OTc4Olx0ZXJyID0gdXRtaV93YWl0X3JlZ2lzdGVyKGJhc2UgJiM0MzsgVVNCX1NVU1BfQ1RSTCwgVVNCX1BIWV9DTEtfVkFMSUQsXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjk3OTpcdFx0XHRcdCBVU0JfUEhZX0NMS19WQUxJRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTk4MC1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jPTEwOTk9c3RhdGljIGlycXJldHVybl90IHRlZ3JhX3VzYl9waHlfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xMTA5LVx0ICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjExMTA6XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjExMTE6XHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExMTItXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz0xMTE2PXN0YXRpYyBpbnQgdGVncmFfdXNiX3BoeV9zZXRfd2FrZXVwKHN0cnVjdCB1c2JfcGh5ICp1X3BoeSwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xMTI2LVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzoxMTI3Olx0XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExMjgtXHRcdHZhbCBcdTAwMjY9IH4oSURfSU5UX0VOIHwgVkJVU19XQUtFVVBfSU5UX0VOKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTEyOTpcdFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICYjNDM7IFVTQl9QSFlfVkJVU19XQUtFVVBfSUQpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xMTMwLVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtMTE0OC1cdFx0XHQgKi9cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTE0OTpcdFx0XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExNTAtXHRcdFx0dmFsIHw9IElEX0lOVF9FTiB8IFZCVVNfV0FLRVVQX0lOVF9FTjtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTE1MTpcdFx0XHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExNTItXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTYwMD1pbnQgdXNiX2FkZF9waHkoc3RydWN0IHVzYl9waHkgKngsIGVudW0gdXNiX3BoeV90eXBlIHR5cGUpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTYwNS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2MDY6XHRpZiAoeC1cdTAwM2V0eXBlICE9IFVTQl9QSFlfVFlQRV9VTkRFRklORUQpIHtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MDctXHRcdGRldl9lcnIoeC1cdTAwM2VkZXYsIFwmIzM0O25vdCBhY2NlcHRpbmcgaW5pdGlhbGl6ZWQgUEhZICVzXFxuXCYjMzQ7LCB4LVx1MDAzZWxhYmVsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBVU0IgUEhZIENoYXJnZXIgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgVVNCIFBIWSBjaGFyZ2VycyBhcmUgaW1wbGVtZW50ZWQuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGRlZmluaXRlbHkgYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYCBhbmQgYHVzYl9hZGRfcGh5X2RldmAsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhcmdlciBmdW5jdGlvbmFsaXR5IHByb2JhYmx5IHJlc2lkZXMuIEkgbmVlZCB0byBzZWUgKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBjb29yZGluYXRlZCDigJMgd2hhdCB0cmlnZ2VycyB0aGVtLCB3aGF0IGRhdGEgdGhleSBleGNoYW5nZSwgYW5kIHdoYXQgcmVzb3VyY2VzIHRoZXkgbWFuYWdlLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW50ZXJwbGF5IHdpbGwgZ2l2ZSBtZSB0aGUgbW9zdCBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSBkZXNpZ24uIFRoZW4gSSYjMzk7bGwgYmUgYWJsZSB0byB0ZWxsIHdoYXQmIzM5O3MgY29ycmVjdCwgYW5kIG1heWJlIHNlZSBzb21lIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhleSYjMzk7dmUgc3RydWN0dXJlZCB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvcGh5L3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MztcbiAgIDI6XHQvKlxuICAgMzpcdCAqIHBoeS5jIC0tIFVTQiBwaHkgaGFuZGxpbmdcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIFRleGFzIEluc3RydW1lbnRzXG4gICA2Olx0ICovXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvcGh5LmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQvKiBEZWZhdWx0IGN1cnJlbnQgcmFuZ2UgYnkgY2hhcmdlciB0eXBlLiAqL1xuICAxODpcdCNkZWZpbmUgREVGQVVMVF9TRFBfQ1VSX01JTlx0MlxuICAxOTpcdCNkZWZpbmUgREVGQVVMVF9TRFBfQ1VSX01BWFx0NTAwXG4gIDIwOlx0I2RlZmluZSBERUZBVUxUX1NEUF9DVVJfTUlOX1NTXHQxNTBcbiAgMjE6XHQjZGVmaW5lIERFRkFVTFRfU0RQX0NVUl9NQVhfU1NcdDkwMFxuICAyMjpcdCNkZWZpbmUgREVGQVVMVF9EQ1BfQ1VSX01JTlx0NTAwXG4gIDIzOlx0I2RlZmluZSBERUZBVUxUX0RDUF9DVVJfTUFYXHQ1MDAwXG4gIDI0Olx0I2RlZmluZSBERUZBVUxUX0NEUF9DVVJfTUlOXHQxNTAwXG4gIDI1Olx0I2RlZmluZSBERUZBVUxUX0NEUF9DVVJfTUFYXHQ1MDAwXG4gIDI2Olx0I2RlZmluZSBERUZBVUxUX0FDQV9DVVJfTUlOXHQxNTAwXG4gIDI3Olx0I2RlZmluZSBERUZBVUxUX0FDQV9DVVJfTUFYXHQ1MDAwXG4gIDI4Olx0XG4gIDI5Olx0c3RhdGljIExJU1RfSEVBRChwaHlfbGlzdCk7XG4gIDMwOlx0c3RhdGljIERFRklORV9TUElOTE9DSyhwaHlfbG9jayk7XG4gIDMxOlx0XG4gIDMyOlx0c3RydWN0IHBoeV9kZXZtIHtcbiAgMzM6XHRcdHN0cnVjdCB1c2JfcGh5ICpwaHk7XG4gIDM0Olx0XHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iO1xuICAzNTpcdH07XG4gIDM2Olx0XG4gIDM3Olx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl90eXBlW10gPSB7XG4gIDM4Olx0XHRbVU5LTk9XTl9UWVBFXVx0XHRcdD0gXCYjMzQ7VVNCX0NIQVJHRVJfVU5LTk9XTl9UWVBFXCYjMzQ7LFxuICAzOTpcdFx0W1NEUF9UWVBFXVx0XHRcdD0gXCYjMzQ7VVNCX0NIQVJHRVJfU0RQX1RZUEVcJiMzNDssXG4gIDQwOlx0XHRbQ0RQX1RZUEVdXHRcdFx0PSBcJiMzNDtVU0JfQ0hBUkdFUl9DRFBfVFlQRVwmIzM0OyxcbiAgNDE6XHRcdFtEQ1BfVFlQRV1cdFx0XHQ9IFwmIzM0O1VTQl9DSEFSR0VSX0RDUF9UWVBFXCYjMzQ7LFxuICA0MjpcdFx0W0FDQV9UWVBFXVx0XHRcdD0gXCYjMzQ7VVNCX0NIQVJHRVJfQUNBX1RZUEVcJiMzNDssXG4gIDQzOlx0fTtcbiAgNDQ6XHRcbiAgNDU6XHRzdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fdXNiX2ZpbmRfcGh5KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4gIDQ2Olx0XHRlbnVtIHVzYl9waHlfdHlwZSB0eXBlKVxuICA0NzpcdHtcbiAgNDg6XHRcdHN0cnVjdCB1c2JfcGh5ICAqcGh5ID0gTlVMTDtcbiAgNDk6XHRcbiAgNTA6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocGh5LCBsaXN0LCBoZWFkKSB7XG4gIDUxOlx0XHRcdGlmIChwaHktXHUwMDNldHlwZSAhPSB0eXBlKVxuICA1MjpcdFx0XHRcdGNvbnRpbnVlO1xuICA1MzpcdFxuICA1NDpcdFx0XHRyZXR1cm4gcGh5O1xuICA1NTpcdFx0fVxuICA1NjpcdFxuICA1NzpcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4gIDU4Olx0fVxuICA1OTpcdFxuICA2MDpcdHN0YXRpYyBzdHJ1Y3QgdXNiX3BoeSAqX19vZl91c2JfZmluZF9waHkoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuICA2MTpcdHtcbiAgNjI6XHRcdHN0cnVjdCB1c2JfcGh5ICAqcGh5O1xuICA2MzpcdFxuICA2NDpcdFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpKVxuICA2NTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbiAgNjY6XHRcbiAgNjc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocGh5LCBcdTAwMjZwaHlfbGlzdCwgaGVhZCkge1xuICA2ODpcdFx0XHRpZiAobm9kZSAhPSBwaHktXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUpXG4gIDY5Olx0XHRcdFx0Y29udGludWU7XG4gIDcwOlx0XG4gIDcxOlx0XHRcdHJldHVybiBwaHk7XG4gIDcyOlx0XHR9XG4gIDczOlx0XG4gIDc0Olx0XHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcbiAgNzU6XHR9XG4gIDc2Olx0XG4gIDc3Olx0c3RhdGljIHZvaWQgdXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxuICA3ODpcdHtcbiAgNzk6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5zZHBfbWluID0gREVGQVVMVF9TRFBfQ1VSX01JTjtcbiAgODA6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5zZHBfbWF4ID0gREVGQVVMVF9TRFBfQ1VSX01BWDtcbiAgODE6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5kY3BfbWluID0gREVGQVVMVF9EQ1BfQ1VSX01JTjtcbiAgODI6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5kY3BfbWF4ID0gREVGQVVMVF9EQ1BfQ1VSX01BWDtcbiAgODM6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5jZHBfbWluID0gREVGQVVMVF9DRFBfQ1VSX01JTjtcbiAgODQ6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5jZHBfbWF4ID0gREVGQVVMVF9DRFBfQ1VSX01BWDtcbiAgODU6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5hY2FfbWluID0gREVGQVVMVF9BQ0FfQ1VSX01JTjtcbiAgODY6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5hY2FfbWF4ID0gREVGQVVMVF9BQ0FfQ1VSX01BWDtcbiAgODc6XHR9XG4gIDg4Olx0XG4gIDg5Olx0LyoqXG4gIDkwOlx0ICogdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrIC0gbm90aWZ5IHRoZSBVU0IgY2hhcmdlciBzdGF0ZVxuICA5MTpcdCAqIEB3b3JrOiB0aGUgY2hhcmdlciB3b3JrIHRvIG5vdGlmeSB0aGUgVVNCIGNoYXJnZXIgc3RhdGVcbiAgOTI6XHQgKlxuICA5MzpcdCAqIFRoaXMgd29yayBjYW4gYmUgaXNzdWVkIHdoZW4gVVNCIGNoYXJnZXIgc3RhdGUgaGFzIGJlZW4gY2hhbmdlZCBvclxuICA5NDpcdCAqIFVTQiBjaGFyZ2VyIGN1cnJlbnQgaGFzIGJlZW4gY2hhbmdlZCwgdGhlbiB3ZSBjYW4gbm90aWZ5IHRoZSBjdXJyZW50XG4gIDk1Olx0ICogd2hhdCBjYW4gYmUgZHJhd24gdG8gcG93ZXIgdXNlciBhbmQgdGhlIGNoYXJnZXIgc3RhdGUgdG8gdXNlcnNwYWNlLlxuICA5NjpcdCAqXG4gIDk3Olx0ICogSWYgd2UgZ2V0IHRoZSBjaGFyZ2VyIHR5cGUgZnJvbSBleHRjb24gc3Vic3lzdGVtLCB3ZSBjYW4gbm90aWZ5IHRoZVxuICA5ODpcdCAqIGNoYXJnZXIgc3RhdGUgdG8gcG93ZXIgdXNlciBhdXRvbWF0aWNhbGx5IGJ5IHVzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZSgpXG4gIDk5Olx0ICogaXNzdWluZyBmcm9tIGV4dGNvbiBzdWJzeXN0ZW0uXG4gMTAwOlx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyB0YXNrLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgZHJpdmVycy91c2IvcGh5L3BoeS5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL3VzYi9waHkvcGh5LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBVU0IgUEhZIChQaHlzaWNhbCBMYXllcikgZHJpdmVycyByZXNpZGUsIHRoZSBjcnVjaWFsIGJyaWRnZSBiZXR3ZWVuIHRoZSBkaWdpdGFsIHdvcmxkIG9mIHRoZSBVU0IgY29udHJvbGxlciBhbmQgdGhlIGFuYWxvZyBzaWduYWxzIHppcHBpbmcgYWNyb3NzIHRoZSBVU0IgY2FibGUuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhlcmUsIGdpdmVuIHRoZSBvZnRlbiBjb21wbGV4IHJlcXVpcmVtZW50cyBvZiB0aGVzZSBsb3ctbGV2ZWwgaW50ZXJmYWNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIHN0cnVjdHVyZSBkZWZpbml0aW9ucywgdGhlIFBIWSBpbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBhbmQgb2YgY291cnNlLCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIHRoYXQgcmVzcG9uZCB0byBVU0IgZXZlbnRzIGF0IHRoZSBwaHlzaWNhbCBsYXllci4gSSYjMzk7bGwgbGlrZWx5IGJlIGNoZWNraW5nIGZvciBjbG9jayBjb25maWd1cmF0aW9uLCBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBzcGVjaWZpYyBoYXJkd2FyZSBxdWlya3Mgb3IgZXJyYXRhIHdvcmthcm91bmRzIHRoYXQgYXJlIGNvbW1vbiBpbiB0aGlzIGtpbmQgb2YgZHJpdmVyLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIHN0cnVjdHVyZWQsIGhvdyBjbGVhcmx5IHRoZSBhYnN0cmFjdGlvbiBpcyBkZWZpbmVkLCBhbmQgd2hldGhlciBpdCBhbGlnbnMgd2l0aCB0aGUgZGV2aWNlJiMzOTtzIGRvY3VtZW50YXRpb24uIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlcmUgYXJlIGFueSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucyBhbmQgaG93IHRoZXkmIzM5O3JlIG1hbmFnZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvcGh5L3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0ICogSWYgd2UgZ2V0IHRoZSBjaGFyZ2VyIHR5cGUgZnJvbSAtXHUwMDNlY2hhcmdlcl9kZXRlY3QoKSBpbnN0ZWFkIG9mIGV4dGNvblxuIDEwMjpcdCAqIHN1YnN5c3RlbSwgdGhlIHVzYiBwaHkgZHJpdmVyIHNob3VsZCBpc3N1ZSB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKClcbiAxMDM6XHQgKiB0byBzZXQgY2hhcmdlciBzdGF0ZSB3aGVuIHRoZSBjaGFyZ2VyIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuXG4gMTA0Olx0ICovXG4gMTA1Olx0c3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiAxMDY6XHR7XG4gMTA3Olx0XHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX3BoeSwgY2hnX3dvcmspO1xuIDEwODpcdFx0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XG4gMTA5Olx0XHRjaGFyIHVjaGdlcl90eXBlWzUwXSA9IHsgMCB9O1xuIDExMDpcdFx0Y2hhciAqZW52cFtdID0geyB1Y2hnZXJfc3RhdGUsIHVjaGdlcl90eXBlLCBOVUxMIH07XG4gMTExOlx0XHR1bnNpZ25lZCBpbnQgbWluLCBtYXg7XG4gMTEyOlx0XG4gMTEzOlx0XHRzd2l0Y2ggKHVzYl9waHktXHUwMDNlY2hnX3N0YXRlKSB7XG4gMTE0Olx0XHRjYXNlIFVTQl9DSEFSR0VSX1BSRVNFTlQ6XG4gMTE1Olx0XHRcdHVzYl9waHlfZ2V0X2NoYXJnZXJfY3VycmVudCh1c2JfcGh5LCBcdTAwMjZtaW4sIFx1MDAyNm1heCk7XG4gMTE2Olx0XG4gMTE3Olx0XHRcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnVzYl9waHktXHUwMDNlbm90aWZpZXIsIG1heCwgdXNiX3BoeSk7XG4gMTE4Olx0XHRcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxuIDExOTpcdFx0XHRcdCBcJiMzNDtVU0JfQ0hBUkdFUl9TVEFURT0lc1wmIzM0OywgXCYjMzQ7VVNCX0NIQVJHRVJfUFJFU0VOVFwmIzM0Oyk7XG4gMTIwOlx0XHRcdGJyZWFrO1xuIDEyMTpcdFx0Y2FzZSBVU0JfQ0hBUkdFUl9BQlNFTlQ6XG4gMTIyOlx0XHRcdHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudCh1c2JfcGh5KTtcbiAxMjM6XHRcbiAxMjQ6XHRcdFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2dXNiX3BoeS1cdTAwM2Vub3RpZmllciwgMCwgdXNiX3BoeSk7XG4gMTI1Olx0XHRcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxuIDEyNjpcdFx0XHRcdCBcJiMzNDtVU0JfQ0hBUkdFUl9TVEFURT0lc1wmIzM0OywgXCYjMzQ7VVNCX0NIQVJHRVJfQUJTRU5UXCYjMzQ7KTtcbiAxMjc6XHRcdFx0YnJlYWs7XG4gMTI4Olx0XHRkZWZhdWx0OlxuIDEyOTpcdFx0XHRkZXZfd2Fybih1c2JfcGh5LVx1MDAzZWRldiwgXCYjMzQ7VW5rbm93biBVU0IgY2hhcmdlciBzdGF0ZTogJWRcXG5cJiMzNDssXG4gMTMwOlx0XHRcdFx0IHVzYl9waHktXHUwMDNlY2hnX3N0YXRlKTtcbiAxMzE6XHRcdFx0cmV0dXJuO1xuIDEzMjpcdFx0fVxuIDEzMzpcdFxuIDEzNDpcdFx0c25wcmludGYodWNoZ2VyX3R5cGUsIEFSUkFZX1NJWkUodWNoZ2VyX3R5cGUpLFxuIDEzNTpcdFx0XHQgXCYjMzQ7VVNCX0NIQVJHRVJfVFlQRT0lc1wmIzM0OywgdXNiX2NoZ2VyX3R5cGVbdXNiX3BoeS1cdTAwM2VjaGdfdHlwZV0pO1xuIDEzNjpcdFx0a29iamVjdF91ZXZlbnRfZW52KFx1MDAyNnVzYl9waHktXHUwMDNlZGV2LVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTtcbiAxMzc6XHR9XG4gMTM4Olx0XG4gMTM5Olx0c3RhdGljIHZvaWQgX191c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4gMTQwOlx0e1xuIDE0MTpcdFx0aWYgKGV4dGNvbl9nZXRfc3RhdGUodXNiX3BoeS1cdTAwM2VlZGV2LCBFWFRDT05fQ0hHX1VTQl9TRFApIFx1MDAzZSAwKSB7XG4gMTQyOlx0XHRcdHVzYl9waHktXHUwMDNlY2hnX3R5cGUgPSBTRFBfVFlQRTtcbiAxNDM6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfc3RhdGUgPSBVU0JfQ0hBUkdFUl9QUkVTRU5UO1xuIDE0NDpcdFx0fSBlbHNlIGlmIChleHRjb25fZ2V0X3N0YXRlKHVzYl9waHktXHUwMDNlZWRldiwgRVhUQ09OX0NIR19VU0JfQ0RQKSBcdTAwM2UgMCkge1xuIDE0NTpcdFx0XHR1c2JfcGh5LVx1MDAzZWNoZ190eXBlID0gQ0RQX1RZUEU7XG4gMTQ2Olx0XHRcdHVzYl9waHktXHUwMDNlY2hnX3N0YXRlID0gVVNCX0NIQVJHRVJfUFJFU0VOVDtcbiAxNDc6XHRcdH0gZWxzZSBpZiAoZXh0Y29uX2dldF9zdGF0ZSh1c2JfcGh5LVx1MDAzZWVkZXYsIEVYVENPTl9DSEdfVVNCX0RDUCkgXHUwMDNlIDApIHtcbiAxNDg6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfdHlwZSA9IERDUF9UWVBFO1xuIDE0OTpcdFx0XHR1c2JfcGh5LVx1MDAzZWNoZ19zdGF0ZSA9IFVTQl9DSEFSR0VSX1BSRVNFTlQ7XG4gMTUwOlx0XHR9IGVsc2UgaWYgKGV4dGNvbl9nZXRfc3RhdGUodXNiX3BoeS1cdTAwM2VlZGV2LCBFWFRDT05fQ0hHX1VTQl9BQ0EpIFx1MDAzZSAwKSB7XG4gMTUxOlx0XHRcdHVzYl9waHktXHUwMDNlY2hnX3R5cGUgPSBBQ0FfVFlQRTtcbiAxNTI6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfc3RhdGUgPSBVU0JfQ0hBUkdFUl9QUkVTRU5UO1xuIDE1MzpcdFx0fSBlbHNlIHtcbiAxNTQ6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfdHlwZSA9IFVOS05PV05fVFlQRTtcbiAxNTU6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfc3RhdGUgPSBVU0JfQ0hBUkdFUl9BQlNFTlQ7XG4gMTU2Olx0XHR9XG4gMTU3Olx0XG4gMTU4Olx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnVzYl9waHktXHUwMDNlY2hnX3dvcmspO1xuIDE1OTpcdH1cbiAxNjA6XHRcbiAxNjE6XHQvKipcbiAxNjI6XHQgKiB1c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUgLSBnZXQgY2hhcmdlciB0eXBlIGZyb20gZXh0Y29uIHN1YnN5c3RlbVxuIDE2MzpcdCAqIEBuYjogdGhlIG5vdGlmaWVyIGJsb2NrIHRvIGRldGVybWluZSBjaGFyZ2VyIHR5cGVcbiAxNjQ6XHQgKiBAc3RhdGU6IHRoZSBjYWJsZSBzdGF0ZVxuIDE2NTpcdCAqIEBkYXRhOiBwcml2YXRlIGRhdGFcbiAxNjY6XHQgKlxuIDE2NzpcdCAqIERldGVybWluIHRoZSBjaGFyZ2VyIHR5cGUgZnJvbSBleHRjb24gc3Vic3lzdGVtIHdoaWNoIGFsc28gbWVhbnMgdGhlXG4gMTY4Olx0ICogY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZWQsIHRoZW4gd2Ugc2hvdWxkIG5vdGlmeSB0aGlzIGV2ZW50LlxuIDE2OTpcdCAqL1xuIDE3MDpcdHN0YXRpYyBpbnQgdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gMTcxOlx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGF0ZSwgdm9pZCAqZGF0YSlcbiAxNzI6XHR7XG4gMTczOlx0XHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHVzYl9waHksIHR5cGVfbmIpO1xuIDE3NDpcdFxuIDE3NTpcdFx0X191c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUodXNiX3BoeSk7XG4gMTc2Olx0XHRyZXR1cm4gTk9USUZZX09LO1xuIDE3NzpcdH1cbiAxNzg6XHRcbiAxNzk6XHQvKipcbiAxODA6XHQgKiB1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQgLSBzZXQgdGhlIFVTQiBjaGFyZ2VyIGN1cnJlbnRcbiAxODE6XHQgKiBAdXNiX3BoeTogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZFxuIDE4MjpcdCAqIEBtQTogdGhlIGN1cnJlbnQgbmVlZCB0byBiZSBzZXRcbiAxODM6XHQgKlxuIDE4NDpcdCAqIFVzdWFsbHkgd2Ugb25seSBjaGFuZ2UgdGhlIGNoYXJnZXIgZGVmYXVsdCBjdXJyZW50IHdoZW4gVVNCIGZpbmlzaGVkIHRoZVxuIDE4NTpcdCAqIGVudW1lcmF0aW9uIGFzIG9uZSBTRFAgY2hhcmdlci4gQXMgb25lIFNEUCBjaGFyZ2VyLCB1c2JfcGh5X3NldF9wb3dlcigpXG4gMTg2Olx0ICogd2lsbCBpc3N1ZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSBjaGFyZ2VyIGN1cnJlbnQgd2hlbiBhZnRlciBzZXR0aW5nIFVTQlxuIDE4NzpcdCAqIGNvbmZpZ3VyYXRpb24sIG9yIHN1c3BlbmQvcmVzdW1lIFVTQi4gRm9yIG90aGVyIHR5cGUgY2hhcmdlciwgd2Ugc2hvdWxkXG4gMTg4Olx0ICogdXNlIHRoZSBkZWZhdWx0IGNoYXJnZXIgY3VycmVudCBhbmQgd2UgZG8gbm90IHN1Z2dlc3QgdG8gaXNzdWUgdGhpcyBmdW5jdGlvblxuIDE4OTpcdCAqIHRvIGNoYW5nZSB0aGUgY2hhcmdlciBjdXJyZW50LlxuIDE5MDpcdCAqXG4gMTkxOlx0ICogV2hlbiBVU0IgY2hhcmdlciBjdXJyZW50IGhhcyBiZWVuIGNoYW5nZWQsIHdlIG5lZWQgdG8gbm90aWZ5IHRoZSBwb3dlciB1c2Vycy5cbiAxOTI6XHQgKi9cbiAxOTM6XHR2b2lkIHVzYl9waHlfc2V0X2NoYXJnZXJfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSwgdW5zaWduZWQgaW50IG1BKVxuIDE5NDpcdHtcbiAxOTU6XHRcdHN3aXRjaCAodXNiX3BoeS1cdTAwM2VjaGdfdHlwZSkge1xuIDE5NjpcdFx0Y2FzZSBTRFBfVFlQRTpcbiAxOTc6XHRcdFx0aWYgKHVzYl9waHktXHUwMDNlY2hnX2N1ci5zZHBfbWF4ID09IG1BKVxuIDE5ODpcdFx0XHRcdHJldHVybjtcbiAxOTk6XHRcbiAyMDA6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLnNkcF9tYXggPSAobUEgXHUwMDNlIERFRkFVTFRfU0RQX0NVUl9NQVhfU1MpID9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg3MwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBQSFkgQ2hhcmdlciBTdGF0ZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBiYWNrIGludG8gdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMuIFByZXZpb3VzbHksIGhlcmUmIzM5O3MgaG93IHRoaW5ncyB3b3JrZWQ6IGluIGB1c2JfYWRkX3BoeV9kZXZgLCB3ZSBhc3NpZ25lZCBgeC0mZ3Q7ZGV2LSZndDt0eXBlID0gJmFtcDt1c2JfcGh5X2Rldl90eXBlYC4gVGhpcyBtZWFudCB0aGF0IHRoZSBgdWV2ZW50YCBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhhdCBkZXZpY2UgdHlwZSwgYHVzYl9waHlfdWV2ZW50YCwgd291bGQgYmUgY2FsbGVkLiBUaGVuLCB3aXRoaW4gYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2AsIHdlIHRyaWdnZXJlZCBhIGBrb2JqZWN0X3VldmVudGAgdG8gc2lnbmFsIGEgY2hhbmdlLiBUaGlzIHVsdGltYXRlbHkgbGVkIHRvIGB1c2JfcGh5X3VldmVudGAgYmVpbmcgaW52b2tlZCwgd2hlcmUgd2UmIzM5O2QgZXh0cmFjdCBhbmQgYWRkIGBVU0JfQ0hBUkdFUl9TVEFURWAgYW5kIGBVU0JfQ0hBUkdFUl9UWVBFYCB0byB0aGUgZW52aXJvbm1lbnQuCgpOb3csIHRoaXMgcGF0Y2ggaXMgc2lnbmlmaWNhbnRseSByZWZhY3RvcmluZyB0aGF0IGFwcHJvYWNoLiBUaGV5JiMzOTt2ZSBlbGltaW5hdGVkIGB1c2JfY2hnZXJfc3RhdGVgLCBgX19kZXZpY2VfdG9fdXNiX3BoeWAsIGB1c2JfcGh5X3VldmVudGAsIGFuZCBgdXNiX3BoeV9kZXZfdHlwZWAuIEluc3RlYWQsIGluIGB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtgLCB0aGV5IGFyZSBjb25zdHJ1Y3RpbmcgdGhlIGB1Y2hnZXJfc3RhdGVgIGFuZCBgdWNoZ2VyX3R5cGVgIGRpcmVjdGx5IGFuZCB1c2luZyBga29iamVjdF91ZXZlbnRfZW52YC4gUGx1cywgY3J1Y2lhbGx5LCB0aGV5IHJlbW92ZWQgdGhlIGFzc2lnbm1lbnQgb2YgYHgtJmd0O2Rldi0mZ3Q7dHlwZSA9ICZhbXA7dXNiX3BoeV9kZXZfdHlwZWAgd2l0aGluIGB1c2JfYWRkX3BoeV9kZXZgLgoKVGhlIHN0YXRlZCByZWFzb24gaXMgbWFraW5nIHN1cmUgd2UgZG9uJiMzOTt0IG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgZGV2aWNlIHR5cGUsIG9yIHdoZW4gdWV2ZW50IGlzIGdlbmVyYXRlZCBkaXJlY3RseSBmcm9tIHdvcmtxdWV1ZSwgaXQgcGFzc2VzIGBlbnZwYCB0byBga29iamVjdF91ZXZlbnRfZW52YC4gVGhpcyBtYWtlcyBzZW5zZSwgYmVjYXVzZSBvdmVyd3JpdGluZyB0aGUgZGV2aWNlIHR5cGUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpZiBhbm90aGVyIGRyaXZlciBhbHJlYWR5IHNldCBpdCwgYW5kIHRoaXMgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGVudmlyb25tZW50IGRpcmVjdGx5IHRvIHRoZSBga29iamVjdF91ZXZlbnRgLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2FmZSBhbmQgdGhlIGltcGFjdC4gU3BlY2lmaWNhbGx5LCBpcyB0aGUgY29kZSBpbiBgZHJpdmVycy91c2IvcGh5L3BoeS5jYCBzdGlsbCByZWFjaGVkPyBJIHNob3VsZCBjaGVjayBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2AsIGB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlYCwgYHVzYl9hZGRfcGh5X2RldmAsIGFuZCBgdXNiX2FkZF9waHlgLiBJIGFsc28gbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIG1vZHVsZXMgdGhhdCBkZXBlbmQgb24gYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9hZGRfcGh5X2Rldnx1c2JfYWRkX3BoeXx1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9waHkvbW90b3JvbGEvcGh5LWNwY2FwLXVzYi5jPTYwOD1zdGF0aWMgaW50IGNwY2FwX3VzYl9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHktY3BjYXAtdXNiLmMtNjc1LVxuZHJpdmVycy9waHkvbW90b3JvbGEvcGh5LWNwY2FwLXVzYi5jOjY3NjpcdHVzYl9hZGRfcGh5X2RldihcdTAwMjZkZGF0YS1cdTAwM2VwaHkpO1xuZHJpdmVycy9waHkvbW90b3JvbGEvcGh5LWNwY2FwLXVzYi5jLTY3Ny1cdGF0b21pY19zZXQoXHUwMDI2ZGRhdGEtXHUwMDNlYWN0aXZlLCAxKTtcbi0tXG5kcml2ZXJzL3BoeS9waHktbGdtLXVzYi5jPTE4Nz1zdGF0aWMgaW50IHBoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvcGh5L3BoeS1sZ20tdXNiLmMtMjUxLVxuZHJpdmVycy9waHkvcGh5LWxnbS11c2IuYzoyNTI6XHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KHBoeSk7XG5kcml2ZXJzL3BoeS9waHktbGdtLXVzYi5jLTI1My19XG4tLVxuZHJpdmVycy9waHkvdGVncmEveHVzYi5jPTY2MD1zdGF0aWMgaW50IHRlZ3JhX3h1c2Jfc2V0dXBfdXNiX3JvbGVfc3dpdGNoKHN0cnVjdCB0ZWdyYV94dXNiX3BvcnQgKnBvcnQpXG4tLVxuZHJpdmVycy9waHkvdGVncmEveHVzYi5jLTcxNC1cbmRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYzo3MTU6XHRlcnIgPSB1c2JfYWRkX3BoeV9kZXYoXHUwMDI2cG9ydC1cdTAwM2V1c2JfcGh5KTtcbmRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYy03MTYtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9waHkvdGkvcGh5LWRtODE2eC11c2IuYz0xNzE9c3RhdGljIGludCBkbTgxNnhfdXNiX3BoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvcGh5L3RpL3BoeS1kbTgxNngtdXNiLmMtMjQwLVxuZHJpdmVycy9waHkvdGkvcGh5LWRtODE2eC11c2IuYzoyNDE6XHR1c2JfYWRkX3BoeV9kZXYoXHUwMDI2cGh5LVx1MDAzZXBoeSk7XG5kcml2ZXJzL3BoeS90aS9waHktZG04MTZ4LXVzYi5jLTI0Mi1cbi0tXG5kcml2ZXJzL3BoeS90aS9waHktb21hcC11c2IyLmM9MzczPXN0YXRpYyBpbnQgb21hcF91c2IyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9waHkvdGkvcGh5LW9tYXAtdXNiMi5jLTUxMS1cbmRyaXZlcnMvcGh5L3RpL3BoeS1vbWFwLXVzYjIuYzo1MTI6XHR1c2JfYWRkX3BoeV9kZXYoXHUwMDI2cGh5LVx1MDAzZXBoeSk7XG5kcml2ZXJzL3BoeS90aS9waHktb21hcC11c2IyLmMtNTEzLVxuLS1cbmRyaXZlcnMvcGh5L3RpL3BoeS10d2w0MDMwLXVzYi5jPTY4Mz1zdGF0aWMgaW50IHR3bDQwMzBfdXNiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9waHkvdGkvcGh5LXR3bDQwMzAtdXNiLmMtNzQ4LVx0fVxuZHJpdmVycy9waHkvdGkvcGh5LXR3bDQwMzAtdXNiLmM6NzQ5Olx0dXNiX2FkZF9waHlfZGV2KFx1MDAyNnR3bC1cdTAwM2VwaHkpO1xuZHJpdmVycy9waHkvdGkvcGh5LXR3bDQwMzAtdXNiLmMtNzUwLVxuLS1cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jPTE4OTc9c3RhdGljIGludCBjaV91ZGNfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKVxuLS1cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jLTE5MDctXHRpZiAoY2ktXHUwMDNldXNiX3BoeSlcbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jOjE5MDg6XHRcdHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoY2ktXHUwMDNldXNiX3BoeSwgaXNfYWN0aXZlID9cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jLTE5MDktXHRcdFx0VVNCX0NIQVJHRVJfUFJFU0VOVCA6IFVTQl9DSEFSR0VSX0FCU0VOVCk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM9ODY4PXN0YXRpYyBpbnQgYWI4NTAwX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTkzOC1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjkzOTpcdGVyciA9IHVzYl9hZGRfcGh5KFx1MDAyNmFiLVx1MDAzZXBoeSwgVVNCX1BIWV9UWVBFX1VTQjIpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtOTQwLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmM9Mzg9c3RhdGljIGludCBhbTMzNXhfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYy04MS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmM6ODI6XHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFx1MDAyNmFtX3BoeS1cdTAwM2V1c2JfcGh5X2dlbi5waHkpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYy04My19XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM9NzczPXN0YXRpYyBpbnQgZnNsX290Z19jb25mKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmMtODE3LVx0LyogU3RvcmUgdGhlIG90ZyB0cmFuc2NlaXZlciAqL1xuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM6ODE4Olx0c3RhdHVzID0gdXNiX2FkZF9waHkoXHUwMDI2ZnNsX290Z190Yy1cdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jLTgxOS1cdGlmIChzdGF0dXMpIHtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0yNjQ9c3RhdGljIGludCB1c2JfcGh5X2dlbmVyaWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yOTQtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoyOTU6XHRlcnIgPSB1c2JfYWRkX3BoeV9kZXYoXHUwMDI2bm9wLVx1MDAzZXBoeSk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yOTYtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jPTIzMT1zdGF0aWMgaW50IGdwaW9fdmJ1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jLTMxNS1cdC8qIG9ubHkgYWN0aXZlIHdoZW4gYSBnYWRnZXQgaXMgcmVnaXN0ZXJlZCAqL1xuZHJpdmVycy91c2IvcGh5L3BoeS1ncGlvLXZidXMtdXNiLmM6MzE2Olx0ZXJyID0gdXNiX2FkZF9waHkoXHUwMDI2Z3Bpb192YnVzLVx1MDAzZXBoeSwgVVNCX1BIWV9UWVBFX1VTQjIpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1ncGlvLXZidXMtdXNiLmMtMzE3LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jPTk1PXN0YXRpYyBpbnQgaXNwMTMwMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jLTExNC1cdGkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGlzcCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYzoxMTU6XHR1c2JfYWRkX3BoeV9kZXYocGh5KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jLTExNi1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM9NjU9c3RhdGljIGludCBrZXlzdG9uZV91c2JwaHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtODctXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6ODg6XHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFx1MDAyNmtfcGh5LVx1MDAzZXVzYl9waHlfZ2VuLnBoeSk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtODktfVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jPTc1OD1zdGF0aWMgaW50IG14c19waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy04NjctXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYzo4Njg6XHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFx1MDAyNm14c19waHktXHUwMDNlcGh5KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg2OS19XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jPTMxOT1zdGF0aWMgaW50IHRhaHZvX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGFodm8uYy0zODMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRhaHZvLmM6Mzg0Olx0cmV0ID0gdXNiX2FkZF9waHkoXHUwMDI2dHUtXHUwMDNlcGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRhaHZvLmMtMzg1LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9MTQ5MD1zdGF0aWMgaW50IHRlZ3JhX3VzYl9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTE2MzMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjE2MzQ6XHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFx1MDAyNnRlZ3JhX3BoeS1cdTAwM2V1X3BoeSk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTE2MzUtfVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYz03Nz1zdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTEwMS0gKiBJZiB3ZSBnZXQgdGhlIGNoYXJnZXIgdHlwZSBmcm9tIC1cdTAwM2VjaGFyZ2VyX2RldGVjdCgpIGluc3RlYWQgb2YgZXh0Y29uXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MTAyOiAqIHN1YnN5c3RlbSwgdGhlIHVzYiBwaHkgZHJpdmVyIHNob3VsZCBpc3N1ZSB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKClcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xMDMtICogdG8gc2V0IGNoYXJnZXIgc3RhdGUgd2hlbiB0aGUgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0yNjg9RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KTtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjcwLS8qKlxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjI3MTogKiB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlIC0gc2V0IHRoZSBVU0IgY2hhcmdlciBzdGF0ZVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI3Mi0gKiBAdXNiX3BoeTogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yNzgtICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6Mjc5OnZvaWQgdXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZShzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yODAtXHRcdFx0ICAgICAgIGVudW0gdXNiX2NoYXJnZXJfc3RhdGUgc3RhdGUpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI5Mi19XG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MjkzOkVYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUpO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI5NC1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9NTg5PUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9wdXRfcGh5KTtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNTkxLS8qKlxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjU5MjogKiB1c2JfYWRkX3BoeTogZGVjbGFyZSB0aGUgVVNCIFBIWVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTU5My0gKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy01OTktICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NjAwOmludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MDEte1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MzctfVxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjYzODpFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYWRkX3BoeSk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjM5LVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY0MC0vKipcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2NDE6ICogdXNiX2FkZF9waHlfZGV2IC0gZGVjbGFyZSB0aGUgVVNCIFBIWVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY0Mi0gKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02NDctICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NjQ4OmludCB1c2JfYWRkX3BoeV9kZXYoc3RydWN0IHVzYl9waHkgKngpXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjQ5LXtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjcyLX1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2NzM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2FkZF9waHlfZGV2KTtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02NzQtXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY3OC0gKlxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjY3OTogKiBUaGlzIHJldmVydHMgdGhlIGVmZmVjdHMgb2YgdXNiX2FkZF9waHlcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02ODAtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTY1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFVTQiBQSFkgU2VsZWN0aW9uIGFuZCBJbnN0YW50aWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGBVU0JfUEhZYCBpcyBhIGtleSBjb21wb25lbnQgaGVyZSwgYW5kIG11bHRpcGxlIGRyaXZlcnMsIGluY2x1ZGluZyBgTk9QX1VTQl9YQ0VJVmAsIGFyZSBpbnZvbHZlZCBpbiBpdHMgc2VsZWN0aW9uLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBub3cgaXMsIGNhbiB3ZSBhY3R1YWxseSBwcm9iZSBvciBpbnN0YW50aWF0ZSB0aGlzIGBOT1BfVVNCX1hDRUlWYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgYSBjb25jcmV0ZSBlbnRpdHkgb3IgbW9yZSBvZiBhbiBhYnN0cmFjdCByZXByZXNlbnRhdGlvbiBvZiBhIGdlbmVyaWMgVVNCIFBIWS4gVGltZSB0byBkaWcgaW50byBgcGh5LWdlbmVyaWMuY2AuIFRoYXQgc2hvdWxkIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGdlbmVyaWMgUEhZIGlzIGhhbmRsZWQgYXQgdGhlIGRyaXZlciBsZXZlbCwgYW5kIHdoZXRoZXIgd2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggaXQuIEkmIzM5O20gaG9waW5nIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIGdlbmVyaWMgVVNCIHRyYW5zY2VpdmVyIGxvZ2ljIHdpdGhpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9waHlfZ2VuZXJpYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9waHkvcGh5LWFtMzM1eC5jLTUtI2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL290Zy5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFtMzM1eC5jOjY6I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFtMzM1eC5jLTctI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYz0xNj1zdHJ1Y3QgYW0zMzV4X3BoeSB7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFtMzM1eC5jOjE3Olx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyB1c2JfcGh5X2dlbjtcbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMtMTgtXHRzdHJ1Y3QgcGh5X2NvbnRyb2wgKnBoeV9jdHJsO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi9vdGcuaFx1MDAzZVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MTk6I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMi1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMzOnN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVzYl9waHlfZ2VuZXJpY19yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzQte1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzU6XHRyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShcJiMzNDt1c2JfcGh5X2dlbmVyaWNcJiMzNDssXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zNi1cdFx0XHRQTEFURk9STV9ERVZJRF9BVVRPLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM3LX1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjM4OkVYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfZ2VuZXJpY19yZWdpc3Rlcik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zOS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjQwOnZvaWQgdXNiX3BoeV9nZW5lcmljX3VucmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTQxLXtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy00My19XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3Rlcik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy00NS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTQ2PXN0YXRpYyBpbnQgbm9wX3NldF9zdXNwZW5kKHN0cnVjdCB1c2JfcGh5ICp4LCBpbnQgc3VzcGVuZClcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTQ3LXtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjQ4Olx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGV2X2dldF9kcnZkYXRhKHgtXHUwMDNlZGV2KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTQ5LVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtNjMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzo2NDpzdGF0aWMgdm9pZCBub3BfcmVzZXQoc3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wKVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtNjUte1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTc2PXN0YXRpYyBpbnQgbm9wX3NldF92YnVzKHN0cnVjdCB1c2Jfb3RnICpvdGcsIGJvb2wgZW5hYmxlKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTc4LVx0aW50IHJldCA9IDA7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzo3OTpcdHN0cnVjdCB1c2JfcGh5X2dlbmVyaWMgKm5vcCA9IGRldl9nZXRfZHJ2ZGF0YShvdGctXHUwMDNldXNiX3BoeS1cdTAwM2VkZXYpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtODAtXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM9OTk9c3RhdGljIGlycXJldHVybl90IG5vcF9ncGlvX3ZidXNfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xMDAte1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MTAxOlx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGF0YTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTEwMi1cdHN0cnVjdCB1c2Jfb3RnICpvdGcgPSBub3AtXHUwMDNlcGh5Lm90Zztcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0xMjg9aW50IHVzYl9nZW5fcGh5X2luaXQoc3RydWN0IHVzYl9waHkgKnBoeSlcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTEyOS17XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoxMzA6XHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AgPSBkZXZfZ2V0X2RydmRhdGEocGh5LVx1MDAzZWRldik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xMzEtXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTE0OD12b2lkIHVzYl9nZW5fcGh5X3NodXRkb3duKHN0cnVjdCB1c2JfcGh5ICpwaHkpXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xNDkte1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MTUwOlx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGV2X2dldF9kcnZkYXRhKHBoeS1cdTAwM2VkZXYpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMTUxLVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTE4Mj1zdGF0aWMgaW50IG5vcF9zZXRfaG9zdChzdHJ1Y3QgdXNiX290ZyAqb3RnLCBzdHJ1Y3QgdXNiX2J1cyAqaG9zdClcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xOTUtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoxOTY6aW50IHVzYl9waHlfZ2VuX2NyZWF0ZV9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3ApXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xOTcte1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTI2Mj1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dlbl9jcmVhdGVfcGh5KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTI2My1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjI2NDpzdGF0aWMgaW50IHVzYl9waHlfZ2VuZXJpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMjY1LXtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTI2Ni1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MjY3Olx0c3RydWN0IHVzYl9waHlfZ2VuZXJpY1x0Km5vcDtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTI2OC1cdGludCBlcnI7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzA2LVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzA3OnN0YXRpYyB2b2lkIHVzYl9waHlfZ2VuZXJpY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTMwOC17XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMDk6XHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTMxMC1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0zMjI9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbm9wX3hjZWl2X2R0X2lkcyk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMjMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMjQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdXNiX3BoeV9nZW5lcmljX2RyaXZlciA9IHtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyNTpcdC5wcm9iZVx0XHQ9IHVzYl9waHlfZ2VuZXJpY19wcm9iZSxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyNjpcdC5yZW1vdmVcdFx0PSB1c2JfcGh5X2dlbmVyaWNfcmVtb3ZlLFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzI3LVx0LmRyaXZlclx0XHQ9IHtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyODpcdFx0Lm5hbWVcdD0gXCYjMzQ7dXNiX3BoeV9nZW5lcmljXCYjMzQ7LFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzI5LVx0XHQub2ZfbWF0Y2hfdGFibGUgPSBub3BfeGNlaXZfZHRfaWRzLFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTMzMi1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMzMzpzdGF0aWMgaW50IF9faW5pdCB1c2JfcGh5X2dlbmVyaWNfaW5pdCh2b2lkKVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzM0LXtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMzNTpcdHJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2dXNiX3BoeV9nZW5lcmljX2RyaXZlcik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMzYtfVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzM3OnN1YnN5c19pbml0Y2FsbCh1c2JfcGh5X2dlbmVyaWNfaW5pdCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMzgtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMzk6c3RhdGljIHZvaWQgX19leGl0IHVzYl9waHlfZ2VuZXJpY19leGl0KHZvaWQpXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zNDAte1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzQxOlx0cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dXNiX3BoeV9nZW5lcmljX2RyaXZlcik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zNDItfVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzQzOm1vZHVsZV9leGl0KHVzYl9waHlfZ2VuZXJpY19leGl0KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM0NC1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjM0NTpNT0RVTEVfQUxJQVMoXCYjMzQ7cGxhdGZvcm06dXNiX3BoeV9nZW5lcmljXCYjMzQ7KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM0Ni1NT0RVTEVfQVVUSE9SKFwmIzM0O1RleGFzIEluc3RydW1lbnRzIEluY1wmIzM0Oyk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmgtNC1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oOjU6I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaC02LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTgtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaDo5OnN0cnVjdCB1c2JfcGh5X2dlbmVyaWMge1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmgtMTAtXHRzdHJ1Y3QgdXNiX3BoeSBwaHk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmg9MjM9dm9pZCB1c2JfZ2VuX3BoeV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3BoeSAqcGh5KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTI0LVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmg6MjU6aW50IHVzYl9waHlfZ2VuX2NyZWF0ZV9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3ApO1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmgtMjYtXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYz0yOD1zdHJ1Y3Qga2V5c3RvbmVfdXNicGh5IHtcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzoyOTpcdHN0cnVjdCB1c2JfcGh5X2dlbmVyaWNcdHVzYl9waHlfZ2VuO1xuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTMwLVx0dm9pZCBfX2lvbWVtXHRcdFx0KnBoeV9jdHJsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg3MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgVVNCX1BIWWAgRGVwZW5kZW5jeSBhbmQgQ2hhcmdlciBTdGF0ZSoqCgpSaWdodCwgc28gYFVTQl9QSFlgIGlzIHByZWRpY3RhYmx5IGdvaW5nIHRvIGJlIGluIGFueSBrZXJuZWwgYnVpbGQgdGhhdCBpbmNsdWRlcyBVU0IgUEhZIGRyaXZlcnMuIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlIGxpbmtlZCBpbiB3aGVuIHNvbWV0aGluZyBsaWtlIHRoZSBnZW5lcmljLCBDaGlwSWRlYSwgb3IgZ2FkZ2V0IFBIWSBkcml2ZXJzIGFyZSBjb25maWd1cmVkLiBUaGF0IG1ha2VzIHNlbnNlLCBhIHZlcnkgY29tbW9uIGRlcGVuZGVuY3kgaW4gYSBsb3Qgb2YgYnVpbGRzLCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCBteSByZWFsIGludGVyZXN0IGxpZXMgaW4gaG93IHRoaXMgYWZmZWN0cyB0aGUgY2hhcmdlciBzdGF0ZSBub3RpZmljYXRpb24sIHNwZWNpZmljYWxseSBob3cgYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2AgZ2V0cyBpbnZva2VkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIGNoYWluLiBJJiMzOTtsbCBuZWVkIHRvIGZpbmQgd2hlcmUgYHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGVgIGlzIGJlaW5nIGNhbGxlZCBhbmQgdGhlbiB0cmFjZSBob3cgdGhhdCBsZWFkcyB0byB0aGUgd29ya3F1ZXVlLiBMZXQmIzM5O3Mgc2VlLCBhIHF1aWNrIGBncmVwYCBmb3IgdGhvc2UgdGVybXMsIG1heWJlIGFsc28gYGNoZ193b3JrYCBvciBgdHlwZV9uYmAganVzdCBpbiBjYXNlLCBzaG91bGQgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBwcmV0dHkgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hnX3dvcmt8dXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZXx0eXBlX25iJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0yMS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjI6c3RydWN0IGFmdGVyX3N0YXRlX2NoZ193b3JrIHtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjMtXHRzdHJ1Y3QgZHJiZF93b3JrIHc7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYz0xMjYzPV9kcmJkX3NldF9zdGF0ZShzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwgdW5pb24gZHJiZF9zdGF0ZSBucyxcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTEyNzAtXHRlbnVtIHNhbml0aXplX3N0YXRlX3dhcm5pbmdzIHNzdztcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MTI3MTpcdHN0cnVjdCBhZnRlcl9zdGF0ZV9jaGdfd29yayAqYXNjdztcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMTI3Mi1cdHN0cnVjdCBkcmJkX3N0YXRlX2NoYW5nZSAqc3RhdGVfY2hhbmdlO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM9MTQ4OT1zdGF0aWMgaW50IHdfYWZ0ZXJfc3RhdGVfY2goc3RydWN0IGRyYmRfd29yayAqdywgaW50IHVudXNlZClcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMTQ5MC17XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jOjE0OTE6XHRzdHJ1Y3QgYWZ0ZXJfc3RhdGVfY2hnX3dvcmsgKmFzY3cgPVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYzoxNDkyOlx0XHRjb250YWluZXJfb2Yodywgc3RydWN0IGFmdGVyX3N0YXRlX2NoZ193b3JrLCB3KTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMTQ5My1cdHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlID0gYXNjdy1cdTAwM2VkZXZpY2U7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYz0xNzA4PXN0YXRpYyB2b2lkIGFmdGVyX3N0YXRlX2NoKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCB1bmlvbiBkcmJkX3N0YXRlIG9zLFxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjAzNi1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjAzNzpzdHJ1Y3QgYWZ0ZXJfY29ubl9zdGF0ZV9jaGdfd29yayB7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTIwMzgtXHRzdHJ1Y3QgZHJiZF93b3JrIHc7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYz0yMDQ3PXN0YXRpYyBpbnQgd19hZnRlcl9jb25uX3N0YXRlX2NoKHN0cnVjdCBkcmJkX3dvcmsgKncsIGludCB1bnVzZWQpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTIwNDgte1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYzoyMDQ5Olx0c3RydWN0IGFmdGVyX2Nvbm5fc3RhdGVfY2hnX3dvcmsgKmFjc2N3ID1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjA1MDpcdFx0Y29udGFpbmVyX29mKHcsIHN0cnVjdCBhZnRlcl9jb25uX3N0YXRlX2NoZ193b3JrLCB3KTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjA1MS1cdHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSBhY3Njdy1cdTAwM2Vjb25uZWN0aW9uO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM9MjI5Mz1fY29ubl9yZXF1ZXN0X3N0YXRlKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHVuaW9uIGRyYmRfc3RhdGUgbWFzaywgdW5pb24gZHJiZF9zdGF0ZSB2YWwsXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0yMjk2LVx0ZW51bSBkcmJkX3N0YXRlX3J2IHJ2ID0gU1NfU1VDQ0VTUztcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjI5NzpcdHN0cnVjdCBhZnRlcl9jb25uX3N0YXRlX2NoZ193b3JrICphY3NjdztcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjI5OC1cdGVudW0gZHJiZF9jb25ucyBvYyA9IGNvbm5lY3Rpb24tXHUwMDNlY3N0YXRlO1xuLS1cbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYz0xNzg9c3RydWN0IHJvY2tjaGlwX3VzYjJwaHlfY2ZnIHtcbi0tXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMjAwLSAqIEBtdXRleDogZm9yIHJlZ2lzdGVyIHVwZGF0aW5nIGluIHNtX3dvcmsuXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM6MjAxOiAqIEBjaGdfd29yazogY2hhcmdlIGRldGVjdCB3b3JrLlxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTIwMi0gKiBAb3RnX3NtX3dvcms6IE9URyBzdGF0ZSBtYWNoaW5lIHdvcmsuXG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTIwOT1zdHJ1Y3Qgcm9ja2NoaXBfdXNiMnBoeV9wb3J0IHtcbi0tXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMjE5LVx0c3RydWN0IG11dGV4XHRtdXRleDtcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYzoyMjA6XHRzdHJ1Y3RcdFx0ZGVsYXllZF93b3JrIGNoZ193b3JrO1xuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTIyMS1cdHN0cnVjdFx0XHRkZWxheWVkX3dvcmsgb3RnX3NtX3dvcms7XG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTY1MD1zdGF0aWMgaW50IHJvY2tjaGlwX3VzYjJwaHlfZXhpdChzdHJ1Y3QgcGh5ICpwaHkpXG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTY1Ny1cdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJwb3J0LVx1MDAzZW90Z19zbV93b3JrKTtcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYzo2NTg6XHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZycG9ydC1cdTAwM2VjaGdfd29yayk7XG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtNjU5LVx0fSBlbHNlIGlmIChycG9ydC1cdTAwM2Vwb3J0X2lkID09IFVTQjJQSFlfUE9SVF9IT1NUKVxuLS1cbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYz02NzM9c3RhdGljIHZvaWQgcm9ja2NoaXBfdXNiMnBoeV9vdGdfc21fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTcwNy1cdFx0XHRjYXNlIFVTQl9DSEdfU1RBVEVfVU5ERUZJTkVEOlxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjcwODpcdFx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZycG9ydC1cdTAwM2VjaGdfd29yaywgMCk7XG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtNzA5LVx0XHRcdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYz04MjY9c3RhdGljIHZvaWQgcm9ja2NoaXBfY2hnX2RldGVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtODI4LVx0c3RydWN0IHJvY2tjaGlwX3VzYjJwaHlfcG9ydCAqcnBvcnQgPVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjgyOTpcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByb2NrY2hpcF91c2IycGh5X3BvcnQsIGNoZ193b3JrLndvcmspO1xuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTgzMC1cdHN0cnVjdCByb2NrY2hpcF91c2IycGh5ICpycGh5ID0gZGV2X2dldF9kcnZkYXRhKHJwb3J0LVx1MDAzZXBoeS1cdTAwM2VkZXYucGFyZW50KTtcbi0tXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtOTE2LVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjkxNzpcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZycG9ydC1cdTAwM2VjaGdfd29yaywgZGVsYXkpO1xuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTkxOC19XG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTEyOTA9c3RhdGljIGludCByb2NrY2hpcF91c2IycGh5X290Z19wb3J0X2luaXQoc3RydWN0IHJvY2tjaGlwX3VzYjJwaHkgKnJwaHksXG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTEzMTctXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM6MTMxODpcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJwb3J0LVx1MDAzZWNoZ193b3JrLCByb2NrY2hpcF9jaGdfZGV0ZWN0X3dvcmspO1xuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTEzMTktXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZycG9ydC1cdTAwM2VvdGdfc21fd29yaywgcm9ja2NoaXBfdXNiMnBoeV9vdGdfc21fd29yayk7XG4tLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvcGYxNTUwLWNoYXJnZXIuYz0xODA9c3RhdGljIHZvaWQgcGYxNTUwX2NoZ19iYXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvcGYxNTUwLWNoYXJnZXIuYy0yMTYtXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jOjIxNzpzdGF0aWMgdm9pZCBwZjE1NTBfY2hnX2NoZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L3BmMTU1MC1jaGFyZ2VyLmMtMjE4LXtcbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jPTU0OT1zdGF0aWMgaW50IHBmMTU1MF9jaGFyZ2VyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvcGYxNTUwLWNoYXJnZXIuYy01NzUtXHRyZXQgPSBkZXZtX2RlbGF5ZWRfd29ya19hdXRvY2FuY2VsKGNoZy1cdTAwM2VkZXYsIFx1MDAyNmNoZy1cdTAwM2VjaGdfc2Vuc2Vfd29yayxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L3BmMTU1MC1jaGFyZ2VyLmM6NTc2Olx0XHRcdFx0XHQgICBwZjE1NTBfY2hnX2NoZ193b3JrKTtcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L3BmMTU1MC1jaGFyZ2VyLmMtNTc3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jPTMxMz1zdGF0aWMgaW50IGNpX2hkcmNfaW14X25vdGlmeV9ldmVudChzdHJ1Y3QgY2lfaGRyYyAqY2ksIHVuc2lnbmVkIGludCBldmVudClcbi0tXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jLTM0Mi1cdFx0aWYgKGNpLVx1MDAzZXVzYl9waHkpXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jOjM0MzpcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNmNpLVx1MDAzZXVzYl9waHktXHUwMDNlY2hnX3dvcmspO1xuZHJpdmVycy91c2IvY2hpcGlkZWEvY2lfaGRyY19pbXguYy0zNDQtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jPTE4OTc9c3RhdGljIGludCBjaV91ZGNfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKVxuLS1cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jLTE5MDctXHRpZiAoY2ktXHUwMDNldXNiX3BoeSlcbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jOjE5MDg6XHRcdHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoY2ktXHUwMDNldXNiX3BoeSwgaXNfYWN0aXZlID9cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jLTE5MDktXHRcdFx0VVNCX0NIQVJHRVJfUFJFU0VOVCA6IFVTQl9DSEFSR0VSX0FCU0VOVCk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTc3PXN0YXRpYyB2b2lkIHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMTAxLSAqIElmIHdlIGdldCB0aGUgY2hhcmdlciB0eXBlIGZyb20gLVx1MDAzZWNoYXJnZXJfZGV0ZWN0KCkgaW5zdGVhZCBvZiBleHRjb25cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoxMDI6ICogc3Vic3lzdGVtLCB0aGUgdXNiIHBoeSBkcml2ZXIgc2hvdWxkIGlzc3VlIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoKVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTEwMy0gKiB0byBzZXQgY2hhcmdlciBzdGF0ZSB3aGVuIHRoZSBjaGFyZ2VyIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTEwNT1zdGF0aWMgdm9pZCB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTEwNi17XG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MTA3Olx0c3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xMDgtXHRjaGFyIHVjaGdlcl9zdGF0ZVs1MF0gPSB7IDAgfTtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9MTM5PXN0YXRpYyB2b2lkIF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xNTctXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MTU4Olx0c2NoZWR1bGVfd29yayhcdTAwMjZ1c2JfcGh5LVx1MDAzZWNoZ193b3JrKTtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xNTktfVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0xNzA9c3RhdGljIGludCB1c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMTcyLXtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoxNzM6XHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHVzYl9waHksIHR5cGVfbmIpO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTE3NC1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9MTkzPXZvaWQgdXNiX3BoeV9zZXRfY2hhcmdlcl9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5LCB1bnNpZ25lZCBpbnQgbUEpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTIyNy1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyMjg6XHRzY2hlZHVsZV93b3JrKFx1MDAyNnVzYl9waHktXHUwMDNlY2hnX3dvcmspO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTIyOS19XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTI2OD1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dldF9jaGFyZ2VyX2N1cnJlbnQpO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yNzAtLyoqXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MjcxOiAqIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUgLSBzZXQgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjcyLSAqIEB1c2JfcGh5OiB0aGUgVVNCIHBoeSB0byBiZSB1c2VkXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI3OC0gKi9cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyNzk6dm9pZCB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5LFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI4MC1cdFx0XHQgICAgICAgZW51bSB1c2JfY2hhcmdlcl9zdGF0ZSBzdGF0ZSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjkwLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjI5MTpcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dXNiX3BoeS1cdTAwM2VjaGdfd29yayk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjkyLX1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyOTM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjk0LVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0zMTE9c3RhdGljIHZvaWQgdXNiX2NoYXJnZXJfaW5pdChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzE1LVx0dXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHVzYl9waHkpO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jOjMxNjpcdElOSVRfV09SSyhcdTAwMjZ1c2JfcGh5LVx1MDAzZWNoZ193b3JrLCB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmspO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTMxNy19XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTMxOT1zdGF0aWMgaW50IHVzYl9hZGRfZXh0Y29uKHN0cnVjdCB1c2JfcGh5ICp4KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNDMtXHRcdH0gZWxzZSB7XG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MzQ0Olx0XHRcdHgtXHUwMDNldHlwZV9uYi5ub3RpZmllcl9jYWxsID0gdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM0NS1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzQ3LVx0XHRcdFx0XHRcdFx0ICAgIEVYVENPTl9DSEdfVVNCX1NEUCxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzozNDg6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2eC1cdTAwM2V0eXBlX25iKTtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNDktXHRcdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNTYtXHRcdFx0XHRcdFx0XHQgICAgRVhUQ09OX0NIR19VU0JfQ0RQLFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjM1NzpcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ4LVx1MDAzZXR5cGVfbmIpO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM1OC1cdFx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM2NS1cdFx0XHRcdFx0XHRcdCAgICBFWFRDT05fQ0hHX1VTQl9EQ1AsXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MzY2Olx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNngtXHUwMDNldHlwZV9uYik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzY3LVx0XHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzc0LVx0XHRcdFx0XHRcdFx0ICAgIEVYVENPTl9DSEdfVVNCX0FDQSxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzozNzU6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2eC1cdTAwM2V0eXBlX25iKTtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNzYtXHRcdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy00MDEtXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NDAyOlx0aWYgKHgtXHUwMDNldHlwZV9uYi5ub3RpZmllcl9jYWxsKVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTQwMy1cdFx0X191c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUoeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjI3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFVTQiBQSFkgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgVVNCX1BIWWAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgY2FuIGJlIGJ1aWx0LCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGZlYXNpYmxlIG9uIHg4Ni9hbWQ2NCBhcmNoaXRlY3R1cmVzLiBUaGUgY29kZSBzdWdnZXN0cyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIEtjb25maWcgb3B0aW9ucywgc3BlY2lmaWNhbGx5IGBOT1BfVVNCX1hDRUlWYCBhbmQgYFVTQl9QSFlgIHRoZW1zZWx2ZXMuCgpMb29raW5nIGF0IGBkcml2ZXJzL3VzYi9waHkvS2NvbmZpZ2AsIEkgY2FuIHNlZSBhIGRlcGVuZGVuY3k6IGBVU0JfUEhZYCBkZWZhdWx0cyB0byBgeWAgKHllcykgaWYgYEVYVENPTmAgaXMgZW5hYmxlZCwgYW5kIGltcG9ydGFudGx5LCBzZWxlY3RzIGBFWFRDT05gLiBgTk9QX1VTQl9YQ0VJVmAgaXMgYSB0cmlzdGF0ZSBvcHRpb24gYW5kIGRlcGVuZHMgb24gZWl0aGVyIGBVU0JfR0FER0VUYCBvciB0aGUgbmVnYXRpb24gb2YgYFVTQl9HQURHRVRgLCBzbyBpZiB0aGUgbGF0dGVyIGlzIG1vZHVsYXIsIGBOT1BfVVNCX1hDRUlWYCBjYW4mIzM5O3QgYmUgYnVpbHQtaW4uIEl0IGFsc28gKnNlbGVjdHMqIGBVU0JfUEhZYC4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgaGllcmFyY2h5IG9yIHJlbGF0aW9uc2hpcCB3aGVyZSBgTk9QX1VTQl9YQ0VJVmAgY2FuIHVzZSB0aGUgdW5kZXJseWluZyBgVVNCX1BIWWAuCgpUaGVuLCB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgcmVpbmZvcmNlcyB0aGUgYnVpbGQgbG9naWM6IGBvYmotJChDT05GSUdfVVNCX1BIWSkgJiM0Mzs9IHBoeS5vYCBtZWFucyBpZiBgVVNCX1BIWWAgaXMgZW5hYmxlZCwgYHBoeS5vYCBpcyBidWlsdC4gU2ltaWxhcmx5LCBgb2JqLSQoQ09ORklHX05PUF9VU0JfWENFSVYpICYjNDM7PSBwaHktZ2VuZXJpYy5vYCBidWlsZHMgYHBoeS1nZW5lcmljLm9gIHdoZW4gYE5PUF9VU0JfWENFSVZgIGlzIHNlbGVjdGVkLgoKU28sIHRoZSBrZXkgY29uZmlndXJhdGlvbiBmbGFncyBJIG5lZWQgdG8gY29uc2lkZXIgYXJlIGBVU0JfUEhZYCBhbmQgYE5PUF9VU0JfWENFSVZgLiBJIHNob3VsZCBub3cgZXhwbG9yZSBkZXBlbmRlbmNpZXMgbGlrZSBgVVNCX1NVUFBPUlRgIGFuZCBgVVNCX1BIWWAgaW4gdGhlIEtjb25maWcgZmlsZXMgdG8gZGV0ZXJtaW5lIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgUEhZIHRvIGJlIGJ1aWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIFVTQl9TVVBQT1JUfGNvbmZpZyBVU0JfUEhZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvS2NvbmZpZz0yNj1jb25maWcgVVNCX1VIQ0lfQklHX0VORElBTl9ERVNDXG4tLVxuZHJpdmVycy91c2IvS2NvbmZpZy0yOC1cbmRyaXZlcnMvdXNiL0tjb25maWc6Mjk6bWVudWNvbmZpZyBVU0JfU1VQUE9SVFxuZHJpdmVycy91c2IvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7VVNCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz01PW1lbnUgXCYjMzQ7VVNCIFBoeXNpY2FsIExheWVyIGRyaXZlcnNcJiMzNDtcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTYtXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo3OmNvbmZpZyBVU0JfUEhZXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy04LVx0c2VsZWN0IEVYVENPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA1NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIFVTQiBQSFkgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy91c2IvcGh5L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFVTQiBQSFkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGZpcnN0IDUwIGxpbmVzLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGNvdmVyIHRoZSBjb3JlIG9wdGlvbnMsIHBlcmhhcHMgaW5jbHVkaW5nIHRob3NlIHJlbGF0ZWQgdG8gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdmVuZG9yLXNwZWNpZmljIFBIWSBzdXBwb3J0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIHNlbGVjdGlvbiBvZiBkaWZmZXJlbnQgUEhZIHR5cGVzIChPVEcsIGhvc3QsIGRldmljZSksIHBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucywgYW5kIHBvc3NpYmx5IHNvbWUgYmFzaWMgZGV2aWNlLXRyZWUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBpZiB0aGV5IGFyZSBkZWZpbmVkIHRoYXQgZWFybHkgaW4gdGhlIGZpbGUuIEkgYWxzbyBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgY2hlY2tzIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgZ29vZCBiYXNlbGluZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIFVTQiBQSFkgZmVhdHVyZXMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvcGh5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgUGh5c2ljYWwgTGF5ZXIgVVNCIGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdG1lbnUgXCYjMzQ7VVNCIFBoeXNpY2FsIExheWVyIGRyaXZlcnNcJiMzNDtcbiAgIDY6XHRcbiAgIDc6XHRjb25maWcgVVNCX1BIWVxuICAgODpcdFx0c2VsZWN0IEVYVENPTlxuICAgOTpcdFx0ZGVmX2Jvb2wgblxuICAxMDpcdFxuICAxMTpcdCNcbiAgMTI6XHQjIFVTQiBUcmFuc2NlaXZlciBEcml2ZXJzXG4gIDEzOlx0I1xuICAxNDpcdGNvbmZpZyBBQjg1MDBfVVNCXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtBQjg1MDAgVVNCIFRyYW5zY2VpdmVyIERyaXZlclwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBBQjg1MDBfQ09SRVxuICAxNzpcdFx0c2VsZWN0IFVTQl9QSFlcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgVVNCIE9URyB0cmFuc2NlaXZlciBpbiBBQjg1MDAgY2hpcC5cbiAgMjA6XHRcdCAgVGhpcyB0cmFuc2NlaXZlciBzdXBwb3J0cyBoaWdoIGFuZCBmdWxsIHNwZWVkIGRldmljZXMgcGx1cyxcbiAgMjE6XHRcdCAgaW4gaG9zdCBtb2RlLCBsb3cgc3BlZWQuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIEZTTF9VU0IyX09UR1xuICAyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIFVTQiBPVEcgVHJhbnNjZWl2ZXIgRHJpdmVyXCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIFVTQl9FSENJX0ZTTCBcdTAwMjZcdTAwMjYgVVNCX0ZTTF9VU0IyIFx1MDAyNlx1MDAyNiBVU0JfT1RHX0ZTTT15IFx1MDAyNlx1MDAyNiBQTVxuICAyNjpcdFx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCB0aGlzIGNhbiYjMzk7dCBiZSAmIzM5O3kmIzM5O1xuICAyNzpcdFx0c2VsZWN0IFVTQl9QSFlcbiAgMjg6XHRcdGhlbHBcbiAgMjk6XHRcdCAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCBGcmVlc2NhbGUgVVNCIE9URyB0cmFuc2NlaXZlci5cbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgS0VZU1RPTkVfVVNCX1BIWVxuICAzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7S2V5c3RvbmUgVVNCIFBIWSBEcml2ZXJcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gQVJDSF9LRVlTVE9ORSB8fCBDT01QSUxFX1RFU1RcbiAgMzQ6XHRcdGRlcGVuZHMgb24gTk9QX1VTQl9YQ0VJVlxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IEtleXN0b25lIFVTQiBwaHkuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXG4gIDM3Olx0XHQgIGludGVyZmFjZSB0byBpbnRlcmFjdCB3aXRoIFVTQiAyLjAgYW5kIFVTQiAzLjAgUEhZIHRoYXQgaXMgcGFydFxuICAzODpcdFx0ICBvZiB0aGUgS2V5c3RvbmUgU09DLlxuICAzOTpcdFxuICA0MDpcdGNvbmZpZyBOT1BfVVNCX1hDRUlWXG4gIDQxOlx0XHR0cmlzdGF0ZSBcJiMzNDtOT1AgVVNCIFRyYW5zY2VpdmVyIERyaXZlclwmIzM0O1xuICA0MjpcdFx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCBOT1AgY2FuJiMzOTt0IGJlIGJ1aWx0LWluXG4gIDQzOlx0XHRzZWxlY3QgVVNCX1BIWVxuICA0NDpcdFx0aGVscFxuICA0NTpcdFx0ICBUaGlzIGRyaXZlciBpcyB0byBiZSB1c2VkIGJ5IGFsbCB0aGUgdXNiIHRyYW5zY2VpdmVyIHdoaWNoIGFyZSBlaXRoZXJcbiAgNDY6XHRcdCAgYnVpbHQtaW4gd2l0aCB1c2IgaXAgb3Igd2hpY2ggYXJlIGF1dG9ub21vdXMgYW5kIGRvZXNuJiMzOTt0IHJlcXVpcmUgYW55XG4gIDQ3Olx0XHQgIHBoeSBwcm9ncmFtbWluZyBzdWNoIGFzIElTUDF4MDQgZXRjLlxuICA0ODpcdFxuICA0OTpcdGNvbmZpZyBBTTMzNVhfQ09OVFJPTF9VU0JcbiAgNTA6XHRcdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDAwCgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVVNCIFBIWSBSZWZhY3RvcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSByZWZhY3RvcmluZyBvZiB0aGUgVVNCIFBIWSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkcml2ZXJzL3VzYi9waHkvcGh5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbm5lY3Rpb25zOiBgVVNCX1BIWWAgaXMgdHJpZ2dlcmVkIGJ5IGEgd2hvbGUgc2xldyBvZiBjb25maWd1cmF0aW9ucyBsaWtlIGBOT1BfVVNCX1hDRUlWYCwgYFVTQl9HUElPX1ZCVVNgLCBgVVNCX0lTUDEzMDFgLCBhbmQgc28gb24sIGFsbCBuZXN0ZWQgdW5kZXIgdGhlIHVtYnJlbGxhIG9mIGBVU0JfU1VQUE9SVGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTm93LCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGhvdyBjaGFyZ2VyIG5vdGlmaWNhdGlvbnMgYW5kIGRldmljZSB0eXBlIGluZm9ybWF0aW9uIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHk6CgoqICAgYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2A6IFRoaXMgaXMgd2hlcmUgdGhlIHVldmVudCBnZW5lcmF0aW9uIGlzIG5vdyBoYW5kbGVkIHVzaW5nIGBrb2JqZWN0X3VldmVudF9lbnYoKWAgaW5zdGVhZCBvZiB0aGUgb2xkIGBrb2JqZWN0X3VldmVudCgpYCBtZXRob2QuCiogICBgdXNiX2FkZF9waHlfZGV2YDogVGhlIHNldHRpbmcgb2YgYHgtJmd0O2Rldi0mZ3Q7dHlwZWAgdG8gYCZhbXA7dXNiX3BoeV9kZXZfdHlwZWAgaGFzIGJlZW4gcmVtb3ZlZC4KKiAgIGB1c2JfcGh5X3VldmVudGAgYW5kIGBfX2RldmljZV90b191c2JfcGh5YCBhcmUgZGVsZXRlZC4KCkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIGFtIGZvbGxvd2luZyBteSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LiBUaGUgcmVhY2hhYmlsaXR5IGFuYWx5c2lzIGlzIGtleSwgYW5kIGl0IGFwcGVhcnMgdGhlIGNoYW5nZXMgYXJlICpleGVjdXRhYmxlIGtlcm5lbCBjb2RlKiByZWFjaGFibGUgdGhyb3VnaCB2YXJpb3VzIG1lYW5zLiBTcGVjaWZpY2FsbHksIGBOT1BfVVNCX1hDRUlWYCBhbmQgdGhlIFVTQiBQSFkgZnJhbWV3b3JrIGFyZSBsb2FkYWJsZS9jb21waWxhYmxlIGludG8gdGhlIGtlcm5lbCwgd2l0aCBVU0IgZ2FkZ2V0LCBjaGlwaWRlYSwgb3IgZXh0Y29uIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgY2hhcmdlciB3b3JrIG9yIGFkZGluZyB0aGUgUEhZLiBTbywgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgYXJlIHJlbGV2YW50LgoKU28sIHRoaXMgaXMgYSBjb2RlIHJlZmFjdG9yaW5nIHRoYXQgaW1wYWN0cyBob3cgY2hhcmdlciBldmVudHMgYW5kIGRldmljZSBkYXRhIGFyZSBleHBvc2VkLiBXZSBoYXZlIGtleSBmdW5jdGlvbnMgLSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYCwgYHVzYl9hZGRfcGh5X2RldmAsIGB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlYCwgYHVzYl9waHlfc2V0X2NoYXJnZXJfY3VycmVudGAuIFRoZSByZWxldmFudCBjb25maWdzIGFyZTogYFVTQl9TVVBQT1JUYCwgYFVTQl9QSFlgLCBhbmQgYE5PUF9VU0JfWENFSVZgLgoKSW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIG1vZGVybml6aW5nIHRoZSB1ZXZlbnQgc3lzdGVtIHdpdGhpbiB0aGUgVVNCIFBIWSwgc3dpdGNoaW5nIGZyb20gYXNzaWduaW5nIHRoZSBgZGV2LSZndDt0eXBlYCBhbmQgYSBjdXN0b20gdWV2ZW50IGZ1bmN0aW9uIHRvIGEgbW9yZSBkaXJlY3QgYGtvYmplY3RfdWV2ZW50X2VudigpYCBjYWxsLiBUaGlzIHN0cmVhbWxpbmVzIHRoZSBldmVudCBoYW5kbGluZyBmb3IgY2hhcmdlciBub3RpZmljYXRpb25zIGFuZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgYSByZWZhY3RvcmluZyBvZiBleGVjdXRhYmxlIGNvZGUsIHdoaWNoIGltcGFjdHMgaG93IGV2ZW50cyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwuIEJlY2F1c2UgdGhpcyBpcyByZWZhY3RvcmluZyBhbmQgdG91Y2ggdWV2ZW50cywgZnV6emluZyB0byBjaGVjayBmb3IgcmVncmVzc2lvbnMgaXMgYW4gYWJzb2x1dGUgbXVzdCEKCkxldCYjMzk7cyBsb2cgdGhlIGZpbmRpbmdzIHVzaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfU1VQUE9SVCYjMzQ7LAogICAgJiMzNDtVU0JfUEhZJiMzNDssCiAgICAmIzM0O05PUF9VU0JfWENFSVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsmIzM0OywKICAgICYjMzQ7dXNiX2FkZF9waHlfZGV2JiMzNDssCiAgICAmIzM0O3VzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUmIzM0OywKICAgICYjMzQ7dXNiX3BoeV9zZXRfY2hhcmdlcl9jdXJyZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdWV2ZW50IHJlcG9ydGluZyBtZWNoYW5pc20gZm9yIFVTQiBQSFkgY2hhcmdlciBldmVudHMgaW4gZHJpdmVycy91c2IvcGh5L3BoeS5jLiBJbnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgZGV2aWNlIHR5cGUgYW5kIGltcGxlbWVudGluZyBhIGN1c3RvbSB1ZXZlbnQgY2FsbGJhY2ssIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgY2hhcmdlciBzdGF0ZSBhbmQgdHlwZSBhcmUgbm93IGNvbnN0cnVjdGVkIGFuZCBwYXNzZWQgZGlyZWN0bHkgdmlhIGtvYmplY3RfdWV2ZW50X2VudigpIHdpdGhpbiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgUEhZIGNvcmUgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1VTQl9QSFkmIzM0OywKICAgICYjMzQ7Tk9QX1VTQl9YQ0VJViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayYjMzQ7LAogICAgJiMzNDt1c2JfYWRkX3BoeV9kZXYmIzM0OywKICAgICYjMzQ7dXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSYjMzQ7LAogICAgJiMzNDt1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1ZXZlbnQgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3IgVVNCIFBIWSBjaGFyZ2VyIGV2ZW50cyBpbiBkcml2ZXJzL3VzYi9waHkvcGh5LmMuIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHlwZSBhbmQgaW1wbGVtZW50aW5nIGEgY3VzdG9tIHVldmVudCBjYWxsYmFjaywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjaGFyZ2VyIHN0YXRlIGFuZCB0eXBlIGFyZSBub3cgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCBkaXJlY3RseSB2aWEga29iamVjdF91ZXZlbnRfZW52KCkgd2l0aGluIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBQSFkgY29yZSBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVVNCIFBIWSB1ZXZlbnQgbm90aWZpY2F0aW9uIGJ5IHNlbmRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBkaXJlY3RseSBmcm9tIGB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoKWAgdXNpbmcgYGtvYmplY3RfdWV2ZW50X2VudigpYCByYXRoZXIgdGhhbiB2aWEgYSBgZGV2aWNlX3R5cGUudWV2ZW50YCBjYWxsYmFjay4gXG5cbkFsbCBzdGFjayBidWZmZXJzIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaCAoYHVjaGdlcl9zdGF0ZWAsIGB1Y2hnZXJfdHlwZWAsIGFuZCBgZW52cGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCAvIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIHdpdGggTlVMTCB0ZXJtaW5hdG9yKSBiZWZvcmUgc3RyaW5nIGZvcm1hdHRpbmcgdmlhIGBzbnByaW50ZigpYCBhbmQgYmVpbmcgcGFzc2VkIHRvIGBrb2JqZWN0X3VldmVudF9lbnYoKWAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXJyYXkgaW5kZXhpbmcgKGUuZy4gYHVzYl9jaGdlcl90eXBlYCkgYXJlIGJvdW5kcyBjaGVjayAvIG91dC1vZi1ib3VuZHMgcmVhZCBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2ZWZkNTcxYzNkMjExN2E4ODZkZDdkMWQ0NDhhNWJjMDZhYWZmMmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDExOjM0OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS5jIGIvZHJpdmVycy91c2IvcGh5L3BoeS5jCmluZGV4IDVhOWI5MzUzZjM0M2QuLjdjODVjN2NhMWQzMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmMKQEAgLTQyLDEyICYjNDM7NDIsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3R5cGVbXSA9IHsKIAlbQUNBX1RZUEVdCQkJPSAmIzM0O1VTQl9DSEFSR0VSX0FDQV9UWVBFJiMzNDssCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3N0YXRlW10gPSB7Ci0JW1VTQl9DSEFSR0VSX0RFRkFVTFRdCT0gJiMzNDtVU0JfQ0hBUkdFUl9ERUZBVUxUJiMzNDssCi0JW1VTQl9DSEFSR0VSX1BSRVNFTlRdCT0gJiMzNDtVU0JfQ0hBUkdFUl9QUkVTRU5UJiMzNDssCi0JW1VTQl9DSEFSR0VSX0FCU0VOVF0JPSAmIzM0O1VTQl9DSEFSR0VSX0FCU0VOVCYjMzQ7LAotfTsKLQogc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogCWVudW0gdXNiX3BoeV90eXBlIHR5cGUpCiB7CkBAIC04MCwxOCAmIzQzOzc0LDYgQEAgc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiAJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3BoeSAqX19kZXZpY2VfdG9fdXNiX3BoeShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVzYl9waHkgKnVzYl9waHk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVzYl9waHksICZhbXA7cGh5X2xpc3QsIGhlYWQpIHsKLQkJaWYgKHVzYl9waHktJmd0O2RldiA9PSBkZXYpCi0JCQlyZXR1cm4gdXNiX3BoeTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIHZvaWQgdXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KQogewogCXVzYl9waHktJmd0O2NoZ19jdXIuc2RwX21pbiA9IERFRkFVTFRfU0RQX0NVUl9NSU47CkBAIC0xMjMsNiAmIzQzOzEwNSw5IEBAIHN0YXRpYyB2b2lkIHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSkKIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTsKJiM0MzsJY2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07CiYjNDM7CWNoYXIgdWNoZ2VyX3R5cGVbNTBdID0geyAwIH07CiYjNDM7CWNoYXIgKmVudnBbXSA9IHsgdWNoZ2VyX3N0YXRlLCB1Y2hnZXJfdHlwZSwgTlVMTCB9OwogCXVuc2lnbmVkIGludCBtaW4sIG1heDsKIAogCXN3aXRjaCAodXNiX3BoeS0mZ3Q7Y2hnX3N0YXRlKSB7CkBAIC0xMzAsMTEgJiM0MzsxMTUsMTUgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJdXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KHVzYl9waHksICZhbXA7bWluLCAmYW1wO21heCk7CiAKIAkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFtcDt1c2JfcGh5LSZndDtub3RpZmllciwgbWF4LCB1c2JfcGh5KTsKJiM0MzsJCXNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLAomIzQzOwkJCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssICYjMzQ7VVNCX0NIQVJHRVJfUFJFU0VOVCYjMzQ7KTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfQ0hBUkdFUl9BQlNFTlQ6CiAJCXVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudCh1c2JfcGh5KTsKIAogCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO3VzYl9waHktJmd0O25vdGlmaWVyLCAwLCB1c2JfcGh5KTsKJiM0MzsJCXNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLAomIzQzOwkJCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssICYjMzQ7VVNCX0NIQVJHRVJfQUJTRU5UJiMzNDspOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfd2Fybih1c2JfcGh5LSZndDtkZXYsICYjMzQ7VW5rbm93biBVU0IgY2hhcmdlciBzdGF0ZTogJWRcbiYjMzQ7LApAQCAtMTQyLDM2ICYjNDM7MTMxLDkgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJcmV0dXJuOwogCX0KIAotCWtvYmplY3RfdWV2ZW50KCZhbXA7dXNiX3BoeS0mZ3Q7ZGV2LSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7Ci19Ci0KLXN0YXRpYyBpbnQgdXNiX3BoeV91ZXZlbnQoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCi17Ci0JY29uc3Qgc3RydWN0IHVzYl9waHkgKnVzYl9waHk7Ci0JY2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07Ci0JY2hhciB1Y2hnZXJfdHlwZVs1MF0gPSB7IDAgfTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaHlfbG9jaywgZmxhZ3MpOwotCXVzYl9waHkgPSBfX2RldmljZV90b191c2JfcGh5KGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BoeV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIXVzYl9waHkpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc25wcmludGYodWNoZ2VyX3N0YXRlLCBBUlJBWV9TSVpFKHVjaGdlcl9zdGF0ZSksCi0JCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssIHVzYl9jaGdlcl9zdGF0ZVt1c2JfcGh5LSZndDtjaGdfc3RhdGVdKTsKLQogCXNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSwKIAkJICYjMzQ7VVNCX0NIQVJHRVJfVFlQRT0lcyYjMzQ7LCB1c2JfY2hnZXJfdHlwZVt1c2JfcGh5LSZndDtjaGdfdHlwZV0pOwotCi0JaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgdWNoZ2VyX3N0YXRlKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoYWRkX3VldmVudF92YXIoZW52LCB1Y2hnZXJfdHlwZSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuIDA7CiYjNDM7CWtvYmplY3RfdWV2ZW50X2VudigmYW1wO3VzYl9waHktJmd0O2Rldi0mZ3Q7a29iaiwgS09CSl9DSEFOR0UsIGVudnApOwogfQogCiBzdGF0aWMgdm9pZCBfX3VzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZShzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSkKQEAgLTY3NSwxMSAmIzQzOzYzNyw2IEBAIGludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hZGRfcGh5KTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfcGh5X2Rldl90eXBlID0gewotCS5uYW1lID0gJiMzNDt1c2JfcGh5JiMzNDssCi0JLnVldmVudCA9IHVzYl9waHlfdWV2ZW50LAotfTsKLQogLyoqCiAgKiB1c2JfYWRkX3BoeV9kZXYgLSBkZWNsYXJlIHRoZSBVU0IgUEhZCiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTApAQCAtNzA1LDggJiM0Mzs2NjIsNiBAQCBpbnQgdXNiX2FkZF9waHlfZGV2KHN0cnVjdCB1c2JfcGh5ICp4KQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQl4LSZndDtkZXYtJmd0O3R5cGUgPSAmYW1wO3VzYl9waHlfZGV2X3R5cGU7Ci0KIAlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZhbXA7eC0mZ3Q7bm90aWZpZXIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaHlfbG9jaywgZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gLSBVU0IgUEhZIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMga2VybmVsIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY2hhbmdlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gY291bGQgZXhwb3NlLgoKRmlyc3QsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVtb3Zpbmcgc29tZSBvbGQgdWV2ZW50LXJlbGF0ZWQgY29kZSwgc3BlY2lmaWNhbGx5IGB1c2JfcGh5X3VldmVudGAgYW5kIGB1c2JfcGh5X2Rldl90eXBlYCwgd2hpY2ggd2FzIHNldHRpbmcgdGhlIGBkZXYtJmd0O3R5cGVgLiBUaGF0JiMzOTtzIG5vdCBpbmhlcmVudGx5IHdvcnJpc29tZSwgYnV0IHRoZSByZXBsYWNlbWVudCBpcyB3aGVyZSBteSBhdHRlbnRpb24gbmVlZHMgdG8gZ28uCgpOb3csIGluc3RlYWQgb2YgdGhlIG9sZCBtZXRob2QsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGNhbGxlZCBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYC4gSW5zaWRlIHRoaXMgZnVuY3Rpb24sIGl0IGFsbG9jYXRlcyBzb21lIHN0YWNrIGFycmF5czogYHVjaGdlcl9zdGF0ZWAgYW5kIGB1Y2hnZXJfdHlwZWAsIGJvdGggNTAgYnl0ZXMuIFRoZW4sIGl0IGNyZWF0ZXMgYW4gYGVudnBgIGFycmF5IHBvaW50aW5nIHRvIHRoZXNlIGNoYXJhY3RlciBhcnJheXMsIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIGBrb2JqZWN0X3VldmVudF9lbnZgLiBUaGUgY29yZSBsb2dpYyBpbnZvbHZlcyBhIHN3aXRjaCBzdGF0ZW1lbnQgYmFzZWQgb24gYHVzYl9waHktJmd0O2NoZ19zdGF0ZWAuIEJhc2VkIG9uIHRoZSBzdGF0ZSwgaXQgcG9wdWxhdGVzIGB1Y2hnZXJfc3RhdGVgIHdpdGggc3RyaW5ncyBpbmRpY2F0aW5nIGNoYXJnZXIgcHJlc2VuY2Ugb3IgYWJzZW5jZSB1c2luZyBgc25wcmludGZgLiBBZnRlciB0aGUgc3dpdGNoLCBpdCBwb3B1bGF0ZXMgYHVjaGdlcl90eXBlYCBzaW1pbGFybHksIGJhc2VkIG9uIGB1c2JfY2hnZXJfdHlwZWAgYW5kIGB1c2JfcGh5LSZndDtjaGdfdHlwZWAuIEZpbmFsbHksIGl0IGNhbGxzIGBrb2JqZWN0X3VldmVudF9lbnZgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYXJvdW5kIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIG90aGVyIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHRoYXQgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgZGF0YS4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGBzbnByaW50ZmAgY2FsbHMgYXJlIHNhZmUuCgpTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgdXNiX2NoZ2VyX3R5cGVgIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB1c2JfcGh5LSZndDtjaGdfdHlwZWAsIHRvIG1ha2Ugc3VyZSB0aGVzZSB2YWx1ZXMgYXJlIGJvdW5kZWQgYW5kIHdlbGwgY29udHJvbGxlZC4gSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDMwLTE1MCBpbiBgZHJpdmVycy91c2IvcGh5L3BoeS5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSBzZXQgYW5kIHVzZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGFycmF5IGluZGV4aW5nLiBCYXNlZCBvbiB0aGlzIGRlZXBlciBkaXZlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyB3YXJyYW50cyBLTVNBTiBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3BoeS9waHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHQjZGVmaW5lIERFRkFVTFRfQ0RQX0NVUl9NQVhcdDUwMDBcbiAgMjY6XHQjZGVmaW5lIERFRkFVTFRfQUNBX0NVUl9NSU5cdDE1MDBcbiAgMjc6XHQjZGVmaW5lIERFRkFVTFRfQUNBX0NVUl9NQVhcdDUwMDBcbiAgMjg6XHRcbiAgMjk6XHRzdGF0aWMgTElTVF9IRUFEKHBoeV9saXN0KTtcbiAgMzA6XHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBoeV9sb2NrKTtcbiAgMzE6XHRcbiAgMzI6XHRzdHJ1Y3QgcGh5X2Rldm0ge1xuICAzMzpcdFx0c3RydWN0IHVzYl9waHkgKnBoeTtcbiAgMzQ6XHRcdHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmI7XG4gIDM1Olx0fTtcbiAgMzY6XHRcbiAgMzc6XHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3R5cGVbXSA9IHtcbiAgMzg6XHRcdFtVTktOT1dOX1RZUEVdXHRcdFx0PSBcJiMzNDtVU0JfQ0hBUkdFUl9VTktOT1dOX1RZUEVcJiMzNDssXG4gIDM5Olx0XHRbU0RQX1RZUEVdXHRcdFx0PSBcJiMzNDtVU0JfQ0hBUkdFUl9TRFBfVFlQRVwmIzM0OyxcbiAgNDA6XHRcdFtDRFBfVFlQRV1cdFx0XHQ9IFwmIzM0O1VTQl9DSEFSR0VSX0NEUF9UWVBFXCYjMzQ7LFxuICA0MTpcdFx0W0RDUF9UWVBFXVx0XHRcdD0gXCYjMzQ7VVNCX0NIQVJHRVJfRENQX1RZUEVcJiMzNDssXG4gIDQyOlx0XHRbQUNBX1RZUEVdXHRcdFx0PSBcJiMzNDtVU0JfQ0hBUkdFUl9BQ0FfVFlQRVwmIzM0OyxcbiAgNDM6XHR9O1xuICA0NDpcdFxuICA0NTpcdHN0YXRpYyBzdHJ1Y3QgdXNiX3BoeSAqX191c2JfZmluZF9waHkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiAgNDY6XHRcdGVudW0gdXNiX3BoeV90eXBlIHR5cGUpXG4gIDQ3Olx0e1xuICA0ODpcdFx0c3RydWN0IHVzYl9waHkgICpwaHkgPSBOVUxMO1xuICA0OTpcdFxuICA1MDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaHksIGxpc3QsIGhlYWQpIHtcbiAgNTE6XHRcdFx0aWYgKHBoeS1cdTAwM2V0eXBlICE9IHR5cGUpXG4gIDUyOlx0XHRcdFx0Y29udGludWU7XG4gIDUzOlx0XG4gIDU0Olx0XHRcdHJldHVybiBwaHk7XG4gIDU1Olx0XHR9XG4gIDU2Olx0XG4gIDU3Olx0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbiAgNTg6XHR9XG4gIDU5Olx0XG4gIDYwOlx0c3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4gIDYxOlx0e1xuICA2MjpcdFx0c3RydWN0IHVzYl9waHkgICpwaHk7XG4gIDYzOlx0XG4gIDY0Olx0XHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpXG4gIDY1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuICA2NjpcdFxuICA2NzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaHksIFx1MDAyNnBoeV9saXN0LCBoZWFkKSB7XG4gIDY4Olx0XHRcdGlmIChub2RlICE9IHBoeS1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSlcbiAgNjk6XHRcdFx0XHRjb250aW51ZTtcbiAgNzA6XHRcbiAgNzE6XHRcdFx0cmV0dXJuIHBoeTtcbiAgNzI6XHRcdH1cbiAgNzM6XHRcbiAgNzQ6XHRcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xuICA3NTpcdH1cbiAgNzY6XHRcbiAgNzc6XHRzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4gIDc4Olx0e1xuICA3OTpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLnNkcF9taW4gPSBERUZBVUxUX1NEUF9DVVJfTUlOO1xuICA4MDpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLnNkcF9tYXggPSBERUZBVUxUX1NEUF9DVVJfTUFYO1xuICA4MTpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmRjcF9taW4gPSBERUZBVUxUX0RDUF9DVVJfTUlOO1xuICA4MjpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmRjcF9tYXggPSBERUZBVUxUX0RDUF9DVVJfTUFYO1xuICA4MzpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmNkcF9taW4gPSBERUZBVUxUX0NEUF9DVVJfTUlOO1xuICA4NDpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmNkcF9tYXggPSBERUZBVUxUX0NEUF9DVVJfTUFYO1xuICA4NTpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmFjYV9taW4gPSBERUZBVUxUX0FDQV9DVVJfTUlOO1xuICA4NjpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmFjYV9tYXggPSBERUZBVUxUX0FDQV9DVVJfTUFYO1xuICA4NzpcdH1cbiAgODg6XHRcbiAgODk6XHQvKipcbiAgOTA6XHQgKiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsgLSBub3RpZnkgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXG4gIDkxOlx0ICogQHdvcms6IHRoZSBjaGFyZ2VyIHdvcmsgdG8gbm90aWZ5IHRoZSBVU0IgY2hhcmdlciBzdGF0ZVxuICA5MjpcdCAqXG4gIDkzOlx0ICogVGhpcyB3b3JrIGNhbiBiZSBpc3N1ZWQgd2hlbiBVU0IgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIG9yXG4gIDk0Olx0ICogVVNCIGNoYXJnZXIgY3VycmVudCBoYXMgYmVlbiBjaGFuZ2VkLCB0aGVuIHdlIGNhbiBub3RpZnkgdGhlIGN1cnJlbnRcbiAgOTU6XHQgKiB3aGF0IGNhbiBiZSBkcmF3biB0byBwb3dlciB1c2VyIGFuZCB0aGUgY2hhcmdlciBzdGF0ZSB0byB1c2Vyc3BhY2UuXG4gIDk2Olx0ICpcbiAgOTc6XHQgKiBJZiB3ZSBnZXQgdGhlIGNoYXJnZXIgdHlwZSBmcm9tIGV4dGNvbiBzdWJzeXN0ZW0sIHdlIGNhbiBub3RpZnkgdGhlXG4gIDk4Olx0ICogY2hhcmdlciBzdGF0ZSB0byBwb3dlciB1c2VyIGF1dG9tYXRpY2FsbHkgYnkgdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKClcbiAgOTk6XHQgKiBpc3N1aW5nIGZyb20gZXh0Y29uIHN1YnN5c3RlbS5cbiAxMDA6XHQgKlxuIDEwMTpcdCAqIElmIHdlIGdldCB0aGUgY2hhcmdlciB0eXBlIGZyb20gLVx1MDAzZWNoYXJnZXJfZGV0ZWN0KCkgaW5zdGVhZCBvZiBleHRjb25cbiAxMDI6XHQgKiBzdWJzeXN0ZW0sIHRoZSB1c2IgcGh5IGRyaXZlciBzaG91bGQgaXNzdWUgdXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSgpXG4gMTAzOlx0ICogdG8gc2V0IGNoYXJnZXIgc3RhdGUgd2hlbiB0aGUgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuIDEwNDpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzA4CgkJCQkJCQlvdXRwdXQ6IDIxNgoJCQkJCQkJdGhvdWdodHM6IDY5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSaXNrIEFzc2Vzc21lbnQgZm9yIFVTQiBDaGFyZ2VyIFVldmVudCBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSB1ZXZlbnQgZ2VuZXJhdGlvbiBmb3IgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vdmluZyBmcm9tIHRoZSBgZGV2aWNlX3R5cGUudWV2ZW50YCBjYWxsYmFjayB0byBkaXJlY3RseSBjYWxsaW5nIGBrb2JqZWN0X3VldmVudF9lbnZgIHdpdGhpbiB0aGUgYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2Agd29ya3F1ZXVlIGZ1bmN0aW9uLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIEtNU0FOIHdvdWxkIGZsYWcuCgpGaXJzdCwgSSBzZWUgdGhlIGNvZGUgZGVmaW5lcyB0d28gY2hhcmFjdGVyIGFycmF5cywgYHVjaGdlcl9zdGF0ZWAgYW5kIGB1Y2hnZXJfdHlwZWAsIGJvdGggc3RhY2stYWxsb2NhdGVkIHdpdGggYSBzaXplIG9mIDUwIGFuZCBpbml0aWFsaXplZCB0byB6ZXJvIChgPSB7IDAgfWApLiBJdCBhbHNvIGluaXRpYWxpemVzIGFuIGVudmlyb25tZW50IHBvaW50ZXIgYXJyYXkgYGVudnBgIGNvbnRhaW5pbmcgcG9pbnRlcnMgdG8gdGhlc2Ugc3RyaW5ncyBhbmQgYSBOVUxMIHRlcm1pbmF0b3IuIFRoZW4sIHRoZSBjb2RlIHBvcHVsYXRlcyBgdWNoZ2VyX3N0YXRlYCBhbmQgYHVjaGdlcl90eXBlYCB1c2luZyBgc25wcmludGZgLiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGBrb2JqZWN0X3VldmVudF9lbnZgIGlzIGNhbGxlZCB3aXRoIHRoZXNlIGZvcm1hdHRlZCBzdHJpbmdzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUmIzM5O3Mgbm8gd2F5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQuIExldCYjMzk7cyBtYWtlIHN1cmUuCgoqICAgYHVjaGdlcl9zdGF0ZWAgYW5kIGB1Y2hnZXJfdHlwZWAgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4KKiAgIGBlbnZwYCBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIE5VTEwtdGVybWluYXRlZCwgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHByZXZlbnQgcmVhZC1vdXRzLgoqICAgSSBjb25zaWRlcmVkIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGB1c2JfcGh5LSZndDtjaGdfdHlwZWAsIGJ1dCB0aGF0JiMzOTtzIGEgc3RhdGljIGNvbnN0IGFycmF5LCBzbyBLQVNBTiB3b3VsZCBjYXRjaCBpdC4KKiAgIFRoaXMgaXMgdGhlIHNhbWUgbWV0aG9kb2xvZ3kgYXMgdGhlIG9sZCB2ZXJzaW9uLCB3aGljaCB1c2VkIGB1Y2hnZXJfc3RhdGVgIGFuZCBgdWNoZ2VyX3R5cGVgIGluaXRpYWxpemVkIHRvIGB7IDAgfWAgdG8gYWRkIHRvIGBlbnZgCgpTbywgaXMgdGhlcmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTGV0IG1lIHJlaXRlcmF0ZSBhbmQgYmUgY3J5c3RhbCBjbGVhci4gSSBzZWUgbm8gaXNzdWVzLgoKMS4gIFRoZXJlJiMzOTtzIG5vIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4KMi4gIFRoZSBidWZmZXJzIGV4cG9zZWQgdG8gdXNlcnNwYWNlICh2aWEgdGhlIHVldmVudCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgYXJyYXlzLCBmaWxsZWQgd2l0aCBgc25wcmludGZgLCBndWFyYW50ZWVpbmcgbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuCjMuICBObyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgbGVha2VkLgo0LiAgTm8gYnJhbmNoaW5nIGRlY2lzaW9ucyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCgpOb3csIGxldCYjMzk7cyBjcm9zcy1yZWZlcmVuY2UgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBndWlkZWxpbmVzLiBXZSBuZWVkIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgYWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLCBhbmQgaWYgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mbyBsZWFrcy4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIHRoaXMgaXMgY2xlYXJseSB0aGUgY2FzZSBoZXJlLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhlIGJ1ZmZlcnMgYmVmb3JlIHdyaXRpbmcgZGF0YSBpbiB0aGVtLgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIHJldmlldywgaXQmIzM5O3MgbXkgZGV0ZXJtaW5hdGlvbiB0aGF0IHRoaXMgcGF0Y2ggaXMgc2FmZSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBVU0IgUEhZIHVldmVudCBub3RpZmljYXRpb24gYnkgc2VuZGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpYCB1c2luZyBga29iamVjdF91ZXZlbnRfZW52KClgIHJhdGhlciB0aGFuIHZpYSBhIGBkZXZpY2VfdHlwZS51ZXZlbnRgIGNhbGxiYWNrLiBcblxuQWxsIHN0YWNrIGJ1ZmZlcnMgaW50cm9kdWNlZCBpbiB0aGlzIHBhdGNoIChgdWNoZ2VyX3N0YXRlYCwgYHVjaGdlcl90eXBlYCwgYW5kIGBlbnZwYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0geyAwIH1gIC8gZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gd2l0aCBOVUxMIHRlcm1pbmF0b3IpIGJlZm9yZSBzdHJpbmcgZm9ybWF0dGluZyB2aWEgYHNucHJpbnRmKClgIGFuZCBiZWluZyBwYXNzZWQgdG8gYGtvYmplY3RfdWV2ZW50X2VudigpYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBhcnJheSBpbmRleGluZyAoZS5nLiBgdXNiX2NoZ2VyX3R5cGVgKSBhcmUgYm91bmRzIGNoZWNrIC8gb3V0LW9mLWJvdW5kcyByZWFkIGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4sIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBVU0IgUEhZIHVldmVudCBub3RpZmljYXRpb24gYnkgc2VuZGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpYCB1c2luZyBga29iamVjdF91ZXZlbnRfZW52KClgIHJhdGhlciB0aGFuIHZpYSBhIGBkZXZpY2VfdHlwZS51ZXZlbnRgIGNhbGxiYWNrLiBcblxuQWxsIHN0YWNrIGJ1ZmZlcnMgaW50cm9kdWNlZCBpbiB0aGlzIHBhdGNoIChgdWNoZ2VyX3N0YXRlYCwgYHVjaGdlcl90eXBlYCwgYW5kIGBlbnZwYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0geyAwIH1gIC8gZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gd2l0aCBOVUxMIHRlcm1pbmF0b3IpIGJlZm9yZSBzdHJpbmcgZm9ybWF0dGluZyB2aWEgYHNucHJpbnRmKClgIGFuZCBiZWluZyBwYXNzZWQgdG8gYGtvYmplY3RfdWV2ZW50X2VudigpYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBhcnJheSBpbmRleGluZyAoZS5nLiBgdXNiX2NoZ2VyX3R5cGVgKSBhcmUgYm91bmRzIGNoZWNrIC8gb3V0LW9mLWJvdW5kcyByZWFkIGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4sIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNDozMC42Nzg0NTgzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODI0NzM1NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9TVVBQT1JUXCIsXG4gICAgXCJVU0JfUEhZXCIsXG4gICAgXCJOT1BfVVNCX1hDRUlWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrXCIsXG4gICAgXCJ1c2JfYWRkX3BoeV9kZXZcIixcbiAgICBcInVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGVcIixcbiAgICBcInVzYl9waHlfc2V0X2NoYXJnZXJfY3VycmVudFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBVU0IgUEhZIHVldmVudCBub3RpZmljYXRpb24gYnkgc2VuZGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpYCB1c2luZyBga29iamVjdF91ZXZlbnRfZW52KClgIHJhdGhlciB0aGFuIHZpYSBhIGBkZXZpY2VfdHlwZS51ZXZlbnRgIGNhbGxiYWNrLiBcXG5cXG5BbGwgc3RhY2sgYnVmZmVycyBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2ggKGB1Y2hnZXJfc3RhdGVgLCBgdWNoZ2VyX3R5cGVgLCBhbmQgYGVudnBgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIChgPSB7IDAgfWAgLyBleHBsaWNpdCBpbml0aWFsaXphdGlvbiB3aXRoIE5VTEwgdGVybWluYXRvcikgYmVmb3JlIHN0cmluZyBmb3JtYXR0aW5nIHZpYSBgc25wcmludGYoKWAgYW5kIGJlaW5nIHBhc3NlZCB0byBga29iamVjdF91ZXZlbnRfZW52KClgLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHJpc2tzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGFycmF5IGluZGV4aW5nIChlLmcuIGB1c2JfY2hnZXJfdHlwZWApIGFyZSBib3VuZHMgY2hlY2sgLyBvdXQtb2YtYm91bmRzIHJlYWQgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTiwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1ZXZlbnQgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3IgVVNCIFBIWSBjaGFyZ2VyIGV2ZW50cyBpbiBkcml2ZXJzL3VzYi9waHkvcGh5LmMuIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHlwZSBhbmQgaW1wbGVtZW50aW5nIGEgY3VzdG9tIHVldmVudCBjYWxsYmFjaywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjaGFyZ2VyIHN0YXRlIGFuZCB0eXBlIGFyZSBub3cgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCBkaXJlY3RseSB2aWEga29iamVjdF91ZXZlbnRfZW52KCkgd2l0aGluIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBQSFkgY29yZSBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6MzAuNjc4NDYyNTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTczMDA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2ZWZkNTcxYzNkMjExN2E4ODZkZDdkMWQ0NDhhNWJjMDZhYWZmMmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMTozNDoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LmMgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmNcXG5pbmRleCA1YTliOTM1M2YzNDNkLi43Yzg1YzdjYTFkMzA5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xcbisrKyBiL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xcbkBAIC00MiwxMiArNDIsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3R5cGVbXSA9IHtcXG4gXFx0W0FDQV9UWVBFXVxcdFxcdFxcdD0gXFxcIlVTQl9DSEFSR0VSX0FDQV9UWVBFXFxcIixcXG4gfTtcXG4gXFxuLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB1c2JfY2hnZXJfc3RhdGVbXSA9IHtcXG4tXFx0W1VTQl9DSEFSR0VSX0RFRkFVTFRdXFx0PSBcXFwiVVNCX0NIQVJHRVJfREVGQVVMVFxcXCIsXFxuLVxcdFtVU0JfQ0hBUkdFUl9QUkVTRU5UXVxcdD0gXFxcIlVTQl9DSEFSR0VSX1BSRVNFTlRcXFwiLFxcbi1cXHRbVVNCX0NIQVJHRVJfQUJTRU5UXVxcdD0gXFxcIlVTQl9DSEFSR0VSX0FCU0VOVFxcXCIsXFxuLX07XFxuLVxcbiBzdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fdXNiX2ZpbmRfcGh5KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuIFxcdGVudW0gdXNiX3BoeV90eXBlIHR5cGUpXFxuIHtcXG5AQCAtODAsMTggKzc0LDYgQEAgc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuIFxcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fZGV2aWNlX3RvX3VzYl9waHkoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KVxcbi17XFxuLVxcdHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5O1xcbi1cXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh1c2JfcGh5LCBcXHUwMDI2cGh5X2xpc3QsIGhlYWQpIHtcXG4tXFx0XFx0aWYgKHVzYl9waHktXFx1MDAzZWRldiA9PSBkZXYpXFxuLVxcdFxcdFxcdHJldHVybiB1c2JfcGh5O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgdXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxcbiB7XFxuIFxcdHVzYl9waHktXFx1MDAzZWNoZ19jdXIuc2RwX21pbiA9IERFRkFVTFRfU0RQX0NVUl9NSU47XFxuQEAgLTEyMyw2ICsxMDUsOSBAQCBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXFxuIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTtcXG4rXFx0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XFxuK1xcdGNoYXIgdWNoZ2VyX3R5cGVbNTBdID0geyAwIH07XFxuK1xcdGNoYXIgKmVudnBbXSA9IHsgdWNoZ2VyX3N0YXRlLCB1Y2hnZXJfdHlwZSwgTlVMTCB9O1xcbiBcXHR1bnNpZ25lZCBpbnQgbWluLCBtYXg7XFxuIFxcbiBcXHRzd2l0Y2ggKHVzYl9waHktXFx1MDAzZWNoZ19zdGF0ZSkge1xcbkBAIC0xMzAsMTEgKzExNSwxNSBAQCBzdGF0aWMgdm9pZCB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHR1c2JfcGh5X2dldF9jaGFyZ2VyX2N1cnJlbnQodXNiX3BoeSwgXFx1MDAyNm1pbiwgXFx1MDAyNm1heCk7XFxuIFxcbiBcXHRcXHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2dXNiX3BoeS1cXHUwMDNlbm90aWZpZXIsIG1heCwgdXNiX3BoeSk7XFxuK1xcdFxcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxcbitcXHRcXHRcXHQgXFxcIlVTQl9DSEFSR0VSX1NUQVRFPSVzXFxcIiwgXFxcIlVTQl9DSEFSR0VSX1BSRVNFTlRcXFwiKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgVVNCX0NIQVJHRVJfQUJTRU5UOlxcbiBcXHRcXHR1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQodXNiX3BoeSk7XFxuIFxcbiBcXHRcXHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2dXNiX3BoeS1cXHUwMDNlbm90aWZpZXIsIDAsIHVzYl9waHkpO1xcbitcXHRcXHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcXG4rXFx0XFx0XFx0IFxcXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1xcXCIsIFxcXCJVU0JfQ0hBUkdFUl9BQlNFTlRcXFwiKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGRldl93YXJuKHVzYl9waHktXFx1MDAzZWRldiwgXFxcIlVua25vd24gVVNCIGNoYXJnZXIgc3RhdGU6ICVkXFxcXG5cXFwiLFxcbkBAIC0xNDIsMzYgKzEzMSw5IEBAIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0a29iamVjdF91ZXZlbnQoXFx1MDAyNnVzYl9waHktXFx1MDAzZWRldi1cXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHVzYl9waHlfdWV2ZW50KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KVxcbi17XFxuLVxcdGNvbnN0IHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5O1xcbi1cXHRjaGFyIHVjaGdlcl9zdGF0ZVs1MF0gPSB7IDAgfTtcXG4tXFx0Y2hhciB1Y2hnZXJfdHlwZVs1MF0gPSB7IDAgfTtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFxuLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xcbi1cXHR1c2JfcGh5ID0gX19kZXZpY2VfdG9fdXNiX3BoeShkZXYpO1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xcbi1cXG4tXFx0aWYgKCF1c2JfcGh5KVxcbi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tXFxuLVxcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxcbi1cXHRcXHQgXFxcIlVTQl9DSEFSR0VSX1NUQVRFPSVzXFxcIiwgdXNiX2NoZ2VyX3N0YXRlW3VzYl9waHktXFx1MDAzZWNoZ19zdGF0ZV0pO1xcbi1cXG4gXFx0c25wcmludGYodWNoZ2VyX3R5cGUsIEFSUkFZX1NJWkUodWNoZ2VyX3R5cGUpLFxcbiBcXHRcXHQgXFxcIlVTQl9DSEFSR0VSX1RZUEU9JXNcXFwiLCB1c2JfY2hnZXJfdHlwZVt1c2JfcGh5LVxcdTAwM2VjaGdfdHlwZV0pO1xcbi1cXG4tXFx0aWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgdWNoZ2VyX3N0YXRlKSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRpZiAoYWRkX3VldmVudF92YXIoZW52LCB1Y2hnZXJfdHlwZSkpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdGtvYmplY3RfdWV2ZW50X2VudihcXHUwMDI2dXNiX3BoeS1cXHUwMDNlZGV2LVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxcbkBAIC02NzUsMTEgKzYzNyw2IEBAIGludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYWRkX3BoeSk7XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHVzYl9waHlfZGV2X3R5cGUgPSB7XFxuLVxcdC5uYW1lID0gXFxcInVzYl9waHlcXFwiLFxcbi1cXHQudWV2ZW50ID0gdXNiX3BoeV91ZXZlbnQsXFxuLX07XFxuLVxcbiAvKipcXG4gICogdXNiX2FkZF9waHlfZGV2IC0gZGVjbGFyZSB0aGUgVVNCIFBIWVxcbiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxcbkBAIC03MDUsOCArNjYyLDYgQEAgaW50IHVzYl9hZGRfcGh5X2RldihzdHJ1Y3QgdXNiX3BoeSAqeClcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHgtXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9IFxcdTAwMjZ1c2JfcGh5X2Rldl90eXBlO1xcbi1cXG4gXFx0QVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRChcXHUwMDI2eC1cXHUwMDNlbm90aWZpZXIpO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBoeV9sb2NrLCBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM0OjMxLjA5NTA1NTg2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzc4NTg4NzUzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1NVUFBPUlRcIixcbiAgICBcIlVTQl9QSFlcIixcbiAgICBcIk5PUF9VU0JfWENFSVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtcIixcbiAgICBcInVzYl9hZGRfcGh5X2RldlwiLFxuICAgIFwidXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZVwiLFxuICAgIFwidXNiX3BoeV9zZXRfY2hhcmdlcl9jdXJyZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1ZXZlbnQgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3IgVVNCIFBIWSBjaGFyZ2VyIGV2ZW50cyBpbiBkcml2ZXJzL3VzYi9waHkvcGh5LmMuIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHlwZSBhbmQgaW1wbGVtZW50aW5nIGEgY3VzdG9tIHVldmVudCBjYWxsYmFjaywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjaGFyZ2VyIHN0YXRlIGFuZCB0eXBlIGFyZSBub3cgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCBkaXJlY3RseSB2aWEga29iamVjdF91ZXZlbnRfZW52KCkgd2l0aGluIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBQSFkgY29yZSBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NmVmZDU3MWMzZDIxMTdhODg2ZGQ3ZDFkNDQ4YTViYzA2YWFmZjJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMTozNDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHkuYyBiL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xuaW5kZXggNWE5YjkzNTNmMzQzZC4uN2M4NWM3Y2ExZDMwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xuKysrIGIvZHJpdmVycy91c2IvcGh5L3BoeS5jXG5AQCAtNDIsMTIgKzQyLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl90eXBlW10gPSB7XG4gXHRbQUNBX1RZUEVdXHRcdFx0PSBcIlVTQl9DSEFSR0VSX0FDQV9UWVBFXCIsXG4gfTtcbiBcbi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3N0YXRlW10gPSB7XG4tXHRbVVNCX0NIQVJHRVJfREVGQVVMVF1cdD0gXCJVU0JfQ0hBUkdFUl9ERUZBVUxUXCIsXG4tXHRbVVNCX0NIQVJHRVJfUFJFU0VOVF1cdD0gXCJVU0JfQ0hBUkdFUl9QUkVTRU5UXCIsXG4tXHRbVVNCX0NIQVJHRVJfQUJTRU5UXVx0PSBcIlVTQl9DSEFSR0VSX0FCU0VOVFwiLFxuLX07XG4tXG4gc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIFx0ZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcbiB7XG5AQCAtODAsMTggKzc0LDYgQEAgc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4gXHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX2RldmljZV90b191c2JfcGh5KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldilcbi17XG4tXHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeTtcbi1cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkodXNiX3BoeSwgXHUwMDI2cGh5X2xpc3QsIGhlYWQpIHtcbi1cdFx0aWYgKHVzYl9waHktXHUwMDNlZGV2ID09IGRldilcbi1cdFx0XHRyZXR1cm4gdXNiX3BoeTtcbi1cdH1cbi1cbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4ge1xuIFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLnNkcF9taW4gPSBERUZBVUxUX1NEUF9DVVJfTUlOO1xuQEAgLTEyMyw2ICsxMDUsOSBAQCBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4gc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX3BoeSwgY2hnX3dvcmspO1xuK1x0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XG4rXHRjaGFyIHVjaGdlcl90eXBlWzUwXSA9IHsgMCB9O1xuK1x0Y2hhciAqZW52cFtdID0geyB1Y2hnZXJfc3RhdGUsIHVjaGdlcl90eXBlLCBOVUxMIH07XG4gXHR1bnNpZ25lZCBpbnQgbWluLCBtYXg7XG4gXG4gXHRzd2l0Y2ggKHVzYl9waHktXHUwMDNlY2hnX3N0YXRlKSB7XG5AQCAtMTMwLDExICsxMTUsMTUgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0dXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KHVzYl9waHksIFx1MDAyNm1pbiwgXHUwMDI2bWF4KTtcbiBcbiBcdFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2dXNiX3BoeS1cdTAwM2Vub3RpZmllciwgbWF4LCB1c2JfcGh5KTtcbitcdFx0c25wcmludGYodWNoZ2VyX3N0YXRlLCBBUlJBWV9TSVpFKHVjaGdlcl9zdGF0ZSksXG4rXHRcdFx0IFwiVVNCX0NIQVJHRVJfU1RBVEU9JXNcIiwgXCJVU0JfQ0hBUkdFUl9QUkVTRU5UXCIpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVVNCX0NIQVJHRVJfQUJTRU5UOlxuIFx0XHR1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQodXNiX3BoeSk7XG4gXG4gXHRcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnVzYl9waHktXHUwMDNlbm90aWZpZXIsIDAsIHVzYl9waHkpO1xuK1x0XHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcbitcdFx0XHQgXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1wiLCBcIlVTQl9DSEFSR0VSX0FCU0VOVFwiKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRkZXZfd2Fybih1c2JfcGh5LVx1MDAzZWRldiwgXCJVbmtub3duIFVTQiBjaGFyZ2VyIHN0YXRlOiAlZFxcblwiLFxuQEAgLTE0MiwzNiArMTMxLDkgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0a29iamVjdF91ZXZlbnQoXHUwMDI2dXNiX3BoeS1cdTAwM2VkZXYtXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHVzYl9waHlfdWV2ZW50KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KVxuLXtcbi1cdGNvbnN0IHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5O1xuLVx0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XG4tXHRjaGFyIHVjaGdlcl90eXBlWzUwXSA9IHsgMCB9O1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoeV9sb2NrLCBmbGFncyk7XG4tXHR1c2JfcGh5ID0gX19kZXZpY2VfdG9fdXNiX3BoeShkZXYpO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xuLVxuLVx0aWYgKCF1c2JfcGh5KVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cbi1cdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxuLVx0XHQgXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1wiLCB1c2JfY2hnZXJfc3RhdGVbdXNiX3BoeS1cdTAwM2VjaGdfc3RhdGVdKTtcbi1cbiBcdHNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSxcbiBcdFx0IFwiVVNCX0NIQVJHRVJfVFlQRT0lc1wiLCB1c2JfY2hnZXJfdHlwZVt1c2JfcGh5LVx1MDAzZWNoZ190eXBlXSk7XG4tXG4tXHRpZiAoYWRkX3VldmVudF92YXIoZW52LCB1Y2hnZXJfc3RhdGUpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGlmIChhZGRfdWV2ZW50X3ZhcihlbnYsIHVjaGdlcl90eXBlKSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHRyZXR1cm4gMDtcbitcdGtvYmplY3RfdWV2ZW50X2VudihcdTAwMjZ1c2JfcGh5LVx1MDAzZWRldi1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxuQEAgLTY3NSwxMSArNjM3LDYgQEAgaW50IHVzYl9hZGRfcGh5KHN0cnVjdCB1c2JfcGh5ICp4LCBlbnVtIHVzYl9waHlfdHlwZSB0eXBlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYWRkX3BoeSk7XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfcGh5X2Rldl90eXBlID0ge1xuLVx0Lm5hbWUgPSBcInVzYl9waHlcIixcbi1cdC51ZXZlbnQgPSB1c2JfcGh5X3VldmVudCxcbi19O1xuLVxuIC8qKlxuICAqIHVzYl9hZGRfcGh5X2RldiAtIGRlY2xhcmUgdGhlIFVTQiBQSFlcbiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxuQEAgLTcwNSw4ICs2NjIsNiBAQCBpbnQgdXNiX2FkZF9waHlfZGV2KHN0cnVjdCB1c2JfcGh5ICp4KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHgtXHUwMDNlZGV2LVx1MDAzZXR5cGUgPSBcdTAwMjZ1c2JfcGh5X2Rldl90eXBlO1xuLVxuIFx0QVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRChcdTAwMjZ4LVx1MDAzZW5vdGlmaWVyKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoeV9sb2NrLCBmbGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNDozMS4wOTUwNTcyMjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NjY0ODc3MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIFBIWSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBtZXRob2RpY2FsbHkgYnJlYWsgZG93biB0aGUgcGF0Y2ggYW5kIGl0cyBpbnN0cnVjdGlvbnMuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGludGVncmF0aW9uLiBUaGUgZm9jdXMgaXMgY2xlYXJseSBvbiB0aGUgVVNCIFBIWSwgc28gSSBuZWVkIHRvIGVzdGFibGlzaCBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy5cblxuTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIG1hZGUgdG8gYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIEkgbmVlZCB0byB0aG9yb3VnaGx5IGRpc3NlY3QgdGhlIGNvZGUgZGlmZiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZnVuY3Rpb25zIGFsdGVyZWQsIGFkZGl0aW9ucywgb3IgcmVtb3ZhbHMuIEkgYWxzbyB3YW50IHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIGBkcml2ZXJzL3VzYi9waHkvYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgY2hhbmdlcyBpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgdGhpcyBwYXRjaCBtaWdodCBpbnRyb2R1Y2UsIGFzIHRoZXNlIGFsd2F5cyByZXF1aXJlIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBkdXJpbmcgaW50ZWdyYXRpb24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHByb2plY3QncyBjdXJyZW50IFVTQiBQSFkgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBwYXRjaCBhZGRzIG5ldyBmZWF0dXJlcywgZml4ZXMgYnVncywgb3Igc2ltcGx5IHJlZmFjdG9ycyBleGlzdGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNDozOS43NTk5MzcxODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzMDYyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTk9QX1VTQl9YQ0VJVnxVU0JfUEhZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9waHkvS2NvbmZpZz01PW1lbnUgXFxcIlVTQiBQaHlzaWNhbCBMYXllciBkcml2ZXJzXFxcIlxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTYtXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6Nzpjb25maWcgVVNCX1BIWVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTgtXFx0c2VsZWN0IEVYVENPTlxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9MTQ9Y29uZmlnIEFCODUwMF9VU0JcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTE2LVxcdGRlcGVuZHMgb24gQUI4NTAwX0NPUkVcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzoxNzpcXHRzZWxlY3QgVVNCX1BIWVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTE4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTIzPWNvbmZpZyBGU0xfVVNCMl9PVEdcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTI2LVxcdGRlcGVuZHMgb24gVVNCX0dBREdFVCB8fCAhVVNCX0dBREdFVCAjIGlmIFVTQl9HQURHRVQ9bSwgdGhpcyBjYW4ndCBiZSAneSdcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzoyNzpcXHRzZWxlY3QgVVNCX1BIWVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTI4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnOjMxOmNvbmZpZyBLRVlTVE9ORV9VU0JfUEhZXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIktleXN0b25lIFVTQiBQSFkgRHJpdmVyXFxcIlxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTMzLVxcdGRlcGVuZHMgb24gQVJDSF9LRVlTVE9ORSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIE5PUF9VU0JfWENFSVZcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0zNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo0MDpjb25maWcgTk9QX1VTQl9YQ0VJVlxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTQxLVxcdHRyaXN0YXRlIFxcXCJOT1AgVVNCIFRyYW5zY2VpdmVyIERyaXZlclxcXCJcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy00Mi1cXHRkZXBlbmRzIG9uIFVTQl9HQURHRVQgfHwgIVVTQl9HQURHRVQgIyBpZiBVU0JfR0FER0VUPW0sIE5PUCBjYW4ndCBiZSBidWlsdC1pblxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnOjQzOlxcdHNlbGVjdCBVU0JfUEhZXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctNDQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9NTI9Y29uZmlnIEFNMzM1WF9QSFlfVVNCXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy01NC1cXHRkZXBlbmRzIG9uIEFSTSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo1NTpcXHRkZXBlbmRzIG9uIE5PUF9VU0JfWENFSVZcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo1NjpcXHRzZWxlY3QgVVNCX1BIWVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTU3LVxcdHNlbGVjdCBBTTMzNVhfQ09OVFJPTF9VU0JcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTc1PWNvbmZpZyBVU0JfR1BJT19WQlVTXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy03OS1cXHRkZXBlbmRzIG9uICFVU0JfQ09OTl9HUElPXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6ODA6XFx0c2VsZWN0IFVTQl9QSFlcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy04MS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz0xMDA9Y29uZmlnIFRBSFZPX1VTQlxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTAzLVxcdGRlcGVuZHMgb24gVVNCX0dBREdFVCB8fCAhVVNCX0dBREdFVCAjIGlmIFVTQl9HQURHRVQ9bSwgdGhpcyBjYW4ndCBiZSAneSdcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzoxMDQ6XFx0c2VsZWN0IFVTQl9QSFlcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xMDUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9MTE2PWNvbmZpZyBVU0JfSVNQMTMwMVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTE5LVxcdGRlcGVuZHMgb24gSTJDXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6MTIwOlxcdHNlbGVjdCBVU0JfUEhZXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTIxLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTEyOT1jb25maWcgVVNCX01YU19QSFlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTEzMi1cXHRzZWxlY3QgU1RNUF9ERVZJQ0VcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzoxMzM6XFx0c2VsZWN0IFVTQl9QSFlcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xMzQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9MTM5PWNvbmZpZyBVU0JfVEVHUkFfUEhZXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xNDItXFx0c2VsZWN0IFVTQl9DT01NT05cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzoxNDM6XFx0c2VsZWN0IFVTQl9QSFlcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xNDQtXFx0c2VsZWN0IFVTQl9VTFBJXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGUtNC0jXFxuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1VTQl9QSFkpXFx0XFx0XFx0Kz0gcGh5Lm9cXG5kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGUtNi1vYmotJChDT05GSUdfT0YpXFx0XFx0XFx0Kz0gb2Yub1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlPTExPW9iai0kKENPTkZJR19GU0xfVVNCMl9PVEcpXFx0XFx0Kz0gcGh5LWZzbC11c2Iub1xcbmRyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTk9QX1VTQl9YQ0VJVilcXHRcXHQrPSBwaHktZ2VuZXJpYy5vXFxuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19UQUhWT19VU0IpXFx0XFx0XFx0Kz0gcGh5LXRhaHZvLm9cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfVVNCX1VMUElfVklFV1BPUlQpXFx0XFx0Kz0gcGh5LXVscGktdmlld3BvcnQub1xcbmRyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfS0VZU1RPTkVfVVNCX1BIWSlcXHRcXHQrPSBwaHkta2V5c3RvbmUub1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMzEtI2RlZmluZSBBQjg1MDVfVVNCX0xJTkVfU1RBVF9SRUcgMHg5NFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjMyOiNkZWZpbmUgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcgMHg4QVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTMzLVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMzctLyogQmFuayBBQjg1MDBfREVCVUcgKi9cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzozODojZGVmaW5lIEFCODUwMF9VU0JfUEhZX1RVTkUxIDB4MDVcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzozOTojZGVmaW5lIEFCODUwMF9VU0JfUEhZX1RVTkUyIDB4MDZcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo0MDojZGVmaW5lIEFCODUwMF9VU0JfUEhZX1RVTkUzIDB4MDdcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy00MS1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTI0MD1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3dkX2xpbmtzdGF0dXMoc3RydWN0IGFiODUwMF91c2IgKmFiLCB1OCBiaXQpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy0yNDQtXFx0XFx0YWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVxcdTAwM2VkZXYsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6MjQ1OlxcdFxcdFxcdFxcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTI0Ni1cXHRcXHRcXHRcXHRiaXQsIGJpdCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYz0yNTE9c3RhdGljIHZvaWQgYWI4NTAwX3VzYl9waHlfZW5hYmxlKHN0cnVjdCBhYjg1MDBfdXNiICphYiwgYm9vbCBzZWxfaG9zdClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTI2Ny1cXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzoyNjg6XFx0XFx0XFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMjY5LVxcdFxcdFxcdGJpdCwgYml0KTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTI3Mj1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3BoeV9kaXNhYmxlKHN0cnVjdCBhYjg1MDBfdXNiICphYiwgYm9vbCBzZWxfaG9zdClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTI4MC1cXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzoyODE6XFx0XFx0XFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMjgyLVxcdFxcdFxcdGJpdCwgMCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYz01NjI9c3RhdGljIGlycXJldHVybl90IGFiODUwMF91c2JfZGlzY29ubmVjdF9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTU5Ny1cXHRcXHRcXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo1OTg6XFx0XFx0XFx0XFx0XFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNTk5LVxcdFxcdFxcdFxcdFxcdEFCODUwMF9CSVRfUEhZX0NUUkxfREVWSUNFX0VOLCAwKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTY4Mj1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3Jlc3RhcnRfcGh5KHN0cnVjdCBhYjg1MDBfdXNiICphYilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTY4NC1cXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo2ODU6XFx0XFx0XFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNjg2LVxcdFxcdFxcdEFCODUwMF9CSVRfUEhZX0NUUkxfREVWSUNFX0VOLFxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNjkxLVxcdGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjY5MjpcXHRcXHRcXHRBQjg1MDBfVVNCLCBBQjg1MDBfVVNCX1BIWV9DVFJMX1JFRyxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy02OTMtXFx0XFx0XFx0QUI4NTAwX0JJVF9QSFlfQ1RSTF9ERVZJQ0VfRU4sXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy02OTYtXFx0YWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVxcdTAwM2VkZXYsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6Njk3OlxcdFxcdFxcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTY5OC1cXHRcXHRcXHRBQjg1MDBfQklUX1BIWV9DVFJMX0hPU1RfRU4sXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy03MDMtXFx0YWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVxcdTAwM2VkZXYsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6NzA0OlxcdFxcdFxcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTcwNS1cXHRcXHRcXHRBQjg1MDBfQklUX1BIWV9DVFJMX0hPU1RfRU4sXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYz03ODg9c3RhdGljIHZvaWQgYWI4NTAwX3VzYl9zZXRfYWI4NTAwX3R1bmluZ192YWx1ZXMoc3RydWN0IGFiODUwMF91c2IgKmFiKVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNzk5LVxcdGVyciA9IGFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjgwMDpcXHRcXHRcXHRBQjg1MDBfREVCVUcsIEFCODUwMF9VU0JfUEhZX1RVTkUxLCAweEM4KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MDEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MDUtXFx0ZXJyID0gYWJ4NTAwX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVxcdTAwM2VkZXYsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6ODA2OlxcdFxcdFxcdEFCODUwMF9ERUJVRywgQUI4NTAwX1VTQl9QSFlfVFVORTIsIDB4MDApO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTgwNy1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTgxMS1cXHRlcnIgPSBhYng1MDBfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4MTI6XFx0XFx0XFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMywgMHg3OCk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtODEzLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM9ODI1PXN0YXRpYyB2b2lkIGFiODUwMF91c2Jfc2V0X2FiODUwNV90dW5pbmdfdmFsdWVzKHN0cnVjdCBhYjg1MDBfdXNiICphYilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTgzNy1cXHRlcnIgPSBhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4Mzg6XFx0XFx0XFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMSxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MzktXFx0XFx0XFx0MHhDOCwgMHhDOCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04NDQtXFx0ZXJyID0gYWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVxcdTAwM2VkZXYsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6ODQ1OlxcdFxcdFxcdEFCODUwMF9ERUJVRywgQUI4NTAwX1VTQl9QSFlfVFVORTIsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtODQ2LVxcdFxcdFxcdDB4NjAsIDB4NjApO1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtODUxLVxcdGVyciA9IGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjg1MjpcXHRcXHRcXHRBQjg1MDBfREVCVUcsIEFCODUwMF9VU0JfUEhZX1RVTkUzLFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTg1My1cXHRcXHRcXHQweEZDLCAweDgwKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTg2OD1zdGF0aWMgaW50IGFiODUwMF91c2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTkzOC1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo5Mzk6XFx0ZXJyID0gdXNiX2FkZF9waHkoXFx1MDAyNmFiLVxcdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy05NDAtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM9NzczPXN0YXRpYyBpbnQgZnNsX290Z19jb25mKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWZzbC11c2IuYy04MTctXFx0LyogU3RvcmUgdGhlIG90ZyB0cmFuc2NlaXZlciAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jOjgxODpcXHRzdGF0dXMgPSB1c2JfYWRkX3BoeShcXHUwMDI2ZnNsX290Z190Yy1cXHUwMDNlcGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmMtODE5LVxcdGlmIChzdGF0dXMpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jPTgzMz1zdGF0aWMgaW50IHVzYl9vdGdfc3RhcnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jLTgzNS1cXHRzdHJ1Y3QgZnNsX290ZyAqcF9vdGc7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM6ODM2OlxcdHN0cnVjdCB1c2JfcGh5ICpvdGdfdHJhbnMgPSB1c2JfZ2V0X3BoeShVU0JfUEhZX1RZUEVfVVNCMik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmMtODM3LVxcdHN0cnVjdCBvdGdfZnNtICpmc207XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0xOTY9aW50IHVzYl9waHlfZ2VuX2NyZWF0ZV9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3ApXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMTk3LXtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoxOTg6XFx0ZW51bSB1c2JfcGh5X3R5cGUgdHlwZSA9IFVTQl9QSFlfVFlQRV9VU0IyO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE5OS1cXHRpbnQgZXJyID0gMDtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jPTIzMT1zdGF0aWMgaW50IGdwaW9fdmJ1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1ncGlvLXZidXMtdXNiLmMtMzE1LVxcdC8qIG9ubHkgYWN0aXZlIHdoZW4gYSBnYWRnZXQgaXMgcmVnaXN0ZXJlZCAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jOjMxNjpcXHRlcnIgPSB1c2JfYWRkX3BoeShcXHUwMDI2Z3Bpb192YnVzLVxcdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdwaW8tdmJ1cy11c2IuYy0zMTctXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1pc3AxMzAxLmM9OTU9c3RhdGljIGludCBpc3AxMzAxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYy0xMTEtXFx0cGh5LVxcdTAwM2VzZXRfdmJ1cyA9IGlzcDEzMDFfcGh5X3NldF92YnVzO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jOjExMjpcXHRwaHktXFx1MDAzZXR5cGUgPSBVU0JfUEhZX1RZUEVfVVNCMjtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYy0xMTMtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtMTgtLyogVVNCIFBIWSBjb250cm9sIHJlZ2lzdGVyIG9mZnNldHMgKi9cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MTk6I2RlZmluZSBVU0JfUEhZX0NUTF9VVE1JXFx0XFx0MHgwMDAwXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jOjIwOiNkZWZpbmUgVVNCX1BIWV9DVExfUElQRVxcdFxcdDB4MDAwNFxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzoyMTojZGVmaW5lIFVTQl9QSFlfQ1RMX1BBUkFNXzFcXHRcXHQweDAwMDhcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MjI6I2RlZmluZSBVU0JfUEhZX0NUTF9QQVJBTV8yXFx0XFx0MHgwMDBjXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jOjIzOiNkZWZpbmUgVVNCX1BIWV9DVExfQ0xPQ0tcXHRcXHQweDAwMTBcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MjQ6I2RlZmluZSBVU0JfUEhZX0NUTF9QTExcXHRcXHRcXHQweDAwMTRcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtMjUtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM9NDQ9c3RhdGljIGludCBrZXlzdG9uZV91c2JwaHlfaW5pdChzdHJ1Y3QgdXNiX3BoeSAqcGh5KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTQ4LVxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzo0OTpcXHR2YWwgID0ga2V5c3RvbmVfdXNicGh5X3JlYWRsKGtfcGh5LVxcdTAwM2VwaHlfY3RybCwgVVNCX1BIWV9DVExfQ0xPQ0spO1xcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzo1MDpcXHRrZXlzdG9uZV91c2JwaHlfd3JpdGVsKGtfcGh5LVxcdTAwM2VwaHlfY3RybCwgVVNCX1BIWV9DVExfQ0xPQ0ssXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTUxLVxcdFxcdFxcdFxcdHZhbCB8IFBIWV9SRUZfU1NQX0VOKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYz01NT1zdGF0aWMgdm9pZCBrZXlzdG9uZV91c2JwaHlfc2h1dGRvd24oc3RydWN0IHVzYl9waHkgKnBoeSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy01OS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6NjA6XFx0dmFsICA9IGtleXN0b25lX3VzYnBoeV9yZWFkbChrX3BoeS1cXHUwMDNlcGh5X2N0cmwsIFVTQl9QSFlfQ1RMX0NMT0NLKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6NjE6XFx0a2V5c3RvbmVfdXNicGh5X3dyaXRlbChrX3BoeS1cXHUwMDNlcGh5X2N0cmwsIFVTQl9QSFlfQ1RMX0NMT0NLLFxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy02Mi1cXHRcXHRcXHRcXHR2YWwgXFx1MDAyNiB+UEhZX1JFRl9TU1BfRU4pO1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmMtMTI2LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jOjEyNzojZGVmaW5lIFVTQl9QSFlfVkxMU19XQUtFVVBfRU5cXHRcXHRcXHRCSVQoMClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy0xMjgtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYz03NTg9c3RhdGljIGludCBteHNfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy04NDUtXFx0bXhzX3BoeS1cXHUwMDNlcGh5Lm5vdGlmeV9kaXNjb25uZWN0XFx0PSBteHNfcGh5X29uX2Rpc2Nvbm5lY3Q7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmM6ODQ2OlxcdG14c19waHktXFx1MDAzZXBoeS50eXBlXFx0XFx0PSBVU0JfUEhZX1RZUEVfVVNCMjtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy04NDctXFx0bXhzX3BoeS1cXHUwMDNlcGh5LnNldF93YWtldXBcXHRcXHQ9IG14c19waHlfc2V0X3dha2V1cDtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jPTg3OT1zdGF0aWMgdm9pZCBteHNfcGh5X3dha2V1cF9lbmFibGUoc3RydWN0IG14c19waHkgKm14c19waHksIGJvb2wgb24pXFxuZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmMtODgwLXtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYzo4ODE6XFx0dTMyIG1hc2sgPSBVU0JfUEhZX1ZMTFNfV0FLRVVQX0VOO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg4Mi1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGFodm8uYz0zMTk9c3RhdGljIGludCB0YWh2b191c2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGFodm8uYy0zODMtXFxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jOjM4NDpcXHRyZXQgPSB1c2JfYWRkX3BoeShcXHUwMDI2dHUtXFx1MDAzZXBoeSwgVVNCX1BIWV9UWVBFX1VTQjIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGFodm8uYy0zODUtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjAtI2RlZmluZSAgIFVTQl9TVVNQX0NMUlxcdFxcdFxcdFxcdEJJVCg1KVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NjE6I2RlZmluZSAgIFVTQl9QSFlfQ0xLX1ZBTElEXFx0XFx0XFx0QklUKDcpXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy02Mi0jZGVmaW5lICAgVVRNSVBfUkVTRVRcXHRcXHRcXHRcXHRCSVQoMTEpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTY5LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NzA6I2RlZmluZSBVU0JfUEhZX1ZCVVNfU0VOU09SU1xcdFxcdFxcdDB4NDA0XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03MS0jZGVmaW5lICAgQl9TRVNTX1ZMRF9XQUtFVVBfRU5cXHRcXHRcXHRCSVQoMTQpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc0LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NzU6I2RlZmluZSBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEXFx0XFx0XFx0MHg0MDhcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc2LSNkZWZpbmUgICBJRF9JTlRfRU5cXHRcXHRcXHRcXHRCSVQoMClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9NDg0PXN0YXRpYyB2b2lkIHV0bWlfcGh5X2Nsa19kaXNhYmxlKHN0cnVjdCB0ZWdyYV91c2JfcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTQ5My1cXHQgKi9cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjQ5NDpcXHRpZiAodXRtaV93YWl0X3JlZ2lzdGVyKGJhc2UgKyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCwgMCkgPT0gMClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTQ5NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTUxMC1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjUxMTpcXHRpZiAodXRtaV93YWl0X3JlZ2lzdGVyKGJhc2UgKyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCwgMCkpXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy01MTItXFx0XFx0ZGV2X2VycihwaHktXFx1MDAzZXVfcGh5LmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9NTE2PXN0YXRpYyB2b2lkIHV0bWlfcGh5X2Nsa19lbmFibGUoc3RydWN0IHRlZ3JhX3VzYl9waHkgKnBoeSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNTI1LVxcdCAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NTI2OlxcdGlmICh1dG1pX3dhaXRfcmVnaXN0ZXIoYmFzZSArIFVTQl9TVVNQX0NUUkwsIFVTQl9QSFlfQ0xLX1ZBTElELFxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NTI3OlxcdFxcdFxcdCAgICAgICBVU0JfUEhZX0NMS19WQUxJRCkgPT0gMClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTUyOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTU0My1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjU0NDpcXHRpZiAodXRtaV93YWl0X3JlZ2lzdGVyKGJhc2UgKyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjU0NTpcXHRcXHRcXHQgICAgICAgVVNCX1BIWV9DTEtfVkFMSUQpKVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNTQ2LVxcdFxcdGRldl9lcnIocGh5LVxcdTAwM2V1X3BoeS5kZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jPTU1MD1zdGF0aWMgaW50IHV0bWlfcGh5X3Bvd2VyX29uKHN0cnVjdCB0ZWdyYV91c2JfcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYxNS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjYxNjpcXHRcXHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYxNy1cXHRcXHR2YWwgXFx1MDAyNj0gflZCVVNfV0FLRVVQX1dBS0VVUF9FTjtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYxOC1cXHRcXHR2YWwgXFx1MDAyNj0gfihJRF9DSEdfREVUIHwgVkJVU19XQUtFVVBfQ0hHX0RFVCk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo2MTk6XFx0XFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy02MjAtXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo2MjE6XFx0XFx0dmFsID0gcmVhZGxfcmVsYXhlZChiYXNlICsgVVNCX1BIWV9WQlVTX1NFTlNPUlMpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjIyLVxcdFxcdHZhbCBcXHUwMDI2PSB+KEFfVkJVU19WTERfV0FLRVVQX0VOIHwgQV9TRVNTX1ZMRF9XQUtFVVBfRU4pO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjIzLVxcdFxcdHZhbCBcXHUwMDI2PSB+KEJfU0VTU19WTERfV0FLRVVQX0VOKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjYyNDpcXHRcXHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgKyBVU0JfUEhZX1ZCVVNfU0VOU09SUyk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy02MjUtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jPTcxNj1zdGF0aWMgaW50IHV0bWlfcGh5X3Bvd2VyX29mZihzdHJ1Y3QgdGVncmFfdXNiX3BoeSAqcGh5KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03MjUtXFx0aWYgKHBoeS1cXHUwMDNld2FrZXVwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgcGh5LVxcdTAwM2Vtb2RlICE9IFVTQl9EUl9NT0RFX0hPU1QpXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3MjY6XFx0XFx0cmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQoYmFzZSArIFVTQl9QSFlfVkJVU19XQUtFVVBfSUQsXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03MjctXFx0XFx0XFx0XFx0XFx0ICAgdmFsLCAhKHZhbCBcXHUwMDI2IFZCVVNfV0FLRVVQX1NUUyksXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc2Ni1cXHRcXHRpZiAocGh5LVxcdTAwM2Vtb2RlICE9IFVTQl9EUl9NT0RFX0hPU1QpIHtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjc2NzpcXHRcXHRcXHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc2OC1cXHRcXHRcXHR2YWwgfD0gVkJVU19XQUtFVVBfV0FLRVVQX0VOO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzY5LVxcdFxcdFxcdHZhbCBcXHUwMDI2PSB+KElEX0NIR19ERVQgfCBWQlVTX1dBS0VVUF9DSEdfREVUKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjc3MDpcXHRcXHRcXHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc3MS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjc3MjpcXHRcXHRcXHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBVU0JfUEhZX1ZCVVNfU0VOU09SUyk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03NzMtXFx0XFx0XFx0dmFsIHw9IEFfVkJVU19WTERfV0FLRVVQX0VOO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6Nzc0OlxcdFxcdFxcdHdyaXRlbF9yZWxheGVkKHZhbCwgYmFzZSArIFVTQl9QSFlfVkJVU19TRU5TT1JTKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc3NS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jPTg4OT1zdGF0aWMgaW50IHVoc2ljX3BoeV9wb3dlcl9vbihzdHJ1Y3QgdGVncmFfdXNiX3BoeSAqcGh5KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy05NzctXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo5Nzg6XFx0ZXJyID0gdXRtaV93YWl0X3JlZ2lzdGVyKGJhc2UgKyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjk3OTpcXHRcXHRcXHRcXHQgVVNCX1BIWV9DTEtfVkFMSUQpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtOTgwLVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz0xMDk5PXN0YXRpYyBpcnFyZXR1cm5fdCB0ZWdyYV91c2JfcGh5X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xMTA5LVxcdCAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTExMDpcXHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjExMTE6XFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xMTEyLVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz0xMTE2PXN0YXRpYyBpbnQgdGVncmFfdXNiX3BoeV9zZXRfd2FrZXVwKHN0cnVjdCB1c2JfcGh5ICp1X3BoeSwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExMjYtXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzoxMTI3OlxcdFxcdHZhbCA9IHJlYWRsX3JlbGF4ZWQoYmFzZSArIFVTQl9QSFlfVkJVU19XQUtFVVBfSUQpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtMTEyOC1cXHRcXHR2YWwgXFx1MDAyNj0gfihJRF9JTlRfRU4gfCBWQlVTX1dBS0VVUF9JTlRfRU4pO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTEyOTpcXHRcXHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExMzAtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExNDgtXFx0XFx0XFx0ICovXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzoxMTQ5OlxcdFxcdFxcdHZhbCA9IHJlYWRsX3JlbGF4ZWQoYmFzZSArIFVTQl9QSFlfVkJVU19XQUtFVVBfSUQpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtMTE1MC1cXHRcXHRcXHR2YWwgfD0gSURfSU5UX0VOIHwgVkJVU19XQUtFVVBfSU5UX0VOO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTE1MTpcXHRcXHRcXHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExNTItXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9NjAwPWludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MDUtXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjYwNjpcXHRpZiAoeC1cXHUwMDNldHlwZSAhPSBVU0JfUEhZX1RZUEVfVU5ERUZJTkVEKSB7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTYwNy1cXHRcXHRkZXZfZXJyKHgtXFx1MDAzZWRldiwgXFxcIm5vdCBhY2NlcHRpbmcgaW5pdGlhbGl6ZWQgUEhZICVzXFxcXG5cXFwiLCB4LVxcdTAwM2VsYWJlbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM0OjM5LjgxODI0ODY3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDY3MTE5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBVU0IgUEhZIENoYXJnZXIgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFVTQiBQSFkgY2hhcmdlcnMgYXJlIGltcGxlbWVudGVkLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBkZWZpbml0ZWx5IGBkcml2ZXJzL3VzYi9waHkvcGh5LmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgcmVjZW50IG1vZGlmaWNhdGlvbnMuIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYCBhbmQgYHVzYl9hZGRfcGh5X2RldmAsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBjaGFyZ2VyIGZ1bmN0aW9uYWxpdHkgcHJvYmFibHkgcmVzaWRlcy4gSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvb3JkaW5hdGVkIOKAkyB3aGF0IHRyaWdnZXJzIHRoZW0sIHdoYXQgZGF0YSB0aGV5IGV4Y2hhbmdlLCBhbmQgd2hhdCByZXNvdXJjZXMgdGhleSBtYW5hZ2UuIFVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcnBsYXkgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGNyaXRpY2FsIGluc2lnaHRzIGludG8gdGhlIGRlc2lnbi4gVGhlbiBJJ2xsIGJlIGFibGUgdG8gdGVsbCB3aGF0J3MgY29ycmVjdCwgYW5kIG1heWJlIHNlZSBzb21lIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhleSd2ZSBzdHJ1Y3R1cmVkIHRoZSBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTEyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6NDEuOTY0OTYyODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvcGh5L3BoeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIHBoeS5jIC0tIFVTQiBwaHkgaGFuZGxpbmdcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBUZXhhcyBJbnN0cnVtZW50c1xcbiAgIDY6XFx0ICovXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvcGh5LmhcXHUwMDNlXFxuICAxNjpcXHRcXG4gIDE3OlxcdC8qIERlZmF1bHQgY3VycmVudCByYW5nZSBieSBjaGFyZ2VyIHR5cGUuICovXFxuICAxODpcXHQjZGVmaW5lIERFRkFVTFRfU0RQX0NVUl9NSU5cXHQyXFxuICAxOTpcXHQjZGVmaW5lIERFRkFVTFRfU0RQX0NVUl9NQVhcXHQ1MDBcXG4gIDIwOlxcdCNkZWZpbmUgREVGQVVMVF9TRFBfQ1VSX01JTl9TU1xcdDE1MFxcbiAgMjE6XFx0I2RlZmluZSBERUZBVUxUX1NEUF9DVVJfTUFYX1NTXFx0OTAwXFxuICAyMjpcXHQjZGVmaW5lIERFRkFVTFRfRENQX0NVUl9NSU5cXHQ1MDBcXG4gIDIzOlxcdCNkZWZpbmUgREVGQVVMVF9EQ1BfQ1VSX01BWFxcdDUwMDBcXG4gIDI0OlxcdCNkZWZpbmUgREVGQVVMVF9DRFBfQ1VSX01JTlxcdDE1MDBcXG4gIDI1OlxcdCNkZWZpbmUgREVGQVVMVF9DRFBfQ1VSX01BWFxcdDUwMDBcXG4gIDI2OlxcdCNkZWZpbmUgREVGQVVMVF9BQ0FfQ1VSX01JTlxcdDE1MDBcXG4gIDI3OlxcdCNkZWZpbmUgREVGQVVMVF9BQ0FfQ1VSX01BWFxcdDUwMDBcXG4gIDI4OlxcdFxcbiAgMjk6XFx0c3RhdGljIExJU1RfSEVBRChwaHlfbGlzdCk7XFxuICAzMDpcXHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBoeV9sb2NrKTtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0c3RydWN0IHBoeV9kZXZtIHtcXG4gIDMzOlxcdFxcdHN0cnVjdCB1c2JfcGh5ICpwaHk7XFxuICAzNDpcXHRcXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iO1xcbiAgMzU6XFx0fTtcXG4gIDM2OlxcdFxcbiAgMzc6XFx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl90eXBlW10gPSB7XFxuICAzODpcXHRcXHRbVU5LTk9XTl9UWVBFXVxcdFxcdFxcdD0gXFxcIlVTQl9DSEFSR0VSX1VOS05PV05fVFlQRVxcXCIsXFxuICAzOTpcXHRcXHRbU0RQX1RZUEVdXFx0XFx0XFx0PSBcXFwiVVNCX0NIQVJHRVJfU0RQX1RZUEVcXFwiLFxcbiAgNDA6XFx0XFx0W0NEUF9UWVBFXVxcdFxcdFxcdD0gXFxcIlVTQl9DSEFSR0VSX0NEUF9UWVBFXFxcIixcXG4gIDQxOlxcdFxcdFtEQ1BfVFlQRV1cXHRcXHRcXHQ9IFxcXCJVU0JfQ0hBUkdFUl9EQ1BfVFlQRVxcXCIsXFxuICA0MjpcXHRcXHRbQUNBX1RZUEVdXFx0XFx0XFx0PSBcXFwiVVNCX0NIQVJHRVJfQUNBX1RZUEVcXFwiLFxcbiAgNDM6XFx0fTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbiAgNDY6XFx0XFx0ZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcXG4gIDQ3OlxcdHtcXG4gIDQ4OlxcdFxcdHN0cnVjdCB1c2JfcGh5ICAqcGh5ID0gTlVMTDtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaHksIGxpc3QsIGhlYWQpIHtcXG4gIDUxOlxcdFxcdFxcdGlmIChwaHktXFx1MDAzZXR5cGUgIT0gdHlwZSlcXG4gIDUyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRcXHRyZXR1cm4gcGh5O1xcbiAgNTU6XFx0XFx0fVxcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4gIDU4OlxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0c3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRzdHJ1Y3QgdXNiX3BoeSAgKnBoeTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpKVxcbiAgNjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGh5LCBcXHUwMDI2cGh5X2xpc3QsIGhlYWQpIHtcXG4gIDY4OlxcdFxcdFxcdGlmIChub2RlICE9IHBoeS1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlKVxcbiAgNjk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdHJldHVybiBwaHk7XFxuICA3MjpcXHRcXHR9XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xcbiAgNzU6XFx0fVxcbiAgNzY6XFx0XFxuICA3NzpcXHRzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXFxuICA3ODpcXHR7XFxuICA3OTpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLnNkcF9taW4gPSBERUZBVUxUX1NEUF9DVVJfTUlOO1xcbiAgODA6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5zZHBfbWF4ID0gREVGQVVMVF9TRFBfQ1VSX01BWDtcXG4gIDgxOlxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19jdXIuZGNwX21pbiA9IERFRkFVTFRfRENQX0NVUl9NSU47XFxuICA4MjpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLmRjcF9tYXggPSBERUZBVUxUX0RDUF9DVVJfTUFYO1xcbiAgODM6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5jZHBfbWluID0gREVGQVVMVF9DRFBfQ1VSX01JTjtcXG4gIDg0OlxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19jdXIuY2RwX21heCA9IERFRkFVTFRfQ0RQX0NVUl9NQVg7XFxuICA4NTpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLmFjYV9taW4gPSBERUZBVUxUX0FDQV9DVVJfTUlOO1xcbiAgODY6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5hY2FfbWF4ID0gREVGQVVMVF9BQ0FfQ1VSX01BWDtcXG4gIDg3OlxcdH1cXG4gIDg4OlxcdFxcbiAgODk6XFx0LyoqXFxuICA5MDpcXHQgKiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsgLSBub3RpZnkgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXFxuICA5MTpcXHQgKiBAd29yazogdGhlIGNoYXJnZXIgd29yayB0byBub3RpZnkgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXFxuICA5MjpcXHQgKlxcbiAgOTM6XFx0ICogVGhpcyB3b3JrIGNhbiBiZSBpc3N1ZWQgd2hlbiBVU0IgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIG9yXFxuICA5NDpcXHQgKiBVU0IgY2hhcmdlciBjdXJyZW50IGhhcyBiZWVuIGNoYW5nZWQsIHRoZW4gd2UgY2FuIG5vdGlmeSB0aGUgY3VycmVudFxcbiAgOTU6XFx0ICogd2hhdCBjYW4gYmUgZHJhd24gdG8gcG93ZXIgdXNlciBhbmQgdGhlIGNoYXJnZXIgc3RhdGUgdG8gdXNlcnNwYWNlLlxcbiAgOTY6XFx0ICpcXG4gIDk3OlxcdCAqIElmIHdlIGdldCB0aGUgY2hhcmdlciB0eXBlIGZyb20gZXh0Y29uIHN1YnN5c3RlbSwgd2UgY2FuIG5vdGlmeSB0aGVcXG4gIDk4OlxcdCAqIGNoYXJnZXIgc3RhdGUgdG8gcG93ZXIgdXNlciBhdXRvbWF0aWNhbGx5IGJ5IHVzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZSgpXFxuICA5OTpcXHQgKiBpc3N1aW5nIGZyb20gZXh0Y29uIHN1YnN5c3RlbS5cXG4gMTAwOlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM0OjQxLjk2NTA5MzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA5MDMwNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgdGFzaywgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgZHJpdmVycy91c2IvcGh5L3BoeS5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIFVTQiBQSFkgKFBoeXNpY2FsIExheWVyKSBkcml2ZXJzIHJlc2lkZSwgdGhlIGNydWNpYWwgYnJpZGdlIGJldHdlZW4gdGhlIGRpZ2l0YWwgd29ybGQgb2YgdGhlIFVTQiBjb250cm9sbGVyIGFuZCB0aGUgYW5hbG9nIHNpZ25hbHMgemlwcGluZyBhY3Jvc3MgdGhlIFVTQiBjYWJsZS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoZXJlLCBnaXZlbiB0aGUgb2Z0ZW4gY29tcGxleCByZXF1aXJlbWVudHMgb2YgdGhlc2UgbG93LWxldmVsIGludGVyZmFjZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIHN0cnVjdHVyZSBkZWZpbml0aW9ucywgdGhlIFBIWSBpbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBhbmQgb2YgY291cnNlLCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIHRoYXQgcmVzcG9uZCB0byBVU0IgZXZlbnRzIGF0IHRoZSBwaHlzaWNhbCBsYXllci4gSSdsbCBsaWtlbHkgYmUgY2hlY2tpbmcgZm9yIGNsb2NrIGNvbmZpZ3VyYXRpb24sIHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBldmVuIHNwZWNpZmljIGhhcmR3YXJlIHF1aXJrcyBvciBlcnJhdGEgd29ya2Fyb3VuZHMgdGhhdCBhcmUgY29tbW9uIGluIHRoaXMga2luZCBvZiBkcml2ZXIuIExldCdzIHNlZSBob3cgd2VsbCBpdCdzIHN0cnVjdHVyZWQsIGhvdyBjbGVhcmx5IHRoZSBhYnN0cmFjdGlvbiBpcyBkZWZpbmVkLCBhbmQgd2hldGhlciBpdCBhbGlnbnMgd2l0aCB0aGUgZGV2aWNlJ3MgZG9jdW1lbnRhdGlvbi4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMgYW5kIGhvdyB0aGV5J3JlIG1hbmFnZWQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM0OjQ0LjM3NDEyNzM4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9waHkvcGh5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHQgKiBJZiB3ZSBnZXQgdGhlIGNoYXJnZXIgdHlwZSBmcm9tIC1cXHUwMDNlY2hhcmdlcl9kZXRlY3QoKSBpbnN0ZWFkIG9mIGV4dGNvblxcbiAxMDI6XFx0ICogc3Vic3lzdGVtLCB0aGUgdXNiIHBoeSBkcml2ZXIgc2hvdWxkIGlzc3VlIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoKVxcbiAxMDM6XFx0ICogdG8gc2V0IGNoYXJnZXIgc3RhdGUgd2hlbiB0aGUgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxcbiAxMDQ6XFx0ICovXFxuIDEwNTpcXHRzdGF0aWMgdm9pZCB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiAxMDY6XFx0e1xcbiAxMDc6XFx0XFx0c3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTtcXG4gMTA4OlxcdFxcdGNoYXIgdWNoZ2VyX3N0YXRlWzUwXSA9IHsgMCB9O1xcbiAxMDk6XFx0XFx0Y2hhciB1Y2hnZXJfdHlwZVs1MF0gPSB7IDAgfTtcXG4gMTEwOlxcdFxcdGNoYXIgKmVudnBbXSA9IHsgdWNoZ2VyX3N0YXRlLCB1Y2hnZXJfdHlwZSwgTlVMTCB9O1xcbiAxMTE6XFx0XFx0dW5zaWduZWQgaW50IG1pbiwgbWF4O1xcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHRzd2l0Y2ggKHVzYl9waHktXFx1MDAzZWNoZ19zdGF0ZSkge1xcbiAxMTQ6XFx0XFx0Y2FzZSBVU0JfQ0hBUkdFUl9QUkVTRU5UOlxcbiAxMTU6XFx0XFx0XFx0dXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KHVzYl9waHksIFxcdTAwMjZtaW4sIFxcdTAwMjZtYXgpO1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRcXHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2dXNiX3BoeS1cXHUwMDNlbm90aWZpZXIsIG1heCwgdXNiX3BoeSk7XFxuIDExODpcXHRcXHRcXHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcXG4gMTE5OlxcdFxcdFxcdFxcdCBcXFwiVVNCX0NIQVJHRVJfU1RBVEU9JXNcXFwiLCBcXFwiVVNCX0NIQVJHRVJfUFJFU0VOVFxcXCIpO1xcbiAxMjA6XFx0XFx0XFx0YnJlYWs7XFxuIDEyMTpcXHRcXHRjYXNlIFVTQl9DSEFSR0VSX0FCU0VOVDpcXG4gMTIyOlxcdFxcdFxcdHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudCh1c2JfcGh5KTtcXG4gMTIzOlxcdFxcbiAxMjQ6XFx0XFx0XFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXFx1MDAyNnVzYl9waHktXFx1MDAzZW5vdGlmaWVyLCAwLCB1c2JfcGh5KTtcXG4gMTI1OlxcdFxcdFxcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxcbiAxMjY6XFx0XFx0XFx0XFx0IFxcXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1xcXCIsIFxcXCJVU0JfQ0hBUkdFUl9BQlNFTlRcXFwiKTtcXG4gMTI3OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjg6XFx0XFx0ZGVmYXVsdDpcXG4gMTI5OlxcdFxcdFxcdGRldl93YXJuKHVzYl9waHktXFx1MDAzZWRldiwgXFxcIlVua25vd24gVVNCIGNoYXJnZXIgc3RhdGU6ICVkXFxcXG5cXFwiLFxcbiAxMzA6XFx0XFx0XFx0XFx0IHVzYl9waHktXFx1MDAzZWNoZ19zdGF0ZSk7XFxuIDEzMTpcXHRcXHRcXHRyZXR1cm47XFxuIDEzMjpcXHRcXHR9XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdHNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSxcXG4gMTM1OlxcdFxcdFxcdCBcXFwiVVNCX0NIQVJHRVJfVFlQRT0lc1xcXCIsIHVzYl9jaGdlcl90eXBlW3VzYl9waHktXFx1MDAzZWNoZ190eXBlXSk7XFxuIDEzNjpcXHRcXHRrb2JqZWN0X3VldmVudF9lbnYoXFx1MDAyNnVzYl9waHktXFx1MDAzZWRldi1cXHUwMDNla29iaiwgS09CSl9DSEFOR0UsIGVudnApO1xcbiAxMzc6XFx0fVxcbiAxMzg6XFx0XFxuIDEzOTpcXHRzdGF0aWMgdm9pZCBfX3VzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZShzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdGlmIChleHRjb25fZ2V0X3N0YXRlKHVzYl9waHktXFx1MDAzZWVkZXYsIEVYVENPTl9DSEdfVVNCX1NEUCkgXFx1MDAzZSAwKSB7XFxuIDE0MjpcXHRcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfdHlwZSA9IFNEUF9UWVBFO1xcbiAxNDM6XFx0XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX3N0YXRlID0gVVNCX0NIQVJHRVJfUFJFU0VOVDtcXG4gMTQ0OlxcdFxcdH0gZWxzZSBpZiAoZXh0Y29uX2dldF9zdGF0ZSh1c2JfcGh5LVxcdTAwM2VlZGV2LCBFWFRDT05fQ0hHX1VTQl9DRFApIFxcdTAwM2UgMCkge1xcbiAxNDU6XFx0XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX3R5cGUgPSBDRFBfVFlQRTtcXG4gMTQ2OlxcdFxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19zdGF0ZSA9IFVTQl9DSEFSR0VSX1BSRVNFTlQ7XFxuIDE0NzpcXHRcXHR9IGVsc2UgaWYgKGV4dGNvbl9nZXRfc3RhdGUodXNiX3BoeS1cXHUwMDNlZWRldiwgRVhUQ09OX0NIR19VU0JfRENQKSBcXHUwMDNlIDApIHtcXG4gMTQ4OlxcdFxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ190eXBlID0gRENQX1RZUEU7XFxuIDE0OTpcXHRcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfc3RhdGUgPSBVU0JfQ0hBUkdFUl9QUkVTRU5UO1xcbiAxNTA6XFx0XFx0fSBlbHNlIGlmIChleHRjb25fZ2V0X3N0YXRlKHVzYl9waHktXFx1MDAzZWVkZXYsIEVYVENPTl9DSEdfVVNCX0FDQSkgXFx1MDAzZSAwKSB7XFxuIDE1MTpcXHRcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfdHlwZSA9IEFDQV9UWVBFO1xcbiAxNTI6XFx0XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX3N0YXRlID0gVVNCX0NIQVJHRVJfUFJFU0VOVDtcXG4gMTUzOlxcdFxcdH0gZWxzZSB7XFxuIDE1NDpcXHRcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfdHlwZSA9IFVOS05PV05fVFlQRTtcXG4gMTU1OlxcdFxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19zdGF0ZSA9IFVTQl9DSEFSR0VSX0FCU0VOVDtcXG4gMTU2OlxcdFxcdH1cXG4gMTU3OlxcdFxcbiAxNTg6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dXNiX3BoeS1cXHUwMDNlY2hnX3dvcmspO1xcbiAxNTk6XFx0fVxcbiAxNjA6XFx0XFxuIDE2MTpcXHQvKipcXG4gMTYyOlxcdCAqIHVzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZSAtIGdldCBjaGFyZ2VyIHR5cGUgZnJvbSBleHRjb24gc3Vic3lzdGVtXFxuIDE2MzpcXHQgKiBAbmI6IHRoZSBub3RpZmllciBibG9jayB0byBkZXRlcm1pbmUgY2hhcmdlciB0eXBlXFxuIDE2NDpcXHQgKiBAc3RhdGU6IHRoZSBjYWJsZSBzdGF0ZVxcbiAxNjU6XFx0ICogQGRhdGE6IHByaXZhdGUgZGF0YVxcbiAxNjY6XFx0ICpcXG4gMTY3OlxcdCAqIERldGVybWluIHRoZSBjaGFyZ2VyIHR5cGUgZnJvbSBleHRjb24gc3Vic3lzdGVtIHdoaWNoIGFsc28gbWVhbnMgdGhlXFxuIDE2ODpcXHQgKiBjaGFyZ2VyIHN0YXRlIGhhcyBiZWVuIGNoYW5lZCwgdGhlbiB3ZSBzaG91bGQgbm90aWZ5IHRoaXMgZXZlbnQuXFxuIDE2OTpcXHQgKi9cXG4gMTcwOlxcdHN0YXRpYyBpbnQgdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuIDE3MTpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBzdGF0ZSwgdm9pZCAqZGF0YSlcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5ID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgdXNiX3BoeSwgdHlwZV9uYik7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHVzYl9waHkpO1xcbiAxNzY6XFx0XFx0cmV0dXJuIE5PVElGWV9PSztcXG4gMTc3OlxcdH1cXG4gMTc4OlxcdFxcbiAxNzk6XFx0LyoqXFxuIDE4MDpcXHQgKiB1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQgLSBzZXQgdGhlIFVTQiBjaGFyZ2VyIGN1cnJlbnRcXG4gMTgxOlxcdCAqIEB1c2JfcGh5OiB0aGUgVVNCIHBoeSB0byBiZSB1c2VkXFxuIDE4MjpcXHQgKiBAbUE6IHRoZSBjdXJyZW50IG5lZWQgdG8gYmUgc2V0XFxuIDE4MzpcXHQgKlxcbiAxODQ6XFx0ICogVXN1YWxseSB3ZSBvbmx5IGNoYW5nZSB0aGUgY2hhcmdlciBkZWZhdWx0IGN1cnJlbnQgd2hlbiBVU0IgZmluaXNoZWQgdGhlXFxuIDE4NTpcXHQgKiBlbnVtZXJhdGlvbiBhcyBvbmUgU0RQIGNoYXJnZXIuIEFzIG9uZSBTRFAgY2hhcmdlciwgdXNiX3BoeV9zZXRfcG93ZXIoKVxcbiAxODY6XFx0ICogd2lsbCBpc3N1ZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSBjaGFyZ2VyIGN1cnJlbnQgd2hlbiBhZnRlciBzZXR0aW5nIFVTQlxcbiAxODc6XFx0ICogY29uZmlndXJhdGlvbiwgb3Igc3VzcGVuZC9yZXN1bWUgVVNCLiBGb3Igb3RoZXIgdHlwZSBjaGFyZ2VyLCB3ZSBzaG91bGRcXG4gMTg4OlxcdCAqIHVzZSB0aGUgZGVmYXVsdCBjaGFyZ2VyIGN1cnJlbnQgYW5kIHdlIGRvIG5vdCBzdWdnZXN0IHRvIGlzc3VlIHRoaXMgZnVuY3Rpb25cXG4gMTg5OlxcdCAqIHRvIGNoYW5nZSB0aGUgY2hhcmdlciBjdXJyZW50LlxcbiAxOTA6XFx0ICpcXG4gMTkxOlxcdCAqIFdoZW4gVVNCIGNoYXJnZXIgY3VycmVudCBoYXMgYmVlbiBjaGFuZ2VkLCB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgcG93ZXIgdXNlcnMuXFxuIDE5MjpcXHQgKi9cXG4gMTkzOlxcdHZvaWQgdXNiX3BoeV9zZXRfY2hhcmdlcl9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5LCB1bnNpZ25lZCBpbnQgbUEpXFxuIDE5NDpcXHR7XFxuIDE5NTpcXHRcXHRzd2l0Y2ggKHVzYl9waHktXFx1MDAzZWNoZ190eXBlKSB7XFxuIDE5NjpcXHRcXHRjYXNlIFNEUF9UWVBFOlxcbiAxOTc6XFx0XFx0XFx0aWYgKHVzYl9waHktXFx1MDAzZWNoZ19jdXIuc2RwX21heCA9PSBtQSlcXG4gMTk4OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMTk5OlxcdFxcbiAyMDA6XFx0XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5zZHBfbWF4ID0gKG1BIFxcdTAwM2UgREVGQVVMVF9TRFBfQ1VSX01BWF9TUykgP1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNDo0NC4zNzQyMzQ3MDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTkxODY4NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIFBIWSBDaGFyZ2VyIFN0YXRlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBiYWNrIGludG8gdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMuIFByZXZpb3VzbHksIGhlcmUncyBob3cgdGhpbmdzIHdvcmtlZDogaW4gYHVzYl9hZGRfcGh5X2RldmAsIHdlIGFzc2lnbmVkIGB4LVx1MDAzZWRldi1cdTAwM2V0eXBlID0gXHUwMDI2dXNiX3BoeV9kZXZfdHlwZWAuIFRoaXMgbWVhbnQgdGhhdCB0aGUgYHVldmVudGAgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZGV2aWNlIHR5cGUsIGB1c2JfcGh5X3VldmVudGAsIHdvdWxkIGJlIGNhbGxlZC4gVGhlbiwgd2l0aGluIGB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtgLCB3ZSB0cmlnZ2VyZWQgYSBga29iamVjdF91ZXZlbnRgIHRvIHNpZ25hbCBhIGNoYW5nZS4gVGhpcyB1bHRpbWF0ZWx5IGxlZCB0byBgdXNiX3BoeV91ZXZlbnRgIGJlaW5nIGludm9rZWQsIHdoZXJlIHdlJ2QgZXh0cmFjdCBhbmQgYWRkIGBVU0JfQ0hBUkdFUl9TVEFURWAgYW5kIGBVU0JfQ0hBUkdFUl9UWVBFYCB0byB0aGUgZW52aXJvbm1lbnQuXG5cbk5vdywgdGhpcyBwYXRjaCBpcyBzaWduaWZpY2FudGx5IHJlZmFjdG9yaW5nIHRoYXQgYXBwcm9hY2guIFRoZXkndmUgZWxpbWluYXRlZCBgdXNiX2NoZ2VyX3N0YXRlYCwgYF9fZGV2aWNlX3RvX3VzYl9waHlgLCBgdXNiX3BoeV91ZXZlbnRgLCBhbmQgYHVzYl9waHlfZGV2X3R5cGVgLiBJbnN0ZWFkLCBpbiBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYCwgdGhleSBhcmUgY29uc3RydWN0aW5nIHRoZSBgdWNoZ2VyX3N0YXRlYCBhbmQgYHVjaGdlcl90eXBlYCBkaXJlY3RseSBhbmQgdXNpbmcgYGtvYmplY3RfdWV2ZW50X2VudmAuIFBsdXMsIGNydWNpYWxseSwgdGhleSByZW1vdmVkIHRoZSBhc3NpZ25tZW50IG9mIGB4LVx1MDAzZWRldi1cdTAwM2V0eXBlID0gXHUwMDI2dXNiX3BoeV9kZXZfdHlwZWAgd2l0aGluIGB1c2JfYWRkX3BoeV9kZXZgLlxuXG5UaGUgc3RhdGVkIHJlYXNvbiBpcyBtYWtpbmcgc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIGRldmljZSB0eXBlLCBvciB3aGVuIHVldmVudCBpcyBnZW5lcmF0ZWQgZGlyZWN0bHkgZnJvbSB3b3JrcXVldWUsIGl0IHBhc3NlcyBgZW52cGAgdG8gYGtvYmplY3RfdWV2ZW50X2VudmAuIFRoaXMgbWFrZXMgc2Vuc2UsIGJlY2F1c2Ugb3ZlcndyaXRpbmcgdGhlIGRldmljZSB0eXBlIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgYW5vdGhlciBkcml2ZXIgYWxyZWFkeSBzZXQgaXQsIGFuZCB0aGlzIGFsbG93cyB1cyB0byBwYXNzIHRoZSBlbnZpcm9ubWVudCBkaXJlY3RseSB0byB0aGUgYGtvYmplY3RfdWV2ZW50YC5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2FmZSBhbmQgdGhlIGltcGFjdC4gU3BlY2lmaWNhbGx5LCBpcyB0aGUgY29kZSBpbiBgZHJpdmVycy91c2IvcGh5L3BoeS5jYCBzdGlsbCByZWFjaGVkPyBJIHNob3VsZCBjaGVjayBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2AsIGB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlYCwgYHVzYl9hZGRfcGh5X2RldmAsIGFuZCBgdXNiX2FkZF9waHlgLiBJIGFsc28gbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIG1vZHVsZXMgdGhhdCBkZXBlbmQgb24gYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODczLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6NDguOTY2MTA4MTM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI5MTgzNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYl9hZGRfcGh5X2Rldnx1c2JfYWRkX3BoeXx1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGh5L21vdG9yb2xhL3BoeS1jcGNhcC11c2IuYz02MDg9c3RhdGljIGludCBjcGNhcF91c2JfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHktY3BjYXAtdXNiLmMtNjc1LVxcbmRyaXZlcnMvcGh5L21vdG9yb2xhL3BoeS1jcGNhcC11c2IuYzo2NzY6XFx0dXNiX2FkZF9waHlfZGV2KFxcdTAwMjZkZGF0YS1cXHUwMDNlcGh5KTtcXG5kcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHktY3BjYXAtdXNiLmMtNjc3LVxcdGF0b21pY19zZXQoXFx1MDAyNmRkYXRhLVxcdTAwM2VhY3RpdmUsIDEpO1xcbi0tXFxuZHJpdmVycy9waHkvcGh5LWxnbS11c2IuYz0xODc9c3RhdGljIGludCBwaHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGh5L3BoeS1sZ20tdXNiLmMtMjUxLVxcbmRyaXZlcnMvcGh5L3BoeS1sZ20tdXNiLmM6MjUyOlxcdHJldHVybiB1c2JfYWRkX3BoeV9kZXYocGh5KTtcXG5kcml2ZXJzL3BoeS9waHktbGdtLXVzYi5jLTI1My19XFxuLS1cXG5kcml2ZXJzL3BoeS90ZWdyYS94dXNiLmM9NjYwPXN0YXRpYyBpbnQgdGVncmFfeHVzYl9zZXR1cF91c2Jfcm9sZV9zd2l0Y2goc3RydWN0IHRlZ3JhX3h1c2JfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYy03MTQtXFxuZHJpdmVycy9waHkvdGVncmEveHVzYi5jOjcxNTpcXHRlcnIgPSB1c2JfYWRkX3BoeV9kZXYoXFx1MDAyNnBvcnQtXFx1MDAzZXVzYl9waHkpO1xcbmRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYy03MTYtXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvcGh5L3RpL3BoeS1kbTgxNngtdXNiLmM9MTcxPXN0YXRpYyBpbnQgZG04MTZ4X3VzYl9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGh5L3RpL3BoeS1kbTgxNngtdXNiLmMtMjQwLVxcbmRyaXZlcnMvcGh5L3RpL3BoeS1kbTgxNngtdXNiLmM6MjQxOlxcdHVzYl9hZGRfcGh5X2RldihcXHUwMDI2cGh5LVxcdTAwM2VwaHkpO1xcbmRyaXZlcnMvcGh5L3RpL3BoeS1kbTgxNngtdXNiLmMtMjQyLVxcbi0tXFxuZHJpdmVycy9waHkvdGkvcGh5LW9tYXAtdXNiMi5jPTM3Mz1zdGF0aWMgaW50IG9tYXBfdXNiMl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9waHkvdGkvcGh5LW9tYXAtdXNiMi5jLTUxMS1cXG5kcml2ZXJzL3BoeS90aS9waHktb21hcC11c2IyLmM6NTEyOlxcdHVzYl9hZGRfcGh5X2RldihcXHUwMDI2cGh5LVxcdTAwM2VwaHkpO1xcbmRyaXZlcnMvcGh5L3RpL3BoeS1vbWFwLXVzYjIuYy01MTMtXFxuLS1cXG5kcml2ZXJzL3BoeS90aS9waHktdHdsNDAzMC11c2IuYz02ODM9c3RhdGljIGludCB0d2w0MDMwX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9waHkvdGkvcGh5LXR3bDQwMzAtdXNiLmMtNzQ4LVxcdH1cXG5kcml2ZXJzL3BoeS90aS9waHktdHdsNDAzMC11c2IuYzo3NDk6XFx0dXNiX2FkZF9waHlfZGV2KFxcdTAwMjZ0d2wtXFx1MDAzZXBoeSk7XFxuZHJpdmVycy9waHkvdGkvcGh5LXR3bDQwMzAtdXNiLmMtNzUwLVxcbi0tXFxuZHJpdmVycy91c2IvY2hpcGlkZWEvdWRjLmM9MTg5Nz1zdGF0aWMgaW50IGNpX3VkY192YnVzX3Nlc3Npb24oc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19hY3RpdmUpXFxuLS1cXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS91ZGMuYy0xOTA3LVxcdGlmIChjaS1cXHUwMDNldXNiX3BoeSlcXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS91ZGMuYzoxOTA4OlxcdFxcdHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoY2ktXFx1MDAzZXVzYl9waHksIGlzX2FjdGl2ZSA/XFxuZHJpdmVycy91c2IvY2hpcGlkZWEvdWRjLmMtMTkwOS1cXHRcXHRcXHRVU0JfQ0hBUkdFUl9QUkVTRU5UIDogVVNCX0NIQVJHRVJfQUJTRU5UKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTg2OD1zdGF0aWMgaW50IGFiODUwMF91c2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTkzOC1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo5Mzk6XFx0ZXJyID0gdXNiX2FkZF9waHkoXFx1MDAyNmFiLVxcdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy05NDAtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYz0zOD1zdGF0aWMgaW50IGFtMzM1eF9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMtODEtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYzo4MjpcXHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFxcdTAwMjZhbV9waHktXFx1MDAzZXVzYl9waHlfZ2VuLnBoeSk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYy04My19XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWZzbC11c2IuYz03NzM9c3RhdGljIGludCBmc2xfb3RnX2NvbmYoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jLTgxNy1cXHQvKiBTdG9yZSB0aGUgb3RnIHRyYW5zY2VpdmVyICovXFxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM6ODE4OlxcdHN0YXR1cyA9IHVzYl9hZGRfcGh5KFxcdTAwMjZmc2xfb3RnX3RjLVxcdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWZzbC11c2IuYy04MTktXFx0aWYgKHN0YXR1cykge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM9MjY0PXN0YXRpYyBpbnQgdXNiX3BoeV9nZW5lcmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yOTQtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6Mjk1OlxcdGVyciA9IHVzYl9hZGRfcGh5X2RldihcXHUwMDI2bm9wLVxcdTAwM2VwaHkpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTI5Ni1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1ncGlvLXZidXMtdXNiLmM9MjMxPXN0YXRpYyBpbnQgZ3Bpb192YnVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdwaW8tdmJ1cy11c2IuYy0zMTUtXFx0Lyogb25seSBhY3RpdmUgd2hlbiBhIGdhZGdldCBpcyByZWdpc3RlcmVkICovXFxuZHJpdmVycy91c2IvcGh5L3BoeS1ncGlvLXZidXMtdXNiLmM6MzE2OlxcdGVyciA9IHVzYl9hZGRfcGh5KFxcdTAwMjZncGlvX3ZidXMtXFx1MDAzZXBoeSwgVVNCX1BIWV9UWVBFX1VTQjIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jLTMxNy1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYz05NT1zdGF0aWMgaW50IGlzcDEzMDFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jLTExNC1cXHRpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpc3ApO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jOjExNTpcXHR1c2JfYWRkX3BoeV9kZXYocGh5KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYy0xMTYtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM9NjU9c3RhdGljIGludCBrZXlzdG9uZV91c2JwaHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy04Ny1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6ODg6XFx0cmV0dXJuIHVzYl9hZGRfcGh5X2RldihcXHUwMDI2a19waHktXFx1MDAzZXVzYl9waHlfZ2VuLnBoeSk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTg5LX1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jPTc1OD1zdGF0aWMgaW50IG14c19waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg2Ny1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYzo4Njg6XFx0cmV0dXJuIHVzYl9hZGRfcGh5X2RldihcXHUwMDI2bXhzX3BoeS1cXHUwMDNlcGh5KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy04NjktfVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jPTMxOT1zdGF0aWMgaW50IHRhaHZvX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jLTM4My1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRhaHZvLmM6Mzg0OlxcdHJldCA9IHVzYl9hZGRfcGh5KFxcdTAwMjZ0dS1cXHUwMDNlcGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jLTM4NS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz0xNDkwPXN0YXRpYyBpbnQgdGVncmFfdXNiX3BoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xNjMzLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTYzNDpcXHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFxcdTAwMjZ0ZWdyYV9waHktXFx1MDAzZXVfcGh5KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTE2MzUtfVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTc3PXN0YXRpYyB2b2lkIHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xMDEtICogSWYgd2UgZ2V0IHRoZSBjaGFyZ2VyIHR5cGUgZnJvbSAtXFx1MDAzZWNoYXJnZXJfZGV0ZWN0KCkgaW5zdGVhZCBvZiBleHRjb25cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MTAyOiAqIHN1YnN5c3RlbSwgdGhlIHVzYiBwaHkgZHJpdmVyIHNob3VsZCBpc3N1ZSB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMTAzLSAqIHRvIHNldCBjaGFyZ2VyIHN0YXRlIHdoZW4gdGhlIGNoYXJnZXIgc3RhdGUgaGFzIGJlZW4gY2hhbmdlZC5cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0yNjg9RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yNzAtLyoqXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjI3MTogKiB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlIC0gc2V0IHRoZSBVU0IgY2hhcmdlciBzdGF0ZVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yNzItICogQHVzYl9waHk6IHRoZSBVU0IgcGh5IHRvIGJlIHVzZWRcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yNzgtICovXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjI3OTp2b2lkIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoc3RydWN0IHVzYl9waHkgKnVzYl9waHksXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI4MC1cXHRcXHRcXHQgICAgICAgZW51bSB1c2JfY2hhcmdlcl9zdGF0ZSBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yOTItfVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyOTM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI5NC1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYz01ODk9RVhQT1JUX1NZTUJPTF9HUEwodXNiX3B1dF9waHkpO1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTU5MS0vKipcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NTkyOiAqIHVzYl9hZGRfcGh5OiBkZWNsYXJlIHRoZSBVU0IgUEhZXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTU5My0gKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTU5OS0gKi9cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NjAwOmludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjAxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MzctfVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2Mzg6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2FkZF9waHkpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MzktXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY0MC0vKipcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NjQxOiAqIHVzYl9hZGRfcGh5X2RldiAtIGRlY2xhcmUgdGhlIFVTQiBQSFlcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjQyLSAqIEB4OiB0aGUgVVNCIHBoeSB0byBiZSB1c2VkOyBvciBOVUxMXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjQ3LSAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2NDg6aW50IHVzYl9hZGRfcGh5X2RldihzdHJ1Y3QgdXNiX3BoeSAqeClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjQ5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02NzItfVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2NzM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2FkZF9waHlfZGV2KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjc0LVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY3OC0gKlxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2Nzk6ICogVGhpcyByZXZlcnRzIHRoZSBlZmZlY3RzIG9mIHVzYl9hZGRfcGh5XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY4MC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6NTAuMDk1Mjk3NTE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjY3MjM5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVTQiBQSFkgU2VsZWN0aW9uIGFuZCBJbnN0YW50aWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBgVVNCX1BIWWAgaXMgYSBrZXkgY29tcG9uZW50IGhlcmUsIGFuZCBtdWx0aXBsZSBkcml2ZXJzLCBpbmNsdWRpbmcgYE5PUF9VU0JfWENFSVZgLCBhcmUgaW52b2x2ZWQgaW4gaXRzIHNlbGVjdGlvbi4gVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzLCBjYW4gd2UgYWN0dWFsbHkgcHJvYmUgb3IgaW5zdGFudGlhdGUgdGhpcyBgTk9QX1VTQl9YQ0VJVmA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgYSBjb25jcmV0ZSBlbnRpdHkgb3IgbW9yZSBvZiBhbiBhYnN0cmFjdCByZXByZXNlbnRhdGlvbiBvZiBhIGdlbmVyaWMgVVNCIFBIWS4gVGltZSB0byBkaWcgaW50byBgcGh5LWdlbmVyaWMuY2AuIFRoYXQgc2hvdWxkIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGdlbmVyaWMgUEhZIGlzIGhhbmRsZWQgYXQgdGhlIGRyaXZlciBsZXZlbCwgYW5kIHdoZXRoZXIgd2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggaXQuIEknbSBob3BpbmcgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgZ2VuZXJpYyBVU0IgdHJhbnNjZWl2ZXIgbG9naWMgd2l0aGluIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNDo1Mi4yNjIwMjU3NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODM5NzQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfcGh5X2dlbmVyaWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvcGh5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMtNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL290Zy5oXFx1MDAzZVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmM6NjojaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXFx1MDAzZVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMtNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYz0xNj1zdHJ1Y3QgYW0zMzV4X3BoeSB7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYzoxNzpcXHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljIHVzYl9waHlfZ2VuO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMtMTgtXFx0c3RydWN0IHBoeV9jb250cm9sICpwaHlfY3RybDtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2Ivb3RnLmhcXHUwMDNlXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MTk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi91c2JfcGh5X2dlbmVyaWMuaFxcdTAwM2VcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzItXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzM6c3RydWN0IHBsYXRmb3JtX2RldmljZSAqdXNiX3BoeV9nZW5lcmljX3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzQte1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjM1OlxcdHJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFxcXCJ1c2JfcGh5X2dlbmVyaWNcXFwiLFxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM2LVxcdFxcdFxcdFBMQVRGT1JNX0RFVklEX0FVVE8sIE5VTEwsIDApO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM3LX1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozODpFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dlbmVyaWNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM5LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjQwOnZvaWQgdXNiX3BoeV9nZW5lcmljX3VucmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy00MS17XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy00My19XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6NDQ6RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9nZW5lcmljX3VucmVnaXN0ZXIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTQ1LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTQ2PXN0YXRpYyBpbnQgbm9wX3NldF9zdXNwZW5kKHN0cnVjdCB1c2JfcGh5ICp4LCBpbnQgc3VzcGVuZClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy00Ny17XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6NDg6XFx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGV2X2dldF9kcnZkYXRhKHgtXFx1MDAzZWRldik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtNDktXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy02My1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzo2NDpzdGF0aWMgdm9pZCBub3BfcmVzZXQoc3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wKVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTY1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTc2PXN0YXRpYyBpbnQgbm9wX3NldF92YnVzKHN0cnVjdCB1c2Jfb3RnICpvdGcsIGJvb2wgZW5hYmxlKVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtNzgtXFx0aW50IHJldCA9IDA7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6Nzk6XFx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGV2X2dldF9kcnZkYXRhKG90Zy1cXHUwMDNldXNiX3BoeS1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy04MC1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTk5PXN0YXRpYyBpcnFyZXR1cm5fdCBub3BfZ3Bpb192YnVzX3RocmVhZChpbnQgaXJxLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTEwMC17XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MTAxOlxcdHN0cnVjdCB1c2JfcGh5X2dlbmVyaWMgKm5vcCA9IGRhdGE7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMTAyLVxcdHN0cnVjdCB1c2Jfb3RnICpvdGcgPSBub3AtXFx1MDAzZXBoeS5vdGc7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0xMjg9aW50IHVzYl9nZW5fcGh5X2luaXQoc3RydWN0IHVzYl9waHkgKnBoeSlcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xMjkte1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjEzMDpcXHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AgPSBkZXZfZ2V0X2RydmRhdGEocGh5LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTEzMS1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM9MTQ4PXZvaWQgdXNiX2dlbl9waHlfc2h1dGRvd24oc3RydWN0IHVzYl9waHkgKnBoeSlcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xNDkte1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjE1MDpcXHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AgPSBkZXZfZ2V0X2RydmRhdGEocGh5LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE1MS1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTE4Mj1zdGF0aWMgaW50IG5vcF9zZXRfaG9zdChzdHJ1Y3QgdXNiX290ZyAqb3RnLCBzdHJ1Y3QgdXNiX2J1cyAqaG9zdClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE5NS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoxOTY6aW50IHVzYl9waHlfZ2VuX2NyZWF0ZV9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3ApXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMTk3LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTI2Mj1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dlbl9jcmVhdGVfcGh5KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yNjMtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MjY0OnN0YXRpYyBpbnQgdXNiX3BoeV9nZW5lcmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMjY1LXtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yNjYtXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoyNjc6XFx0c3RydWN0IHVzYl9waHlfZ2VuZXJpY1xcdCpub3A7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMjY4LVxcdGludCBlcnI7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMDYtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzA3OnN0YXRpYyB2b2lkIHVzYl9waHlfZ2VuZXJpY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMDgte1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMwOTpcXHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMTAtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0zMjI9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbm9wX3hjZWl2X2R0X2lkcyk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzIzLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyNDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1c2JfcGh5X2dlbmVyaWNfZHJpdmVyID0ge1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyNTpcXHQucHJvYmVcXHRcXHQ9IHVzYl9waHlfZ2VuZXJpY19wcm9iZSxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMjY6XFx0LnJlbW92ZVxcdFxcdD0gdXNiX3BoeV9nZW5lcmljX3JlbW92ZSxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMjctXFx0LmRyaXZlclxcdFxcdD0ge1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyODpcXHRcXHQubmFtZVxcdD0gXFxcInVzYl9waHlfZ2VuZXJpY1xcXCIsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzI5LVxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IG5vcF94Y2Vpdl9kdF9pZHMsXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMzItXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzMzOnN0YXRpYyBpbnQgX19pbml0IHVzYl9waHlfZ2VuZXJpY19pbml0KHZvaWQpXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzM0LXtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMzU6XFx0cmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2dXNiX3BoeV9nZW5lcmljX2RyaXZlcik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzM2LX1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMzc6c3Vic3lzX2luaXRjYWxsKHVzYl9waHlfZ2VuZXJpY19pbml0KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMzgtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzM5OnN0YXRpYyB2b2lkIF9fZXhpdCB1c2JfcGh5X2dlbmVyaWNfZXhpdCh2b2lkKVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM0MC17XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzQxOlxcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZ1c2JfcGh5X2dlbmVyaWNfZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zNDItfVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjM0Mzptb2R1bGVfZXhpdCh1c2JfcGh5X2dlbmVyaWNfZXhpdCk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzQ0LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjM0NTpNT0RVTEVfQUxJQVMoXFxcInBsYXRmb3JtOnVzYl9waHlfZ2VuZXJpY1xcXCIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM0Ni1NT0RVTEVfQVVUSE9SKFxcXCJUZXhhcyBJbnN0cnVtZW50cyBJbmNcXFwiKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTQtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmg6NTojaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXFx1MDAzZVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTgtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmg6OTpzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljIHtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaC0xMC1cXHRzdHJ1Y3QgdXNiX3BoeSBwaHk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaD0yMz12b2lkIHVzYl9nZW5fcGh5X3NodXRkb3duKHN0cnVjdCB1c2JfcGh5ICpwaHkpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTI0LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oOjI1OmludCB1c2JfcGh5X2dlbl9jcmVhdGVfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaC0yNi1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvdXNiX3BoeV9nZW5lcmljLmhcXHUwMDNlXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jPTI4PXN0cnVjdCBrZXlzdG9uZV91c2JwaHkge1xcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzoyOTpcXHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljXFx0dXNiX3BoeV9nZW47XFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTMwLVxcdHZvaWQgX19pb21lbVxcdFxcdFxcdCpwaHlfY3RybDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6NTIuNTYwNDI4MDI3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0Mjk0NTc4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgVVNCX1BIWWAgRGVwZW5kZW5jeSBhbmQgQ2hhcmdlciBTdGF0ZSoqXG5cblJpZ2h0LCBzbyBgVVNCX1BIWWAgaXMgcHJlZGljdGFibHkgZ29pbmcgdG8gYmUgaW4gYW55IGtlcm5lbCBidWlsZCB0aGF0IGluY2x1ZGVzIFVTQiBQSFkgZHJpdmVycy4gSSdkIGV4cGVjdCBpdCB0byBiZSBsaW5rZWQgaW4gd2hlbiBzb21ldGhpbmcgbGlrZSB0aGUgZ2VuZXJpYywgQ2hpcElkZWEsIG9yIGdhZGdldCBQSFkgZHJpdmVycyBhcmUgY29uZmlndXJlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYSB2ZXJ5IGNvbW1vbiBkZXBlbmRlbmN5IGluIGEgbG90IG9mIGJ1aWxkcywgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCBteSByZWFsIGludGVyZXN0IGxpZXMgaW4gaG93IHRoaXMgYWZmZWN0cyB0aGUgY2hhcmdlciBzdGF0ZSBub3RpZmljYXRpb24sIHNwZWNpZmljYWxseSBob3cgYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2AgZ2V0cyBpbnZva2VkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIGNoYWluLiBJJ2xsIG5lZWQgdG8gZmluZCB3aGVyZSBgdXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZWAgaXMgYmVpbmcgY2FsbGVkIGFuZCB0aGVuIHRyYWNlIGhvdyB0aGF0IGxlYWRzIHRvIHRoZSB3b3JrcXVldWUuIExldCdzIHNlZSwgYSBxdWljayBgZ3JlcGAgZm9yIHRob3NlIHRlcm1zLCBtYXliZSBhbHNvIGBjaGdfd29ya2Agb3IgYHR5cGVfbmJgIGp1c3QgaW4gY2FzZSwgc2hvdWxkIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgcHJldHR5IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODcxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6NTQuOTg5ODg4ODg1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk5MzM2NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZ193b3JrfHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGV8dHlwZV9uYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTIxLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjI6c3RydWN0IGFmdGVyX3N0YXRlX2NoZ193b3JrIHtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTIzLVxcdHN0cnVjdCBkcmJkX3dvcmsgdztcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM9MTI2Mz1fZHJiZF9zZXRfc3RhdGUoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsIHVuaW9uIGRyYmRfc3RhdGUgbnMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTEyNzAtXFx0ZW51bSBzYW5pdGl6ZV9zdGF0ZV93YXJuaW5ncyBzc3c7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYzoxMjcxOlxcdHN0cnVjdCBhZnRlcl9zdGF0ZV9jaGdfd29yayAqYXNjdztcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTEyNzItXFx0c3RydWN0IGRyYmRfc3RhdGVfY2hhbmdlICpzdGF0ZV9jaGFuZ2U7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jPTE0ODk9c3RhdGljIGludCB3X2FmdGVyX3N0YXRlX2NoKHN0cnVjdCBkcmJkX3dvcmsgKncsIGludCB1bnVzZWQpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0xNDkwLXtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jOjE0OTE6XFx0c3RydWN0IGFmdGVyX3N0YXRlX2NoZ193b3JrICphc2N3ID1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jOjE0OTI6XFx0XFx0Y29udGFpbmVyX29mKHcsIHN0cnVjdCBhZnRlcl9zdGF0ZV9jaGdfd29yaywgdyk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0xNDkzLVxcdHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlID0gYXNjdy1cXHUwMDNlZGV2aWNlO1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYz0xNzA4PXN0YXRpYyB2b2lkIGFmdGVyX3N0YXRlX2NoKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCB1bmlvbiBkcmJkX3N0YXRlIG9zLFxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0yMDM2LVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjAzNzpzdHJ1Y3QgYWZ0ZXJfY29ubl9zdGF0ZV9jaGdfd29yayB7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0yMDM4LVxcdHN0cnVjdCBkcmJkX3dvcmsgdztcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM9MjA0Nz1zdGF0aWMgaW50IHdfYWZ0ZXJfY29ubl9zdGF0ZV9jaChzdHJ1Y3QgZHJiZF93b3JrICp3LCBpbnQgdW51c2VkKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjA0OC17XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYzoyMDQ5OlxcdHN0cnVjdCBhZnRlcl9jb25uX3N0YXRlX2NoZ193b3JrICphY3NjdyA9XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYzoyMDUwOlxcdFxcdGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgYWZ0ZXJfY29ubl9zdGF0ZV9jaGdfd29yaywgdyk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0yMDUxLVxcdHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSBhY3Njdy1cXHUwMDNlY29ubmVjdGlvbjtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM9MjI5Mz1fY29ubl9yZXF1ZXN0X3N0YXRlKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHVuaW9uIGRyYmRfc3RhdGUgbWFzaywgdW5pb24gZHJiZF9zdGF0ZSB2YWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTIyOTYtXFx0ZW51bSBkcmJkX3N0YXRlX3J2IHJ2ID0gU1NfU1VDQ0VTUztcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jOjIyOTc6XFx0c3RydWN0IGFmdGVyX2Nvbm5fc3RhdGVfY2hnX3dvcmsgKmFjc2N3O1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjI5OC1cXHRlbnVtIGRyYmRfY29ubnMgb2MgPSBjb25uZWN0aW9uLVxcdTAwM2Vjc3RhdGU7XFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM9MTc4PXN0cnVjdCByb2NrY2hpcF91c2IycGh5X2NmZyB7XFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMjAwLSAqIEBtdXRleDogZm9yIHJlZ2lzdGVyIHVwZGF0aW5nIGluIHNtX3dvcmsuXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjIwMTogKiBAY2hnX3dvcms6IGNoYXJnZSBkZXRlY3Qgd29yay5cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMjAyLSAqIEBvdGdfc21fd29yazogT1RHIHN0YXRlIG1hY2hpbmUgd29yay5cXG4tLVxcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYz0yMDk9c3RydWN0IHJvY2tjaGlwX3VzYjJwaHlfcG9ydCB7XFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMjE5LVxcdHN0cnVjdCBtdXRleFxcdG11dGV4O1xcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYzoyMjA6XFx0c3RydWN0XFx0XFx0ZGVsYXllZF93b3JrIGNoZ193b3JrO1xcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYy0yMjEtXFx0c3RydWN0XFx0XFx0ZGVsYXllZF93b3JrIG90Z19zbV93b3JrO1xcbi0tXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTY1MD1zdGF0aWMgaW50IHJvY2tjaGlwX3VzYjJwaHlfZXhpdChzdHJ1Y3QgcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtNjU3LVxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cnBvcnQtXFx1MDAzZW90Z19zbV93b3JrKTtcXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM6NjU4OlxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cnBvcnQtXFx1MDAzZWNoZ193b3JrKTtcXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtNjU5LVxcdH0gZWxzZSBpZiAocnBvcnQtXFx1MDAzZXBvcnRfaWQgPT0gVVNCMlBIWV9QT1JUX0hPU1QpXFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM9NjczPXN0YXRpYyB2b2lkIHJvY2tjaGlwX3VzYjJwaHlfb3RnX3NtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTcwNy1cXHRcXHRcXHRjYXNlIFVTQl9DSEdfU1RBVEVfVU5ERUZJTkVEOlxcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYzo3MDg6XFx0XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZycG9ydC1cXHUwMDNlY2hnX3dvcmssIDApO1xcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYy03MDktXFx0XFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTgyNj1zdGF0aWMgdm9pZCByb2NrY2hpcF9jaGdfZGV0ZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTgyOC1cXHRzdHJ1Y3Qgcm9ja2NoaXBfdXNiMnBoeV9wb3J0ICpycG9ydCA9XFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjgyOTpcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJvY2tjaGlwX3VzYjJwaHlfcG9ydCwgY2hnX3dvcmsud29yayk7XFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTgzMC1cXHRzdHJ1Y3Qgcm9ja2NoaXBfdXNiMnBoeSAqcnBoeSA9IGRldl9nZXRfZHJ2ZGF0YShycG9ydC1cXHUwMDNlcGh5LVxcdTAwM2VkZXYucGFyZW50KTtcXG4tLVxcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYy05MTYtXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjkxNzpcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnJwb3J0LVxcdTAwM2VjaGdfd29yaywgZGVsYXkpO1xcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYy05MTgtfVxcbi0tXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTEyOTA9c3RhdGljIGludCByb2NrY2hpcF91c2IycGh5X290Z19wb3J0X2luaXQoc3RydWN0IHJvY2tjaGlwX3VzYjJwaHkgKnJwaHksXFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMTMxNy1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM6MTMxODpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cnBvcnQtXFx1MDAzZWNoZ193b3JrLCByb2NrY2hpcF9jaGdfZGV0ZWN0X3dvcmspO1xcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYy0xMzE5LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZycG9ydC1cXHUwMDNlb3RnX3NtX3dvcmssIHJvY2tjaGlwX3VzYjJwaHlfb3RnX3NtX3dvcmspO1xcbi0tXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvcGYxNTUwLWNoYXJnZXIuYz0xODA9c3RhdGljIHZvaWQgcGYxNTUwX2NoZ19iYXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jLTIxNi1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jOjIxNzpzdGF0aWMgdm9pZCBwZjE1NTBfY2hnX2NoZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jLTIxOC17XFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jPTU0OT1zdGF0aWMgaW50IHBmMTU1MF9jaGFyZ2VyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jLTU3NS1cXHRyZXQgPSBkZXZtX2RlbGF5ZWRfd29ya19hdXRvY2FuY2VsKGNoZy1cXHUwMDNlZGV2LCBcXHUwMDI2Y2hnLVxcdTAwM2VjaGdfc2Vuc2Vfd29yayxcXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jOjU3NjpcXHRcXHRcXHRcXHRcXHQgICBwZjE1NTBfY2hnX2NoZ193b3JrKTtcXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jLTU3Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy91c2IvY2hpcGlkZWEvY2lfaGRyY19pbXguYz0zMTM9c3RhdGljIGludCBjaV9oZHJjX2lteF9ub3RpZnlfZXZlbnQoc3RydWN0IGNpX2hkcmMgKmNpLCB1bnNpZ25lZCBpbnQgZXZlbnQpXFxuLS1cXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jLTM0Mi1cXHRcXHRpZiAoY2ktXFx1MDAzZXVzYl9waHkpXFxuZHJpdmVycy91c2IvY2hpcGlkZWEvY2lfaGRyY19pbXguYzozNDM6XFx0XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2Y2ktXFx1MDAzZXVzYl9waHktXFx1MDAzZWNoZ193b3JrKTtcXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jLTM0NC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jPTE4OTc9c3RhdGljIGludCBjaV91ZGNfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKVxcbi0tXFxuZHJpdmVycy91c2IvY2hpcGlkZWEvdWRjLmMtMTkwNy1cXHRpZiAoY2ktXFx1MDAzZXVzYl9waHkpXFxuZHJpdmVycy91c2IvY2hpcGlkZWEvdWRjLmM6MTkwODpcXHRcXHR1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKGNpLVxcdTAwM2V1c2JfcGh5LCBpc19hY3RpdmUgP1xcbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jLTE5MDktXFx0XFx0XFx0VVNCX0NIQVJHRVJfUFJFU0VOVCA6IFVTQl9DSEFSR0VSX0FCU0VOVCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9Nzc9c3RhdGljIHZvaWQgdXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTEwMS0gKiBJZiB3ZSBnZXQgdGhlIGNoYXJnZXIgdHlwZSBmcm9tIC1cXHUwMDNlY2hhcmdlcl9kZXRlY3QoKSBpbnN0ZWFkIG9mIGV4dGNvblxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoxMDI6ICogc3Vic3lzdGVtLCB0aGUgdXNiIHBoeSBkcml2ZXIgc2hvdWxkIGlzc3VlIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoKVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xMDMtICogdG8gc2V0IGNoYXJnZXIgc3RhdGUgd2hlbiB0aGUgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTEwNT1zdGF0aWMgdm9pZCB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xMDYte1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoxMDc6XFx0c3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMTA4LVxcdGNoYXIgdWNoZ2VyX3N0YXRlWzUwXSA9IHsgMCB9O1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTEzOT1zdGF0aWMgdm9pZCBfX3VzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZShzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xNTctXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjE1ODpcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ1c2JfcGh5LVxcdTAwM2VjaGdfd29yayk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTE1OS19XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9MTcwPXN0YXRpYyBpbnQgdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMTcyLXtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MTczOlxcdHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5ID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgdXNiX3BoeSwgdHlwZV9uYik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTE3NC1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0xOTM9dm9pZCB1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHksIHVuc2lnbmVkIGludCBtQSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yMjctXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjIyODpcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ1c2JfcGh5LVxcdTAwM2VjaGdfd29yayk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTIyOS19XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9MjY4PUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfZ2V0X2NoYXJnZXJfY3VycmVudCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjcwLS8qKlxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyNzE6ICogdXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSAtIHNldCB0aGUgVVNCIGNoYXJnZXIgc3RhdGVcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjcyLSAqIEB1c2JfcGh5OiB0aGUgVVNCIHBoeSB0byBiZSB1c2VkXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjc4LSAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyNzk6dm9pZCB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5LFxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yODAtXFx0XFx0XFx0ICAgICAgIGVudW0gdXNiX2NoYXJnZXJfc3RhdGUgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjkwLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyOTE6XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dXNiX3BoeS1cXHUwMDNlY2hnX3dvcmspO1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yOTItfVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyOTM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI5NC1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0zMTE9c3RhdGljIHZvaWQgdXNiX2NoYXJnZXJfaW5pdChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zMTUtXFx0dXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHVzYl9waHkpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzozMTY6XFx0SU5JVF9XT1JLKFxcdTAwMjZ1c2JfcGh5LVxcdTAwM2VjaGdfd29yaywgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzE3LX1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0zMTk9c3RhdGljIGludCB1c2JfYWRkX2V4dGNvbihzdHJ1Y3QgdXNiX3BoeSAqeClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNDMtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MzQ0OlxcdFxcdFxcdHgtXFx1MDAzZXR5cGVfbmIubm90aWZpZXJfY2FsbCA9IHVzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzQ1LVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM0Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgRVhUQ09OX0NIR19VU0JfU0RQLFxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzozNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ4LVxcdTAwM2V0eXBlX25iKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzQ5LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNTYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIEVYVENPTl9DSEdfVVNCX0NEUCxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MzU3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2eC1cXHUwMDNldHlwZV9uYik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM1OC1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzY1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBFWFRDT05fQ0hHX1VTQl9EQ1AsXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjM2NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNngtXFx1MDAzZXR5cGVfbmIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNjctXFx0XFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM3NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgRVhUQ09OX0NIR19VU0JfQUNBLFxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzozNzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ4LVxcdTAwM2V0eXBlX25iKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzc2LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy00MDEtXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjQwMjpcXHRpZiAoeC1cXHUwMDNldHlwZV9uYi5ub3RpZmllcl9jYWxsKVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy00MDMtXFx0XFx0X191c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUoeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM0OjU2LjY4OTIzMTI1NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzY4NDUzMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFVTQiBQSFkgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgVVNCX1BIWWAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgY2FuIGJlIGJ1aWx0LCBlc3BlY2lhbGx5IGlmIGl0J3MgZmVhc2libGUgb24geDg2L2FtZDY0IGFyY2hpdGVjdHVyZXMuIFRoZSBjb2RlIHN1Z2dlc3RzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgYE5PUF9VU0JfWENFSVZgIGFuZCBgVVNCX1BIWWAgdGhlbXNlbHZlcy5cblxuTG9va2luZyBhdCBgZHJpdmVycy91c2IvcGh5L0tjb25maWdgLCBJIGNhbiBzZWUgYSBkZXBlbmRlbmN5OiBgVVNCX1BIWWAgZGVmYXVsdHMgdG8gYHlgICh5ZXMpIGlmIGBFWFRDT05gIGlzIGVuYWJsZWQsIGFuZCBpbXBvcnRhbnRseSwgc2VsZWN0cyBgRVhUQ09OYC4gYE5PUF9VU0JfWENFSVZgIGlzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBkZXBlbmRzIG9uIGVpdGhlciBgVVNCX0dBREdFVGAgb3IgdGhlIG5lZ2F0aW9uIG9mIGBVU0JfR0FER0VUYCwgc28gaWYgdGhlIGxhdHRlciBpcyBtb2R1bGFyLCBgTk9QX1VTQl9YQ0VJVmAgY2FuJ3QgYmUgYnVpbHQtaW4uIEl0IGFsc28gKnNlbGVjdHMqIGBVU0JfUEhZYC4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgaGllcmFyY2h5IG9yIHJlbGF0aW9uc2hpcCB3aGVyZSBgTk9QX1VTQl9YQ0VJVmAgY2FuIHVzZSB0aGUgdW5kZXJseWluZyBgVVNCX1BIWWAuXG5cblRoZW4sIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSByZWluZm9yY2VzIHRoZSBidWlsZCBsb2dpYzogYG9iai0kKENPTkZJR19VU0JfUEhZKSArPSBwaHkub2AgbWVhbnMgaWYgYFVTQl9QSFlgIGlzIGVuYWJsZWQsIGBwaHkub2AgaXMgYnVpbHQuIFNpbWlsYXJseSwgYG9iai0kKENPTkZJR19OT1BfVVNCX1hDRUlWKSArPSBwaHktZ2VuZXJpYy5vYCBidWlsZHMgYHBoeS1nZW5lcmljLm9gIHdoZW4gYE5PUF9VU0JfWENFSVZgIGlzIHNlbGVjdGVkLlxuXG5TbywgdGhlIGtleSBjb25maWd1cmF0aW9uIGZsYWdzIEkgbmVlZCB0byBjb25zaWRlciBhcmUgYFVTQl9QSFlgIGFuZCBgTk9QX1VTQl9YQ0VJVmAuIEkgc2hvdWxkIG5vdyBleHBsb3JlIGRlcGVuZGVuY2llcyBsaWtlIGBVU0JfU1VQUE9SVGAgYW5kIGBVU0JfUEhZYCBpbiB0aGUgS2NvbmZpZyBmaWxlcyB0byBkZXRlcm1pbmUgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBQSFkgdG8gYmUgYnVpbHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjI3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM1OjAxLjA1NzY4NzU3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNDc2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBVU0JfU1VQUE9SVHxjb25maWcgVVNCX1BIWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9LY29uZmlnPTI2PWNvbmZpZyBVU0JfVUhDSV9CSUdfRU5ESUFOX0RFU0NcXG4tLVxcbmRyaXZlcnMvdXNiL0tjb25maWctMjgtXFxuZHJpdmVycy91c2IvS2NvbmZpZzoyOTptZW51Y29uZmlnIFVTQl9TVVBQT1JUXFxuZHJpdmVycy91c2IvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJVU0Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTU9bWVudSBcXFwiVVNCIFBoeXNpY2FsIExheWVyIGRyaXZlcnNcXFwiXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctNi1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo3OmNvbmZpZyBVU0JfUEhZXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctOC1cXHRzZWxlY3QgRVhUQ09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM1OjAxLjExODg0MzI1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc4OTYxMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBVU0IgUEhZIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy91c2IvcGh5L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFVTQiBQSFkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGZpcnN0IDUwIGxpbmVzLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGNvdmVyIHRoZSBjb3JlIG9wdGlvbnMsIHBlcmhhcHMgaW5jbHVkaW5nIHRob3NlIHJlbGF0ZWQgdG8gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdmVuZG9yLXNwZWNpZmljIFBIWSBzdXBwb3J0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSB0aGUgc2VsZWN0aW9uIG9mIGRpZmZlcmVudCBQSFkgdHlwZXMgKE9URywgaG9zdCwgZGV2aWNlKSwgcG93ZXIgbWFuYWdlbWVudCBvcHRpb25zLCBhbmQgcG9zc2libHkgc29tZSBiYXNpYyBkZXZpY2UtdHJlZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGlmIHRoZXkgYXJlIGRlZmluZWQgdGhhdCBlYXJseSBpbiB0aGUgZmlsZS4gSSBhbHNvIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBjaGVja3MgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgZ29vZCBiYXNlbGluZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIFVTQiBQSFkgZmVhdHVyZXMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzU6MDMuMTk3ODA3Mjg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL3BoeS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQaHlzaWNhbCBMYXllciBVU0IgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdG1lbnUgXFxcIlVTQiBQaHlzaWNhbCBMYXllciBkcml2ZXJzXFxcIlxcbiAgIDY6XFx0XFxuICAgNzpcXHRjb25maWcgVVNCX1BIWVxcbiAgIDg6XFx0XFx0c2VsZWN0IEVYVENPTlxcbiAgIDk6XFx0XFx0ZGVmX2Jvb2wgblxcbiAgMTA6XFx0XFxuICAxMTpcXHQjXFxuICAxMjpcXHQjIFVTQiBUcmFuc2NlaXZlciBEcml2ZXJzXFxuICAxMzpcXHQjXFxuICAxNDpcXHRjb25maWcgQUI4NTAwX1VTQlxcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIkFCODUwMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBBQjg1MDBfQ09SRVxcbiAgMTc6XFx0XFx0c2VsZWN0IFVTQl9QSFlcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgVVNCIE9URyB0cmFuc2NlaXZlciBpbiBBQjg1MDAgY2hpcC5cXG4gIDIwOlxcdFxcdCAgVGhpcyB0cmFuc2NlaXZlciBzdXBwb3J0cyBoaWdoIGFuZCBmdWxsIHNwZWVkIGRldmljZXMgcGx1cyxcXG4gIDIxOlxcdFxcdCAgaW4gaG9zdCBtb2RlLCBsb3cgc3BlZWQuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBGU0xfVVNCMl9PVEdcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgVVNCIE9URyBUcmFuc2NlaXZlciBEcml2ZXJcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIFVTQl9FSENJX0ZTTCBcXHUwMDI2XFx1MDAyNiBVU0JfRlNMX1VTQjIgXFx1MDAyNlxcdTAwMjYgVVNCX09UR19GU009eSBcXHUwMDI2XFx1MDAyNiBQTVxcbiAgMjY6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCB0aGlzIGNhbid0IGJlICd5J1xcbiAgMjc6XFx0XFx0c2VsZWN0IFVTQl9QSFlcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCBGcmVlc2NhbGUgVVNCIE9URyB0cmFuc2NlaXZlci5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIEtFWVNUT05FX1VTQl9QSFlcXG4gIDMyOlxcdFxcdHRyaXN0YXRlIFxcXCJLZXlzdG9uZSBVU0IgUEhZIERyaXZlclxcXCJcXG4gIDMzOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9LRVlTVE9ORSB8fCBDT01QSUxFX1RFU1RcXG4gIDM0OlxcdFxcdGRlcGVuZHMgb24gTk9QX1VTQl9YQ0VJVlxcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFx0ICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IEtleXN0b25lIFVTQiBwaHkuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXFxuICAzNzpcXHRcXHQgIGludGVyZmFjZSB0byBpbnRlcmFjdCB3aXRoIFVTQiAyLjAgYW5kIFVTQiAzLjAgUEhZIHRoYXQgaXMgcGFydFxcbiAgMzg6XFx0XFx0ICBvZiB0aGUgS2V5c3RvbmUgU09DLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgTk9QX1VTQl9YQ0VJVlxcbiAgNDE6XFx0XFx0dHJpc3RhdGUgXFxcIk5PUCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyXFxcIlxcbiAgNDI6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCBOT1AgY2FuJ3QgYmUgYnVpbHQtaW5cXG4gIDQzOlxcdFxcdHNlbGVjdCBVU0JfUEhZXFxuICA0NDpcXHRcXHRoZWxwXFxuICA0NTpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIHRvIGJlIHVzZWQgYnkgYWxsIHRoZSB1c2IgdHJhbnNjZWl2ZXIgd2hpY2ggYXJlIGVpdGhlclxcbiAgNDY6XFx0XFx0ICBidWlsdC1pbiB3aXRoIHVzYiBpcCBvciB3aGljaCBhcmUgYXV0b25vbW91cyBhbmQgZG9lc24ndCByZXF1aXJlIGFueVxcbiAgNDc6XFx0XFx0ICBwaHkgcHJvZ3JhbW1pbmcgc3VjaCBhcyBJU1AxeDA0IGV0Yy5cXG4gIDQ4OlxcdFxcbiAgNDk6XFx0Y29uZmlnIEFNMzM1WF9DT05UUk9MX1VTQlxcbiAgNTA6XFx0XFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzU6MDMuMTk3ODc2Mzk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2Nzk0NjcyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFVTQiBQSFkgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIFVTQiBQSFkgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZHJpdmVycy91c2IvcGh5L3BoeS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjb25uZWN0aW9uczogYFVTQl9QSFlgIGlzIHRyaWdnZXJlZCBieSBhIHdob2xlIHNsZXcgb2YgY29uZmlndXJhdGlvbnMgbGlrZSBgTk9QX1VTQl9YQ0VJVmAsIGBVU0JfR1BJT19WQlVTYCwgYFVTQl9JU1AxMzAxYCwgYW5kIHNvIG9uLCBhbGwgbmVzdGVkIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgVVNCX1NVUFBPUlRgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IGNoYXJnZXIgbm90aWZpY2F0aW9ucyBhbmQgZGV2aWNlIHR5cGUgaW5mb3JtYXRpb24gYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseTpcblxuKiAgIGB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtgOiBUaGlzIGlzIHdoZXJlIHRoZSB1ZXZlbnQgZ2VuZXJhdGlvbiBpcyBub3cgaGFuZGxlZCB1c2luZyBga29iamVjdF91ZXZlbnRfZW52KClgIGluc3RlYWQgb2YgdGhlIG9sZCBga29iamVjdF91ZXZlbnQoKWAgbWV0aG9kLlxuKiAgIGB1c2JfYWRkX3BoeV9kZXZgOiBUaGUgc2V0dGluZyBvZiBgeC1cdTAwM2VkZXYtXHUwMDNldHlwZWAgdG8gYFx1MDAyNnVzYl9waHlfZGV2X3R5cGVgIGhhcyBiZWVuIHJlbW92ZWQuXG4qICAgYHVzYl9waHlfdWV2ZW50YCBhbmQgYF9fZGV2aWNlX3RvX3VzYl9waHlgIGFyZSBkZWxldGVkLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBhbSBmb2xsb3dpbmcgbXkgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeS4gVGhlIHJlYWNoYWJpbGl0eSBhbmFseXNpcyBpcyBrZXksIGFuZCBpdCBhcHBlYXJzIHRoZSBjaGFuZ2VzIGFyZSAqZXhlY3V0YWJsZSBrZXJuZWwgY29kZSogcmVhY2hhYmxlIHRocm91Z2ggdmFyaW91cyBtZWFucy4gU3BlY2lmaWNhbGx5LCBgTk9QX1VTQl9YQ0VJVmAgYW5kIHRoZSBVU0IgUEhZIGZyYW1ld29yayBhcmUgbG9hZGFibGUvY29tcGlsYWJsZSBpbnRvIHRoZSBrZXJuZWwsIHdpdGggVVNCIGdhZGdldCwgY2hpcGlkZWEsIG9yIGV4dGNvbiBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIGNoYXJnZXIgd29yayBvciBhZGRpbmcgdGhlIFBIWS4gU28sIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIGFyZSByZWxldmFudC5cblxuU28sIHRoaXMgaXMgYSBjb2RlIHJlZmFjdG9yaW5nIHRoYXQgaW1wYWN0cyBob3cgY2hhcmdlciBldmVudHMgYW5kIGRldmljZSBkYXRhIGFyZSBleHBvc2VkLiBXZSBoYXZlIGtleSBmdW5jdGlvbnMgLSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYCwgYHVzYl9hZGRfcGh5X2RldmAsIGB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlYCwgYHVzYl9waHlfc2V0X2NoYXJnZXJfY3VycmVudGAuIFRoZSByZWxldmFudCBjb25maWdzIGFyZTogYFVTQl9TVVBQT1JUYCwgYFVTQl9QSFlgLCBhbmQgYE5PUF9VU0JfWENFSVZgLlxuXG5JbiBlc3NlbmNlLCB0aGUgcGF0Y2ggaXMgbW9kZXJuaXppbmcgdGhlIHVldmVudCBzeXN0ZW0gd2l0aGluIHRoZSBVU0IgUEhZLCBzd2l0Y2hpbmcgZnJvbSBhc3NpZ25pbmcgdGhlIGBkZXYtXHUwMDNldHlwZWAgYW5kIGEgY3VzdG9tIHVldmVudCBmdW5jdGlvbiB0byBhIG1vcmUgZGlyZWN0IGBrb2JqZWN0X3VldmVudF9lbnYoKWAgY2FsbC4gVGhpcyBzdHJlYW1saW5lcyB0aGUgZXZlbnQgaGFuZGxpbmcgZm9yIGNoYXJnZXIgbm90aWZpY2F0aW9ucyBhbmQgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGlzIGlzIGEgcmVmYWN0b3Jpbmcgb2YgZXhlY3V0YWJsZSBjb2RlLCB3aGljaCBpbXBhY3RzIGhvdyBldmVudHMgYXJlIGdlbmVyYXRlZCBieSB0aGUga2VybmVsLiBCZWNhdXNlIHRoaXMgaXMgcmVmYWN0b3JpbmcgYW5kIHRvdWNoIHVldmVudHMsIGZ1enppbmcgdG8gY2hlY2sgZm9yIHJlZ3Jlc3Npb25zIGlzIGFuIGFic29sdXRlIG11c3QhXG5cbkxldCdzIGxvZyB0aGUgZmluZGluZ3MgdXNpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwMDAsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzU6MDguODc3MzQ3NDg5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1ODA5NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9TVVBQT1JUXCIsXG4gICAgXCJVU0JfUEhZXCIsXG4gICAgXCJOT1BfVVNCX1hDRUlWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrXCIsXG4gICAgXCJ1c2JfYWRkX3BoeV9kZXZcIixcbiAgICBcInVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGVcIixcbiAgICBcInVzYl9waHlfc2V0X2NoYXJnZXJfY3VycmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdWV2ZW50IHJlcG9ydGluZyBtZWNoYW5pc20gZm9yIFVTQiBQSFkgY2hhcmdlciBldmVudHMgaW4gZHJpdmVycy91c2IvcGh5L3BoeS5jLiBJbnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgZGV2aWNlIHR5cGUgYW5kIGltcGxlbWVudGluZyBhIGN1c3RvbSB1ZXZlbnQgY2FsbGJhY2ssIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgY2hhcmdlciBzdGF0ZSBhbmQgdHlwZSBhcmUgbm93IGNvbnN0cnVjdGVkIGFuZCBwYXNzZWQgZGlyZWN0bHkgdmlhIGtvYmplY3RfdWV2ZW50X2VudigpIHdpdGhpbiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgUEhZIGNvcmUgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1NVUFBPUlRcIixcbiAgICBcIlVTQl9QSFlcIixcbiAgICBcIk5PUF9VU0JfWENFSVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtcIixcbiAgICBcInVzYl9hZGRfcGh5X2RldlwiLFxuICAgIFwidXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZVwiLFxuICAgIFwidXNiX3BoeV9zZXRfY2hhcmdlcl9jdXJyZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1ZXZlbnQgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3IgVVNCIFBIWSBjaGFyZ2VyIGV2ZW50cyBpbiBkcml2ZXJzL3VzYi9waHkvcGh5LmMuIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHlwZSBhbmQgaW1wbGVtZW50aW5nIGEgY3VzdG9tIHVldmVudCBjYWxsYmFjaywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjaGFyZ2VyIHN0YXRlIGFuZCB0eXBlIGFyZSBub3cgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCBkaXJlY3RseSB2aWEga29iamVjdF91ZXZlbnRfZW52KCkgd2l0aGluIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBQSFkgY29yZSBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzU6MDguOTUzOTM2MjMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU0OTI0ODE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM1OjA4Ljk1NDQ3NDU5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxNTQ4NzA0ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFVTQiBQSFkgdWV2ZW50IG5vdGlmaWNhdGlvbiBieSBzZW5kaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKClgIHVzaW5nIGBrb2JqZWN0X3VldmVudF9lbnYoKWAgcmF0aGVyIHRoYW4gdmlhIGEgYGRldmljZV90eXBlLnVldmVudGAgY2FsbGJhY2suIFxcblxcbkFsbCBzdGFjayBidWZmZXJzIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaCAoYHVjaGdlcl9zdGF0ZWAsIGB1Y2hnZXJfdHlwZWAsIGFuZCBgZW52cGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCAvIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIHdpdGggTlVMTCB0ZXJtaW5hdG9yKSBiZWZvcmUgc3RyaW5nIGZvcm1hdHRpbmcgdmlhIGBzbnByaW50ZigpYCBhbmQgYmVpbmcgcGFzc2VkIHRvIGBrb2JqZWN0X3VldmVudF9lbnYoKWAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXJyYXkgaW5kZXhpbmcgKGUuZy4gYHVzYl9jaGdlcl90eXBlYCkgYXJlIGJvdW5kcyBjaGVjayAvIG91dC1vZi1ib3VuZHMgcmVhZCBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NmVmZDU3MWMzZDIxMTdhODg2ZGQ3ZDFkNDQ4YTViYzA2YWFmZjJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMTozNDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHkuYyBiL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xuaW5kZXggNWE5YjkzNTNmMzQzZC4uN2M4NWM3Y2ExZDMwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xuKysrIGIvZHJpdmVycy91c2IvcGh5L3BoeS5jXG5AQCAtNDIsMTIgKzQyLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl90eXBlW10gPSB7XG4gXHRbQUNBX1RZUEVdXHRcdFx0PSBcIlVTQl9DSEFSR0VSX0FDQV9UWVBFXCIsXG4gfTtcbiBcbi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3N0YXRlW10gPSB7XG4tXHRbVVNCX0NIQVJHRVJfREVGQVVMVF1cdD0gXCJVU0JfQ0hBUkdFUl9ERUZBVUxUXCIsXG4tXHRbVVNCX0NIQVJHRVJfUFJFU0VOVF1cdD0gXCJVU0JfQ0hBUkdFUl9QUkVTRU5UXCIsXG4tXHRbVVNCX0NIQVJHRVJfQUJTRU5UXVx0PSBcIlVTQl9DSEFSR0VSX0FCU0VOVFwiLFxuLX07XG4tXG4gc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIFx0ZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcbiB7XG5AQCAtODAsMTggKzc0LDYgQEAgc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4gXHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX2RldmljZV90b191c2JfcGh5KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldilcbi17XG4tXHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeTtcbi1cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkodXNiX3BoeSwgXHUwMDI2cGh5X2xpc3QsIGhlYWQpIHtcbi1cdFx0aWYgKHVzYl9waHktXHUwMDNlZGV2ID09IGRldilcbi1cdFx0XHRyZXR1cm4gdXNiX3BoeTtcbi1cdH1cbi1cbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4ge1xuIFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLnNkcF9taW4gPSBERUZBVUxUX1NEUF9DVVJfTUlOO1xuQEAgLTEyMyw2ICsxMDUsOSBAQCBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4gc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX3BoeSwgY2hnX3dvcmspO1xuK1x0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XG4rXHRjaGFyIHVjaGdlcl90eXBlWzUwXSA9IHsgMCB9O1xuK1x0Y2hhciAqZW52cFtdID0geyB1Y2hnZXJfc3RhdGUsIHVjaGdlcl90eXBlLCBOVUxMIH07XG4gXHR1bnNpZ25lZCBpbnQgbWluLCBtYXg7XG4gXG4gXHRzd2l0Y2ggKHVzYl9waHktXHUwMDNlY2hnX3N0YXRlKSB7XG5AQCAtMTMwLDExICsxMTUsMTUgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0dXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KHVzYl9waHksIFx1MDAyNm1pbiwgXHUwMDI2bWF4KTtcbiBcbiBcdFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2dXNiX3BoeS1cdTAwM2Vub3RpZmllciwgbWF4LCB1c2JfcGh5KTtcbitcdFx0c25wcmludGYodWNoZ2VyX3N0YXRlLCBBUlJBWV9TSVpFKHVjaGdlcl9zdGF0ZSksXG4rXHRcdFx0IFwiVVNCX0NIQVJHRVJfU1RBVEU9JXNcIiwgXCJVU0JfQ0hBUkdFUl9QUkVTRU5UXCIpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVVNCX0NIQVJHRVJfQUJTRU5UOlxuIFx0XHR1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQodXNiX3BoeSk7XG4gXG4gXHRcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnVzYl9waHktXHUwMDNlbm90aWZpZXIsIDAsIHVzYl9waHkpO1xuK1x0XHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcbitcdFx0XHQgXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1wiLCBcIlVTQl9DSEFSR0VSX0FCU0VOVFwiKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRkZXZfd2Fybih1c2JfcGh5LVx1MDAzZWRldiwgXCJVbmtub3duIFVTQiBjaGFyZ2VyIHN0YXRlOiAlZFxcblwiLFxuQEAgLTE0MiwzNiArMTMxLDkgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0a29iamVjdF91ZXZlbnQoXHUwMDI2dXNiX3BoeS1cdTAwM2VkZXYtXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHVzYl9waHlfdWV2ZW50KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KVxuLXtcbi1cdGNvbnN0IHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5O1xuLVx0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XG4tXHRjaGFyIHVjaGdlcl90eXBlWzUwXSA9IHsgMCB9O1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoeV9sb2NrLCBmbGFncyk7XG4tXHR1c2JfcGh5ID0gX19kZXZpY2VfdG9fdXNiX3BoeShkZXYpO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xuLVxuLVx0aWYgKCF1c2JfcGh5KVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cbi1cdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxuLVx0XHQgXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1wiLCB1c2JfY2hnZXJfc3RhdGVbdXNiX3BoeS1cdTAwM2VjaGdfc3RhdGVdKTtcbi1cbiBcdHNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSxcbiBcdFx0IFwiVVNCX0NIQVJHRVJfVFlQRT0lc1wiLCB1c2JfY2hnZXJfdHlwZVt1c2JfcGh5LVx1MDAzZWNoZ190eXBlXSk7XG4tXG4tXHRpZiAoYWRkX3VldmVudF92YXIoZW52LCB1Y2hnZXJfc3RhdGUpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGlmIChhZGRfdWV2ZW50X3ZhcihlbnYsIHVjaGdlcl90eXBlKSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHRyZXR1cm4gMDtcbitcdGtvYmplY3RfdWV2ZW50X2VudihcdTAwMjZ1c2JfcGh5LVx1MDAzZWRldi1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxuQEAgLTY3NSwxMSArNjM3LDYgQEAgaW50IHVzYl9hZGRfcGh5KHN0cnVjdCB1c2JfcGh5ICp4LCBlbnVtIHVzYl9waHlfdHlwZSB0eXBlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYWRkX3BoeSk7XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfcGh5X2Rldl90eXBlID0ge1xuLVx0Lm5hbWUgPSBcInVzYl9waHlcIixcbi1cdC51ZXZlbnQgPSB1c2JfcGh5X3VldmVudCxcbi19O1xuLVxuIC8qKlxuICAqIHVzYl9hZGRfcGh5X2RldiAtIGRlY2xhcmUgdGhlIFVTQiBQSFlcbiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxuQEAgLTcwNSw4ICs2NjIsNiBAQCBpbnQgdXNiX2FkZF9waHlfZGV2KHN0cnVjdCB1c2JfcGh5ICp4KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHgtXHUwMDNlZGV2LVx1MDAzZXR5cGUgPSBcdTAwMjZ1c2JfcGh5X2Rldl90eXBlO1xuLVxuIFx0QVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRChcdTAwMjZ4LVx1MDAzZW5vdGlmaWVyKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoeV9sb2NrLCBmbGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNTowOC45NTQ0NzU0NTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUyMzQ0ODE4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIC0gVVNCIFBIWSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBrZXJuZWwgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGFuYWx5emUgdGhlIGNoYW5nZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIGNvdWxkIGV4cG9zZS5cblxuRmlyc3QsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyByZW1vdmluZyBzb21lIG9sZCB1ZXZlbnQtcmVsYXRlZCBjb2RlLCBzcGVjaWZpY2FsbHkgYHVzYl9waHlfdWV2ZW50YCBhbmQgYHVzYl9waHlfZGV2X3R5cGVgLCB3aGljaCB3YXMgc2V0dGluZyB0aGUgYGRldi1cdTAwM2V0eXBlYC4gVGhhdCdzIG5vdCBpbmhlcmVudGx5IHdvcnJpc29tZSwgYnV0IHRoZSByZXBsYWNlbWVudCBpcyB3aGVyZSBteSBhdHRlbnRpb24gbmVlZHMgdG8gZ28uXG5cbk5vdywgaW5zdGVhZCBvZiB0aGUgb2xkIG1ldGhvZCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtgLiBJbnNpZGUgdGhpcyBmdW5jdGlvbiwgaXQgYWxsb2NhdGVzIHNvbWUgc3RhY2sgYXJyYXlzOiBgdWNoZ2VyX3N0YXRlYCBhbmQgYHVjaGdlcl90eXBlYCwgYm90aCA1MCBieXRlcy4gVGhlbiwgaXQgY3JlYXRlcyBhbiBgZW52cGAgYXJyYXkgcG9pbnRpbmcgdG8gdGhlc2UgY2hhcmFjdGVyIGFycmF5cywgd2hpY2ggaXMgdGhlbiBwYXNzZWQgdG8gYGtvYmplY3RfdWV2ZW50X2VudmAuIFRoZSBjb3JlIGxvZ2ljIGludm9sdmVzIGEgc3dpdGNoIHN0YXRlbWVudCBiYXNlZCBvbiBgdXNiX3BoeS1cdTAwM2VjaGdfc3RhdGVgLiBCYXNlZCBvbiB0aGUgc3RhdGUsIGl0IHBvcHVsYXRlcyBgdWNoZ2VyX3N0YXRlYCB3aXRoIHN0cmluZ3MgaW5kaWNhdGluZyBjaGFyZ2VyIHByZXNlbmNlIG9yIGFic2VuY2UgdXNpbmcgYHNucHJpbnRmYC4gQWZ0ZXIgdGhlIHN3aXRjaCwgaXQgcG9wdWxhdGVzIGB1Y2hnZXJfdHlwZWAgc2ltaWxhcmx5LCBiYXNlZCBvbiBgdXNiX2NoZ2VyX3R5cGVgIGFuZCBgdXNiX3BoeS1cdTAwM2VjaGdfdHlwZWAuIEZpbmFsbHksIGl0IGNhbGxzIGBrb2JqZWN0X3VldmVudF9lbnZgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhcm91bmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3Igb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgdGhhdCB0aGVyZSdzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrIGRhdGEuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgc25wcmludGZgIGNhbGxzIGFyZSBzYWZlLlxuXG5TbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgdXNiX2NoZ2VyX3R5cGVgIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB1c2JfcGh5LVx1MDAzZWNoZ190eXBlYCwgdG8gbWFrZSBzdXJlIHRoZXNlIHZhbHVlcyBhcmUgYm91bmRlZCBhbmQgd2VsbCBjb250cm9sbGVkLiBJJ20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAzMC0xNTAgaW4gYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgc2V0IGFuZCB1c2VkLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBhcnJheSBpbmRleGluZy4gQmFzZWQgb24gdGhpcyBkZWVwZXIgZGl2ZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIHRoaXMgd2FycmFudHMgS01TQU4gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM1OjI0LjE4ODk2MDc1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvcGh5L3BoeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdCNkZWZpbmUgREVGQVVMVF9DRFBfQ1VSX01BWFxcdDUwMDBcXG4gIDI2OlxcdCNkZWZpbmUgREVGQVVMVF9BQ0FfQ1VSX01JTlxcdDE1MDBcXG4gIDI3OlxcdCNkZWZpbmUgREVGQVVMVF9BQ0FfQ1VSX01BWFxcdDUwMDBcXG4gIDI4OlxcdFxcbiAgMjk6XFx0c3RhdGljIExJU1RfSEVBRChwaHlfbGlzdCk7XFxuICAzMDpcXHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBoeV9sb2NrKTtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0c3RydWN0IHBoeV9kZXZtIHtcXG4gIDMzOlxcdFxcdHN0cnVjdCB1c2JfcGh5ICpwaHk7XFxuICAzNDpcXHRcXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iO1xcbiAgMzU6XFx0fTtcXG4gIDM2OlxcdFxcbiAgMzc6XFx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl90eXBlW10gPSB7XFxuICAzODpcXHRcXHRbVU5LTk9XTl9UWVBFXVxcdFxcdFxcdD0gXFxcIlVTQl9DSEFSR0VSX1VOS05PV05fVFlQRVxcXCIsXFxuICAzOTpcXHRcXHRbU0RQX1RZUEVdXFx0XFx0XFx0PSBcXFwiVVNCX0NIQVJHRVJfU0RQX1RZUEVcXFwiLFxcbiAgNDA6XFx0XFx0W0NEUF9UWVBFXVxcdFxcdFxcdD0gXFxcIlVTQl9DSEFSR0VSX0NEUF9UWVBFXFxcIixcXG4gIDQxOlxcdFxcdFtEQ1BfVFlQRV1cXHRcXHRcXHQ9IFxcXCJVU0JfQ0hBUkdFUl9EQ1BfVFlQRVxcXCIsXFxuICA0MjpcXHRcXHRbQUNBX1RZUEVdXFx0XFx0XFx0PSBcXFwiVVNCX0NIQVJHRVJfQUNBX1RZUEVcXFwiLFxcbiAgNDM6XFx0fTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbiAgNDY6XFx0XFx0ZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcXG4gIDQ3OlxcdHtcXG4gIDQ4OlxcdFxcdHN0cnVjdCB1c2JfcGh5ICAqcGh5ID0gTlVMTDtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaHksIGxpc3QsIGhlYWQpIHtcXG4gIDUxOlxcdFxcdFxcdGlmIChwaHktXFx1MDAzZXR5cGUgIT0gdHlwZSlcXG4gIDUyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRcXHRyZXR1cm4gcGh5O1xcbiAgNTU6XFx0XFx0fVxcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4gIDU4OlxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0c3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRzdHJ1Y3QgdXNiX3BoeSAgKnBoeTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpKVxcbiAgNjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGh5LCBcXHUwMDI2cGh5X2xpc3QsIGhlYWQpIHtcXG4gIDY4OlxcdFxcdFxcdGlmIChub2RlICE9IHBoeS1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlKVxcbiAgNjk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdHJldHVybiBwaHk7XFxuICA3MjpcXHRcXHR9XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xcbiAgNzU6XFx0fVxcbiAgNzY6XFx0XFxuICA3NzpcXHRzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXFxuICA3ODpcXHR7XFxuICA3OTpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLnNkcF9taW4gPSBERUZBVUxUX1NEUF9DVVJfTUlOO1xcbiAgODA6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5zZHBfbWF4ID0gREVGQVVMVF9TRFBfQ1VSX01BWDtcXG4gIDgxOlxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19jdXIuZGNwX21pbiA9IERFRkFVTFRfRENQX0NVUl9NSU47XFxuICA4MjpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLmRjcF9tYXggPSBERUZBVUxUX0RDUF9DVVJfTUFYO1xcbiAgODM6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5jZHBfbWluID0gREVGQVVMVF9DRFBfQ1VSX01JTjtcXG4gIDg0OlxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19jdXIuY2RwX21heCA9IERFRkFVTFRfQ0RQX0NVUl9NQVg7XFxuICA4NTpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLmFjYV9taW4gPSBERUZBVUxUX0FDQV9DVVJfTUlOO1xcbiAgODY6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5hY2FfbWF4ID0gREVGQVVMVF9BQ0FfQ1VSX01BWDtcXG4gIDg3OlxcdH1cXG4gIDg4OlxcdFxcbiAgODk6XFx0LyoqXFxuICA5MDpcXHQgKiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsgLSBub3RpZnkgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXFxuICA5MTpcXHQgKiBAd29yazogdGhlIGNoYXJnZXIgd29yayB0byBub3RpZnkgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXFxuICA5MjpcXHQgKlxcbiAgOTM6XFx0ICogVGhpcyB3b3JrIGNhbiBiZSBpc3N1ZWQgd2hlbiBVU0IgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIG9yXFxuICA5NDpcXHQgKiBVU0IgY2hhcmdlciBjdXJyZW50IGhhcyBiZWVuIGNoYW5nZWQsIHRoZW4gd2UgY2FuIG5vdGlmeSB0aGUgY3VycmVudFxcbiAgOTU6XFx0ICogd2hhdCBjYW4gYmUgZHJhd24gdG8gcG93ZXIgdXNlciBhbmQgdGhlIGNoYXJnZXIgc3RhdGUgdG8gdXNlcnNwYWNlLlxcbiAgOTY6XFx0ICpcXG4gIDk3OlxcdCAqIElmIHdlIGdldCB0aGUgY2hhcmdlciB0eXBlIGZyb20gZXh0Y29uIHN1YnN5c3RlbSwgd2UgY2FuIG5vdGlmeSB0aGVcXG4gIDk4OlxcdCAqIGNoYXJnZXIgc3RhdGUgdG8gcG93ZXIgdXNlciBhdXRvbWF0aWNhbGx5IGJ5IHVzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZSgpXFxuICA5OTpcXHQgKiBpc3N1aW5nIGZyb20gZXh0Y29uIHN1YnN5c3RlbS5cXG4gMTAwOlxcdCAqXFxuIDEwMTpcXHQgKiBJZiB3ZSBnZXQgdGhlIGNoYXJnZXIgdHlwZSBmcm9tIC1cXHUwMDNlY2hhcmdlcl9kZXRlY3QoKSBpbnN0ZWFkIG9mIGV4dGNvblxcbiAxMDI6XFx0ICogc3Vic3lzdGVtLCB0aGUgdXNiIHBoeSBkcml2ZXIgc2hvdWxkIGlzc3VlIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoKVxcbiAxMDM6XFx0ICogdG8gc2V0IGNoYXJnZXIgc3RhdGUgd2hlbiB0aGUgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxcbiAxMDQ6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM1OjI0LjE4OTA2NjEzOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzE0MDkzMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJpc2sgQXNzZXNzbWVudCBmb3IgVVNCIENoYXJnZXIgVWV2ZW50IFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyB0aGUgdWV2ZW50IGdlbmVyYXRpb24gZm9yIHRoZSBVU0IgY2hhcmdlciBzdGF0ZS4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vdmluZyBmcm9tIHRoZSBgZGV2aWNlX3R5cGUudWV2ZW50YCBjYWxsYmFjayB0byBkaXJlY3RseSBjYWxsaW5nIGBrb2JqZWN0X3VldmVudF9lbnZgIHdpdGhpbiB0aGUgYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2Agd29ya3F1ZXVlIGZ1bmN0aW9uLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIEtNU0FOIHdvdWxkIGZsYWcuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29kZSBkZWZpbmVzIHR3byBjaGFyYWN0ZXIgYXJyYXlzLCBgdWNoZ2VyX3N0YXRlYCBhbmQgYHVjaGdlcl90eXBlYCwgYm90aCBzdGFjay1hbGxvY2F0ZWQgd2l0aCBhIHNpemUgb2YgNTAgYW5kIGluaXRpYWxpemVkIHRvIHplcm8gKGA9IHsgMCB9YCkuIEl0IGFsc28gaW5pdGlhbGl6ZXMgYW4gZW52aXJvbm1lbnQgcG9pbnRlciBhcnJheSBgZW52cGAgY29udGFpbmluZyBwb2ludGVycyB0byB0aGVzZSBzdHJpbmdzIGFuZCBhIE5VTEwgdGVybWluYXRvci4gVGhlbiwgdGhlIGNvZGUgcG9wdWxhdGVzIGB1Y2hnZXJfc3RhdGVgIGFuZCBgdWNoZ2VyX3R5cGVgIHVzaW5nIGBzbnByaW50ZmAuIFRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgYGtvYmplY3RfdWV2ZW50X2VudmAgaXMgY2FsbGVkIHdpdGggdGhlc2UgZm9ybWF0dGVkIHN0cmluZ3MuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXJlJ3Mgbm8gd2F5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQuIExldCdzIG1ha2Ugc3VyZS5cblxuKiAgIGB1Y2hnZXJfc3RhdGVgIGFuZCBgdWNoZ2VyX3R5cGVgIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQuXG4qICAgYGVudnBgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgTlVMTC10ZXJtaW5hdGVkLCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gcHJldmVudCByZWFkLW91dHMuXG4qICAgSSBjb25zaWRlcmVkIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGB1c2JfcGh5LVx1MDAzZWNoZ190eXBlYCwgYnV0IHRoYXQncyBhIHN0YXRpYyBjb25zdCBhcnJheSwgc28gS0FTQU4gd291bGQgY2F0Y2ggaXQuXG4qICAgVGhpcyBpcyB0aGUgc2FtZSBtZXRob2RvbG9neSBhcyB0aGUgb2xkIHZlcnNpb24sIHdoaWNoIHVzZWQgYHVjaGdlcl9zdGF0ZWAgYW5kIGB1Y2hnZXJfdHlwZWAgaW5pdGlhbGl6ZWQgdG8gYHsgMCB9YCB0byBhZGQgdG8gYGVudmBcblxuU28sIGlzIHRoZXJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s/IExldCBtZSByZWl0ZXJhdGUgYW5kIGJlIGNyeXN0YWwgY2xlYXIuIEkgc2VlIG5vIGlzc3Vlcy5cblxuMS4gIFRoZXJlJ3Mgbm8gcmVhZGluZyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LlxuMi4gIFRoZSBidWZmZXJzIGV4cG9zZWQgdG8gdXNlcnNwYWNlICh2aWEgdGhlIHVldmVudCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgYXJyYXlzLCBmaWxsZWQgd2l0aCBgc25wcmludGZgLCBndWFyYW50ZWVpbmcgbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuXG4zLiAgTm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGxlYWtlZC5cbjQuICBObyBicmFuY2hpbmcgZGVjaXNpb25zIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuTm93LCBsZXQncyBjcm9zcy1yZWZlcmVuY2UgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBndWlkZWxpbmVzLiBXZSBuZWVkIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgYWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLCBhbmQgaWYgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvIGxlYWtzLiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhpcyBpcyBjbGVhcmx5IHRoZSBjYXNlIGhlcmUuIFRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgYnVmZmVycyBiZWZvcmUgd3JpdGluZyBkYXRhIGluIHRoZW0uXG5cblRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyByZXZpZXcsIGl0J3MgbXkgZGV0ZXJtaW5hdGlvbiB0aGF0IHRoaXMgcGF0Y2ggaXMgc2FmZSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDgsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzU6MzAuNTAzMTYxODMzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFVTQiBQSFkgdWV2ZW50IG5vdGlmaWNhdGlvbiBieSBzZW5kaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKClgIHVzaW5nIGBrb2JqZWN0X3VldmVudF9lbnYoKWAgcmF0aGVyIHRoYW4gdmlhIGEgYGRldmljZV90eXBlLnVldmVudGAgY2FsbGJhY2suIFxcblxcbkFsbCBzdGFjayBidWZmZXJzIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaCAoYHVjaGdlcl9zdGF0ZWAsIGB1Y2hnZXJfdHlwZWAsIGFuZCBgZW52cGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCAvIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIHdpdGggTlVMTCB0ZXJtaW5hdG9yKSBiZWZvcmUgc3RyaW5nIGZvcm1hdHRpbmcgdmlhIGBzbnByaW50ZigpYCBhbmQgYmVpbmcgcGFzc2VkIHRvIGBrb2JqZWN0X3VldmVudF9lbnYoKWAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXJyYXkgaW5kZXhpbmcgKGUuZy4gYHVzYl9jaGdlcl90eXBlYCkgYXJlIGJvdW5kcyBjaGVjayAvIG91dC1vZi1ib3VuZHMgcmVhZCBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFVTQiBQSFkgdWV2ZW50IG5vdGlmaWNhdGlvbiBieSBzZW5kaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKClgIHVzaW5nIGBrb2JqZWN0X3VldmVudF9lbnYoKWAgcmF0aGVyIHRoYW4gdmlhIGEgYGRldmljZV90eXBlLnVldmVudGAgY2FsbGJhY2suIFxcblxcbkFsbCBzdGFjayBidWZmZXJzIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaCAoYHVjaGdlcl9zdGF0ZWAsIGB1Y2hnZXJfdHlwZWAsIGFuZCBgZW52cGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCAvIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIHdpdGggTlVMTCB0ZXJtaW5hdG9yKSBiZWZvcmUgc3RyaW5nIGZvcm1hdHRpbmcgdmlhIGBzbnByaW50ZigpYCBhbmQgYmVpbmcgcGFzc2VkIHRvIGBrb2JqZWN0X3VldmVudF9lbnYoKWAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXJyYXkgaW5kZXhpbmcgKGUuZy4gYHVzYl9jaGdlcl90eXBlYCkgYXJlIGJvdW5kcyBjaGVjayAvIG91dC1vZi1ib3VuZHMgcmVhZCBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2w59[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 11:32:34 +0000 UTC FinishedAt: 2026-09-08 11:35:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_SUPPORT", "USB_PHY", "NOP_USB_XCEIV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_SUPPORT", "USB_PHY", "NOP_USB_XCEIV" ], "series_id": "94ac6ed0-1963-4775-818e-afdf00285564" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "usb_phy_notify_charger_work", "usb_add_phy_dev", "usb_phy_set_charger_state", "usb_phy_set_charger_current" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1VTQl9QSFkmIzM0OywKICAgICYjMzQ7Tk9QX1VTQl9YQ0VJViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayYjMzQ7LAogICAgJiMzNDt1c2JfYWRkX3BoeV9kZXYmIzM0OywKICAgICYjMzQ7dXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSYjMzQ7LAogICAgJiMzNDt1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFVTQiBQSFkgdWV2ZW50IG5vdGlmaWNhdGlvbiBieSBzZW5kaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKClgIHVzaW5nIGBrb2JqZWN0X3VldmVudF9lbnYoKWAgcmF0aGVyIHRoYW4gdmlhIGEgYGRldmljZV90eXBlLnVldmVudGAgY2FsbGJhY2suIFxuXG5BbGwgc3RhY2sgYnVmZmVycyBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2ggKGB1Y2hnZXJfc3RhdGVgLCBgdWNoZ2VyX3R5cGVgLCBhbmQgYGVudnBgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIChgPSB7IDAgfWAgLyBleHBsaWNpdCBpbml0aWFsaXphdGlvbiB3aXRoIE5VTEwgdGVybWluYXRvcikgYmVmb3JlIHN0cmluZyBmb3JtYXR0aW5nIHZpYSBgc25wcmludGYoKWAgYW5kIGJlaW5nIHBhc3NlZCB0byBga29iamVjdF91ZXZlbnRfZW52KClgLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHJpc2tzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGFycmF5IGluZGV4aW5nIChlLmcuIGB1c2JfY2hnZXJfdHlwZWApIGFyZSBib3VuZHMgY2hlY2sgLyBvdXQtb2YtYm91bmRzIHJlYWQgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTiwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdWV2ZW50IHJlcG9ydGluZyBtZWNoYW5pc20gZm9yIFVTQiBQSFkgY2hhcmdlciBldmVudHMgaW4gZHJpdmVycy91c2IvcGh5L3BoeS5jLiBJbnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgZGV2aWNlIHR5cGUgYW5kIGltcGxlbWVudGluZyBhIGN1c3RvbSB1ZXZlbnQgY2FsbGJhY2ssIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgY2hhcmdlciBzdGF0ZSBhbmQgdHlwZSBhcmUgbm93IGNvbnN0cnVjdGVkIGFuZCBwYXNzZWQgZGlyZWN0bHkgdmlhIGtvYmplY3RfdWV2ZW50X2VudigpIHdpdGhpbiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgUEhZIGNvcmUgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NmVmZDU3MWMzZDIxMTdhODg2ZGQ3ZDFkNDQ4YTViYzA2YWFmZjJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMTozNDoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LmMgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmNcbmluZGV4IDVhOWI5MzUzZjM0M2QuLjdjODVjN2NhMWQzMDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9waHkvcGh5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xuQEAgLTQyLDEyICYjNDM7NDIsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3R5cGVbXSA9IHtcbiBcdFtBQ0FfVFlQRV1cdFx0XHQ9IFwmIzM0O1VTQl9DSEFSR0VSX0FDQV9UWVBFXCYjMzQ7LFxuIH07XG4gXG4tc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl9zdGF0ZVtdID0ge1xuLVx0W1VTQl9DSEFSR0VSX0RFRkFVTFRdXHQ9IFwmIzM0O1VTQl9DSEFSR0VSX0RFRkFVTFRcJiMzNDssXG4tXHRbVVNCX0NIQVJHRVJfUFJFU0VOVF1cdD0gXCYjMzQ7VVNCX0NIQVJHRVJfUFJFU0VOVFwmIzM0Oyxcbi1cdFtVU0JfQ0hBUkdFUl9BQlNFTlRdXHQ9IFwmIzM0O1VTQl9DSEFSR0VSX0FCU0VOVFwmIzM0Oyxcbi19O1xuLVxuIHN0YXRpYyBzdHJ1Y3QgdXNiX3BoeSAqX191c2JfZmluZF9waHkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiBcdGVudW0gdXNiX3BoeV90eXBlIHR5cGUpXG4ge1xuQEAgLTgwLDE4ICYjNDM7NzQsNiBAQCBzdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fb2ZfdXNiX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbiBcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fZGV2aWNlX3RvX3VzYl9waHkoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KVxuLXtcbi1cdHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5O1xuLVxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh1c2JfcGh5LCBcdTAwMjZwaHlfbGlzdCwgaGVhZCkge1xuLVx0XHRpZiAodXNiX3BoeS1cdTAwM2VkZXYgPT0gZGV2KVxuLVx0XHRcdHJldHVybiB1c2JfcGh5O1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcbiB7XG4gXHR1c2JfcGh5LVx1MDAzZWNoZ19jdXIuc2RwX21pbiA9IERFRkFVTFRfU0RQX0NVUl9NSU47XG5AQCAtMTIzLDYgJiM0MzsxMDUsOSBAQCBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4gc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX3BoeSwgY2hnX3dvcmspO1xuJiM0MztcdGNoYXIgdWNoZ2VyX3N0YXRlWzUwXSA9IHsgMCB9O1xuJiM0MztcdGNoYXIgdWNoZ2VyX3R5cGVbNTBdID0geyAwIH07XG4mIzQzO1x0Y2hhciAqZW52cFtdID0geyB1Y2hnZXJfc3RhdGUsIHVjaGdlcl90eXBlLCBOVUxMIH07XG4gXHR1bnNpZ25lZCBpbnQgbWluLCBtYXg7XG4gXG4gXHRzd2l0Y2ggKHVzYl9waHktXHUwMDNlY2hnX3N0YXRlKSB7XG5AQCAtMTMwLDExICYjNDM7MTE1LDE1IEBAIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHVzYl9waHlfZ2V0X2NoYXJnZXJfY3VycmVudCh1c2JfcGh5LCBcdTAwMjZtaW4sIFx1MDAyNm1heCk7XG4gXG4gXHRcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnVzYl9waHktXHUwMDNlbm90aWZpZXIsIG1heCwgdXNiX3BoeSk7XG4mIzQzO1x0XHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcbiYjNDM7XHRcdFx0IFwmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzXCYjMzQ7LCBcJiMzNDtVU0JfQ0hBUkdFUl9QUkVTRU5UXCYjMzQ7KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFVTQl9DSEFSR0VSX0FCU0VOVDpcbiBcdFx0dXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHVzYl9waHkpO1xuIFxuIFx0XHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZ1c2JfcGh5LVx1MDAzZW5vdGlmaWVyLCAwLCB1c2JfcGh5KTtcbiYjNDM7XHRcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxuJiM0MztcdFx0XHQgXCYjMzQ7VVNCX0NIQVJHRVJfU1RBVEU9JXNcJiMzNDssIFwmIzM0O1VTQl9DSEFSR0VSX0FCU0VOVFwmIzM0Oyk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X3dhcm4odXNiX3BoeS1cdTAwM2VkZXYsIFwmIzM0O1Vua25vd24gVVNCIGNoYXJnZXIgc3RhdGU6ICVkXFxuXCYjMzQ7LFxuQEAgLTE0MiwzNiAmIzQzOzEzMSw5IEBAIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGtvYmplY3RfdWV2ZW50KFx1MDAyNnVzYl9waHktXHUwMDNlZGV2LVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbi19XG4tXG4tc3RhdGljIGludCB1c2JfcGh5X3VldmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudilcbi17XG4tXHRjb25zdCBzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeTtcbi1cdGNoYXIgdWNoZ2VyX3N0YXRlWzUwXSA9IHsgMCB9O1xuLVx0Y2hhciB1Y2hnZXJfdHlwZVs1MF0gPSB7IDAgfTtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xuLVx0dXNiX3BoeSA9IF9fZGV2aWNlX3RvX3VzYl9waHkoZGV2KTtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGh5X2xvY2ssIGZsYWdzKTtcbi1cbi1cdGlmICghdXNiX3BoeSlcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tXG4tXHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcbi1cdFx0IFwmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzXCYjMzQ7LCB1c2JfY2hnZXJfc3RhdGVbdXNiX3BoeS1cdTAwM2VjaGdfc3RhdGVdKTtcbi1cbiBcdHNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSxcbiBcdFx0IFwmIzM0O1VTQl9DSEFSR0VSX1RZUEU9JXNcJiMzNDssIHVzYl9jaGdlcl90eXBlW3VzYl9waHktXHUwMDNlY2hnX3R5cGVdKTtcbi1cbi1cdGlmIChhZGRfdWV2ZW50X3ZhcihlbnYsIHVjaGdlcl9zdGF0ZSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0aWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgdWNoZ2VyX3R5cGUpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdHJldHVybiAwO1xuJiM0MztcdGtvYmplY3RfdWV2ZW50X2VudihcdTAwMjZ1c2JfcGh5LVx1MDAzZWRldi1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxuQEAgLTY3NSwxMSAmIzQzOzYzNyw2IEBAIGludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodXNiX2FkZF9waHkpO1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdXNiX3BoeV9kZXZfdHlwZSA9IHtcbi1cdC5uYW1lID0gXCYjMzQ7dXNiX3BoeVwmIzM0Oyxcbi1cdC51ZXZlbnQgPSB1c2JfcGh5X3VldmVudCxcbi19O1xuLVxuIC8qKlxuICAqIHVzYl9hZGRfcGh5X2RldiAtIGRlY2xhcmUgdGhlIFVTQiBQSFlcbiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxuQEAgLTcwNSw4ICYjNDM7NjYyLDYgQEAgaW50IHVzYl9hZGRfcGh5X2RldihzdHJ1Y3QgdXNiX3BoeSAqeClcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHR4LVx1MDAzZWRldi1cdTAwM2V0eXBlID0gXHUwMDI2dXNiX3BoeV9kZXZfdHlwZTtcbi1cbiBcdEFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoXHUwMDI2eC1cdTAwM2Vub3RpZmllcik7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1VTQl9QSFkmIzM0OywKICAgICYjMzQ7Tk9QX1VTQl9YQ0VJViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayYjMzQ7LAogICAgJiMzNDt1c2JfYWRkX3BoeV9kZXYmIzM0OywKICAgICYjMzQ7dXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSYjMzQ7LAogICAgJiMzNDt1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1ZXZlbnQgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3IgVVNCIFBIWSBjaGFyZ2VyIGV2ZW50cyBpbiBkcml2ZXJzL3VzYi9waHkvcGh5LmMuIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHlwZSBhbmQgaW1wbGVtZW50aW5nIGEgY3VzdG9tIHVldmVudCBjYWxsYmFjaywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjaGFyZ2VyIHN0YXRlIGFuZCB0eXBlIGFyZSBub3cgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCBkaXJlY3RseSB2aWEga29iamVjdF91ZXZlbnRfZW52KCkgd2l0aGluIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBQSFkgY29yZSBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2ZWZkNTcxYzNkMjExN2E4ODZkZDdkMWQ0NDhhNWJjMDZhYWZmMmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDExOjM0OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS5jIGIvZHJpdmVycy91c2IvcGh5L3BoeS5jCmluZGV4IDVhOWI5MzUzZjM0M2QuLjdjODVjN2NhMWQzMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmMKQEAgLTQyLDEyICYjNDM7NDIsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3R5cGVbXSA9IHsKIAlbQUNBX1RZUEVdCQkJPSAmIzM0O1VTQl9DSEFSR0VSX0FDQV9UWVBFJiMzNDssCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3N0YXRlW10gPSB7Ci0JW1VTQl9DSEFSR0VSX0RFRkFVTFRdCT0gJiMzNDtVU0JfQ0hBUkdFUl9ERUZBVUxUJiMzNDssCi0JW1VTQl9DSEFSR0VSX1BSRVNFTlRdCT0gJiMzNDtVU0JfQ0hBUkdFUl9QUkVTRU5UJiMzNDssCi0JW1VTQl9DSEFSR0VSX0FCU0VOVF0JPSAmIzM0O1VTQl9DSEFSR0VSX0FCU0VOVCYjMzQ7LAotfTsKLQogc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogCWVudW0gdXNiX3BoeV90eXBlIHR5cGUpCiB7CkBAIC04MCwxOCAmIzQzOzc0LDYgQEAgc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiAJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3BoeSAqX19kZXZpY2VfdG9fdXNiX3BoeShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVzYl9waHkgKnVzYl9waHk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVzYl9waHksICZhbXA7cGh5X2xpc3QsIGhlYWQpIHsKLQkJaWYgKHVzYl9waHktJmd0O2RldiA9PSBkZXYpCi0JCQlyZXR1cm4gdXNiX3BoeTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIHZvaWQgdXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KQogewogCXVzYl9waHktJmd0O2NoZ19jdXIuc2RwX21pbiA9IERFRkFVTFRfU0RQX0NVUl9NSU47CkBAIC0xMjMsNiAmIzQzOzEwNSw5IEBAIHN0YXRpYyB2b2lkIHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSkKIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTsKJiM0MzsJY2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07CiYjNDM7CWNoYXIgdWNoZ2VyX3R5cGVbNTBdID0geyAwIH07CiYjNDM7CWNoYXIgKmVudnBbXSA9IHsgdWNoZ2VyX3N0YXRlLCB1Y2hnZXJfdHlwZSwgTlVMTCB9OwogCXVuc2lnbmVkIGludCBtaW4sIG1heDsKIAogCXN3aXRjaCAodXNiX3BoeS0mZ3Q7Y2hnX3N0YXRlKSB7CkBAIC0xMzAsMTEgJiM0MzsxMTUsMTUgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJdXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KHVzYl9waHksICZhbXA7bWluLCAmYW1wO21heCk7CiAKIAkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFtcDt1c2JfcGh5LSZndDtub3RpZmllciwgbWF4LCB1c2JfcGh5KTsKJiM0MzsJCXNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLAomIzQzOwkJCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssICYjMzQ7VVNCX0NIQVJHRVJfUFJFU0VOVCYjMzQ7KTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfQ0hBUkdFUl9BQlNFTlQ6CiAJCXVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudCh1c2JfcGh5KTsKIAogCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO3VzYl9waHktJmd0O25vdGlmaWVyLCAwLCB1c2JfcGh5KTsKJiM0MzsJCXNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLAomIzQzOwkJCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssICYjMzQ7VVNCX0NIQVJHRVJfQUJTRU5UJiMzNDspOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfd2Fybih1c2JfcGh5LSZndDtkZXYsICYjMzQ7VW5rbm93biBVU0IgY2hhcmdlciBzdGF0ZTogJWRcbiYjMzQ7LApAQCAtMTQyLDM2ICYjNDM7MTMxLDkgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJcmV0dXJuOwogCX0KIAotCWtvYmplY3RfdWV2ZW50KCZhbXA7dXNiX3BoeS0mZ3Q7ZGV2LSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7Ci19Ci0KLXN0YXRpYyBpbnQgdXNiX3BoeV91ZXZlbnQoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCi17Ci0JY29uc3Qgc3RydWN0IHVzYl9waHkgKnVzYl9waHk7Ci0JY2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07Ci0JY2hhciB1Y2hnZXJfdHlwZVs1MF0gPSB7IDAgfTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaHlfbG9jaywgZmxhZ3MpOwotCXVzYl9waHkgPSBfX2RldmljZV90b191c2JfcGh5KGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BoeV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIXVzYl9waHkpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc25wcmludGYodWNoZ2VyX3N0YXRlLCBBUlJBWV9TSVpFKHVjaGdlcl9zdGF0ZSksCi0JCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssIHVzYl9jaGdlcl9zdGF0ZVt1c2JfcGh5LSZndDtjaGdfc3RhdGVdKTsKLQogCXNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSwKIAkJICYjMzQ7VVNCX0NIQVJHRVJfVFlQRT0lcyYjMzQ7LCB1c2JfY2hnZXJfdHlwZVt1c2JfcGh5LSZndDtjaGdfdHlwZV0pOwotCi0JaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgdWNoZ2VyX3N0YXRlKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoYWRkX3VldmVudF92YXIoZW52LCB1Y2hnZXJfdHlwZSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuIDA7CiYjNDM7CWtvYmplY3RfdWV2ZW50X2VudigmYW1wO3VzYl9waHktJmd0O2Rldi0mZ3Q7a29iaiwgS09CSl9DSEFOR0UsIGVudnApOwogfQogCiBzdGF0aWMgdm9pZCBfX3VzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZShzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSkKQEAgLTY3NSwxMSAmIzQzOzYzNyw2IEBAIGludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hZGRfcGh5KTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfcGh5X2Rldl90eXBlID0gewotCS5uYW1lID0gJiMzNDt1c2JfcGh5JiMzNDssCi0JLnVldmVudCA9IHVzYl9waHlfdWV2ZW50LAotfTsKLQogLyoqCiAgKiB1c2JfYWRkX3BoeV9kZXYgLSBkZWNsYXJlIHRoZSBVU0IgUEhZCiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTApAQCAtNzA1LDggJiM0Mzs2NjIsNiBAQCBpbnQgdXNiX2FkZF9waHlfZGV2KHN0cnVjdCB1c2JfcGh5ICp4KQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQl4LSZndDtkZXYtJmd0O3R5cGUgPSAmYW1wO3VzYl9waHlfZGV2X3R5cGU7Ci0KIAlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZhbXA7eC0mZ3Q7bm90aWZpZXIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaHlfbG9jaywgZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0IgUEhZIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gbWV0aG9kaWNhbGx5IGJyZWFrIGRvd24gdGhlIHBhdGNoIGFuZCBpdHMgaW5zdHJ1Y3Rpb25zLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBzY29wZSBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHBvdGVudGlhbCBpbnRlZ3JhdGlvbi4gVGhlIGZvY3VzIGlzIGNsZWFybHkgb24gdGhlIFVTQiBQSFksIHNvIEkgbmVlZCB0byBlc3RhYmxpc2ggYSBwcmVjaXNlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMuCgpNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgbWFkZSB0byBgZHJpdmVycy91c2IvcGh5L3BoeS5jYC4gSSBuZWVkIHRvIHRob3JvdWdobHkgZGlzc2VjdCB0aGUgY29kZSBkaWZmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBmdW5jdGlvbnMgYWx0ZXJlZCwgYWRkaXRpb25zLCBvciByZW1vdmFscy4gSSBhbHNvIHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gYGRyaXZlcnMvdXNiL3BoeS9gLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2hhbmdlcyBpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgdGhpcyBwYXRjaCBtaWdodCBpbnRyb2R1Y2UsIGFzIHRoZXNlIGFsd2F5cyByZXF1aXJlIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBkdXJpbmcgaW50ZWdyYXRpb24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHByb2plY3QmIzM5O3MgY3VycmVudCBVU0IgUEhZIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcGF0Y2ggYWRkcyBuZXcgZmVhdHVyZXMsIGZpeGVzIGJ1Z3MsIG9yIHNpbXBseSByZWZhY3RvcnMgZXhpc3RpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOT1BfVVNCX1hDRUlWfFVTQl9QSFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9waHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvcGh5L0tjb25maWc9NT1tZW51IFwmIzM0O1VTQiBQaHlzaWNhbCBMYXllciBkcml2ZXJzXCYjMzQ7XG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy02LVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6Nzpjb25maWcgVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctOC1cdHNlbGVjdCBFWFRDT05cbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz0xND1jb25maWcgQUI4NTAwX1VTQlxuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTE2LVx0ZGVwZW5kcyBvbiBBQjg1MDBfQ09SRVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6MTc6XHRzZWxlY3QgVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTgtXHRoZWxwXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9MjM9Y29uZmlnIEZTTF9VU0IyX09UR1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTI2LVx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCB0aGlzIGNhbiYjMzk7dCBiZSAmIzM5O3kmIzM5O1xuZHJpdmVycy91c2IvcGh5L0tjb25maWc6Mjc6XHRzZWxlY3QgVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMjgtXHRoZWxwXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzAtXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzozMTpjb25maWcgS0VZU1RPTkVfVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtLZXlzdG9uZSBVU0IgUEhZIERyaXZlclwmIzM0O1xuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzMtXHRkZXBlbmRzIG9uIEFSQ0hfS0VZU1RPTkUgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzozNDpcdGRlcGVuZHMgb24gTk9QX1VTQl9YQ0VJVlxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzUtXHRoZWxwXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzktXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo0MDpjb25maWcgTk9QX1VTQl9YQ0VJVlxuZHJpdmVycy91c2IvcGh5L0tjb25maWctNDEtXHR0cmlzdGF0ZSBcJiMzNDtOT1AgVVNCIFRyYW5zY2VpdmVyIERyaXZlclwmIzM0O1xuZHJpdmVycy91c2IvcGh5L0tjb25maWctNDItXHRkZXBlbmRzIG9uIFVTQl9HQURHRVQgfHwgIVVTQl9HQURHRVQgIyBpZiBVU0JfR0FER0VUPW0sIE5PUCBjYW4mIzM5O3QgYmUgYnVpbHQtaW5cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnOjQzOlx0c2VsZWN0IFVTQl9QSFlcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTQ0LVx0aGVscFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTUyPWNvbmZpZyBBTTMzNVhfUEhZX1VTQlxuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTU0LVx0ZGVwZW5kcyBvbiBBUk0gfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo1NTpcdGRlcGVuZHMgb24gTk9QX1VTQl9YQ0VJVlxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6NTY6XHRzZWxlY3QgVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctNTctXHRzZWxlY3QgQU0zMzVYX0NPTlRST0xfVVNCXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9NzU9Y29uZmlnIFVTQl9HUElPX1ZCVVNcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy03OS1cdGRlcGVuZHMgb24gIVVTQl9DT05OX0dQSU9cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnOjgwOlx0c2VsZWN0IFVTQl9QSFlcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTgxLVx0aGVscFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTEwMD1jb25maWcgVEFIVk9fVVNCXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTAzLVx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCB0aGlzIGNhbiYjMzk7dCBiZSAmIzM5O3kmIzM5O1xuZHJpdmVycy91c2IvcGh5L0tjb25maWc6MTA0Olx0c2VsZWN0IFVTQl9QSFlcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTEwNS1cdGhlbHBcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz0xMTY9Y29uZmlnIFVTQl9JU1AxMzAxXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTE5LVx0ZGVwZW5kcyBvbiBJMkNcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnOjEyMDpcdHNlbGVjdCBVU0JfUEhZXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xMjEtXHRoZWxwXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9MTI5PWNvbmZpZyBVU0JfTVhTX1BIWVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTEzMi1cdHNlbGVjdCBTVE1QX0RFVklDRVxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6MTMzOlx0c2VsZWN0IFVTQl9QSFlcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTEzNC1cdGhlbHBcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz0xMzk9Y29uZmlnIFVTQl9URUdSQV9QSFlcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xNDItXHRzZWxlY3QgVVNCX0NPTU1PTlxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6MTQzOlx0c2VsZWN0IFVTQl9QSFlcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTE0NC1cdHNlbGVjdCBVU0JfVUxQSVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZS00LSNcbmRyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19VU0JfUEhZKVx0XHRcdCYjNDM7PSBwaHkub1xuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX09GKVx0XHRcdCYjNDM7PSBvZi5vXG4tLVxuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlPTExPW9iai0kKENPTkZJR19GU0xfVVNCMl9PVEcpXHRcdCYjNDM7PSBwaHktZnNsLXVzYi5vXG5kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX05PUF9VU0JfWENFSVYpXHRcdCYjNDM7PSBwaHktZ2VuZXJpYy5vXG5kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGUtMTMtb2JqLSQoQ09ORklHX1RBSFZPX1VTQilcdFx0XHQmIzQzOz0gcGh5LXRhaHZvLm9cbi0tXG5kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1VTQl9VTFBJX1ZJRVdQT1JUKVx0XHQmIzQzOz0gcGh5LXVscGktdmlld3BvcnQub1xuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19LRVlTVE9ORV9VU0JfUEhZKVx0XHQmIzQzOz0gcGh5LWtleXN0b25lLm9cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy0zMS0jZGVmaW5lIEFCODUwNV9VU0JfTElORV9TVEFUX1JFRyAweDk0XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzozMjojZGVmaW5lIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHIDB4OEFcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTMzLVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTM3LS8qIEJhbmsgQUI4NTAwX0RFQlVHICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzozODojZGVmaW5lIEFCODUwMF9VU0JfUEhZX1RVTkUxIDB4MDVcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjM5OiNkZWZpbmUgQUI4NTAwX1VTQl9QSFlfVFVORTIgMHgwNlxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6NDA6I2RlZmluZSBBQjg1MDBfVVNCX1BIWV9UVU5FMyAweDA3XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy00MS1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYz0yNDA9c3RhdGljIHZvaWQgYWI4NTAwX3VzYl93ZF9saW5rc3RhdHVzKHN0cnVjdCBhYjg1MDBfdXNiICphYiwgdTggYml0KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTI0NC1cdFx0YWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVx1MDAzZWRldixcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjI0NTpcdFx0XHRcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMjQ2LVx0XHRcdFx0Yml0LCBiaXQpO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTI1MT1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3BoeV9lbmFibGUoc3RydWN0IGFiODUwMF91c2IgKmFiLCBib29sIHNlbF9ob3N0KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTI2Ny1cdGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzoyNjg6XHRcdFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy0yNjktXHRcdFx0Yml0LCBiaXQpO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTI3Mj1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3BoeV9kaXNhYmxlKHN0cnVjdCBhYjg1MDBfdXNiICphYiwgYm9vbCBzZWxfaG9zdClcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy0yODAtXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXHUwMDNlZGV2LFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6MjgxOlx0XHRcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMjgyLVx0XHRcdGJpdCwgMCk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM9NTYyPXN0YXRpYyBpcnFyZXR1cm5fdCBhYjg1MDBfdXNiX2Rpc2Nvbm5lY3RfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNTk3LVx0XHRcdGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo1OTg6XHRcdFx0XHRcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNTk5LVx0XHRcdFx0XHRBQjg1MDBfQklUX1BIWV9DVFJMX0RFVklDRV9FTiwgMCk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM9NjgyPXN0YXRpYyB2b2lkIGFiODUwMF91c2JfcmVzdGFydF9waHkoc3RydWN0IGFiODUwMF91c2IgKmFiKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTY4NC1cdGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo2ODU6XHRcdFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy02ODYtXHRcdFx0QUI4NTAwX0JJVF9QSFlfQ1RSTF9ERVZJQ0VfRU4sXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNjkxLVx0YWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVx1MDAzZWRldixcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjY5MjpcdFx0XHRBQjg1MDBfVVNCLCBBQjg1MDBfVVNCX1BIWV9DVFJMX1JFRyxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTY5My1cdFx0XHRBQjg1MDBfQklUX1BIWV9DVFJMX0RFVklDRV9FTixcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy02OTYtXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXHUwMDNlZGV2LFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6Njk3Olx0XHRcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNjk4LVx0XHRcdEFCODUwMF9CSVRfUEhZX0NUUkxfSE9TVF9FTixcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy03MDMtXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXHUwMDNlZGV2LFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6NzA0Olx0XHRcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNzA1LVx0XHRcdEFCODUwMF9CSVRfUEhZX0NUUkxfSE9TVF9FTixcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYz03ODg9c3RhdGljIHZvaWQgYWI4NTAwX3VzYl9zZXRfYWI4NTAwX3R1bmluZ192YWx1ZXMoc3RydWN0IGFiODUwMF91c2IgKmFiKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTc5OS1cdGVyciA9IGFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4MDA6XHRcdFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMSwgMHhDOCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MDEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTgwNS1cdGVyciA9IGFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4MDY6XHRcdFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMiwgMHgwMCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MDctXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTgxMS1cdGVyciA9IGFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4MTI6XHRcdFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMywgMHg3OCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MTMtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTgyNT1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3NldF9hYjg1MDVfdHVuaW5nX3ZhbHVlcyhzdHJ1Y3QgYWI4NTAwX3VzYiAqYWIpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtODM3LVx0ZXJyID0gYWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVx1MDAzZWRldixcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjgzODpcdFx0XHRBQjg1MDBfREVCVUcsIEFCODUwMF9VU0JfUEhZX1RVTkUxLFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtODM5LVx0XHRcdDB4QzgsIDB4QzgpO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTg0NC1cdGVyciA9IGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cdTAwM2VkZXYsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4NDU6XHRcdFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMixcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTg0Ni1cdFx0XHQweDYwLCAweDYwKTtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04NTEtXHRlcnIgPSBhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXHUwMDNlZGV2LFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6ODUyOlx0XHRcdEFCODUwMF9ERUJVRywgQUI4NTAwX1VTQl9QSFlfVFVORTMsXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04NTMtXHRcdFx0MHhGQywgMHg4MCk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM9ODY4PXN0YXRpYyBpbnQgYWI4NTAwX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTkzOC1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjkzOTpcdGVyciA9IHVzYl9hZGRfcGh5KFx1MDAyNmFiLVx1MDAzZXBoeSwgVVNCX1BIWV9UWVBFX1VTQjIpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtOTQwLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jPTc3Mz1zdGF0aWMgaW50IGZzbF9vdGdfY29uZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jLTgxNy1cdC8qIFN0b3JlIHRoZSBvdGcgdHJhbnNjZWl2ZXIgKi9cbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jOjgxODpcdHN0YXR1cyA9IHVzYl9hZGRfcGh5KFx1MDAyNmZzbF9vdGdfdGMtXHUwMDNlcGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWZzbC11c2IuYy04MTktXHRpZiAoc3RhdHVzKSB7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM9ODMzPXN0YXRpYyBpbnQgdXNiX290Z19zdGFydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jLTgzNS1cdHN0cnVjdCBmc2xfb3RnICpwX290ZztcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jOjgzNjpcdHN0cnVjdCB1c2JfcGh5ICpvdGdfdHJhbnMgPSB1c2JfZ2V0X3BoeShVU0JfUEhZX1RZUEVfVVNCMik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWZzbC11c2IuYy04MzctXHRzdHJ1Y3Qgb3RnX2ZzbSAqZnNtO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTE5Nj1pbnQgdXNiX3BoeV9nZW5fY3JlYXRlX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB1c2JfcGh5X2dlbmVyaWMgKm5vcClcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE5Ny17XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoxOTg6XHRlbnVtIHVzYl9waHlfdHlwZSB0eXBlID0gVVNCX1BIWV9UWVBFX1VTQjI7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xOTktXHRpbnQgZXJyID0gMDtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdwaW8tdmJ1cy11c2IuYz0yMzE9c3RhdGljIGludCBncGlvX3ZidXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdwaW8tdmJ1cy11c2IuYy0zMTUtXHQvKiBvbmx5IGFjdGl2ZSB3aGVuIGEgZ2FkZ2V0IGlzIHJlZ2lzdGVyZWQgKi9cbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jOjMxNjpcdGVyciA9IHVzYl9hZGRfcGh5KFx1MDAyNmdwaW9fdmJ1cy1cdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jLTMxNy1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYz05NT1zdGF0aWMgaW50IGlzcDEzMDFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYy0xMTEtXHRwaHktXHUwMDNlc2V0X3ZidXMgPSBpc3AxMzAxX3BoeV9zZXRfdmJ1cztcbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jOjExMjpcdHBoeS1cdTAwM2V0eXBlID0gVVNCX1BIWV9UWVBFX1VTQjI7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYy0xMTMtXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTE4LS8qIFVTQiBQSFkgY29udHJvbCByZWdpc3RlciBvZmZzZXRzICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MTk6I2RlZmluZSBVU0JfUEhZX0NUTF9VVE1JXHRcdDB4MDAwMFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jOjIwOiNkZWZpbmUgVVNCX1BIWV9DVExfUElQRVx0XHQweDAwMDRcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzoyMTojZGVmaW5lIFVTQl9QSFlfQ1RMX1BBUkFNXzFcdFx0MHgwMDA4XG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MjI6I2RlZmluZSBVU0JfUEhZX0NUTF9QQVJBTV8yXHRcdDB4MDAwY1xuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jOjIzOiNkZWZpbmUgVVNCX1BIWV9DVExfQ0xPQ0tcdFx0MHgwMDEwXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MjQ6I2RlZmluZSBVU0JfUEhZX0NUTF9QTExcdFx0XHQweDAwMTRcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy0yNS1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM9NDQ9c3RhdGljIGludCBrZXlzdG9uZV91c2JwaHlfaW5pdChzdHJ1Y3QgdXNiX3BoeSAqcGh5KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy00OC1cbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzo0OTpcdHZhbCAgPSBrZXlzdG9uZV91c2JwaHlfcmVhZGwoa19waHktXHUwMDNlcGh5X2N0cmwsIFVTQl9QSFlfQ1RMX0NMT0NLKTtcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzo1MDpcdGtleXN0b25lX3VzYnBoeV93cml0ZWwoa19waHktXHUwMDNlcGh5X2N0cmwsIFVTQl9QSFlfQ1RMX0NMT0NLLFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTUxLVx0XHRcdFx0dmFsIHwgUEhZX1JFRl9TU1BfRU4pO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYz01NT1zdGF0aWMgdm9pZCBrZXlzdG9uZV91c2JwaHlfc2h1dGRvd24oc3RydWN0IHVzYl9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtNTktXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6NjA6XHR2YWwgID0ga2V5c3RvbmVfdXNicGh5X3JlYWRsKGtfcGh5LVx1MDAzZXBoeV9jdHJsLCBVU0JfUEhZX0NUTF9DTE9DSyk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6NjE6XHRrZXlzdG9uZV91c2JwaHlfd3JpdGVsKGtfcGh5LVx1MDAzZXBoeV9jdHJsLCBVU0JfUEhZX0NUTF9DTE9DSyxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy02Mi1cdFx0XHRcdHZhbCBcdTAwMjYgflBIWV9SRUZfU1NQX0VOKTtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy0xMjYtXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYzoxMjc6I2RlZmluZSBVU0JfUEhZX1ZMTFNfV0FLRVVQX0VOXHRcdFx0QklUKDApXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy0xMjgtXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmM9NzU4PXN0YXRpYyBpbnQgbXhzX3BoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg0NS1cdG14c19waHktXHUwMDNlcGh5Lm5vdGlmeV9kaXNjb25uZWN0XHQ9IG14c19waHlfb25fZGlzY29ubmVjdDtcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jOjg0NjpcdG14c19waHktXHUwMDNlcGh5LnR5cGVcdFx0PSBVU0JfUEhZX1RZUEVfVVNCMjtcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg0Ny1cdG14c19waHktXHUwMDNlcGh5LnNldF93YWtldXBcdFx0PSBteHNfcGh5X3NldF93YWtldXA7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmM9ODc5PXN0YXRpYyB2b2lkIG14c19waHlfd2FrZXVwX2VuYWJsZShzdHJ1Y3QgbXhzX3BoeSAqbXhzX3BoeSwgYm9vbCBvbilcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg4MC17XG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYzo4ODE6XHR1MzIgbWFzayA9IFVTQl9QSFlfVkxMU19XQUtFVVBfRU47XG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy04ODItXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jPTMxOT1zdGF0aWMgaW50IHRhaHZvX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGFodm8uYy0zODMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRhaHZvLmM6Mzg0Olx0cmV0ID0gdXNiX2FkZF9waHkoXHUwMDI2dHUtXHUwMDNlcGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRhaHZvLmMtMzg1LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjAtI2RlZmluZSAgIFVTQl9TVVNQX0NMUlx0XHRcdFx0QklUKDUpXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjYxOiNkZWZpbmUgICBVU0JfUEhZX0NMS19WQUxJRFx0XHRcdEJJVCg3KVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy02Mi0jZGVmaW5lICAgVVRNSVBfUkVTRVRcdFx0XHRcdEJJVCgxMSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTY5LVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3MDojZGVmaW5lIFVTQl9QSFlfVkJVU19TRU5TT1JTXHRcdFx0MHg0MDRcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzEtI2RlZmluZSAgIEJfU0VTU19WTERfV0FLRVVQX0VOXHRcdFx0QklUKDE0KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzQtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjc1OiNkZWZpbmUgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRFx0XHRcdDB4NDA4XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc2LSNkZWZpbmUgICBJRF9JTlRfRU5cdFx0XHRcdEJJVCgwKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9NDg0PXN0YXRpYyB2b2lkIHV0bWlfcGh5X2Nsa19kaXNhYmxlKHN0cnVjdCB0ZWdyYV91c2JfcGh5ICpwaHkpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy00OTMtXHQgKi9cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NDk0Olx0aWYgKHV0bWlfd2FpdF9yZWdpc3RlcihiYXNlICYjNDM7IFVTQl9TVVNQX0NUUkwsIFVTQl9QSFlfQ0xLX1ZBTElELCAwKSA9PSAwKVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy00OTUtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTUxMC1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NTExOlx0aWYgKHV0bWlfd2FpdF9yZWdpc3RlcihiYXNlICYjNDM7IFVTQl9TVVNQX0NUUkwsIFVTQl9QSFlfQ0xLX1ZBTElELCAwKSlcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNTEyLVx0XHRkZXZfZXJyKHBoeS1cdTAwM2V1X3BoeS5kZXYsXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz01MTY9c3RhdGljIHZvaWQgdXRtaV9waHlfY2xrX2VuYWJsZShzdHJ1Y3QgdGVncmFfdXNiX3BoeSAqcGh5KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNTI1LVx0ICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjUyNjpcdGlmICh1dG1pX3dhaXRfcmVnaXN0ZXIoYmFzZSAmIzQzOyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NTI3Olx0XHRcdCAgICAgICBVU0JfUEhZX0NMS19WQUxJRCkgPT0gMClcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNTI4LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy01NDMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjU0NDpcdGlmICh1dG1pX3dhaXRfcmVnaXN0ZXIoYmFzZSAmIzQzOyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NTQ1Olx0XHRcdCAgICAgICBVU0JfUEhZX0NMS19WQUxJRCkpXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTU0Ni1cdFx0ZGV2X2VycihwaHktXHUwMDNldV9waHkuZGV2LFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9NTUwPXN0YXRpYyBpbnQgdXRtaV9waHlfcG93ZXJfb24oc3RydWN0IHRlZ3JhX3VzYl9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYxNS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NjE2Olx0XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYxNy1cdFx0dmFsIFx1MDAyNj0gflZCVVNfV0FLRVVQX1dBS0VVUF9FTjtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjE4LVx0XHR2YWwgXHUwMDI2PSB+KElEX0NIR19ERVQgfCBWQlVTX1dBS0VVUF9DSEdfREVUKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NjE5Olx0XHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYyMC1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NjIxOlx0XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1NFTlNPUlMpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy02MjItXHRcdHZhbCBcdTAwMjY9IH4oQV9WQlVTX1ZMRF9XQUtFVVBfRU4gfCBBX1NFU1NfVkxEX1dBS0VVUF9FTik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYyMy1cdFx0dmFsIFx1MDAyNj0gfihCX1NFU1NfVkxEX1dBS0VVUF9FTik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjYyNDpcdFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICYjNDM7IFVTQl9QSFlfVkJVU19TRU5TT1JTKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjI1LVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9NzE2PXN0YXRpYyBpbnQgdXRtaV9waHlfcG93ZXJfb2ZmKHN0cnVjdCB0ZWdyYV91c2JfcGh5ICpwaHkpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03MjUtXHRpZiAocGh5LVx1MDAzZXdha2V1cF9lbmFibGVkIFx1MDAyNlx1MDAyNiBwaHktXHUwMDNlbW9kZSAhPSBVU0JfRFJfTU9ERV9IT1NUKVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3MjY6XHRcdHJlYWRsX3JlbGF4ZWRfcG9sbF90aW1lb3V0KGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzI3LVx0XHRcdFx0XHQgICB2YWwsICEodmFsIFx1MDAyNiBWQlVTX1dBS0VVUF9TVFMpLFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzY2LVx0XHRpZiAocGh5LVx1MDAzZW1vZGUgIT0gVVNCX0RSX01PREVfSE9TVCkge1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3Njc6XHRcdFx0dmFsID0gcmVhZGxfcmVsYXhlZChiYXNlICYjNDM7IFVTQl9QSFlfVkJVU19XQUtFVVBfSUQpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03NjgtXHRcdFx0dmFsIHw9IFZCVVNfV0FLRVVQX1dBS0VVUF9FTjtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzY5LVx0XHRcdHZhbCBcdTAwMjY9IH4oSURfQ0hHX0RFVCB8IFZCVVNfV0FLRVVQX0NIR19ERVQpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3NzA6XHRcdFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICYjNDM7IFVTQl9QSFlfVkJVU19XQUtFVVBfSUQpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03NzEtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjc3MjpcdFx0XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1NFTlNPUlMpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03NzMtXHRcdFx0dmFsIHw9IEFfVkJVU19WTERfV0FLRVVQX0VOO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3NzQ6XHRcdFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICYjNDM7IFVTQl9QSFlfVkJVU19TRU5TT1JTKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzc1LVx0XHR9XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz04ODk9c3RhdGljIGludCB1aHNpY19waHlfcG93ZXJfb24oc3RydWN0IHRlZ3JhX3VzYl9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTk3Ny1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6OTc4Olx0ZXJyID0gdXRtaV93YWl0X3JlZ2lzdGVyKGJhc2UgJiM0MzsgVVNCX1NVU1BfQ1RSTCwgVVNCX1BIWV9DTEtfVkFMSUQsXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjk3OTpcdFx0XHRcdCBVU0JfUEhZX0NMS19WQUxJRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTk4MC1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jPTEwOTk9c3RhdGljIGlycXJldHVybl90IHRlZ3JhX3VzYl9waHlfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xMTA5LVx0ICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjExMTA6XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjExMTE6XHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExMTItXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz0xMTE2PXN0YXRpYyBpbnQgdGVncmFfdXNiX3BoeV9zZXRfd2FrZXVwKHN0cnVjdCB1c2JfcGh5ICp1X3BoeSwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xMTI2LVxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzoxMTI3Olx0XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExMjgtXHRcdHZhbCBcdTAwMjY9IH4oSURfSU5UX0VOIHwgVkJVU19XQUtFVVBfSU5UX0VOKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTEyOTpcdFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICYjNDM7IFVTQl9QSFlfVkJVU19XQUtFVVBfSUQpO1xuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xMTMwLVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtMTE0OC1cdFx0XHQgKi9cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTE0OTpcdFx0XHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExNTAtXHRcdFx0dmFsIHw9IElEX0lOVF9FTiB8IFZCVVNfV0FLRVVQX0lOVF9FTjtcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTE1MTpcdFx0XHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgJiM0MzsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExNTItXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTYwMD1pbnQgdXNiX2FkZF9waHkoc3RydWN0IHVzYl9waHkgKngsIGVudW0gdXNiX3BoeV90eXBlIHR5cGUpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTYwNS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2MDY6XHRpZiAoeC1cdTAwM2V0eXBlICE9IFVTQl9QSFlfVFlQRV9VTkRFRklORUQpIHtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MDctXHRcdGRldl9lcnIoeC1cdTAwM2VkZXYsIFwmIzM0O25vdCBhY2NlcHRpbmcgaW5pdGlhbGl6ZWQgUEhZICVzXFxuXCYjMzQ7LCB4LVx1MDAzZWxhYmVsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBVU0IgUEhZIENoYXJnZXIgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgVVNCIFBIWSBjaGFyZ2VycyBhcmUgaW1wbGVtZW50ZWQuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGRlZmluaXRlbHkgYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYCBhbmQgYHVzYl9hZGRfcGh5X2RldmAsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhcmdlciBmdW5jdGlvbmFsaXR5IHByb2JhYmx5IHJlc2lkZXMuIEkgbmVlZCB0byBzZWUgKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBjb29yZGluYXRlZCDigJMgd2hhdCB0cmlnZ2VycyB0aGVtLCB3aGF0IGRhdGEgdGhleSBleGNoYW5nZSwgYW5kIHdoYXQgcmVzb3VyY2VzIHRoZXkgbWFuYWdlLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW50ZXJwbGF5IHdpbGwgZ2l2ZSBtZSB0aGUgbW9zdCBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSBkZXNpZ24uIFRoZW4gSSYjMzk7bGwgYmUgYWJsZSB0byB0ZWxsIHdoYXQmIzM5O3MgY29ycmVjdCwgYW5kIG1heWJlIHNlZSBzb21lIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhleSYjMzk7dmUgc3RydWN0dXJlZCB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvcGh5L3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MztcbiAgIDI6XHQvKlxuICAgMzpcdCAqIHBoeS5jIC0tIFVTQiBwaHkgaGFuZGxpbmdcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIFRleGFzIEluc3RydW1lbnRzXG4gICA2Olx0ICovXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvcGh5LmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQvKiBEZWZhdWx0IGN1cnJlbnQgcmFuZ2UgYnkgY2hhcmdlciB0eXBlLiAqL1xuICAxODpcdCNkZWZpbmUgREVGQVVMVF9TRFBfQ1VSX01JTlx0MlxuICAxOTpcdCNkZWZpbmUgREVGQVVMVF9TRFBfQ1VSX01BWFx0NTAwXG4gIDIwOlx0I2RlZmluZSBERUZBVUxUX1NEUF9DVVJfTUlOX1NTXHQxNTBcbiAgMjE6XHQjZGVmaW5lIERFRkFVTFRfU0RQX0NVUl9NQVhfU1NcdDkwMFxuICAyMjpcdCNkZWZpbmUgREVGQVVMVF9EQ1BfQ1VSX01JTlx0NTAwXG4gIDIzOlx0I2RlZmluZSBERUZBVUxUX0RDUF9DVVJfTUFYXHQ1MDAwXG4gIDI0Olx0I2RlZmluZSBERUZBVUxUX0NEUF9DVVJfTUlOXHQxNTAwXG4gIDI1Olx0I2RlZmluZSBERUZBVUxUX0NEUF9DVVJfTUFYXHQ1MDAwXG4gIDI2Olx0I2RlZmluZSBERUZBVUxUX0FDQV9DVVJfTUlOXHQxNTAwXG4gIDI3Olx0I2RlZmluZSBERUZBVUxUX0FDQV9DVVJfTUFYXHQ1MDAwXG4gIDI4Olx0XG4gIDI5Olx0c3RhdGljIExJU1RfSEVBRChwaHlfbGlzdCk7XG4gIDMwOlx0c3RhdGljIERFRklORV9TUElOTE9DSyhwaHlfbG9jayk7XG4gIDMxOlx0XG4gIDMyOlx0c3RydWN0IHBoeV9kZXZtIHtcbiAgMzM6XHRcdHN0cnVjdCB1c2JfcGh5ICpwaHk7XG4gIDM0Olx0XHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iO1xuICAzNTpcdH07XG4gIDM2Olx0XG4gIDM3Olx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl90eXBlW10gPSB7XG4gIDM4Olx0XHRbVU5LTk9XTl9UWVBFXVx0XHRcdD0gXCYjMzQ7VVNCX0NIQVJHRVJfVU5LTk9XTl9UWVBFXCYjMzQ7LFxuICAzOTpcdFx0W1NEUF9UWVBFXVx0XHRcdD0gXCYjMzQ7VVNCX0NIQVJHRVJfU0RQX1RZUEVcJiMzNDssXG4gIDQwOlx0XHRbQ0RQX1RZUEVdXHRcdFx0PSBcJiMzNDtVU0JfQ0hBUkdFUl9DRFBfVFlQRVwmIzM0OyxcbiAgNDE6XHRcdFtEQ1BfVFlQRV1cdFx0XHQ9IFwmIzM0O1VTQl9DSEFSR0VSX0RDUF9UWVBFXCYjMzQ7LFxuICA0MjpcdFx0W0FDQV9UWVBFXVx0XHRcdD0gXCYjMzQ7VVNCX0NIQVJHRVJfQUNBX1RZUEVcJiMzNDssXG4gIDQzOlx0fTtcbiAgNDQ6XHRcbiAgNDU6XHRzdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fdXNiX2ZpbmRfcGh5KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4gIDQ2Olx0XHRlbnVtIHVzYl9waHlfdHlwZSB0eXBlKVxuICA0NzpcdHtcbiAgNDg6XHRcdHN0cnVjdCB1c2JfcGh5ICAqcGh5ID0gTlVMTDtcbiAgNDk6XHRcbiAgNTA6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocGh5LCBsaXN0LCBoZWFkKSB7XG4gIDUxOlx0XHRcdGlmIChwaHktXHUwMDNldHlwZSAhPSB0eXBlKVxuICA1MjpcdFx0XHRcdGNvbnRpbnVlO1xuICA1MzpcdFxuICA1NDpcdFx0XHRyZXR1cm4gcGh5O1xuICA1NTpcdFx0fVxuICA1NjpcdFxuICA1NzpcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4gIDU4Olx0fVxuICA1OTpcdFxuICA2MDpcdHN0YXRpYyBzdHJ1Y3QgdXNiX3BoeSAqX19vZl91c2JfZmluZF9waHkoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuICA2MTpcdHtcbiAgNjI6XHRcdHN0cnVjdCB1c2JfcGh5ICAqcGh5O1xuICA2MzpcdFxuICA2NDpcdFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpKVxuICA2NTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbiAgNjY6XHRcbiAgNjc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocGh5LCBcdTAwMjZwaHlfbGlzdCwgaGVhZCkge1xuICA2ODpcdFx0XHRpZiAobm9kZSAhPSBwaHktXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUpXG4gIDY5Olx0XHRcdFx0Y29udGludWU7XG4gIDcwOlx0XG4gIDcxOlx0XHRcdHJldHVybiBwaHk7XG4gIDcyOlx0XHR9XG4gIDczOlx0XG4gIDc0Olx0XHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcbiAgNzU6XHR9XG4gIDc2Olx0XG4gIDc3Olx0c3RhdGljIHZvaWQgdXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxuICA3ODpcdHtcbiAgNzk6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5zZHBfbWluID0gREVGQVVMVF9TRFBfQ1VSX01JTjtcbiAgODA6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5zZHBfbWF4ID0gREVGQVVMVF9TRFBfQ1VSX01BWDtcbiAgODE6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5kY3BfbWluID0gREVGQVVMVF9EQ1BfQ1VSX01JTjtcbiAgODI6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5kY3BfbWF4ID0gREVGQVVMVF9EQ1BfQ1VSX01BWDtcbiAgODM6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5jZHBfbWluID0gREVGQVVMVF9DRFBfQ1VSX01JTjtcbiAgODQ6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5jZHBfbWF4ID0gREVGQVVMVF9DRFBfQ1VSX01BWDtcbiAgODU6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5hY2FfbWluID0gREVGQVVMVF9BQ0FfQ1VSX01JTjtcbiAgODY6XHRcdHVzYl9waHktXHUwMDNlY2hnX2N1ci5hY2FfbWF4ID0gREVGQVVMVF9BQ0FfQ1VSX01BWDtcbiAgODc6XHR9XG4gIDg4Olx0XG4gIDg5Olx0LyoqXG4gIDkwOlx0ICogdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrIC0gbm90aWZ5IHRoZSBVU0IgY2hhcmdlciBzdGF0ZVxuICA5MTpcdCAqIEB3b3JrOiB0aGUgY2hhcmdlciB3b3JrIHRvIG5vdGlmeSB0aGUgVVNCIGNoYXJnZXIgc3RhdGVcbiAgOTI6XHQgKlxuICA5MzpcdCAqIFRoaXMgd29yayBjYW4gYmUgaXNzdWVkIHdoZW4gVVNCIGNoYXJnZXIgc3RhdGUgaGFzIGJlZW4gY2hhbmdlZCBvclxuICA5NDpcdCAqIFVTQiBjaGFyZ2VyIGN1cnJlbnQgaGFzIGJlZW4gY2hhbmdlZCwgdGhlbiB3ZSBjYW4gbm90aWZ5IHRoZSBjdXJyZW50XG4gIDk1Olx0ICogd2hhdCBjYW4gYmUgZHJhd24gdG8gcG93ZXIgdXNlciBhbmQgdGhlIGNoYXJnZXIgc3RhdGUgdG8gdXNlcnNwYWNlLlxuICA5NjpcdCAqXG4gIDk3Olx0ICogSWYgd2UgZ2V0IHRoZSBjaGFyZ2VyIHR5cGUgZnJvbSBleHRjb24gc3Vic3lzdGVtLCB3ZSBjYW4gbm90aWZ5IHRoZVxuICA5ODpcdCAqIGNoYXJnZXIgc3RhdGUgdG8gcG93ZXIgdXNlciBhdXRvbWF0aWNhbGx5IGJ5IHVzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZSgpXG4gIDk5Olx0ICogaXNzdWluZyBmcm9tIGV4dGNvbiBzdWJzeXN0ZW0uXG4gMTAwOlx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyB0YXNrLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgZHJpdmVycy91c2IvcGh5L3BoeS5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL3VzYi9waHkvcGh5LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBVU0IgUEhZIChQaHlzaWNhbCBMYXllcikgZHJpdmVycyByZXNpZGUsIHRoZSBjcnVjaWFsIGJyaWRnZSBiZXR3ZWVuIHRoZSBkaWdpdGFsIHdvcmxkIG9mIHRoZSBVU0IgY29udHJvbGxlciBhbmQgdGhlIGFuYWxvZyBzaWduYWxzIHppcHBpbmcgYWNyb3NzIHRoZSBVU0IgY2FibGUuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhlcmUsIGdpdmVuIHRoZSBvZnRlbiBjb21wbGV4IHJlcXVpcmVtZW50cyBvZiB0aGVzZSBsb3ctbGV2ZWwgaW50ZXJmYWNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIHN0cnVjdHVyZSBkZWZpbml0aW9ucywgdGhlIFBIWSBpbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBhbmQgb2YgY291cnNlLCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIHRoYXQgcmVzcG9uZCB0byBVU0IgZXZlbnRzIGF0IHRoZSBwaHlzaWNhbCBsYXllci4gSSYjMzk7bGwgbGlrZWx5IGJlIGNoZWNraW5nIGZvciBjbG9jayBjb25maWd1cmF0aW9uLCBwb3dlciBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBzcGVjaWZpYyBoYXJkd2FyZSBxdWlya3Mgb3IgZXJyYXRhIHdvcmthcm91bmRzIHRoYXQgYXJlIGNvbW1vbiBpbiB0aGlzIGtpbmQgb2YgZHJpdmVyLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIHN0cnVjdHVyZWQsIGhvdyBjbGVhcmx5IHRoZSBhYnN0cmFjdGlvbiBpcyBkZWZpbmVkLCBhbmQgd2hldGhlciBpdCBhbGlnbnMgd2l0aCB0aGUgZGV2aWNlJiMzOTtzIGRvY3VtZW50YXRpb24uIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlcmUgYXJlIGFueSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucyBhbmQgaG93IHRoZXkmIzM5O3JlIG1hbmFnZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvcGh5L3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0ICogSWYgd2UgZ2V0IHRoZSBjaGFyZ2VyIHR5cGUgZnJvbSAtXHUwMDNlY2hhcmdlcl9kZXRlY3QoKSBpbnN0ZWFkIG9mIGV4dGNvblxuIDEwMjpcdCAqIHN1YnN5c3RlbSwgdGhlIHVzYiBwaHkgZHJpdmVyIHNob3VsZCBpc3N1ZSB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKClcbiAxMDM6XHQgKiB0byBzZXQgY2hhcmdlciBzdGF0ZSB3aGVuIHRoZSBjaGFyZ2VyIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuXG4gMTA0Olx0ICovXG4gMTA1Olx0c3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiAxMDY6XHR7XG4gMTA3Olx0XHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX3BoeSwgY2hnX3dvcmspO1xuIDEwODpcdFx0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XG4gMTA5Olx0XHRjaGFyIHVjaGdlcl90eXBlWzUwXSA9IHsgMCB9O1xuIDExMDpcdFx0Y2hhciAqZW52cFtdID0geyB1Y2hnZXJfc3RhdGUsIHVjaGdlcl90eXBlLCBOVUxMIH07XG4gMTExOlx0XHR1bnNpZ25lZCBpbnQgbWluLCBtYXg7XG4gMTEyOlx0XG4gMTEzOlx0XHRzd2l0Y2ggKHVzYl9waHktXHUwMDNlY2hnX3N0YXRlKSB7XG4gMTE0Olx0XHRjYXNlIFVTQl9DSEFSR0VSX1BSRVNFTlQ6XG4gMTE1Olx0XHRcdHVzYl9waHlfZ2V0X2NoYXJnZXJfY3VycmVudCh1c2JfcGh5LCBcdTAwMjZtaW4sIFx1MDAyNm1heCk7XG4gMTE2Olx0XG4gMTE3Olx0XHRcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnVzYl9waHktXHUwMDNlbm90aWZpZXIsIG1heCwgdXNiX3BoeSk7XG4gMTE4Olx0XHRcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxuIDExOTpcdFx0XHRcdCBcJiMzNDtVU0JfQ0hBUkdFUl9TVEFURT0lc1wmIzM0OywgXCYjMzQ7VVNCX0NIQVJHRVJfUFJFU0VOVFwmIzM0Oyk7XG4gMTIwOlx0XHRcdGJyZWFrO1xuIDEyMTpcdFx0Y2FzZSBVU0JfQ0hBUkdFUl9BQlNFTlQ6XG4gMTIyOlx0XHRcdHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudCh1c2JfcGh5KTtcbiAxMjM6XHRcbiAxMjQ6XHRcdFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2dXNiX3BoeS1cdTAwM2Vub3RpZmllciwgMCwgdXNiX3BoeSk7XG4gMTI1Olx0XHRcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxuIDEyNjpcdFx0XHRcdCBcJiMzNDtVU0JfQ0hBUkdFUl9TVEFURT0lc1wmIzM0OywgXCYjMzQ7VVNCX0NIQVJHRVJfQUJTRU5UXCYjMzQ7KTtcbiAxMjc6XHRcdFx0YnJlYWs7XG4gMTI4Olx0XHRkZWZhdWx0OlxuIDEyOTpcdFx0XHRkZXZfd2Fybih1c2JfcGh5LVx1MDAzZWRldiwgXCYjMzQ7VW5rbm93biBVU0IgY2hhcmdlciBzdGF0ZTogJWRcXG5cJiMzNDssXG4gMTMwOlx0XHRcdFx0IHVzYl9waHktXHUwMDNlY2hnX3N0YXRlKTtcbiAxMzE6XHRcdFx0cmV0dXJuO1xuIDEzMjpcdFx0fVxuIDEzMzpcdFxuIDEzNDpcdFx0c25wcmludGYodWNoZ2VyX3R5cGUsIEFSUkFZX1NJWkUodWNoZ2VyX3R5cGUpLFxuIDEzNTpcdFx0XHQgXCYjMzQ7VVNCX0NIQVJHRVJfVFlQRT0lc1wmIzM0OywgdXNiX2NoZ2VyX3R5cGVbdXNiX3BoeS1cdTAwM2VjaGdfdHlwZV0pO1xuIDEzNjpcdFx0a29iamVjdF91ZXZlbnRfZW52KFx1MDAyNnVzYl9waHktXHUwMDNlZGV2LVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTtcbiAxMzc6XHR9XG4gMTM4Olx0XG4gMTM5Olx0c3RhdGljIHZvaWQgX191c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4gMTQwOlx0e1xuIDE0MTpcdFx0aWYgKGV4dGNvbl9nZXRfc3RhdGUodXNiX3BoeS1cdTAwM2VlZGV2LCBFWFRDT05fQ0hHX1VTQl9TRFApIFx1MDAzZSAwKSB7XG4gMTQyOlx0XHRcdHVzYl9waHktXHUwMDNlY2hnX3R5cGUgPSBTRFBfVFlQRTtcbiAxNDM6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfc3RhdGUgPSBVU0JfQ0hBUkdFUl9QUkVTRU5UO1xuIDE0NDpcdFx0fSBlbHNlIGlmIChleHRjb25fZ2V0X3N0YXRlKHVzYl9waHktXHUwMDNlZWRldiwgRVhUQ09OX0NIR19VU0JfQ0RQKSBcdTAwM2UgMCkge1xuIDE0NTpcdFx0XHR1c2JfcGh5LVx1MDAzZWNoZ190eXBlID0gQ0RQX1RZUEU7XG4gMTQ2Olx0XHRcdHVzYl9waHktXHUwMDNlY2hnX3N0YXRlID0gVVNCX0NIQVJHRVJfUFJFU0VOVDtcbiAxNDc6XHRcdH0gZWxzZSBpZiAoZXh0Y29uX2dldF9zdGF0ZSh1c2JfcGh5LVx1MDAzZWVkZXYsIEVYVENPTl9DSEdfVVNCX0RDUCkgXHUwMDNlIDApIHtcbiAxNDg6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfdHlwZSA9IERDUF9UWVBFO1xuIDE0OTpcdFx0XHR1c2JfcGh5LVx1MDAzZWNoZ19zdGF0ZSA9IFVTQl9DSEFSR0VSX1BSRVNFTlQ7XG4gMTUwOlx0XHR9IGVsc2UgaWYgKGV4dGNvbl9nZXRfc3RhdGUodXNiX3BoeS1cdTAwM2VlZGV2LCBFWFRDT05fQ0hHX1VTQl9BQ0EpIFx1MDAzZSAwKSB7XG4gMTUxOlx0XHRcdHVzYl9waHktXHUwMDNlY2hnX3R5cGUgPSBBQ0FfVFlQRTtcbiAxNTI6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfc3RhdGUgPSBVU0JfQ0hBUkdFUl9QUkVTRU5UO1xuIDE1MzpcdFx0fSBlbHNlIHtcbiAxNTQ6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfdHlwZSA9IFVOS05PV05fVFlQRTtcbiAxNTU6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfc3RhdGUgPSBVU0JfQ0hBUkdFUl9BQlNFTlQ7XG4gMTU2Olx0XHR9XG4gMTU3Olx0XG4gMTU4Olx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnVzYl9waHktXHUwMDNlY2hnX3dvcmspO1xuIDE1OTpcdH1cbiAxNjA6XHRcbiAxNjE6XHQvKipcbiAxNjI6XHQgKiB1c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUgLSBnZXQgY2hhcmdlciB0eXBlIGZyb20gZXh0Y29uIHN1YnN5c3RlbVxuIDE2MzpcdCAqIEBuYjogdGhlIG5vdGlmaWVyIGJsb2NrIHRvIGRldGVybWluZSBjaGFyZ2VyIHR5cGVcbiAxNjQ6XHQgKiBAc3RhdGU6IHRoZSBjYWJsZSBzdGF0ZVxuIDE2NTpcdCAqIEBkYXRhOiBwcml2YXRlIGRhdGFcbiAxNjY6XHQgKlxuIDE2NzpcdCAqIERldGVybWluIHRoZSBjaGFyZ2VyIHR5cGUgZnJvbSBleHRjb24gc3Vic3lzdGVtIHdoaWNoIGFsc28gbWVhbnMgdGhlXG4gMTY4Olx0ICogY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZWQsIHRoZW4gd2Ugc2hvdWxkIG5vdGlmeSB0aGlzIGV2ZW50LlxuIDE2OTpcdCAqL1xuIDE3MDpcdHN0YXRpYyBpbnQgdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gMTcxOlx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGF0ZSwgdm9pZCAqZGF0YSlcbiAxNzI6XHR7XG4gMTczOlx0XHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHVzYl9waHksIHR5cGVfbmIpO1xuIDE3NDpcdFxuIDE3NTpcdFx0X191c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUodXNiX3BoeSk7XG4gMTc2Olx0XHRyZXR1cm4gTk9USUZZX09LO1xuIDE3NzpcdH1cbiAxNzg6XHRcbiAxNzk6XHQvKipcbiAxODA6XHQgKiB1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQgLSBzZXQgdGhlIFVTQiBjaGFyZ2VyIGN1cnJlbnRcbiAxODE6XHQgKiBAdXNiX3BoeTogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZFxuIDE4MjpcdCAqIEBtQTogdGhlIGN1cnJlbnQgbmVlZCB0byBiZSBzZXRcbiAxODM6XHQgKlxuIDE4NDpcdCAqIFVzdWFsbHkgd2Ugb25seSBjaGFuZ2UgdGhlIGNoYXJnZXIgZGVmYXVsdCBjdXJyZW50IHdoZW4gVVNCIGZpbmlzaGVkIHRoZVxuIDE4NTpcdCAqIGVudW1lcmF0aW9uIGFzIG9uZSBTRFAgY2hhcmdlci4gQXMgb25lIFNEUCBjaGFyZ2VyLCB1c2JfcGh5X3NldF9wb3dlcigpXG4gMTg2Olx0ICogd2lsbCBpc3N1ZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSBjaGFyZ2VyIGN1cnJlbnQgd2hlbiBhZnRlciBzZXR0aW5nIFVTQlxuIDE4NzpcdCAqIGNvbmZpZ3VyYXRpb24sIG9yIHN1c3BlbmQvcmVzdW1lIFVTQi4gRm9yIG90aGVyIHR5cGUgY2hhcmdlciwgd2Ugc2hvdWxkXG4gMTg4Olx0ICogdXNlIHRoZSBkZWZhdWx0IGNoYXJnZXIgY3VycmVudCBhbmQgd2UgZG8gbm90IHN1Z2dlc3QgdG8gaXNzdWUgdGhpcyBmdW5jdGlvblxuIDE4OTpcdCAqIHRvIGNoYW5nZSB0aGUgY2hhcmdlciBjdXJyZW50LlxuIDE5MDpcdCAqXG4gMTkxOlx0ICogV2hlbiBVU0IgY2hhcmdlciBjdXJyZW50IGhhcyBiZWVuIGNoYW5nZWQsIHdlIG5lZWQgdG8gbm90aWZ5IHRoZSBwb3dlciB1c2Vycy5cbiAxOTI6XHQgKi9cbiAxOTM6XHR2b2lkIHVzYl9waHlfc2V0X2NoYXJnZXJfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSwgdW5zaWduZWQgaW50IG1BKVxuIDE5NDpcdHtcbiAxOTU6XHRcdHN3aXRjaCAodXNiX3BoeS1cdTAwM2VjaGdfdHlwZSkge1xuIDE5NjpcdFx0Y2FzZSBTRFBfVFlQRTpcbiAxOTc6XHRcdFx0aWYgKHVzYl9waHktXHUwMDNlY2hnX2N1ci5zZHBfbWF4ID09IG1BKVxuIDE5ODpcdFx0XHRcdHJldHVybjtcbiAxOTk6XHRcbiAyMDA6XHRcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLnNkcF9tYXggPSAobUEgXHUwMDNlIERFRkFVTFRfU0RQX0NVUl9NQVhfU1MpID9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg3MwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBQSFkgQ2hhcmdlciBTdGF0ZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBiYWNrIGludG8gdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMuIFByZXZpb3VzbHksIGhlcmUmIzM5O3MgaG93IHRoaW5ncyB3b3JrZWQ6IGluIGB1c2JfYWRkX3BoeV9kZXZgLCB3ZSBhc3NpZ25lZCBgeC0mZ3Q7ZGV2LSZndDt0eXBlID0gJmFtcDt1c2JfcGh5X2Rldl90eXBlYC4gVGhpcyBtZWFudCB0aGF0IHRoZSBgdWV2ZW50YCBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhhdCBkZXZpY2UgdHlwZSwgYHVzYl9waHlfdWV2ZW50YCwgd291bGQgYmUgY2FsbGVkLiBUaGVuLCB3aXRoaW4gYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2AsIHdlIHRyaWdnZXJlZCBhIGBrb2JqZWN0X3VldmVudGAgdG8gc2lnbmFsIGEgY2hhbmdlLiBUaGlzIHVsdGltYXRlbHkgbGVkIHRvIGB1c2JfcGh5X3VldmVudGAgYmVpbmcgaW52b2tlZCwgd2hlcmUgd2UmIzM5O2QgZXh0cmFjdCBhbmQgYWRkIGBVU0JfQ0hBUkdFUl9TVEFURWAgYW5kIGBVU0JfQ0hBUkdFUl9UWVBFYCB0byB0aGUgZW52aXJvbm1lbnQuCgpOb3csIHRoaXMgcGF0Y2ggaXMgc2lnbmlmaWNhbnRseSByZWZhY3RvcmluZyB0aGF0IGFwcHJvYWNoLiBUaGV5JiMzOTt2ZSBlbGltaW5hdGVkIGB1c2JfY2hnZXJfc3RhdGVgLCBgX19kZXZpY2VfdG9fdXNiX3BoeWAsIGB1c2JfcGh5X3VldmVudGAsIGFuZCBgdXNiX3BoeV9kZXZfdHlwZWAuIEluc3RlYWQsIGluIGB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtgLCB0aGV5IGFyZSBjb25zdHJ1Y3RpbmcgdGhlIGB1Y2hnZXJfc3RhdGVgIGFuZCBgdWNoZ2VyX3R5cGVgIGRpcmVjdGx5IGFuZCB1c2luZyBga29iamVjdF91ZXZlbnRfZW52YC4gUGx1cywgY3J1Y2lhbGx5LCB0aGV5IHJlbW92ZWQgdGhlIGFzc2lnbm1lbnQgb2YgYHgtJmd0O2Rldi0mZ3Q7dHlwZSA9ICZhbXA7dXNiX3BoeV9kZXZfdHlwZWAgd2l0aGluIGB1c2JfYWRkX3BoeV9kZXZgLgoKVGhlIHN0YXRlZCByZWFzb24gaXMgbWFraW5nIHN1cmUgd2UgZG9uJiMzOTt0IG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgZGV2aWNlIHR5cGUsIG9yIHdoZW4gdWV2ZW50IGlzIGdlbmVyYXRlZCBkaXJlY3RseSBmcm9tIHdvcmtxdWV1ZSwgaXQgcGFzc2VzIGBlbnZwYCB0byBga29iamVjdF91ZXZlbnRfZW52YC4gVGhpcyBtYWtlcyBzZW5zZSwgYmVjYXVzZSBvdmVyd3JpdGluZyB0aGUgZGV2aWNlIHR5cGUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpZiBhbm90aGVyIGRyaXZlciBhbHJlYWR5IHNldCBpdCwgYW5kIHRoaXMgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGVudmlyb25tZW50IGRpcmVjdGx5IHRvIHRoZSBga29iamVjdF91ZXZlbnRgLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2FmZSBhbmQgdGhlIGltcGFjdC4gU3BlY2lmaWNhbGx5LCBpcyB0aGUgY29kZSBpbiBgZHJpdmVycy91c2IvcGh5L3BoeS5jYCBzdGlsbCByZWFjaGVkPyBJIHNob3VsZCBjaGVjayBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2AsIGB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlYCwgYHVzYl9hZGRfcGh5X2RldmAsIGFuZCBgdXNiX2FkZF9waHlgLiBJIGFsc28gbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIG1vZHVsZXMgdGhhdCBkZXBlbmQgb24gYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9hZGRfcGh5X2Rldnx1c2JfYWRkX3BoeXx1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9waHkvbW90b3JvbGEvcGh5LWNwY2FwLXVzYi5jPTYwOD1zdGF0aWMgaW50IGNwY2FwX3VzYl9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHktY3BjYXAtdXNiLmMtNjc1LVxuZHJpdmVycy9waHkvbW90b3JvbGEvcGh5LWNwY2FwLXVzYi5jOjY3NjpcdHVzYl9hZGRfcGh5X2RldihcdTAwMjZkZGF0YS1cdTAwM2VwaHkpO1xuZHJpdmVycy9waHkvbW90b3JvbGEvcGh5LWNwY2FwLXVzYi5jLTY3Ny1cdGF0b21pY19zZXQoXHUwMDI2ZGRhdGEtXHUwMDNlYWN0aXZlLCAxKTtcbi0tXG5kcml2ZXJzL3BoeS9waHktbGdtLXVzYi5jPTE4Nz1zdGF0aWMgaW50IHBoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvcGh5L3BoeS1sZ20tdXNiLmMtMjUxLVxuZHJpdmVycy9waHkvcGh5LWxnbS11c2IuYzoyNTI6XHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KHBoeSk7XG5kcml2ZXJzL3BoeS9waHktbGdtLXVzYi5jLTI1My19XG4tLVxuZHJpdmVycy9waHkvdGVncmEveHVzYi5jPTY2MD1zdGF0aWMgaW50IHRlZ3JhX3h1c2Jfc2V0dXBfdXNiX3JvbGVfc3dpdGNoKHN0cnVjdCB0ZWdyYV94dXNiX3BvcnQgKnBvcnQpXG4tLVxuZHJpdmVycy9waHkvdGVncmEveHVzYi5jLTcxNC1cbmRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYzo3MTU6XHRlcnIgPSB1c2JfYWRkX3BoeV9kZXYoXHUwMDI2cG9ydC1cdTAwM2V1c2JfcGh5KTtcbmRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYy03MTYtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9waHkvdGkvcGh5LWRtODE2eC11c2IuYz0xNzE9c3RhdGljIGludCBkbTgxNnhfdXNiX3BoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvcGh5L3RpL3BoeS1kbTgxNngtdXNiLmMtMjQwLVxuZHJpdmVycy9waHkvdGkvcGh5LWRtODE2eC11c2IuYzoyNDE6XHR1c2JfYWRkX3BoeV9kZXYoXHUwMDI2cGh5LVx1MDAzZXBoeSk7XG5kcml2ZXJzL3BoeS90aS9waHktZG04MTZ4LXVzYi5jLTI0Mi1cbi0tXG5kcml2ZXJzL3BoeS90aS9waHktb21hcC11c2IyLmM9MzczPXN0YXRpYyBpbnQgb21hcF91c2IyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9waHkvdGkvcGh5LW9tYXAtdXNiMi5jLTUxMS1cbmRyaXZlcnMvcGh5L3RpL3BoeS1vbWFwLXVzYjIuYzo1MTI6XHR1c2JfYWRkX3BoeV9kZXYoXHUwMDI2cGh5LVx1MDAzZXBoeSk7XG5kcml2ZXJzL3BoeS90aS9waHktb21hcC11c2IyLmMtNTEzLVxuLS1cbmRyaXZlcnMvcGh5L3RpL3BoeS10d2w0MDMwLXVzYi5jPTY4Mz1zdGF0aWMgaW50IHR3bDQwMzBfdXNiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9waHkvdGkvcGh5LXR3bDQwMzAtdXNiLmMtNzQ4LVx0fVxuZHJpdmVycy9waHkvdGkvcGh5LXR3bDQwMzAtdXNiLmM6NzQ5Olx0dXNiX2FkZF9waHlfZGV2KFx1MDAyNnR3bC1cdTAwM2VwaHkpO1xuZHJpdmVycy9waHkvdGkvcGh5LXR3bDQwMzAtdXNiLmMtNzUwLVxuLS1cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jPTE4OTc9c3RhdGljIGludCBjaV91ZGNfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKVxuLS1cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jLTE5MDctXHRpZiAoY2ktXHUwMDNldXNiX3BoeSlcbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jOjE5MDg6XHRcdHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoY2ktXHUwMDNldXNiX3BoeSwgaXNfYWN0aXZlID9cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jLTE5MDktXHRcdFx0VVNCX0NIQVJHRVJfUFJFU0VOVCA6IFVTQl9DSEFSR0VSX0FCU0VOVCk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM9ODY4PXN0YXRpYyBpbnQgYWI4NTAwX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTkzOC1cbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjkzOTpcdGVyciA9IHVzYl9hZGRfcGh5KFx1MDAyNmFiLVx1MDAzZXBoeSwgVVNCX1BIWV9UWVBFX1VTQjIpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtOTQwLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmM9Mzg9c3RhdGljIGludCBhbTMzNXhfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYy04MS1cbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmM6ODI6XHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFx1MDAyNmFtX3BoeS1cdTAwM2V1c2JfcGh5X2dlbi5waHkpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYy04My19XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM9NzczPXN0YXRpYyBpbnQgZnNsX290Z19jb25mKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmMtODE3LVx0LyogU3RvcmUgdGhlIG90ZyB0cmFuc2NlaXZlciAqL1xuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM6ODE4Olx0c3RhdHVzID0gdXNiX2FkZF9waHkoXHUwMDI2ZnNsX290Z190Yy1cdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jLTgxOS1cdGlmIChzdGF0dXMpIHtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0yNjQ9c3RhdGljIGludCB1c2JfcGh5X2dlbmVyaWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yOTQtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoyOTU6XHRlcnIgPSB1c2JfYWRkX3BoeV9kZXYoXHUwMDI2bm9wLVx1MDAzZXBoeSk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yOTYtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jPTIzMT1zdGF0aWMgaW50IGdwaW9fdmJ1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jLTMxNS1cdC8qIG9ubHkgYWN0aXZlIHdoZW4gYSBnYWRnZXQgaXMgcmVnaXN0ZXJlZCAqL1xuZHJpdmVycy91c2IvcGh5L3BoeS1ncGlvLXZidXMtdXNiLmM6MzE2Olx0ZXJyID0gdXNiX2FkZF9waHkoXHUwMDI2Z3Bpb192YnVzLVx1MDAzZXBoeSwgVVNCX1BIWV9UWVBFX1VTQjIpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1ncGlvLXZidXMtdXNiLmMtMzE3LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jPTk1PXN0YXRpYyBpbnQgaXNwMTMwMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jLTExNC1cdGkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGlzcCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYzoxMTU6XHR1c2JfYWRkX3BoeV9kZXYocGh5KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jLTExNi1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM9NjU9c3RhdGljIGludCBrZXlzdG9uZV91c2JwaHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtODctXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6ODg6XHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFx1MDAyNmtfcGh5LVx1MDAzZXVzYl9waHlfZ2VuLnBoeSk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtODktfVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jPTc1OD1zdGF0aWMgaW50IG14c19waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy04NjctXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYzo4Njg6XHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFx1MDAyNm14c19waHktXHUwMDNlcGh5KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg2OS19XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jPTMxOT1zdGF0aWMgaW50IHRhaHZvX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGFodm8uYy0zODMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRhaHZvLmM6Mzg0Olx0cmV0ID0gdXNiX2FkZF9waHkoXHUwMDI2dHUtXHUwMDNlcGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRhaHZvLmMtMzg1LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9MTQ5MD1zdGF0aWMgaW50IHRlZ3JhX3VzYl9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTE2MzMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjE2MzQ6XHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFx1MDAyNnRlZ3JhX3BoeS1cdTAwM2V1X3BoeSk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTE2MzUtfVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYz03Nz1zdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTEwMS0gKiBJZiB3ZSBnZXQgdGhlIGNoYXJnZXIgdHlwZSBmcm9tIC1cdTAwM2VjaGFyZ2VyX2RldGVjdCgpIGluc3RlYWQgb2YgZXh0Y29uXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MTAyOiAqIHN1YnN5c3RlbSwgdGhlIHVzYiBwaHkgZHJpdmVyIHNob3VsZCBpc3N1ZSB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKClcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xMDMtICogdG8gc2V0IGNoYXJnZXIgc3RhdGUgd2hlbiB0aGUgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0yNjg9RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KTtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjcwLS8qKlxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjI3MTogKiB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlIC0gc2V0IHRoZSBVU0IgY2hhcmdlciBzdGF0ZVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI3Mi0gKiBAdXNiX3BoeTogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yNzgtICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6Mjc5OnZvaWQgdXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZShzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yODAtXHRcdFx0ICAgICAgIGVudW0gdXNiX2NoYXJnZXJfc3RhdGUgc3RhdGUpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI5Mi19XG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MjkzOkVYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUpO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI5NC1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9NTg5PUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9wdXRfcGh5KTtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNTkxLS8qKlxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjU5MjogKiB1c2JfYWRkX3BoeTogZGVjbGFyZSB0aGUgVVNCIFBIWVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTU5My0gKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy01OTktICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NjAwOmludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MDEte1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MzctfVxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjYzODpFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYWRkX3BoeSk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjM5LVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY0MC0vKipcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2NDE6ICogdXNiX2FkZF9waHlfZGV2IC0gZGVjbGFyZSB0aGUgVVNCIFBIWVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY0Mi0gKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02NDctICovXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NjQ4OmludCB1c2JfYWRkX3BoeV9kZXYoc3RydWN0IHVzYl9waHkgKngpXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjQ5LXtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjcyLX1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2NzM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2FkZF9waHlfZGV2KTtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02NzQtXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY3OC0gKlxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjY3OTogKiBUaGlzIHJldmVydHMgdGhlIGVmZmVjdHMgb2YgdXNiX2FkZF9waHlcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02ODAtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTY1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFVTQiBQSFkgU2VsZWN0aW9uIGFuZCBJbnN0YW50aWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGBVU0JfUEhZYCBpcyBhIGtleSBjb21wb25lbnQgaGVyZSwgYW5kIG11bHRpcGxlIGRyaXZlcnMsIGluY2x1ZGluZyBgTk9QX1VTQl9YQ0VJVmAsIGFyZSBpbnZvbHZlZCBpbiBpdHMgc2VsZWN0aW9uLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBub3cgaXMsIGNhbiB3ZSBhY3R1YWxseSBwcm9iZSBvciBpbnN0YW50aWF0ZSB0aGlzIGBOT1BfVVNCX1hDRUlWYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgYSBjb25jcmV0ZSBlbnRpdHkgb3IgbW9yZSBvZiBhbiBhYnN0cmFjdCByZXByZXNlbnRhdGlvbiBvZiBhIGdlbmVyaWMgVVNCIFBIWS4gVGltZSB0byBkaWcgaW50byBgcGh5LWdlbmVyaWMuY2AuIFRoYXQgc2hvdWxkIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGdlbmVyaWMgUEhZIGlzIGhhbmRsZWQgYXQgdGhlIGRyaXZlciBsZXZlbCwgYW5kIHdoZXRoZXIgd2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggaXQuIEkmIzM5O20gaG9waW5nIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIGdlbmVyaWMgVVNCIHRyYW5zY2VpdmVyIGxvZ2ljIHdpdGhpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9waHlfZ2VuZXJpYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9waHkvcGh5LWFtMzM1eC5jLTUtI2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL290Zy5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFtMzM1eC5jOjY6I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFtMzM1eC5jLTctI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYz0xNj1zdHJ1Y3QgYW0zMzV4X3BoeSB7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWFtMzM1eC5jOjE3Olx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyB1c2JfcGh5X2dlbjtcbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMtMTgtXHRzdHJ1Y3QgcGh5X2NvbnRyb2wgKnBoeV9jdHJsO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi9vdGcuaFx1MDAzZVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MTk6I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMi1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMzOnN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVzYl9waHlfZ2VuZXJpY19yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzQte1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzU6XHRyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShcJiMzNDt1c2JfcGh5X2dlbmVyaWNcJiMzNDssXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zNi1cdFx0XHRQTEFURk9STV9ERVZJRF9BVVRPLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM3LX1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjM4OkVYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfZ2VuZXJpY19yZWdpc3Rlcik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zOS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjQwOnZvaWQgdXNiX3BoeV9nZW5lcmljX3VucmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTQxLXtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy00My19XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3Rlcik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy00NS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTQ2PXN0YXRpYyBpbnQgbm9wX3NldF9zdXNwZW5kKHN0cnVjdCB1c2JfcGh5ICp4LCBpbnQgc3VzcGVuZClcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTQ3LXtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjQ4Olx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGV2X2dldF9kcnZkYXRhKHgtXHUwMDNlZGV2KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTQ5LVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtNjMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzo2NDpzdGF0aWMgdm9pZCBub3BfcmVzZXQoc3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wKVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtNjUte1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTc2PXN0YXRpYyBpbnQgbm9wX3NldF92YnVzKHN0cnVjdCB1c2Jfb3RnICpvdGcsIGJvb2wgZW5hYmxlKVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTc4LVx0aW50IHJldCA9IDA7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzo3OTpcdHN0cnVjdCB1c2JfcGh5X2dlbmVyaWMgKm5vcCA9IGRldl9nZXRfZHJ2ZGF0YShvdGctXHUwMDNldXNiX3BoeS1cdTAwM2VkZXYpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtODAtXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM9OTk9c3RhdGljIGlycXJldHVybl90IG5vcF9ncGlvX3ZidXNfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xMDAte1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MTAxOlx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGF0YTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTEwMi1cdHN0cnVjdCB1c2Jfb3RnICpvdGcgPSBub3AtXHUwMDNlcGh5Lm90Zztcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0xMjg9aW50IHVzYl9nZW5fcGh5X2luaXQoc3RydWN0IHVzYl9waHkgKnBoeSlcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTEyOS17XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoxMzA6XHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AgPSBkZXZfZ2V0X2RydmRhdGEocGh5LVx1MDAzZWRldik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xMzEtXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTE0OD12b2lkIHVzYl9nZW5fcGh5X3NodXRkb3duKHN0cnVjdCB1c2JfcGh5ICpwaHkpXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xNDkte1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MTUwOlx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGV2X2dldF9kcnZkYXRhKHBoeS1cdTAwM2VkZXYpO1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMTUxLVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTE4Mj1zdGF0aWMgaW50IG5vcF9zZXRfaG9zdChzdHJ1Y3QgdXNiX290ZyAqb3RnLCBzdHJ1Y3QgdXNiX2J1cyAqaG9zdClcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xOTUtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoxOTY6aW50IHVzYl9waHlfZ2VuX2NyZWF0ZV9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3ApXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xOTcte1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTI2Mj1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dlbl9jcmVhdGVfcGh5KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTI2My1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjI2NDpzdGF0aWMgaW50IHVzYl9waHlfZ2VuZXJpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMjY1LXtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTI2Ni1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MjY3Olx0c3RydWN0IHVzYl9waHlfZ2VuZXJpY1x0Km5vcDtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTI2OC1cdGludCBlcnI7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzA2LVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzA3OnN0YXRpYyB2b2lkIHVzYl9waHlfZ2VuZXJpY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTMwOC17XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMDk6XHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTMxMC1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0zMjI9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbm9wX3hjZWl2X2R0X2lkcyk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMjMtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMjQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdXNiX3BoeV9nZW5lcmljX2RyaXZlciA9IHtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyNTpcdC5wcm9iZVx0XHQ9IHVzYl9waHlfZ2VuZXJpY19wcm9iZSxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyNjpcdC5yZW1vdmVcdFx0PSB1c2JfcGh5X2dlbmVyaWNfcmVtb3ZlLFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzI3LVx0LmRyaXZlclx0XHQ9IHtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyODpcdFx0Lm5hbWVcdD0gXCYjMzQ7dXNiX3BoeV9nZW5lcmljXCYjMzQ7LFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzI5LVx0XHQub2ZfbWF0Y2hfdGFibGUgPSBub3BfeGNlaXZfZHRfaWRzLFxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTMzMi1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMzMzpzdGF0aWMgaW50IF9faW5pdCB1c2JfcGh5X2dlbmVyaWNfaW5pdCh2b2lkKVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzM0LXtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMzNTpcdHJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2dXNiX3BoeV9nZW5lcmljX2RyaXZlcik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMzYtfVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzM3OnN1YnN5c19pbml0Y2FsbCh1c2JfcGh5X2dlbmVyaWNfaW5pdCk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMzgtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMzk6c3RhdGljIHZvaWQgX19leGl0IHVzYl9waHlfZ2VuZXJpY19leGl0KHZvaWQpXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zNDAte1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzQxOlx0cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dXNiX3BoeV9nZW5lcmljX2RyaXZlcik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zNDItfVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzQzOm1vZHVsZV9leGl0KHVzYl9waHlfZ2VuZXJpY19leGl0KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM0NC1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjM0NTpNT0RVTEVfQUxJQVMoXCYjMzQ7cGxhdGZvcm06dXNiX3BoeV9nZW5lcmljXCYjMzQ7KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM0Ni1NT0RVTEVfQVVUSE9SKFwmIzM0O1RleGFzIEluc3RydW1lbnRzIEluY1wmIzM0Oyk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmgtNC1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oOjU6I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaC02LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTgtXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaDo5OnN0cnVjdCB1c2JfcGh5X2dlbmVyaWMge1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmgtMTAtXHRzdHJ1Y3QgdXNiX3BoeSBwaHk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmg9MjM9dm9pZCB1c2JfZ2VuX3BoeV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3BoeSAqcGh5KTtcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTI0LVxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmg6MjU6aW50IHVzYl9waHlfZ2VuX2NyZWF0ZV9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3ApO1xuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmgtMjYtXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXHUwMDNlXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYz0yOD1zdHJ1Y3Qga2V5c3RvbmVfdXNicGh5IHtcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzoyOTpcdHN0cnVjdCB1c2JfcGh5X2dlbmVyaWNcdHVzYl9waHlfZ2VuO1xuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTMwLVx0dm9pZCBfX2lvbWVtXHRcdFx0KnBoeV9jdHJsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg3MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgVVNCX1BIWWAgRGVwZW5kZW5jeSBhbmQgQ2hhcmdlciBTdGF0ZSoqCgpSaWdodCwgc28gYFVTQl9QSFlgIGlzIHByZWRpY3RhYmx5IGdvaW5nIHRvIGJlIGluIGFueSBrZXJuZWwgYnVpbGQgdGhhdCBpbmNsdWRlcyBVU0IgUEhZIGRyaXZlcnMuIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlIGxpbmtlZCBpbiB3aGVuIHNvbWV0aGluZyBsaWtlIHRoZSBnZW5lcmljLCBDaGlwSWRlYSwgb3IgZ2FkZ2V0IFBIWSBkcml2ZXJzIGFyZSBjb25maWd1cmVkLiBUaGF0IG1ha2VzIHNlbnNlLCBhIHZlcnkgY29tbW9uIGRlcGVuZGVuY3kgaW4gYSBsb3Qgb2YgYnVpbGRzLCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCBteSByZWFsIGludGVyZXN0IGxpZXMgaW4gaG93IHRoaXMgYWZmZWN0cyB0aGUgY2hhcmdlciBzdGF0ZSBub3RpZmljYXRpb24sIHNwZWNpZmljYWxseSBob3cgYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2AgZ2V0cyBpbnZva2VkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIGNoYWluLiBJJiMzOTtsbCBuZWVkIHRvIGZpbmQgd2hlcmUgYHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGVgIGlzIGJlaW5nIGNhbGxlZCBhbmQgdGhlbiB0cmFjZSBob3cgdGhhdCBsZWFkcyB0byB0aGUgd29ya3F1ZXVlLiBMZXQmIzM5O3Mgc2VlLCBhIHF1aWNrIGBncmVwYCBmb3IgdGhvc2UgdGVybXMsIG1heWJlIGFsc28gYGNoZ193b3JrYCBvciBgdHlwZV9uYmAganVzdCBpbiBjYXNlLCBzaG91bGQgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBwcmV0dHkgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hnX3dvcmt8dXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZXx0eXBlX25iJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0yMS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjI6c3RydWN0IGFmdGVyX3N0YXRlX2NoZ193b3JrIHtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjMtXHRzdHJ1Y3QgZHJiZF93b3JrIHc7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYz0xMjYzPV9kcmJkX3NldF9zdGF0ZShzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwgdW5pb24gZHJiZF9zdGF0ZSBucyxcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTEyNzAtXHRlbnVtIHNhbml0aXplX3N0YXRlX3dhcm5pbmdzIHNzdztcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MTI3MTpcdHN0cnVjdCBhZnRlcl9zdGF0ZV9jaGdfd29yayAqYXNjdztcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMTI3Mi1cdHN0cnVjdCBkcmJkX3N0YXRlX2NoYW5nZSAqc3RhdGVfY2hhbmdlO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM9MTQ4OT1zdGF0aWMgaW50IHdfYWZ0ZXJfc3RhdGVfY2goc3RydWN0IGRyYmRfd29yayAqdywgaW50IHVudXNlZClcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMTQ5MC17XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jOjE0OTE6XHRzdHJ1Y3QgYWZ0ZXJfc3RhdGVfY2hnX3dvcmsgKmFzY3cgPVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYzoxNDkyOlx0XHRjb250YWluZXJfb2Yodywgc3RydWN0IGFmdGVyX3N0YXRlX2NoZ193b3JrLCB3KTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMTQ5My1cdHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlID0gYXNjdy1cdTAwM2VkZXZpY2U7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYz0xNzA4PXN0YXRpYyB2b2lkIGFmdGVyX3N0YXRlX2NoKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCB1bmlvbiBkcmJkX3N0YXRlIG9zLFxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjAzNi1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjAzNzpzdHJ1Y3QgYWZ0ZXJfY29ubl9zdGF0ZV9jaGdfd29yayB7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTIwMzgtXHRzdHJ1Y3QgZHJiZF93b3JrIHc7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYz0yMDQ3PXN0YXRpYyBpbnQgd19hZnRlcl9jb25uX3N0YXRlX2NoKHN0cnVjdCBkcmJkX3dvcmsgKncsIGludCB1bnVzZWQpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTIwNDgte1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYzoyMDQ5Olx0c3RydWN0IGFmdGVyX2Nvbm5fc3RhdGVfY2hnX3dvcmsgKmFjc2N3ID1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjA1MDpcdFx0Y29udGFpbmVyX29mKHcsIHN0cnVjdCBhZnRlcl9jb25uX3N0YXRlX2NoZ193b3JrLCB3KTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjA1MS1cdHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSBhY3Njdy1cdTAwM2Vjb25uZWN0aW9uO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM9MjI5Mz1fY29ubl9yZXF1ZXN0X3N0YXRlKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHVuaW9uIGRyYmRfc3RhdGUgbWFzaywgdW5pb24gZHJiZF9zdGF0ZSB2YWwsXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0yMjk2LVx0ZW51bSBkcmJkX3N0YXRlX3J2IHJ2ID0gU1NfU1VDQ0VTUztcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjI5NzpcdHN0cnVjdCBhZnRlcl9jb25uX3N0YXRlX2NoZ193b3JrICphY3NjdztcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjI5OC1cdGVudW0gZHJiZF9jb25ucyBvYyA9IGNvbm5lY3Rpb24tXHUwMDNlY3N0YXRlO1xuLS1cbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYz0xNzg9c3RydWN0IHJvY2tjaGlwX3VzYjJwaHlfY2ZnIHtcbi0tXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMjAwLSAqIEBtdXRleDogZm9yIHJlZ2lzdGVyIHVwZGF0aW5nIGluIHNtX3dvcmsuXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM6MjAxOiAqIEBjaGdfd29yazogY2hhcmdlIGRldGVjdCB3b3JrLlxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTIwMi0gKiBAb3RnX3NtX3dvcms6IE9URyBzdGF0ZSBtYWNoaW5lIHdvcmsuXG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTIwOT1zdHJ1Y3Qgcm9ja2NoaXBfdXNiMnBoeV9wb3J0IHtcbi0tXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMjE5LVx0c3RydWN0IG11dGV4XHRtdXRleDtcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYzoyMjA6XHRzdHJ1Y3RcdFx0ZGVsYXllZF93b3JrIGNoZ193b3JrO1xuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTIyMS1cdHN0cnVjdFx0XHRkZWxheWVkX3dvcmsgb3RnX3NtX3dvcms7XG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTY1MD1zdGF0aWMgaW50IHJvY2tjaGlwX3VzYjJwaHlfZXhpdChzdHJ1Y3QgcGh5ICpwaHkpXG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTY1Ny1cdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJwb3J0LVx1MDAzZW90Z19zbV93b3JrKTtcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYzo2NTg6XHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZycG9ydC1cdTAwM2VjaGdfd29yayk7XG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtNjU5LVx0fSBlbHNlIGlmIChycG9ydC1cdTAwM2Vwb3J0X2lkID09IFVTQjJQSFlfUE9SVF9IT1NUKVxuLS1cbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYz02NzM9c3RhdGljIHZvaWQgcm9ja2NoaXBfdXNiMnBoeV9vdGdfc21fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTcwNy1cdFx0XHRjYXNlIFVTQl9DSEdfU1RBVEVfVU5ERUZJTkVEOlxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjcwODpcdFx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZycG9ydC1cdTAwM2VjaGdfd29yaywgMCk7XG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtNzA5LVx0XHRcdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYz04MjY9c3RhdGljIHZvaWQgcm9ja2NoaXBfY2hnX2RldGVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtODI4LVx0c3RydWN0IHJvY2tjaGlwX3VzYjJwaHlfcG9ydCAqcnBvcnQgPVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjgyOTpcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByb2NrY2hpcF91c2IycGh5X3BvcnQsIGNoZ193b3JrLndvcmspO1xuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTgzMC1cdHN0cnVjdCByb2NrY2hpcF91c2IycGh5ICpycGh5ID0gZGV2X2dldF9kcnZkYXRhKHJwb3J0LVx1MDAzZXBoeS1cdTAwM2VkZXYucGFyZW50KTtcbi0tXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtOTE2LVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjkxNzpcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZycG9ydC1cdTAwM2VjaGdfd29yaywgZGVsYXkpO1xuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTkxOC19XG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTEyOTA9c3RhdGljIGludCByb2NrY2hpcF91c2IycGh5X290Z19wb3J0X2luaXQoc3RydWN0IHJvY2tjaGlwX3VzYjJwaHkgKnJwaHksXG4tLVxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTEzMTctXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM6MTMxODpcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJwb3J0LVx1MDAzZWNoZ193b3JrLCByb2NrY2hpcF9jaGdfZGV0ZWN0X3dvcmspO1xuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTEzMTktXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZycG9ydC1cdTAwM2VvdGdfc21fd29yaywgcm9ja2NoaXBfdXNiMnBoeV9vdGdfc21fd29yayk7XG4tLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvcGYxNTUwLWNoYXJnZXIuYz0xODA9c3RhdGljIHZvaWQgcGYxNTUwX2NoZ19iYXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvcGYxNTUwLWNoYXJnZXIuYy0yMTYtXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jOjIxNzpzdGF0aWMgdm9pZCBwZjE1NTBfY2hnX2NoZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L3BmMTU1MC1jaGFyZ2VyLmMtMjE4LXtcbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jPTU0OT1zdGF0aWMgaW50IHBmMTU1MF9jaGFyZ2VyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvcGYxNTUwLWNoYXJnZXIuYy01NzUtXHRyZXQgPSBkZXZtX2RlbGF5ZWRfd29ya19hdXRvY2FuY2VsKGNoZy1cdTAwM2VkZXYsIFx1MDAyNmNoZy1cdTAwM2VjaGdfc2Vuc2Vfd29yayxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L3BmMTU1MC1jaGFyZ2VyLmM6NTc2Olx0XHRcdFx0XHQgICBwZjE1NTBfY2hnX2NoZ193b3JrKTtcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L3BmMTU1MC1jaGFyZ2VyLmMtNTc3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jPTMxMz1zdGF0aWMgaW50IGNpX2hkcmNfaW14X25vdGlmeV9ldmVudChzdHJ1Y3QgY2lfaGRyYyAqY2ksIHVuc2lnbmVkIGludCBldmVudClcbi0tXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jLTM0Mi1cdFx0aWYgKGNpLVx1MDAzZXVzYl9waHkpXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jOjM0MzpcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNmNpLVx1MDAzZXVzYl9waHktXHUwMDNlY2hnX3dvcmspO1xuZHJpdmVycy91c2IvY2hpcGlkZWEvY2lfaGRyY19pbXguYy0zNDQtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jPTE4OTc9c3RhdGljIGludCBjaV91ZGNfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKVxuLS1cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jLTE5MDctXHRpZiAoY2ktXHUwMDNldXNiX3BoeSlcbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jOjE5MDg6XHRcdHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoY2ktXHUwMDNldXNiX3BoeSwgaXNfYWN0aXZlID9cbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jLTE5MDktXHRcdFx0VVNCX0NIQVJHRVJfUFJFU0VOVCA6IFVTQl9DSEFSR0VSX0FCU0VOVCk7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTc3PXN0YXRpYyB2b2lkIHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMTAxLSAqIElmIHdlIGdldCB0aGUgY2hhcmdlciB0eXBlIGZyb20gLVx1MDAzZWNoYXJnZXJfZGV0ZWN0KCkgaW5zdGVhZCBvZiBleHRjb25cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoxMDI6ICogc3Vic3lzdGVtLCB0aGUgdXNiIHBoeSBkcml2ZXIgc2hvdWxkIGlzc3VlIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoKVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTEwMy0gKiB0byBzZXQgY2hhcmdlciBzdGF0ZSB3aGVuIHRoZSBjaGFyZ2VyIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTEwNT1zdGF0aWMgdm9pZCB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTEwNi17XG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MTA3Olx0c3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xMDgtXHRjaGFyIHVjaGdlcl9zdGF0ZVs1MF0gPSB7IDAgfTtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9MTM5PXN0YXRpYyB2b2lkIF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xNTctXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MTU4Olx0c2NoZWR1bGVfd29yayhcdTAwMjZ1c2JfcGh5LVx1MDAzZWNoZ193b3JrKTtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xNTktfVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0xNzA9c3RhdGljIGludCB1c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMTcyLXtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoxNzM6XHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHVzYl9waHksIHR5cGVfbmIpO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTE3NC1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9MTkzPXZvaWQgdXNiX3BoeV9zZXRfY2hhcmdlcl9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5LCB1bnNpZ25lZCBpbnQgbUEpXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTIyNy1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyMjg6XHRzY2hlZHVsZV93b3JrKFx1MDAyNnVzYl9waHktXHUwMDNlY2hnX3dvcmspO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTIyOS19XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTI2OD1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dldF9jaGFyZ2VyX2N1cnJlbnQpO1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yNzAtLyoqXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MjcxOiAqIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUgLSBzZXQgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjcyLSAqIEB1c2JfcGh5OiB0aGUgVVNCIHBoeSB0byBiZSB1c2VkXG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI3OC0gKi9cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyNzk6dm9pZCB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5LFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI4MC1cdFx0XHQgICAgICAgZW51bSB1c2JfY2hhcmdlcl9zdGF0ZSBzdGF0ZSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjkwLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjI5MTpcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dXNiX3BoeS1cdTAwM2VjaGdfd29yayk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjkyLX1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyOTM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSk7XG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjk0LVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0zMTE9c3RhdGljIHZvaWQgdXNiX2NoYXJnZXJfaW5pdChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzE1LVx0dXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHVzYl9waHkpO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jOjMxNjpcdElOSVRfV09SSyhcdTAwMjZ1c2JfcGh5LVx1MDAzZWNoZ193b3JrLCB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmspO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTMxNy19XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTMxOT1zdGF0aWMgaW50IHVzYl9hZGRfZXh0Y29uKHN0cnVjdCB1c2JfcGh5ICp4KVxuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNDMtXHRcdH0gZWxzZSB7XG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MzQ0Olx0XHRcdHgtXHUwMDNldHlwZV9uYi5ub3RpZmllcl9jYWxsID0gdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM0NS1cbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzQ3LVx0XHRcdFx0XHRcdFx0ICAgIEVYVENPTl9DSEdfVVNCX1NEUCxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzozNDg6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2eC1cdTAwM2V0eXBlX25iKTtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNDktXHRcdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNTYtXHRcdFx0XHRcdFx0XHQgICAgRVhUQ09OX0NIR19VU0JfQ0RQLFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjM1NzpcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ4LVx1MDAzZXR5cGVfbmIpO1xuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM1OC1cdFx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM2NS1cdFx0XHRcdFx0XHRcdCAgICBFWFRDT05fQ0hHX1VTQl9EQ1AsXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MzY2Olx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNngtXHUwMDNldHlwZV9uYik7XG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzY3LVx0XHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzc0LVx0XHRcdFx0XHRcdFx0ICAgIEVYVENPTl9DSEdfVVNCX0FDQSxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzozNzU6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2eC1cdTAwM2V0eXBlX25iKTtcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNzYtXHRcdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvdXNiL3BoeS9waHkuYy00MDEtXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NDAyOlx0aWYgKHgtXHUwMDNldHlwZV9uYi5ub3RpZmllcl9jYWxsKVxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTQwMy1cdFx0X191c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUoeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjI3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFVTQiBQSFkgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgVVNCX1BIWWAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgY2FuIGJlIGJ1aWx0LCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGZlYXNpYmxlIG9uIHg4Ni9hbWQ2NCBhcmNoaXRlY3R1cmVzLiBUaGUgY29kZSBzdWdnZXN0cyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIEtjb25maWcgb3B0aW9ucywgc3BlY2lmaWNhbGx5IGBOT1BfVVNCX1hDRUlWYCBhbmQgYFVTQl9QSFlgIHRoZW1zZWx2ZXMuCgpMb29raW5nIGF0IGBkcml2ZXJzL3VzYi9waHkvS2NvbmZpZ2AsIEkgY2FuIHNlZSBhIGRlcGVuZGVuY3k6IGBVU0JfUEhZYCBkZWZhdWx0cyB0byBgeWAgKHllcykgaWYgYEVYVENPTmAgaXMgZW5hYmxlZCwgYW5kIGltcG9ydGFudGx5LCBzZWxlY3RzIGBFWFRDT05gLiBgTk9QX1VTQl9YQ0VJVmAgaXMgYSB0cmlzdGF0ZSBvcHRpb24gYW5kIGRlcGVuZHMgb24gZWl0aGVyIGBVU0JfR0FER0VUYCBvciB0aGUgbmVnYXRpb24gb2YgYFVTQl9HQURHRVRgLCBzbyBpZiB0aGUgbGF0dGVyIGlzIG1vZHVsYXIsIGBOT1BfVVNCX1hDRUlWYCBjYW4mIzM5O3QgYmUgYnVpbHQtaW4uIEl0IGFsc28gKnNlbGVjdHMqIGBVU0JfUEhZYC4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgaGllcmFyY2h5IG9yIHJlbGF0aW9uc2hpcCB3aGVyZSBgTk9QX1VTQl9YQ0VJVmAgY2FuIHVzZSB0aGUgdW5kZXJseWluZyBgVVNCX1BIWWAuCgpUaGVuLCB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgcmVpbmZvcmNlcyB0aGUgYnVpbGQgbG9naWM6IGBvYmotJChDT05GSUdfVVNCX1BIWSkgJiM0Mzs9IHBoeS5vYCBtZWFucyBpZiBgVVNCX1BIWWAgaXMgZW5hYmxlZCwgYHBoeS5vYCBpcyBidWlsdC4gU2ltaWxhcmx5LCBgb2JqLSQoQ09ORklHX05PUF9VU0JfWENFSVYpICYjNDM7PSBwaHktZ2VuZXJpYy5vYCBidWlsZHMgYHBoeS1nZW5lcmljLm9gIHdoZW4gYE5PUF9VU0JfWENFSVZgIGlzIHNlbGVjdGVkLgoKU28sIHRoZSBrZXkgY29uZmlndXJhdGlvbiBmbGFncyBJIG5lZWQgdG8gY29uc2lkZXIgYXJlIGBVU0JfUEhZYCBhbmQgYE5PUF9VU0JfWENFSVZgLiBJIHNob3VsZCBub3cgZXhwbG9yZSBkZXBlbmRlbmNpZXMgbGlrZSBgVVNCX1NVUFBPUlRgIGFuZCBgVVNCX1BIWWAgaW4gdGhlIEtjb25maWcgZmlsZXMgdG8gZGV0ZXJtaW5lIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgUEhZIHRvIGJlIGJ1aWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIFVTQl9TVVBQT1JUfGNvbmZpZyBVU0JfUEhZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvS2NvbmZpZz0yNj1jb25maWcgVVNCX1VIQ0lfQklHX0VORElBTl9ERVNDXG4tLVxuZHJpdmVycy91c2IvS2NvbmZpZy0yOC1cbmRyaXZlcnMvdXNiL0tjb25maWc6Mjk6bWVudWNvbmZpZyBVU0JfU1VQUE9SVFxuZHJpdmVycy91c2IvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7VVNCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz01PW1lbnUgXCYjMzQ7VVNCIFBoeXNpY2FsIExheWVyIGRyaXZlcnNcJiMzNDtcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTYtXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo3OmNvbmZpZyBVU0JfUEhZXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy04LVx0c2VsZWN0IEVYVENPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA1NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIFVTQiBQSFkgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy91c2IvcGh5L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFVTQiBQSFkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGZpcnN0IDUwIGxpbmVzLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGNvdmVyIHRoZSBjb3JlIG9wdGlvbnMsIHBlcmhhcHMgaW5jbHVkaW5nIHRob3NlIHJlbGF0ZWQgdG8gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdmVuZG9yLXNwZWNpZmljIFBIWSBzdXBwb3J0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIHNlbGVjdGlvbiBvZiBkaWZmZXJlbnQgUEhZIHR5cGVzIChPVEcsIGhvc3QsIGRldmljZSksIHBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucywgYW5kIHBvc3NpYmx5IHNvbWUgYmFzaWMgZGV2aWNlLXRyZWUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBpZiB0aGV5IGFyZSBkZWZpbmVkIHRoYXQgZWFybHkgaW4gdGhlIGZpbGUuIEkgYWxzbyBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgY2hlY2tzIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgZ29vZCBiYXNlbGluZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIFVTQiBQSFkgZmVhdHVyZXMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvcGh5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgUGh5c2ljYWwgTGF5ZXIgVVNCIGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdG1lbnUgXCYjMzQ7VVNCIFBoeXNpY2FsIExheWVyIGRyaXZlcnNcJiMzNDtcbiAgIDY6XHRcbiAgIDc6XHRjb25maWcgVVNCX1BIWVxuICAgODpcdFx0c2VsZWN0IEVYVENPTlxuICAgOTpcdFx0ZGVmX2Jvb2wgblxuICAxMDpcdFxuICAxMTpcdCNcbiAgMTI6XHQjIFVTQiBUcmFuc2NlaXZlciBEcml2ZXJzXG4gIDEzOlx0I1xuICAxNDpcdGNvbmZpZyBBQjg1MDBfVVNCXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtBQjg1MDAgVVNCIFRyYW5zY2VpdmVyIERyaXZlclwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBBQjg1MDBfQ09SRVxuICAxNzpcdFx0c2VsZWN0IFVTQl9QSFlcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgVVNCIE9URyB0cmFuc2NlaXZlciBpbiBBQjg1MDAgY2hpcC5cbiAgMjA6XHRcdCAgVGhpcyB0cmFuc2NlaXZlciBzdXBwb3J0cyBoaWdoIGFuZCBmdWxsIHNwZWVkIGRldmljZXMgcGx1cyxcbiAgMjE6XHRcdCAgaW4gaG9zdCBtb2RlLCBsb3cgc3BlZWQuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIEZTTF9VU0IyX09UR1xuICAyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIFVTQiBPVEcgVHJhbnNjZWl2ZXIgRHJpdmVyXCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIFVTQl9FSENJX0ZTTCBcdTAwMjZcdTAwMjYgVVNCX0ZTTF9VU0IyIFx1MDAyNlx1MDAyNiBVU0JfT1RHX0ZTTT15IFx1MDAyNlx1MDAyNiBQTVxuICAyNjpcdFx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCB0aGlzIGNhbiYjMzk7dCBiZSAmIzM5O3kmIzM5O1xuICAyNzpcdFx0c2VsZWN0IFVTQl9QSFlcbiAgMjg6XHRcdGhlbHBcbiAgMjk6XHRcdCAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCBGcmVlc2NhbGUgVVNCIE9URyB0cmFuc2NlaXZlci5cbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgS0VZU1RPTkVfVVNCX1BIWVxuICAzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7S2V5c3RvbmUgVVNCIFBIWSBEcml2ZXJcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gQVJDSF9LRVlTVE9ORSB8fCBDT01QSUxFX1RFU1RcbiAgMzQ6XHRcdGRlcGVuZHMgb24gTk9QX1VTQl9YQ0VJVlxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IEtleXN0b25lIFVTQiBwaHkuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXG4gIDM3Olx0XHQgIGludGVyZmFjZSB0byBpbnRlcmFjdCB3aXRoIFVTQiAyLjAgYW5kIFVTQiAzLjAgUEhZIHRoYXQgaXMgcGFydFxuICAzODpcdFx0ICBvZiB0aGUgS2V5c3RvbmUgU09DLlxuICAzOTpcdFxuICA0MDpcdGNvbmZpZyBOT1BfVVNCX1hDRUlWXG4gIDQxOlx0XHR0cmlzdGF0ZSBcJiMzNDtOT1AgVVNCIFRyYW5zY2VpdmVyIERyaXZlclwmIzM0O1xuICA0MjpcdFx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCBOT1AgY2FuJiMzOTt0IGJlIGJ1aWx0LWluXG4gIDQzOlx0XHRzZWxlY3QgVVNCX1BIWVxuICA0NDpcdFx0aGVscFxuICA0NTpcdFx0ICBUaGlzIGRyaXZlciBpcyB0byBiZSB1c2VkIGJ5IGFsbCB0aGUgdXNiIHRyYW5zY2VpdmVyIHdoaWNoIGFyZSBlaXRoZXJcbiAgNDY6XHRcdCAgYnVpbHQtaW4gd2l0aCB1c2IgaXAgb3Igd2hpY2ggYXJlIGF1dG9ub21vdXMgYW5kIGRvZXNuJiMzOTt0IHJlcXVpcmUgYW55XG4gIDQ3Olx0XHQgIHBoeSBwcm9ncmFtbWluZyBzdWNoIGFzIElTUDF4MDQgZXRjLlxuICA0ODpcdFxuICA0OTpcdGNvbmZpZyBBTTMzNVhfQ09OVFJPTF9VU0JcbiAgNTA6XHRcdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDAwCgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVVNCIFBIWSBSZWZhY3RvcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSByZWZhY3RvcmluZyBvZiB0aGUgVVNCIFBIWSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkcml2ZXJzL3VzYi9waHkvcGh5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbm5lY3Rpb25zOiBgVVNCX1BIWWAgaXMgdHJpZ2dlcmVkIGJ5IGEgd2hvbGUgc2xldyBvZiBjb25maWd1cmF0aW9ucyBsaWtlIGBOT1BfVVNCX1hDRUlWYCwgYFVTQl9HUElPX1ZCVVNgLCBgVVNCX0lTUDEzMDFgLCBhbmQgc28gb24sIGFsbCBuZXN0ZWQgdW5kZXIgdGhlIHVtYnJlbGxhIG9mIGBVU0JfU1VQUE9SVGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTm93LCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGhvdyBjaGFyZ2VyIG5vdGlmaWNhdGlvbnMgYW5kIGRldmljZSB0eXBlIGluZm9ybWF0aW9uIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHk6CgoqICAgYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2A6IFRoaXMgaXMgd2hlcmUgdGhlIHVldmVudCBnZW5lcmF0aW9uIGlzIG5vdyBoYW5kbGVkIHVzaW5nIGBrb2JqZWN0X3VldmVudF9lbnYoKWAgaW5zdGVhZCBvZiB0aGUgb2xkIGBrb2JqZWN0X3VldmVudCgpYCBtZXRob2QuCiogICBgdXNiX2FkZF9waHlfZGV2YDogVGhlIHNldHRpbmcgb2YgYHgtJmd0O2Rldi0mZ3Q7dHlwZWAgdG8gYCZhbXA7dXNiX3BoeV9kZXZfdHlwZWAgaGFzIGJlZW4gcmVtb3ZlZC4KKiAgIGB1c2JfcGh5X3VldmVudGAgYW5kIGBfX2RldmljZV90b191c2JfcGh5YCBhcmUgZGVsZXRlZC4KCkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIGFtIGZvbGxvd2luZyBteSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LiBUaGUgcmVhY2hhYmlsaXR5IGFuYWx5c2lzIGlzIGtleSwgYW5kIGl0IGFwcGVhcnMgdGhlIGNoYW5nZXMgYXJlICpleGVjdXRhYmxlIGtlcm5lbCBjb2RlKiByZWFjaGFibGUgdGhyb3VnaCB2YXJpb3VzIG1lYW5zLiBTcGVjaWZpY2FsbHksIGBOT1BfVVNCX1hDRUlWYCBhbmQgdGhlIFVTQiBQSFkgZnJhbWV3b3JrIGFyZSBsb2FkYWJsZS9jb21waWxhYmxlIGludG8gdGhlIGtlcm5lbCwgd2l0aCBVU0IgZ2FkZ2V0LCBjaGlwaWRlYSwgb3IgZXh0Y29uIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgY2hhcmdlciB3b3JrIG9yIGFkZGluZyB0aGUgUEhZLiBTbywgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgYXJlIHJlbGV2YW50LgoKU28sIHRoaXMgaXMgYSBjb2RlIHJlZmFjdG9yaW5nIHRoYXQgaW1wYWN0cyBob3cgY2hhcmdlciBldmVudHMgYW5kIGRldmljZSBkYXRhIGFyZSBleHBvc2VkLiBXZSBoYXZlIGtleSBmdW5jdGlvbnMgLSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYCwgYHVzYl9hZGRfcGh5X2RldmAsIGB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlYCwgYHVzYl9waHlfc2V0X2NoYXJnZXJfY3VycmVudGAuIFRoZSByZWxldmFudCBjb25maWdzIGFyZTogYFVTQl9TVVBQT1JUYCwgYFVTQl9QSFlgLCBhbmQgYE5PUF9VU0JfWENFSVZgLgoKSW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIG1vZGVybml6aW5nIHRoZSB1ZXZlbnQgc3lzdGVtIHdpdGhpbiB0aGUgVVNCIFBIWSwgc3dpdGNoaW5nIGZyb20gYXNzaWduaW5nIHRoZSBgZGV2LSZndDt0eXBlYCBhbmQgYSBjdXN0b20gdWV2ZW50IGZ1bmN0aW9uIHRvIGEgbW9yZSBkaXJlY3QgYGtvYmplY3RfdWV2ZW50X2VudigpYCBjYWxsLiBUaGlzIHN0cmVhbWxpbmVzIHRoZSBldmVudCBoYW5kbGluZyBmb3IgY2hhcmdlciBub3RpZmljYXRpb25zIGFuZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgYSByZWZhY3RvcmluZyBvZiBleGVjdXRhYmxlIGNvZGUsIHdoaWNoIGltcGFjdHMgaG93IGV2ZW50cyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwuIEJlY2F1c2UgdGhpcyBpcyByZWZhY3RvcmluZyBhbmQgdG91Y2ggdWV2ZW50cywgZnV6emluZyB0byBjaGVjayBmb3IgcmVncmVzc2lvbnMgaXMgYW4gYWJzb2x1dGUgbXVzdCEKCkxldCYjMzk7cyBsb2cgdGhlIGZpbmRpbmdzIHVzaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfU1VQUE9SVCYjMzQ7LAogICAgJiMzNDtVU0JfUEhZJiMzNDssCiAgICAmIzM0O05PUF9VU0JfWENFSVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsmIzM0OywKICAgICYjMzQ7dXNiX2FkZF9waHlfZGV2JiMzNDssCiAgICAmIzM0O3VzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUmIzM0OywKICAgICYjMzQ7dXNiX3BoeV9zZXRfY2hhcmdlcl9jdXJyZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdWV2ZW50IHJlcG9ydGluZyBtZWNoYW5pc20gZm9yIFVTQiBQSFkgY2hhcmdlciBldmVudHMgaW4gZHJpdmVycy91c2IvcGh5L3BoeS5jLiBJbnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgZGV2aWNlIHR5cGUgYW5kIGltcGxlbWVudGluZyBhIGN1c3RvbSB1ZXZlbnQgY2FsbGJhY2ssIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgY2hhcmdlciBzdGF0ZSBhbmQgdHlwZSBhcmUgbm93IGNvbnN0cnVjdGVkIGFuZCBwYXNzZWQgZGlyZWN0bHkgdmlhIGtvYmplY3RfdWV2ZW50X2VudigpIHdpdGhpbiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgUEhZIGNvcmUgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1VTQl9QSFkmIzM0OywKICAgICYjMzQ7Tk9QX1VTQl9YQ0VJViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayYjMzQ7LAogICAgJiMzNDt1c2JfYWRkX3BoeV9kZXYmIzM0OywKICAgICYjMzQ7dXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSYjMzQ7LAogICAgJiMzNDt1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1ZXZlbnQgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3IgVVNCIFBIWSBjaGFyZ2VyIGV2ZW50cyBpbiBkcml2ZXJzL3VzYi9waHkvcGh5LmMuIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHlwZSBhbmQgaW1wbGVtZW50aW5nIGEgY3VzdG9tIHVldmVudCBjYWxsYmFjaywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjaGFyZ2VyIHN0YXRlIGFuZCB0eXBlIGFyZSBub3cgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCBkaXJlY3RseSB2aWEga29iamVjdF91ZXZlbnRfZW52KCkgd2l0aGluIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBQSFkgY29yZSBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgVVNCIFBIWSB1ZXZlbnQgbm90aWZpY2F0aW9uIGJ5IHNlbmRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBkaXJlY3RseSBmcm9tIGB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoKWAgdXNpbmcgYGtvYmplY3RfdWV2ZW50X2VudigpYCByYXRoZXIgdGhhbiB2aWEgYSBgZGV2aWNlX3R5cGUudWV2ZW50YCBjYWxsYmFjay4gXG5cbkFsbCBzdGFjayBidWZmZXJzIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaCAoYHVjaGdlcl9zdGF0ZWAsIGB1Y2hnZXJfdHlwZWAsIGFuZCBgZW52cGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCAvIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIHdpdGggTlVMTCB0ZXJtaW5hdG9yKSBiZWZvcmUgc3RyaW5nIGZvcm1hdHRpbmcgdmlhIGBzbnByaW50ZigpYCBhbmQgYmVpbmcgcGFzc2VkIHRvIGBrb2JqZWN0X3VldmVudF9lbnYoKWAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXJyYXkgaW5kZXhpbmcgKGUuZy4gYHVzYl9jaGdlcl90eXBlYCkgYXJlIGJvdW5kcyBjaGVjayAvIG91dC1vZi1ib3VuZHMgcmVhZCBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2ZWZkNTcxYzNkMjExN2E4ODZkZDdkMWQ0NDhhNWJjMDZhYWZmMmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDExOjM0OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS5jIGIvZHJpdmVycy91c2IvcGh5L3BoeS5jCmluZGV4IDVhOWI5MzUzZjM0M2QuLjdjODVjN2NhMWQzMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmMKQEAgLTQyLDEyICYjNDM7NDIsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3R5cGVbXSA9IHsKIAlbQUNBX1RZUEVdCQkJPSAmIzM0O1VTQl9DSEFSR0VSX0FDQV9UWVBFJiMzNDssCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3N0YXRlW10gPSB7Ci0JW1VTQl9DSEFSR0VSX0RFRkFVTFRdCT0gJiMzNDtVU0JfQ0hBUkdFUl9ERUZBVUxUJiMzNDssCi0JW1VTQl9DSEFSR0VSX1BSRVNFTlRdCT0gJiMzNDtVU0JfQ0hBUkdFUl9QUkVTRU5UJiMzNDssCi0JW1VTQl9DSEFSR0VSX0FCU0VOVF0JPSAmIzM0O1VTQl9DSEFSR0VSX0FCU0VOVCYjMzQ7LAotfTsKLQogc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogCWVudW0gdXNiX3BoeV90eXBlIHR5cGUpCiB7CkBAIC04MCwxOCAmIzQzOzc0LDYgQEAgc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiAJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX3BoeSAqX19kZXZpY2VfdG9fdXNiX3BoeShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVzYl9waHkgKnVzYl9waHk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVzYl9waHksICZhbXA7cGh5X2xpc3QsIGhlYWQpIHsKLQkJaWYgKHVzYl9waHktJmd0O2RldiA9PSBkZXYpCi0JCQlyZXR1cm4gdXNiX3BoeTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIHZvaWQgdXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KQogewogCXVzYl9waHktJmd0O2NoZ19jdXIuc2RwX21pbiA9IERFRkFVTFRfU0RQX0NVUl9NSU47CkBAIC0xMjMsNiAmIzQzOzEwNSw5IEBAIHN0YXRpYyB2b2lkIHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSkKIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTsKJiM0MzsJY2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07CiYjNDM7CWNoYXIgdWNoZ2VyX3R5cGVbNTBdID0geyAwIH07CiYjNDM7CWNoYXIgKmVudnBbXSA9IHsgdWNoZ2VyX3N0YXRlLCB1Y2hnZXJfdHlwZSwgTlVMTCB9OwogCXVuc2lnbmVkIGludCBtaW4sIG1heDsKIAogCXN3aXRjaCAodXNiX3BoeS0mZ3Q7Y2hnX3N0YXRlKSB7CkBAIC0xMzAsMTEgJiM0MzsxMTUsMTUgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJdXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KHVzYl9waHksICZhbXA7bWluLCAmYW1wO21heCk7CiAKIAkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFtcDt1c2JfcGh5LSZndDtub3RpZmllciwgbWF4LCB1c2JfcGh5KTsKJiM0MzsJCXNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLAomIzQzOwkJCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssICYjMzQ7VVNCX0NIQVJHRVJfUFJFU0VOVCYjMzQ7KTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfQ0hBUkdFUl9BQlNFTlQ6CiAJCXVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudCh1c2JfcGh5KTsKIAogCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO3VzYl9waHktJmd0O25vdGlmaWVyLCAwLCB1c2JfcGh5KTsKJiM0MzsJCXNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLAomIzQzOwkJCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssICYjMzQ7VVNCX0NIQVJHRVJfQUJTRU5UJiMzNDspOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfd2Fybih1c2JfcGh5LSZndDtkZXYsICYjMzQ7VW5rbm93biBVU0IgY2hhcmdlciBzdGF0ZTogJWRcbiYjMzQ7LApAQCAtMTQyLDM2ICYjNDM7MTMxLDkgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJcmV0dXJuOwogCX0KIAotCWtvYmplY3RfdWV2ZW50KCZhbXA7dXNiX3BoeS0mZ3Q7ZGV2LSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7Ci19Ci0KLXN0YXRpYyBpbnQgdXNiX3BoeV91ZXZlbnQoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCi17Ci0JY29uc3Qgc3RydWN0IHVzYl9waHkgKnVzYl9waHk7Ci0JY2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07Ci0JY2hhciB1Y2hnZXJfdHlwZVs1MF0gPSB7IDAgfTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaHlfbG9jaywgZmxhZ3MpOwotCXVzYl9waHkgPSBfX2RldmljZV90b191c2JfcGh5KGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BoeV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIXVzYl9waHkpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc25wcmludGYodWNoZ2VyX3N0YXRlLCBBUlJBWV9TSVpFKHVjaGdlcl9zdGF0ZSksCi0JCSAmIzM0O1VTQl9DSEFSR0VSX1NUQVRFPSVzJiMzNDssIHVzYl9jaGdlcl9zdGF0ZVt1c2JfcGh5LSZndDtjaGdfc3RhdGVdKTsKLQogCXNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSwKIAkJICYjMzQ7VVNCX0NIQVJHRVJfVFlQRT0lcyYjMzQ7LCB1c2JfY2hnZXJfdHlwZVt1c2JfcGh5LSZndDtjaGdfdHlwZV0pOwotCi0JaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgdWNoZ2VyX3N0YXRlKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoYWRkX3VldmVudF92YXIoZW52LCB1Y2hnZXJfdHlwZSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuIDA7CiYjNDM7CWtvYmplY3RfdWV2ZW50X2VudigmYW1wO3VzYl9waHktJmd0O2Rldi0mZ3Q7a29iaiwgS09CSl9DSEFOR0UsIGVudnApOwogfQogCiBzdGF0aWMgdm9pZCBfX3VzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZShzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSkKQEAgLTY3NSwxMSAmIzQzOzYzNyw2IEBAIGludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hZGRfcGh5KTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfcGh5X2Rldl90eXBlID0gewotCS5uYW1lID0gJiMzNDt1c2JfcGh5JiMzNDssCi0JLnVldmVudCA9IHVzYl9waHlfdWV2ZW50LAotfTsKLQogLyoqCiAgKiB1c2JfYWRkX3BoeV9kZXYgLSBkZWNsYXJlIHRoZSBVU0IgUEhZCiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTApAQCAtNzA1LDggJiM0Mzs2NjIsNiBAQCBpbnQgdXNiX2FkZF9waHlfZGV2KHN0cnVjdCB1c2JfcGh5ICp4KQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQl4LSZndDtkZXYtJmd0O3R5cGUgPSAmYW1wO3VzYl9waHlfZGV2X3R5cGU7Ci0KIAlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZhbXA7eC0mZ3Q7bm90aWZpZXIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaHlfbG9jaywgZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gLSBVU0IgUEhZIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMga2VybmVsIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY2hhbmdlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gY291bGQgZXhwb3NlLgoKRmlyc3QsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVtb3Zpbmcgc29tZSBvbGQgdWV2ZW50LXJlbGF0ZWQgY29kZSwgc3BlY2lmaWNhbGx5IGB1c2JfcGh5X3VldmVudGAgYW5kIGB1c2JfcGh5X2Rldl90eXBlYCwgd2hpY2ggd2FzIHNldHRpbmcgdGhlIGBkZXYtJmd0O3R5cGVgLiBUaGF0JiMzOTtzIG5vdCBpbmhlcmVudGx5IHdvcnJpc29tZSwgYnV0IHRoZSByZXBsYWNlbWVudCBpcyB3aGVyZSBteSBhdHRlbnRpb24gbmVlZHMgdG8gZ28uCgpOb3csIGluc3RlYWQgb2YgdGhlIG9sZCBtZXRob2QsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGNhbGxlZCBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYC4gSW5zaWRlIHRoaXMgZnVuY3Rpb24sIGl0IGFsbG9jYXRlcyBzb21lIHN0YWNrIGFycmF5czogYHVjaGdlcl9zdGF0ZWAgYW5kIGB1Y2hnZXJfdHlwZWAsIGJvdGggNTAgYnl0ZXMuIFRoZW4sIGl0IGNyZWF0ZXMgYW4gYGVudnBgIGFycmF5IHBvaW50aW5nIHRvIHRoZXNlIGNoYXJhY3RlciBhcnJheXMsIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIGBrb2JqZWN0X3VldmVudF9lbnZgLiBUaGUgY29yZSBsb2dpYyBpbnZvbHZlcyBhIHN3aXRjaCBzdGF0ZW1lbnQgYmFzZWQgb24gYHVzYl9waHktJmd0O2NoZ19zdGF0ZWAuIEJhc2VkIG9uIHRoZSBzdGF0ZSwgaXQgcG9wdWxhdGVzIGB1Y2hnZXJfc3RhdGVgIHdpdGggc3RyaW5ncyBpbmRpY2F0aW5nIGNoYXJnZXIgcHJlc2VuY2Ugb3IgYWJzZW5jZSB1c2luZyBgc25wcmludGZgLiBBZnRlciB0aGUgc3dpdGNoLCBpdCBwb3B1bGF0ZXMgYHVjaGdlcl90eXBlYCBzaW1pbGFybHksIGJhc2VkIG9uIGB1c2JfY2hnZXJfdHlwZWAgYW5kIGB1c2JfcGh5LSZndDtjaGdfdHlwZWAuIEZpbmFsbHksIGl0IGNhbGxzIGBrb2JqZWN0X3VldmVudF9lbnZgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYXJvdW5kIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIG90aGVyIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHRoYXQgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgZGF0YS4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGBzbnByaW50ZmAgY2FsbHMgYXJlIHNhZmUuCgpTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgdXNiX2NoZ2VyX3R5cGVgIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB1c2JfcGh5LSZndDtjaGdfdHlwZWAsIHRvIG1ha2Ugc3VyZSB0aGVzZSB2YWx1ZXMgYXJlIGJvdW5kZWQgYW5kIHdlbGwgY29udHJvbGxlZC4gSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDMwLTE1MCBpbiBgZHJpdmVycy91c2IvcGh5L3BoeS5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSBzZXQgYW5kIHVzZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGFycmF5IGluZGV4aW5nLiBCYXNlZCBvbiB0aGlzIGRlZXBlciBkaXZlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyB3YXJyYW50cyBLTVNBTiBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3BoeS9waHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHQjZGVmaW5lIERFRkFVTFRfQ0RQX0NVUl9NQVhcdDUwMDBcbiAgMjY6XHQjZGVmaW5lIERFRkFVTFRfQUNBX0NVUl9NSU5cdDE1MDBcbiAgMjc6XHQjZGVmaW5lIERFRkFVTFRfQUNBX0NVUl9NQVhcdDUwMDBcbiAgMjg6XHRcbiAgMjk6XHRzdGF0aWMgTElTVF9IRUFEKHBoeV9saXN0KTtcbiAgMzA6XHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBoeV9sb2NrKTtcbiAgMzE6XHRcbiAgMzI6XHRzdHJ1Y3QgcGh5X2Rldm0ge1xuICAzMzpcdFx0c3RydWN0IHVzYl9waHkgKnBoeTtcbiAgMzQ6XHRcdHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmI7XG4gIDM1Olx0fTtcbiAgMzY6XHRcbiAgMzc6XHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3R5cGVbXSA9IHtcbiAgMzg6XHRcdFtVTktOT1dOX1RZUEVdXHRcdFx0PSBcJiMzNDtVU0JfQ0hBUkdFUl9VTktOT1dOX1RZUEVcJiMzNDssXG4gIDM5Olx0XHRbU0RQX1RZUEVdXHRcdFx0PSBcJiMzNDtVU0JfQ0hBUkdFUl9TRFBfVFlQRVwmIzM0OyxcbiAgNDA6XHRcdFtDRFBfVFlQRV1cdFx0XHQ9IFwmIzM0O1VTQl9DSEFSR0VSX0NEUF9UWVBFXCYjMzQ7LFxuICA0MTpcdFx0W0RDUF9UWVBFXVx0XHRcdD0gXCYjMzQ7VVNCX0NIQVJHRVJfRENQX1RZUEVcJiMzNDssXG4gIDQyOlx0XHRbQUNBX1RZUEVdXHRcdFx0PSBcJiMzNDtVU0JfQ0hBUkdFUl9BQ0FfVFlQRVwmIzM0OyxcbiAgNDM6XHR9O1xuICA0NDpcdFxuICA0NTpcdHN0YXRpYyBzdHJ1Y3QgdXNiX3BoeSAqX191c2JfZmluZF9waHkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiAgNDY6XHRcdGVudW0gdXNiX3BoeV90eXBlIHR5cGUpXG4gIDQ3Olx0e1xuICA0ODpcdFx0c3RydWN0IHVzYl9waHkgICpwaHkgPSBOVUxMO1xuICA0OTpcdFxuICA1MDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaHksIGxpc3QsIGhlYWQpIHtcbiAgNTE6XHRcdFx0aWYgKHBoeS1cdTAwM2V0eXBlICE9IHR5cGUpXG4gIDUyOlx0XHRcdFx0Y29udGludWU7XG4gIDUzOlx0XG4gIDU0Olx0XHRcdHJldHVybiBwaHk7XG4gIDU1Olx0XHR9XG4gIDU2Olx0XG4gIDU3Olx0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbiAgNTg6XHR9XG4gIDU5Olx0XG4gIDYwOlx0c3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4gIDYxOlx0e1xuICA2MjpcdFx0c3RydWN0IHVzYl9waHkgICpwaHk7XG4gIDYzOlx0XG4gIDY0Olx0XHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpXG4gIDY1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuICA2NjpcdFxuICA2NzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaHksIFx1MDAyNnBoeV9saXN0LCBoZWFkKSB7XG4gIDY4Olx0XHRcdGlmIChub2RlICE9IHBoeS1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSlcbiAgNjk6XHRcdFx0XHRjb250aW51ZTtcbiAgNzA6XHRcbiAgNzE6XHRcdFx0cmV0dXJuIHBoeTtcbiAgNzI6XHRcdH1cbiAgNzM6XHRcbiAgNzQ6XHRcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xuICA3NTpcdH1cbiAgNzY6XHRcbiAgNzc6XHRzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4gIDc4Olx0e1xuICA3OTpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLnNkcF9taW4gPSBERUZBVUxUX1NEUF9DVVJfTUlOO1xuICA4MDpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLnNkcF9tYXggPSBERUZBVUxUX1NEUF9DVVJfTUFYO1xuICA4MTpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmRjcF9taW4gPSBERUZBVUxUX0RDUF9DVVJfTUlOO1xuICA4MjpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmRjcF9tYXggPSBERUZBVUxUX0RDUF9DVVJfTUFYO1xuICA4MzpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmNkcF9taW4gPSBERUZBVUxUX0NEUF9DVVJfTUlOO1xuICA4NDpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmNkcF9tYXggPSBERUZBVUxUX0NEUF9DVVJfTUFYO1xuICA4NTpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmFjYV9taW4gPSBERUZBVUxUX0FDQV9DVVJfTUlOO1xuICA4NjpcdFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLmFjYV9tYXggPSBERUZBVUxUX0FDQV9DVVJfTUFYO1xuICA4NzpcdH1cbiAgODg6XHRcbiAgODk6XHQvKipcbiAgOTA6XHQgKiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsgLSBub3RpZnkgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXG4gIDkxOlx0ICogQHdvcms6IHRoZSBjaGFyZ2VyIHdvcmsgdG8gbm90aWZ5IHRoZSBVU0IgY2hhcmdlciBzdGF0ZVxuICA5MjpcdCAqXG4gIDkzOlx0ICogVGhpcyB3b3JrIGNhbiBiZSBpc3N1ZWQgd2hlbiBVU0IgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIG9yXG4gIDk0Olx0ICogVVNCIGNoYXJnZXIgY3VycmVudCBoYXMgYmVlbiBjaGFuZ2VkLCB0aGVuIHdlIGNhbiBub3RpZnkgdGhlIGN1cnJlbnRcbiAgOTU6XHQgKiB3aGF0IGNhbiBiZSBkcmF3biB0byBwb3dlciB1c2VyIGFuZCB0aGUgY2hhcmdlciBzdGF0ZSB0byB1c2Vyc3BhY2UuXG4gIDk2Olx0ICpcbiAgOTc6XHQgKiBJZiB3ZSBnZXQgdGhlIGNoYXJnZXIgdHlwZSBmcm9tIGV4dGNvbiBzdWJzeXN0ZW0sIHdlIGNhbiBub3RpZnkgdGhlXG4gIDk4Olx0ICogY2hhcmdlciBzdGF0ZSB0byBwb3dlciB1c2VyIGF1dG9tYXRpY2FsbHkgYnkgdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKClcbiAgOTk6XHQgKiBpc3N1aW5nIGZyb20gZXh0Y29uIHN1YnN5c3RlbS5cbiAxMDA6XHQgKlxuIDEwMTpcdCAqIElmIHdlIGdldCB0aGUgY2hhcmdlciB0eXBlIGZyb20gLVx1MDAzZWNoYXJnZXJfZGV0ZWN0KCkgaW5zdGVhZCBvZiBleHRjb25cbiAxMDI6XHQgKiBzdWJzeXN0ZW0sIHRoZSB1c2IgcGh5IGRyaXZlciBzaG91bGQgaXNzdWUgdXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSgpXG4gMTAzOlx0ICogdG8gc2V0IGNoYXJnZXIgc3RhdGUgd2hlbiB0aGUgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuIDEwNDpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzA4CgkJCQkJCQlvdXRwdXQ6IDIxNgoJCQkJCQkJdGhvdWdodHM6IDY5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSaXNrIEFzc2Vzc21lbnQgZm9yIFVTQiBDaGFyZ2VyIFVldmVudCBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSB1ZXZlbnQgZ2VuZXJhdGlvbiBmb3IgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vdmluZyBmcm9tIHRoZSBgZGV2aWNlX3R5cGUudWV2ZW50YCBjYWxsYmFjayB0byBkaXJlY3RseSBjYWxsaW5nIGBrb2JqZWN0X3VldmVudF9lbnZgIHdpdGhpbiB0aGUgYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2Agd29ya3F1ZXVlIGZ1bmN0aW9uLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIEtNU0FOIHdvdWxkIGZsYWcuCgpGaXJzdCwgSSBzZWUgdGhlIGNvZGUgZGVmaW5lcyB0d28gY2hhcmFjdGVyIGFycmF5cywgYHVjaGdlcl9zdGF0ZWAgYW5kIGB1Y2hnZXJfdHlwZWAsIGJvdGggc3RhY2stYWxsb2NhdGVkIHdpdGggYSBzaXplIG9mIDUwIGFuZCBpbml0aWFsaXplZCB0byB6ZXJvIChgPSB7IDAgfWApLiBJdCBhbHNvIGluaXRpYWxpemVzIGFuIGVudmlyb25tZW50IHBvaW50ZXIgYXJyYXkgYGVudnBgIGNvbnRhaW5pbmcgcG9pbnRlcnMgdG8gdGhlc2Ugc3RyaW5ncyBhbmQgYSBOVUxMIHRlcm1pbmF0b3IuIFRoZW4sIHRoZSBjb2RlIHBvcHVsYXRlcyBgdWNoZ2VyX3N0YXRlYCBhbmQgYHVjaGdlcl90eXBlYCB1c2luZyBgc25wcmludGZgLiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGBrb2JqZWN0X3VldmVudF9lbnZgIGlzIGNhbGxlZCB3aXRoIHRoZXNlIGZvcm1hdHRlZCBzdHJpbmdzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUmIzM5O3Mgbm8gd2F5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQuIExldCYjMzk7cyBtYWtlIHN1cmUuCgoqICAgYHVjaGdlcl9zdGF0ZWAgYW5kIGB1Y2hnZXJfdHlwZWAgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4KKiAgIGBlbnZwYCBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIE5VTEwtdGVybWluYXRlZCwgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHByZXZlbnQgcmVhZC1vdXRzLgoqICAgSSBjb25zaWRlcmVkIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGB1c2JfcGh5LSZndDtjaGdfdHlwZWAsIGJ1dCB0aGF0JiMzOTtzIGEgc3RhdGljIGNvbnN0IGFycmF5LCBzbyBLQVNBTiB3b3VsZCBjYXRjaCBpdC4KKiAgIFRoaXMgaXMgdGhlIHNhbWUgbWV0aG9kb2xvZ3kgYXMgdGhlIG9sZCB2ZXJzaW9uLCB3aGljaCB1c2VkIGB1Y2hnZXJfc3RhdGVgIGFuZCBgdWNoZ2VyX3R5cGVgIGluaXRpYWxpemVkIHRvIGB7IDAgfWAgdG8gYWRkIHRvIGBlbnZgCgpTbywgaXMgdGhlcmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTGV0IG1lIHJlaXRlcmF0ZSBhbmQgYmUgY3J5c3RhbCBjbGVhci4gSSBzZWUgbm8gaXNzdWVzLgoKMS4gIFRoZXJlJiMzOTtzIG5vIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4KMi4gIFRoZSBidWZmZXJzIGV4cG9zZWQgdG8gdXNlcnNwYWNlICh2aWEgdGhlIHVldmVudCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgYXJyYXlzLCBmaWxsZWQgd2l0aCBgc25wcmludGZgLCBndWFyYW50ZWVpbmcgbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuCjMuICBObyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgbGVha2VkLgo0LiAgTm8gYnJhbmNoaW5nIGRlY2lzaW9ucyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCgpOb3csIGxldCYjMzk7cyBjcm9zcy1yZWZlcmVuY2UgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBndWlkZWxpbmVzLiBXZSBuZWVkIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgYWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLCBhbmQgaWYgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mbyBsZWFrcy4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIHRoaXMgaXMgY2xlYXJseSB0aGUgY2FzZSBoZXJlLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhlIGJ1ZmZlcnMgYmVmb3JlIHdyaXRpbmcgZGF0YSBpbiB0aGVtLgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIHJldmlldywgaXQmIzM5O3MgbXkgZGV0ZXJtaW5hdGlvbiB0aGF0IHRoaXMgcGF0Y2ggaXMgc2FmZSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBVU0IgUEhZIHVldmVudCBub3RpZmljYXRpb24gYnkgc2VuZGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpYCB1c2luZyBga29iamVjdF91ZXZlbnRfZW52KClgIHJhdGhlciB0aGFuIHZpYSBhIGBkZXZpY2VfdHlwZS51ZXZlbnRgIGNhbGxiYWNrLiBcblxuQWxsIHN0YWNrIGJ1ZmZlcnMgaW50cm9kdWNlZCBpbiB0aGlzIHBhdGNoIChgdWNoZ2VyX3N0YXRlYCwgYHVjaGdlcl90eXBlYCwgYW5kIGBlbnZwYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0geyAwIH1gIC8gZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gd2l0aCBOVUxMIHRlcm1pbmF0b3IpIGJlZm9yZSBzdHJpbmcgZm9ybWF0dGluZyB2aWEgYHNucHJpbnRmKClgIGFuZCBiZWluZyBwYXNzZWQgdG8gYGtvYmplY3RfdWV2ZW50X2VudigpYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBhcnJheSBpbmRleGluZyAoZS5nLiBgdXNiX2NoZ2VyX3R5cGVgKSBhcmUgYm91bmRzIGNoZWNrIC8gb3V0LW9mLWJvdW5kcyByZWFkIGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4sIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBVU0IgUEhZIHVldmVudCBub3RpZmljYXRpb24gYnkgc2VuZGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpYCB1c2luZyBga29iamVjdF91ZXZlbnRfZW52KClgIHJhdGhlciB0aGFuIHZpYSBhIGBkZXZpY2VfdHlwZS51ZXZlbnRgIGNhbGxiYWNrLiBcblxuQWxsIHN0YWNrIGJ1ZmZlcnMgaW50cm9kdWNlZCBpbiB0aGlzIHBhdGNoIChgdWNoZ2VyX3N0YXRlYCwgYHVjaGdlcl90eXBlYCwgYW5kIGBlbnZwYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0geyAwIH1gIC8gZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gd2l0aCBOVUxMIHRlcm1pbmF0b3IpIGJlZm9yZSBzdHJpbmcgZm9ybWF0dGluZyB2aWEgYHNucHJpbnRmKClgIGFuZCBiZWluZyBwYXNzZWQgdG8gYGtvYmplY3RfdWV2ZW50X2VudigpYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBhcnJheSBpbmRleGluZyAoZS5nLiBgdXNiX2NoZ2VyX3R5cGVgKSBhcmUgYm91bmRzIGNoZWNrIC8gb3V0LW9mLWJvdW5kcyByZWFkIGNvbmNlcm5zIGRldGVjdGFibGUgYnkgS0FTQU4sIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNDozMC42Nzg0NTgzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODI0NzM1NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9TVVBQT1JUXCIsXG4gICAgXCJVU0JfUEhZXCIsXG4gICAgXCJOT1BfVVNCX1hDRUlWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrXCIsXG4gICAgXCJ1c2JfYWRkX3BoeV9kZXZcIixcbiAgICBcInVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGVcIixcbiAgICBcInVzYl9waHlfc2V0X2NoYXJnZXJfY3VycmVudFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBVU0IgUEhZIHVldmVudCBub3RpZmljYXRpb24gYnkgc2VuZGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpYCB1c2luZyBga29iamVjdF91ZXZlbnRfZW52KClgIHJhdGhlciB0aGFuIHZpYSBhIGBkZXZpY2VfdHlwZS51ZXZlbnRgIGNhbGxiYWNrLiBcXG5cXG5BbGwgc3RhY2sgYnVmZmVycyBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2ggKGB1Y2hnZXJfc3RhdGVgLCBgdWNoZ2VyX3R5cGVgLCBhbmQgYGVudnBgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIChgPSB7IDAgfWAgLyBleHBsaWNpdCBpbml0aWFsaXphdGlvbiB3aXRoIE5VTEwgdGVybWluYXRvcikgYmVmb3JlIHN0cmluZyBmb3JtYXR0aW5nIHZpYSBgc25wcmludGYoKWAgYW5kIGJlaW5nIHBhc3NlZCB0byBga29iamVjdF91ZXZlbnRfZW52KClgLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHJpc2tzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGFycmF5IGluZGV4aW5nIChlLmcuIGB1c2JfY2hnZXJfdHlwZWApIGFyZSBib3VuZHMgY2hlY2sgLyBvdXQtb2YtYm91bmRzIHJlYWQgY29uY2VybnMgZGV0ZWN0YWJsZSBieSBLQVNBTiwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1ZXZlbnQgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3IgVVNCIFBIWSBjaGFyZ2VyIGV2ZW50cyBpbiBkcml2ZXJzL3VzYi9waHkvcGh5LmMuIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHlwZSBhbmQgaW1wbGVtZW50aW5nIGEgY3VzdG9tIHVldmVudCBjYWxsYmFjaywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjaGFyZ2VyIHN0YXRlIGFuZCB0eXBlIGFyZSBub3cgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCBkaXJlY3RseSB2aWEga29iamVjdF91ZXZlbnRfZW52KCkgd2l0aGluIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBQSFkgY29yZSBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6MzAuNjc4NDYyNTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTczMDA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2ZWZkNTcxYzNkMjExN2E4ODZkZDdkMWQ0NDhhNWJjMDZhYWZmMmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMTozNDoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LmMgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmNcXG5pbmRleCA1YTliOTM1M2YzNDNkLi43Yzg1YzdjYTFkMzA5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xcbisrKyBiL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xcbkBAIC00MiwxMiArNDIsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3R5cGVbXSA9IHtcXG4gXFx0W0FDQV9UWVBFXVxcdFxcdFxcdD0gXFxcIlVTQl9DSEFSR0VSX0FDQV9UWVBFXFxcIixcXG4gfTtcXG4gXFxuLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB1c2JfY2hnZXJfc3RhdGVbXSA9IHtcXG4tXFx0W1VTQl9DSEFSR0VSX0RFRkFVTFRdXFx0PSBcXFwiVVNCX0NIQVJHRVJfREVGQVVMVFxcXCIsXFxuLVxcdFtVU0JfQ0hBUkdFUl9QUkVTRU5UXVxcdD0gXFxcIlVTQl9DSEFSR0VSX1BSRVNFTlRcXFwiLFxcbi1cXHRbVVNCX0NIQVJHRVJfQUJTRU5UXVxcdD0gXFxcIlVTQl9DSEFSR0VSX0FCU0VOVFxcXCIsXFxuLX07XFxuLVxcbiBzdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fdXNiX2ZpbmRfcGh5KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuIFxcdGVudW0gdXNiX3BoeV90eXBlIHR5cGUpXFxuIHtcXG5AQCAtODAsMTggKzc0LDYgQEAgc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuIFxcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fZGV2aWNlX3RvX3VzYl9waHkoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KVxcbi17XFxuLVxcdHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5O1xcbi1cXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh1c2JfcGh5LCBcXHUwMDI2cGh5X2xpc3QsIGhlYWQpIHtcXG4tXFx0XFx0aWYgKHVzYl9waHktXFx1MDAzZWRldiA9PSBkZXYpXFxuLVxcdFxcdFxcdHJldHVybiB1c2JfcGh5O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgdXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxcbiB7XFxuIFxcdHVzYl9waHktXFx1MDAzZWNoZ19jdXIuc2RwX21pbiA9IERFRkFVTFRfU0RQX0NVUl9NSU47XFxuQEAgLTEyMyw2ICsxMDUsOSBAQCBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXFxuIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTtcXG4rXFx0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XFxuK1xcdGNoYXIgdWNoZ2VyX3R5cGVbNTBdID0geyAwIH07XFxuK1xcdGNoYXIgKmVudnBbXSA9IHsgdWNoZ2VyX3N0YXRlLCB1Y2hnZXJfdHlwZSwgTlVMTCB9O1xcbiBcXHR1bnNpZ25lZCBpbnQgbWluLCBtYXg7XFxuIFxcbiBcXHRzd2l0Y2ggKHVzYl9waHktXFx1MDAzZWNoZ19zdGF0ZSkge1xcbkBAIC0xMzAsMTEgKzExNSwxNSBAQCBzdGF0aWMgdm9pZCB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHR1c2JfcGh5X2dldF9jaGFyZ2VyX2N1cnJlbnQodXNiX3BoeSwgXFx1MDAyNm1pbiwgXFx1MDAyNm1heCk7XFxuIFxcbiBcXHRcXHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2dXNiX3BoeS1cXHUwMDNlbm90aWZpZXIsIG1heCwgdXNiX3BoeSk7XFxuK1xcdFxcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxcbitcXHRcXHRcXHQgXFxcIlVTQl9DSEFSR0VSX1NUQVRFPSVzXFxcIiwgXFxcIlVTQl9DSEFSR0VSX1BSRVNFTlRcXFwiKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgVVNCX0NIQVJHRVJfQUJTRU5UOlxcbiBcXHRcXHR1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQodXNiX3BoeSk7XFxuIFxcbiBcXHRcXHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2dXNiX3BoeS1cXHUwMDNlbm90aWZpZXIsIDAsIHVzYl9waHkpO1xcbitcXHRcXHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcXG4rXFx0XFx0XFx0IFxcXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1xcXCIsIFxcXCJVU0JfQ0hBUkdFUl9BQlNFTlRcXFwiKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGRldl93YXJuKHVzYl9waHktXFx1MDAzZWRldiwgXFxcIlVua25vd24gVVNCIGNoYXJnZXIgc3RhdGU6ICVkXFxcXG5cXFwiLFxcbkBAIC0xNDIsMzYgKzEzMSw5IEBAIHN0YXRpYyB2b2lkIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0a29iamVjdF91ZXZlbnQoXFx1MDAyNnVzYl9waHktXFx1MDAzZWRldi1cXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHVzYl9waHlfdWV2ZW50KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KVxcbi17XFxuLVxcdGNvbnN0IHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5O1xcbi1cXHRjaGFyIHVjaGdlcl9zdGF0ZVs1MF0gPSB7IDAgfTtcXG4tXFx0Y2hhciB1Y2hnZXJfdHlwZVs1MF0gPSB7IDAgfTtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFxuLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xcbi1cXHR1c2JfcGh5ID0gX19kZXZpY2VfdG9fdXNiX3BoeShkZXYpO1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xcbi1cXG4tXFx0aWYgKCF1c2JfcGh5KVxcbi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tXFxuLVxcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxcbi1cXHRcXHQgXFxcIlVTQl9DSEFSR0VSX1NUQVRFPSVzXFxcIiwgdXNiX2NoZ2VyX3N0YXRlW3VzYl9waHktXFx1MDAzZWNoZ19zdGF0ZV0pO1xcbi1cXG4gXFx0c25wcmludGYodWNoZ2VyX3R5cGUsIEFSUkFZX1NJWkUodWNoZ2VyX3R5cGUpLFxcbiBcXHRcXHQgXFxcIlVTQl9DSEFSR0VSX1RZUEU9JXNcXFwiLCB1c2JfY2hnZXJfdHlwZVt1c2JfcGh5LVxcdTAwM2VjaGdfdHlwZV0pO1xcbi1cXG4tXFx0aWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgdWNoZ2VyX3N0YXRlKSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRpZiAoYWRkX3VldmVudF92YXIoZW52LCB1Y2hnZXJfdHlwZSkpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdGtvYmplY3RfdWV2ZW50X2VudihcXHUwMDI2dXNiX3BoeS1cXHUwMDNlZGV2LVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxcbkBAIC02NzUsMTEgKzYzNyw2IEBAIGludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYWRkX3BoeSk7XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHVzYl9waHlfZGV2X3R5cGUgPSB7XFxuLVxcdC5uYW1lID0gXFxcInVzYl9waHlcXFwiLFxcbi1cXHQudWV2ZW50ID0gdXNiX3BoeV91ZXZlbnQsXFxuLX07XFxuLVxcbiAvKipcXG4gICogdXNiX2FkZF9waHlfZGV2IC0gZGVjbGFyZSB0aGUgVVNCIFBIWVxcbiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxcbkBAIC03MDUsOCArNjYyLDYgQEAgaW50IHVzYl9hZGRfcGh5X2RldihzdHJ1Y3QgdXNiX3BoeSAqeClcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHgtXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9IFxcdTAwMjZ1c2JfcGh5X2Rldl90eXBlO1xcbi1cXG4gXFx0QVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRChcXHUwMDI2eC1cXHUwMDNlbm90aWZpZXIpO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBoeV9sb2NrLCBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM0OjMxLjA5NTA1NTg2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzc4NTg4NzUzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1NVUFBPUlRcIixcbiAgICBcIlVTQl9QSFlcIixcbiAgICBcIk5PUF9VU0JfWENFSVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtcIixcbiAgICBcInVzYl9hZGRfcGh5X2RldlwiLFxuICAgIFwidXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZVwiLFxuICAgIFwidXNiX3BoeV9zZXRfY2hhcmdlcl9jdXJyZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1ZXZlbnQgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3IgVVNCIFBIWSBjaGFyZ2VyIGV2ZW50cyBpbiBkcml2ZXJzL3VzYi9waHkvcGh5LmMuIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHlwZSBhbmQgaW1wbGVtZW50aW5nIGEgY3VzdG9tIHVldmVudCBjYWxsYmFjaywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjaGFyZ2VyIHN0YXRlIGFuZCB0eXBlIGFyZSBub3cgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCBkaXJlY3RseSB2aWEga29iamVjdF91ZXZlbnRfZW52KCkgd2l0aGluIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBQSFkgY29yZSBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NmVmZDU3MWMzZDIxMTdhODg2ZGQ3ZDFkNDQ4YTViYzA2YWFmZjJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMTozNDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHkuYyBiL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xuaW5kZXggNWE5YjkzNTNmMzQzZC4uN2M4NWM3Y2ExZDMwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xuKysrIGIvZHJpdmVycy91c2IvcGh5L3BoeS5jXG5AQCAtNDIsMTIgKzQyLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl90eXBlW10gPSB7XG4gXHRbQUNBX1RZUEVdXHRcdFx0PSBcIlVTQl9DSEFSR0VSX0FDQV9UWVBFXCIsXG4gfTtcbiBcbi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3N0YXRlW10gPSB7XG4tXHRbVVNCX0NIQVJHRVJfREVGQVVMVF1cdD0gXCJVU0JfQ0hBUkdFUl9ERUZBVUxUXCIsXG4tXHRbVVNCX0NIQVJHRVJfUFJFU0VOVF1cdD0gXCJVU0JfQ0hBUkdFUl9QUkVTRU5UXCIsXG4tXHRbVVNCX0NIQVJHRVJfQUJTRU5UXVx0PSBcIlVTQl9DSEFSR0VSX0FCU0VOVFwiLFxuLX07XG4tXG4gc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIFx0ZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcbiB7XG5AQCAtODAsMTggKzc0LDYgQEAgc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4gXHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX2RldmljZV90b191c2JfcGh5KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldilcbi17XG4tXHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeTtcbi1cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkodXNiX3BoeSwgXHUwMDI2cGh5X2xpc3QsIGhlYWQpIHtcbi1cdFx0aWYgKHVzYl9waHktXHUwMDNlZGV2ID09IGRldilcbi1cdFx0XHRyZXR1cm4gdXNiX3BoeTtcbi1cdH1cbi1cbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4ge1xuIFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLnNkcF9taW4gPSBERUZBVUxUX1NEUF9DVVJfTUlOO1xuQEAgLTEyMyw2ICsxMDUsOSBAQCBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4gc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX3BoeSwgY2hnX3dvcmspO1xuK1x0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XG4rXHRjaGFyIHVjaGdlcl90eXBlWzUwXSA9IHsgMCB9O1xuK1x0Y2hhciAqZW52cFtdID0geyB1Y2hnZXJfc3RhdGUsIHVjaGdlcl90eXBlLCBOVUxMIH07XG4gXHR1bnNpZ25lZCBpbnQgbWluLCBtYXg7XG4gXG4gXHRzd2l0Y2ggKHVzYl9waHktXHUwMDNlY2hnX3N0YXRlKSB7XG5AQCAtMTMwLDExICsxMTUsMTUgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0dXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KHVzYl9waHksIFx1MDAyNm1pbiwgXHUwMDI2bWF4KTtcbiBcbiBcdFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2dXNiX3BoeS1cdTAwM2Vub3RpZmllciwgbWF4LCB1c2JfcGh5KTtcbitcdFx0c25wcmludGYodWNoZ2VyX3N0YXRlLCBBUlJBWV9TSVpFKHVjaGdlcl9zdGF0ZSksXG4rXHRcdFx0IFwiVVNCX0NIQVJHRVJfU1RBVEU9JXNcIiwgXCJVU0JfQ0hBUkdFUl9QUkVTRU5UXCIpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVVNCX0NIQVJHRVJfQUJTRU5UOlxuIFx0XHR1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQodXNiX3BoeSk7XG4gXG4gXHRcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnVzYl9waHktXHUwMDNlbm90aWZpZXIsIDAsIHVzYl9waHkpO1xuK1x0XHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcbitcdFx0XHQgXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1wiLCBcIlVTQl9DSEFSR0VSX0FCU0VOVFwiKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRkZXZfd2Fybih1c2JfcGh5LVx1MDAzZWRldiwgXCJVbmtub3duIFVTQiBjaGFyZ2VyIHN0YXRlOiAlZFxcblwiLFxuQEAgLTE0MiwzNiArMTMxLDkgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0a29iamVjdF91ZXZlbnQoXHUwMDI2dXNiX3BoeS1cdTAwM2VkZXYtXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHVzYl9waHlfdWV2ZW50KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KVxuLXtcbi1cdGNvbnN0IHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5O1xuLVx0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XG4tXHRjaGFyIHVjaGdlcl90eXBlWzUwXSA9IHsgMCB9O1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoeV9sb2NrLCBmbGFncyk7XG4tXHR1c2JfcGh5ID0gX19kZXZpY2VfdG9fdXNiX3BoeShkZXYpO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xuLVxuLVx0aWYgKCF1c2JfcGh5KVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cbi1cdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxuLVx0XHQgXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1wiLCB1c2JfY2hnZXJfc3RhdGVbdXNiX3BoeS1cdTAwM2VjaGdfc3RhdGVdKTtcbi1cbiBcdHNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSxcbiBcdFx0IFwiVVNCX0NIQVJHRVJfVFlQRT0lc1wiLCB1c2JfY2hnZXJfdHlwZVt1c2JfcGh5LVx1MDAzZWNoZ190eXBlXSk7XG4tXG4tXHRpZiAoYWRkX3VldmVudF92YXIoZW52LCB1Y2hnZXJfc3RhdGUpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGlmIChhZGRfdWV2ZW50X3ZhcihlbnYsIHVjaGdlcl90eXBlKSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHRyZXR1cm4gMDtcbitcdGtvYmplY3RfdWV2ZW50X2VudihcdTAwMjZ1c2JfcGh5LVx1MDAzZWRldi1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxuQEAgLTY3NSwxMSArNjM3LDYgQEAgaW50IHVzYl9hZGRfcGh5KHN0cnVjdCB1c2JfcGh5ICp4LCBlbnVtIHVzYl9waHlfdHlwZSB0eXBlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYWRkX3BoeSk7XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfcGh5X2Rldl90eXBlID0ge1xuLVx0Lm5hbWUgPSBcInVzYl9waHlcIixcbi1cdC51ZXZlbnQgPSB1c2JfcGh5X3VldmVudCxcbi19O1xuLVxuIC8qKlxuICAqIHVzYl9hZGRfcGh5X2RldiAtIGRlY2xhcmUgdGhlIFVTQiBQSFlcbiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxuQEAgLTcwNSw4ICs2NjIsNiBAQCBpbnQgdXNiX2FkZF9waHlfZGV2KHN0cnVjdCB1c2JfcGh5ICp4KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHgtXHUwMDNlZGV2LVx1MDAzZXR5cGUgPSBcdTAwMjZ1c2JfcGh5X2Rldl90eXBlO1xuLVxuIFx0QVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRChcdTAwMjZ4LVx1MDAzZW5vdGlmaWVyKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoeV9sb2NrLCBmbGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNDozMS4wOTUwNTcyMjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NjY0ODc3MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIFBIWSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBtZXRob2RpY2FsbHkgYnJlYWsgZG93biB0aGUgcGF0Y2ggYW5kIGl0cyBpbnN0cnVjdGlvbnMuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGludGVncmF0aW9uLiBUaGUgZm9jdXMgaXMgY2xlYXJseSBvbiB0aGUgVVNCIFBIWSwgc28gSSBuZWVkIHRvIGVzdGFibGlzaCBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy5cblxuTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIG1hZGUgdG8gYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIEkgbmVlZCB0byB0aG9yb3VnaGx5IGRpc3NlY3QgdGhlIGNvZGUgZGlmZiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZnVuY3Rpb25zIGFsdGVyZWQsIGFkZGl0aW9ucywgb3IgcmVtb3ZhbHMuIEkgYWxzbyB3YW50IHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIGBkcml2ZXJzL3VzYi9waHkvYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgY2hhbmdlcyBpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgdGhpcyBwYXRjaCBtaWdodCBpbnRyb2R1Y2UsIGFzIHRoZXNlIGFsd2F5cyByZXF1aXJlIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBkdXJpbmcgaW50ZWdyYXRpb24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHByb2plY3QncyBjdXJyZW50IFVTQiBQSFkgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBwYXRjaCBhZGRzIG5ldyBmZWF0dXJlcywgZml4ZXMgYnVncywgb3Igc2ltcGx5IHJlZmFjdG9ycyBleGlzdGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNDozOS43NTk5MzcxODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzMDYyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTk9QX1VTQl9YQ0VJVnxVU0JfUEhZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9waHkvS2NvbmZpZz01PW1lbnUgXFxcIlVTQiBQaHlzaWNhbCBMYXllciBkcml2ZXJzXFxcIlxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTYtXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6Nzpjb25maWcgVVNCX1BIWVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTgtXFx0c2VsZWN0IEVYVENPTlxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9MTQ9Y29uZmlnIEFCODUwMF9VU0JcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTE2LVxcdGRlcGVuZHMgb24gQUI4NTAwX0NPUkVcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzoxNzpcXHRzZWxlY3QgVVNCX1BIWVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTE4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTIzPWNvbmZpZyBGU0xfVVNCMl9PVEdcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTI2LVxcdGRlcGVuZHMgb24gVVNCX0dBREdFVCB8fCAhVVNCX0dBREdFVCAjIGlmIFVTQl9HQURHRVQ9bSwgdGhpcyBjYW4ndCBiZSAneSdcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzoyNzpcXHRzZWxlY3QgVVNCX1BIWVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTI4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnOjMxOmNvbmZpZyBLRVlTVE9ORV9VU0JfUEhZXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIktleXN0b25lIFVTQiBQSFkgRHJpdmVyXFxcIlxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTMzLVxcdGRlcGVuZHMgb24gQVJDSF9LRVlTVE9ORSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIE5PUF9VU0JfWENFSVZcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0zNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo0MDpjb25maWcgTk9QX1VTQl9YQ0VJVlxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTQxLVxcdHRyaXN0YXRlIFxcXCJOT1AgVVNCIFRyYW5zY2VpdmVyIERyaXZlclxcXCJcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy00Mi1cXHRkZXBlbmRzIG9uIFVTQl9HQURHRVQgfHwgIVVTQl9HQURHRVQgIyBpZiBVU0JfR0FER0VUPW0sIE5PUCBjYW4ndCBiZSBidWlsdC1pblxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnOjQzOlxcdHNlbGVjdCBVU0JfUEhZXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctNDQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9NTI9Y29uZmlnIEFNMzM1WF9QSFlfVVNCXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy01NC1cXHRkZXBlbmRzIG9uIEFSTSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo1NTpcXHRkZXBlbmRzIG9uIE5PUF9VU0JfWENFSVZcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo1NjpcXHRzZWxlY3QgVVNCX1BIWVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTU3LVxcdHNlbGVjdCBBTTMzNVhfQ09OVFJPTF9VU0JcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTc1PWNvbmZpZyBVU0JfR1BJT19WQlVTXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy03OS1cXHRkZXBlbmRzIG9uICFVU0JfQ09OTl9HUElPXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6ODA6XFx0c2VsZWN0IFVTQl9QSFlcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy04MS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz0xMDA9Y29uZmlnIFRBSFZPX1VTQlxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTAzLVxcdGRlcGVuZHMgb24gVVNCX0dBREdFVCB8fCAhVVNCX0dBREdFVCAjIGlmIFVTQl9HQURHRVQ9bSwgdGhpcyBjYW4ndCBiZSAneSdcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzoxMDQ6XFx0c2VsZWN0IFVTQl9QSFlcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xMDUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9MTE2PWNvbmZpZyBVU0JfSVNQMTMwMVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTE5LVxcdGRlcGVuZHMgb24gSTJDXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc6MTIwOlxcdHNlbGVjdCBVU0JfUEhZXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMTIxLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTEyOT1jb25maWcgVVNCX01YU19QSFlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTEzMi1cXHRzZWxlY3QgU1RNUF9ERVZJQ0VcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzoxMzM6XFx0c2VsZWN0IFVTQl9QSFlcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xMzQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWc9MTM5PWNvbmZpZyBVU0JfVEVHUkFfUEhZXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xNDItXFx0c2VsZWN0IFVTQl9DT01NT05cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzoxNDM6XFx0c2VsZWN0IFVTQl9QSFlcXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0xNDQtXFx0c2VsZWN0IFVTQl9VTFBJXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGUtNC0jXFxuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1VTQl9QSFkpXFx0XFx0XFx0Kz0gcGh5Lm9cXG5kcml2ZXJzL3VzYi9waHkvTWFrZWZpbGUtNi1vYmotJChDT05GSUdfT0YpXFx0XFx0XFx0Kz0gb2Yub1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlPTExPW9iai0kKENPTkZJR19GU0xfVVNCMl9PVEcpXFx0XFx0Kz0gcGh5LWZzbC11c2Iub1xcbmRyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTk9QX1VTQl9YQ0VJVilcXHRcXHQrPSBwaHktZ2VuZXJpYy5vXFxuZHJpdmVycy91c2IvcGh5L01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19UQUhWT19VU0IpXFx0XFx0XFx0Kz0gcGh5LXRhaHZvLm9cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfVVNCX1VMUElfVklFV1BPUlQpXFx0XFx0Kz0gcGh5LXVscGktdmlld3BvcnQub1xcbmRyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfS0VZU1RPTkVfVVNCX1BIWSlcXHRcXHQrPSBwaHkta2V5c3RvbmUub1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMzEtI2RlZmluZSBBQjg1MDVfVVNCX0xJTkVfU1RBVF9SRUcgMHg5NFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjMyOiNkZWZpbmUgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcgMHg4QVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTMzLVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMzctLyogQmFuayBBQjg1MDBfREVCVUcgKi9cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzozODojZGVmaW5lIEFCODUwMF9VU0JfUEhZX1RVTkUxIDB4MDVcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzozOTojZGVmaW5lIEFCODUwMF9VU0JfUEhZX1RVTkUyIDB4MDZcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo0MDojZGVmaW5lIEFCODUwMF9VU0JfUEhZX1RVTkUzIDB4MDdcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy00MS1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTI0MD1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3dkX2xpbmtzdGF0dXMoc3RydWN0IGFiODUwMF91c2IgKmFiLCB1OCBiaXQpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy0yNDQtXFx0XFx0YWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVxcdTAwM2VkZXYsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6MjQ1OlxcdFxcdFxcdFxcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTI0Ni1cXHRcXHRcXHRcXHRiaXQsIGJpdCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYz0yNTE9c3RhdGljIHZvaWQgYWI4NTAwX3VzYl9waHlfZW5hYmxlKHN0cnVjdCBhYjg1MDBfdXNiICphYiwgYm9vbCBzZWxfaG9zdClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTI2Ny1cXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzoyNjg6XFx0XFx0XFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMjY5LVxcdFxcdFxcdGJpdCwgYml0KTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTI3Mj1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3BoeV9kaXNhYmxlKHN0cnVjdCBhYjg1MDBfdXNiICphYiwgYm9vbCBzZWxfaG9zdClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTI4MC1cXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzoyODE6XFx0XFx0XFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtMjgyLVxcdFxcdFxcdGJpdCwgMCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYz01NjI9c3RhdGljIGlycXJldHVybl90IGFiODUwMF91c2JfZGlzY29ubmVjdF9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTU5Ny1cXHRcXHRcXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo1OTg6XFx0XFx0XFx0XFx0XFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNTk5LVxcdFxcdFxcdFxcdFxcdEFCODUwMF9CSVRfUEhZX0NUUkxfREVWSUNFX0VOLCAwKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTY4Mj1zdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3Jlc3RhcnRfcGh5KHN0cnVjdCBhYjg1MDBfdXNiICphYilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTY4NC1cXHRhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo2ODU6XFx0XFx0XFx0QUI4NTAwX1VTQiwgQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNjg2LVxcdFxcdFxcdEFCODUwMF9CSVRfUEhZX0NUUkxfREVWSUNFX0VOLFxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNjkxLVxcdGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjY5MjpcXHRcXHRcXHRBQjg1MDBfVVNCLCBBQjg1MDBfVVNCX1BIWV9DVFJMX1JFRyxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy02OTMtXFx0XFx0XFx0QUI4NTAwX0JJVF9QSFlfQ1RSTF9ERVZJQ0VfRU4sXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy02OTYtXFx0YWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVxcdTAwM2VkZXYsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6Njk3OlxcdFxcdFxcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTY5OC1cXHRcXHRcXHRBQjg1MDBfQklUX1BIWV9DVFJMX0hPU1RfRU4sXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy03MDMtXFx0YWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVxcdTAwM2VkZXYsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6NzA0OlxcdFxcdFxcdEFCODUwMF9VU0IsIEFCODUwMF9VU0JfUEhZX0NUUkxfUkVHLFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTcwNS1cXHRcXHRcXHRBQjg1MDBfQklUX1BIWV9DVFJMX0hPU1RfRU4sXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYz03ODg9c3RhdGljIHZvaWQgYWI4NTAwX3VzYl9zZXRfYWI4NTAwX3R1bmluZ192YWx1ZXMoc3RydWN0IGFiODUwMF91c2IgKmFiKVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtNzk5LVxcdGVyciA9IGFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjgwMDpcXHRcXHRcXHRBQjg1MDBfREVCVUcsIEFCODUwMF9VU0JfUEhZX1RVTkUxLCAweEM4KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MDEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MDUtXFx0ZXJyID0gYWJ4NTAwX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVxcdTAwM2VkZXYsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6ODA2OlxcdFxcdFxcdEFCODUwMF9ERUJVRywgQUI4NTAwX1VTQl9QSFlfVFVORTIsIDB4MDApO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTgwNy1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTgxMS1cXHRlcnIgPSBhYng1MDBfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4MTI6XFx0XFx0XFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMywgMHg3OCk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtODEzLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM9ODI1PXN0YXRpYyB2b2lkIGFiODUwMF91c2Jfc2V0X2FiODUwNV90dW5pbmdfdmFsdWVzKHN0cnVjdCBhYjg1MDBfdXNiICphYilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTgzNy1cXHRlcnIgPSBhYng1MDBfbWFza19hbmRfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItXFx1MDAzZWRldixcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo4Mzg6XFx0XFx0XFx0QUI4NTAwX0RFQlVHLCBBQjg1MDBfVVNCX1BIWV9UVU5FMSxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04MzktXFx0XFx0XFx0MHhDOCwgMHhDOCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy04NDQtXFx0ZXJyID0gYWJ4NTAwX21hc2tfYW5kX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLVxcdTAwM2VkZXYsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmM6ODQ1OlxcdFxcdFxcdEFCODUwMF9ERUJVRywgQUI4NTAwX1VTQl9QSFlfVFVORTIsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtODQ2LVxcdFxcdFxcdDB4NjAsIDB4NjApO1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hYjg1MDAtdXNiLmMtODUxLVxcdGVyciA9IGFieDUwMF9tYXNrX2FuZF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jOjg1MjpcXHRcXHRcXHRBQjg1MDBfREVCVUcsIEFCODUwMF9VU0JfUEhZX1RVTkUzLFxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTg1My1cXHRcXHRcXHQweEZDLCAweDgwKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTg2OD1zdGF0aWMgaW50IGFiODUwMF91c2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTkzOC1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo5Mzk6XFx0ZXJyID0gdXNiX2FkZF9waHkoXFx1MDAyNmFiLVxcdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy05NDAtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM9NzczPXN0YXRpYyBpbnQgZnNsX290Z19jb25mKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWZzbC11c2IuYy04MTctXFx0LyogU3RvcmUgdGhlIG90ZyB0cmFuc2NlaXZlciAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jOjgxODpcXHRzdGF0dXMgPSB1c2JfYWRkX3BoeShcXHUwMDI2ZnNsX290Z190Yy1cXHUwMDNlcGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmMtODE5LVxcdGlmIChzdGF0dXMpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jPTgzMz1zdGF0aWMgaW50IHVzYl9vdGdfc3RhcnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jLTgzNS1cXHRzdHJ1Y3QgZnNsX290ZyAqcF9vdGc7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM6ODM2OlxcdHN0cnVjdCB1c2JfcGh5ICpvdGdfdHJhbnMgPSB1c2JfZ2V0X3BoeShVU0JfUEhZX1RZUEVfVVNCMik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmMtODM3LVxcdHN0cnVjdCBvdGdfZnNtICpmc207XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0xOTY9aW50IHVzYl9waHlfZ2VuX2NyZWF0ZV9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3ApXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMTk3LXtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoxOTg6XFx0ZW51bSB1c2JfcGh5X3R5cGUgdHlwZSA9IFVTQl9QSFlfVFlQRV9VU0IyO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE5OS1cXHRpbnQgZXJyID0gMDtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jPTIzMT1zdGF0aWMgaW50IGdwaW9fdmJ1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1ncGlvLXZidXMtdXNiLmMtMzE1LVxcdC8qIG9ubHkgYWN0aXZlIHdoZW4gYSBnYWRnZXQgaXMgcmVnaXN0ZXJlZCAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jOjMxNjpcXHRlcnIgPSB1c2JfYWRkX3BoeShcXHUwMDI2Z3Bpb192YnVzLVxcdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdwaW8tdmJ1cy11c2IuYy0zMTctXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1pc3AxMzAxLmM9OTU9c3RhdGljIGludCBpc3AxMzAxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYy0xMTEtXFx0cGh5LVxcdTAwM2VzZXRfdmJ1cyA9IGlzcDEzMDFfcGh5X3NldF92YnVzO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jOjExMjpcXHRwaHktXFx1MDAzZXR5cGUgPSBVU0JfUEhZX1RZUEVfVVNCMjtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYy0xMTMtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtMTgtLyogVVNCIFBIWSBjb250cm9sIHJlZ2lzdGVyIG9mZnNldHMgKi9cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MTk6I2RlZmluZSBVU0JfUEhZX0NUTF9VVE1JXFx0XFx0MHgwMDAwXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jOjIwOiNkZWZpbmUgVVNCX1BIWV9DVExfUElQRVxcdFxcdDB4MDAwNFxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzoyMTojZGVmaW5lIFVTQl9QSFlfQ1RMX1BBUkFNXzFcXHRcXHQweDAwMDhcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MjI6I2RlZmluZSBVU0JfUEhZX0NUTF9QQVJBTV8yXFx0XFx0MHgwMDBjXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jOjIzOiNkZWZpbmUgVVNCX1BIWV9DVExfQ0xPQ0tcXHRcXHQweDAwMTBcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6MjQ6I2RlZmluZSBVU0JfUEhZX0NUTF9QTExcXHRcXHRcXHQweDAwMTRcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmMtMjUtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM9NDQ9c3RhdGljIGludCBrZXlzdG9uZV91c2JwaHlfaW5pdChzdHJ1Y3QgdXNiX3BoeSAqcGh5KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTQ4LVxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzo0OTpcXHR2YWwgID0ga2V5c3RvbmVfdXNicGh5X3JlYWRsKGtfcGh5LVxcdTAwM2VwaHlfY3RybCwgVVNCX1BIWV9DVExfQ0xPQ0spO1xcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzo1MDpcXHRrZXlzdG9uZV91c2JwaHlfd3JpdGVsKGtfcGh5LVxcdTAwM2VwaHlfY3RybCwgVVNCX1BIWV9DVExfQ0xPQ0ssXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTUxLVxcdFxcdFxcdFxcdHZhbCB8IFBIWV9SRUZfU1NQX0VOKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYz01NT1zdGF0aWMgdm9pZCBrZXlzdG9uZV91c2JwaHlfc2h1dGRvd24oc3RydWN0IHVzYl9waHkgKnBoeSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy01OS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6NjA6XFx0dmFsICA9IGtleXN0b25lX3VzYnBoeV9yZWFkbChrX3BoeS1cXHUwMDNlcGh5X2N0cmwsIFVTQl9QSFlfQ1RMX0NMT0NLKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6NjE6XFx0a2V5c3RvbmVfdXNicGh5X3dyaXRlbChrX3BoeS1cXHUwMDNlcGh5X2N0cmwsIFVTQl9QSFlfQ1RMX0NMT0NLLFxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy02Mi1cXHRcXHRcXHRcXHR2YWwgXFx1MDAyNiB+UEhZX1JFRl9TU1BfRU4pO1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmMtMTI2LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jOjEyNzojZGVmaW5lIFVTQl9QSFlfVkxMU19XQUtFVVBfRU5cXHRcXHRcXHRCSVQoMClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy0xMjgtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYz03NTg9c3RhdGljIGludCBteHNfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy04NDUtXFx0bXhzX3BoeS1cXHUwMDNlcGh5Lm5vdGlmeV9kaXNjb25uZWN0XFx0PSBteHNfcGh5X29uX2Rpc2Nvbm5lY3Q7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmM6ODQ2OlxcdG14c19waHktXFx1MDAzZXBoeS50eXBlXFx0XFx0PSBVU0JfUEhZX1RZUEVfVVNCMjtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy04NDctXFx0bXhzX3BoeS1cXHUwMDNlcGh5LnNldF93YWtldXBcXHRcXHQ9IG14c19waHlfc2V0X3dha2V1cDtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jPTg3OT1zdGF0aWMgdm9pZCBteHNfcGh5X3dha2V1cF9lbmFibGUoc3RydWN0IG14c19waHkgKm14c19waHksIGJvb2wgb24pXFxuZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmMtODgwLXtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYzo4ODE6XFx0dTMyIG1hc2sgPSBVU0JfUEhZX1ZMTFNfV0FLRVVQX0VOO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg4Mi1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGFodm8uYz0zMTk9c3RhdGljIGludCB0YWh2b191c2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGFodm8uYy0zODMtXFxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jOjM4NDpcXHRyZXQgPSB1c2JfYWRkX3BoeShcXHUwMDI2dHUtXFx1MDAzZXBoeSwgVVNCX1BIWV9UWVBFX1VTQjIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGFodm8uYy0zODUtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjAtI2RlZmluZSAgIFVTQl9TVVNQX0NMUlxcdFxcdFxcdFxcdEJJVCg1KVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NjE6I2RlZmluZSAgIFVTQl9QSFlfQ0xLX1ZBTElEXFx0XFx0XFx0QklUKDcpXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy02Mi0jZGVmaW5lICAgVVRNSVBfUkVTRVRcXHRcXHRcXHRcXHRCSVQoMTEpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTY5LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NzA6I2RlZmluZSBVU0JfUEhZX1ZCVVNfU0VOU09SU1xcdFxcdFxcdDB4NDA0XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03MS0jZGVmaW5lICAgQl9TRVNTX1ZMRF9XQUtFVVBfRU5cXHRcXHRcXHRCSVQoMTQpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc0LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NzU6I2RlZmluZSBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEXFx0XFx0XFx0MHg0MDhcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc2LSNkZWZpbmUgICBJRF9JTlRfRU5cXHRcXHRcXHRcXHRCSVQoMClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9NDg0PXN0YXRpYyB2b2lkIHV0bWlfcGh5X2Nsa19kaXNhYmxlKHN0cnVjdCB0ZWdyYV91c2JfcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTQ5My1cXHQgKi9cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjQ5NDpcXHRpZiAodXRtaV93YWl0X3JlZ2lzdGVyKGJhc2UgKyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCwgMCkgPT0gMClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTQ5NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTUxMC1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjUxMTpcXHRpZiAodXRtaV93YWl0X3JlZ2lzdGVyKGJhc2UgKyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCwgMCkpXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy01MTItXFx0XFx0ZGV2X2VycihwaHktXFx1MDAzZXVfcGh5LmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM9NTE2PXN0YXRpYyB2b2lkIHV0bWlfcGh5X2Nsa19lbmFibGUoc3RydWN0IHRlZ3JhX3VzYl9waHkgKnBoeSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNTI1LVxcdCAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NTI2OlxcdGlmICh1dG1pX3dhaXRfcmVnaXN0ZXIoYmFzZSArIFVTQl9TVVNQX0NUUkwsIFVTQl9QSFlfQ0xLX1ZBTElELFxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6NTI3OlxcdFxcdFxcdCAgICAgICBVU0JfUEhZX0NMS19WQUxJRCkgPT0gMClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTUyOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTU0My1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjU0NDpcXHRpZiAodXRtaV93YWl0X3JlZ2lzdGVyKGJhc2UgKyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjU0NTpcXHRcXHRcXHQgICAgICAgVVNCX1BIWV9DTEtfVkFMSUQpKVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNTQ2LVxcdFxcdGRldl9lcnIocGh5LVxcdTAwM2V1X3BoeS5kZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jPTU1MD1zdGF0aWMgaW50IHV0bWlfcGh5X3Bvd2VyX29uKHN0cnVjdCB0ZWdyYV91c2JfcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYxNS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjYxNjpcXHRcXHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYxNy1cXHRcXHR2YWwgXFx1MDAyNj0gflZCVVNfV0FLRVVQX1dBS0VVUF9FTjtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTYxOC1cXHRcXHR2YWwgXFx1MDAyNj0gfihJRF9DSEdfREVUIHwgVkJVU19XQUtFVVBfQ0hHX0RFVCk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo2MTk6XFx0XFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy02MjAtXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo2MjE6XFx0XFx0dmFsID0gcmVhZGxfcmVsYXhlZChiYXNlICsgVVNCX1BIWV9WQlVTX1NFTlNPUlMpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjIyLVxcdFxcdHZhbCBcXHUwMDI2PSB+KEFfVkJVU19WTERfV0FLRVVQX0VOIHwgQV9TRVNTX1ZMRF9XQUtFVVBfRU4pO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNjIzLVxcdFxcdHZhbCBcXHUwMDI2PSB+KEJfU0VTU19WTERfV0FLRVVQX0VOKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjYyNDpcXHRcXHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgKyBVU0JfUEhZX1ZCVVNfU0VOU09SUyk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy02MjUtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jPTcxNj1zdGF0aWMgaW50IHV0bWlfcGh5X3Bvd2VyX29mZihzdHJ1Y3QgdGVncmFfdXNiX3BoeSAqcGh5KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03MjUtXFx0aWYgKHBoeS1cXHUwMDNld2FrZXVwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgcGh5LVxcdTAwM2Vtb2RlICE9IFVTQl9EUl9NT0RFX0hPU1QpXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo3MjY6XFx0XFx0cmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQoYmFzZSArIFVTQl9QSFlfVkJVU19XQUtFVVBfSUQsXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03MjctXFx0XFx0XFx0XFx0XFx0ICAgdmFsLCAhKHZhbCBcXHUwMDI2IFZCVVNfV0FLRVVQX1NUUyksXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc2Ni1cXHRcXHRpZiAocGh5LVxcdTAwM2Vtb2RlICE9IFVTQl9EUl9NT0RFX0hPU1QpIHtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjc2NzpcXHRcXHRcXHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc2OC1cXHRcXHRcXHR2YWwgfD0gVkJVU19XQUtFVVBfV0FLRVVQX0VOO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtNzY5LVxcdFxcdFxcdHZhbCBcXHUwMDI2PSB+KElEX0NIR19ERVQgfCBWQlVTX1dBS0VVUF9DSEdfREVUKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjc3MDpcXHRcXHRcXHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc3MS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjc3MjpcXHRcXHRcXHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBVU0JfUEhZX1ZCVVNfU0VOU09SUyk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy03NzMtXFx0XFx0XFx0dmFsIHw9IEFfVkJVU19WTERfV0FLRVVQX0VOO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6Nzc0OlxcdFxcdFxcdHdyaXRlbF9yZWxheGVkKHZhbCwgYmFzZSArIFVTQl9QSFlfVkJVU19TRU5TT1JTKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTc3NS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jPTg4OT1zdGF0aWMgaW50IHVoc2ljX3BoeV9wb3dlcl9vbihzdHJ1Y3QgdGVncmFfdXNiX3BoeSAqcGh5KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy05NzctXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzo5Nzg6XFx0ZXJyID0gdXRtaV93YWl0X3JlZ2lzdGVyKGJhc2UgKyBVU0JfU1VTUF9DVFJMLCBVU0JfUEhZX0NMS19WQUxJRCxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjk3OTpcXHRcXHRcXHRcXHQgVVNCX1BIWV9DTEtfVkFMSUQpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtOTgwLVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz0xMDk5PXN0YXRpYyBpcnFyZXR1cm5fdCB0ZWdyYV91c2JfcGh5X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xMTA5LVxcdCAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTExMDpcXHR2YWwgPSByZWFkbF9yZWxheGVkKGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jOjExMTE6XFx0d3JpdGVsX3JlbGF4ZWQodmFsLCBiYXNlICsgVVNCX1BIWV9WQlVTX1dBS0VVUF9JRCk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xMTEyLVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz0xMTE2PXN0YXRpYyBpbnQgdGVncmFfdXNiX3BoeV9zZXRfd2FrZXVwKHN0cnVjdCB1c2JfcGh5ICp1X3BoeSwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExMjYtXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzoxMTI3OlxcdFxcdHZhbCA9IHJlYWRsX3JlbGF4ZWQoYmFzZSArIFVTQl9QSFlfVkJVU19XQUtFVVBfSUQpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtMTEyOC1cXHRcXHR2YWwgXFx1MDAyNj0gfihJRF9JTlRfRU4gfCBWQlVTX1dBS0VVUF9JTlRfRU4pO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTEyOTpcXHRcXHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExMzAtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExNDgtXFx0XFx0XFx0ICovXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYzoxMTQ5OlxcdFxcdFxcdHZhbCA9IHJlYWRsX3JlbGF4ZWQoYmFzZSArIFVTQl9QSFlfVkJVU19XQUtFVVBfSUQpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmMtMTE1MC1cXHRcXHRcXHR2YWwgfD0gSURfSU5UX0VOIHwgVkJVU19XQUtFVVBfSU5UX0VOO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTE1MTpcXHRcXHRcXHR3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgKyBVU0JfUEhZX1ZCVVNfV0FLRVVQX0lEKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTExNTItXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9NjAwPWludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MDUtXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjYwNjpcXHRpZiAoeC1cXHUwMDNldHlwZSAhPSBVU0JfUEhZX1RZUEVfVU5ERUZJTkVEKSB7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTYwNy1cXHRcXHRkZXZfZXJyKHgtXFx1MDAzZWRldiwgXFxcIm5vdCBhY2NlcHRpbmcgaW5pdGlhbGl6ZWQgUEhZICVzXFxcXG5cXFwiLCB4LVxcdTAwM2VsYWJlbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM0OjM5LjgxODI0ODY3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDY3MTE5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBVU0IgUEhZIENoYXJnZXIgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFVTQiBQSFkgY2hhcmdlcnMgYXJlIGltcGxlbWVudGVkLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBkZWZpbml0ZWx5IGBkcml2ZXJzL3VzYi9waHkvcGh5LmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgcmVjZW50IG1vZGlmaWNhdGlvbnMuIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYCBhbmQgYHVzYl9hZGRfcGh5X2RldmAsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBjaGFyZ2VyIGZ1bmN0aW9uYWxpdHkgcHJvYmFibHkgcmVzaWRlcy4gSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvb3JkaW5hdGVkIOKAkyB3aGF0IHRyaWdnZXJzIHRoZW0sIHdoYXQgZGF0YSB0aGV5IGV4Y2hhbmdlLCBhbmQgd2hhdCByZXNvdXJjZXMgdGhleSBtYW5hZ2UuIFVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcnBsYXkgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGNyaXRpY2FsIGluc2lnaHRzIGludG8gdGhlIGRlc2lnbi4gVGhlbiBJJ2xsIGJlIGFibGUgdG8gdGVsbCB3aGF0J3MgY29ycmVjdCwgYW5kIG1heWJlIHNlZSBzb21lIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhleSd2ZSBzdHJ1Y3R1cmVkIHRoZSBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTEyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6NDEuOTY0OTYyODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvcGh5L3BoeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIHBoeS5jIC0tIFVTQiBwaHkgaGFuZGxpbmdcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBUZXhhcyBJbnN0cnVtZW50c1xcbiAgIDY6XFx0ICovXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvcGh5LmhcXHUwMDNlXFxuICAxNjpcXHRcXG4gIDE3OlxcdC8qIERlZmF1bHQgY3VycmVudCByYW5nZSBieSBjaGFyZ2VyIHR5cGUuICovXFxuICAxODpcXHQjZGVmaW5lIERFRkFVTFRfU0RQX0NVUl9NSU5cXHQyXFxuICAxOTpcXHQjZGVmaW5lIERFRkFVTFRfU0RQX0NVUl9NQVhcXHQ1MDBcXG4gIDIwOlxcdCNkZWZpbmUgREVGQVVMVF9TRFBfQ1VSX01JTl9TU1xcdDE1MFxcbiAgMjE6XFx0I2RlZmluZSBERUZBVUxUX1NEUF9DVVJfTUFYX1NTXFx0OTAwXFxuICAyMjpcXHQjZGVmaW5lIERFRkFVTFRfRENQX0NVUl9NSU5cXHQ1MDBcXG4gIDIzOlxcdCNkZWZpbmUgREVGQVVMVF9EQ1BfQ1VSX01BWFxcdDUwMDBcXG4gIDI0OlxcdCNkZWZpbmUgREVGQVVMVF9DRFBfQ1VSX01JTlxcdDE1MDBcXG4gIDI1OlxcdCNkZWZpbmUgREVGQVVMVF9DRFBfQ1VSX01BWFxcdDUwMDBcXG4gIDI2OlxcdCNkZWZpbmUgREVGQVVMVF9BQ0FfQ1VSX01JTlxcdDE1MDBcXG4gIDI3OlxcdCNkZWZpbmUgREVGQVVMVF9BQ0FfQ1VSX01BWFxcdDUwMDBcXG4gIDI4OlxcdFxcbiAgMjk6XFx0c3RhdGljIExJU1RfSEVBRChwaHlfbGlzdCk7XFxuICAzMDpcXHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBoeV9sb2NrKTtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0c3RydWN0IHBoeV9kZXZtIHtcXG4gIDMzOlxcdFxcdHN0cnVjdCB1c2JfcGh5ICpwaHk7XFxuICAzNDpcXHRcXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iO1xcbiAgMzU6XFx0fTtcXG4gIDM2OlxcdFxcbiAgMzc6XFx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl90eXBlW10gPSB7XFxuICAzODpcXHRcXHRbVU5LTk9XTl9UWVBFXVxcdFxcdFxcdD0gXFxcIlVTQl9DSEFSR0VSX1VOS05PV05fVFlQRVxcXCIsXFxuICAzOTpcXHRcXHRbU0RQX1RZUEVdXFx0XFx0XFx0PSBcXFwiVVNCX0NIQVJHRVJfU0RQX1RZUEVcXFwiLFxcbiAgNDA6XFx0XFx0W0NEUF9UWVBFXVxcdFxcdFxcdD0gXFxcIlVTQl9DSEFSR0VSX0NEUF9UWVBFXFxcIixcXG4gIDQxOlxcdFxcdFtEQ1BfVFlQRV1cXHRcXHRcXHQ9IFxcXCJVU0JfQ0hBUkdFUl9EQ1BfVFlQRVxcXCIsXFxuICA0MjpcXHRcXHRbQUNBX1RZUEVdXFx0XFx0XFx0PSBcXFwiVVNCX0NIQVJHRVJfQUNBX1RZUEVcXFwiLFxcbiAgNDM6XFx0fTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbiAgNDY6XFx0XFx0ZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcXG4gIDQ3OlxcdHtcXG4gIDQ4OlxcdFxcdHN0cnVjdCB1c2JfcGh5ICAqcGh5ID0gTlVMTDtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaHksIGxpc3QsIGhlYWQpIHtcXG4gIDUxOlxcdFxcdFxcdGlmIChwaHktXFx1MDAzZXR5cGUgIT0gdHlwZSlcXG4gIDUyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRcXHRyZXR1cm4gcGh5O1xcbiAgNTU6XFx0XFx0fVxcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4gIDU4OlxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0c3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRzdHJ1Y3QgdXNiX3BoeSAgKnBoeTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpKVxcbiAgNjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGh5LCBcXHUwMDI2cGh5X2xpc3QsIGhlYWQpIHtcXG4gIDY4OlxcdFxcdFxcdGlmIChub2RlICE9IHBoeS1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlKVxcbiAgNjk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdHJldHVybiBwaHk7XFxuICA3MjpcXHRcXHR9XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xcbiAgNzU6XFx0fVxcbiAgNzY6XFx0XFxuICA3NzpcXHRzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXFxuICA3ODpcXHR7XFxuICA3OTpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLnNkcF9taW4gPSBERUZBVUxUX1NEUF9DVVJfTUlOO1xcbiAgODA6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5zZHBfbWF4ID0gREVGQVVMVF9TRFBfQ1VSX01BWDtcXG4gIDgxOlxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19jdXIuZGNwX21pbiA9IERFRkFVTFRfRENQX0NVUl9NSU47XFxuICA4MjpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLmRjcF9tYXggPSBERUZBVUxUX0RDUF9DVVJfTUFYO1xcbiAgODM6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5jZHBfbWluID0gREVGQVVMVF9DRFBfQ1VSX01JTjtcXG4gIDg0OlxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19jdXIuY2RwX21heCA9IERFRkFVTFRfQ0RQX0NVUl9NQVg7XFxuICA4NTpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLmFjYV9taW4gPSBERUZBVUxUX0FDQV9DVVJfTUlOO1xcbiAgODY6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5hY2FfbWF4ID0gREVGQVVMVF9BQ0FfQ1VSX01BWDtcXG4gIDg3OlxcdH1cXG4gIDg4OlxcdFxcbiAgODk6XFx0LyoqXFxuICA5MDpcXHQgKiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsgLSBub3RpZnkgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXFxuICA5MTpcXHQgKiBAd29yazogdGhlIGNoYXJnZXIgd29yayB0byBub3RpZnkgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXFxuICA5MjpcXHQgKlxcbiAgOTM6XFx0ICogVGhpcyB3b3JrIGNhbiBiZSBpc3N1ZWQgd2hlbiBVU0IgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIG9yXFxuICA5NDpcXHQgKiBVU0IgY2hhcmdlciBjdXJyZW50IGhhcyBiZWVuIGNoYW5nZWQsIHRoZW4gd2UgY2FuIG5vdGlmeSB0aGUgY3VycmVudFxcbiAgOTU6XFx0ICogd2hhdCBjYW4gYmUgZHJhd24gdG8gcG93ZXIgdXNlciBhbmQgdGhlIGNoYXJnZXIgc3RhdGUgdG8gdXNlcnNwYWNlLlxcbiAgOTY6XFx0ICpcXG4gIDk3OlxcdCAqIElmIHdlIGdldCB0aGUgY2hhcmdlciB0eXBlIGZyb20gZXh0Y29uIHN1YnN5c3RlbSwgd2UgY2FuIG5vdGlmeSB0aGVcXG4gIDk4OlxcdCAqIGNoYXJnZXIgc3RhdGUgdG8gcG93ZXIgdXNlciBhdXRvbWF0aWNhbGx5IGJ5IHVzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZSgpXFxuICA5OTpcXHQgKiBpc3N1aW5nIGZyb20gZXh0Y29uIHN1YnN5c3RlbS5cXG4gMTAwOlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM0OjQxLjk2NTA5MzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA5MDMwNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgdGFzaywgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgZHJpdmVycy91c2IvcGh5L3BoeS5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIFVTQiBQSFkgKFBoeXNpY2FsIExheWVyKSBkcml2ZXJzIHJlc2lkZSwgdGhlIGNydWNpYWwgYnJpZGdlIGJldHdlZW4gdGhlIGRpZ2l0YWwgd29ybGQgb2YgdGhlIFVTQiBjb250cm9sbGVyIGFuZCB0aGUgYW5hbG9nIHNpZ25hbHMgemlwcGluZyBhY3Jvc3MgdGhlIFVTQiBjYWJsZS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoZXJlLCBnaXZlbiB0aGUgb2Z0ZW4gY29tcGxleCByZXF1aXJlbWVudHMgb2YgdGhlc2UgbG93LWxldmVsIGludGVyZmFjZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIHN0cnVjdHVyZSBkZWZpbml0aW9ucywgdGhlIFBIWSBpbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBhbmQgb2YgY291cnNlLCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIHRoYXQgcmVzcG9uZCB0byBVU0IgZXZlbnRzIGF0IHRoZSBwaHlzaWNhbCBsYXllci4gSSdsbCBsaWtlbHkgYmUgY2hlY2tpbmcgZm9yIGNsb2NrIGNvbmZpZ3VyYXRpb24sIHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBldmVuIHNwZWNpZmljIGhhcmR3YXJlIHF1aXJrcyBvciBlcnJhdGEgd29ya2Fyb3VuZHMgdGhhdCBhcmUgY29tbW9uIGluIHRoaXMga2luZCBvZiBkcml2ZXIuIExldCdzIHNlZSBob3cgd2VsbCBpdCdzIHN0cnVjdHVyZWQsIGhvdyBjbGVhcmx5IHRoZSBhYnN0cmFjdGlvbiBpcyBkZWZpbmVkLCBhbmQgd2hldGhlciBpdCBhbGlnbnMgd2l0aCB0aGUgZGV2aWNlJ3MgZG9jdW1lbnRhdGlvbi4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMgYW5kIGhvdyB0aGV5J3JlIG1hbmFnZWQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM0OjQ0LjM3NDEyNzM4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9waHkvcGh5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHQgKiBJZiB3ZSBnZXQgdGhlIGNoYXJnZXIgdHlwZSBmcm9tIC1cXHUwMDNlY2hhcmdlcl9kZXRlY3QoKSBpbnN0ZWFkIG9mIGV4dGNvblxcbiAxMDI6XFx0ICogc3Vic3lzdGVtLCB0aGUgdXNiIHBoeSBkcml2ZXIgc2hvdWxkIGlzc3VlIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoKVxcbiAxMDM6XFx0ICogdG8gc2V0IGNoYXJnZXIgc3RhdGUgd2hlbiB0aGUgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxcbiAxMDQ6XFx0ICovXFxuIDEwNTpcXHRzdGF0aWMgdm9pZCB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiAxMDY6XFx0e1xcbiAxMDc6XFx0XFx0c3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTtcXG4gMTA4OlxcdFxcdGNoYXIgdWNoZ2VyX3N0YXRlWzUwXSA9IHsgMCB9O1xcbiAxMDk6XFx0XFx0Y2hhciB1Y2hnZXJfdHlwZVs1MF0gPSB7IDAgfTtcXG4gMTEwOlxcdFxcdGNoYXIgKmVudnBbXSA9IHsgdWNoZ2VyX3N0YXRlLCB1Y2hnZXJfdHlwZSwgTlVMTCB9O1xcbiAxMTE6XFx0XFx0dW5zaWduZWQgaW50IG1pbiwgbWF4O1xcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHRzd2l0Y2ggKHVzYl9waHktXFx1MDAzZWNoZ19zdGF0ZSkge1xcbiAxMTQ6XFx0XFx0Y2FzZSBVU0JfQ0hBUkdFUl9QUkVTRU5UOlxcbiAxMTU6XFx0XFx0XFx0dXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KHVzYl9waHksIFxcdTAwMjZtaW4sIFxcdTAwMjZtYXgpO1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRcXHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2dXNiX3BoeS1cXHUwMDNlbm90aWZpZXIsIG1heCwgdXNiX3BoeSk7XFxuIDExODpcXHRcXHRcXHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcXG4gMTE5OlxcdFxcdFxcdFxcdCBcXFwiVVNCX0NIQVJHRVJfU1RBVEU9JXNcXFwiLCBcXFwiVVNCX0NIQVJHRVJfUFJFU0VOVFxcXCIpO1xcbiAxMjA6XFx0XFx0XFx0YnJlYWs7XFxuIDEyMTpcXHRcXHRjYXNlIFVTQl9DSEFSR0VSX0FCU0VOVDpcXG4gMTIyOlxcdFxcdFxcdHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudCh1c2JfcGh5KTtcXG4gMTIzOlxcdFxcbiAxMjQ6XFx0XFx0XFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXFx1MDAyNnVzYl9waHktXFx1MDAzZW5vdGlmaWVyLCAwLCB1c2JfcGh5KTtcXG4gMTI1OlxcdFxcdFxcdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxcbiAxMjY6XFx0XFx0XFx0XFx0IFxcXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1xcXCIsIFxcXCJVU0JfQ0hBUkdFUl9BQlNFTlRcXFwiKTtcXG4gMTI3OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjg6XFx0XFx0ZGVmYXVsdDpcXG4gMTI5OlxcdFxcdFxcdGRldl93YXJuKHVzYl9waHktXFx1MDAzZWRldiwgXFxcIlVua25vd24gVVNCIGNoYXJnZXIgc3RhdGU6ICVkXFxcXG5cXFwiLFxcbiAxMzA6XFx0XFx0XFx0XFx0IHVzYl9waHktXFx1MDAzZWNoZ19zdGF0ZSk7XFxuIDEzMTpcXHRcXHRcXHRyZXR1cm47XFxuIDEzMjpcXHRcXHR9XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdHNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSxcXG4gMTM1OlxcdFxcdFxcdCBcXFwiVVNCX0NIQVJHRVJfVFlQRT0lc1xcXCIsIHVzYl9jaGdlcl90eXBlW3VzYl9waHktXFx1MDAzZWNoZ190eXBlXSk7XFxuIDEzNjpcXHRcXHRrb2JqZWN0X3VldmVudF9lbnYoXFx1MDAyNnVzYl9waHktXFx1MDAzZWRldi1cXHUwMDNla29iaiwgS09CSl9DSEFOR0UsIGVudnApO1xcbiAxMzc6XFx0fVxcbiAxMzg6XFx0XFxuIDEzOTpcXHRzdGF0aWMgdm9pZCBfX3VzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZShzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdGlmIChleHRjb25fZ2V0X3N0YXRlKHVzYl9waHktXFx1MDAzZWVkZXYsIEVYVENPTl9DSEdfVVNCX1NEUCkgXFx1MDAzZSAwKSB7XFxuIDE0MjpcXHRcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfdHlwZSA9IFNEUF9UWVBFO1xcbiAxNDM6XFx0XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX3N0YXRlID0gVVNCX0NIQVJHRVJfUFJFU0VOVDtcXG4gMTQ0OlxcdFxcdH0gZWxzZSBpZiAoZXh0Y29uX2dldF9zdGF0ZSh1c2JfcGh5LVxcdTAwM2VlZGV2LCBFWFRDT05fQ0hHX1VTQl9DRFApIFxcdTAwM2UgMCkge1xcbiAxNDU6XFx0XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX3R5cGUgPSBDRFBfVFlQRTtcXG4gMTQ2OlxcdFxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19zdGF0ZSA9IFVTQl9DSEFSR0VSX1BSRVNFTlQ7XFxuIDE0NzpcXHRcXHR9IGVsc2UgaWYgKGV4dGNvbl9nZXRfc3RhdGUodXNiX3BoeS1cXHUwMDNlZWRldiwgRVhUQ09OX0NIR19VU0JfRENQKSBcXHUwMDNlIDApIHtcXG4gMTQ4OlxcdFxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ190eXBlID0gRENQX1RZUEU7XFxuIDE0OTpcXHRcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfc3RhdGUgPSBVU0JfQ0hBUkdFUl9QUkVTRU5UO1xcbiAxNTA6XFx0XFx0fSBlbHNlIGlmIChleHRjb25fZ2V0X3N0YXRlKHVzYl9waHktXFx1MDAzZWVkZXYsIEVYVENPTl9DSEdfVVNCX0FDQSkgXFx1MDAzZSAwKSB7XFxuIDE1MTpcXHRcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfdHlwZSA9IEFDQV9UWVBFO1xcbiAxNTI6XFx0XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX3N0YXRlID0gVVNCX0NIQVJHRVJfUFJFU0VOVDtcXG4gMTUzOlxcdFxcdH0gZWxzZSB7XFxuIDE1NDpcXHRcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfdHlwZSA9IFVOS05PV05fVFlQRTtcXG4gMTU1OlxcdFxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19zdGF0ZSA9IFVTQl9DSEFSR0VSX0FCU0VOVDtcXG4gMTU2OlxcdFxcdH1cXG4gMTU3OlxcdFxcbiAxNTg6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dXNiX3BoeS1cXHUwMDNlY2hnX3dvcmspO1xcbiAxNTk6XFx0fVxcbiAxNjA6XFx0XFxuIDE2MTpcXHQvKipcXG4gMTYyOlxcdCAqIHVzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZSAtIGdldCBjaGFyZ2VyIHR5cGUgZnJvbSBleHRjb24gc3Vic3lzdGVtXFxuIDE2MzpcXHQgKiBAbmI6IHRoZSBub3RpZmllciBibG9jayB0byBkZXRlcm1pbmUgY2hhcmdlciB0eXBlXFxuIDE2NDpcXHQgKiBAc3RhdGU6IHRoZSBjYWJsZSBzdGF0ZVxcbiAxNjU6XFx0ICogQGRhdGE6IHByaXZhdGUgZGF0YVxcbiAxNjY6XFx0ICpcXG4gMTY3OlxcdCAqIERldGVybWluIHRoZSBjaGFyZ2VyIHR5cGUgZnJvbSBleHRjb24gc3Vic3lzdGVtIHdoaWNoIGFsc28gbWVhbnMgdGhlXFxuIDE2ODpcXHQgKiBjaGFyZ2VyIHN0YXRlIGhhcyBiZWVuIGNoYW5lZCwgdGhlbiB3ZSBzaG91bGQgbm90aWZ5IHRoaXMgZXZlbnQuXFxuIDE2OTpcXHQgKi9cXG4gMTcwOlxcdHN0YXRpYyBpbnQgdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuIDE3MTpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBzdGF0ZSwgdm9pZCAqZGF0YSlcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5ID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgdXNiX3BoeSwgdHlwZV9uYik7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHVzYl9waHkpO1xcbiAxNzY6XFx0XFx0cmV0dXJuIE5PVElGWV9PSztcXG4gMTc3OlxcdH1cXG4gMTc4OlxcdFxcbiAxNzk6XFx0LyoqXFxuIDE4MDpcXHQgKiB1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQgLSBzZXQgdGhlIFVTQiBjaGFyZ2VyIGN1cnJlbnRcXG4gMTgxOlxcdCAqIEB1c2JfcGh5OiB0aGUgVVNCIHBoeSB0byBiZSB1c2VkXFxuIDE4MjpcXHQgKiBAbUE6IHRoZSBjdXJyZW50IG5lZWQgdG8gYmUgc2V0XFxuIDE4MzpcXHQgKlxcbiAxODQ6XFx0ICogVXN1YWxseSB3ZSBvbmx5IGNoYW5nZSB0aGUgY2hhcmdlciBkZWZhdWx0IGN1cnJlbnQgd2hlbiBVU0IgZmluaXNoZWQgdGhlXFxuIDE4NTpcXHQgKiBlbnVtZXJhdGlvbiBhcyBvbmUgU0RQIGNoYXJnZXIuIEFzIG9uZSBTRFAgY2hhcmdlciwgdXNiX3BoeV9zZXRfcG93ZXIoKVxcbiAxODY6XFx0ICogd2lsbCBpc3N1ZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSBjaGFyZ2VyIGN1cnJlbnQgd2hlbiBhZnRlciBzZXR0aW5nIFVTQlxcbiAxODc6XFx0ICogY29uZmlndXJhdGlvbiwgb3Igc3VzcGVuZC9yZXN1bWUgVVNCLiBGb3Igb3RoZXIgdHlwZSBjaGFyZ2VyLCB3ZSBzaG91bGRcXG4gMTg4OlxcdCAqIHVzZSB0aGUgZGVmYXVsdCBjaGFyZ2VyIGN1cnJlbnQgYW5kIHdlIGRvIG5vdCBzdWdnZXN0IHRvIGlzc3VlIHRoaXMgZnVuY3Rpb25cXG4gMTg5OlxcdCAqIHRvIGNoYW5nZSB0aGUgY2hhcmdlciBjdXJyZW50LlxcbiAxOTA6XFx0ICpcXG4gMTkxOlxcdCAqIFdoZW4gVVNCIGNoYXJnZXIgY3VycmVudCBoYXMgYmVlbiBjaGFuZ2VkLCB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgcG93ZXIgdXNlcnMuXFxuIDE5MjpcXHQgKi9cXG4gMTkzOlxcdHZvaWQgdXNiX3BoeV9zZXRfY2hhcmdlcl9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5LCB1bnNpZ25lZCBpbnQgbUEpXFxuIDE5NDpcXHR7XFxuIDE5NTpcXHRcXHRzd2l0Y2ggKHVzYl9waHktXFx1MDAzZWNoZ190eXBlKSB7XFxuIDE5NjpcXHRcXHRjYXNlIFNEUF9UWVBFOlxcbiAxOTc6XFx0XFx0XFx0aWYgKHVzYl9waHktXFx1MDAzZWNoZ19jdXIuc2RwX21heCA9PSBtQSlcXG4gMTk4OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMTk5OlxcdFxcbiAyMDA6XFx0XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5zZHBfbWF4ID0gKG1BIFxcdTAwM2UgREVGQVVMVF9TRFBfQ1VSX01BWF9TUykgP1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNDo0NC4zNzQyMzQ3MDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTkxODY4NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIFBIWSBDaGFyZ2VyIFN0YXRlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBiYWNrIGludG8gdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMuIFByZXZpb3VzbHksIGhlcmUncyBob3cgdGhpbmdzIHdvcmtlZDogaW4gYHVzYl9hZGRfcGh5X2RldmAsIHdlIGFzc2lnbmVkIGB4LVx1MDAzZWRldi1cdTAwM2V0eXBlID0gXHUwMDI2dXNiX3BoeV9kZXZfdHlwZWAuIFRoaXMgbWVhbnQgdGhhdCB0aGUgYHVldmVudGAgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZGV2aWNlIHR5cGUsIGB1c2JfcGh5X3VldmVudGAsIHdvdWxkIGJlIGNhbGxlZC4gVGhlbiwgd2l0aGluIGB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtgLCB3ZSB0cmlnZ2VyZWQgYSBga29iamVjdF91ZXZlbnRgIHRvIHNpZ25hbCBhIGNoYW5nZS4gVGhpcyB1bHRpbWF0ZWx5IGxlZCB0byBgdXNiX3BoeV91ZXZlbnRgIGJlaW5nIGludm9rZWQsIHdoZXJlIHdlJ2QgZXh0cmFjdCBhbmQgYWRkIGBVU0JfQ0hBUkdFUl9TVEFURWAgYW5kIGBVU0JfQ0hBUkdFUl9UWVBFYCB0byB0aGUgZW52aXJvbm1lbnQuXG5cbk5vdywgdGhpcyBwYXRjaCBpcyBzaWduaWZpY2FudGx5IHJlZmFjdG9yaW5nIHRoYXQgYXBwcm9hY2guIFRoZXkndmUgZWxpbWluYXRlZCBgdXNiX2NoZ2VyX3N0YXRlYCwgYF9fZGV2aWNlX3RvX3VzYl9waHlgLCBgdXNiX3BoeV91ZXZlbnRgLCBhbmQgYHVzYl9waHlfZGV2X3R5cGVgLiBJbnN0ZWFkLCBpbiBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYCwgdGhleSBhcmUgY29uc3RydWN0aW5nIHRoZSBgdWNoZ2VyX3N0YXRlYCBhbmQgYHVjaGdlcl90eXBlYCBkaXJlY3RseSBhbmQgdXNpbmcgYGtvYmplY3RfdWV2ZW50X2VudmAuIFBsdXMsIGNydWNpYWxseSwgdGhleSByZW1vdmVkIHRoZSBhc3NpZ25tZW50IG9mIGB4LVx1MDAzZWRldi1cdTAwM2V0eXBlID0gXHUwMDI2dXNiX3BoeV9kZXZfdHlwZWAgd2l0aGluIGB1c2JfYWRkX3BoeV9kZXZgLlxuXG5UaGUgc3RhdGVkIHJlYXNvbiBpcyBtYWtpbmcgc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIGRldmljZSB0eXBlLCBvciB3aGVuIHVldmVudCBpcyBnZW5lcmF0ZWQgZGlyZWN0bHkgZnJvbSB3b3JrcXVldWUsIGl0IHBhc3NlcyBgZW52cGAgdG8gYGtvYmplY3RfdWV2ZW50X2VudmAuIFRoaXMgbWFrZXMgc2Vuc2UsIGJlY2F1c2Ugb3ZlcndyaXRpbmcgdGhlIGRldmljZSB0eXBlIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgYW5vdGhlciBkcml2ZXIgYWxyZWFkeSBzZXQgaXQsIGFuZCB0aGlzIGFsbG93cyB1cyB0byBwYXNzIHRoZSBlbnZpcm9ubWVudCBkaXJlY3RseSB0byB0aGUgYGtvYmplY3RfdWV2ZW50YC5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2FmZSBhbmQgdGhlIGltcGFjdC4gU3BlY2lmaWNhbGx5LCBpcyB0aGUgY29kZSBpbiBgZHJpdmVycy91c2IvcGh5L3BoeS5jYCBzdGlsbCByZWFjaGVkPyBJIHNob3VsZCBjaGVjayBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2AsIGB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlYCwgYHVzYl9hZGRfcGh5X2RldmAsIGFuZCBgdXNiX2FkZF9waHlgLiBJIGFsc28gbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIG1vZHVsZXMgdGhhdCBkZXBlbmQgb24gYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODczLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6NDguOTY2MTA4MTM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI5MTgzNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYl9hZGRfcGh5X2Rldnx1c2JfYWRkX3BoeXx1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGh5L21vdG9yb2xhL3BoeS1jcGNhcC11c2IuYz02MDg9c3RhdGljIGludCBjcGNhcF91c2JfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHktY3BjYXAtdXNiLmMtNjc1LVxcbmRyaXZlcnMvcGh5L21vdG9yb2xhL3BoeS1jcGNhcC11c2IuYzo2NzY6XFx0dXNiX2FkZF9waHlfZGV2KFxcdTAwMjZkZGF0YS1cXHUwMDNlcGh5KTtcXG5kcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHktY3BjYXAtdXNiLmMtNjc3LVxcdGF0b21pY19zZXQoXFx1MDAyNmRkYXRhLVxcdTAwM2VhY3RpdmUsIDEpO1xcbi0tXFxuZHJpdmVycy9waHkvcGh5LWxnbS11c2IuYz0xODc9c3RhdGljIGludCBwaHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGh5L3BoeS1sZ20tdXNiLmMtMjUxLVxcbmRyaXZlcnMvcGh5L3BoeS1sZ20tdXNiLmM6MjUyOlxcdHJldHVybiB1c2JfYWRkX3BoeV9kZXYocGh5KTtcXG5kcml2ZXJzL3BoeS9waHktbGdtLXVzYi5jLTI1My19XFxuLS1cXG5kcml2ZXJzL3BoeS90ZWdyYS94dXNiLmM9NjYwPXN0YXRpYyBpbnQgdGVncmFfeHVzYl9zZXR1cF91c2Jfcm9sZV9zd2l0Y2goc3RydWN0IHRlZ3JhX3h1c2JfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYy03MTQtXFxuZHJpdmVycy9waHkvdGVncmEveHVzYi5jOjcxNTpcXHRlcnIgPSB1c2JfYWRkX3BoeV9kZXYoXFx1MDAyNnBvcnQtXFx1MDAzZXVzYl9waHkpO1xcbmRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYy03MTYtXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvcGh5L3RpL3BoeS1kbTgxNngtdXNiLmM9MTcxPXN0YXRpYyBpbnQgZG04MTZ4X3VzYl9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGh5L3RpL3BoeS1kbTgxNngtdXNiLmMtMjQwLVxcbmRyaXZlcnMvcGh5L3RpL3BoeS1kbTgxNngtdXNiLmM6MjQxOlxcdHVzYl9hZGRfcGh5X2RldihcXHUwMDI2cGh5LVxcdTAwM2VwaHkpO1xcbmRyaXZlcnMvcGh5L3RpL3BoeS1kbTgxNngtdXNiLmMtMjQyLVxcbi0tXFxuZHJpdmVycy9waHkvdGkvcGh5LW9tYXAtdXNiMi5jPTM3Mz1zdGF0aWMgaW50IG9tYXBfdXNiMl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9waHkvdGkvcGh5LW9tYXAtdXNiMi5jLTUxMS1cXG5kcml2ZXJzL3BoeS90aS9waHktb21hcC11c2IyLmM6NTEyOlxcdHVzYl9hZGRfcGh5X2RldihcXHUwMDI2cGh5LVxcdTAwM2VwaHkpO1xcbmRyaXZlcnMvcGh5L3RpL3BoeS1vbWFwLXVzYjIuYy01MTMtXFxuLS1cXG5kcml2ZXJzL3BoeS90aS9waHktdHdsNDAzMC11c2IuYz02ODM9c3RhdGljIGludCB0d2w0MDMwX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9waHkvdGkvcGh5LXR3bDQwMzAtdXNiLmMtNzQ4LVxcdH1cXG5kcml2ZXJzL3BoeS90aS9waHktdHdsNDAzMC11c2IuYzo3NDk6XFx0dXNiX2FkZF9waHlfZGV2KFxcdTAwMjZ0d2wtXFx1MDAzZXBoeSk7XFxuZHJpdmVycy9waHkvdGkvcGh5LXR3bDQwMzAtdXNiLmMtNzUwLVxcbi0tXFxuZHJpdmVycy91c2IvY2hpcGlkZWEvdWRjLmM9MTg5Nz1zdGF0aWMgaW50IGNpX3VkY192YnVzX3Nlc3Npb24oc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19hY3RpdmUpXFxuLS1cXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS91ZGMuYy0xOTA3LVxcdGlmIChjaS1cXHUwMDNldXNiX3BoeSlcXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS91ZGMuYzoxOTA4OlxcdFxcdHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoY2ktXFx1MDAzZXVzYl9waHksIGlzX2FjdGl2ZSA/XFxuZHJpdmVycy91c2IvY2hpcGlkZWEvdWRjLmMtMTkwOS1cXHRcXHRcXHRVU0JfQ0hBUkdFUl9QUkVTRU5UIDogVVNCX0NIQVJHRVJfQUJTRU5UKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jPTg2OD1zdGF0aWMgaW50IGFiODUwMF91c2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYWI4NTAwLXVzYi5jLTkzOC1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYzo5Mzk6XFx0ZXJyID0gdXNiX2FkZF9waHkoXFx1MDAyNmFiLVxcdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWFiODUwMC11c2IuYy05NDAtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYz0zOD1zdGF0aWMgaW50IGFtMzM1eF9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMtODEtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYzo4MjpcXHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFxcdTAwMjZhbV9waHktXFx1MDAzZXVzYl9waHlfZ2VuLnBoeSk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYy04My19XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWZzbC11c2IuYz03NzM9c3RhdGljIGludCBmc2xfb3RnX2NvbmYoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZnNsLXVzYi5jLTgxNy1cXHQvKiBTdG9yZSB0aGUgb3RnIHRyYW5zY2VpdmVyICovXFxuZHJpdmVycy91c2IvcGh5L3BoeS1mc2wtdXNiLmM6ODE4OlxcdHN0YXR1cyA9IHVzYl9hZGRfcGh5KFxcdTAwMjZmc2xfb3RnX3RjLVxcdTAwM2VwaHksIFVTQl9QSFlfVFlQRV9VU0IyKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWZzbC11c2IuYy04MTktXFx0aWYgKHN0YXR1cykge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM9MjY0PXN0YXRpYyBpbnQgdXNiX3BoeV9nZW5lcmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yOTQtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6Mjk1OlxcdGVyciA9IHVzYl9hZGRfcGh5X2RldihcXHUwMDI2bm9wLVxcdTAwM2VwaHkpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTI5Ni1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1ncGlvLXZidXMtdXNiLmM9MjMxPXN0YXRpYyBpbnQgZ3Bpb192YnVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdwaW8tdmJ1cy11c2IuYy0zMTUtXFx0Lyogb25seSBhY3RpdmUgd2hlbiBhIGdhZGdldCBpcyByZWdpc3RlcmVkICovXFxuZHJpdmVycy91c2IvcGh5L3BoeS1ncGlvLXZidXMtdXNiLmM6MzE2OlxcdGVyciA9IHVzYl9hZGRfcGh5KFxcdTAwMjZncGlvX3ZidXMtXFx1MDAzZXBoeSwgVVNCX1BIWV9UWVBFX1VTQjIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ3Bpby12YnVzLXVzYi5jLTMxNy1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYz05NT1zdGF0aWMgaW50IGlzcDEzMDFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jLTExNC1cXHRpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpc3ApO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktaXNwMTMwMS5jOjExNTpcXHR1c2JfYWRkX3BoeV9kZXYocGh5KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWlzcDEzMDEuYy0xMTYtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM9NjU9c3RhdGljIGludCBrZXlzdG9uZV91c2JwaHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy04Ny1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWtleXN0b25lLmM6ODg6XFx0cmV0dXJuIHVzYl9hZGRfcGh5X2RldihcXHUwMDI2a19waHktXFx1MDAzZXVzYl9waHlfZ2VuLnBoeSk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTg5LX1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jPTc1OD1zdGF0aWMgaW50IG14c19waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jLTg2Ny1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYzo4Njg6XFx0cmV0dXJuIHVzYl9hZGRfcGh5X2RldihcXHUwMDI2bXhzX3BoeS1cXHUwMDNlcGh5KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LW14cy11c2IuYy04NjktfVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jPTMxOT1zdGF0aWMgaW50IHRhaHZvX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jLTM4My1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRhaHZvLmM6Mzg0OlxcdHJldCA9IHVzYl9hZGRfcGh5KFxcdTAwMjZ0dS1cXHUwMDNlcGh5LCBVU0JfUEhZX1RZUEVfVVNCMik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jLTM4NS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYz0xNDkwPXN0YXRpYyBpbnQgdGVncmFfdXNiX3BoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS10ZWdyYS11c2IuYy0xNjMzLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktdGVncmEtdXNiLmM6MTYzNDpcXHRyZXR1cm4gdXNiX2FkZF9waHlfZGV2KFxcdTAwMjZ0ZWdyYV9waHktXFx1MDAzZXVfcGh5KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LXRlZ3JhLXVzYi5jLTE2MzUtfVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTc3PXN0YXRpYyB2b2lkIHVzYl9waHlfc2V0X2RlZmF1bHRfY3VycmVudChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xMDEtICogSWYgd2UgZ2V0IHRoZSBjaGFyZ2VyIHR5cGUgZnJvbSAtXFx1MDAzZWNoYXJnZXJfZGV0ZWN0KCkgaW5zdGVhZCBvZiBleHRjb25cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MTAyOiAqIHN1YnN5c3RlbSwgdGhlIHVzYiBwaHkgZHJpdmVyIHNob3VsZCBpc3N1ZSB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMTAzLSAqIHRvIHNldCBjaGFyZ2VyIHN0YXRlIHdoZW4gdGhlIGNoYXJnZXIgc3RhdGUgaGFzIGJlZW4gY2hhbmdlZC5cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0yNjg9RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yNzAtLyoqXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjI3MTogKiB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlIC0gc2V0IHRoZSBVU0IgY2hhcmdlciBzdGF0ZVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yNzItICogQHVzYl9waHk6IHRoZSBVU0IgcGh5IHRvIGJlIHVzZWRcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yNzgtICovXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjI3OTp2b2lkIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoc3RydWN0IHVzYl9waHkgKnVzYl9waHksXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI4MC1cXHRcXHRcXHQgICAgICAgZW51bSB1c2JfY2hhcmdlcl9zdGF0ZSBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yOTItfVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyOTM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI5NC1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYz01ODk9RVhQT1JUX1NZTUJPTF9HUEwodXNiX3B1dF9waHkpO1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTU5MS0vKipcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NTkyOiAqIHVzYl9hZGRfcGh5OiBkZWNsYXJlIHRoZSBVU0IgUEhZXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTU5My0gKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTU5OS0gKi9cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NjAwOmludCB1c2JfYWRkX3BoeShzdHJ1Y3QgdXNiX3BoeSAqeCwgZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjAxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MzctfVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2Mzg6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2FkZF9waHkpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02MzktXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY0MC0vKipcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6NjQxOiAqIHVzYl9hZGRfcGh5X2RldiAtIGRlY2xhcmUgdGhlIFVTQiBQSFlcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjQyLSAqIEB4OiB0aGUgVVNCIHBoeSB0byBiZSB1c2VkOyBvciBOVUxMXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjQ3LSAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2NDg6aW50IHVzYl9hZGRfcGh5X2RldihzdHJ1Y3QgdXNiX3BoeSAqeClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjQ5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy02NzItfVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2NzM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2FkZF9waHlfZGV2KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtNjc0LVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY3OC0gKlxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzo2Nzk6ICogVGhpcyByZXZlcnRzIHRoZSBlZmZlY3RzIG9mIHVzYl9hZGRfcGh5XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTY4MC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6NTAuMDk1Mjk3NTE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjY3MjM5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVTQiBQSFkgU2VsZWN0aW9uIGFuZCBJbnN0YW50aWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBgVVNCX1BIWWAgaXMgYSBrZXkgY29tcG9uZW50IGhlcmUsIGFuZCBtdWx0aXBsZSBkcml2ZXJzLCBpbmNsdWRpbmcgYE5PUF9VU0JfWENFSVZgLCBhcmUgaW52b2x2ZWQgaW4gaXRzIHNlbGVjdGlvbi4gVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzLCBjYW4gd2UgYWN0dWFsbHkgcHJvYmUgb3IgaW5zdGFudGlhdGUgdGhpcyBgTk9QX1VTQl9YQ0VJVmA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgYSBjb25jcmV0ZSBlbnRpdHkgb3IgbW9yZSBvZiBhbiBhYnN0cmFjdCByZXByZXNlbnRhdGlvbiBvZiBhIGdlbmVyaWMgVVNCIFBIWS4gVGltZSB0byBkaWcgaW50byBgcGh5LWdlbmVyaWMuY2AuIFRoYXQgc2hvdWxkIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGdlbmVyaWMgUEhZIGlzIGhhbmRsZWQgYXQgdGhlIGRyaXZlciBsZXZlbCwgYW5kIHdoZXRoZXIgd2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggaXQuIEknbSBob3BpbmcgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgZ2VuZXJpYyBVU0IgdHJhbnNjZWl2ZXIgbG9naWMgd2l0aGluIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNDo1Mi4yNjIwMjU3NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODM5NzQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfcGh5X2dlbmVyaWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvcGh5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMtNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL290Zy5oXFx1MDAzZVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmM6NjojaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXFx1MDAzZVxcbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMtNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYz0xNj1zdHJ1Y3QgYW0zMzV4X3BoeSB7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1hbTMzNXguYzoxNzpcXHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljIHVzYl9waHlfZ2VuO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktYW0zMzV4LmMtMTgtXFx0c3RydWN0IHBoeV9jb250cm9sICpwaHlfY3RybDtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2Ivb3RnLmhcXHUwMDNlXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MTk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi91c2JfcGh5X2dlbmVyaWMuaFxcdTAwM2VcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzItXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzM6c3RydWN0IHBsYXRmb3JtX2RldmljZSAqdXNiX3BoeV9nZW5lcmljX3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzQte1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjM1OlxcdHJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFxcXCJ1c2JfcGh5X2dlbmVyaWNcXFwiLFxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM2LVxcdFxcdFxcdFBMQVRGT1JNX0RFVklEX0FVVE8sIE5VTEwsIDApO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM3LX1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozODpFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dlbmVyaWNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM5LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjQwOnZvaWQgdXNiX3BoeV9nZW5lcmljX3VucmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy00MS17XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy00My19XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6NDQ6RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9nZW5lcmljX3VucmVnaXN0ZXIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTQ1LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTQ2PXN0YXRpYyBpbnQgbm9wX3NldF9zdXNwZW5kKHN0cnVjdCB1c2JfcGh5ICp4LCBpbnQgc3VzcGVuZClcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy00Ny17XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6NDg6XFx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGV2X2dldF9kcnZkYXRhKHgtXFx1MDAzZWRldik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtNDktXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy02My1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzo2NDpzdGF0aWMgdm9pZCBub3BfcmVzZXQoc3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wKVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTY1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTc2PXN0YXRpYyBpbnQgbm9wX3NldF92YnVzKHN0cnVjdCB1c2Jfb3RnICpvdGcsIGJvb2wgZW5hYmxlKVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtNzgtXFx0aW50IHJldCA9IDA7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6Nzk6XFx0c3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wID0gZGV2X2dldF9kcnZkYXRhKG90Zy1cXHUwMDNldXNiX3BoeS1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy04MC1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTk5PXN0YXRpYyBpcnFyZXR1cm5fdCBub3BfZ3Bpb192YnVzX3RocmVhZChpbnQgaXJxLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTEwMC17XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MTAxOlxcdHN0cnVjdCB1c2JfcGh5X2dlbmVyaWMgKm5vcCA9IGRhdGE7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMTAyLVxcdHN0cnVjdCB1c2Jfb3RnICpvdGcgPSBub3AtXFx1MDAzZXBoeS5vdGc7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0xMjg9aW50IHVzYl9nZW5fcGh5X2luaXQoc3RydWN0IHVzYl9waHkgKnBoeSlcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xMjkte1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjEzMDpcXHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AgPSBkZXZfZ2V0X2RydmRhdGEocGh5LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTEzMS1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM9MTQ4PXZvaWQgdXNiX2dlbl9waHlfc2h1dGRvd24oc3RydWN0IHVzYl9waHkgKnBoeSlcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0xNDkte1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjE1MDpcXHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AgPSBkZXZfZ2V0X2RydmRhdGEocGh5LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE1MS1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTE4Mj1zdGF0aWMgaW50IG5vcF9zZXRfaG9zdChzdHJ1Y3QgdXNiX290ZyAqb3RnLCBzdHJ1Y3QgdXNiX2J1cyAqaG9zdClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTE5NS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoxOTY6aW50IHVzYl9waHlfZ2VuX2NyZWF0ZV9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3ApXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMTk3LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jPTI2Mj1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X2dlbl9jcmVhdGVfcGh5KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yNjMtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MjY0OnN0YXRpYyBpbnQgdXNiX3BoeV9nZW5lcmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMjY1LXtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0yNjYtXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzoyNjc6XFx0c3RydWN0IHVzYl9waHlfZ2VuZXJpY1xcdCpub3A7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMjY4LVxcdGludCBlcnI7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMDYtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzA3OnN0YXRpYyB2b2lkIHVzYl9waHlfZ2VuZXJpY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMDgte1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMwOTpcXHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljICpub3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMTAtXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYz0zMjI9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbm9wX3hjZWl2X2R0X2lkcyk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzIzLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyNDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1c2JfcGh5X2dlbmVyaWNfZHJpdmVyID0ge1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyNTpcXHQucHJvYmVcXHRcXHQ9IHVzYl9waHlfZ2VuZXJpY19wcm9iZSxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMjY6XFx0LnJlbW92ZVxcdFxcdD0gdXNiX3BoeV9nZW5lcmljX3JlbW92ZSxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMjctXFx0LmRyaXZlclxcdFxcdD0ge1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjMyODpcXHRcXHQubmFtZVxcdD0gXFxcInVzYl9waHlfZ2VuZXJpY1xcXCIsXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzI5LVxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IG5vcF94Y2Vpdl9kdF9pZHMsXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMzItXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzMzOnN0YXRpYyBpbnQgX19pbml0IHVzYl9waHlfZ2VuZXJpY19pbml0KHZvaWQpXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzM0LXtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMzU6XFx0cmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2dXNiX3BoeV9nZW5lcmljX2RyaXZlcik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzM2LX1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYzozMzc6c3Vic3lzX2luaXRjYWxsKHVzYl9waHlfZ2VuZXJpY19pbml0KTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zMzgtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzM5OnN0YXRpYyB2b2lkIF9fZXhpdCB1c2JfcGh5X2dlbmVyaWNfZXhpdCh2b2lkKVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM0MC17XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmM6MzQxOlxcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZ1c2JfcGh5X2dlbmVyaWNfZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuYy0zNDItfVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjM0Mzptb2R1bGVfZXhpdCh1c2JfcGh5X2dlbmVyaWNfZXhpdCk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmMtMzQ0LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jOjM0NTpNT0RVTEVfQUxJQVMoXFxcInBsYXRmb3JtOnVzYl9waHlfZ2VuZXJpY1xcXCIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5jLTM0Ni1NT0RVTEVfQVVUSE9SKFxcXCJUZXhhcyBJbnN0cnVtZW50cyBJbmNcXFwiKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTQtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmg6NTojaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oXFx1MDAzZVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTgtXFxuZHJpdmVycy91c2IvcGh5L3BoeS1nZW5lcmljLmg6OTpzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljIHtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaC0xMC1cXHRzdHJ1Y3QgdXNiX3BoeSBwaHk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaD0yMz12b2lkIHVzYl9nZW5fcGh5X3NodXRkb3duKHN0cnVjdCB1c2JfcGh5ICpwaHkpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oLTI0LVxcbmRyaXZlcnMvdXNiL3BoeS9waHktZ2VuZXJpYy5oOjI1OmludCB1c2JfcGh5X2dlbl9jcmVhdGVfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHVzYl9waHlfZ2VuZXJpYyAqbm9wKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LWdlbmVyaWMuaC0yNi1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2IvdXNiX3BoeV9nZW5lcmljLmhcXHUwMDNlXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jPTI4PXN0cnVjdCBrZXlzdG9uZV91c2JwaHkge1xcbmRyaXZlcnMvdXNiL3BoeS9waHkta2V5c3RvbmUuYzoyOTpcXHRzdHJ1Y3QgdXNiX3BoeV9nZW5lcmljXFx0dXNiX3BoeV9nZW47XFxuZHJpdmVycy91c2IvcGh5L3BoeS1rZXlzdG9uZS5jLTMwLVxcdHZvaWQgX19pb21lbVxcdFxcdFxcdCpwaHlfY3RybDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6NTIuNTYwNDI4MDI3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0Mjk0NTc4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgVVNCX1BIWWAgRGVwZW5kZW5jeSBhbmQgQ2hhcmdlciBTdGF0ZSoqXG5cblJpZ2h0LCBzbyBgVVNCX1BIWWAgaXMgcHJlZGljdGFibHkgZ29pbmcgdG8gYmUgaW4gYW55IGtlcm5lbCBidWlsZCB0aGF0IGluY2x1ZGVzIFVTQiBQSFkgZHJpdmVycy4gSSdkIGV4cGVjdCBpdCB0byBiZSBsaW5rZWQgaW4gd2hlbiBzb21ldGhpbmcgbGlrZSB0aGUgZ2VuZXJpYywgQ2hpcElkZWEsIG9yIGdhZGdldCBQSFkgZHJpdmVycyBhcmUgY29uZmlndXJlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYSB2ZXJ5IGNvbW1vbiBkZXBlbmRlbmN5IGluIGEgbG90IG9mIGJ1aWxkcywgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCBteSByZWFsIGludGVyZXN0IGxpZXMgaW4gaG93IHRoaXMgYWZmZWN0cyB0aGUgY2hhcmdlciBzdGF0ZSBub3RpZmljYXRpb24sIHNwZWNpZmljYWxseSBob3cgYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2AgZ2V0cyBpbnZva2VkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIGNoYWluLiBJJ2xsIG5lZWQgdG8gZmluZCB3aGVyZSBgdXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZWAgaXMgYmVpbmcgY2FsbGVkIGFuZCB0aGVuIHRyYWNlIGhvdyB0aGF0IGxlYWRzIHRvIHRoZSB3b3JrcXVldWUuIExldCdzIHNlZSwgYSBxdWljayBgZ3JlcGAgZm9yIHRob3NlIHRlcm1zLCBtYXliZSBhbHNvIGBjaGdfd29ya2Agb3IgYHR5cGVfbmJgIGp1c3QgaW4gY2FzZSwgc2hvdWxkIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgcHJldHR5IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODcxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzQ6NTQuOTg5ODg4ODg1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk5MzM2NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZ193b3JrfHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGV8dHlwZV9uYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTIxLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjI6c3RydWN0IGFmdGVyX3N0YXRlX2NoZ193b3JrIHtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTIzLVxcdHN0cnVjdCBkcmJkX3dvcmsgdztcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM9MTI2Mz1fZHJiZF9zZXRfc3RhdGUoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsIHVuaW9uIGRyYmRfc3RhdGUgbnMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTEyNzAtXFx0ZW51bSBzYW5pdGl6ZV9zdGF0ZV93YXJuaW5ncyBzc3c7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYzoxMjcxOlxcdHN0cnVjdCBhZnRlcl9zdGF0ZV9jaGdfd29yayAqYXNjdztcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTEyNzItXFx0c3RydWN0IGRyYmRfc3RhdGVfY2hhbmdlICpzdGF0ZV9jaGFuZ2U7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jPTE0ODk9c3RhdGljIGludCB3X2FmdGVyX3N0YXRlX2NoKHN0cnVjdCBkcmJkX3dvcmsgKncsIGludCB1bnVzZWQpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0xNDkwLXtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jOjE0OTE6XFx0c3RydWN0IGFmdGVyX3N0YXRlX2NoZ193b3JrICphc2N3ID1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jOjE0OTI6XFx0XFx0Y29udGFpbmVyX29mKHcsIHN0cnVjdCBhZnRlcl9zdGF0ZV9jaGdfd29yaywgdyk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0xNDkzLVxcdHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlID0gYXNjdy1cXHUwMDNlZGV2aWNlO1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYz0xNzA4PXN0YXRpYyB2b2lkIGFmdGVyX3N0YXRlX2NoKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCB1bmlvbiBkcmJkX3N0YXRlIG9zLFxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0yMDM2LVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM6MjAzNzpzdHJ1Y3QgYWZ0ZXJfY29ubl9zdGF0ZV9jaGdfd29yayB7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0yMDM4LVxcdHN0cnVjdCBkcmJkX3dvcmsgdztcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM9MjA0Nz1zdGF0aWMgaW50IHdfYWZ0ZXJfY29ubl9zdGF0ZV9jaChzdHJ1Y3QgZHJiZF93b3JrICp3LCBpbnQgdW51c2VkKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjA0OC17XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYzoyMDQ5OlxcdHN0cnVjdCBhZnRlcl9jb25uX3N0YXRlX2NoZ193b3JrICphY3NjdyA9XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYzoyMDUwOlxcdFxcdGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgYWZ0ZXJfY29ubl9zdGF0ZV9jaGdfd29yaywgdyk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfc3RhdGUuYy0yMDUxLVxcdHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSBhY3Njdy1cXHUwMDNlY29ubmVjdGlvbjtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmM9MjI5Mz1fY29ubl9yZXF1ZXN0X3N0YXRlKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHVuaW9uIGRyYmRfc3RhdGUgbWFzaywgdW5pb24gZHJiZF9zdGF0ZSB2YWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jLTIyOTYtXFx0ZW51bSBkcmJkX3N0YXRlX3J2IHJ2ID0gU1NfU1VDQ0VTUztcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9zdGF0ZS5jOjIyOTc6XFx0c3RydWN0IGFmdGVyX2Nvbm5fc3RhdGVfY2hnX3dvcmsgKmFjc2N3O1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3N0YXRlLmMtMjI5OC1cXHRlbnVtIGRyYmRfY29ubnMgb2MgPSBjb25uZWN0aW9uLVxcdTAwM2Vjc3RhdGU7XFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM9MTc4PXN0cnVjdCByb2NrY2hpcF91c2IycGh5X2NmZyB7XFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMjAwLSAqIEBtdXRleDogZm9yIHJlZ2lzdGVyIHVwZGF0aW5nIGluIHNtX3dvcmsuXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjIwMTogKiBAY2hnX3dvcms6IGNoYXJnZSBkZXRlY3Qgd29yay5cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMjAyLSAqIEBvdGdfc21fd29yazogT1RHIHN0YXRlIG1hY2hpbmUgd29yay5cXG4tLVxcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYz0yMDk9c3RydWN0IHJvY2tjaGlwX3VzYjJwaHlfcG9ydCB7XFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMjE5LVxcdHN0cnVjdCBtdXRleFxcdG11dGV4O1xcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYzoyMjA6XFx0c3RydWN0XFx0XFx0ZGVsYXllZF93b3JrIGNoZ193b3JrO1xcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYy0yMjEtXFx0c3RydWN0XFx0XFx0ZGVsYXllZF93b3JrIG90Z19zbV93b3JrO1xcbi0tXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTY1MD1zdGF0aWMgaW50IHJvY2tjaGlwX3VzYjJwaHlfZXhpdChzdHJ1Y3QgcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtNjU3LVxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cnBvcnQtXFx1MDAzZW90Z19zbV93b3JrKTtcXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM6NjU4OlxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cnBvcnQtXFx1MDAzZWNoZ193b3JrKTtcXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtNjU5LVxcdH0gZWxzZSBpZiAocnBvcnQtXFx1MDAzZXBvcnRfaWQgPT0gVVNCMlBIWV9QT1JUX0hPU1QpXFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM9NjczPXN0YXRpYyB2b2lkIHJvY2tjaGlwX3VzYjJwaHlfb3RnX3NtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTcwNy1cXHRcXHRcXHRjYXNlIFVTQl9DSEdfU1RBVEVfVU5ERUZJTkVEOlxcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYzo3MDg6XFx0XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZycG9ydC1cXHUwMDNlY2hnX3dvcmssIDApO1xcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYy03MDktXFx0XFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTgyNj1zdGF0aWMgdm9pZCByb2NrY2hpcF9jaGdfZGV0ZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTgyOC1cXHRzdHJ1Y3Qgcm9ja2NoaXBfdXNiMnBoeV9wb3J0ICpycG9ydCA9XFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjgyOTpcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJvY2tjaGlwX3VzYjJwaHlfcG9ydCwgY2hnX3dvcmsud29yayk7XFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jLTgzMC1cXHRzdHJ1Y3Qgcm9ja2NoaXBfdXNiMnBoeSAqcnBoeSA9IGRldl9nZXRfZHJ2ZGF0YShycG9ydC1cXHUwMDNlcGh5LVxcdTAwM2VkZXYucGFyZW50KTtcXG4tLVxcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYy05MTYtXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jOjkxNzpcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnJwb3J0LVxcdTAwM2VjaGdfd29yaywgZGVsYXkpO1xcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYy05MTgtfVxcbi0tXFxuZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLWlubm8tdXNiMi5jPTEyOTA9c3RhdGljIGludCByb2NrY2hpcF91c2IycGh5X290Z19wb3J0X2luaXQoc3RydWN0IHJvY2tjaGlwX3VzYjJwaHkgKnJwaHksXFxuLS1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmMtMTMxNy1cXG5kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtaW5uby11c2IyLmM6MTMxODpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cnBvcnQtXFx1MDAzZWNoZ193b3JrLCByb2NrY2hpcF9jaGdfZGV0ZWN0X3dvcmspO1xcbmRyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1pbm5vLXVzYjIuYy0xMzE5LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZycG9ydC1cXHUwMDNlb3RnX3NtX3dvcmssIHJvY2tjaGlwX3VzYjJwaHlfb3RnX3NtX3dvcmspO1xcbi0tXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvcGYxNTUwLWNoYXJnZXIuYz0xODA9c3RhdGljIHZvaWQgcGYxNTUwX2NoZ19iYXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jLTIxNi1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jOjIxNzpzdGF0aWMgdm9pZCBwZjE1NTBfY2hnX2NoZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jLTIxOC17XFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jPTU0OT1zdGF0aWMgaW50IHBmMTU1MF9jaGFyZ2VyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jLTU3NS1cXHRyZXQgPSBkZXZtX2RlbGF5ZWRfd29ya19hdXRvY2FuY2VsKGNoZy1cXHUwMDNlZGV2LCBcXHUwMDI2Y2hnLVxcdTAwM2VjaGdfc2Vuc2Vfd29yayxcXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jOjU3NjpcXHRcXHRcXHRcXHRcXHQgICBwZjE1NTBfY2hnX2NoZ193b3JrKTtcXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9wZjE1NTAtY2hhcmdlci5jLTU3Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy91c2IvY2hpcGlkZWEvY2lfaGRyY19pbXguYz0zMTM9c3RhdGljIGludCBjaV9oZHJjX2lteF9ub3RpZnlfZXZlbnQoc3RydWN0IGNpX2hkcmMgKmNpLCB1bnNpZ25lZCBpbnQgZXZlbnQpXFxuLS1cXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jLTM0Mi1cXHRcXHRpZiAoY2ktXFx1MDAzZXVzYl9waHkpXFxuZHJpdmVycy91c2IvY2hpcGlkZWEvY2lfaGRyY19pbXguYzozNDM6XFx0XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2Y2ktXFx1MDAzZXVzYl9waHktXFx1MDAzZWNoZ193b3JrKTtcXG5kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jLTM0NC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jPTE4OTc9c3RhdGljIGludCBjaV91ZGNfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKVxcbi0tXFxuZHJpdmVycy91c2IvY2hpcGlkZWEvdWRjLmMtMTkwNy1cXHRpZiAoY2ktXFx1MDAzZXVzYl9waHkpXFxuZHJpdmVycy91c2IvY2hpcGlkZWEvdWRjLmM6MTkwODpcXHRcXHR1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKGNpLVxcdTAwM2V1c2JfcGh5LCBpc19hY3RpdmUgP1xcbmRyaXZlcnMvdXNiL2NoaXBpZGVhL3VkYy5jLTE5MDktXFx0XFx0XFx0VVNCX0NIQVJHRVJfUFJFU0VOVCA6IFVTQl9DSEFSR0VSX0FCU0VOVCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9Nzc9c3RhdGljIHZvaWQgdXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTEwMS0gKiBJZiB3ZSBnZXQgdGhlIGNoYXJnZXIgdHlwZSBmcm9tIC1cXHUwMDNlY2hhcmdlcl9kZXRlY3QoKSBpbnN0ZWFkIG9mIGV4dGNvblxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoxMDI6ICogc3Vic3lzdGVtLCB0aGUgdXNiIHBoeSBkcml2ZXIgc2hvdWxkIGlzc3VlIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoKVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xMDMtICogdG8gc2V0IGNoYXJnZXIgc3RhdGUgd2hlbiB0aGUgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTEwNT1zdGF0aWMgdm9pZCB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xMDYte1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoxMDc6XFx0c3RydWN0IHVzYl9waHkgKnVzYl9waHkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9waHksIGNoZ193b3JrKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMTA4LVxcdGNoYXIgdWNoZ2VyX3N0YXRlWzUwXSA9IHsgMCB9O1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jPTEzOT1zdGF0aWMgdm9pZCBfX3VzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZShzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0xNTctXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjE1ODpcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ1c2JfcGh5LVxcdTAwM2VjaGdfd29yayk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTE1OS19XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9MTcwPXN0YXRpYyBpbnQgdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMTcyLXtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MTczOlxcdHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5ID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgdXNiX3BoeSwgdHlwZV9uYik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTE3NC1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0xOTM9dm9pZCB1c2JfcGh5X3NldF9jaGFyZ2VyX2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHksIHVuc2lnbmVkIGludCBtQSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yMjctXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjIyODpcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ1c2JfcGh5LVxcdTAwM2VjaGdfd29yayk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTIyOS19XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM9MjY4PUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfZ2V0X2NoYXJnZXJfY3VycmVudCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjcwLS8qKlxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyNzE6ICogdXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSAtIHNldCB0aGUgVVNCIGNoYXJnZXIgc3RhdGVcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjcyLSAqIEB1c2JfcGh5OiB0aGUgVVNCIHBoeSB0byBiZSB1c2VkXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjc4LSAqL1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyNzk6dm9pZCB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5LFxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yODAtXFx0XFx0XFx0ICAgICAgIGVudW0gdXNiX2NoYXJnZXJfc3RhdGUgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMjkwLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyOTE6XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dXNiX3BoeS1cXHUwMDNlY2hnX3dvcmspO1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0yOTItfVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzoyOTM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZSk7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTI5NC1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0zMTE9c3RhdGljIHZvaWQgdXNiX2NoYXJnZXJfaW5pdChzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSlcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zMTUtXFx0dXNiX3BoeV9zZXRfZGVmYXVsdF9jdXJyZW50KHVzYl9waHkpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzozMTY6XFx0SU5JVF9XT1JLKFxcdTAwMjZ1c2JfcGh5LVxcdTAwM2VjaGdfd29yaywgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzE3LX1cXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYz0zMTk9c3RhdGljIGludCB1c2JfYWRkX2V4dGNvbihzdHJ1Y3QgdXNiX3BoeSAqeClcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNDMtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MzQ0OlxcdFxcdFxcdHgtXFx1MDAzZXR5cGVfbmIubm90aWZpZXJfY2FsbCA9IHVzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzQ1LVxcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM0Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgRVhUQ09OX0NIR19VU0JfU0RQLFxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzozNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ4LVxcdTAwM2V0eXBlX25iKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzQ5LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNTYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIEVYVENPTl9DSEdfVVNCX0NEUCxcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmM6MzU3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2eC1cXHUwMDNldHlwZV9uYik7XFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM1OC1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzY1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBFWFRDT05fQ0hHX1VTQl9EQ1AsXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjM2NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNngtXFx1MDAzZXR5cGVfbmIpO1xcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy0zNjctXFx0XFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jLTM3NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgRVhUQ09OX0NIR19VU0JfQUNBLFxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYzozNzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ4LVxcdTAwM2V0eXBlX25iKTtcXG5kcml2ZXJzL3VzYi9waHkvcGh5LmMtMzc2LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy00MDEtXFxuZHJpdmVycy91c2IvcGh5L3BoeS5jOjQwMjpcXHRpZiAoeC1cXHUwMDNldHlwZV9uYi5ub3RpZmllcl9jYWxsKVxcbmRyaXZlcnMvdXNiL3BoeS9waHkuYy00MDMtXFx0XFx0X191c2JfcGh5X2dldF9jaGFyZ2VyX3R5cGUoeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM0OjU2LjY4OTIzMTI1NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzY4NDUzMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFVTQiBQSFkgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgVVNCX1BIWWAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgY2FuIGJlIGJ1aWx0LCBlc3BlY2lhbGx5IGlmIGl0J3MgZmVhc2libGUgb24geDg2L2FtZDY0IGFyY2hpdGVjdHVyZXMuIFRoZSBjb2RlIHN1Z2dlc3RzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgYE5PUF9VU0JfWENFSVZgIGFuZCBgVVNCX1BIWWAgdGhlbXNlbHZlcy5cblxuTG9va2luZyBhdCBgZHJpdmVycy91c2IvcGh5L0tjb25maWdgLCBJIGNhbiBzZWUgYSBkZXBlbmRlbmN5OiBgVVNCX1BIWWAgZGVmYXVsdHMgdG8gYHlgICh5ZXMpIGlmIGBFWFRDT05gIGlzIGVuYWJsZWQsIGFuZCBpbXBvcnRhbnRseSwgc2VsZWN0cyBgRVhUQ09OYC4gYE5PUF9VU0JfWENFSVZgIGlzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBkZXBlbmRzIG9uIGVpdGhlciBgVVNCX0dBREdFVGAgb3IgdGhlIG5lZ2F0aW9uIG9mIGBVU0JfR0FER0VUYCwgc28gaWYgdGhlIGxhdHRlciBpcyBtb2R1bGFyLCBgTk9QX1VTQl9YQ0VJVmAgY2FuJ3QgYmUgYnVpbHQtaW4uIEl0IGFsc28gKnNlbGVjdHMqIGBVU0JfUEhZYC4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgaGllcmFyY2h5IG9yIHJlbGF0aW9uc2hpcCB3aGVyZSBgTk9QX1VTQl9YQ0VJVmAgY2FuIHVzZSB0aGUgdW5kZXJseWluZyBgVVNCX1BIWWAuXG5cblRoZW4sIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSByZWluZm9yY2VzIHRoZSBidWlsZCBsb2dpYzogYG9iai0kKENPTkZJR19VU0JfUEhZKSArPSBwaHkub2AgbWVhbnMgaWYgYFVTQl9QSFlgIGlzIGVuYWJsZWQsIGBwaHkub2AgaXMgYnVpbHQuIFNpbWlsYXJseSwgYG9iai0kKENPTkZJR19OT1BfVVNCX1hDRUlWKSArPSBwaHktZ2VuZXJpYy5vYCBidWlsZHMgYHBoeS1nZW5lcmljLm9gIHdoZW4gYE5PUF9VU0JfWENFSVZgIGlzIHNlbGVjdGVkLlxuXG5TbywgdGhlIGtleSBjb25maWd1cmF0aW9uIGZsYWdzIEkgbmVlZCB0byBjb25zaWRlciBhcmUgYFVTQl9QSFlgIGFuZCBgTk9QX1VTQl9YQ0VJVmAuIEkgc2hvdWxkIG5vdyBleHBsb3JlIGRlcGVuZGVuY2llcyBsaWtlIGBVU0JfU1VQUE9SVGAgYW5kIGBVU0JfUEhZYCBpbiB0aGUgS2NvbmZpZyBmaWxlcyB0byBkZXRlcm1pbmUgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBQSFkgdG8gYmUgYnVpbHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjI3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM1OjAxLjA1NzY4NzU3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNDc2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBVU0JfU1VQUE9SVHxjb25maWcgVVNCX1BIWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9LY29uZmlnPTI2PWNvbmZpZyBVU0JfVUhDSV9CSUdfRU5ESUFOX0RFU0NcXG4tLVxcbmRyaXZlcnMvdXNiL0tjb25maWctMjgtXFxuZHJpdmVycy91c2IvS2NvbmZpZzoyOTptZW51Y29uZmlnIFVTQl9TVVBQT1JUXFxuZHJpdmVycy91c2IvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJVU0Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnPTU9bWVudSBcXFwiVVNCIFBoeXNpY2FsIExheWVyIGRyaXZlcnNcXFwiXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctNi1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzo3OmNvbmZpZyBVU0JfUEhZXFxuZHJpdmVycy91c2IvcGh5L0tjb25maWctOC1cXHRzZWxlY3QgRVhUQ09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM1OjAxLjExODg0MzI1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc4OTYxMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBVU0IgUEhZIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy91c2IvcGh5L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFVTQiBQSFkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGZpcnN0IDUwIGxpbmVzLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGNvdmVyIHRoZSBjb3JlIG9wdGlvbnMsIHBlcmhhcHMgaW5jbHVkaW5nIHRob3NlIHJlbGF0ZWQgdG8gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdmVuZG9yLXNwZWNpZmljIFBIWSBzdXBwb3J0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSB0aGUgc2VsZWN0aW9uIG9mIGRpZmZlcmVudCBQSFkgdHlwZXMgKE9URywgaG9zdCwgZGV2aWNlKSwgcG93ZXIgbWFuYWdlbWVudCBvcHRpb25zLCBhbmQgcG9zc2libHkgc29tZSBiYXNpYyBkZXZpY2UtdHJlZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGlmIHRoZXkgYXJlIGRlZmluZWQgdGhhdCBlYXJseSBpbiB0aGUgZmlsZS4gSSBhbHNvIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBjaGVja3MgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgZ29vZCBiYXNlbGluZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIFVTQiBQSFkgZmVhdHVyZXMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzU6MDMuMTk3ODA3Mjg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL3BoeS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQaHlzaWNhbCBMYXllciBVU0IgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdG1lbnUgXFxcIlVTQiBQaHlzaWNhbCBMYXllciBkcml2ZXJzXFxcIlxcbiAgIDY6XFx0XFxuICAgNzpcXHRjb25maWcgVVNCX1BIWVxcbiAgIDg6XFx0XFx0c2VsZWN0IEVYVENPTlxcbiAgIDk6XFx0XFx0ZGVmX2Jvb2wgblxcbiAgMTA6XFx0XFxuICAxMTpcXHQjXFxuICAxMjpcXHQjIFVTQiBUcmFuc2NlaXZlciBEcml2ZXJzXFxuICAxMzpcXHQjXFxuICAxNDpcXHRjb25maWcgQUI4NTAwX1VTQlxcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIkFCODUwMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBBQjg1MDBfQ09SRVxcbiAgMTc6XFx0XFx0c2VsZWN0IFVTQl9QSFlcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgVVNCIE9URyB0cmFuc2NlaXZlciBpbiBBQjg1MDAgY2hpcC5cXG4gIDIwOlxcdFxcdCAgVGhpcyB0cmFuc2NlaXZlciBzdXBwb3J0cyBoaWdoIGFuZCBmdWxsIHNwZWVkIGRldmljZXMgcGx1cyxcXG4gIDIxOlxcdFxcdCAgaW4gaG9zdCBtb2RlLCBsb3cgc3BlZWQuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBGU0xfVVNCMl9PVEdcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgVVNCIE9URyBUcmFuc2NlaXZlciBEcml2ZXJcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIFVTQl9FSENJX0ZTTCBcXHUwMDI2XFx1MDAyNiBVU0JfRlNMX1VTQjIgXFx1MDAyNlxcdTAwMjYgVVNCX09UR19GU009eSBcXHUwMDI2XFx1MDAyNiBQTVxcbiAgMjY6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCB0aGlzIGNhbid0IGJlICd5J1xcbiAgMjc6XFx0XFx0c2VsZWN0IFVTQl9QSFlcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCBGcmVlc2NhbGUgVVNCIE9URyB0cmFuc2NlaXZlci5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIEtFWVNUT05FX1VTQl9QSFlcXG4gIDMyOlxcdFxcdHRyaXN0YXRlIFxcXCJLZXlzdG9uZSBVU0IgUEhZIERyaXZlclxcXCJcXG4gIDMzOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9LRVlTVE9ORSB8fCBDT01QSUxFX1RFU1RcXG4gIDM0OlxcdFxcdGRlcGVuZHMgb24gTk9QX1VTQl9YQ0VJVlxcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFx0ICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IEtleXN0b25lIFVTQiBwaHkuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXFxuICAzNzpcXHRcXHQgIGludGVyZmFjZSB0byBpbnRlcmFjdCB3aXRoIFVTQiAyLjAgYW5kIFVTQiAzLjAgUEhZIHRoYXQgaXMgcGFydFxcbiAgMzg6XFx0XFx0ICBvZiB0aGUgS2V5c3RvbmUgU09DLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgTk9QX1VTQl9YQ0VJVlxcbiAgNDE6XFx0XFx0dHJpc3RhdGUgXFxcIk5PUCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyXFxcIlxcbiAgNDI6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfR0FER0VUIHx8ICFVU0JfR0FER0VUICMgaWYgVVNCX0dBREdFVD1tLCBOT1AgY2FuJ3QgYmUgYnVpbHQtaW5cXG4gIDQzOlxcdFxcdHNlbGVjdCBVU0JfUEhZXFxuICA0NDpcXHRcXHRoZWxwXFxuICA0NTpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIHRvIGJlIHVzZWQgYnkgYWxsIHRoZSB1c2IgdHJhbnNjZWl2ZXIgd2hpY2ggYXJlIGVpdGhlclxcbiAgNDY6XFx0XFx0ICBidWlsdC1pbiB3aXRoIHVzYiBpcCBvciB3aGljaCBhcmUgYXV0b25vbW91cyBhbmQgZG9lc24ndCByZXF1aXJlIGFueVxcbiAgNDc6XFx0XFx0ICBwaHkgcHJvZ3JhbW1pbmcgc3VjaCBhcyBJU1AxeDA0IGV0Yy5cXG4gIDQ4OlxcdFxcbiAgNDk6XFx0Y29uZmlnIEFNMzM1WF9DT05UUk9MX1VTQlxcbiAgNTA6XFx0XFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzU6MDMuMTk3ODc2Mzk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2Nzk0NjcyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFVTQiBQSFkgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIFVTQiBQSFkgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZHJpdmVycy91c2IvcGh5L3BoeS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjb25uZWN0aW9uczogYFVTQl9QSFlgIGlzIHRyaWdnZXJlZCBieSBhIHdob2xlIHNsZXcgb2YgY29uZmlndXJhdGlvbnMgbGlrZSBgTk9QX1VTQl9YQ0VJVmAsIGBVU0JfR1BJT19WQlVTYCwgYFVTQl9JU1AxMzAxYCwgYW5kIHNvIG9uLCBhbGwgbmVzdGVkIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgVVNCX1NVUFBPUlRgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IGNoYXJnZXIgbm90aWZpY2F0aW9ucyBhbmQgZGV2aWNlIHR5cGUgaW5mb3JtYXRpb24gYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseTpcblxuKiAgIGB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtgOiBUaGlzIGlzIHdoZXJlIHRoZSB1ZXZlbnQgZ2VuZXJhdGlvbiBpcyBub3cgaGFuZGxlZCB1c2luZyBga29iamVjdF91ZXZlbnRfZW52KClgIGluc3RlYWQgb2YgdGhlIG9sZCBga29iamVjdF91ZXZlbnQoKWAgbWV0aG9kLlxuKiAgIGB1c2JfYWRkX3BoeV9kZXZgOiBUaGUgc2V0dGluZyBvZiBgeC1cdTAwM2VkZXYtXHUwMDNldHlwZWAgdG8gYFx1MDAyNnVzYl9waHlfZGV2X3R5cGVgIGhhcyBiZWVuIHJlbW92ZWQuXG4qICAgYHVzYl9waHlfdWV2ZW50YCBhbmQgYF9fZGV2aWNlX3RvX3VzYl9waHlgIGFyZSBkZWxldGVkLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBhbSBmb2xsb3dpbmcgbXkgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeS4gVGhlIHJlYWNoYWJpbGl0eSBhbmFseXNpcyBpcyBrZXksIGFuZCBpdCBhcHBlYXJzIHRoZSBjaGFuZ2VzIGFyZSAqZXhlY3V0YWJsZSBrZXJuZWwgY29kZSogcmVhY2hhYmxlIHRocm91Z2ggdmFyaW91cyBtZWFucy4gU3BlY2lmaWNhbGx5LCBgTk9QX1VTQl9YQ0VJVmAgYW5kIHRoZSBVU0IgUEhZIGZyYW1ld29yayBhcmUgbG9hZGFibGUvY29tcGlsYWJsZSBpbnRvIHRoZSBrZXJuZWwsIHdpdGggVVNCIGdhZGdldCwgY2hpcGlkZWEsIG9yIGV4dGNvbiBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIGNoYXJnZXIgd29yayBvciBhZGRpbmcgdGhlIFBIWS4gU28sIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIGFyZSByZWxldmFudC5cblxuU28sIHRoaXMgaXMgYSBjb2RlIHJlZmFjdG9yaW5nIHRoYXQgaW1wYWN0cyBob3cgY2hhcmdlciBldmVudHMgYW5kIGRldmljZSBkYXRhIGFyZSBleHBvc2VkLiBXZSBoYXZlIGtleSBmdW5jdGlvbnMgLSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrYCwgYHVzYl9hZGRfcGh5X2RldmAsIGB1c2JfcGh5X3NldF9jaGFyZ2VyX3N0YXRlYCwgYHVzYl9waHlfc2V0X2NoYXJnZXJfY3VycmVudGAuIFRoZSByZWxldmFudCBjb25maWdzIGFyZTogYFVTQl9TVVBQT1JUYCwgYFVTQl9QSFlgLCBhbmQgYE5PUF9VU0JfWENFSVZgLlxuXG5JbiBlc3NlbmNlLCB0aGUgcGF0Y2ggaXMgbW9kZXJuaXppbmcgdGhlIHVldmVudCBzeXN0ZW0gd2l0aGluIHRoZSBVU0IgUEhZLCBzd2l0Y2hpbmcgZnJvbSBhc3NpZ25pbmcgdGhlIGBkZXYtXHUwMDNldHlwZWAgYW5kIGEgY3VzdG9tIHVldmVudCBmdW5jdGlvbiB0byBhIG1vcmUgZGlyZWN0IGBrb2JqZWN0X3VldmVudF9lbnYoKWAgY2FsbC4gVGhpcyBzdHJlYW1saW5lcyB0aGUgZXZlbnQgaGFuZGxpbmcgZm9yIGNoYXJnZXIgbm90aWZpY2F0aW9ucyBhbmQgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGlzIGlzIGEgcmVmYWN0b3Jpbmcgb2YgZXhlY3V0YWJsZSBjb2RlLCB3aGljaCBpbXBhY3RzIGhvdyBldmVudHMgYXJlIGdlbmVyYXRlZCBieSB0aGUga2VybmVsLiBCZWNhdXNlIHRoaXMgaXMgcmVmYWN0b3JpbmcgYW5kIHRvdWNoIHVldmVudHMsIGZ1enppbmcgdG8gY2hlY2sgZm9yIHJlZ3Jlc3Npb25zIGlzIGFuIGFic29sdXRlIG11c3QhXG5cbkxldCdzIGxvZyB0aGUgZmluZGluZ3MgdXNpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwMDAsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzU6MDguODc3MzQ3NDg5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1ODA5NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9TVVBQT1JUXCIsXG4gICAgXCJVU0JfUEhZXCIsXG4gICAgXCJOT1BfVVNCX1hDRUlWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrXCIsXG4gICAgXCJ1c2JfYWRkX3BoeV9kZXZcIixcbiAgICBcInVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGVcIixcbiAgICBcInVzYl9waHlfc2V0X2NoYXJnZXJfY3VycmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdWV2ZW50IHJlcG9ydGluZyBtZWNoYW5pc20gZm9yIFVTQiBQSFkgY2hhcmdlciBldmVudHMgaW4gZHJpdmVycy91c2IvcGh5L3BoeS5jLiBJbnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgZGV2aWNlIHR5cGUgYW5kIGltcGxlbWVudGluZyBhIGN1c3RvbSB1ZXZlbnQgY2FsbGJhY2ssIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgY2hhcmdlciBzdGF0ZSBhbmQgdHlwZSBhcmUgbm93IGNvbnN0cnVjdGVkIGFuZCBwYXNzZWQgZGlyZWN0bHkgdmlhIGtvYmplY3RfdWV2ZW50X2VudigpIHdpdGhpbiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsoKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgUEhZIGNvcmUgbG9naWMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1NVUFBPUlRcIixcbiAgICBcIlVTQl9QSFlcIixcbiAgICBcIk5PUF9VU0JfWENFSVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtcIixcbiAgICBcInVzYl9hZGRfcGh5X2RldlwiLFxuICAgIFwidXNiX3BoeV9zZXRfY2hhcmdlcl9zdGF0ZVwiLFxuICAgIFwidXNiX3BoeV9zZXRfY2hhcmdlcl9jdXJyZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB1ZXZlbnQgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3IgVVNCIFBIWSBjaGFyZ2VyIGV2ZW50cyBpbiBkcml2ZXJzL3VzYi9waHkvcGh5LmMuIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHlwZSBhbmQgaW1wbGVtZW50aW5nIGEgY3VzdG9tIHVldmVudCBjYWxsYmFjaywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjaGFyZ2VyIHN0YXRlIGFuZCB0eXBlIGFyZSBub3cgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCBkaXJlY3RseSB2aWEga29iamVjdF91ZXZlbnRfZW52KCkgd2l0aGluIHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29yaygpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBQSFkgY29yZSBsb2dpYyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzU6MDguOTUzOTM2MjMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU0OTI0ODE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM1OjA4Ljk1NDQ3NDU5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxNTQ4NzA0ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFVTQiBQSFkgdWV2ZW50IG5vdGlmaWNhdGlvbiBieSBzZW5kaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKClgIHVzaW5nIGBrb2JqZWN0X3VldmVudF9lbnYoKWAgcmF0aGVyIHRoYW4gdmlhIGEgYGRldmljZV90eXBlLnVldmVudGAgY2FsbGJhY2suIFxcblxcbkFsbCBzdGFjayBidWZmZXJzIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaCAoYHVjaGdlcl9zdGF0ZWAsIGB1Y2hnZXJfdHlwZWAsIGFuZCBgZW52cGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCAvIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIHdpdGggTlVMTCB0ZXJtaW5hdG9yKSBiZWZvcmUgc3RyaW5nIGZvcm1hdHRpbmcgdmlhIGBzbnByaW50ZigpYCBhbmQgYmVpbmcgcGFzc2VkIHRvIGBrb2JqZWN0X3VldmVudF9lbnYoKWAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXJyYXkgaW5kZXhpbmcgKGUuZy4gYHVzYl9jaGdlcl90eXBlYCkgYXJlIGJvdW5kcyBjaGVjayAvIG91dC1vZi1ib3VuZHMgcmVhZCBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NmVmZDU3MWMzZDIxMTdhODg2ZGQ3ZDFkNDQ4YTViYzA2YWFmZjJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMTozNDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHkuYyBiL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xuaW5kZXggNWE5YjkzNTNmMzQzZC4uN2M4NWM3Y2ExZDMwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3BoeS9waHkuY1xuKysrIGIvZHJpdmVycy91c2IvcGh5L3BoeS5jXG5AQCAtNDIsMTIgKzQyLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl90eXBlW10gPSB7XG4gXHRbQUNBX1RZUEVdXHRcdFx0PSBcIlVTQl9DSEFSR0VSX0FDQV9UWVBFXCIsXG4gfTtcbiBcbi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdXNiX2NoZ2VyX3N0YXRlW10gPSB7XG4tXHRbVVNCX0NIQVJHRVJfREVGQVVMVF1cdD0gXCJVU0JfQ0hBUkdFUl9ERUZBVUxUXCIsXG4tXHRbVVNCX0NIQVJHRVJfUFJFU0VOVF1cdD0gXCJVU0JfQ0hBUkdFUl9QUkVTRU5UXCIsXG4tXHRbVVNCX0NIQVJHRVJfQUJTRU5UXVx0PSBcIlVTQl9DSEFSR0VSX0FCU0VOVFwiLFxuLX07XG4tXG4gc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuIFx0ZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcbiB7XG5AQCAtODAsMTggKzc0LDYgQEAgc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4gXHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX2RldmljZV90b191c2JfcGh5KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldilcbi17XG4tXHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeTtcbi1cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkodXNiX3BoeSwgXHUwMDI2cGh5X2xpc3QsIGhlYWQpIHtcbi1cdFx0aWYgKHVzYl9waHktXHUwMDNlZGV2ID09IGRldilcbi1cdFx0XHRyZXR1cm4gdXNiX3BoeTtcbi1cdH1cbi1cbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4ge1xuIFx0dXNiX3BoeS1cdTAwM2VjaGdfY3VyLnNkcF9taW4gPSBERUZBVUxUX1NEUF9DVVJfTUlOO1xuQEAgLTEyMyw2ICsxMDUsOSBAQCBzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXG4gc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdXNiX3BoeSAqdXNiX3BoeSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX3BoeSwgY2hnX3dvcmspO1xuK1x0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XG4rXHRjaGFyIHVjaGdlcl90eXBlWzUwXSA9IHsgMCB9O1xuK1x0Y2hhciAqZW52cFtdID0geyB1Y2hnZXJfc3RhdGUsIHVjaGdlcl90eXBlLCBOVUxMIH07XG4gXHR1bnNpZ25lZCBpbnQgbWluLCBtYXg7XG4gXG4gXHRzd2l0Y2ggKHVzYl9waHktXHUwMDNlY2hnX3N0YXRlKSB7XG5AQCAtMTMwLDExICsxMTUsMTUgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0dXNiX3BoeV9nZXRfY2hhcmdlcl9jdXJyZW50KHVzYl9waHksIFx1MDAyNm1pbiwgXHUwMDI2bWF4KTtcbiBcbiBcdFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2dXNiX3BoeS1cdTAwM2Vub3RpZmllciwgbWF4LCB1c2JfcGh5KTtcbitcdFx0c25wcmludGYodWNoZ2VyX3N0YXRlLCBBUlJBWV9TSVpFKHVjaGdlcl9zdGF0ZSksXG4rXHRcdFx0IFwiVVNCX0NIQVJHRVJfU1RBVEU9JXNcIiwgXCJVU0JfQ0hBUkdFUl9QUkVTRU5UXCIpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVVNCX0NIQVJHRVJfQUJTRU5UOlxuIFx0XHR1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQodXNiX3BoeSk7XG4gXG4gXHRcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnVzYl9waHktXHUwMDNlbm90aWZpZXIsIDAsIHVzYl9waHkpO1xuK1x0XHRzbnByaW50Zih1Y2hnZXJfc3RhdGUsIEFSUkFZX1NJWkUodWNoZ2VyX3N0YXRlKSxcbitcdFx0XHQgXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1wiLCBcIlVTQl9DSEFSR0VSX0FCU0VOVFwiKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRkZXZfd2Fybih1c2JfcGh5LVx1MDAzZWRldiwgXCJVbmtub3duIFVTQiBjaGFyZ2VyIHN0YXRlOiAlZFxcblwiLFxuQEAgLTE0MiwzNiArMTMxLDkgQEAgc3RhdGljIHZvaWQgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0a29iamVjdF91ZXZlbnQoXHUwMDI2dXNiX3BoeS1cdTAwM2VkZXYtXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHVzYl9waHlfdWV2ZW50KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KVxuLXtcbi1cdGNvbnN0IHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5O1xuLVx0Y2hhciB1Y2hnZXJfc3RhdGVbNTBdID0geyAwIH07XG4tXHRjaGFyIHVjaGdlcl90eXBlWzUwXSA9IHsgMCB9O1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoeV9sb2NrLCBmbGFncyk7XG4tXHR1c2JfcGh5ID0gX19kZXZpY2VfdG9fdXNiX3BoeShkZXYpO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwaHlfbG9jaywgZmxhZ3MpO1xuLVxuLVx0aWYgKCF1c2JfcGh5KVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cbi1cdHNucHJpbnRmKHVjaGdlcl9zdGF0ZSwgQVJSQVlfU0laRSh1Y2hnZXJfc3RhdGUpLFxuLVx0XHQgXCJVU0JfQ0hBUkdFUl9TVEFURT0lc1wiLCB1c2JfY2hnZXJfc3RhdGVbdXNiX3BoeS1cdTAwM2VjaGdfc3RhdGVdKTtcbi1cbiBcdHNucHJpbnRmKHVjaGdlcl90eXBlLCBBUlJBWV9TSVpFKHVjaGdlcl90eXBlKSxcbiBcdFx0IFwiVVNCX0NIQVJHRVJfVFlQRT0lc1wiLCB1c2JfY2hnZXJfdHlwZVt1c2JfcGh5LVx1MDAzZWNoZ190eXBlXSk7XG4tXG4tXHRpZiAoYWRkX3VldmVudF92YXIoZW52LCB1Y2hnZXJfc3RhdGUpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGlmIChhZGRfdWV2ZW50X3ZhcihlbnYsIHVjaGdlcl90eXBlKSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHRyZXR1cm4gMDtcbitcdGtvYmplY3RfdWV2ZW50X2VudihcdTAwMjZ1c2JfcGh5LVx1MDAzZWRldi1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fdXNiX3BoeV9nZXRfY2hhcmdlcl90eXBlKHN0cnVjdCB1c2JfcGh5ICp1c2JfcGh5KVxuQEAgLTY3NSwxMSArNjM3LDYgQEAgaW50IHVzYl9hZGRfcGh5KHN0cnVjdCB1c2JfcGh5ICp4LCBlbnVtIHVzYl9waHlfdHlwZSB0eXBlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYWRkX3BoeSk7XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfcGh5X2Rldl90eXBlID0ge1xuLVx0Lm5hbWUgPSBcInVzYl9waHlcIixcbi1cdC51ZXZlbnQgPSB1c2JfcGh5X3VldmVudCxcbi19O1xuLVxuIC8qKlxuICAqIHVzYl9hZGRfcGh5X2RldiAtIGRlY2xhcmUgdGhlIFVTQiBQSFlcbiAgKiBAeDogdGhlIFVTQiBwaHkgdG8gYmUgdXNlZDsgb3IgTlVMTFxuQEAgLTcwNSw4ICs2NjIsNiBAQCBpbnQgdXNiX2FkZF9waHlfZGV2KHN0cnVjdCB1c2JfcGh5ICp4KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHgtXHUwMDNlZGV2LVx1MDAzZXR5cGUgPSBcdTAwMjZ1c2JfcGh5X2Rldl90eXBlO1xuLVxuIFx0QVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRChcdTAwMjZ4LVx1MDAzZW5vdGlmaWVyKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoeV9sb2NrLCBmbGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMTozNTowOC45NTQ0NzU0NTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUyMzQ0ODE4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIC0gVVNCIFBIWSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBrZXJuZWwgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGFuYWx5emUgdGhlIGNoYW5nZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIGNvdWxkIGV4cG9zZS5cblxuRmlyc3QsIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyByZW1vdmluZyBzb21lIG9sZCB1ZXZlbnQtcmVsYXRlZCBjb2RlLCBzcGVjaWZpY2FsbHkgYHVzYl9waHlfdWV2ZW50YCBhbmQgYHVzYl9waHlfZGV2X3R5cGVgLCB3aGljaCB3YXMgc2V0dGluZyB0aGUgYGRldi1cdTAwM2V0eXBlYC4gVGhhdCdzIG5vdCBpbmhlcmVudGx5IHdvcnJpc29tZSwgYnV0IHRoZSByZXBsYWNlbWVudCBpcyB3aGVyZSBteSBhdHRlbnRpb24gbmVlZHMgdG8gZ28uXG5cbk5vdywgaW5zdGVhZCBvZiB0aGUgb2xkIG1ldGhvZCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmtgLiBJbnNpZGUgdGhpcyBmdW5jdGlvbiwgaXQgYWxsb2NhdGVzIHNvbWUgc3RhY2sgYXJyYXlzOiBgdWNoZ2VyX3N0YXRlYCBhbmQgYHVjaGdlcl90eXBlYCwgYm90aCA1MCBieXRlcy4gVGhlbiwgaXQgY3JlYXRlcyBhbiBgZW52cGAgYXJyYXkgcG9pbnRpbmcgdG8gdGhlc2UgY2hhcmFjdGVyIGFycmF5cywgd2hpY2ggaXMgdGhlbiBwYXNzZWQgdG8gYGtvYmplY3RfdWV2ZW50X2VudmAuIFRoZSBjb3JlIGxvZ2ljIGludm9sdmVzIGEgc3dpdGNoIHN0YXRlbWVudCBiYXNlZCBvbiBgdXNiX3BoeS1cdTAwM2VjaGdfc3RhdGVgLiBCYXNlZCBvbiB0aGUgc3RhdGUsIGl0IHBvcHVsYXRlcyBgdWNoZ2VyX3N0YXRlYCB3aXRoIHN0cmluZ3MgaW5kaWNhdGluZyBjaGFyZ2VyIHByZXNlbmNlIG9yIGFic2VuY2UgdXNpbmcgYHNucHJpbnRmYC4gQWZ0ZXIgdGhlIHN3aXRjaCwgaXQgcG9wdWxhdGVzIGB1Y2hnZXJfdHlwZWAgc2ltaWxhcmx5LCBiYXNlZCBvbiBgdXNiX2NoZ2VyX3R5cGVgIGFuZCBgdXNiX3BoeS1cdTAwM2VjaGdfdHlwZWAuIEZpbmFsbHksIGl0IGNhbGxzIGBrb2JqZWN0X3VldmVudF9lbnZgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhcm91bmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3Igb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgdGhhdCB0aGVyZSdzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrIGRhdGEuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgc25wcmludGZgIGNhbGxzIGFyZSBzYWZlLlxuXG5TbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgdXNiX2NoZ2VyX3R5cGVgIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB1c2JfcGh5LVx1MDAzZWNoZ190eXBlYCwgdG8gbWFrZSBzdXJlIHRoZXNlIHZhbHVlcyBhcmUgYm91bmRlZCBhbmQgd2VsbCBjb250cm9sbGVkLiBJJ20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAzMC0xNTAgaW4gYGRyaXZlcnMvdXNiL3BoeS9waHkuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgc2V0IGFuZCB1c2VkLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBhcnJheSBpbmRleGluZy4gQmFzZWQgb24gdGhpcyBkZWVwZXIgZGl2ZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIHRoaXMgd2FycmFudHMgS01TQU4gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM1OjI0LjE4ODk2MDc1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvcGh5L3BoeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdCNkZWZpbmUgREVGQVVMVF9DRFBfQ1VSX01BWFxcdDUwMDBcXG4gIDI2OlxcdCNkZWZpbmUgREVGQVVMVF9BQ0FfQ1VSX01JTlxcdDE1MDBcXG4gIDI3OlxcdCNkZWZpbmUgREVGQVVMVF9BQ0FfQ1VSX01BWFxcdDUwMDBcXG4gIDI4OlxcdFxcbiAgMjk6XFx0c3RhdGljIExJU1RfSEVBRChwaHlfbGlzdCk7XFxuICAzMDpcXHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBoeV9sb2NrKTtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0c3RydWN0IHBoeV9kZXZtIHtcXG4gIDMzOlxcdFxcdHN0cnVjdCB1c2JfcGh5ICpwaHk7XFxuICAzNDpcXHRcXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iO1xcbiAgMzU6XFx0fTtcXG4gIDM2OlxcdFxcbiAgMzc6XFx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYl9jaGdlcl90eXBlW10gPSB7XFxuICAzODpcXHRcXHRbVU5LTk9XTl9UWVBFXVxcdFxcdFxcdD0gXFxcIlVTQl9DSEFSR0VSX1VOS05PV05fVFlQRVxcXCIsXFxuICAzOTpcXHRcXHRbU0RQX1RZUEVdXFx0XFx0XFx0PSBcXFwiVVNCX0NIQVJHRVJfU0RQX1RZUEVcXFwiLFxcbiAgNDA6XFx0XFx0W0NEUF9UWVBFXVxcdFxcdFxcdD0gXFxcIlVTQl9DSEFSR0VSX0NEUF9UWVBFXFxcIixcXG4gIDQxOlxcdFxcdFtEQ1BfVFlQRV1cXHRcXHRcXHQ9IFxcXCJVU0JfQ0hBUkdFUl9EQ1BfVFlQRVxcXCIsXFxuICA0MjpcXHRcXHRbQUNBX1RZUEVdXFx0XFx0XFx0PSBcXFwiVVNCX0NIQVJHRVJfQUNBX1RZUEVcXFwiLFxcbiAgNDM6XFx0fTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX3VzYl9maW5kX3BoeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbiAgNDY6XFx0XFx0ZW51bSB1c2JfcGh5X3R5cGUgdHlwZSlcXG4gIDQ3OlxcdHtcXG4gIDQ4OlxcdFxcdHN0cnVjdCB1c2JfcGh5ICAqcGh5ID0gTlVMTDtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaHksIGxpc3QsIGhlYWQpIHtcXG4gIDUxOlxcdFxcdFxcdGlmIChwaHktXFx1MDAzZXR5cGUgIT0gdHlwZSlcXG4gIDUyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRcXHRyZXR1cm4gcGh5O1xcbiAgNTU6XFx0XFx0fVxcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4gIDU4OlxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0c3RhdGljIHN0cnVjdCB1c2JfcGh5ICpfX29mX3VzYl9maW5kX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRzdHJ1Y3QgdXNiX3BoeSAgKnBoeTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpKVxcbiAgNjU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGh5LCBcXHUwMDI2cGh5X2xpc3QsIGhlYWQpIHtcXG4gIDY4OlxcdFxcdFxcdGlmIChub2RlICE9IHBoeS1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlKVxcbiAgNjk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdHJldHVybiBwaHk7XFxuICA3MjpcXHRcXHR9XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xcbiAgNzU6XFx0fVxcbiAgNzY6XFx0XFxuICA3NzpcXHRzdGF0aWMgdm9pZCB1c2JfcGh5X3NldF9kZWZhdWx0X2N1cnJlbnQoc3RydWN0IHVzYl9waHkgKnVzYl9waHkpXFxuICA3ODpcXHR7XFxuICA3OTpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLnNkcF9taW4gPSBERUZBVUxUX1NEUF9DVVJfTUlOO1xcbiAgODA6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5zZHBfbWF4ID0gREVGQVVMVF9TRFBfQ1VSX01BWDtcXG4gIDgxOlxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19jdXIuZGNwX21pbiA9IERFRkFVTFRfRENQX0NVUl9NSU47XFxuICA4MjpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLmRjcF9tYXggPSBERUZBVUxUX0RDUF9DVVJfTUFYO1xcbiAgODM6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5jZHBfbWluID0gREVGQVVMVF9DRFBfQ1VSX01JTjtcXG4gIDg0OlxcdFxcdHVzYl9waHktXFx1MDAzZWNoZ19jdXIuY2RwX21heCA9IERFRkFVTFRfQ0RQX0NVUl9NQVg7XFxuICA4NTpcXHRcXHR1c2JfcGh5LVxcdTAwM2VjaGdfY3VyLmFjYV9taW4gPSBERUZBVUxUX0FDQV9DVVJfTUlOO1xcbiAgODY6XFx0XFx0dXNiX3BoeS1cXHUwMDNlY2hnX2N1ci5hY2FfbWF4ID0gREVGQVVMVF9BQ0FfQ1VSX01BWDtcXG4gIDg3OlxcdH1cXG4gIDg4OlxcdFxcbiAgODk6XFx0LyoqXFxuICA5MDpcXHQgKiB1c2JfcGh5X25vdGlmeV9jaGFyZ2VyX3dvcmsgLSBub3RpZnkgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXFxuICA5MTpcXHQgKiBAd29yazogdGhlIGNoYXJnZXIgd29yayB0byBub3RpZnkgdGhlIFVTQiBjaGFyZ2VyIHN0YXRlXFxuICA5MjpcXHQgKlxcbiAgOTM6XFx0ICogVGhpcyB3b3JrIGNhbiBiZSBpc3N1ZWQgd2hlbiBVU0IgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIG9yXFxuICA5NDpcXHQgKiBVU0IgY2hhcmdlciBjdXJyZW50IGhhcyBiZWVuIGNoYW5nZWQsIHRoZW4gd2UgY2FuIG5vdGlmeSB0aGUgY3VycmVudFxcbiAgOTU6XFx0ICogd2hhdCBjYW4gYmUgZHJhd24gdG8gcG93ZXIgdXNlciBhbmQgdGhlIGNoYXJnZXIgc3RhdGUgdG8gdXNlcnNwYWNlLlxcbiAgOTY6XFx0ICpcXG4gIDk3OlxcdCAqIElmIHdlIGdldCB0aGUgY2hhcmdlciB0eXBlIGZyb20gZXh0Y29uIHN1YnN5c3RlbSwgd2UgY2FuIG5vdGlmeSB0aGVcXG4gIDk4OlxcdCAqIGNoYXJnZXIgc3RhdGUgdG8gcG93ZXIgdXNlciBhdXRvbWF0aWNhbGx5IGJ5IHVzYl9waHlfZ2V0X2NoYXJnZXJfdHlwZSgpXFxuICA5OTpcXHQgKiBpc3N1aW5nIGZyb20gZXh0Y29uIHN1YnN5c3RlbS5cXG4gMTAwOlxcdCAqXFxuIDEwMTpcXHQgKiBJZiB3ZSBnZXQgdGhlIGNoYXJnZXIgdHlwZSBmcm9tIC1cXHUwMDNlY2hhcmdlcl9kZXRlY3QoKSBpbnN0ZWFkIG9mIGV4dGNvblxcbiAxMDI6XFx0ICogc3Vic3lzdGVtLCB0aGUgdXNiIHBoeSBkcml2ZXIgc2hvdWxkIGlzc3VlIHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUoKVxcbiAxMDM6XFx0ICogdG8gc2V0IGNoYXJnZXIgc3RhdGUgd2hlbiB0aGUgY2hhcmdlciBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxcbiAxMDQ6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjM1OjI0LjE4OTA2NjEzOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzE0MDkzMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJpc2sgQXNzZXNzbWVudCBmb3IgVVNCIENoYXJnZXIgVWV2ZW50IFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyB0aGUgdWV2ZW50IGdlbmVyYXRpb24gZm9yIHRoZSBVU0IgY2hhcmdlciBzdGF0ZS4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vdmluZyBmcm9tIHRoZSBgZGV2aWNlX3R5cGUudWV2ZW50YCBjYWxsYmFjayB0byBkaXJlY3RseSBjYWxsaW5nIGBrb2JqZWN0X3VldmVudF9lbnZgIHdpdGhpbiB0aGUgYHVzYl9waHlfbm90aWZ5X2NoYXJnZXJfd29ya2Agd29ya3F1ZXVlIGZ1bmN0aW9uLiBNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIEtNU0FOIHdvdWxkIGZsYWcuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29kZSBkZWZpbmVzIHR3byBjaGFyYWN0ZXIgYXJyYXlzLCBgdWNoZ2VyX3N0YXRlYCBhbmQgYHVjaGdlcl90eXBlYCwgYm90aCBzdGFjay1hbGxvY2F0ZWQgd2l0aCBhIHNpemUgb2YgNTAgYW5kIGluaXRpYWxpemVkIHRvIHplcm8gKGA9IHsgMCB9YCkuIEl0IGFsc28gaW5pdGlhbGl6ZXMgYW4gZW52aXJvbm1lbnQgcG9pbnRlciBhcnJheSBgZW52cGAgY29udGFpbmluZyBwb2ludGVycyB0byB0aGVzZSBzdHJpbmdzIGFuZCBhIE5VTEwgdGVybWluYXRvci4gVGhlbiwgdGhlIGNvZGUgcG9wdWxhdGVzIGB1Y2hnZXJfc3RhdGVgIGFuZCBgdWNoZ2VyX3R5cGVgIHVzaW5nIGBzbnByaW50ZmAuIFRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgYGtvYmplY3RfdWV2ZW50X2VudmAgaXMgY2FsbGVkIHdpdGggdGhlc2UgZm9ybWF0dGVkIHN0cmluZ3MuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXJlJ3Mgbm8gd2F5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQuIExldCdzIG1ha2Ugc3VyZS5cblxuKiAgIGB1Y2hnZXJfc3RhdGVgIGFuZCBgdWNoZ2VyX3R5cGVgIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQuXG4qICAgYGVudnBgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgTlVMTC10ZXJtaW5hdGVkLCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gcHJldmVudCByZWFkLW91dHMuXG4qICAgSSBjb25zaWRlcmVkIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGB1c2JfcGh5LVx1MDAzZWNoZ190eXBlYCwgYnV0IHRoYXQncyBhIHN0YXRpYyBjb25zdCBhcnJheSwgc28gS0FTQU4gd291bGQgY2F0Y2ggaXQuXG4qICAgVGhpcyBpcyB0aGUgc2FtZSBtZXRob2RvbG9neSBhcyB0aGUgb2xkIHZlcnNpb24sIHdoaWNoIHVzZWQgYHVjaGdlcl9zdGF0ZWAgYW5kIGB1Y2hnZXJfdHlwZWAgaW5pdGlhbGl6ZWQgdG8gYHsgMCB9YCB0byBhZGQgdG8gYGVudmBcblxuU28sIGlzIHRoZXJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s/IExldCBtZSByZWl0ZXJhdGUgYW5kIGJlIGNyeXN0YWwgY2xlYXIuIEkgc2VlIG5vIGlzc3Vlcy5cblxuMS4gIFRoZXJlJ3Mgbm8gcmVhZGluZyBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LlxuMi4gIFRoZSBidWZmZXJzIGV4cG9zZWQgdG8gdXNlcnNwYWNlICh2aWEgdGhlIHVldmVudCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgYXJyYXlzLCBmaWxsZWQgd2l0aCBgc25wcmludGZgLCBndWFyYW50ZWVpbmcgbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuXG4zLiAgTm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGxlYWtlZC5cbjQuICBObyBicmFuY2hpbmcgZGVjaXNpb25zIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuTm93LCBsZXQncyBjcm9zcy1yZWZlcmVuY2UgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBndWlkZWxpbmVzLiBXZSBuZWVkIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgYWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLCBhbmQgaWYgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvIGxlYWtzLiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhpcyBpcyBjbGVhcmx5IHRoZSBjYXNlIGhlcmUuIFRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgYnVmZmVycyBiZWZvcmUgd3JpdGluZyBkYXRhIGluIHRoZW0uXG5cblRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyByZXZpZXcsIGl0J3MgbXkgZGV0ZXJtaW5hdGlvbiB0aGF0IHRoaXMgcGF0Y2ggaXMgc2FmZSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDgsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6MzU6MzAuNTAzMTYxODMzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFVTQiBQSFkgdWV2ZW50IG5vdGlmaWNhdGlvbiBieSBzZW5kaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKClgIHVzaW5nIGBrb2JqZWN0X3VldmVudF9lbnYoKWAgcmF0aGVyIHRoYW4gdmlhIGEgYGRldmljZV90eXBlLnVldmVudGAgY2FsbGJhY2suIFxcblxcbkFsbCBzdGFjayBidWZmZXJzIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaCAoYHVjaGdlcl9zdGF0ZWAsIGB1Y2hnZXJfdHlwZWAsIGFuZCBgZW52cGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCAvIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIHdpdGggTlVMTCB0ZXJtaW5hdG9yKSBiZWZvcmUgc3RyaW5nIGZvcm1hdHRpbmcgdmlhIGBzbnByaW50ZigpYCBhbmQgYmVpbmcgcGFzc2VkIHRvIGBrb2JqZWN0X3VldmVudF9lbnYoKWAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXJyYXkgaW5kZXhpbmcgKGUuZy4gYHVzYl9jaGdlcl90eXBlYCkgYXJlIGJvdW5kcyBjaGVjayAvIG91dC1vZi1ib3VuZHMgcmVhZCBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIFVTQiBQSFkgdWV2ZW50IG5vdGlmaWNhdGlvbiBieSBzZW5kaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgdXNiX3BoeV9ub3RpZnlfY2hhcmdlcl93b3JrKClgIHVzaW5nIGBrb2JqZWN0X3VldmVudF9lbnYoKWAgcmF0aGVyIHRoYW4gdmlhIGEgYGRldmljZV90eXBlLnVldmVudGAgY2FsbGJhY2suIFxcblxcbkFsbCBzdGFjayBidWZmZXJzIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaCAoYHVjaGdlcl9zdGF0ZWAsIGB1Y2hnZXJfdHlwZWAsIGFuZCBgZW52cGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCAvIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIHdpdGggTlVMTCB0ZXJtaW5hdG9yKSBiZWZvcmUgc3RyaW5nIGZvcm1hdHRpbmcgdmlhIGBzbnByaW50ZigpYCBhbmQgYmVpbmcgcGFzc2VkIHRvIGBrb2JqZWN0X3VldmVudF9lbnYoKWAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXJyYXkgaW5kZXhpbmcgKGUuZy4gYHVzYl9jaGdlcl90eXBlYCkgYXJlIGJvdW5kcyBjaGVjayAvIG91dC1vZi1ib3VuZHMgcmVhZCBjb25jZXJucyBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2w59[1] Phase: Succeeded StartedAt: 2026-09-08 11:35:41 +0000 UTC FinishedAt: 2026-09-08 11:35:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 11:35:41 +0000 UTC FinishedAt: 2026-09-08 11:35:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2] Phase: Succeeded StartedAt: 2026-09-08 11:35:41 +0000 UTC FinishedAt: 2026-09-08 13:51:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 11:35:41 +0000 UTC FinishedAt: 2026-09-08 13:51:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 11:35:41 +0000 UTC FinishedAt: 2026-09-08 11:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 11:35:41 +0000 UTC FinishedAt: 2026-09-08 11:35:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowg2w59/series-workflowg2w59-convert-artifact-978421700/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 11:35:51 +0000 UTC FinishedAt: 2026-09-08 11:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 11:35:51 +0000 UTC FinishedAt: 2026-09-08 11:52:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d35cee30-eae2-4a1e-92f9-af8cc38e1684,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-workflowg2w59/series-workflowg2w59-convert-artifact-978421700/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": "1e0d94a6-d795-4dcd-a581-f925890d700e", "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-workflowg2w59/series-workflowg2w59-build-action-631753474/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 11:35:51 +0000 UTC FinishedAt: 2026-09-08 11:52: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:*d35cee30-eae2-4a1e-92f9-af8cc38e1684,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-workflowg2w59/series-workflowg2w59-convert-artifact-978421700/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": "1e0d94a6-d795-4dcd-a581-f925890d700e", "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-workflowg2w59/series-workflowg2w59-build-action-631753474/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 11:52:19 +0000 UTC FinishedAt: 2026-09-08 11:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 11:52:19 +0000 UTC FinishedAt: 2026-09-08 11:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 11:52:19 +0000 UTC FinishedAt: 2026-09-08 11:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 11:52:19 +0000 UTC FinishedAt: 2026-09-08 11:52:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowg2w59/series-workflowg2w59-convert-artifact-4123633987/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 11:52:29 +0000 UTC FinishedAt: 2026-09-08 11:54:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 11:52:29 +0000 UTC FinishedAt: 2026-09-08 11:54:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1e0d94a6-d795-4dcd-a581-f925890d700e,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-workflowg2w59/series-workflowg2w59-build-action-631753474/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-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 11:54:43 +0000 UTC FinishedAt: 2026-09-08 11:54:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 11:54:43 +0000 UTC FinishedAt: 2026-09-08 11:54:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 11:54:43 +0000 UTC FinishedAt: 2026-09-08 12:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 11:54:43 +0000 UTC FinishedAt: 2026-09-08 12:10:42 +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:*d35cee30-eae2-4a1e-92f9-af8cc38e1684,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-workflowg2w59/series-workflowg2w59-convert-artifact-4123633987/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": "aa130893-3d81-4290-beda-585d477ec825", "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-workflowg2w59/series-workflowg2w59-build-action-1183388663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 11:54:43 +0000 UTC FinishedAt: 2026-09-08 12:10:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d35cee30-eae2-4a1e-92f9-af8cc38e1684,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-workflowg2w59/series-workflowg2w59-convert-artifact-4123633987/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": "aa130893-3d81-4290-beda-585d477ec825", "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-workflowg2w59/series-workflowg2w59-build-action-1183388663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 12:10:42 +0000 UTC FinishedAt: 2026-09-08 12:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 12:10:42 +0000 UTC FinishedAt: 2026-09-08 12:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 12:10:42 +0000 UTC FinishedAt: 2026-09-08 12:12:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 12:10:42 +0000 UTC FinishedAt: 2026-09-08 12:12:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aa130893-3d81-4290-beda-585d477ec825,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2w59/series-workflowg2w59-build-action-1183388663/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-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 12:12:50 +0000 UTC FinishedAt: 2026-09-08 13:51:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 12:12:50 +0000 UTC FinishedAt: 2026-09-08 13:51:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1e0d94a6-d795-4dcd-a581-f925890d700e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aa130893-3d81-4290-beda-585d477ec825,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2w59/series-workflowg2w59-build-action-631753474/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2w59/series-workflowg2w59-build-action-1183388663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 12:12:50 +0000 UTC FinishedAt: 2026-09-08 12:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 12:12:50 +0000 UTC FinishedAt: 2026-09-08 12:12:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2w59/series-workflowg2w59-convert-artifact-2324491100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 12:12:50 +0000 UTC FinishedAt: 2026-09-08 12:12:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 12:12:50 +0000 UTC FinishedAt: 2026-09-08 12:12:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 12:12:50 +0000 UTC FinishedAt: 2026-09-08 12:12:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 12:13:00 +0000 UTC FinishedAt: 2026-09-08 13:51:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2w59[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_phy_notify_charger_work","usb_add_phy_dev","usb_phy_set_charger_state","usb_phy_set_charger_current"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_SUPPORT","USB_PHY","NOP_USB_XCEIV"],"series_id":"94ac6ed0-1963-4775-818e-afdf00285564","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 12:13:00 +0000 UTC FinishedAt: 2026-09-08 13:51:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1e0d94a6-d795-4dcd-a581-f925890d700e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aa130893-3d81-4290-beda-585d477ec825,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2w59/series-workflowg2w59-build-action-631753474/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2w59/series-workflowg2w59-build-action-1183388663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2w59/series-workflowg2w59-convert-artifact-2324491100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}