Name: series-workflow2wsfq Phase: Succeeded StartedAt: 2026-09-10 13:54:15 +0000 UTC FinishedAt: 2026-09-10 17:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[0] Phase: Succeeded StartedAt: 2026-09-10 13:54:15 +0000 UTC FinishedAt: 2026-09-10 14:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 13:54:15 +0000 UTC FinishedAt: 2026-09-10 14:12:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP_IOCOST_BPF", "BLK_CGROUP_IOCOST", "BLK_CGROUP", "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP_IOCOST_BPF", "BLK_CGROUP_IOCOST", "BLK_CGROUP", "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "a2010ea6-5d95-4530-a1de-b18113c7c89a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "ioc_bpf_model_bind", "ioc_cost_model_write", "calc_vtime_cost", "calc_size_vtime_cost", "bpf_iocost_reg", "bpf_iocost_unreg", "bpf_iocost_validate", "iocost_bpf_model_get", "iocost_bpf_model_put", "iocost_notify_blkcg_online", "iocost_notify_blkcg_offline" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUX0JQRiYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2NfYnBmX21vZGVsX2JpbmQmIzM0OywKICAgICYjMzQ7aW9jX2Nvc3RfbW9kZWxfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2FsY192dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2NhbGNfc2l6ZV92dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfdW5yZWcmIzM0OywKICAgICYjMzQ7YnBmX2lvY29zdF92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX2dldCYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX3B1dCYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdCAoYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgKSwgYWRkaW5nIGBpb2Nvc3RfbW9kZWxfb3BzYCwgbW9kZWwgcmVnaXN0cmF0aW9uL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJzaW5nIGluIGBpby5jb3N0Lm1vZGVsYCwgYW5kIGEgbmV3IHRyYWNlcG9pbnQgYGlvY29zdF9pb2NfdGlja2AuXG5cbkFuIGV2YWx1YXRpb24gb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFjcm9zcyB0aGUgbW9kaWZpZWQgYW5kIG5ldyBjb2RlIHNob3dzOlxuLSBBbGwgc3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGBicGZfbW9kZWxgIGluaXRpYWxpemVkIHdpdGggYGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTtgLCBgbnJfYWN0aXZlYCBpbml0aWFsaXplZCB0byAwLCBhbmQgYGJ1ZmAgYnVmZmVycyBmaWxsZWQgd2l0aCBgbWF0Y2hfc3RybGNweWApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZC91c2UuXG4tIER5bmFtaWMgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jYCAoZm9yIGBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbGApIGFuZCB0aGUgZXhpc3RpbmcgemVyb2VkIGFsbG9jYXRpb24gZm9yIGBzdHJ1Y3QgaW9jYC5cbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29udGFpbmluZyB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlOyBvdXRwdXQgdG8gdXNlciBzcGFjZSBpcyBoYW5kbGVkIHZpYSBmb3JtYXR0ZWQgdGV4dCBpbiBgc2VxX3ByaW50ZmAuXG4tIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBjYWxsYmFja3MgKGBjYWxjX2Nvc3RgLCBgYmxrY2dfb25saW5lYCwgYGJsa2NnX29mZmxpbmVgKSBhcmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIGluaXRpYWxpemVkIGJpby9yZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIGJsa2NnIHBvaW50ZXJzLlxuXG5UaGUgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBzZXJpZXMgcGVydGFpbiB0byBSQ1Ugc3luY2hyb25pemF0aW9uLCBvYmplY3QgcmVmY291bnRpbmcvbGlmZXRpbWUgKGBicGZfc3RydWN0X29wc19nZXRgL2BwdXRgKSwgYW5kIGxvY2tpbmcsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgc3BlY2lmaWMgdG8gS01TQU4gYXJlIHByZXNlbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQlBGIHN0cnVjdF9vcHMgc3VwcG9ydCAoaW9jb3N0X21vZGVsX29wcykgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscyBpbiBibGstaW9jb3N0LiBJdCBpbnRyb2R1Y2VzIG5ldyBrZXJuZWwgY29kZSBpbiBibG9jay9ibGstaW9jb3N0LWJwZi5jIGZvciByZWdpc3RlcmluZywgdmFsaWRhdGluZywgYW5kIG1hbmFnaW5nIEJQRiBjb3N0IG1vZGVscywgYW5kIHVwZGF0ZXMgYmxvY2svYmxrLWlvY29zdC5jIGFuZCBibG9jay9ibGstY2dyb3VwLmMgdG8gaW50ZXJmYWNlIHdpdGggdGhlc2UgbW9kZWxzIGR1cmluZyBJTyBjb3N0IGNhbGN1bGF0aW9ucywgY29uZmlndXJhdGlvbiB3cml0ZXMsIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBCUEYgc3lzY2FsbHMgYW5kIGNncm91cCB2MiBpby5jb3N0Lm1vZGVsIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiYzUwZDQwMzQzOGI0YjRlMTg4YjE0OGEwYWI1Y2M0YWY1YjY3YTA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTQ6MTA6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5pbmRleCA4ZDI2MDM3NTFjNTFhLi5hNjkxMGFkN2MyZDAyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbkBAIC0yMTI0LDYgJiM0MzsyMTI0LDE3IEBAIElPIEludGVyZmFjZSBGaWxlc1xuIFx0cGFyYW1ldGVycyBhcmUgd3JpdHRlbiB0bywgXCYjMzQ7Y3RybFwmIzM0OyBiZWNvbWUgXCYjMzQ7dXNlclwmIzM0OyBhbmQgdGhlXG4gXHRhdXRvbWF0aWMgY2hhbmdlcyBhcmUgZGlzYWJsZWQuXG4gXG4mIzQzO1x0V2hlbiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGIGlzIGVuYWJsZWQsIFwmIzM0O21vZGVsXCYjMzQ7IGFsc28gYWNjZXB0c1xuJiM0MztcdHRoZSBuYW1lIG9mIGEgcmVnaXN0ZXJlZCBpb2Nvc3RfbW9kZWxfb3BzIEJQRiBzdHJ1Y3Rfb3BzIG1vZGVsOlxuJiM0MztcdFwmIzM0O21vZGVsPVx1MDAzY25hbWVcdTAwM2VcJiMzNDsgYmluZHMgdGhlIG1vZGVsIHRvIHRoZSBkZXZpY2UgYW5kIHRoZSBtb2RlbCBmdWxseVxuJiM0MztcdHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBwcmljaW5nLCBmb3IgZXZlcnkgb3BlcmF0aW9uIGluY2x1ZGluZ1xuJiM0MztcdGZsdXNoZXM7IFwmIzM0O21vZGVsPWxpbmVhclwmIzM0OyAob3IgXCYjMzQ7Y3RybD1hdXRvL3VzZXJcJiMzNDspIHJlc3RvcmVzIHRoZSBidWlsdGluXG4mIzQzO1x0bW9kZWwuICBXcml0aW5nIGFuIHVua25vd24gbmFtZSBmYWlscyB3aXRoIEVOT0VOVC4gIFVucmVnaXN0ZXJpbmdcbiYjNDM7XHRhIG1vZGVsIHJlbW92ZXMgaXRzIG5hbWU7IGRldmljZXMgYWxyZWFkeSBib3VuZCBrZWVwIHVzaW5nIGl0XG4mIzQzO1x0dW50aWwgc3dpdGNoZWQgYmFjayB0byB0aGUgYnVpbHRpbiBtb2RlbCwgZm9sbG93aW5nIHRoZSBsaWZldGltZVxuJiM0MztcdG1vZGVsIG9mIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuICBTZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmhcbiYjNDM7XHRmb3IgdGhlIG1vZGVsIGludGVyZmFjZS5cbiYjNDM7XG4gXHRXaGVuIFwmIzM0O21vZGVsXCYjMzQ7IGlzIFwmIzM0O2xpbmVhclwmIzM0OywgdGhlIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzIGFyZVxuIFx0ZGVmaW5lZC5cbiBcbmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZ1xuaW5kZXggNzBlNGE2NmQ5NDFmZi4uOTFlODA4Zjg2ZDI4ZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL0tjb25maWdcbkBAIC0yMzEsNCAmIzQzOzIzMSwxMyBAQCBjb25maWcgQkxLX0VSUk9SX0lOSkVDVElPTlxuIFxuIHNvdXJjZSBcJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWRcJiMzNDtcbiBcbiYjNDM7Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUX0JQRlxuJiM0MztcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBwbHVnZ2FibGUgY29zdCBtb2RlbCBzdXBwb3J0IGZvciB0aGUgY29zdCBJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQX0lPQ09TVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IERFQlVHX0lORk9fQlRGXG4mIzQzO1x0aGVscFxuJiM0MztcdCBFbmFibGluZyB0aGlzIG9wdGlvbiByZWdpc3RlcnMgdGhlIFwmIzM0O2lvY29zdF9tb2RlbF9vcHNcJiMzNDsgQlBGXG4mIzQzO1x0IHN0cnVjdF9vcHMgdHlwZSwgd2hpY2ggYWxsb3dzIGEgQlBGIHByb2dyYW0gdG8gZnVsbHkgcmVwbGFjZVxuJiM0MztcdCB0aGUgYnVpbHRpbiBsaW5lYXIgY29zdCBtb2RlbCBvbiBhIGRldmljZSBpdCBpcyBib3VuZCB0b1xuJiM0MztcdCB0aHJvdWdoIGlvLmNvc3QubW9kZWwuXG4mIzQzO1xuIGVuZGlmICMgQkxPQ0tcbmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlXG5pbmRleCBlN2JkMzIwZTNkNjk3Li5lZTVjZWJlZWEwMDZmIDEwMDY0NFxuLS0tIGEvYmxvY2svTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL01ha2VmaWxlXG5AQCAtMzksMyAmIzQzOzM5LDQgQEAgb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTilcdCYjNDM7PSBibGstY3J5cHRvLm8gYmxrLWNyeXB0by1wcm9maWxlLm8gXFxcbiBcdFx0XHRcdFx0ICAgYmxrLWNyeXB0by1zeXNmcy5vXG4gb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcdCYjNDM7PSBibGstY3J5cHRvLWZhbGxiYWNrLm9cbiBvYmotJChDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQpXHQmIzQzOz0gaG9sZGVyLm9cbiYjNDM7b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRilcdCYjNDM7PSBibGstaW9jb3N0LWJwZi5vXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXG5pbmRleCAyYjVjMjk0MzRlNDI2Li44NzI4NzEwNDUzNTFjIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmNcbkBAIC0zMiw2ICYjNDM7MzIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhcnRfc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YmxrLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtibGstY2dyb3VwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YmxrLWlvcHJpby5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YmxrLXRocm90dGxlLmhcJiMzNDtcbiBcbkBAIC0xMzQxLDYgJiM0MzsxMzQyLDcgQEAgdm9pZCBibGtjZ191bnBpbl9vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2NnX2NzcylcbiAgKi9cbiBzdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIHtcbiYjNDM7XHRpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoY3NzX3RvX2Jsa2NnKGNzcykpO1xuIFx0LyogdGhpcyBwcmV2ZW50cyBhbnlvbmUgZnJvbSBhdHRhY2hpbmcgb3IgbWlncmF0aW5nIHRvIHRoaXMgYmxrY2cgKi9cbiBcdHdiX2Jsa2NnX29mZmxpbmUoY3NzKTtcbiBcbkBAIC0xNDQ1LDYgJiM0MzsxNDQ3LDcgQEAgYmxrY2dfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuIFxuIHN0YXRpYyBpbnQgYmxrY2dfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIHtcbiYjNDM7XHRpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShjc3NfdG9fYmxrY2coY3NzKSk7XG4gXHRzdHJ1Y3QgYmxrY2cgKnBhcmVudCA9IGJsa2NnX3BhcmVudChjc3NfdG9fYmxrY2coY3NzKSk7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgYi9ibG9jay9ibGstaW9jb3N0LWJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWVjNmRmMjc5NTk5MFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvY29zdC1icGYuY1xuQEAgLTAsMCAmIzQzOzEsMjUwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIGJsay1pb2Nvc3Q6IEJQRiBzdHJ1Y3Rfb3BzIHBsdW1iaW5nIGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJlZ2lzdGVycyB0aGUgXCYjMzQ7aW9jb3N0X21vZGVsX29wc1wmIzM0OyBzdHJ1Y3Rfb3BzIHR5cGUgYW5kIG1haW50YWlucyB0aGVcbiYjNDM7ICogbmFtZSByZWdpc3RyeSBvZiByZWdpc3RlcmVkIG1vZGVscy4gIEEgcmVnaXN0ZXJlZCBtb2RlbCBpcyBib3VuZCB0b1xuJiM0MzsgKiBhIGRldmljZSB0aHJvdWdoIGlvLmNvc3QubW9kZWw7IHNlZSBpbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaC5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGstaW9jb3N0LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoaW9jb3N0X2JwZl9yZWdfbG9jayk7XG4mIzQzO3N0YXRpYyBMSVNUX0hFQUQoaW9jb3N0X2JwZl9tb2RlbHMpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHJlZ2lzdHJ5IGhvbGRzIGEgYnBmX3N0cnVjdF9vcHNfZ2V0KCkgcmVmZXJlbmNlIG9idGFpbmVkIGluIC5yZWc7XG4mIzQzOyAqIC51bnJlZyBkcm9wcyBpdCwgc28gdGhlIGtkYXRhIG9mIGFuIHVucmVnaXN0ZXJlZCBtb2RlbCBzdGF5cyBhbGl2ZVxuJiM0MzsgKiB3aGlsZSBhbnkgZGV2aWNlIGlzIHN0aWxsIGJvdW5kIHRvIGl0LlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGlvY29zdF9icGZfbW9kZWwge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIExvb2sgdXAgYSByZWdpc3RlcmVkIG1vZGVsIGJ5IG5hbWUgYW5kIGFjcXVpcmUgYSByZWZlcmVuY2Ugb24gaXQuXG4mIzQzOyAqIFRoZSByZWdpc3RyeSBsb2NrIGlzIGhlbGQgYWNyb3NzIGxvb2t1cCBhbmQgYnBmX3N0cnVjdF9vcHNfZ2V0KCkgc29cbiYjNDM7ICogdGhlIG1vZGVsIGNhbm5vdCBiZSB1bnJlZ2lzdGVyZWQgaW4gYmV0d2Vlbi5cbiYjNDM7ICovXG4mIzQzO2ludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHQgY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKipvcHNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4mIzQzO1x0aW50IHJldCA9IC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcdTAwMjZpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkge1xuJiM0MztcdFx0aWYgKCFzdHJjbXAobS1cdTAwM2VvcHMtXHUwMDNlbmFtZSwgbmFtZSkpIHtcbiYjNDM7XHRcdFx0aWYgKGJwZl9zdHJ1Y3Rfb3BzX2dldChtLVx1MDAzZW9wcykpIHtcbiYjNDM7XHRcdFx0XHQqb3BzcCA9IG0tXHUwMDNlb3BzO1xuJiM0MztcdFx0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpXG4mIzQzO3tcbiYjNDM7XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICpcbiYjNDM7aW9jb3N0X2JwZl9tb2RlbF9sb29rdXAoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAobS1cdTAwM2VvcHMgPT0gb3BzKVxuJiM0MztcdFx0XHRyZXR1cm4gbTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcdTAwMjZpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkge1xuJiM0MztcdFx0aWYgKG0tXHUwMDNlb3BzLVx1MDAzZWJsa2NnX29ubGluZSlcbiYjNDM7XHRcdFx0bS1cdTAwM2VvcHMtXHUwMDNlYmxrY2dfb25saW5lKGJsa2NnKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbiYjNDM7XHRcdGlmIChtLVx1MDAzZW9wcy1cdTAwM2VibGtjZ19vZmZsaW5lKVxuJiM0MztcdFx0XHRtLVx1MDAzZW9wcy1cdTAwM2VibGtjZ19vZmZsaW5lKGJsa2NnKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF9tb2RlbF9pbml0KHN0cnVjdCBidGYgKmJ0ZilcbiYjNDM7e1xuJiM0MztcdHMzMiB0eXBlX2lkO1xuJiM0MztcbiYjNDM7XHR0eXBlX2lkID0gYnRmX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXCYjMzQ7aW9jb3N0X21vZGVsX29wc1wmIzM0OywgQlRGX0tJTkRfU1RSVUNUKTtcbiYjNDM7XHRpZiAodHlwZV9pZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYWNjZXNzX2F1eCAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBicGZfdHJhY2luZ19idGZfY3R4X2FjY2VzcyhvZmYsIHNpemUsIHR5cGUsIHByb2csIGluZm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbiYjNDM7YnBmX2lvY29zdF9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXG4mIzQzO1x0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChmdW5jX2lkKSB7XG4mIzQzOyNpZmRlZiBDT05GSUdfQ0dST1VQU1xuJiM0MztcdGNhc2UgQlBGX0ZVTkNfY2dycF9zdG9yYWdlX2dldDpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZicGZfY2dycF9zdG9yYWdlX2dldF9wcm90bztcbiYjNDM7I2VuZGlmXG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBicGZfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBicGZfaW9jb3N0X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHQvKiBjYWxjX2Nvc3QoKSBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQgKi9cbiYjNDM7XHRpZiAocHJvZy1cdTAwM2VzbGVlcGFibGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBicGZfaW9jb3N0X2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4mIzQzO1x0XHRcdFx0ICB2b2lkICprZGF0YSwgY29uc3Qgdm9pZCAqdWRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKnVvcHMgPSB1ZGF0YTtcbiYjNDM7XHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKG1vZmYpIHtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzLCBuYW1lKTpcbiYjNDM7XHRcdGlmIChicGZfb2JqX25hbWVfY3B5KG9wcy1cdTAwM2VuYW1lLCB1b3BzLVx1MDAzZW5hbWUsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKSBcdTAwM2M9IDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBicGZfaW9jb3N0X3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3BzLVx1MDAzZWNhbGNfY29zdCA/IDAgOiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl9pb2Nvc3RfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4mIzQzO1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghYnBmX3N0cnVjdF9vcHNfZ2V0KG9wcykpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0bSA9IGt6YWxsb2Moc2l6ZW9mKCptKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFtKSB7XG4mIzQzO1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbiYjNDM7XHR7XG4mIzQzO1x0XHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqb3RoZXI7XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAob3RoZXItXHUwMDNlb3BzLVx1MDAzZW5hbWUsIG9wcy1cdTAwM2VuYW1lKSkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FRVhJU1Q7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdG0tXHUwMDNlb3BzID0gb3BzO1xuJiM0MztcdFx0bGlzdF9hZGQoXHUwMDI2bS1cdTAwM2VsaXN0LCBcdTAwMjZpb2Nvc3RfYnBmX21vZGVscyk7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4mIzQzO1x0XHRrZnJlZShtKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnBmX2lvY29zdF91bnJlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhO1xuJiM0MztcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuJiM0MztcdG0gPSBpb2Nvc3RfYnBmX21vZGVsX2xvb2t1cChvcHMpO1xuJiM0MztcdGlmIChtKSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZtLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4mIzQzO1x0XHRrZnJlZShtKTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2lvY29zdF92ZXJpZmllcl9vcHMgPSB7XG4mIzQzO1x0LmdldF9mdW5jX3Byb3RvID0gYnBmX2lvY29zdF9nZXRfZnVuY19wcm90byxcbiYjNDM7XHQuaXNfdmFsaWRfYWNjZXNzID0gYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IGJwZl9pb2Nvc3RfY2FsY19jb3N0X3N0dWIodTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvcixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgX19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMgPSB7XG4mIzQzO1x0LmNhbGNfY29zdCA9IGJwZl9pb2Nvc3RfY2FsY19jb3N0X3N0dWIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl9pb2Nvc3RfbW9kZWxfb3BzID0ge1xuJiM0MztcdC52ZXJpZmllcl9vcHMgPSBcdTAwMjZicGZfaW9jb3N0X3ZlcmlmaWVyX29wcyxcbiYjNDM7XHQuaW5pdCA9IGJwZl9pb2Nvc3RfbW9kZWxfaW5pdCxcbiYjNDM7XHQuY2hlY2tfbWVtYmVyID0gYnBmX2lvY29zdF9jaGVja19tZW1iZXIsXG4mIzQzO1x0LmluaXRfbWVtYmVyID0gYnBmX2lvY29zdF9pbml0X21lbWJlcixcbiYjNDM7XHQudmFsaWRhdGUgPSBicGZfaW9jb3N0X3ZhbGlkYXRlLFxuJiM0MztcdC5yZWcgPSBicGZfaW9jb3N0X3JlZyxcbiYjNDM7XHQudW5yZWcgPSBicGZfaW9jb3N0X3VucmVnLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7aW9jb3N0X21vZGVsX29wc1wmIzM0OyxcbiYjNDM7XHQuY2ZpX3N0dWJzID0gXHUwMDI2X19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMsXG4mIzQzO1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBicGZfaW9jb3N0X2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcdTAwMjZicGZfaW9jb3N0X21vZGVsX29wcywgaW9jb3N0X21vZGVsX29wcyk7XG4mIzQzO31cbiYjNDM7bGF0ZV9pbml0Y2FsbChicGZfaW9jb3N0X2luaXQpO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QuYyBiL2Jsb2NrL2Jsay1pb2Nvc3QuY1xuaW5kZXggMjc0NWJmZmNkNWVlZi4uYmNjZGJkMjQ5NmQ4MyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1pb2Nvc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvY29zdC5jXG5AQCAtMTc3LDYgJiM0MzsxNzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhcnNlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsay1pb2Nvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2xvY2FsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbG9jYWw2NC5oXHUwMDNlXG5AQCAtNDQ1LDYgJiM0Mzs0NDYsMTEgQEAgc3RydWN0IGlvYyB7XG4gXHRpbnRcdFx0XHRcdGF1dG9wX2lkeDtcbiBcdGJvb2xcdFx0XHRcdHVzZXJfcW9zX3BhcmFtczoxO1xuIFx0Ym9vbFx0XHRcdFx0dXNlcl9jb3N0X21vZGVsOjE7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxuJiM0MztcdC8qIGJvdW5kIEJQRiBjb3N0IG1vZGVsLCBOVUxMID0gYnVpbHRpbiBsaW5lYXIgbW9kZWwgKi9cbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wc1x0X19yY3UgKm1vZGVsO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCBpb2NnX3BjcHVfc3RhdCB7XG5AQCAtMjIzOCw2ICYjNDM7MjI0NCw3IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRzdHJ1Y3QgaW9jX25vdyBub3c7XG4gXHRMSVNUX0hFQUQoc3VycGx1c2VzKTtcbiBcdGludCBucl9kZWJ0b3JzLCBucl9zaG9ydGFnZXMgPSAwLCBucl9sYWdnaW5nID0gMDtcbiYjNDM7XHRpbnQgbnJfYWN0aXZlID0gMDtcbiBcdHU2NCB1c2FnZV91c19zdW0gPSAwO1xuIFx0dTMyIHBwbV9ydGhyO1xuIFx0dTMyIHBwbV93dGhyO1xuQEAgLTIyNzQsNiAmIzQzOzIyODEsOCBAQCBzdGF0aWMgdm9pZCBpb2NfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuIFx0XHR1NjQgdmRvbmUsIHZ0aW1lLCB1c2FnZV91cztcbiBcdFx0dTMyIGh3X2FjdGl2ZSwgaHdfaW51c2U7XG4gXG4mIzQzO1x0XHRucl9hY3RpdmUmIzQzOyYjNDM7O1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogQ29sbGVjdCB1bnVzZWQgYW5kIHdpbmQgdnRpbWUgY2xvc2VyIHRvIHZub3cgdG8gcHJldmVudFxuIFx0XHQgKiBpb2NncyBmcm9tIGFjY3VtdWxhdGluZyBhIGxhcmdlIGFtb3VudCBvZiBidWRnZXQuXG5AQCAtMjQ2MCw2ICYjNDM7MjQ2OSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRcdGlvY19yZWZyZXNoX3ZyYXRlKGlvYywgXHUwMDI2bm93KTtcbiBcdH1cbiBcbiYjNDM7XHR0cmFjZV9pb2Nvc3RfaW9jX3RpY2soaW9jLCBucl9hY3RpdmUsIHVzYWdlX3VzX3N1bSk7XG4mIzQzO1xuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKTtcbiB9XG4gXG5AQCAtMjU3MSwxMCAmIzQzOzI1ODIsMjggQEAgc3RhdGljIHZvaWQgY2FsY192dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW9jX2dxICppb2NnLFxuIFxuIHN0YXRpYyB1NjQgY2FsY192dGltZV9jb3N0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZywgYm9vbCBpc19tZXJnZSlcbiB7XG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xuIFx0dTY0IGNvc3Q7XG4gXG4tXHRjYWxjX3Z0aW1lX2Nvc3RfYnVpbHRpbihiaW8sIGlvY2csIGlzX21lcmdlLCBcdTAwMjZjb3N0KTtcbi1cdHJldHVybiBjb3N0O1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtb2RlbCA9IHJjdV9kZXJlZmVyZW5jZShpb2NnLVx1MDAzZWlvYy1cdTAwM2Vtb2RlbCk7XG4mIzQzO1x0aWYgKG1vZGVsKSB7XG4mIzQzO1x0XHRjb3N0ID0gbW9kZWwtXHUwMDNlY2FsY19jb3N0KGJpby1cdTAwM2ViaV9vcGYsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsXG4mIzQzO1x0XHRcdFx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IsXG4mIzQzO1x0XHRcdFx0XHRpb2NnX3RvX2Jsa2coaW9jZyktXHUwMDNlYmxrY2csXG4mIzQzO1x0XHRcdFx0XHRpc19tZXJnZSA/IElPQ09TVF9DT1NUX0ZfTUVSR0UgOiAwKTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIG1pbihjb3N0LCBWVElNRV9QRVJfU0VDKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHtcbiYjNDM7XHRcdHU2NCBjb3N0O1xuJiM0MztcbiYjNDM7XHRcdGNhbGNfdnRpbWVfY29zdF9idWlsdGluKGJpbywgaW9jZywgaXNfbWVyZ2UsIFx1MDAyNmNvc3QpO1xuJiM0MztcdFx0cmV0dXJuIGNvc3Q7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvYyAqaW9jLFxuQEAgLTI1OTYsMTAgJiM0MzsyNjI1LDI4IEBAIHN0YXRpYyB2b2lkIGNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW9jICppb2MsXG4gXG4gc3RhdGljIHU2NCBjYWxjX3NpemVfdnRpbWVfY29zdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYylcbiB7XG4tXHR1NjQgY29zdDtcbiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7XG4gXG4tXHRjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHJxLCBpb2MsIFx1MDAyNmNvc3QpO1xuLVx0cmV0dXJuIGNvc3Q7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG1vZGVsID0gcmN1X2RlcmVmZXJlbmNlKGlvYy1cdTAwM2Vtb2RlbCk7XG4mIzQzO1x0aWYgKG1vZGVsIFx1MDAyNlx1MDAyNiBycS1cdTAwM2ViaW8gXHUwMDI2XHUwMDI2IHJxLVx1MDAzZWJpby1cdTAwM2ViaV9ibGtnKSB7XG4mIzQzO1x0XHR1NjQgY29zdDtcbiYjNDM7XG4mIzQzO1x0XHRjb3N0ID0gbW9kZWwtXHUwMDNlY2FsY19jb3N0KHJxLVx1MDAzZWNtZF9mbGFncywgYmxrX3JxX2J5dGVzKHJxKSxcbiYjNDM7XHRcdFx0XHRcdGJsa19ycV9wb3MocnEpLFxuJiM0MztcdFx0XHRcdFx0cnEtXHUwMDNlYmlvLVx1MDAzZWJpX2Jsa2ctXHUwMDNlYmxrY2csIDApO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0e1xuJiM0MztcdFx0dTY0IGNvc3Q7XG4mIzQzO1xuJiM0MztcdFx0Y2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihycSwgaW9jLCBcdTAwMjZjb3N0KTtcbiYjNDM7XHRcdHJldHVybiBjb3N0O1xuJiM0MztcdH1cbiB9XG4gXG4gZW51bSBvdmVyX2J1ZGdldF9hY3Rpb24ge1xuQEAgLTI5MDAsNiAmIzQzOzI5NDcsMTkgQEAgc3RhdGljIHZvaWQgaW9jX3Jxb3NfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZpb2MtXHUwMDNldGltZXIpO1xuIFx0ZnJlZV9wZXJjcHUoaW9jLVx1MDAzZXBjcHVfc3RhdCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4mIzQzO1x0e1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0bW9kZWwgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlvYy1cdTAwM2Vtb2RlbCxcbiYjNDM7XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZpb2MtXHUwMDNlbG9jaykpO1xuJiM0MztcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGlvYy1cdTAwM2Vtb2RlbCwgTlVMTCk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0aWYgKG1vZGVsKVxuJiM0MztcdFx0XHRpb2Nvc3RfYnBmX21vZGVsX3B1dChtb2RlbCk7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiBcdGtmcmVlKGlvYyk7XG4gfVxuIFxuQEAgLTM0MzgsMTIgJiM0MzszNDk4LDMwIEBAIHN0YXRpYyB1NjQgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsKHN0cnVjdCBzZXFfZmlsZSAqc2YsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4mIzQzO1x0e1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsID1cbiYjNDM7XHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtXHUwMDNlbW9kZWwsXG4mIzQzO1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbiYjNDM7XG4mIzQzO1x0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDslcyBjdHJsPSVzIG1vZGVsPSVzIFwmIzM0O1xuJiM0MztcdFx0XHQgICBcJiMzNDtyYnBzPSVsbHUgcnNlcWlvcHM9JWxsdSBycmFuZGlvcHM9JWxsdSBcJiMzNDtcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7d2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGRuYW1lLCBtb2RlbCA/IFwmIzM0O2JwZlwmIzM0OyA6XG4mIzQzO1x0XHRcdFx0ICAgaW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbCA/IFwmIzM0O3VzZXJcJiMzNDsgOiBcJiMzNDthdXRvXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBtb2RlbCA/IG1vZGVsLVx1MDAzZW5hbWUgOiBcJiMzNDtsaW5lYXJcJiMzNDssXG4mIzQzO1x0XHRcdCAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSxcbiYjNDM7XHRcdFx0ICAgdVtJX0xDT0VGX1JSQU5ESU9QU10sIHVbSV9MQ09FRl9XQlBTXSxcbiYjNDM7XHRcdFx0ICAgdVtJX0xDT0VGX1dTRVFJT1BTXSwgdVtJX0xDT0VGX1dSQU5ESU9QU10pO1xuJiM0MztcdH1cbiYjNDM7I2Vsc2VcbiBcdHNlcV9wcmludGYoc2YsIFwmIzM0OyVzIGN0cmw9JXMgbW9kZWw9bGluZWFyIFwmIzM0O1xuIFx0XHQgICBcJiMzNDtyYnBzPSVsbHUgcnNlcWlvcHM9JWxsdSBycmFuZGlvcHM9JWxsdSBcJiMzNDtcbiBcdFx0ICAgXCYjMzQ7d2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcXG5cJiMzNDssXG4gXHRcdCAgIGRuYW1lLCBpb2MtXHUwMDNldXNlcl9jb3N0X21vZGVsID8gXCYjMzQ7dXNlclwmIzM0OyA6IFwmIzM0O2F1dG9cJiMzNDssXG4gXHRcdCAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSwgdVtJX0xDT0VGX1JSQU5ESU9QU10sXG4gXHRcdCAgIHVbSV9MQ09FRl9XQlBTXSwgdVtJX0xDT0VGX1dTRVFJT1BTXSwgdVtJX0xDT0VGX1dSQU5ESU9QU10pO1xuJiM0MzsjZW5kaWZcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzQ1Nyw2ICYjNDM7MzUzNSwzNyBAQCBzdGF0aWMgaW50IGlvY19jb3N0X21vZGVsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQmluZCBAbmFtZSAoZW1wdHkgPSBidWlsdGluIGxpbmVhciBtb2RlbCkgYXMgdGhlIGFjdGl2ZSBjb3N0IG1vZGVsIG9mXG4mIzQzOyAqIEBpb2MuICBUaGUgcmVnaXN0cnkgbG9va3VwIGFuZCByZWZlcmVuY2UgbWFuYWdlbWVudCBoYXBwZW4gb3V0c2lkZVxuJiM0MzsgKiBpb2MtXHUwMDNlbG9jazsgdGhlIHBvaW50ZXIgc3dhcCBoYXBwZW5zIHVuZGVyIGl0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpb2NfYnBmX21vZGVsX2JpbmQoc3RydWN0IGlvYyAqaW9jLCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm5ldyA9IE5VTEwsICpvbGQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5hbWVbMF0pIHtcbiYjNDM7XHRcdHJldCA9IGlvY29zdF9icGZfbW9kZWxfZ2V0KG5hbWUsIFx1MDAyNm5ldyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4mIzQzO1x0b2xkID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtXHUwMDNlbW9kZWwsXG4mIzQzO1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoaW9jLVx1MDAzZW1vZGVsLCBuZXcpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChvbGQpXG4mIzQzO1x0XHRpb2Nvc3RfYnBmX21vZGVsX3B1dChvbGQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBuYW1lWzBdID8gLUVOT0VOVCA6IDA7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IGNvc3RfY3RybF90b2tlbnMgPSB7XG4gXHR7IENPU1RfQ1RSTCxcdFx0XCYjMzQ7Y3RybD0lc1wmIzM0O1x0fSxcbiBcdHsgQ09TVF9NT0RFTCxcdFx0XCYjMzQ7bW9kZWw9JXNcJiMzNDtcdH0sXG5AQCAtMzQ4Miw2ICYjNDM7MzU5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXG4gXHRzdHJ1Y3QgaW9jICppb2M7XG4gXHR1NjQgdVtOUl9JX0xDT0VGU107XG4gXHRib29sIHVzZXI7XG4mIzQzO1x0Y2hhciBicGZfbW9kZWxbSU9DT1NUX01PREVMX05BTUVfTEVOXTtcbiBcdGNoYXIgKmJvZHksICpwO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNTEyLDYgJiM0MzszNjIyLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuIFx0bWVtY3B5KHUsIGlvYy1cdTAwM2VwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7XG4gXHR1c2VyID0gaW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbDtcbiYjNDM7XHRicGZfbW9kZWxbMF0gPSAmIzM5O1xcMCYjMzk7O1xuIFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcbkBAIC0zNTMzLDExICYjNDM7MzY0NCwxNiBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LFxuIFx0XHRcdFx0dXNlciA9IHRydWU7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRcdGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTs7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGNhc2UgQ09TVF9NT0RFTDpcbiBcdFx0XHRtYXRjaF9zdHJsY3B5KGJ1ZiwgXHUwMDI2YXJnc1swXSwgc2l6ZW9mKGJ1ZikpO1xuLVx0XHRcdGlmIChzdHJjbXAoYnVmLCBcJiMzNDtsaW5lYXJcJiMzNDspKVxuLVx0XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGJ1ZiwgXCYjMzQ7bGluZWFyXCYjMzQ7KSkge1xuJiM0MztcdFx0XHRcdC8qIGJhY2sgdG8gdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsICovXG4mIzQzO1x0XHRcdFx0YnBmX21vZGVsWzBdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRtYXRjaF9zdHJsY3B5KGJwZl9tb2RlbCwgXHUwMDI2YXJnc1swXSwgc2l6ZW9mKGJwZl9tb2RlbCkpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMzU2Myw2ICYjNDM7MzY3OSwxNCBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LFxuIHVubG9jazpcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCaW5kIHRoZSBCUEYgbW9kZWwgb3V0c2lkZSBpb2MtXHUwMDNlbG9jazogdGhlIHJlZ2lzdHJ5IGxvb2t1cFxuJiM0MztcdCAqIHRha2VzIHRoZSByZWdpc3RyYXRpb24gbXV0ZXggYW5kIHRoZSBvbGQgbW9kZWwmIzM5O3MgcmVmZXJlbmNlXG4mIzQzO1x0ICogaXMgZHJvcHBlZCBhZnRlciB0aGUgc3dhcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldCA9IGlvY19icGZfbW9kZWxfYmluZChpb2MsIGJwZl9tb2RlbCk7XG4mIzQzO1xuIFx0YmxrX21xX3VucXVpZXNjZV9xdWV1ZShxKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmggYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNhMDg1NWVmYjYxMDdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oXG5AQCAtMCwwICYjNDM7MSw4MiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9MSU5VWF9CTEtfSU9DT1NUX0hcbiYjNDM7I2RlZmluZSBfTElOVVhfQkxLX0lPQ09TVF9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa190eXBlcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIElPQ09TVF9NT0RFTF9OQU1FX0xFTlx0MTZcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYmxrY2c7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQbHVnZ2FibGUgY29zdCBtb2RlbCBpbnRlcmZhY2UgZm9yIGJsay1pb2Nvc3QuXG4mIzQzOyAqXG4mIzQzOyAqIEEgQlBGIHN0cnVjdF9vcHMgaW1wbGVtZW50YXRpb24gcmVnaXN0ZXJlZCBhZ2FpbnN0IFwmIzM0O2lvY29zdF9tb2RlbF9vcHNcJiMzNDtcbiYjNDM7ICogZnVsbHkgcmVwbGFjZXMgdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsIG9uIHRoZSBkZXZpY2VzIGl0IGlzIGJvdW5kIHRvXG4mIzQzOyAqIHRocm91Z2ggaW8uY29zdC5tb2RlbC4gIFRoZSBtb2RlbCBvd25zIHByaWNpbmcgZm9yIGV2ZXJ5IElPIG9uIGEgYm91bmRcbiYjNDM7ICogZGV2aWNlOiBpdCBwcmljZXMgYWxsIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBmbHVzaGVzLCBhbmQgYm90aCB0aGUgYmlvXG4mIzQzOyAqIGNoYXJnaW5nIHBhdGggYW5kIHRoZSByZXF1ZXN0LWxldmVsIHNpemluZyBwYXRoIGNvbnN1bHQgaXQuXG4mIzQzOyAqXG4mIzQzOyAqIGNhbGNfY29zdCgpIGlzIGNhbGxlZCBmcm9tIHRoZSBJTyBzdWJtaXNzaW9uIHBhdGggd2l0aCBSQ1UgcmVhZCBsb2NrXG4mIzQzOyAqIGhlbGQgYW5kIG11c3Qgbm90IHNsZWVwLiAgSXQgcmV0dXJucyB0aGUgY29zdCBvZiB0aGUgSU8gaW4gdnRpbWVcbiYjNDM7ICogdW5pdHMsIHdoZXJlIDEgc2Vjb25kIG9mIGRldmljZSB0aW1lIGVxdWFscyBWVElNRV9QRVJfU0VDICgyXjM3LFxuJiM0MzsgKiBhdmFpbGFibGUgdG8gQlBGIHByb2dyYW1zIHRocm91Z2ggdm1saW51eC5oKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBpc1xuJiM0MzsgKiBjbGFtcGVkIHRvIDEgc2Vjb25kIG9mIGRldmljZSB0aW1lIHBlciBJTy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIG1vZGVsIGlzIHBhc3NlZCB0aGUgYmxrY2cgb2YgdGhlIGlzc3VpbmcgY2dyb3VwIHNvIGl0IGNhbiBrZWVwXG4mIzQzOyAqIHBlci1jZ3JvdXAgc3RhdGUuICBibGtjZ19vbmxpbmUoKS9ibGtjZ19vZmZsaW5lKCkgYXJlIG9wdGlvbmFsXG4mIzQzOyAqIGNhbGxiYWNrcyBtaXJyb3JpbmcgdGhlIGJsa2NnIGNzcyBsaWZlY3ljbGU6IHN0YXRlIGNyZWF0ZWQgb24gb25saW5lXG4mIzQzOyAqIChvciBsYXppbHkgb24gZmlyc3QgdXNlKSBtdXN0IGJlIHJlbGVhc2VkIG9uIG9mZmxpbmUuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZWdpc3RyYXRpb24gYW5kIGJpbmRpbmcgbW9kZWwgZm9sbG93cyB0aGUgVENQIGNvbmdlc3Rpb25cbiYjNDM7ICogY29udHJvbCBmcmFtZXdvcms6IHJlZ2lzdGVyaW5nIGEgc3RydWN0X29wcyBtYWtlcyB0aGUgbW9kZWwgYXZhaWxhYmxlXG4mIzQzOyAqIGJ5IGl0cyBuYW1lLCB3aGlsZSBpby5jb3N0Lm1vZGVsIGJpbmRzIG9uZSByZWdpc3RlcmVkIG1vZGVsIHRvIGFcbiYjNDM7ICogZGV2aWNlLiAgVW5yZWdpc3RlcmluZyByZW1vdmVzIHRoZSBuYW1lIGZyb20gdGhlIHJlZ2lzdHJ5OyBkZXZpY2VzXG4mIzQzOyAqIGFscmVhZHkgYm91bmQga2VlcCB1c2luZyBpdCB1bnRpbCBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBidWlsdGluXG4mIzQzOyAqIG1vZGVsLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgSU9DT1NUX01PREVMX05BTUVfTEVOXHQxNlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogaW9jb3N0LXNwZWNpZmljIGNhbGwgbWV0YWRhdGEgZm9yIGNhbGNfY29zdCgpJiMzOTtzIG1vZGVsX2ZsYWdzXG4mIzQzOyAqIGFyZ3VtZW50OyBldmVyeXRoaW5nIGVsc2UsIGluY2x1ZGluZyBSRVFfUFJFRkxVU0gvUkVRX0ZVQSwgaXNcbiYjNDM7ICogYWxyZWFkeSBwcmVzZW50IGluIHRoZSBvcGYgYXJndW1lbnRcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXHQvKiBjYWxsZWQgZnJvbSBtZXJnZSBwYXRoICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyB7XG4mIzQzO1x0dTY0ICgqY2FsY19jb3N0KSh1NjQgb3BmLCB1NjQgbmJ5dGVzLCBzZWN0b3JfdCBzZWN0b3IsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgbW9kZWxfZmxhZ3MpO1xuJiM0MztcdHZvaWQgKCpibGtjZ19vbmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuJiM0MztcdHZvaWQgKCpibGtjZ19vZmZsaW5lKShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcbiYjNDM7XG4mIzQzO1x0LyogbW9kZWwgbmFtZSwgdXNlZCB0byBzZWxlY3QgdGhlIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCAqL1xuJiM0MztcdGNoYXIgbmFtZVsxNl07XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgaW9jb3N0X2JwZl9tb2RlbF9nZXQoY29uc3QgY2hhciAqbmFtZSxcbiYjNDM7XHRcdFx0IGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcCk7XG4mIzQzO3ZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyk7XG4mIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZyk7XG4mIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuJiM0MztcbiYjNDM7I2Vsc2VcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBibGtjZztcbiYjNDM7c3RydWN0IGlvY29zdF9tb2RlbF9vcHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykgeyB9XG4mIzQzO1xuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cbiYjNDM7I2VuZGlmXHQvKiBfTElOVVhfQkxLX0lPQ09TVF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaFxuaW5kZXggZTc3MmIxYmM2MGQ2MC4uMmI5ZmYzNDhhNGY1MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaFxuQEAgLTE3OCw2ICYjNDM7MTc4LDQ2IEBAIFRSQUNFX0VWRU5UKGlvY29zdF9pb2NfdnJhdGVfYWRqLFxuIFx0KVxuICk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFBlcmlvZGljIHBlci1kZXZpY2Ugc3VtbWFyeSwgZW1pdHRlZCBvbmNlIHBlciBwZXJpb2QgZnJvbSB0aGUgdGFpbCBvZlxuJiM0MzsgKiBpb2NfdGltZXJfZm4oKS4gIFVubGlrZSB0aGUgc3RhdGUtY2hhbmdlIGV2ZW50cyBhYm92ZSwgdGhpcyBmaXJlcyBldmVyeVxuJiM0MzsgKiBwZXJpb2QgdGhlIGNvbnRyb2xsZXIgaXMgcnVubmluZywgaW5jbHVkaW5nIHN0ZWFkeSBzdGF0ZXMsIGFuZCBjYXJyaWVzXG4mIzQzOyAqIHRoZSBvdmVyYWxsIGNvbnRyb2xsZXIgc3RhdGUgc28gYmFzaWMgbW9uaXRvcmluZyBkb2VzbiYjMzk7dCByZXF1aXJlIGRyZ24uXG4mIzQzOyAqL1xuJiM0MztUUkFDRV9FVkVOVChpb2Nvc3RfaW9jX3RpY2ssXG4mIzQzO1xuJiM0MztcdFRQX1BST1RPKHN0cnVjdCBpb2MgKmlvYywgaW50IG5yX2FjdGl2ZSwgdTY0IHVzYWdlX3VzX3N1bSksXG4mIzQzO1xuJiM0MztcdFRQX0FSR1MoaW9jLCBucl9hY3RpdmUsIHVzYWdlX3VzX3N1bSksXG4mIzQzO1xuJiM0MztcdFRQX1NUUlVDVF9fZW50cnkgKFxuJiM0MztcdFx0X19zdHJpbmcoZGV2bmFtZSwgaW9jX25hbWUoaW9jKSlcbiYjNDM7XHRcdF9fZmllbGQodTMyLCBwZXJpb2RfdXMpXG4mIzQzO1x0XHRfX2ZpZWxkKHU2NCwgdnJhdGUpXG4mIzQzO1x0XHRfX2ZpZWxkKGludCwgYnVzeV9sZXZlbClcbiYjNDM7XHRcdF9fZmllbGQoaW50LCBucl9hY3RpdmUpXG4mIzQzO1x0XHRfX2ZpZWxkKHUzMiwgdXNhZ2VfcGN0KVxuJiM0MztcdFx0X19maWVsZChpbnQsIHJ1bm5pbmcpXG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfZmFzdF9hc3NpZ24oXG4mIzQzO1x0XHRfX2Fzc2lnbl9zdHIoZGV2bmFtZSk7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXBlcmlvZF91cyA9IGlvYy1cdTAwM2VwZXJpb2RfdXM7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXZyYXRlID0gaW9jLVx1MDAzZXZ0aW1lX2Jhc2VfcmF0ZTtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlYnVzeV9sZXZlbCA9IGlvYy1cdTAwM2VidXN5X2xldmVsO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9hY3RpdmUgPSBucl9hY3RpdmU7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXVzYWdlX3BjdCA9IGlvYy1cdTAwM2VwZXJpb2RfdXMgP1xuJiM0MztcdFx0XHRkaXZfdTY0KHVzYWdlX3VzX3N1bSAqIDEwMCwgaW9jLVx1MDAzZXBlcmlvZF91cykgOiAwO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VydW5uaW5nID0gaW9jLVx1MDAzZXJ1bm5pbmc7XG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfcHJpbnRrKFwmIzM0O1slc10gcGVyaW9kPSV1dXMgdnJhdGU9JWxsdSBidXN5PSVkIGFjdGl2ZT0lZCB1c2FnZT0ldSUlIHJ1bm5pbmc9JWRcJiMzNDssXG4mIzQzO1x0XHRfX2dldF9zdHIoZGV2bmFtZSksIF9fZW50cnktXHUwMDNlcGVyaW9kX3VzLCBfX2VudHJ5LVx1MDAzZXZyYXRlLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VidXN5X2xldmVsLCBfX2VudHJ5LVx1MDAzZW5yX2FjdGl2ZSwgX19lbnRyeS1cdTAwM2V1c2FnZV9wY3QsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXJ1bm5pbmdcbiYjNDM7XHQpXG4mIzQzOyk7XG4mIzQzO1xuIFRSQUNFX0VWRU5UKGlvY29zdF9pb2NnX2ZvcmdpdmVfZGVidCxcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBpb2NfZ3EgKmlvY2csIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBpb2Nfbm93ICpub3csXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbmluZGV4IDJmNzk2ODhkY2Y3Y2UuLjY3YTYzMGNiNTYxNDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5AQCAtMTM4LDMgJiM0MzsxMzgsNSBAQCBDT05GSUdfU01DX0hTX0NUUkxfQlBGPXlcbiBDT05GSUdfRElCUz15XG4gQ09ORklHX0RJQlNfTE89eVxuIENPTkZJR19QTV9XQUtFTE9DS1M9eVxuJiM0MztDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1Q9eVxuJiM0MztDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTkzNDRiMTNmYmE5OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaW9jb3N0X21vZGVsLmNcbkBAIC0wLDAgJiM0MzsxLDE5MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpb2Nvc3RfbW9kZWwuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvY29zdF9tcy5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFdyaXRlIGEgbGluZSB0byBpby5jb3N0Lm1vZGVsIHdpdGggd3JpdGUoMikgYW5kIHJldHVybiB0aGUgZXJybm8gb2ZcbiYjNDM7ICogdGhlIGZhaWxlZCB3cml0ZSwgb3IgMCBvbiBzdWNjZXNzLiAgc3RkaW8gaXMgbm90IHVzZWQgaGVyZSBvblxuJiM0MzsgKiBwdXJwb3NlOiB0aGUga2VybmVsJiMzOTtzIHJlamVjdGlvbiBoYXBwZW5zIGluIHRoZSB3cml0ZSgpIHN5c2NhbGwsXG4mIzQzOyAqIG5vdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBjb3B5LCBhbmQgZXZlcnkgd3JpdGUsIGluY2x1ZGluZ1xuJiM0MzsgKiB0aGUgZXJyb3IgcGF0aHMgb2YgdGhlIGNhbGxlcnMgYmVsb3csIGlzIGNoZWNrZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX2Nvc3RfbW9kZWwoY29uc3QgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBlcnIgPSAwO1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWxcJiMzNDssIE9fV1JPTkxZKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJybm87XG4mIzQzO1x0biA9IHdyaXRlKGZkLCBidWYsIHN0cmxlbihidWYpKTtcbiYjNDM7XHRpZiAobiBcdTAwM2MgMClcbiYjNDM7XHRcdGVyciA9IGVycm5vO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWFkIGJhY2sgdGhlIGlvLmNvc3QubW9kZWwgbGluZSBvZiBkZXYgYW5kIGNvcHkgdGhlIG1vZGVsPSB2YWx1ZVxuJiM0MzsgKiBpbnRvIEBtb2RlbC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCByZWFkYmFja19tb2RlbChjb25zdCBjaGFyICpkZXYsIGNoYXIgKm1vZGVsLCBzaXplX3QgbW9kZWxfc3opXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGxpbmVbMjU2XSwgd29yZFsyNTZdLCAqbSwgKmVuZDtcbiYjNDM7XHRGSUxFICpmcDtcbiYjNDM7XHRpbnQgZm91bmQgPSAwO1xuJiM0MztcbiYjNDM7XHRmcCA9IGZvcGVuKFwmIzM0Oy9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWxcJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZnApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XG4mIzQzO1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwmIzM0OyUyNTVzXCYjMzQ7LCB3b3JkKSA9PSAxIFx1MDAyNlx1MDAyNiAhc3RyY21wKHdvcmQsIGRldikpIHtcbiYjNDM7XHRcdFx0Zm91bmQgPSAxO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0ZmNsb3NlKGZwKTtcbiYjNDM7XHRpZiAoIWZvdW5kKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRtID0gc3Ryc3RyKGxpbmUsIFwmIzM0O21vZGVsPVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFtKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdG0gJiM0Mzs9IHN0cmxlbihcJiMzNDttb2RlbD1cJiMzNDspO1xuJiM0MztcdGVuZCA9IG07XG4mIzQzO1x0d2hpbGUgKCplbmQgXHUwMDI2XHUwMDI2ICFpc3NwYWNlKCplbmQpKVxuJiM0MztcdFx0ZW5kJiM0MzsmIzQzOztcbiYjNDM7XHRzbnByaW50Zihtb2RlbCwgbW9kZWxfc3osIFwmIzM0OyUuKnNcJiMzNDssIChpbnQpKGVuZCAtIG0pLCBtKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQmluZCB0aGUgbmFtZWQgbW9kZWwgdG8gYSBkZXZpY2Ugd2l0aCBcJiMzNDttb2RlbD1cdTAwM2NuYW1lXHUwMDNlXCYjMzQ7LCB2ZXJpZnkgdGhlXG4mIzQzOyAqIHJlYWRiYWNrIGFuZCByZXN0b3JlIHRoZSBidWlsdGluIG1vZGVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGJpbmRfbW9kZWwoY29uc3QgY2hhciAqZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMzAwXSwgZ290WzY0XTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslcyBtb2RlbD0lc1xcblwmIzM0OywgZGV2LCBuYW1lKTtcbiYjNDM7XHRlcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0Q0hFQ0soZmFsc2UsIFwmIzM0O3dyaXRlX21vZGVsXCYjMzQ7LCBcJiMzNDt3cml0ZSBtb2RlbD0lczogJXNcXG5cJiMzNDssIG5hbWUsXG4mIzQzO1x0XHQgICAgICBzdHJlcnJvcihlcnIpKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gcmVhZGJhY2tfbW9kZWwoZGV2LCBnb3QsIHNpemVvZihnb3QpKTtcbiYjNDM7XHRpZiAoZXJyIHx8IHN0cmNtcChnb3QsIG5hbWUpKSB7XG4mIzQzO1x0XHRDSEVDSyhmYWxzZSwgXCYjMzQ7cmVhZGJhY2tfbW9kZWxcJiMzNDssIFwmIzM0O2dvdCBtb2RlbD0lcyB3YW50ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgZXJyID8gXCYjMzQ7KG5vbmUpXCYjMzQ7IDogZ290LCBuYW1lKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHJlc3RvcmUgdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsOyB0aGUgd3JpdGUgaXMgY2hlY2tlZCB0b28gKi9cbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslcyBtb2RlbD1saW5lYXJcXG5cJiMzNDssIGRldik7XG4mIzQzO1x0ZXJyID0gd3JpdGVfY29zdF9tb2RlbChidWYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdENIRUNLKGZhbHNlLCBcJiMzNDtyZXN0b3JlX2xpbmVhclwmIzM0OywgXCYjMzQ7d3JpdGUgbW9kZWw9bGluZWFyOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIHN0cmVycm9yKGVycikpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGRldiBhcmd1bWVudCBtdXN0IGJlIHByZXNlbnQgaW4gaW8uY29zdC5xb3MgYWxyZWFkeSwgd2hpY2hcbiYjNDM7ICogbWVhbnMgaW9jb3N0IGlzIGVuYWJsZWQgZm9yIGl0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBkZXZfaGFzX2lvY29zdChjb25zdCBjaGFyICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGxpbmVbMjU2XSwgd29yZFsyNTZdO1xuJiM0MztcdEZJTEUgKmZwO1xuJiM0MztcdGludCBmb3VuZCA9IDA7XG4mIzQzO1xuJiM0MztcdGZwID0gZm9wZW4oXCYjMzQ7L3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5xb3NcJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHtcbiYjNDM7XHRcdGlmIChzc2NhbmYobGluZSwgXCYjMzQ7JTI1NXNcJiMzNDssIHdvcmQpID09IDEgXHUwMDI2XHUwMDI2ICFzdHJjbXAod29yZCwgZGV2KSkge1xuJiM0MztcdFx0XHRmb3VuZCA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRmY2xvc2UoZnApO1xuJiM0MztcdHJldHVybiBmb3VuZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQmluZCB0aGUgMnggZXhhbXBsZSBtb2RlbCBhbmQgdmVyaWZ5IHRoZSBpby5jb3N0Lm1vZGVsIHJlYWRiYWNrLlxuJiM0MzsgKiBJTyBhY2NvdW50aW5nIGl0c2VsZiBpcyBub3QgY2hlY2tlZCBoZXJlOyBpdCBuZWVkcyBhIGRldmljZSBkb2luZ1xuJiM0MzsgKiByZWFsIElPIHVuZGVyIGlvY29zdCBhbmQgaXMgY292ZXJlZCBieSB0aGUga2VybmVsLXNpZGUgdmFsaWRhdGlvblxuJiM0MzsgKiBkZXNjcmliZWQgaW4gdGhlIGNvdmVyIGxldHRlci5cbiYjNDM7ICpcbiYjNDM7ICogUmVxdWlyZXMgcm9vdCwgY2dyb3VwIHYyIGFuZCBhIGRldmljZSB3aXRoIGlvY29zdCBzdXBwb3J0LiAgVGhlXG4mIzQzOyAqIGRldmljZSBtdXN0IGJlIGdpdmVuIGFzIG1ham9yOm1pbm9yIGluICRJT0NPU1RfVEVTVF9ERVYsIG90aGVyd2lzZVxuJiM0MzsgKiB0aGUgdGVzdCBpcyBza2lwcGVkLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWwodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb2Nvc3RfbW9kZWwgKnNrZWw7XG4mIzQzO1x0Y2hhciBidWZbMzAwXSwgKmRldjtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRkZXYgPSBnZXRlbnYoXCYjMzQ7SU9DT1NUX1RFU1RfREVWXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWRldiB8fCBnZXRldWlkKCkgIT0gMCkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksIFwmIzM0O2lvY29zdF9tb3VudGVkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBuZWdhdGl2ZTogYmluZGluZyBhbiB1bmtub3duIG1vZGVsIG5hbWUgbXVzdCBiZSByZWplY3RlZCxcbiYjNDM7XHQgKiBzbyBhIHR5cG8gY2Fubm90IHNpbGVudGx5IGRpc2FibGUgY29zdCBtb2RlbCB1cGRhdGVzXG4mIzQzO1x0ICovXG4mIzQzO1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7JXMgbW9kZWw9bm9fc3VjaF9tb2RlbFxcblwmIzM0OywgZGV2KTtcbiYjNDM7XHRlcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgRU5PRU5ULCBcJiMzNDt1bmtub3duX21vZGVsX3JlamVjdGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGlvY29zdF9tb2RlbF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5fbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIGF0dGFjaGluZyB0aGUgc3RydWN0X29wcyByZWdpc3RlcnMgdGhlIG1vZGVsIGJ5IG5hbWUgKi9cbiYjNDM7XHRlcnIgPSBpb2Nvc3RfbW9kZWxfX2F0dGFjaChza2VsKTtcbiYjNDM7XHRpZiAoQVNTRVJUX09LKGVyciwgXCYjMzQ7YXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdEFTU0VSVF9PSyhiaW5kX21vZGVsKGRldiwgXCYjMzQ7aW9jb3N0XzJ4XCYjMzQ7KSwgXCYjMzQ7YmluZF9hbmRfcmVhZGJhY2tcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpb2Nvc3RfbW9kZWxfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFNhbWUgY2hlY2sgZm9yIHRoZSBtdWx0aS1zdHJlYW0gZXhhbXBsZSBtb2RlbC4gIE9ubHkgb25lIG1vZGVsIGNhblxuJiM0MzsgKiBiZSBib3VuZCB0byBhIGRldmljZSBhdCBhIHRpbWU7IGJvdGggdGVzdHMgYmluZCBhbmQgcmVzdG9yZSwgc29cbiYjNDM7ICogdGhleSBhcmUgc2VyaWFsIGFuZCBpbmRlcGVuZGVudC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfaW9jb3N0X21vZGVsX3N0cmVhbXModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb2Nvc3RfbXMgKnNrZWw7XG4mIzQzO1x0Y2hhciAqZGV2O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGRldiA9IGdldGVudihcJiMzNDtJT0NPU1RfVEVTVF9ERVZcJiMzNDspO1xuJiM0MztcdGlmICghZGV2IHx8IGdldGV1aWQoKSAhPSAwKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGlmICghQVNTRVJUX1RSVUUoZGV2X2hhc19pb2Nvc3QoZGV2KSwgXCYjMzQ7aW9jb3N0X21vdW50ZWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRza2VsID0gaW9jb3N0X21zX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaW9jb3N0X21zX19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKEFTU0VSVF9PSyhlcnIsIFwmIzM0O2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsIFwmIzM0O2lvY29zdF9tc1wmIzM0OyksIFwmIzM0O2JpbmRfYW5kX3JlYWRiYWNrXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aW9jb3N0X21zX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjhhZDQxN2IzNTg0OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5AQCAtMCwwICYjNDM7MSwxMTYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogRXhhbXBsZSBpb2Nvc3QgY29zdCBtb2RlbDogdGhlIGJ1aWx0aW4gbGluZWFyIEhERCBmb3JtdWxhIHdpdGggYWxsXG4mIzQzOyAqIGNvc3RzIGRvdWJsZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjb25zdGFudHMgbWlycm9yIHdoYXQgY2FsY19sY29lZnMoKSBkZXJpdmVzIGZyb20gdGhlIEFVVE9QX0hERFxuJiM0MzsgKiBkZWZhdWx0cyAocmJwcz0xNzQwMTkxNzYgcnNlcWlvcHM9NDE3MDggcnJhbmRpb3BzPTM3MCwgdy1zaWRlXG4mIzQzOyAqIGFuYWxvZykgaW4gdnRpbWUgdW5pdHMgd2hlcmUgMXMgPT0gMl4zNywgZXhwcmVzc2VkIHdpdGggdGhlIHNhbWVcbiYjNDM7ICogcm91bmQtdXAgZGl2aXNpb25zIHNvIHRoZXkgY2Fubm90IGRyaWZ0IGZyb20gdGhlIGtlcm5lbC4gIEEgZGV2aWNlXG4mIzQzOyAqIGJvdW5kIHRvIHRoaXMgbW9kZWwgdGhyb3VnaCBpby5jb3N0Lm1vZGVsIGNoYXJnZXMgZXhhY3RseSB0d2ljZSB0aGVcbiYjNDM7ICogYnVpbHRpbiBtb2RlbCB1bmRlciB0aGUgc2FtZSB3b3JrbG9hZCwgd2hpY2ggbWFrZXMgaXQgYSBjb252ZW5pZW50XG4mIzQzOyAqIHdheSB0byB2ZXJpZnkgdGhhdCBhY2NvdW50aW5nIGdvZXMgdGhyb3VnaCB0aGUgQlBGIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nXG4mIzQzOyAqIGZsdXNoZXM6IHRoZXJlIGlzIG5vIGZhbGxiYWNrIHRvIHRoZSBidWlsdGluIG1vZGVsLCBhIGRhdGFsZXNzXG4mIzQzOyAqIFdSSVRFfFJFUV9QUkVGTFVTSCBpcyBwcmljZWQgYXMgYSBvbmUtcGFnZSB3cml0ZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovXG4mIzQzOyNkZWZpbmUgSU9DX1BBR0VfU0laRVx0XHQ0MDk2XG4mIzQzOyNkZWZpbmUgSU9DX1NFQ1RfVE9fUEFHRV9TSElGVFx0M1x0LyogNTEyQiBzZWN0b3JzIHRvIDRrQiBwYWdlcyAqL1xuJiM0MzsjZGVmaW5lIExDT0VGX1JBTkRJT19QQUdFU1x0NDA5Nlx0LyogMTZNQiBzZWVrIHRocmVzaG9sZCAqL1xuJiM0MzsjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAwKVx0Lyogbm90IGluIEJURjogYSBwbGFpbiBtYWNybyAqL1xuJiM0MzsjZGVmaW5lIElPQ09TVF9SRVFfT1BfTUFTS1x0MHhmZlx0XHQvKiBSRVFfT1BfTUFTSywgbm90IGluIEJURiAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRElWNjRfVTY0X1JPVU5EX1VQIC8gRElWX1JPVU5EX1VQX1VMTCBlcXVpdmFsZW50cywgZm9sZGVkIGF0XG4mIzQzOyAqIGNvbXBpbGUgdGltZVxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVSh4LCB5KVx0XHQoKHgpIC8gKHkpICYjNDM7ICgoKHgpICUgKHkpKSA/IDEgOiAwKSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkJQU1x0MTc0MDE5MTc2VUxMXG4mIzQzOyNkZWZpbmUgUlNFUUlPUFNcdDQxNzA4VUxMXG4mIzQzOyNkZWZpbmUgUlJBTkRJT1BTXHQzNzBVTExcbiYjNDM7I2RlZmluZSBXQlBTXHQxNzgwNzU4NjZVTExcbiYjNDM7I2RlZmluZSBXU0VRSU9QU1x0NDI3MDVVTExcbiYjNDM7I2RlZmluZSBXUkFORElPUFNcdDM3OFVMTFxuJiM0MztcbiYjNDM7I2RlZmluZSBSUEFHRVx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSlcbiYjNDM7I2RlZmluZSBSU0VRSU9cdChSVShWVElNRV9QRVJfU0VDLCBSU0VRSU9QUykgLSBSUEFHRSlcbiYjNDM7I2RlZmluZSBSUkFORElPXHQoUlUoVlRJTUVfUEVSX1NFQywgUlJBTkRJT1BTKSAtIFJQQUdFKVxuJiM0MzsjZGVmaW5lIFdQQUdFXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKVxuJiM0MzsjZGVmaW5lIFdTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdTRVFJT1BTKSAtIFdQQUdFKVxuJiM0MzsjZGVmaW5lIFdSQU5ESU9cdChSVShWVElNRV9QRVJfU0VDLCBXUkFORElPUFMpIC0gV1BBR0UpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBwZXItY2dyb3VwIGN1cnNvciBzdG9yYWdlOiBrZXllZCBieSB0aGUgY2dyb3VwLCBmcmVlZCB3aXRoIGl0LCBzb1xuJiM0MzsgKiB0aGUgbW9kZWwgbmV2ZXIgbGVha3Mgb3IgcmV1c2VzIHN0YWxlIHBlci1jZ3JvdXAgc3RhdGVcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9DR1JQX1NUT1JBR0UpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0Mzt9IGN1cnNvcl9zdG9yZSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO3U2NCBCUEZfUFJPRyhpb2Nvc3RfMnhfY2FsY19jb3N0LCB1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLFxuJiM0MztcdCAgICAgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHBhZ2VzLCBzZWVrX3BhZ2VzID0gMCwgYmFzZSwgY29lZl9wYWdlLCByYW5kaW8sIGNvc3Q7XG4mIzQzO1xuJiM0MztcdGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7XG4mIzQzO1x0XHRiYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTztcbiYjNDM7XHR9IGVsc2UgaWYgKChvcGYgXHUwMDI2IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1dSSVRFKSB7XG4mIzQzO1x0XHRiYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd25cbiYjNDM7XHRcdCAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGVcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBtaXJyb3IgdGhlIGJ1aWx0aW4gc2luZ2xlIHBlci1jZ3JvdXAgY3Vyc29yOiB0aGUgbW9kZWwga2VlcHNcbiYjNDM7XHQgKiBpdHMgb3duIGN1cnNvciBrZXllZCBieSB0aGUgYmxrY2cgYXJndW1lbnRcbiYjNDM7XHQgKi9cbiYjNDM7XHR7XG4mIzQzO1x0XHRfX3U2NCAqY3Vyc29yLCBjdXI7XG4mIzQzO1xuJiM0MztcdFx0Y3Vyc29yID0gYnBmX2NncnBfc3RvcmFnZV9nZXQoXHUwMDI2Y3Vyc29yX3N0b3JlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgYmxrY2ctXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7XG4mIzQzO1x0XHRpZiAoIWN1cnNvcilcbiYjNDM7XHRcdFx0cmV0dXJuIDIgKiAoYmFzZSAmIzQzOyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlKTtcbiYjNDM7XHRcdGN1ciA9ICpjdXJzb3I7XG4mIzQzO1x0XHRzZWVrX3BhZ2VzID0gc2VjdG9yIFx1MDAzZSBjdXIgPyBzZWN0b3IgLSBjdXIgOiBjdXIgLSBzZWN0b3I7XG4mIzQzO1x0XHRzZWVrX3BhZ2VzIFx1MDAzZVx1MDAzZT0gSU9DX1NFQ1RfVE9fUEFHRV9TSElGVDtcbiYjNDM7XHRcdGlmIChzZWVrX3BhZ2VzIFx1MDAzZSBMQ09FRl9SQU5ESU9fUEFHRVMpXG4mIzQzO1x0XHRcdGJhc2UgPSByYW5kaW87XG4mIzQzO1x0XHRpZiAoIShtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkpXG4mIzQzO1x0XHRcdCpjdXJzb3IgPSBzZWN0b3IgJiM0MzsgUlUobmJ5dGVzLCA1MTIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFnZXMgPSBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpO1xuJiM0MztcdGlmICghcGFnZXMpXG4mIzQzO1x0XHRwYWdlcyA9IDE7XHQvKiBkYXRhbGVzcyBmbHVzaDogb25lIHBhZ2UgKi9cbiYjNDM7XHRpZiAobW9kZWxfZmxhZ3MgXHUwMDI2IElPQ09TVF9DT1NUX0ZfTUVSR0UpXG4mIzQzO1x0XHRiYXNlID0gMDtcbiYjNDM7XG4mIzQzO1x0Y29zdCA9IDIgKiAoYmFzZSAmIzQzOyBwYWdlcyAqIGNvZWZfcGFnZSk7XG4mIzQzO1x0cmV0dXJuIGNvc3Q7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbiYjNDM7c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgaW9jb3N0XzJ4ID0ge1xuJiM0MztcdC5jYWxjX2Nvc3QgPSAodm9pZCAqKWlvY29zdF8yeF9jYWxjX2Nvc3QsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtpb2Nvc3RfMnhcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2NjNTdjMDNkM2M4OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5AQCAtMCwwICYjNDM7MSwxMzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogRXhhbXBsZSBtdWx0aS1zdHJlYW0gc2VxdWVudGlhbGl0eSBkZXRlY3Rpb24gY29zdCBtb2RlbC5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGJ1aWx0aW4gbW9kZWwga2VlcHMgYSBzaW5nbGUgY3Vyc29yIHBlciBjZ3JvdXAsIHNvIHR3b1xuJiM0MzsgKiBpbnRlcmxlYXZlZCBzZXF1ZW50aWFsIHJlYWRlcnMgaW4gb25lIGNncm91cCBhcmUgYWxsIHByaWNlZCByYW5kb21cbiYjNDM7ICogKG1lYXN1cmVkIDg5eCBvdmVyY2hhcmdlLCAxMi45eCB0aHJvdWdocHV0IGNvbGxhcHNlKSwgd2hpbGUgcmFuZG9tXG4mIzQzOyAqIElPIGluc2lkZSBhIGhvdCB3aW5kb3cgc21hbGxlciB0aGFuIHRoZSAxNk1CIHNlZWsgdGhyZXNob2xkIGlzXG4mIzQzOyAqIHByaWNlZCBzZXF1ZW50aWFsIChtZWFzdXJlZCAxMDd4IHVuZGVyY2hhcmdlKS4gIFRoaXMgbW9kZWwgcmVwbGFjZXNcbiYjNDM7ICogdGhlIHNpbmdsZSBjdXJzb3Igd2l0aCBhIHBlci1jZ3JvdXAgdGFibGUgb2Ygc3RyZWFtIHNsb3RzOiBhbiBJTyBpc1xuJiM0MzsgKiBzZXF1ZW50aWFsIGlmZiBpdHMgc2VjdG9yIG1hdGNoZXMgdGhlIGV4cGVjdGVkIG5leHQgc2VjdG9yIG9mIGFueVxuJiM0MzsgKiB0cmFja2VkIHN0cmVhbS4gIEludGVybGVhdmVkIHN0cmVhbXMga2VlcCB0aGVpciBvd24gc2xvdHMsIGFuZFxuJiM0MzsgKiB3aW5kb3dlZCByYW5kb20gSU8gcmFyZWx5IG1hdGNoZXMgYSBtb3ZpbmcgZXhwZWN0YXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFN0cmVhbSBzdGF0ZSBsaXZlcyBpbiBhIENHUlBfU1RPUkFHRSBtYXAsIHNvIGl0IGlzIGNyZWF0ZWQgYW5kXG4mIzQzOyAqIGZyZWVkIHdpdGggdGhlIGNncm91cC4gIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGJ1aWx0aW5cbiYjNDM7ICogbGluZWFyIGZvcm11bGEgaXRzZWxmLCBpbmNsdWRpbmcgZmx1c2ggcHJpY2luZy5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7LyogVlRJTUVfUEVSX1NFQyBjb21lcyBmcm9tIHZtbGludXguaCAoYSBCVEYgZW51bSBjb25zdGFudCkgKi9cbiYjNDM7I2RlZmluZSBJT0NfUEFHRV9TSVpFXHRcdDQwOTZcbiYjNDM7I2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUXHQzXHQvKiA1MTJCIHNlY3RvcnMgdG8gNGtCIHBhZ2VzICovXG4mIzQzOyNkZWZpbmUgTENPRUZfUkFORElPX1BBR0VTXHQ0MDk2XHQvKiAxNk1CIHNlZWsgdGhyZXNob2xkICovXG4mIzQzOyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXHQvKiBub3QgaW4gQlRGOiBhIHBsYWluIG1hY3JvICovXG4mIzQzOyNkZWZpbmUgSU9DT1NUX1JFUV9PUF9NQVNLXHQweGZmXHRcdC8qIFJFUV9PUF9NQVNLLCBub3QgaW4gQlRGICovXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBESVY2NF9VNjRfUk9VTkRfVVAgLyBESVZfUk9VTkRfVVBfVUxMIGVxdWl2YWxlbnRzLCBmb2xkZWQgYXRcbiYjNDM7ICogY29tcGlsZSB0aW1lXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJVKHgsIHkpXHRcdCgoeCkgLyAoeSkgJiM0MzsgKCgoeCkgJSAoeSkpID8gMSA6IDApKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQlBTXHQxNzQwMTkxNzZVTExcbiYjNDM7I2RlZmluZSBSU0VRSU9QU1x0NDE3MDhVTExcbiYjNDM7I2RlZmluZSBSUkFORElPUFNcdDM3MFVMTFxuJiM0MzsjZGVmaW5lIFdCUFNcdDE3ODA3NTg2NlVMTFxuJiM0MzsjZGVmaW5lIFdTRVFJT1BTXHQ0MjcwNVVMTFxuJiM0MzsjZGVmaW5lIFdSQU5ESU9QU1x0Mzc4VUxMXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJQQUdFXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoUkJQUywgSU9DX1BBR0VfU0laRSkpKVxuJiM0MzsjZGVmaW5lIFJTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFJTRVFJT1BTKSAtIFJQQUdFKVxuJiM0MzsjZGVmaW5lIFJSQU5ESU9cdChSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpXG4mIzQzOyNkZWZpbmUgV1BBR0VcdChSVShWVElNRV9QRVJfU0VDLCBSVShXQlBTLCBJT0NfUEFHRV9TSVpFKSkpXG4mIzQzOyNkZWZpbmUgV1NFUUlPXHQoUlUoVlRJTUVfUEVSX1NFQywgV1NFUUlPUFMpIC0gV1BBR0UpXG4mIzQzOyNkZWZpbmUgV1JBTkRJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlNMT1RTXHQ0XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc3RyZWFtcyB7XG4mIzQzO1x0X191NjQgZXhwZWN0ZWRbTlNMT1RTXTtcdC8qIG5leHQgZXhwZWN0ZWQgc2VjdG9yLCBwZXIgc3RyZWFtICovXG4mIzQzO1x0X191NjQgc3RhbXBbTlNMT1RTXTtcdC8qIExSVSBzdGFtcCwgMCA9IGVtcHR5ICovXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBwZXItY2dyb3VwIHN0cmVhbSB0YWJsZToga2V5ZWQgYnkgdGhlIGNncm91cCwgZnJlZWQgd2l0aCBpdFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0NHUlBfU1RPUkFHRSk7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qgc3RyZWFtcyk7XG4mIzQzO30gc3RyZWFtX3RhYiBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO3U2NCBCUEZfUFJPRyhpb2Nvc3RfbXNfY2FsY19jb3N0LCB1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLFxuJiM0MztcdCAgICAgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN0cmVhbXMgKnM7XG4mIzQzO1x0dTY0IHBhZ2VzLCBiYXNlLCBjb2VmX3BhZ2UsIHJhbmRpbywgYWR2YW5jZSwgbm93O1xuJiM0MztcdHUzMiBpLCB2aWN0aW0gPSAwLCBmb3VuZCA9IDB4RkZGRkZGRkY7XG4mIzQzO1xuJiM0MztcdGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7XG4mIzQzO1x0XHRiYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTztcbiYjNDM7XHR9IGVsc2UgaWYgKChvcGYgXHUwMDI2IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1dSSVRFKSB7XG4mIzQzO1x0XHRiYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd25cbiYjNDM7XHRcdCAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGVcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRhZHZhbmNlID0gUlUobmJ5dGVzLCA1MTIpO1x0Lyogc2VjdG9ycyAqL1xuJiM0MztcbiYjNDM7XHRzID0gYnBmX2NncnBfc3RvcmFnZV9nZXQoXHUwMDI2c3RyZWFtX3RhYiwgYmxrY2ctXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcbiYjNDM7XHRcdFx0XHQgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTtcbiYjNDM7XHRpZiAoIXMpXG4mIzQzO1x0XHRyZXR1cm4gYmFzZSAmIzQzOyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlO1xuJiM0MztcbiYjNDM7XHRub3cgPSBicGZfa3RpbWVfZ2V0X25zKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlNMT1RTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHMtXHUwMDNlZXhwZWN0ZWRbaV0gPT0gc2VjdG9yIFx1MDAyNlx1MDAyNiBzLVx1MDAzZXN0YW1wW2ldKSB7XG4mIzQzO1x0XHRcdGZvdW5kID0gaTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmIChmb3VuZCAhPSAweEZGRkZGRkZGKSB7XG4mIzQzO1x0XHQvKiBzZXF1ZW50aWFsOiBrZWVwIHRoZSBzZXEgYmFzZSBmcm9tIHRoZSBvcCBicmFuY2ggKi9cbiYjNDM7XHRcdHMtXHUwMDNlZXhwZWN0ZWRbZm91bmRdID0gc2VjdG9yICYjNDM7IGFkdmFuY2U7XG4mIzQzO1x0XHRzLVx1MDAzZXN0YW1wW2ZvdW5kXSA9IG5vdztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0YmFzZSA9IHJhbmRpbztcbiYjNDM7XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIE5TTE9UUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHMtXHUwMDNlc3RhbXBbaV0gXHUwMDNjIHMtXHUwMDNlc3RhbXBbdmljdGltXSlcbiYjNDM7XHRcdFx0XHR2aWN0aW0gPSBpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cy1cdTAwM2VleHBlY3RlZFt2aWN0aW1dID0gc2VjdG9yICYjNDM7IGFkdmFuY2U7XG4mIzQzO1x0XHRzLVx1MDAzZXN0YW1wW3ZpY3RpbV0gPSBub3c7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwYWdlcyA9IFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSk7XG4mIzQzO1x0aWYgKCFwYWdlcylcbiYjNDM7XHRcdHBhZ2VzID0gMTtcdC8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqL1xuJiM0MztcdGlmIChtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIG1lcmdlZCBiaW9zIHNraXAgdGhlIGJhc2UgY29zdCBidXQgc3RpbGwgYWR2YW5jZVxuJiM0MztcdFx0ICogdGhlIHN0cmVhbSBwb3NpdGlvbiBhYm92ZSwgc28gYSBtZXJnZSBhdCB0aGVcbiYjNDM7XHRcdCAqIGV4cGVjdGVkIHNlY3RvciBkb2VzIG5vdCBtYWtlIHRoZSBmb2xsb3dpbmcgbmV3IElPXG4mIzQzO1x0XHQgKiBsb29rIHJhbmRvbVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRiYXNlID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBiYXNlICYjNDM7IHBhZ2VzICogY29lZl9wYWdlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7LnN0cnVjdF9vcHNcJiMzNDspXG4mIzQzO3N0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzIGlvY29zdF9tcyA9IHtcbiYjNDM7XHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfbXNfY2FsY19jb3N0LFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7aW9jb3N0X21zXCYjMzQ7LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUX0JQRiYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2NfYnBmX21vZGVsX2JpbmQmIzM0OywKICAgICYjMzQ7aW9jX2Nvc3RfbW9kZWxfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2FsY192dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2NhbGNfc2l6ZV92dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfdW5yZWcmIzM0OywKICAgICYjMzQ7YnBmX2lvY29zdF92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX2dldCYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX3B1dCYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IChpb2Nvc3RfbW9kZWxfb3BzKSBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzIGluIGJsay1pb2Nvc3QuIEl0IGludHJvZHVjZXMgbmV3IGtlcm5lbCBjb2RlIGluIGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgZm9yIHJlZ2lzdGVyaW5nLCB2YWxpZGF0aW5nLCBhbmQgbWFuYWdpbmcgQlBGIGNvc3QgbW9kZWxzLCBhbmQgdXBkYXRlcyBibG9jay9ibGstaW9jb3N0LmMgYW5kIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBtb2RlbHMgZHVyaW5nIElPIGNvc3QgY2FsY3VsYXRpb25zLCBjb25maWd1cmF0aW9uIHdyaXRlcywgYW5kIGNncm91cCBsaWZlY3ljbGUgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEJQRiBzeXNjYWxscyBhbmQgY2dyb3VwIHYyIGlvLmNvc3QubW9kZWwgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjNTBkNDAzNDM4YjRiNGUxODhiMTQ4YTBhYjVjYzRhZjViNjdhMDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxNDoxMDo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAppbmRleCA4ZDI2MDM3NTFjNTFhLi5hNjkxMGFkN2MyZDAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CkBAIC0yMTI0LDYgJiM0MzsyMTI0LDE3IEBAIElPIEludGVyZmFjZSBGaWxlcwogCXBhcmFtZXRlcnMgYXJlIHdyaXR0ZW4gdG8sICYjMzQ7Y3RybCYjMzQ7IGJlY29tZSAmIzM0O3VzZXImIzM0OyBhbmQgdGhlCiAJYXV0b21hdGljIGNoYW5nZXMgYXJlIGRpc2FibGVkLgogCiYjNDM7CVdoZW4gQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiBpcyBlbmFibGVkLCAmIzM0O21vZGVsJiMzNDsgYWxzbyBhY2NlcHRzCiYjNDM7CXRoZSBuYW1lIG9mIGEgcmVnaXN0ZXJlZCBpb2Nvc3RfbW9kZWxfb3BzIEJQRiBzdHJ1Y3Rfb3BzIG1vZGVsOgomIzQzOwkmIzM0O21vZGVsPSZsdDtuYW1lJmd0OyYjMzQ7IGJpbmRzIHRoZSBtb2RlbCB0byB0aGUgZGV2aWNlIGFuZCB0aGUgbW9kZWwgZnVsbHkKJiM0MzsJcmVwbGFjZXMgdGhlIGJ1aWx0aW4gbGluZWFyIHByaWNpbmcsIGZvciBldmVyeSBvcGVyYXRpb24gaW5jbHVkaW5nCiYjNDM7CWZsdXNoZXM7ICYjMzQ7bW9kZWw9bGluZWFyJiMzNDsgKG9yICYjMzQ7Y3RybD1hdXRvL3VzZXImIzM0OykgcmVzdG9yZXMgdGhlIGJ1aWx0aW4KJiM0MzsJbW9kZWwuICBXcml0aW5nIGFuIHVua25vd24gbmFtZSBmYWlscyB3aXRoIEVOT0VOVC4gIFVucmVnaXN0ZXJpbmcKJiM0MzsJYSBtb2RlbCByZW1vdmVzIGl0cyBuYW1lOyBkZXZpY2VzIGFscmVhZHkgYm91bmQga2VlcCB1c2luZyBpdAomIzQzOwl1bnRpbCBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBidWlsdGluIG1vZGVsLCBmb2xsb3dpbmcgdGhlIGxpZmV0aW1lCiYjNDM7CW1vZGVsIG9mIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuICBTZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmgKJiM0MzsJZm9yIHRoZSBtb2RlbCBpbnRlcmZhY2UuCiYjNDM7CiAJV2hlbiAmIzM0O21vZGVsJiMzNDsgaXMgJiMzNDtsaW5lYXImIzM0OywgdGhlIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzIGFyZQogCWRlZmluZWQuCiAKZGlmZiAtLWdpdCBhL2Jsb2NrL0tjb25maWcgYi9ibG9jay9LY29uZmlnCmluZGV4IDcwZTRhNjZkOTQxZmYuLjkxZTgwOGY4NmQyOGQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svS2NvbmZpZwpAQCAtMjMxLDQgJiM0MzsyMzEsMTMgQEAgY29uZmlnIEJMS19FUlJPUl9JTkpFQ1RJT04KIAogc291cmNlICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkJiMzNDsKIAomIzQzO2NvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJYm9vbCAmIzM0O0VuYWJsZSBCUEYgcGx1Z2dhYmxlIGNvc3QgbW9kZWwgc3VwcG9ydCBmb3IgdGhlIGNvc3QgSU8gY29udHJvbGxlciYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQkxLX0NHUk9VUF9JT0NPU1QgJmFtcDsmYW1wOyBCUEZfU1lTQ0FMTCAmYW1wOyZhbXA7IEJQRl9KSVQgJmFtcDsmYW1wOyBERUJVR19JTkZPX0JURgomIzQzOwloZWxwCiYjNDM7CSBFbmFibGluZyB0aGlzIG9wdGlvbiByZWdpc3RlcnMgdGhlICYjMzQ7aW9jb3N0X21vZGVsX29wcyYjMzQ7IEJQRgomIzQzOwkgc3RydWN0X29wcyB0eXBlLCB3aGljaCBhbGxvd3MgYSBCUEYgcHJvZ3JhbSB0byBmdWxseSByZXBsYWNlCiYjNDM7CSB0aGUgYnVpbHRpbiBsaW5lYXIgY29zdCBtb2RlbCBvbiBhIGRldmljZSBpdCBpcyBib3VuZCB0bwomIzQzOwkgdGhyb3VnaCBpby5jb3N0Lm1vZGVsLgomIzQzOwogZW5kaWYgIyBCTE9DSwpkaWZmIC0tZ2l0IGEvYmxvY2svTWFrZWZpbGUgYi9ibG9jay9NYWtlZmlsZQppbmRleCBlN2JkMzIwZTNkNjk3Li5lZTVjZWJlZWEwMDZmIDEwMDY0NAotLS0gYS9ibG9jay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9NYWtlZmlsZQpAQCAtMzksMyAmIzQzOzM5LDQgQEAgb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTikJJiM0Mzs9IGJsay1jcnlwdG8ubyBibGstY3J5cHRvLXByb2ZpbGUubyBcCiAJCQkJCSAgIGJsay1jcnlwdG8tc3lzZnMubwogb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSykJJiM0Mzs9IGJsay1jcnlwdG8tZmFsbGJhY2subwogb2JqLSQoQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEKQkmIzQzOz0gaG9sZGVyLm8KJiM0MztvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGKQkmIzQzOz0gYmxrLWlvY29zdC1icGYubwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IDJiNWMyOTQzNGU0MjYuLjg3Mjg3MTA0NTM1MWMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTMyLDYgJiM0MzszMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGFydF9zdGF0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2Jsay5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YmxrLWNncm91cC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrLWlvY29zdC5oJmd0OwogI2luY2x1ZGUgJiMzNDtibGstaW9wcmlvLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtibGstdGhyb3R0bGUuaCYjMzQ7CiAKQEAgLTEzNDEsNiAmIzQzOzEzNDIsNyBAQCB2b2lkIGJsa2NnX3VucGluX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqYmxrY2dfY3NzKQogICovCiBzdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogewomIzQzOwlpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoY3NzX3RvX2Jsa2NnKGNzcykpOwogCS8qIHRoaXMgcHJldmVudHMgYW55b25lIGZyb20gYXR0YWNoaW5nIG9yIG1pZ3JhdGluZyB0byB0aGlzIGJsa2NnICovCiAJd2JfYmxrY2dfb2ZmbGluZShjc3MpOwogCkBAIC0xNDQ1LDYgJiM0MzsxNDQ3LDcgQEAgYmxrY2dfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKQogCiBzdGF0aWMgaW50IGJsa2NnX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIHsKJiM0MzsJaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoY3NzX3RvX2Jsa2NnKGNzcykpOwogCXN0cnVjdCBibGtjZyAqcGFyZW50ID0gYmxrY2dfcGFyZW50KGNzc190b19ibGtjZyhjc3MpKTsKIAogCS8qCmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jb3N0LWJwZi5jIGIvYmxvY2svYmxrLWlvY29zdC1icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZWM2ZGYyNzk1OTkwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvY29zdC1icGYuYwpAQCAtMCwwICYjNDM7MSwyNTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogYmxrLWlvY29zdDogQlBGIHN0cnVjdF9vcHMgcGx1bWJpbmcgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscy4KJiM0MzsgKgomIzQzOyAqIFJlZ2lzdGVycyB0aGUgJiMzNDtpb2Nvc3RfbW9kZWxfb3BzJiMzNDsgc3RydWN0X29wcyB0eXBlIGFuZCBtYWludGFpbnMgdGhlCiYjNDM7ICogbmFtZSByZWdpc3RyeSBvZiByZWdpc3RlcmVkIG1vZGVscy4gIEEgcmVnaXN0ZXJlZCBtb2RlbCBpcyBib3VuZCB0bwomIzQzOyAqIGEgZGV2aWNlIHRocm91Z2ggaW8uY29zdC5tb2RlbDsgc2VlIGluY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmX3ZlcmlmaWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ibGstaW9jb3N0LmgmZ3Q7CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9NVVRFWChpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0MztzdGF0aWMgTElTVF9IRUFEKGlvY29zdF9icGZfbW9kZWxzKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSByZWdpc3RyeSBob2xkcyBhIGJwZl9zdHJ1Y3Rfb3BzX2dldCgpIHJlZmVyZW5jZSBvYnRhaW5lZCBpbiAucmVnOwomIzQzOyAqIC51bnJlZyBkcm9wcyBpdCwgc28gdGhlIGtkYXRhIG9mIGFuIHVucmVnaXN0ZXJlZCBtb2RlbCBzdGF5cyBhbGl2ZQomIzQzOyAqIHdoaWxlIGFueSBkZXZpY2UgaXMgc3RpbGwgYm91bmQgdG8gaXQuCiYjNDM7ICovCiYjNDM7c3RydWN0IGlvY29zdF9icGZfbW9kZWwgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHM7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIExvb2sgdXAgYSByZWdpc3RlcmVkIG1vZGVsIGJ5IG5hbWUgYW5kIGFjcXVpcmUgYSByZWZlcmVuY2Ugb24gaXQuCiYjNDM7ICogVGhlIHJlZ2lzdHJ5IGxvY2sgaXMgaGVsZCBhY3Jvc3MgbG9va3VwIGFuZCBicGZfc3RydWN0X29wc19nZXQoKSBzbwomIzQzOyAqIHRoZSBtb2RlbCBjYW5ub3QgYmUgdW5yZWdpc3RlcmVkIGluIGJldHdlZW4uCiYjNDM7ICovCiYjNDM7aW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJIGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptOwomIzQzOwlpbnQgcmV0ID0gLUVOT0VOVDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZhbXA7aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHsKJiM0MzsJCWlmICghc3RyY21wKG0tJmd0O29wcy0mZ3Q7bmFtZSwgbmFtZSkpIHsKJiM0MzsJCQlpZiAoYnBmX3N0cnVjdF9vcHNfZ2V0KG0tJmd0O29wcykpIHsKJiM0MzsJCQkJKm9wc3AgPSBtLSZndDtvcHM7CiYjNDM7CQkJCXJldCA9IDA7CiYjNDM7CQkJfQomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpCiYjNDM7ewomIzQzOwlicGZfc3RydWN0X29wc19wdXQob3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICoKJiM0Mztpb2Nvc3RfYnBmX21vZGVsX2xvb2t1cChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJmFtcDtpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkgewomIzQzOwkJaWYgKG0tJmd0O29wcyA9PSBvcHMpCiYjNDM7CQkJcmV0dXJuIG07CiYjNDM7CX0KJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmYW1wO2lvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7CiYjNDM7CQlpZiAobS0mZ3Q7b3BzLSZndDtibGtjZ19vbmxpbmUpCiYjNDM7CQkJbS0mZ3Q7b3BzLSZndDtibGtjZ19vbmxpbmUoYmxrY2cpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7aW9jb3N0X2JwZl9yZWdfbG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJmFtcDtpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkgewomIzQzOwkJaWYgKG0tJmd0O29wcy0mZ3Q7YmxrY2dfb2ZmbGluZSkKJiM0MzsJCQltLSZndDtvcHMtJmd0O2Jsa2NnX29mZmxpbmUoYmxrY2cpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF9tb2RlbF9pbml0KHN0cnVjdCBidGYgKmJ0ZikKJiM0Mzt7CiYjNDM7CXMzMiB0eXBlX2lkOwomIzQzOwomIzQzOwl0eXBlX2lkID0gYnRmX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgJiMzNDtpb2Nvc3RfbW9kZWxfb3BzJiMzNDssIEJURl9LSU5EX1NUUlVDVCk7CiYjNDM7CWlmICh0eXBlX2lkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsCiYjNDM7CQkJCSAgICAgICBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGJwZl9pbnNuX2FjY2Vzc19hdXggKmluZm8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYnBmX3RyYWNpbmdfYnRmX2N0eF9hY2Nlc3Mob2ZmLCBzaXplLCB0eXBlLCBwcm9nLCBpbmZvKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqCiYjNDM7YnBmX2lvY29zdF9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsCiYjNDM7CQkJICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGZ1bmNfaWQpIHsKJiM0MzsjaWZkZWYgQ09ORklHX0NHUk9VUFMKJiM0MzsJY2FzZSBCUEZfRlVOQ19jZ3JwX3N0b3JhZ2VfZ2V0OgomIzQzOwkJcmV0dXJuICZhbXA7YnBmX2NncnBfc3RvcmFnZV9nZXRfcHJvdG87CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gYnBmX2Jhc2VfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlciwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQomIzQzO3sKJiM0MzsJLyogY2FsY19jb3N0KCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkICovCiYjNDM7CWlmIChwcm9nLSZndDtzbGVlcGFibGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlciwKJiM0MzsJCQkJICB2b2lkICprZGF0YSwgY29uc3Qgdm9pZCAqdWRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICp1b3BzID0gdWRhdGE7CiYjNDM7CXUzMiBtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7CiYjNDM7CiYjNDM7CXN3aXRjaCAobW9mZikgewomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzLCBuYW1lKToKJiM0MzsJCWlmIChicGZfb2JqX25hbWVfY3B5KG9wcy0mZ3Q7bmFtZSwgdW9wcy0mZ3Q7bmFtZSwKJiM0MzsJCQkJICAgICBzaXplb2Yob3BzLSZndDtuYW1lKSkgJmx0Oz0gMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9pb2Nvc3RfdmFsaWRhdGUodm9pZCAqa2RhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7CiYjNDM7CiYjNDM7CXJldHVybiBvcHMtJmd0O2NhbGNfY29zdCA/IDAgOiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9pb2Nvc3RfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFicGZfc3RydWN0X29wc19nZXQob3BzKSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwltID0ga3phbGxvYyhzaXplb2YoKm0pLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtKSB7CiYjNDM7CQlicGZfc3RydWN0X29wc19wdXQob3BzKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0MzsJewomIzQzOwkJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm90aGVyOwomIzQzOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgJmFtcDtpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkgewomIzQzOwkJCWlmICghc3RyY21wKG90aGVyLSZndDtvcHMtJmd0O25hbWUsIG9wcy0mZ3Q7bmFtZSkpIHsKJiM0MzsJCQkJcmV0ID0gLUVFWElTVDsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmICghcmV0KSB7CiYjNDM7CQltLSZndDtvcHMgPSBvcHM7CiYjNDM7CQlsaXN0X2FkZCgmYW1wO20tJmd0O2xpc3QsICZhbXA7aW9jb3N0X2JwZl9tb2RlbHMpOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlicGZfc3RydWN0X29wc19wdXQob3BzKTsKJiM0MzsJCWtmcmVlKG0pOwomIzQzOwl9CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJwZl9pb2Nvc3RfdW5yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTsKJiM0MzsJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0MzsJbSA9IGlvY29zdF9icGZfbW9kZWxfbG9va3VwKG9wcyk7CiYjNDM7CWlmIChtKSB7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO20tJmd0O2xpc3QpOwomIzQzOwkJYnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7CiYjNDM7CQlrZnJlZShtKTsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9pb2Nvc3RfdmVyaWZpZXJfb3BzID0gewomIzQzOwkuZ2V0X2Z1bmNfcHJvdG8gPSBicGZfaW9jb3N0X2dldF9mdW5jX3Byb3RvLAomIzQzOwkuaXNfdmFsaWRfYWNjZXNzID0gYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IGJwZl9pb2Nvc3RfY2FsY19jb3N0X3N0dWIodTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvciwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzIF9fYnBmX29wc19pb2Nvc3RfbW9kZWxfb3BzID0gewomIzQzOwkuY2FsY19jb3N0ID0gYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1YiwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2lvY29zdF9tb2RlbF9vcHMgPSB7CiYjNDM7CS52ZXJpZmllcl9vcHMgPSAmYW1wO2JwZl9pb2Nvc3RfdmVyaWZpZXJfb3BzLAomIzQzOwkuaW5pdCA9IGJwZl9pb2Nvc3RfbW9kZWxfaW5pdCwKJiM0MzsJLmNoZWNrX21lbWJlciA9IGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyLAomIzQzOwkuaW5pdF9tZW1iZXIgPSBicGZfaW9jb3N0X2luaXRfbWVtYmVyLAomIzQzOwkudmFsaWRhdGUgPSBicGZfaW9jb3N0X3ZhbGlkYXRlLAomIzQzOwkucmVnID0gYnBmX2lvY29zdF9yZWcsCiYjNDM7CS51bnJlZyA9IGJwZl9pb2Nvc3RfdW5yZWcsCiYjNDM7CS5uYW1lID0gJiMzNDtpb2Nvc3RfbW9kZWxfb3BzJiMzNDssCiYjNDM7CS5jZmlfc3R1YnMgPSAmYW1wO19fYnBmX29wc19pb2Nvc3RfbW9kZWxfb3BzLAomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9pb2Nvc3RfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKCZhbXA7YnBmX2lvY29zdF9tb2RlbF9vcHMsIGlvY29zdF9tb2RlbF9vcHMpOwomIzQzO30KJiM0MztsYXRlX2luaXRjYWxsKGJwZl9pb2Nvc3RfaW5pdCk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jb3N0LmMgYi9ibG9jay9ibGstaW9jb3N0LmMKaW5kZXggMjc0NWJmZmNkNWVlZi4uYmNjZGJkMjQ5NmQ4MyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWlvY29zdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1pb2Nvc3QuYwpAQCAtMTc3LDYgJiM0MzsxNzcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFyc2VyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Jsay1pb2Nvc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDthc20vbG9jYWwuaCZndDsKICNpbmNsdWRlICZsdDthc20vbG9jYWw2NC5oJmd0OwpAQCAtNDQ1LDYgJiM0Mzs0NDYsMTEgQEAgc3RydWN0IGlvYyB7CiAJaW50CQkJCWF1dG9wX2lkeDsKIAlib29sCQkJCXVzZXJfcW9zX3BhcmFtczoxOwogCWJvb2wJCQkJdXNlcl9jb3N0X21vZGVsOjE7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJLyogYm91bmQgQlBGIGNvc3QgbW9kZWwsIE5VTEwgPSBidWlsdGluIGxpbmVhciBtb2RlbCAqLwomIzQzOwljb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcwlfX3JjdSAqbW9kZWw7CiYjNDM7I2VuZGlmCiB9OwogCiBzdHJ1Y3QgaW9jZ19wY3B1X3N0YXQgewpAQCAtMjIzOCw2ICYjNDM7MjI0NCw3IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiAJc3RydWN0IGlvY19ub3cgbm93OwogCUxJU1RfSEVBRChzdXJwbHVzZXMpOwogCWludCBucl9kZWJ0b3JzLCBucl9zaG9ydGFnZXMgPSAwLCBucl9sYWdnaW5nID0gMDsKJiM0MzsJaW50IG5yX2FjdGl2ZSA9IDA7CiAJdTY0IHVzYWdlX3VzX3N1bSA9IDA7CiAJdTMyIHBwbV9ydGhyOwogCXUzMiBwcG1fd3RocjsKQEAgLTIyNzQsNiAmIzQzOzIyODEsOCBAQCBzdGF0aWMgdm9pZCBpb2NfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogCQl1NjQgdmRvbmUsIHZ0aW1lLCB1c2FnZV91czsKIAkJdTMyIGh3X2FjdGl2ZSwgaHdfaW51c2U7CiAKJiM0MzsJCW5yX2FjdGl2ZSYjNDM7JiM0Mzs7CiYjNDM7CiAJCS8qCiAJCSAqIENvbGxlY3QgdW51c2VkIGFuZCB3aW5kIHZ0aW1lIGNsb3NlciB0byB2bm93IHRvIHByZXZlbnQKIAkJICogaW9jZ3MgZnJvbSBhY2N1bXVsYXRpbmcgYSBsYXJnZSBhbW91bnQgb2YgYnVkZ2V0LgpAQCAtMjQ2MCw2ICYjNDM7MjQ2OSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiAJCWlvY19yZWZyZXNoX3ZyYXRlKGlvYywgJmFtcDtub3cpOwogCX0KIAomIzQzOwl0cmFjZV9pb2Nvc3RfaW9jX3RpY2soaW9jLCBucl9hY3RpdmUsIHVzYWdlX3VzX3N1bSk7CiYjNDM7CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKIH0KIApAQCAtMjU3MSwxMCAmIzQzOzI1ODIsMjggQEAgc3RhdGljIHZvaWQgY2FsY192dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW9jX2dxICppb2NnLAogCiBzdGF0aWMgdTY0IGNhbGNfdnRpbWVfY29zdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb2NfZ3EgKmlvY2csIGJvb2wgaXNfbWVyZ2UpCiB7CiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsOwogCXU2NCBjb3N0OwogCi0JY2FsY192dGltZV9jb3N0X2J1aWx0aW4oYmlvLCBpb2NnLCBpc19tZXJnZSwgJmFtcDtjb3N0KTsKLQlyZXR1cm4gY29zdDsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltb2RlbCA9IHJjdV9kZXJlZmVyZW5jZShpb2NnLSZndDtpb2MtJmd0O21vZGVsKTsKJiM0MzsJaWYgKG1vZGVsKSB7CiYjNDM7CQljb3N0ID0gbW9kZWwtJmd0O2NhbGNfY29zdChiaW8tJmd0O2JpX29wZiwgYmlvLSZndDtiaV9pdGVyLmJpX3NpemUsCiYjNDM7CQkJCQliaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yLAomIzQzOwkJCQkJaW9jZ190b19ibGtnKGlvY2cpLSZndDtibGtjZywKJiM0MzsJCQkJCWlzX21lcmdlID8gSU9DT1NUX0NPU1RfRl9NRVJHRSA6IDApOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOyNlbmRpZgomIzQzOwl7CiYjNDM7CQl1NjQgY29zdDsKJiM0MzsKJiM0MzsJCWNhbGNfdnRpbWVfY29zdF9idWlsdGluKGJpbywgaW9jZywgaXNfbWVyZ2UsICZhbXA7Y29zdCk7CiYjNDM7CQlyZXR1cm4gY29zdDsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvYyAqaW9jLApAQCAtMjU5NiwxMCAmIzQzOzI2MjUsMjggQEAgc3RhdGljIHZvaWQgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYywKIAogc3RhdGljIHU2NCBjYWxjX3NpemVfdnRpbWVfY29zdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYykKIHsKLQl1NjQgY29zdDsKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwljb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7CiAKLQljYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHJxLCBpb2MsICZhbXA7Y29zdCk7Ci0JcmV0dXJuIGNvc3Q7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbW9kZWwgPSByY3VfZGVyZWZlcmVuY2UoaW9jLSZndDttb2RlbCk7CiYjNDM7CWlmIChtb2RlbCAmYW1wOyZhbXA7IHJxLSZndDtiaW8gJmFtcDsmYW1wOyBycS0mZ3Q7YmlvLSZndDtiaV9ibGtnKSB7CiYjNDM7CQl1NjQgY29zdDsKJiM0MzsKJiM0MzsJCWNvc3QgPSBtb2RlbC0mZ3Q7Y2FsY19jb3N0KHJxLSZndDtjbWRfZmxhZ3MsIGJsa19ycV9ieXRlcyhycSksCiYjNDM7CQkJCQlibGtfcnFfcG9zKHJxKSwKJiM0MzsJCQkJCXJxLSZndDtiaW8tJmd0O2JpX2Jsa2ctJmd0O2Jsa2NnLCAwKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIG1pbihjb3N0LCBWVElNRV9QRVJfU0VDKTsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsjZW5kaWYKJiM0MzsJewomIzQzOwkJdTY0IGNvc3Q7CiYjNDM7CiYjNDM7CQljYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHJxLCBpb2MsICZhbXA7Y29zdCk7CiYjNDM7CQlyZXR1cm4gY29zdDsKJiM0MzsJfQogfQogCiBlbnVtIG92ZXJfYnVkZ2V0X2FjdGlvbiB7CkBAIC0yOTAwLDYgJiM0MzsyOTQ3LDE5IEBAIHN0YXRpYyB2b2lkIGlvY19ycW9zX2V4aXQoc3RydWN0IHJxX3FvcyAqcnFvcykKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtpb2MtJmd0O3RpbWVyKTsKIAlmcmVlX3BlcmNwdShpb2MtJmd0O3BjcHVfc3RhdCk7CiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJewomIzQzOwkJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2lycSgmYW1wO2lvYy0mZ3Q7bG9jayk7CiYjNDM7CQltb2RlbCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLSZndDttb2RlbCwKJiM0MzsJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO2lvYy0mZ3Q7bG9jaykpOwomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKGlvYy0mZ3Q7bW9kZWwsIE5VTEwpOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKJiM0MzsJCWlmIChtb2RlbCkKJiM0MzsJCQlpb2Nvc3RfYnBmX21vZGVsX3B1dChtb2RlbCk7CiYjNDM7CX0KJiM0MzsjZW5kaWYKIAlrZnJlZShpb2MpOwogfQogCkBAIC0zNDM4LDEyICYjNDM7MzQ5OCwzMCBAQCBzdGF0aWMgdTY0IGlvY19jb3N0X21vZGVsX3ByZmlsbChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLAogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwomIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGCiYjNDM7CXsKJiM0MzsJCWNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICptb2RlbCA9CiYjNDM7CQkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtJmd0O21vZGVsLAomIzQzOwkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7aW9jLSZndDtsb2NrKSk7CiYjNDM7CiYjNDM7CQlzZXFfcHJpbnRmKHNmLCAmIzM0OyVzIGN0cmw9JXMgbW9kZWw9JXMgJiMzNDsKJiM0MzsJCQkgICAmIzM0O3JicHM9JWxsdSByc2VxaW9wcz0lbGx1IHJyYW5kaW9wcz0lbGx1ICYjMzQ7CiYjNDM7CQkJICAgJiMzNDt3YnBzPSVsbHUgd3NlcWlvcHM9JWxsdSB3cmFuZGlvcHM9JWxsdVxuJiMzNDssCiYjNDM7CQkJICAgZG5hbWUsIG1vZGVsID8gJiMzNDticGYmIzM0OyA6CiYjNDM7CQkJCSAgIGlvYy0mZ3Q7dXNlcl9jb3N0X21vZGVsID8gJiMzNDt1c2VyJiMzNDsgOiAmIzM0O2F1dG8mIzM0OywKJiM0MzsJCQkgICBtb2RlbCA/IG1vZGVsLSZndDtuYW1lIDogJiMzNDtsaW5lYXImIzM0OywKJiM0MzsJCQkgICB1W0lfTENPRUZfUkJQU10sIHVbSV9MQ09FRl9SU0VRSU9QU10sCiYjNDM7CQkJICAgdVtJX0xDT0VGX1JSQU5ESU9QU10sIHVbSV9MQ09FRl9XQlBTXSwKJiM0MzsJCQkgICB1W0lfTENPRUZfV1NFUUlPUFNdLCB1W0lfTENPRUZfV1JBTkRJT1BTXSk7CiYjNDM7CX0KJiM0MzsjZWxzZQogCXNlcV9wcmludGYoc2YsICYjMzQ7JXMgY3RybD0lcyBtb2RlbD1saW5lYXIgJiMzNDsKIAkJICAgJiMzNDtyYnBzPSVsbHUgcnNlcWlvcHM9JWxsdSBycmFuZGlvcHM9JWxsdSAmIzM0OwogCQkgICAmIzM0O3dicHM9JWxsdSB3c2VxaW9wcz0lbGx1IHdyYW5kaW9wcz0lbGx1XG4mIzM0OywKIAkJICAgZG5hbWUsIGlvYy0mZ3Q7dXNlcl9jb3N0X21vZGVsID8gJiMzNDt1c2VyJiMzNDsgOiAmIzM0O2F1dG8mIzM0OywKIAkJICAgdVtJX0xDT0VGX1JCUFNdLCB1W0lfTENPRUZfUlNFUUlPUFNdLCB1W0lfTENPRUZfUlJBTkRJT1BTXSwKIAkJICAgdVtJX0xDT0VGX1dCUFNdLCB1W0lfTENPRUZfV1NFUUlPUFNdLCB1W0lfTENPRUZfV1JBTkRJT1BTXSk7CiYjNDM7I2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM0NTcsNiAmIzQzOzM1MzUsMzcgQEAgc3RhdGljIGludCBpb2NfY29zdF9tb2RlbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEJpbmQgQG5hbWUgKGVtcHR5ID0gYnVpbHRpbiBsaW5lYXIgbW9kZWwpIGFzIHRoZSBhY3RpdmUgY29zdCBtb2RlbCBvZgomIzQzOyAqIEBpb2MuICBUaGUgcmVnaXN0cnkgbG9va3VwIGFuZCByZWZlcmVuY2UgbWFuYWdlbWVudCBoYXBwZW4gb3V0c2lkZQomIzQzOyAqIGlvYy0mZ3Q7bG9jazsgdGhlIHBvaW50ZXIgc3dhcCBoYXBwZW5zIHVuZGVyIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgaW9jX2JwZl9tb2RlbF9iaW5kKHN0cnVjdCBpb2MgKmlvYywgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm5ldyA9IE5VTEwsICpvbGQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChuYW1lWzBdKSB7CiYjNDM7CQlyZXQgPSBpb2Nvc3RfYnBmX21vZGVsX2dldChuYW1lLCAmYW1wO25ldyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO2lvYy0mZ3Q7bG9jayk7CiYjNDM7CW9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLSZndDttb2RlbCwKJiM0MzsJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO2lvYy0mZ3Q7bG9jaykpOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoaW9jLSZndDttb2RlbCwgbmV3KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWlvY29zdF9icGZfbW9kZWxfcHV0KG9sZCk7CiYjNDM7CXJldHVybiAwOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBuYW1lWzBdID8gLUVOT0VOVCA6IDA7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgY29zdF9jdHJsX3Rva2VucyA9IHsKIAl7IENPU1RfQ1RSTCwJCSYjMzQ7Y3RybD0lcyYjMzQ7CX0sCiAJeyBDT1NUX01PREVMLAkJJiMzNDttb2RlbD0lcyYjMzQ7CX0sCkBAIC0zNDgyLDYgJiM0MzszNTkxLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCwKIAlzdHJ1Y3QgaW9jICppb2M7CiAJdTY0IHVbTlJfSV9MQ09FRlNdOwogCWJvb2wgdXNlcjsKJiM0MzsJY2hhciBicGZfbW9kZWxbSU9DT1NUX01PREVMX05BTUVfTEVOXTsKIAljaGFyICpib2R5LCAqcDsKIAlpbnQgcmV0OwogCkBAIC0zNTEyLDYgJiM0MzszNjIyLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCwKIAlzcGluX2xvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKIAltZW1jcHkodSwgaW9jLSZndDtwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7CiAJdXNlciA9IGlvYy0mZ3Q7dXNlcl9jb3N0X21vZGVsOwomIzQzOwlicGZfbW9kZWxbMF0gPSAmIzM5O1wwJiMzOTs7CiAKIAlyZXQgPSAtRUlOVkFMOwogCkBAIC0zNTMzLDExICYjNDM7MzY0NCwxNiBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LAogCQkJCXVzZXIgPSB0cnVlOwogCQkJZWxzZQogCQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCWJwZl9tb2RlbFswXSA9ICYjMzk7XDAmIzM5OzsKIAkJCWNvbnRpbnVlOwogCQljYXNlIENPU1RfTU9ERUw6CiAJCQltYXRjaF9zdHJsY3B5KGJ1ZiwgJmFtcDthcmdzWzBdLCBzaXplb2YoYnVmKSk7Ci0JCQlpZiAoc3RyY21wKGJ1ZiwgJiMzNDtsaW5lYXImIzM0OykpCi0JCQkJZ290byB1bmxvY2s7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmLCAmIzM0O2xpbmVhciYjMzQ7KSkgewomIzQzOwkJCQkvKiBiYWNrIHRvIHRoZSBidWlsdGluIGxpbmVhciBtb2RlbCAqLwomIzQzOwkJCQlicGZfbW9kZWxbMF0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCQltYXRjaF9zdHJsY3B5KGJwZl9tb2RlbCwgJmFtcDthcmdzWzBdLCBzaXplb2YoYnBmX21vZGVsKSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0zNTYzLDYgJiM0MzszNjc5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsCiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKIAomIzQzOwkvKgomIzQzOwkgKiBCaW5kIHRoZSBCUEYgbW9kZWwgb3V0c2lkZSBpb2MtJmd0O2xvY2s6IHRoZSByZWdpc3RyeSBsb29rdXAKJiM0MzsJICogdGFrZXMgdGhlIHJlZ2lzdHJhdGlvbiBtdXRleCBhbmQgdGhlIG9sZCBtb2RlbCYjMzk7cyByZWZlcmVuY2UKJiM0MzsJICogaXMgZHJvcHBlZCBhZnRlciB0aGUgc3dhcC4KJiM0MzsJICovCiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0ID0gaW9jX2JwZl9tb2RlbF9iaW5kKGlvYywgYnBmX21vZGVsKTsKJiM0MzsKIAlibGtfbXFfdW5xdWllc2NlX3F1ZXVlKHEpOwogCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oIGIvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2EwODU1ZWZiNjEwNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oCkBAIC0wLDAgJiM0MzsxLDgyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9MSU5VWF9CTEtfSU9DT1NUX0gKJiM0MzsjZGVmaW5lIF9MSU5VWF9CTEtfSU9DT1NUX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrX3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBJT0NPU1RfTU9ERUxfTkFNRV9MRU4JMTYKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwomIzQzO3N0cnVjdCBibGtjZzsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBsdWdnYWJsZSBjb3N0IG1vZGVsIGludGVyZmFjZSBmb3IgYmxrLWlvY29zdC4KJiM0MzsgKgomIzQzOyAqIEEgQlBGIHN0cnVjdF9vcHMgaW1wbGVtZW50YXRpb24gcmVnaXN0ZXJlZCBhZ2FpbnN0ICYjMzQ7aW9jb3N0X21vZGVsX29wcyYjMzQ7CiYjNDM7ICogZnVsbHkgcmVwbGFjZXMgdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsIG9uIHRoZSBkZXZpY2VzIGl0IGlzIGJvdW5kIHRvCiYjNDM7ICogdGhyb3VnaCBpby5jb3N0Lm1vZGVsLiAgVGhlIG1vZGVsIG93bnMgcHJpY2luZyBmb3IgZXZlcnkgSU8gb24gYSBib3VuZAomIzQzOyAqIGRldmljZTogaXQgcHJpY2VzIGFsbCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgZmx1c2hlcywgYW5kIGJvdGggdGhlIGJpbwomIzQzOyAqIGNoYXJnaW5nIHBhdGggYW5kIHRoZSByZXF1ZXN0LWxldmVsIHNpemluZyBwYXRoIGNvbnN1bHQgaXQuCiYjNDM7ICoKJiM0MzsgKiBjYWxjX2Nvc3QoKSBpcyBjYWxsZWQgZnJvbSB0aGUgSU8gc3VibWlzc2lvbiBwYXRoIHdpdGggUkNVIHJlYWQgbG9jawomIzQzOyAqIGhlbGQgYW5kIG11c3Qgbm90IHNsZWVwLiAgSXQgcmV0dXJucyB0aGUgY29zdCBvZiB0aGUgSU8gaW4gdnRpbWUKJiM0MzsgKiB1bml0cywgd2hlcmUgMSBzZWNvbmQgb2YgZGV2aWNlIHRpbWUgZXF1YWxzIFZUSU1FX1BFUl9TRUMgKDJeMzcsCiYjNDM7ICogYXZhaWxhYmxlIHRvIEJQRiBwcm9ncmFtcyB0aHJvdWdoIHZtbGludXguaCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgaXMKJiM0MzsgKiBjbGFtcGVkIHRvIDEgc2Vjb25kIG9mIGRldmljZSB0aW1lIHBlciBJTy4KJiM0MzsgKgomIzQzOyAqIFRoZSBtb2RlbCBpcyBwYXNzZWQgdGhlIGJsa2NnIG9mIHRoZSBpc3N1aW5nIGNncm91cCBzbyBpdCBjYW4ga2VlcAomIzQzOyAqIHBlci1jZ3JvdXAgc3RhdGUuICBibGtjZ19vbmxpbmUoKS9ibGtjZ19vZmZsaW5lKCkgYXJlIG9wdGlvbmFsCiYjNDM7ICogY2FsbGJhY2tzIG1pcnJvcmluZyB0aGUgYmxrY2cgY3NzIGxpZmVjeWNsZTogc3RhdGUgY3JlYXRlZCBvbiBvbmxpbmUKJiM0MzsgKiAob3IgbGF6aWx5IG9uIGZpcnN0IHVzZSkgbXVzdCBiZSByZWxlYXNlZCBvbiBvZmZsaW5lLgomIzQzOyAqCiYjNDM7ICogVGhlIHJlZ2lzdHJhdGlvbiBhbmQgYmluZGluZyBtb2RlbCBmb2xsb3dzIHRoZSBUQ1AgY29uZ2VzdGlvbgomIzQzOyAqIGNvbnRyb2wgZnJhbWV3b3JrOiByZWdpc3RlcmluZyBhIHN0cnVjdF9vcHMgbWFrZXMgdGhlIG1vZGVsIGF2YWlsYWJsZQomIzQzOyAqIGJ5IGl0cyBuYW1lLCB3aGlsZSBpby5jb3N0Lm1vZGVsIGJpbmRzIG9uZSByZWdpc3RlcmVkIG1vZGVsIHRvIGEKJiM0MzsgKiBkZXZpY2UuICBVbnJlZ2lzdGVyaW5nIHJlbW92ZXMgdGhlIG5hbWUgZnJvbSB0aGUgcmVnaXN0cnk7IGRldmljZXMKJiM0MzsgKiBhbHJlYWR5IGJvdW5kIGtlZXAgdXNpbmcgaXQgdW50aWwgc3dpdGNoZWQgYmFjayB0byB0aGUgYnVpbHRpbgomIzQzOyAqIG1vZGVsLgomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgSU9DT1NUX01PREVMX05BTUVfTEVOCTE2CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBpb2Nvc3Qtc3BlY2lmaWMgY2FsbCBtZXRhZGF0YSBmb3IgY2FsY19jb3N0KCkmIzM5O3MgbW9kZWxfZmxhZ3MKJiM0MzsgKiBhcmd1bWVudDsgZXZlcnl0aGluZyBlbHNlLCBpbmNsdWRpbmcgUkVRX1BSRUZMVVNIL1JFUV9GVUEsIGlzCiYjNDM7ICogYWxyZWFkeSBwcmVzZW50IGluIHRoZSBvcGYgYXJndW1lbnQKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0UJKDFVTEwgJmx0OyZsdDsgMCkJLyogY2FsbGVkIGZyb20gbWVyZ2UgcGF0aCAqLwomIzQzOwomIzQzO3N0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzIHsKJiM0MzsJdTY0ICgqY2FsY19jb3N0KSh1NjQgb3BmLCB1NjQgbmJ5dGVzLCBzZWN0b3JfdCBzZWN0b3IsCiYjNDM7CQkJIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncyk7CiYjNDM7CXZvaWQgKCpibGtjZ19vbmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpOwomIzQzOwl2b2lkICgqYmxrY2dfb2ZmbGluZSkoc3RydWN0IGJsa2NnICpibGtjZyk7CiYjNDM7CiYjNDM7CS8qIG1vZGVsIG5hbWUsIHVzZWQgdG8gc2VsZWN0IHRoZSBtb2RlbCB0aHJvdWdoIGlvLmNvc3QubW9kZWwgKi8KJiM0MzsJY2hhciBuYW1lWzE2XTsKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLAomIzQzOwkJCSBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApOwomIzQzO3ZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyk7CiYjNDM7dm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTsKJiM0Mzt2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTsKJiM0MzsKJiM0MzsjZWxzZQkvKiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGICovCiYjNDM7CiYjNDM7c3RydWN0IGJsa2NnOwomIzQzO3N0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH0KJiM0MzsKJiM0MzsjZW5kaWYJLyogQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiAqLwomIzQzOyNlbmRpZgkvKiBfTElOVVhfQkxLX0lPQ09TVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oCmluZGV4IGU3NzJiMWJjNjBkNjAuLjJiOWZmMzQ4YTRmNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oCkBAIC0xNzgsNiAmIzQzOzE3OCw0NiBAQCBUUkFDRV9FVkVOVChpb2Nvc3RfaW9jX3ZyYXRlX2FkaiwKIAkpCiApOwogCiYjNDM7LyoKJiM0MzsgKiBQZXJpb2RpYyBwZXItZGV2aWNlIHN1bW1hcnksIGVtaXR0ZWQgb25jZSBwZXIgcGVyaW9kIGZyb20gdGhlIHRhaWwgb2YKJiM0MzsgKiBpb2NfdGltZXJfZm4oKS4gIFVubGlrZSB0aGUgc3RhdGUtY2hhbmdlIGV2ZW50cyBhYm92ZSwgdGhpcyBmaXJlcyBldmVyeQomIzQzOyAqIHBlcmlvZCB0aGUgY29udHJvbGxlciBpcyBydW5uaW5nLCBpbmNsdWRpbmcgc3RlYWR5IHN0YXRlcywgYW5kIGNhcnJpZXMKJiM0MzsgKiB0aGUgb3ZlcmFsbCBjb250cm9sbGVyIHN0YXRlIHNvIGJhc2ljIG1vbml0b3JpbmcgZG9lc24mIzM5O3QgcmVxdWlyZSBkcmduLgomIzQzOyAqLwomIzQzO1RSQUNFX0VWRU5UKGlvY29zdF9pb2NfdGljaywKJiM0MzsKJiM0MzsJVFBfUFJPVE8oc3RydWN0IGlvYyAqaW9jLCBpbnQgbnJfYWN0aXZlLCB1NjQgdXNhZ2VfdXNfc3VtKSwKJiM0MzsKJiM0MzsJVFBfQVJHUyhpb2MsIG5yX2FjdGl2ZSwgdXNhZ2VfdXNfc3VtKSwKJiM0MzsKJiM0MzsJVFBfU1RSVUNUX19lbnRyeSAoCiYjNDM7CQlfX3N0cmluZyhkZXZuYW1lLCBpb2NfbmFtZShpb2MpKQomIzQzOwkJX19maWVsZCh1MzIsIHBlcmlvZF91cykKJiM0MzsJCV9fZmllbGQodTY0LCB2cmF0ZSkKJiM0MzsJCV9fZmllbGQoaW50LCBidXN5X2xldmVsKQomIzQzOwkJX19maWVsZChpbnQsIG5yX2FjdGl2ZSkKJiM0MzsJCV9fZmllbGQodTMyLCB1c2FnZV9wY3QpCiYjNDM7CQlfX2ZpZWxkKGludCwgcnVubmluZykKJiM0MzsJKSwKJiM0MzsKJiM0MzsJVFBfZmFzdF9hc3NpZ24oCiYjNDM7CQlfX2Fzc2lnbl9zdHIoZGV2bmFtZSk7CiYjNDM7CQlfX2VudHJ5LSZndDtwZXJpb2RfdXMgPSBpb2MtJmd0O3BlcmlvZF91czsKJiM0MzsJCV9fZW50cnktJmd0O3ZyYXRlID0gaW9jLSZndDt2dGltZV9iYXNlX3JhdGU7CiYjNDM7CQlfX2VudHJ5LSZndDtidXN5X2xldmVsID0gaW9jLSZndDtidXN5X2xldmVsOwomIzQzOwkJX19lbnRyeS0mZ3Q7bnJfYWN0aXZlID0gbnJfYWN0aXZlOwomIzQzOwkJX19lbnRyeS0mZ3Q7dXNhZ2VfcGN0ID0gaW9jLSZndDtwZXJpb2RfdXMgPwomIzQzOwkJCWRpdl91NjQodXNhZ2VfdXNfc3VtICogMTAwLCBpb2MtJmd0O3BlcmlvZF91cykgOiAwOwomIzQzOwkJX19lbnRyeS0mZ3Q7cnVubmluZyA9IGlvYy0mZ3Q7cnVubmluZzsKJiM0MzsJKSwKJiM0MzsKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7WyVzXSBwZXJpb2Q9JXV1cyB2cmF0ZT0lbGx1IGJ1c3k9JWQgYWN0aXZlPSVkIHVzYWdlPSV1JSUgcnVubmluZz0lZCYjMzQ7LAomIzQzOwkJX19nZXRfc3RyKGRldm5hbWUpLCBfX2VudHJ5LSZndDtwZXJpb2RfdXMsIF9fZW50cnktJmd0O3ZyYXRlLAomIzQzOwkJX19lbnRyeS0mZ3Q7YnVzeV9sZXZlbCwgX19lbnRyeS0mZ3Q7bnJfYWN0aXZlLCBfX2VudHJ5LSZndDt1c2FnZV9wY3QsCiYjNDM7CQlfX2VudHJ5LSZndDtydW5uaW5nCiYjNDM7CSkKJiM0MzspOwomIzQzOwogVFJBQ0VfRVZFTlQoaW9jb3N0X2lvY2dfZm9yZ2l2ZV9kZWJ0LAogCiAJVFBfUFJPVE8oc3RydWN0IGlvY19ncSAqaW9jZywgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGlvY19ub3cgKm5vdywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnCmluZGV4IDJmNzk2ODhkY2Y3Y2UuLjY3YTYzMGNiNTYxNDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZwpAQCAtMTM4LDMgJiM0MzsxMzgsNSBAQCBDT05GSUdfU01DX0hTX0NUUkxfQlBGPXkKIENPTkZJR19ESUJTPXkKIENPTkZJR19ESUJTX0xPPXkKIENPTkZJR19QTV9XQUtFTE9DS1M9eQomIzQzO0NPTkZJR19CTEtfQ0dST1VQX0lPQ09TVD15CiYjNDM7Q09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRj15CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmU5MzQ0YjEzZmJhOTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuYwpAQCAtMCwwICYjNDM7MSwxOTMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9jb3N0X21vZGVsLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtpb2Nvc3RfbXMuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdyaXRlIGEgbGluZSB0byBpby5jb3N0Lm1vZGVsIHdpdGggd3JpdGUoMikgYW5kIHJldHVybiB0aGUgZXJybm8gb2YKJiM0MzsgKiB0aGUgZmFpbGVkIHdyaXRlLCBvciAwIG9uIHN1Y2Nlc3MuICBzdGRpbyBpcyBub3QgdXNlZCBoZXJlIG9uCiYjNDM7ICogcHVycG9zZTogdGhlIGtlcm5lbCYjMzk7cyByZWplY3Rpb24gaGFwcGVucyBpbiB0aGUgd3JpdGUoKSBzeXNjYWxsLAomIzQzOyAqIG5vdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBjb3B5LCBhbmQgZXZlcnkgd3JpdGUsIGluY2x1ZGluZwomIzQzOyAqIHRoZSBlcnJvciBwYXRocyBvZiB0aGUgY2FsbGVycyBiZWxvdywgaXMgY2hlY2tlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHdyaXRlX2Nvc3RfbW9kZWwoY29uc3QgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnIgPSAwOwomIzQzOwlzc2l6ZV90IG47CiYjNDM7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWwmIzM0OywgT19XUk9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycm5vOwomIzQzOwluID0gd3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpOwomIzQzOwlpZiAobiAmbHQ7IDApCiYjNDM7CQllcnIgPSBlcnJubzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlYWQgYmFjayB0aGUgaW8uY29zdC5tb2RlbCBsaW5lIG9mIGRldiBhbmQgY29weSB0aGUgbW9kZWw9IHZhbHVlCiYjNDM7ICogaW50byBAbW9kZWwuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHJlYWRiYWNrX21vZGVsKGNvbnN0IGNoYXIgKmRldiwgY2hhciAqbW9kZWwsIHNpemVfdCBtb2RlbF9zeikKJiM0Mzt7CiYjNDM7CWNoYXIgbGluZVsyNTZdLCB3b3JkWzI1Nl0sICptLCAqZW5kOwomIzQzOwlGSUxFICpmcDsKJiM0MzsJaW50IGZvdW5kID0gMDsKJiM0MzsKJiM0MzsJZnAgPSBmb3BlbigmIzM0Oy9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWwmIzM0OywgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWZwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHsKJiM0MzsJCWlmIChzc2NhbmYobGluZSwgJiMzNDslMjU1cyYjMzQ7LCB3b3JkKSA9PSAxICZhbXA7JmFtcDsgIXN0cmNtcCh3b3JkLCBkZXYpKSB7CiYjNDM7CQkJZm91bmQgPSAxOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWZjbG9zZShmcCk7CiYjNDM7CWlmICghZm91bmQpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CW0gPSBzdHJzdHIobGluZSwgJiMzNDttb2RlbD0mIzM0Oyk7CiYjNDM7CWlmICghbSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJbSAmIzQzOz0gc3RybGVuKCYjMzQ7bW9kZWw9JiMzNDspOwomIzQzOwllbmQgPSBtOwomIzQzOwl3aGlsZSAoKmVuZCAmYW1wOyZhbXA7ICFpc3NwYWNlKCplbmQpKQomIzQzOwkJZW5kJiM0MzsmIzQzOzsKJiM0MzsJc25wcmludGYobW9kZWwsIG1vZGVsX3N6LCAmIzM0OyUuKnMmIzM0OywgKGludCkoZW5kIC0gbSksIG0pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCaW5kIHRoZSBuYW1lZCBtb2RlbCB0byBhIGRldmljZSB3aXRoICYjMzQ7bW9kZWw9Jmx0O25hbWUmZ3Q7JiMzNDssIHZlcmlmeSB0aGUKJiM0MzsgKiByZWFkYmFjayBhbmQgcmVzdG9yZSB0aGUgYnVpbHRpbiBtb2RlbC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYmluZF9tb2RlbChjb25zdCBjaGFyICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlszMDBdLCBnb3RbNjRdOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyVzIG1vZGVsPSVzXG4mIzM0OywgZGV2LCBuYW1lKTsKJiM0MzsJZXJyID0gd3JpdGVfY29zdF9tb2RlbChidWYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlDSEVDSyhmYWxzZSwgJiMzNDt3cml0ZV9tb2RlbCYjMzQ7LCAmIzM0O3dyaXRlIG1vZGVsPSVzOiAlc1xuJiMzNDssIG5hbWUsCiYjNDM7CQkgICAgICBzdHJlcnJvcihlcnIpKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwllcnIgPSByZWFkYmFja19tb2RlbChkZXYsIGdvdCwgc2l6ZW9mKGdvdCkpOwomIzQzOwlpZiAoZXJyIHx8IHN0cmNtcChnb3QsIG5hbWUpKSB7CiYjNDM7CQlDSEVDSyhmYWxzZSwgJiMzNDtyZWFkYmFja19tb2RlbCYjMzQ7LCAmIzM0O2dvdCBtb2RlbD0lcyB3YW50ICVzXG4mIzM0OywKJiM0MzsJCSAgICAgIGVyciA/ICYjMzQ7KG5vbmUpJiMzNDsgOiBnb3QsIG5hbWUpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHJlc3RvcmUgdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsOyB0aGUgd3JpdGUgaXMgY2hlY2tlZCB0b28gKi8KJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslcyBtb2RlbD1saW5lYXJcbiYjMzQ7LCBkZXYpOwomIzQzOwllcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCUNIRUNLKGZhbHNlLCAmIzM0O3Jlc3RvcmVfbGluZWFyJiMzNDssICYjMzQ7d3JpdGUgbW9kZWw9bGluZWFyOiAlc1xuJiMzNDssCiYjNDM7CQkgICAgICBzdHJlcnJvcihlcnIpKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgZGV2IGFyZ3VtZW50IG11c3QgYmUgcHJlc2VudCBpbiBpby5jb3N0LnFvcyBhbHJlYWR5LCB3aGljaAomIzQzOyAqIG1lYW5zIGlvY29zdCBpcyBlbmFibGVkIGZvciBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGRldl9oYXNfaW9jb3N0KGNvbnN0IGNoYXIgKmRldikKJiM0Mzt7CiYjNDM7CWNoYXIgbGluZVsyNTZdLCB3b3JkWzI1Nl07CiYjNDM7CUZJTEUgKmZwOwomIzQzOwlpbnQgZm91bmQgPSAwOwomIzQzOwomIzQzOwlmcCA9IGZvcGVuKCYjMzQ7L3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5xb3MmIzM0OywgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWZwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSkgewomIzQzOwkJaWYgKHNzY2FuZihsaW5lLCAmIzM0OyUyNTVzJiMzNDssIHdvcmQpID09IDEgJmFtcDsmYW1wOyAhc3RyY21wKHdvcmQsIGRldikpIHsKJiM0MzsJCQlmb3VuZCA9IDE7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJZmNsb3NlKGZwKTsKJiM0MzsJcmV0dXJuIGZvdW5kOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEJpbmQgdGhlIDJ4IGV4YW1wbGUgbW9kZWwgYW5kIHZlcmlmeSB0aGUgaW8uY29zdC5tb2RlbCByZWFkYmFjay4KJiM0MzsgKiBJTyBhY2NvdW50aW5nIGl0c2VsZiBpcyBub3QgY2hlY2tlZCBoZXJlOyBpdCBuZWVkcyBhIGRldmljZSBkb2luZwomIzQzOyAqIHJlYWwgSU8gdW5kZXIgaW9jb3N0IGFuZCBpcyBjb3ZlcmVkIGJ5IHRoZSBrZXJuZWwtc2lkZSB2YWxpZGF0aW9uCiYjNDM7ICogZGVzY3JpYmVkIGluIHRoZSBjb3ZlciBsZXR0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXF1aXJlcyByb290LCBjZ3JvdXAgdjIgYW5kIGEgZGV2aWNlIHdpdGggaW9jb3N0IHN1cHBvcnQuICBUaGUKJiM0MzsgKiBkZXZpY2UgbXVzdCBiZSBnaXZlbiBhcyBtYWpvcjptaW5vciBpbiAkSU9DT1NUX1RFU1RfREVWLCBvdGhlcndpc2UKJiM0MzsgKiB0aGUgdGVzdCBpcyBza2lwcGVkLgomIzQzOyAqLwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfaW9jb3N0X21vZGVsKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X21vZGVsICpza2VsOwomIzQzOwljaGFyIGJ1ZlszMDBdLCAqZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlkZXYgPSBnZXRlbnYoJiMzNDtJT0NPU1RfVEVTVF9ERVYmIzM0Oyk7CiYjNDM7CWlmICghZGV2IHx8IGdldGV1aWQoKSAhPSAwKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJaWYgKCFBU1NFUlRfVFJVRShkZXZfaGFzX2lvY29zdChkZXYpLCAmIzM0O2lvY29zdF9tb3VudGVkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBuZWdhdGl2ZTogYmluZGluZyBhbiB1bmtub3duIG1vZGVsIG5hbWUgbXVzdCBiZSByZWplY3RlZCwKJiM0MzsJICogc28gYSB0eXBvIGNhbm5vdCBzaWxlbnRseSBkaXNhYmxlIGNvc3QgbW9kZWwgdXBkYXRlcwomIzQzOwkgKi8KJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslcyBtb2RlbD1ub19zdWNoX21vZGVsXG4mIzM0OywgZGV2KTsKJiM0MzsJZXJyID0gd3JpdGVfY29zdF9tb2RlbChidWYpOwomIzQzOwlBU1NFUlRfRVEoZXJyLCBFTk9FTlQsICYjMzQ7dW5rbm93bl9tb2RlbF9yZWplY3RlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJc2tlbCA9IGlvY29zdF9tb2RlbF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogYXR0YWNoaW5nIHRoZSBzdHJ1Y3Rfb3BzIHJlZ2lzdGVycyB0aGUgbW9kZWwgYnkgbmFtZSAqLwomIzQzOwllcnIgPSBpb2Nvc3RfbW9kZWxfX2F0dGFjaChza2VsKTsKJiM0MzsJaWYgKEFTU0VSVF9PSyhlcnIsICYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJQVNTRVJUX09LKGJpbmRfbW9kZWwoZGV2LCAmIzM0O2lvY29zdF8yeCYjMzQ7KSwgJiMzNDtiaW5kX2FuZF9yZWFkYmFjayYjMzQ7KTsKJiM0MzsKJiM0MzsJaW9jb3N0X21vZGVsX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNhbWUgY2hlY2sgZm9yIHRoZSBtdWx0aS1zdHJlYW0gZXhhbXBsZSBtb2RlbC4gIE9ubHkgb25lIG1vZGVsIGNhbgomIzQzOyAqIGJlIGJvdW5kIHRvIGEgZGV2aWNlIGF0IGEgdGltZTsgYm90aCB0ZXN0cyBiaW5kIGFuZCByZXN0b3JlLCBzbwomIzQzOyAqIHRoZXkgYXJlIHNlcmlhbCBhbmQgaW5kZXBlbmRlbnQuCiYjNDM7ICovCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWxfc3RyZWFtcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvY29zdF9tcyAqc2tlbDsKJiM0MzsJY2hhciAqZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlkZXYgPSBnZXRlbnYoJiMzNDtJT0NPU1RfVEVTVF9ERVYmIzM0Oyk7CiYjNDM7CWlmICghZGV2IHx8IGdldGV1aWQoKSAhPSAwKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJaWYgKCFBU1NFUlRfVFJVRShkZXZfaGFzX2lvY29zdChkZXYpLCAmIzM0O2lvY29zdF9tb3VudGVkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsID0gaW9jb3N0X21zX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBpb2Nvc3RfbXNfX2F0dGFjaChza2VsKTsKJiM0MzsJaWYgKEFTU0VSVF9PSyhlcnIsICYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJQVNTRVJUX09LKGJpbmRfbW9kZWwoZGV2LCAmIzM0O2lvY29zdF9tcyYjMzQ7KSwgJiMzNDtiaW5kX2FuZF9yZWFkYmFjayYjMzQ7KTsKJiM0MzsKJiM0MzsJaW9jb3N0X21zX19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pb2Nvc3RfbW9kZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pb2Nvc3RfbW9kZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mOGFkNDE3YjM1ODQ4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jCkBAIC0wLDAgJiM0MzsxLDExNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBFeGFtcGxlIGlvY29zdCBjb3N0IG1vZGVsOiB0aGUgYnVpbHRpbiBsaW5lYXIgSEREIGZvcm11bGEgd2l0aCBhbGwKJiM0MzsgKiBjb3N0cyBkb3VibGVkLgomIzQzOyAqCiYjNDM7ICogVGhlIGNvbnN0YW50cyBtaXJyb3Igd2hhdCBjYWxjX2xjb2VmcygpIGRlcml2ZXMgZnJvbSB0aGUgQVVUT1BfSERECiYjNDM7ICogZGVmYXVsdHMgKHJicHM9MTc0MDE5MTc2IHJzZXFpb3BzPTQxNzA4IHJyYW5kaW9wcz0zNzAsIHctc2lkZQomIzQzOyAqIGFuYWxvZykgaW4gdnRpbWUgdW5pdHMgd2hlcmUgMXMgPT0gMl4zNywgZXhwcmVzc2VkIHdpdGggdGhlIHNhbWUKJiM0MzsgKiByb3VuZC11cCBkaXZpc2lvbnMgc28gdGhleSBjYW5ub3QgZHJpZnQgZnJvbSB0aGUga2VybmVsLiAgQSBkZXZpY2UKJiM0MzsgKiBib3VuZCB0byB0aGlzIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCBjaGFyZ2VzIGV4YWN0bHkgdHdpY2UgdGhlCiYjNDM7ICogYnVpbHRpbiBtb2RlbCB1bmRlciB0aGUgc2FtZSB3b3JrbG9hZCwgd2hpY2ggbWFrZXMgaXQgYSBjb252ZW5pZW50CiYjNDM7ICogd2F5IHRvIHZlcmlmeSB0aGF0IGFjY291bnRpbmcgZ29lcyB0aHJvdWdoIHRoZSBCUEYgcGF0aC4KJiM0MzsgKgomIzQzOyAqIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nCiYjNDM7ICogZmx1c2hlczogdGhlcmUgaXMgbm8gZmFsbGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGEgZGF0YWxlc3MKJiM0MzsgKiBXUklURXxSRVFfUFJFRkxVU0ggaXMgcHJpY2VkIGFzIGEgb25lLXBhZ2Ugd3JpdGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7LyogVlRJTUVfUEVSX1NFQyBjb21lcyBmcm9tIHZtbGludXguaCAoYSBCVEYgZW51bSBjb25zdGFudCkgKi8KJiM0MzsjZGVmaW5lIElPQ19QQUdFX1NJWkUJCTQwOTYKJiM0MzsjZGVmaW5lIElPQ19TRUNUX1RPX1BBR0VfU0hJRlQJMwkvKiA1MTJCIHNlY3RvcnMgdG8gNGtCIHBhZ2VzICovCiYjNDM7I2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVMJNDA5NgkvKiAxNk1CIHNlZWsgdGhyZXNob2xkICovCiYjNDM7I2RlZmluZSBJT0NPU1RfQ09TVF9GX01FUkdFCSgxVUxMICZsdDsmbHQ7IDApCS8qIG5vdCBpbiBCVEY6IGEgcGxhaW4gbWFjcm8gKi8KJiM0MzsjZGVmaW5lIElPQ09TVF9SRVFfT1BfTUFTSwkweGZmCQkvKiBSRVFfT1BfTUFTSywgbm90IGluIEJURiAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogRElWNjRfVTY0X1JPVU5EX1VQIC8gRElWX1JPVU5EX1VQX1VMTCBlcXVpdmFsZW50cywgZm9sZGVkIGF0CiYjNDM7ICogY29tcGlsZSB0aW1lCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVSh4LCB5KQkJKCh4KSAvICh5KSAmIzQzOyAoKCh4KSAlICh5KSkgPyAxIDogMCkpCiYjNDM7CiYjNDM7I2RlZmluZSBSQlBTCTE3NDAxOTE3NlVMTAomIzQzOyNkZWZpbmUgUlNFUUlPUFMJNDE3MDhVTEwKJiM0MzsjZGVmaW5lIFJSQU5ESU9QUwkzNzBVTEwKJiM0MzsjZGVmaW5lIFdCUFMJMTc4MDc1ODY2VUxMCiYjNDM7I2RlZmluZSBXU0VRSU9QUwk0MjcwNVVMTAomIzQzOyNkZWZpbmUgV1JBTkRJT1BTCTM3OFVMTAomIzQzOwomIzQzOyNkZWZpbmUgUlBBR0UJKFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSkKJiM0MzsjZGVmaW5lIFJTRVFJTwkoUlUoVlRJTUVfUEVSX1NFQywgUlNFUUlPUFMpIC0gUlBBR0UpCiYjNDM7I2RlZmluZSBSUkFORElPCShSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpCiYjNDM7I2RlZmluZSBXUEFHRQkoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKQomIzQzOyNkZWZpbmUgV1NFUUlPCShSVShWVElNRV9QRVJfU0VDLCBXU0VRSU9QUykgLSBXUEFHRSkKJiM0MzsjZGVmaW5lIFdSQU5ESU8JKFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIHBlci1jZ3JvdXAgY3Vyc29yIHN0b3JhZ2U6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXQsIHNvCiYjNDM7ICogdGhlIG1vZGVsIG5ldmVyIGxlYWtzIG9yIHJldXNlcyBzdGFsZSBwZXItY2dyb3VwIHN0YXRlCiYjNDM7ICovCiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9DR1JQX1NUT1JBR0UpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gY3Vyc29yX3N0b3JlIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0Mzt1NjQgQlBGX1BST0coaW9jb3N0XzJ4X2NhbGNfY29zdCwgdTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvciwKJiM0MzsJICAgICBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgbW9kZWxfZmxhZ3MpCiYjNDM7ewomIzQzOwl1NjQgcGFnZXMsIHNlZWtfcGFnZXMgPSAwLCBiYXNlLCBjb2VmX3BhZ2UsIHJhbmRpbywgY29zdDsKJiM0MzsKJiM0MzsJaWYgKChvcGYgJmFtcDsgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfUkVBRCkgewomIzQzOwkJYmFzZSA9IFJTRVFJTzsgY29lZl9wYWdlID0gUlBBR0U7IHJhbmRpbyA9IFJSQU5ESU87CiYjNDM7CX0gZWxzZSBpZiAoKG9wZiAmYW1wOyBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9XUklURSkgewomIzQzOwkJYmFzZSA9IFdTRVFJTzsgY29lZl9wYWdlID0gV1BBR0U7IHJhbmRpbyA9IFdSQU5ESU87CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKgomIzQzOwkJICogYSBmdWxseSBvd25pbmcgbW9kZWwgbXVzdCBwcmljZSBldmVyeSBvcDsgdW5rbm93bgomIzQzOwkJICogb3BzIGFyZSBwcmljZWQgYXMgYSBzaW5nbGUgcGFnZSB3cml0ZQomIzQzOwkJICovCiYjNDM7CQliYXNlID0gMDsgY29lZl9wYWdlID0gV1BBR0U7IHJhbmRpbyA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbWlycm9yIHRoZSBidWlsdGluIHNpbmdsZSBwZXItY2dyb3VwIGN1cnNvcjogdGhlIG1vZGVsIGtlZXBzCiYjNDM7CSAqIGl0cyBvd24gY3Vyc29yIGtleWVkIGJ5IHRoZSBibGtjZyBhcmd1bWVudAomIzQzOwkgKi8KJiM0MzsJewomIzQzOwkJX191NjQgKmN1cnNvciwgY3VyOwomIzQzOwomIzQzOwkJY3Vyc29yID0gYnBmX2NncnBfc3RvcmFnZV9nZXQoJmFtcDtjdXJzb3Jfc3RvcmUsCiYjNDM7CQkJCQkgICAgICBibGtjZy0mZ3Q7Y3NzLmNncm91cCwgTlVMTCwKJiM0MzsJCQkJCSAgICAgIEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7CiYjNDM7CQlpZiAoIWN1cnNvcikKJiM0MzsJCQlyZXR1cm4gMiAqIChiYXNlICYjNDM7IFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSkgKiBjb2VmX3BhZ2UpOwomIzQzOwkJY3VyID0gKmN1cnNvcjsKJiM0MzsJCXNlZWtfcGFnZXMgPSBzZWN0b3IgJmd0OyBjdXIgPyBzZWN0b3IgLSBjdXIgOiBjdXIgLSBzZWN0b3I7CiYjNDM7CQlzZWVrX3BhZ2VzICZndDsmZ3Q7PSBJT0NfU0VDVF9UT19QQUdFX1NISUZUOwomIzQzOwkJaWYgKHNlZWtfcGFnZXMgJmd0OyBMQ09FRl9SQU5ESU9fUEFHRVMpCiYjNDM7CQkJYmFzZSA9IHJhbmRpbzsKJiM0MzsJCWlmICghKG1vZGVsX2ZsYWdzICZhbXA7IElPQ09TVF9DT1NUX0ZfTUVSR0UpKQomIzQzOwkJCSpjdXJzb3IgPSBzZWN0b3IgJiM0MzsgUlUobmJ5dGVzLCA1MTIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBhZ2VzID0gUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKTsKJiM0MzsJaWYgKCFwYWdlcykKJiM0MzsJCXBhZ2VzID0gMTsJLyogZGF0YWxlc3MgZmx1c2g6IG9uZSBwYWdlICovCiYjNDM7CWlmIChtb2RlbF9mbGFncyAmYW1wOyBJT0NPU1RfQ09TVF9GX01FUkdFKQomIzQzOwkJYmFzZSA9IDA7CiYjNDM7CiYjNDM7CWNvc3QgPSAyICogKGJhc2UgJiM0MzsgcGFnZXMgKiBjb2VmX3BhZ2UpOwomIzQzOwlyZXR1cm4gY29zdDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7LnN0cnVjdF9vcHMmIzM0OykKJiM0MztzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfMnggPSB7CiYjNDM7CS5jYWxjX2Nvc3QgPSAodm9pZCAqKWlvY29zdF8yeF9jYWxjX2Nvc3QsCiYjNDM7CS5uYW1lID0gJiMzNDtpb2Nvc3RfMngmIzM0OywKJiM0Mzt9OwomIzQzOwomIzQzO2NoYXIgTElDRU5TRVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjNjYzU3YzAzZDNjODgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21zLmMKQEAgLTAsMCAmIzQzOzEsMTM2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIEV4YW1wbGUgbXVsdGktc3RyZWFtIHNlcXVlbnRpYWxpdHkgZGV0ZWN0aW9uIGNvc3QgbW9kZWwuCiYjNDM7ICoKJiM0MzsgKiBUaGUgYnVpbHRpbiBtb2RlbCBrZWVwcyBhIHNpbmdsZSBjdXJzb3IgcGVyIGNncm91cCwgc28gdHdvCiYjNDM7ICogaW50ZXJsZWF2ZWQgc2VxdWVudGlhbCByZWFkZXJzIGluIG9uZSBjZ3JvdXAgYXJlIGFsbCBwcmljZWQgcmFuZG9tCiYjNDM7ICogKG1lYXN1cmVkIDg5eCBvdmVyY2hhcmdlLCAxMi45eCB0aHJvdWdocHV0IGNvbGxhcHNlKSwgd2hpbGUgcmFuZG9tCiYjNDM7ICogSU8gaW5zaWRlIGEgaG90IHdpbmRvdyBzbWFsbGVyIHRoYW4gdGhlIDE2TUIgc2VlayB0aHJlc2hvbGQgaXMKJiM0MzsgKiBwcmljZWQgc2VxdWVudGlhbCAobWVhc3VyZWQgMTA3eCB1bmRlcmNoYXJnZSkuICBUaGlzIG1vZGVsIHJlcGxhY2VzCiYjNDM7ICogdGhlIHNpbmdsZSBjdXJzb3Igd2l0aCBhIHBlci1jZ3JvdXAgdGFibGUgb2Ygc3RyZWFtIHNsb3RzOiBhbiBJTyBpcwomIzQzOyAqIHNlcXVlbnRpYWwgaWZmIGl0cyBzZWN0b3IgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgbmV4dCBzZWN0b3Igb2YgYW55CiYjNDM7ICogdHJhY2tlZCBzdHJlYW0uICBJbnRlcmxlYXZlZCBzdHJlYW1zIGtlZXAgdGhlaXIgb3duIHNsb3RzLCBhbmQKJiM0MzsgKiB3aW5kb3dlZCByYW5kb20gSU8gcmFyZWx5IG1hdGNoZXMgYSBtb3ZpbmcgZXhwZWN0YXRpb24uCiYjNDM7ICoKJiM0MzsgKiBTdHJlYW0gc3RhdGUgbGl2ZXMgaW4gYSBDR1JQX1NUT1JBR0UgbWFwLCBzbyBpdCBpcyBjcmVhdGVkIGFuZAomIzQzOyAqIGZyZWVkIHdpdGggdGhlIGNncm91cC4gIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGJ1aWx0aW4KJiM0MzsgKiBsaW5lYXIgZm9ybXVsYSBpdHNlbGYsIGluY2x1ZGluZyBmbHVzaCBwcmljaW5nLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzOy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovCiYjNDM7I2RlZmluZSBJT0NfUEFHRV9TSVpFCQk0MDk2CiYjNDM7I2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUCTMJLyogNTEyQiBzZWN0b3JzIHRvIDRrQiBwYWdlcyAqLwomIzQzOyNkZWZpbmUgTENPRUZfUkFORElPX1BBR0VTCTQwOTYJLyogMTZNQiBzZWVrIHRocmVzaG9sZCAqLwomIzQzOyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRQkoMVVMTCAmbHQ7Jmx0OyAwKQkvKiBub3QgaW4gQlRGOiBhIHBsYWluIG1hY3JvICovCiYjNDM7I2RlZmluZSBJT0NPU1RfUkVRX09QX01BU0sJMHhmZgkJLyogUkVRX09QX01BU0ssIG5vdCBpbiBCVEYgKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERJVjY0X1U2NF9ST1VORF9VUCAvIERJVl9ST1VORF9VUF9VTEwgZXF1aXZhbGVudHMsIGZvbGRlZCBhdAomIzQzOyAqIGNvbXBpbGUgdGltZQomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlUoeCwgeSkJCSgoeCkgLyAoeSkgJiM0MzsgKCgoeCkgJSAoeSkpID8gMSA6IDApKQomIzQzOwomIzQzOyNkZWZpbmUgUkJQUwkxNzQwMTkxNzZVTEwKJiM0MzsjZGVmaW5lIFJTRVFJT1BTCTQxNzA4VUxMCiYjNDM7I2RlZmluZSBSUkFORElPUFMJMzcwVUxMCiYjNDM7I2RlZmluZSBXQlBTCTE3ODA3NTg2NlVMTAomIzQzOyNkZWZpbmUgV1NFUUlPUFMJNDI3MDVVTEwKJiM0MzsjZGVmaW5lIFdSQU5ESU9QUwkzNzhVTEwKJiM0MzsKJiM0MzsjZGVmaW5lIFJQQUdFCShSVShWVElNRV9QRVJfU0VDLCBSVShSQlBTLCBJT0NfUEFHRV9TSVpFKSkpCiYjNDM7I2RlZmluZSBSU0VRSU8JKFJVKFZUSU1FX1BFUl9TRUMsIFJTRVFJT1BTKSAtIFJQQUdFKQomIzQzOyNkZWZpbmUgUlJBTkRJTwkoUlUoVlRJTUVfUEVSX1NFQywgUlJBTkRJT1BTKSAtIFJQQUdFKQomIzQzOyNkZWZpbmUgV1BBR0UJKFJVKFZUSU1FX1BFUl9TRUMsIFJVKFdCUFMsIElPQ19QQUdFX1NJWkUpKSkKJiM0MzsjZGVmaW5lIFdTRVFJTwkoUlUoVlRJTUVfUEVSX1NFQywgV1NFUUlPUFMpIC0gV1BBR0UpCiYjNDM7I2RlZmluZSBXUkFORElPCShSVShWVElNRV9QRVJfU0VDLCBXUkFORElPUFMpIC0gV1BBR0UpCiYjNDM7CiYjNDM7I2RlZmluZSBOU0xPVFMJNAomIzQzOwomIzQzO3N0cnVjdCBzdHJlYW1zIHsKJiM0MzsJX191NjQgZXhwZWN0ZWRbTlNMT1RTXTsJLyogbmV4dCBleHBlY3RlZCBzZWN0b3IsIHBlciBzdHJlYW0gKi8KJiM0MzsJX191NjQgc3RhbXBbTlNMT1RTXTsJLyogTFJVIHN0YW1wLCAwID0gZW1wdHkgKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogcGVyLWNncm91cCBzdHJlYW0gdGFibGU6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0NHUlBfU1RPUkFHRSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qgc3RyZWFtcyk7CiYjNDM7fSBzdHJlYW1fdGFiIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0Mzt1NjQgQlBGX1BST0coaW9jb3N0X21zX2NhbGNfY29zdCwgdTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvciwKJiM0MzsJICAgICBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgbW9kZWxfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3RyZWFtcyAqczsKJiM0MzsJdTY0IHBhZ2VzLCBiYXNlLCBjb2VmX3BhZ2UsIHJhbmRpbywgYWR2YW5jZSwgbm93OwomIzQzOwl1MzIgaSwgdmljdGltID0gMCwgZm91bmQgPSAweEZGRkZGRkZGOwomIzQzOwomIzQzOwlpZiAoKG9wZiAmYW1wOyBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7CiYjNDM7CQliYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTzsKJiM0MzsJfSBlbHNlIGlmICgob3BmICZhbXA7IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1dSSVRFKSB7CiYjNDM7CQliYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBhIGZ1bGx5IG93bmluZyBtb2RlbCBtdXN0IHByaWNlIGV2ZXJ5IG9wOyB1bmtub3duCiYjNDM7CQkgKiBvcHMgYXJlIHByaWNlZCBhcyBhIHNpbmdsZSBwYWdlIHdyaXRlCiYjNDM7CQkgKi8KJiM0MzsJCWJhc2UgPSAwOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gMDsKJiM0MzsJfQomIzQzOwlhZHZhbmNlID0gUlUobmJ5dGVzLCA1MTIpOwkvKiBzZWN0b3JzICovCiYjNDM7CiYjNDM7CXMgPSBicGZfY2dycF9zdG9yYWdlX2dldCgmYW1wO3N0cmVhbV90YWIsIGJsa2NnLSZndDtjc3MuY2dyb3VwLCBOVUxMLAomIzQzOwkJCQkgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTsKJiM0MzsJaWYgKCFzKQomIzQzOwkJcmV0dXJuIGJhc2UgJiM0MzsgUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKSAqIGNvZWZfcGFnZTsKJiM0MzsKJiM0MzsJbm93ID0gYnBmX2t0aW1lX2dldF9ucygpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlNMT1RTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHMtJmd0O2V4cGVjdGVkW2ldID09IHNlY3RvciAmYW1wOyZhbXA7IHMtJmd0O3N0YW1wW2ldKSB7CiYjNDM7CQkJZm91bmQgPSBpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChmb3VuZCAhPSAweEZGRkZGRkZGKSB7CiYjNDM7CQkvKiBzZXF1ZW50aWFsOiBrZWVwIHRoZSBzZXEgYmFzZSBmcm9tIHRoZSBvcCBicmFuY2ggKi8KJiM0MzsJCXMtJmd0O2V4cGVjdGVkW2ZvdW5kXSA9IHNlY3RvciAmIzQzOyBhZHZhbmNlOwomIzQzOwkJcy0mZ3Q7c3RhbXBbZm91bmRdID0gbm93OwomIzQzOwl9IGVsc2UgewomIzQzOwkJYmFzZSA9IHJhbmRpbzsKJiM0MzsJCWZvciAoaSA9IDE7IGkgJmx0OyBOU0xPVFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHMtJmd0O3N0YW1wW2ldICZsdDsgcy0mZ3Q7c3RhbXBbdmljdGltXSkKJiM0MzsJCQkJdmljdGltID0gaTsKJiM0MzsJCX0KJiM0MzsJCXMtJmd0O2V4cGVjdGVkW3ZpY3RpbV0gPSBzZWN0b3IgJiM0MzsgYWR2YW5jZTsKJiM0MzsJCXMtJmd0O3N0YW1wW3ZpY3RpbV0gPSBub3c7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGFnZXMgPSBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpOwomIzQzOwlpZiAoIXBhZ2VzKQomIzQzOwkJcGFnZXMgPSAxOwkvKiBkYXRhbGVzcyBmbHVzaDogb25lIHBhZ2UgKi8KJiM0MzsJaWYgKG1vZGVsX2ZsYWdzICZhbXA7IElPQ09TVF9DT1NUX0ZfTUVSR0UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBtZXJnZWQgYmlvcyBza2lwIHRoZSBiYXNlIGNvc3QgYnV0IHN0aWxsIGFkdmFuY2UKJiM0MzsJCSAqIHRoZSBzdHJlYW0gcG9zaXRpb24gYWJvdmUsIHNvIGEgbWVyZ2UgYXQgdGhlCiYjNDM7CQkgKiBleHBlY3RlZCBzZWN0b3IgZG9lcyBub3QgbWFrZSB0aGUgZm9sbG93aW5nIG5ldyBJTwomIzQzOwkJICogbG9vayByYW5kb20KJiM0MzsJCSAqLwomIzQzOwkJYmFzZSA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGJhc2UgJiM0MzsgcGFnZXMgKiBjb2VmX3BhZ2U7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oy5zdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgaW9jb3N0X21zID0gewomIzQzOwkuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfbXNfY2FsY19jb3N0LAomIzQzOwkubmFtZSA9ICYjMzQ7aW9jb3N0X21zJiMzNDssCiYjNDM7fTsKJiM0MzsKJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0ODIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYtQmFzZWQgQmxvY2sgSU8gQ29zdCBNb2RlbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlcmllcyBsb29rcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgaW50cm9kdWNpbmcgQlBGIHBsdWdnYWJsZSBjb3N0IG1vZGVsIHN1cHBvcnQgZm9yIHRoZSBibG9jayBJTyBjb250cm9sbGVyIChibGstaW9jb3N0KSwgbGV2ZXJhZ2luZyBCUEYgc3RydWN0X29wcyAoYGlvY29zdF9tb2RlbF9vcHNgKS4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMgYW5kIHNlZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB3ZSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8uCgpGaXJzdCwgdGhlcmUmIzM5O3MgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGluIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RgLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHNpZ24uIFRoZW4sIGEgbmV3IGNvbmZpZyBvcHRpb24sIGBCTEtfQ0dST1VQX0lPQ09TVF9CUEZgLCBpbiBgYmxvY2svS2NvbmZpZ2AuIEl0IGhhcyBzb21lIGRlcGVuZGVuY2llczogYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4gQWxyaWdodCwgc28gQlBGIGFuZCB0aGUgaW8gY29zdCBtb2RlbCBuZWVkIHRvIGJlIHNldCB1cCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBNYWtlZmlsZSBub3cgaW5jbHVkZXMgYGJsay1pb2Nvc3QtYnBmLm9gIHdoZW4gdGhhdCBjb25maWcgaXMgZW5hYmxlZC4KCkluIGBibG9jay9ibGstY2dyb3VwLmNgLCB0aGV5JiMzOTt2ZSBhZGRlZCBob29rcyB0byB0aGUgY2dyb3VwIGxpZmVjeWNsZSBjYWxsYmFja3MsIGBibGtjZ19jc3Nfb2ZmbGluZWAgYW5kIGBibGtjZ19jc3Nfb25saW5lYCwgdG8gdHJpZ2dlciBzb21lIG5ldyBgaW9jb3N0X25vdGlmeWAgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgaW4gYGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmNgLCB3aGljaCBjb250YWlucyB0aGUgYWN0dWFsIEJQRiBzdHJ1Y3Rfb3BzLCBhbG9uZyB3aXRoIHJlZ2lzdHJhdGlvbiwgbG9va3VwLCBhbmQgbm90aWZpY2F0aW9uIGNhbGxiYWNrcy4gSXQgbG9va3MgbGlrZSB0aGUgZ2x1ZSBjb2RlIHRoYXQgbWFrZXMgZXZlcnl0aGluZyB3b3JrLgoKYGJsb2NrL2Jsay1pb2Nvc3QuY2AgaGFzIHNlZW4gdGhlIG1vc3QgY2hhbmdlcywgd2l0aCBob29rcyBpbnRvIHRoZSBjb3N0IGNhbGN1bGF0aW9uIGZ1bmN0aW9ucyAoYGNhbGNfdnRpbWVfY29zdGAsIGBjYWxjX3NpemVfdnRpbWVfY29zdGApLCB0aGUgSU8gUW9TIGV4aXQgZnVuY3Rpb24gKGBpb2NfcnFvc19leGl0YCksIGFuZCBzb21lIG90aGVyIGtleSBwb2ludHMsIGxpa2UgYGlvY19jb3N0X21vZGVsX3ByZmlsbGAsIGBpb2NfYnBmX21vZGVsX2JpbmRgLCBgaW9jX2Nvc3RfbW9kZWxfd3JpdGVgIGFuZCBhbHNvIGEgdHJhY2Vwb2ludCBgaW9jb3N0X2lvY190aWNrYC4gYGluY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oYCBkZWZpbmVzIHRoZSBgaW9jb3N0X21vZGVsX29wc2Agc3RydWN0dXJlIGFuZCByZWxhdGVkIGZ1bmN0aW9uIGhlYWRlcnMsIHdoaWxlIGBpbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaGAgaW50cm9kdWNlcyBhIG5ldyB0cmFjZSBldmVudC4gV2UgYWxzbyBoYXZlIHNlbGZ0ZXN0cyBmb3IgQlBGLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlLCBhbmQgaXMgaXQgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIHNlZS4uLiBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gUUVNVSBvciBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIGJsay1pb2Nvc3QsIGJsay1jZ3JvdXAsIEJQRiwgYW5kIGNncm91cCB2MiBpby5jb3N0Lm1vZGVsIHN5c2ZzL2Nncm91cCBpbnRlcmZhY2UsIHRoaXMgaXMgYWxsIHZlcnkgcmVhY2hhYmxlLiBBcmUgdGhlc2UgY29yZSBrZXJuZWwgY2hhbmdlcz8gWWVzLCB0aGlzIGhpdHMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIsIEJQRiBzdWJzeXN0ZW0sIGFuZCBjZ3JvdXAgSU8gY29udHJvbGxlci4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIQoKSSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBzeW1ib2xzIGFuZCBjb25maWdzLiBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVzZSBncmVwIG9yIGEgY29kZSBzZWFyY2ggdG9vbCB0byBjaGVjayBkZXBlbmRlbmNpZXMgbW9yZSB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTE0NT1jb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTIzMj1zb3VyY2UgXCYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkXCYjMzQ7XG5ibG9jay9LY29uZmlnLTIzMy1cbmJsb2NrL0tjb25maWc6MjM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVF9CUEZcbmJsb2NrL0tjb25maWctMjM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIHBsdWdnYWJsZSBjb3N0IG1vZGVsIHN1cHBvcnQgZm9yIHRoZSBjb3N0IElPIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UsIGBibG9jay9LY29uZmlnYCBpcyB1c3VhbGx5IHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIGJlZW4gaW4gdGhlcmUgYmVmb3JlLi4uIG5vdyB3aGVyZSB3YXMgdGhhdCBzZXR0aW5nPyBSaWdodCwgaXQmIzM5O3MgdmFndWVseSBmYW1pbGlhci4uLiBIbW0sIGxpbmVzIDE1NCBhbmQgMjM0IGluIHRoYXQgZmlsZSBzb3VuZCBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCBhcm91bmQgdGhvc2UgbGluZXMuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGNoZWNrIHRoZW0uIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmUsIG9yIGF0IGxlYXN0IHByb3ZpZGUgc29tZSBjbHVlcyB0byBmb2xsb3chCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdCAgY2dyb3VwIGFwcGxpY2F0aW9ucy4gSXQgZW5hYmxlcyB0aGUgRmFicmljIGFuZCB0aGUgc3RvcmFnZSB0YXJnZXRzIHRvXG4gMTUxOlx0XHQgIGlkZW50aWZ5LCBtb25pdG9yLCBhbmQgaGFuZGxlIEZDIHRyYWZmaWMgYmFzZWQgb24gVk0gdGFncyBieSBpbnNlcnRpbmdcbiAxNTI6XHRcdCAgYXBwbGljYXRpb24gc3BlY2lmaWMgaWRlbnRpZmljYXRpb24gaW50byB0aGUgRkMgZnJhbWUuXG4gMTUzOlx0XG4gMTU0Olx0Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG4gMTU1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXCYjMzQ7XG4gMTU2Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxNTc6XHRcdHNlbGVjdCBCTEtfUlFfQUxMT0NfVElNRVxuIDE1ODpcdFx0aGVscFxuIDE1OTpcdFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLndlaWdodCBpbnRlcmZhY2UgZm9yIGNvc3RcbiAxNjA6XHRcdG1vZGVsIGJhc2VkIHByb3BvcnRpb25hbCBJTyBjb250cm9sLiAgVGhlIElPIGNvbnRyb2xsZXJcbiAxNjE6XHRcdGRpc3RyaWJ1dGVzIElPIGNhcGFjaXR5IGJldHdlZW4gZGlmZmVyZW50IGdyb3VwcyBiYXNlZCBvblxuIDE2MjpcdFx0dGhlaXIgc2hhcmUgb2YgdGhlIG92ZXJhbGwgd2VpZ2h0IGRpc3RyaWJ1dGlvbi5cbiAxNjM6XHRcbiAxNjQ6XHRjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cbiAxNjU6XHRcdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4gMTY2Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxNjc6XHRcdGhlbHBcbiAxNjg6XHRcdEVuYWJsZSB0aGUgLnByaW8gaW50ZXJmYWNlIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzIHRvXG4gMTY5Olx0XHRyZXF1ZXN0cy4gVGhlIEkvTyBwcmlvcml0eSBjbGFzcyBhZmZlY3RzIHRoZSBvcmRlciBpbiB3aGljaCBhbiBJL09cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM5OAoJCQkJCQkJb3V0cHV0OiAzMjYKCQkJCQkJCXRob3VnaHRzOiAxMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJMS19DR1JPVVBfSU9DT1NUX0JQRiBEZXBlbmRlbmNpZXMgYW5kIEtleSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19DR1JPVVBfSU9DT1NUX0JQRmAuIEkgc2VlIGl0IHJlbGllcyBvbiBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLiBGdXJ0aGVyLCBgQkxLX0NHUk9VUF9JT0NPU1RgIGl0c2VsZiBkZXBlbmRzIG9uIGBCTEtfQ0dST1VQYC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRob3NlIGNvbmZpZ3VyYXRpb25zOiBgQkxLX0NHUk9VUF9JT0NPU1RfQlBGYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBgREVCVUdfSU5GT19CVEZgLCBhbmQgYEJMS19DR1JPVVBgLiBHb29kLCBnb3QgdGhlIEtjb25maWcgc2lkZSBoYW5kbGVkLgoKTm93LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgY29kZS4gSW4gYGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmNgLCBJIHNwb3QgdGhlIHVzZSBvZiBgQ09ORklHX0NHUk9VUFNgIGZvciBgQlBGX0ZVTkNfY2dycF9zdG9yYWdlX2dldGAsIGFuZCBgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmAgaXMgdXNlZCB0byBjb21waWxlIGBibG9jay9ibGstaW9jb3N0LWJwZi5vYC4gSW4gYGJsb2NrL2Jsay1pb2Nvc3QuY2AsIEkgc2VlIGAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmAsIHdoaWNoIG1lYW5zIHRoZSBCUEYgZmVhdHVyZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluLgoKTmV4dCwgdGhlIGNyaXRpY2FsIHN0ZXA6IGlkZW50aWZ5aW5nIHRoZSBtb2RpZmllZCBhbmQgaW50cm9kdWNlZCBmdW5jdGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgbGllcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGV4aXN0aW5nIHN5c3RlbS4gRnJvbSBgYmxvY2svYmxrLWlvY29zdC1icGYuY2AsIHRoZXNlIGxvb2sgaW1wb3J0YW50OiBgaW9jb3N0X2JwZl9tb2RlbF9nZXRgLCBgaW9jb3N0X2JwZl9tb2RlbF9wdXRgLCBgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmVgLCBgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lYCwgYW5kIHRoZSBzdHJ1Y3Rfb3BzIG1ldGhvZHMgYGJwZl9pb2Nvc3RfcmVnYCwgYGJwZl9pb2Nvc3RfdW5yZWdgLCBgYnBmX2lvY29zdF92YWxpZGF0ZWAsIGBicGZfaW9jb3N0X2NoZWNrX21lbWJlcmAsIGBicGZfaW9jb3N0X2luaXRfbWVtYmVyYCwgYGJwZl9pb2Nvc3RfZ2V0X2Z1bmNfcHJvdG9gLCBgYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3NgLCBgYnBmX2lvY29zdF9tb2RlbF9pbml0YC4gVGhlbiwgaW4gYGJsb2NrL2Jsay1pb2Nvc3QuY2AsIEkmIzM5O3ZlIGdvdCBgaW9jX2JwZl9tb2RlbF9iaW5kYCwgYGlvY19jb3N0X21vZGVsX3dyaXRlYCwgYGNhbGNfdnRpbWVfY29zdGAsIGBjYWxjX3NpemVfdnRpbWVfY29zdGAsIGBpb2NfY29zdF9tb2RlbF9wcmZpbGxgLCBgaW9jX3Jxb3NfZXhpdGAuIEZpbmFsbHksIEkgc2VlIHRoYXQgY2dyb3VwIG9wZXJhdGlvbnMgKGBibGtjZ19jc3Nfb2ZmbGluZWAsIGBibGtjZ19jc3Nfb25saW5lYCkgaW4gYGJsb2NrL2Jsay1jZ3JvdXAuY2AgYXJlIGFsc28gcG90ZW50aWFsbHkgcmVsZXZhbnQuCgpOb3csIEkmIzM5O20gY3Jvc3MtcmVmZXJlbmNpbmcgdG8gY29uZmlybSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFuZCBpbmRlZWQsIHRob3NlIEkgaWRlbnRpZmllZCBhcmUgbm9uLXN0YXRpYyBhbmQgZXhwb3NlZCwgd2hpY2ggY29uZmlybXMgdGhvc2UgYXJlIGludGVyZXN0aW5nLgoKRmluYWxseSwgSSYjMzk7bSBjaGVja2luZyBteSBndWlkZWxpbmVzLiBJIHdhbnQgdG8gdGFyZ2V0IHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGF2b2lkIHRoZSBnZW5lcmljIHN0dWZmLiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBuZXcga2V5IGZ1bmN0aW9ucyBmcm9tIGJvdGggZmlsZXMgdG8gYnVpbGQgYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuIEkmIzM5O20gY2hvb3NpbmcgdGhlIGZvbGxvd2luZyBhcyB0aGUgYEZvY3VzU3ltYm9sc2A6IGBpb2NfYnBmX21vZGVsX2JpbmRgLCBgaW9jX2Nvc3RfbW9kZWxfd3JpdGVgLCBgY2FsY192dGltZV9jb3N0YCwgYGNhbGNfc2l6ZV92dGltZV9jb3N0YCwgYGJwZl9pb2Nvc3RfcmVnYCwgYGJwZl9pb2Nvc3RfdW5yZWdgLCBgYnBmX2lvY29zdF92YWxpZGF0ZWAsIGBpb2Nvc3RfYnBmX21vZGVsX2dldGAsIGBpb2Nvc3RfYnBmX21vZGVsX3B1dGAsIGBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZWAsIGBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmVgLgoKT2theSwgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgbGluZWQgdXAuIEFsbCB0aGUgY2hlY2tzIHBhc3MuIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHRoZSB0b29sIGNhbGwgbm93LCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7dmUgY2FyZWZ1bGx5IGlkZW50aWZpZWQgdGhlIGtleSBjb21wb25lbnRzIHJlbGF0ZWQgdG8gdGhlIEJQRi1iYXNlZCBJL08gY29zdCBhY2NvdW50aW5nIGFuZCB0aGUgaW50ZWdyYXRpb24gd2l0aCBjZ3JvdXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVF9CUEYmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0NPU1QmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9jX2JwZl9tb2RlbF9iaW5kJiMzNDssCiAgICAmIzM0O2lvY19jb3N0X21vZGVsX3dyaXRlJiMzNDssCiAgICAmIzM0O2NhbGNfdnRpbWVfY29zdCYjMzQ7LAogICAgJiMzNDtjYWxjX3NpemVfdnRpbWVfY29zdCYjMzQ7LAogICAgJiMzNDticGZfaW9jb3N0X3JlZyYjMzQ7LAogICAgJiMzNDticGZfaW9jb3N0X3VucmVnJiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7aW9jb3N0X2JwZl9tb2RlbF9nZXQmIzM0OywKICAgICYjMzQ7aW9jb3N0X2JwZl9tb2RlbF9wdXQmIzM0OywKICAgICYjMzQ7aW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUmIzM0OywKICAgICYjMzQ7aW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQlBGIHN0cnVjdF9vcHMgc3VwcG9ydCAoaW9jb3N0X21vZGVsX29wcykgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscyBpbiBibGstaW9jb3N0LiBJdCBpbnRyb2R1Y2VzIG5ldyBrZXJuZWwgY29kZSBpbiBibG9jay9ibGstaW9jb3N0LWJwZi5jIGZvciByZWdpc3RlcmluZywgdmFsaWRhdGluZywgYW5kIG1hbmFnaW5nIEJQRiBjb3N0IG1vZGVscywgYW5kIHVwZGF0ZXMgYmxvY2svYmxrLWlvY29zdC5jIGFuZCBibG9jay9ibGstY2dyb3VwLmMgdG8gaW50ZXJmYWNlIHdpdGggdGhlc2UgbW9kZWxzIGR1cmluZyBJTyBjb3N0IGNhbGN1bGF0aW9ucywgY29uZmlndXJhdGlvbiB3cml0ZXMsIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBCUEYgc3lzY2FsbHMgYW5kIGNncm91cCB2MiBpby5jb3N0Lm1vZGVsIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUX0JQRiYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2NfYnBmX21vZGVsX2JpbmQmIzM0OywKICAgICYjMzQ7aW9jX2Nvc3RfbW9kZWxfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2FsY192dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2NhbGNfc2l6ZV92dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfdW5yZWcmIzM0OywKICAgICYjMzQ7YnBmX2lvY29zdF92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX2dldCYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX3B1dCYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IChpb2Nvc3RfbW9kZWxfb3BzKSBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzIGluIGJsay1pb2Nvc3QuIEl0IGludHJvZHVjZXMgbmV3IGtlcm5lbCBjb2RlIGluIGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgZm9yIHJlZ2lzdGVyaW5nLCB2YWxpZGF0aW5nLCBhbmQgbWFuYWdpbmcgQlBGIGNvc3QgbW9kZWxzLCBhbmQgdXBkYXRlcyBibG9jay9ibGstaW9jb3N0LmMgYW5kIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBtb2RlbHMgZHVyaW5nIElPIGNvc3QgY2FsY3VsYXRpb25zLCBjb25maWd1cmF0aW9uIHdyaXRlcywgYW5kIGNncm91cCBsaWZlY3ljbGUgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEJQRiBzeXNjYWxscyBhbmQgY2dyb3VwIHYyIGlvLmNvc3QubW9kZWwgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNDoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGltcGxlbWVudHMgQlBGIHN0cnVjdF9vcHMgc3VwcG9ydCBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzIGluIGJsay1pb2Nvc3QgKGBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGYCksIGFkZGluZyBgaW9jb3N0X21vZGVsX29wc2AsIG1vZGVsIHJlZ2lzdHJhdGlvbi9saWZlY3ljbGUgbWFuYWdlbWVudCwgcGFyc2luZyBpbiBgaW8uY29zdC5tb2RlbGAsIGFuZCBhIG5ldyB0cmFjZXBvaW50IGBpb2Nvc3RfaW9jX3RpY2tgLlxuXG5BbiBldmFsdWF0aW9uIG9mIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGFuZCBuZXcgY29kZSBzaG93czpcbi0gQWxsIHN0YWNrIHZhcmlhYmxlcyAoc3VjaCBhcyBgYnBmX21vZGVsYCBpbml0aWFsaXplZCB3aXRoIGBicGZfbW9kZWxbMF0gPSAmIzM5O1xcMCYjMzk7YCwgYG5yX2FjdGl2ZWAgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGBidWZgIGJ1ZmZlcnMgZmlsbGVkIHdpdGggYG1hdGNoX3N0cmxjcHlgKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWQvdXNlLlxuLSBEeW5hbWljIGFsbG9jYXRpb25zIHVzZSBga3phbGxvY2AgKGZvciBgc3RydWN0IGlvY29zdF9icGZfbW9kZWxgKSBhbmQgdGhlIGV4aXN0aW5nIHplcm9lZCBhbGxvY2F0aW9uIGZvciBgc3RydWN0IGlvY2AuXG4tIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZTsgb3V0cHV0IHRvIHVzZXIgc3BhY2UgaXMgaGFuZGxlZCB2aWEgZm9ybWF0dGVkIHRleHQgaW4gYHNlcV9wcmludGZgLlxuLSBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byBCUEYgY2FsbGJhY2tzIChgY2FsY19jb3N0YCwgYGJsa2NnX29ubGluZWAsIGBibGtjZ19vZmZsaW5lYCkgYXJlIGRlcml2ZWQgZGlyZWN0bHkgZnJvbSBpbml0aWFsaXplZCBiaW8vcmVxdWVzdCBzdHJ1Y3R1cmVzIGFuZCBibGtjZyBwb2ludGVycy5cblxuVGhlIHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggc2VyaWVzIHBlcnRhaW4gdG8gUkNVIHN5bmNocm9uaXphdGlvbiwgb2JqZWN0IHJlZmNvdW50aW5nL2xpZmV0aW1lIChgYnBmX3N0cnVjdF9vcHNfZ2V0YC9gcHV0YCksIGFuZCBsb2NraW5nLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZGV0ZWN0b3JzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHNwZWNpZmljIHRvIEtNU0FOIGFyZSBwcmVzZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmM1MGQ0MDM0MzhiNGI0ZTE4OGIxNDhhMGFiNWNjNGFmNWI2N2EwNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE0OjEwOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CmluZGV4IDhkMjYwMzc1MWM1MWEuLmE2OTEwYWQ3YzJkMDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKQEAgLTIxMjQsNiAmIzQzOzIxMjQsMTcgQEAgSU8gSW50ZXJmYWNlIEZpbGVzCiAJcGFyYW1ldGVycyBhcmUgd3JpdHRlbiB0bywgJiMzNDtjdHJsJiMzNDsgYmVjb21lICYjMzQ7dXNlciYjMzQ7IGFuZCB0aGUKIAlhdXRvbWF0aWMgY2hhbmdlcyBhcmUgZGlzYWJsZWQuCiAKJiM0MzsJV2hlbiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGIGlzIGVuYWJsZWQsICYjMzQ7bW9kZWwmIzM0OyBhbHNvIGFjY2VwdHMKJiM0MzsJdGhlIG5hbWUgb2YgYSByZWdpc3RlcmVkIGlvY29zdF9tb2RlbF9vcHMgQlBGIHN0cnVjdF9vcHMgbW9kZWw6CiYjNDM7CSYjMzQ7bW9kZWw9Jmx0O25hbWUmZ3Q7JiMzNDsgYmluZHMgdGhlIG1vZGVsIHRvIHRoZSBkZXZpY2UgYW5kIHRoZSBtb2RlbCBmdWxseQomIzQzOwlyZXBsYWNlcyB0aGUgYnVpbHRpbiBsaW5lYXIgcHJpY2luZywgZm9yIGV2ZXJ5IG9wZXJhdGlvbiBpbmNsdWRpbmcKJiM0MzsJZmx1c2hlczsgJiMzNDttb2RlbD1saW5lYXImIzM0OyAob3IgJiMzNDtjdHJsPWF1dG8vdXNlciYjMzQ7KSByZXN0b3JlcyB0aGUgYnVpbHRpbgomIzQzOwltb2RlbC4gIFdyaXRpbmcgYW4gdW5rbm93biBuYW1lIGZhaWxzIHdpdGggRU5PRU5ULiAgVW5yZWdpc3RlcmluZwomIzQzOwlhIG1vZGVsIHJlbW92ZXMgaXRzIG5hbWU7IGRldmljZXMgYWxyZWFkeSBib3VuZCBrZWVwIHVzaW5nIGl0CiYjNDM7CXVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGZvbGxvd2luZyB0aGUgbGlmZXRpbWUKJiM0MzsJbW9kZWwgb2YgVENQIGNvbmdlc3Rpb24gY29udHJvbC4gIFNlZSBpbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaAomIzQzOwlmb3IgdGhlIG1vZGVsIGludGVyZmFjZS4KJiM0MzsKIAlXaGVuICYjMzQ7bW9kZWwmIzM0OyBpcyAmIzM0O2xpbmVhciYjMzQ7LCB0aGUgZm9sbG93aW5nIG1vZGVsIHBhcmFtZXRlcnMgYXJlCiAJZGVmaW5lZC4KIApkaWZmIC0tZ2l0IGEvYmxvY2svS2NvbmZpZyBiL2Jsb2NrL0tjb25maWcKaW5kZXggNzBlNGE2NmQ5NDFmZi4uOTFlODA4Zjg2ZDI4ZCAxMDA2NDQKLS0tIGEvYmxvY2svS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9LY29uZmlnCkBAIC0yMzEsNCAmIzQzOzIzMSwxMyBAQCBjb25maWcgQkxLX0VSUk9SX0lOSkVDVElPTgogCiBzb3VyY2UgJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWQmIzM0OwogCiYjNDM7Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwlib29sICYjMzQ7RW5hYmxlIEJQRiBwbHVnZ2FibGUgY29zdCBtb2RlbCBzdXBwb3J0IGZvciB0aGUgY29zdCBJTyBjb250cm9sbGVyJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBCTEtfQ0dST1VQX0lPQ09TVCAmYW1wOyZhbXA7IEJQRl9TWVNDQUxMICZhbXA7JmFtcDsgQlBGX0pJVCAmYW1wOyZhbXA7IERFQlVHX0lORk9fQlRGCiYjNDM7CWhlbHAKJiM0MzsJIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHJlZ2lzdGVycyB0aGUgJiMzNDtpb2Nvc3RfbW9kZWxfb3BzJiMzNDsgQlBGCiYjNDM7CSBzdHJ1Y3Rfb3BzIHR5cGUsIHdoaWNoIGFsbG93cyBhIEJQRiBwcm9ncmFtIHRvIGZ1bGx5IHJlcGxhY2UKJiM0MzsJIHRoZSBidWlsdGluIGxpbmVhciBjb3N0IG1vZGVsIG9uIGEgZGV2aWNlIGl0IGlzIGJvdW5kIHRvCiYjNDM7CSB0aHJvdWdoIGlvLmNvc3QubW9kZWwuCiYjNDM7CiBlbmRpZiAjIEJMT0NLCmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlCmluZGV4IGU3YmQzMjBlM2Q2OTcuLmVlNWNlYmVlYTAwNmYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL01ha2VmaWxlCkBAIC0zOSwzICYjNDM7MzksNCBAQCBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OKQkmIzQzOz0gYmxrLWNyeXB0by5vIGJsay1jcnlwdG8tcHJvZmlsZS5vIFwKIAkJCQkJICAgYmxrLWNyeXB0by1zeXNmcy5vCiBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLKQkmIzQzOz0gYmxrLWNyeXB0by1mYWxsYmFjay5vCiBvYmotJChDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQpCSYjNDM7PSBob2xkZXIubwomIzQzO29iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYpCSYjNDM7PSBibGstaW9jb3N0LWJwZi5vCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmMKaW5kZXggMmI1YzI5NDM0ZTQyNi4uODcyODcxMDQ1MzUxYyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwpAQCAtMzIsNiAmIzQzOzMyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wYXJ0X3N0YXQuaCZndDsKICNpbmNsdWRlICYjMzQ7YmxrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtibGstY2dyb3VwLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ibGstaW9jb3N0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2Jsay1pb3ByaW8uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Jsay10aHJvdHRsZS5oJiMzNDsKIApAQCAtMTM0MSw2ICYjNDM7MTM0Miw3IEBAIHZvaWQgYmxrY2dfdW5waW5fb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpibGtjZ19jc3MpCiAgKi8KIHN0YXRpYyB2b2lkIGJsa2NnX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiB7CiYjNDM7CWlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShjc3NfdG9fYmxrY2coY3NzKSk7CiAJLyogdGhpcyBwcmV2ZW50cyBhbnlvbmUgZnJvbSBhdHRhY2hpbmcgb3IgbWlncmF0aW5nIHRvIHRoaXMgYmxrY2cgKi8KIAl3Yl9ibGtjZ19vZmZsaW5lKGNzcyk7CiAKQEAgLTE0NDUsNiAmIzQzOzE0NDcsNyBAQCBibGtjZ19jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAKIHN0YXRpYyBpbnQgYmxrY2dfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogewomIzQzOwlpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShjc3NfdG9fYmxrY2coY3NzKSk7CiAJc3RydWN0IGJsa2NnICpwYXJlbnQgPSBibGtjZ19wYXJlbnQoY3NzX3RvX2Jsa2NnKGNzcykpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgYi9ibG9jay9ibGstaW9jb3N0LWJwZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlYzZkZjI3OTU5OTAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstaW9jb3N0LWJwZi5jCkBAIC0wLDAgJiM0MzsxLDI1MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBibGstaW9jb3N0OiBCUEYgc3RydWN0X29wcyBwbHVtYmluZyBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzLgomIzQzOyAqCiYjNDM7ICogUmVnaXN0ZXJzIHRoZSAmIzM0O2lvY29zdF9tb2RlbF9vcHMmIzM0OyBzdHJ1Y3Rfb3BzIHR5cGUgYW5kIG1haW50YWlucyB0aGUKJiM0MzsgKiBuYW1lIHJlZ2lzdHJ5IG9mIHJlZ2lzdGVyZWQgbW9kZWxzLiAgQSByZWdpc3RlcmVkIG1vZGVsIGlzIGJvdW5kIHRvCiYjNDM7ICogYSBkZXZpY2UgdGhyb3VnaCBpby5jb3N0Lm1vZGVsOyBzZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmguCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGZfdmVyaWZpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnRmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Jsay1pb2Nvc3QuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKGlvY29zdF9icGZfcmVnX2xvY2spOwomIzQzO3N0YXRpYyBMSVNUX0hFQUQoaW9jb3N0X2JwZl9tb2RlbHMpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHJlZ2lzdHJ5IGhvbGRzIGEgYnBmX3N0cnVjdF9vcHNfZ2V0KCkgcmVmZXJlbmNlIG9idGFpbmVkIGluIC5yZWc7CiYjNDM7ICogLnVucmVnIGRyb3BzIGl0LCBzbyB0aGUga2RhdGEgb2YgYW4gdW5yZWdpc3RlcmVkIG1vZGVsIHN0YXlzIGFsaXZlCiYjNDM7ICogd2hpbGUgYW55IGRldmljZSBpcyBzdGlsbCBib3VuZCB0byBpdC4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKJiM0MzsJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wczsKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogTG9vayB1cCBhIHJlZ2lzdGVyZWQgbW9kZWwgYnkgbmFtZSBhbmQgYWNxdWlyZSBhIHJlZmVyZW5jZSBvbiBpdC4KJiM0MzsgKiBUaGUgcmVnaXN0cnkgbG9jayBpcyBoZWxkIGFjcm9zcyBsb29rdXAgYW5kIGJwZl9zdHJ1Y3Rfb3BzX2dldCgpIHNvCiYjNDM7ICogdGhlIG1vZGVsIGNhbm5vdCBiZSB1bnJlZ2lzdGVyZWQgaW4gYmV0d2Vlbi4KJiM0MzsgKi8KJiM0MztpbnQgaW9jb3N0X2JwZl9tb2RlbF9nZXQoY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKipvcHNwKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07CiYjNDM7CWludCByZXQgPSAtRU5PRU5UOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aW9jb3N0X2JwZl9yZWdfbG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJmFtcDtpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkgewomIzQzOwkJaWYgKCFzdHJjbXAobS0mZ3Q7b3BzLSZndDtuYW1lLCBuYW1lKSkgewomIzQzOwkJCWlmIChicGZfc3RydWN0X29wc19nZXQobS0mZ3Q7b3BzKSkgewomIzQzOwkJCQkqb3BzcCA9IG0tJmd0O29wczsKJiM0MzsJCQkJcmV0ID0gMDsKJiM0MzsJCQl9CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7aW9jb3N0X2JwZl9yZWdfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcykKJiM0Mzt7CiYjNDM7CWJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKgomIzQzO2lvY29zdF9icGZfbW9kZWxfbG9va3VwKGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmYW1wO2lvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7CiYjNDM7CQlpZiAobS0mZ3Q7b3BzID09IG9wcykKJiM0MzsJCQlyZXR1cm4gbTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZhbXA7aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHsKJiM0MzsJCWlmIChtLSZndDtvcHMtJmd0O2Jsa2NnX29ubGluZSkKJiM0MzsJCQltLSZndDtvcHMtJmd0O2Jsa2NnX29ubGluZShibGtjZyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmYW1wO2lvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7CiYjNDM7CQlpZiAobS0mZ3Q7b3BzLSZndDtibGtjZ19vZmZsaW5lKQomIzQzOwkJCW0tJmd0O29wcy0mZ3Q7YmxrY2dfb2ZmbGluZShibGtjZyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfaW9jb3N0X21vZGVsX2luaXQoc3RydWN0IGJ0ZiAqYnRmKQomIzQzO3sKJiM0MzsJczMyIHR5cGVfaWQ7CiYjNDM7CiYjNDM7CXR5cGVfaWQgPSBidGZfZmluZF9ieV9uYW1lX2tpbmQoYnRmLCAmIzM0O2lvY29zdF9tb2RlbF9vcHMmIzM0OywgQlRGX0tJTkRfU1RSVUNUKTsKJiM0MzsJaWYgKHR5cGVfaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwKJiM0MzsJCQkJICAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgYnBmX2luc25fYWNjZXNzX2F1eCAqaW5mbykKJiM0Mzt7CiYjNDM7CXJldHVybiBicGZfdHJhY2luZ19idGZfY3R4X2FjY2VzcyhvZmYsIHNpemUsIHR5cGUsIHByb2csIGluZm8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICoKJiM0MzticGZfaW9jb3N0X2dldF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwKJiM0MzsJCQkgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoZnVuY19pZCkgewomIzQzOyNpZmRlZiBDT05GSUdfQ0dST1VQUwomIzQzOwljYXNlIEJQRl9GVU5DX2NncnBfc3RvcmFnZV9nZXQ6CiYjNDM7CQlyZXR1cm4gJmFtcDticGZfY2dycF9zdG9yYWdlX2dldF9wcm90bzsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBicGZfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7ewomIzQzOwkvKiBjYWxjX2Nvc3QoKSBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQgKi8KJiM0MzsJaWYgKHByb2ctJmd0O3NsZWVwYWJsZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfaW9jb3N0X2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLAomIzQzOwkJCQkgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTsKJiM0MzsJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKnVvcHMgPSB1ZGF0YTsKJiM0MzsJdTMyIG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODsKJiM0MzsKJiM0MzsJc3dpdGNoIChtb2ZmKSB7CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlvY29zdF9tb2RlbF9vcHMsIG5hbWUpOgomIzQzOwkJaWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLSZndDtuYW1lLCB1b3BzLSZndDtuYW1lLAomIzQzOwkJCQkgICAgIHNpemVvZihvcHMtJmd0O25hbWUpKSAmbHQ7PSAwKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF92YWxpZGF0ZSh2b2lkICprZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9wcy0mZ3Q7Y2FsY19jb3N0ID8gMCA6IC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF9yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTsKJiM0MzsJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIWJwZl9zdHJ1Y3Rfb3BzX2dldChvcHMpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CW0gPSBremFsbG9jKHNpemVvZigqbSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIW0pIHsKJiM0MzsJCWJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwl7CiYjNDM7CQlzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqb3RoZXI7CiYjNDM7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG90aGVyLCAmYW1wO2lvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAob3RoZXItJmd0O29wcy0mZ3Q7bmFtZSwgb3BzLSZndDtuYW1lKSkgewomIzQzOwkJCQlyZXQgPSAtRUVYSVNUOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCW0tJmd0O29wcyA9IG9wczsKJiM0MzsJCWxpc3RfYWRkKCZhbXA7bS0mZ3Q7bGlzdCwgJmFtcDtpb2Nvc3RfYnBmX21vZGVscyk7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7aW9jb3N0X2JwZl9yZWdfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpOwomIzQzOwkJa2ZyZWUobSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnBmX2lvY29zdF91bnJlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhOwomIzQzOwlzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwltID0gaW9jb3N0X2JwZl9tb2RlbF9sb29rdXAob3BzKTsKJiM0MzsJaWYgKG0pIHsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7bS0mZ3Q7bGlzdCk7CiYjNDM7CQlicGZfc3RydWN0X29wc19wdXQob3BzKTsKJiM0MzsJCWtmcmVlKG0pOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2lvY29zdF92ZXJpZmllcl9vcHMgPSB7CiYjNDM7CS5nZXRfZnVuY19wcm90byA9IGJwZl9pb2Nvc3RfZ2V0X2Z1bmNfcHJvdG8sCiYjNDM7CS5pc192YWxpZF9hY2Nlc3MgPSBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcywKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1NjQgYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1Yih1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLAomIzQzOwkJCQkgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgX19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMgPSB7CiYjNDM7CS5jYWxjX2Nvc3QgPSBicGZfaW9jb3N0X2NhbGNfY29zdF9zdHViLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfaW9jb3N0X21vZGVsX29wcyA9IHsKJiM0MzsJLnZlcmlmaWVyX29wcyA9ICZhbXA7YnBmX2lvY29zdF92ZXJpZmllcl9vcHMsCiYjNDM7CS5pbml0ID0gYnBmX2lvY29zdF9tb2RlbF9pbml0LAomIzQzOwkuY2hlY2tfbWVtYmVyID0gYnBmX2lvY29zdF9jaGVja19tZW1iZXIsCiYjNDM7CS5pbml0X21lbWJlciA9IGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXIsCiYjNDM7CS52YWxpZGF0ZSA9IGJwZl9pb2Nvc3RfdmFsaWRhdGUsCiYjNDM7CS5yZWcgPSBicGZfaW9jb3N0X3JlZywKJiM0MzsJLnVucmVnID0gYnBmX2lvY29zdF91bnJlZywKJiM0MzsJLm5hbWUgPSAmIzM0O2lvY29zdF9tb2RlbF9vcHMmIzM0OywKJiM0MzsJLmNmaV9zdHVicyA9ICZhbXA7X19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMsCiYjNDM7CS5vd25lciA9IFRISVNfTU9EVUxFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgYnBmX2lvY29zdF9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVnaXN0ZXJfYnBmX3N0cnVjdF9vcHMoJmFtcDticGZfaW9jb3N0X21vZGVsX29wcywgaW9jb3N0X21vZGVsX29wcyk7CiYjNDM7fQomIzQzO2xhdGVfaW5pdGNhbGwoYnBmX2lvY29zdF9pbml0KTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QuYyBiL2Jsb2NrL2Jsay1pb2Nvc3QuYwppbmRleCAyNzQ1YmZmY2Q1ZWVmLi5iY2NkYmQyNDk2ZDgzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstaW9jb3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvY29zdC5jCkBAIC0xNzcsNiAmIzQzOzE3Nyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYXJzZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrLWlvY29zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9sb2NhbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9sb2NhbDY0LmgmZ3Q7CkBAIC00NDUsNiAmIzQzOzQ0NiwxMSBAQCBzdHJ1Y3QgaW9jIHsKIAlpbnQJCQkJYXV0b3BfaWR4OwogCWJvb2wJCQkJdXNlcl9xb3NfcGFyYW1zOjE7CiAJYm9vbAkJCQl1c2VyX2Nvc3RfbW9kZWw6MTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwkvKiBib3VuZCBCUEYgY29zdCBtb2RlbCwgTlVMTCA9IGJ1aWx0aW4gbGluZWFyIG1vZGVsICovCiYjNDM7CWNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzCV9fcmN1ICptb2RlbDsKJiM0MzsjZW5kaWYKIH07CiAKIHN0cnVjdCBpb2NnX3BjcHVfc3RhdCB7CkBAIC0yMjM4LDYgJiM0MzsyMjQ0LDcgQEAgc3RhdGljIHZvaWQgaW9jX3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKIAlzdHJ1Y3QgaW9jX25vdyBub3c7CiAJTElTVF9IRUFEKHN1cnBsdXNlcyk7CiAJaW50IG5yX2RlYnRvcnMsIG5yX3Nob3J0YWdlcyA9IDAsIG5yX2xhZ2dpbmcgPSAwOwomIzQzOwlpbnQgbnJfYWN0aXZlID0gMDsKIAl1NjQgdXNhZ2VfdXNfc3VtID0gMDsKIAl1MzIgcHBtX3J0aHI7CiAJdTMyIHBwbV93dGhyOwpAQCAtMjI3NCw2ICYjNDM7MjI4MSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiAJCXU2NCB2ZG9uZSwgdnRpbWUsIHVzYWdlX3VzOwogCQl1MzIgaHdfYWN0aXZlLCBod19pbnVzZTsKIAomIzQzOwkJbnJfYWN0aXZlJiM0MzsmIzQzOzsKJiM0MzsKIAkJLyoKIAkJICogQ29sbGVjdCB1bnVzZWQgYW5kIHdpbmQgdnRpbWUgY2xvc2VyIHRvIHZub3cgdG8gcHJldmVudAogCQkgKiBpb2NncyBmcm9tIGFjY3VtdWxhdGluZyBhIGxhcmdlIGFtb3VudCBvZiBidWRnZXQuCkBAIC0yNDYwLDYgJiM0MzsyNDY5LDggQEAgc3RhdGljIHZvaWQgaW9jX3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKIAkJaW9jX3JlZnJlc2hfdnJhdGUoaW9jLCAmYW1wO25vdyk7CiAJfQogCiYjNDM7CXRyYWNlX2lvY29zdF9pb2NfdGljayhpb2MsIG5yX2FjdGl2ZSwgdXNhZ2VfdXNfc3VtKTsKJiM0MzsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwogfQogCkBAIC0yNTcxLDEwICYjNDM7MjU4MiwyOCBAQCBzdGF0aWMgdm9pZCBjYWxjX3Z0aW1lX2Nvc3RfYnVpbHRpbihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb2NfZ3EgKmlvY2csCiAKIHN0YXRpYyB1NjQgY2FsY192dGltZV9jb3N0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZywgYm9vbCBpc19tZXJnZSkKIHsKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwljb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7CiAJdTY0IGNvc3Q7CiAKLQljYWxjX3Z0aW1lX2Nvc3RfYnVpbHRpbihiaW8sIGlvY2csIGlzX21lcmdlLCAmYW1wO2Nvc3QpOwotCXJldHVybiBjb3N0OwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW1vZGVsID0gcmN1X2RlcmVmZXJlbmNlKGlvY2ctJmd0O2lvYy0mZ3Q7bW9kZWwpOwomIzQzOwlpZiAobW9kZWwpIHsKJiM0MzsJCWNvc3QgPSBtb2RlbC0mZ3Q7Y2FsY19jb3N0KGJpby0mZ3Q7Ymlfb3BmLCBiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSwKJiM0MzsJCQkJCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IsCiYjNDM7CQkJCQlpb2NnX3RvX2Jsa2coaW9jZyktJmd0O2Jsa2NnLAomIzQzOwkJCQkJaXNfbWVyZ2UgPyBJT0NPU1RfQ09TVF9GX01FUkdFIDogMCk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiBtaW4oY29zdCwgVlRJTUVfUEVSX1NFQyk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7I2VuZGlmCiYjNDM7CXsKJiM0MzsJCXU2NCBjb3N0OwomIzQzOwomIzQzOwkJY2FsY192dGltZV9jb3N0X2J1aWx0aW4oYmlvLCBpb2NnLCBpc19tZXJnZSwgJmFtcDtjb3N0KTsKJiM0MzsJCXJldHVybiBjb3N0OwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIGNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW9jICppb2MsCkBAIC0yNTk2LDEwICYjNDM7MjYyNSwyOCBAQCBzdGF0aWMgdm9pZCBjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvYyAqaW9jLAogCiBzdGF0aWMgdTY0IGNhbGNfc2l6ZV92dGltZV9jb3N0KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvYyAqaW9jKQogewotCXU2NCBjb3N0OwomIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGCiYjNDM7CWNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICptb2RlbDsKIAotCWNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4ocnEsIGlvYywgJmFtcDtjb3N0KTsKLQlyZXR1cm4gY29zdDsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltb2RlbCA9IHJjdV9kZXJlZmVyZW5jZShpb2MtJmd0O21vZGVsKTsKJiM0MzsJaWYgKG1vZGVsICZhbXA7JmFtcDsgcnEtJmd0O2JpbyAmYW1wOyZhbXA7IHJxLSZndDtiaW8tJmd0O2JpX2Jsa2cpIHsKJiM0MzsJCXU2NCBjb3N0OwomIzQzOwomIzQzOwkJY29zdCA9IG1vZGVsLSZndDtjYWxjX2Nvc3QocnEtJmd0O2NtZF9mbGFncywgYmxrX3JxX2J5dGVzKHJxKSwKJiM0MzsJCQkJCWJsa19ycV9wb3MocnEpLAomIzQzOwkJCQkJcnEtJmd0O2Jpby0mZ3Q7YmlfYmxrZy0mZ3Q7YmxrY2csIDApOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOyNlbmRpZgomIzQzOwl7CiYjNDM7CQl1NjQgY29zdDsKJiM0MzsKJiM0MzsJCWNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4ocnEsIGlvYywgJmFtcDtjb3N0KTsKJiM0MzsJCXJldHVybiBjb3N0OwomIzQzOwl9CiB9CiAKIGVudW0gb3Zlcl9idWRnZXRfYWN0aW9uIHsKQEAgLTI5MDAsNiAmIzQzOzI5NDcsMTkgQEAgc3RhdGljIHZvaWQgaW9jX3Jxb3NfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKQogCiAJdGltZXJfc2h1dGRvd25fc3luYygmYW1wO2lvYy0mZ3Q7dGltZXIpOwogCWZyZWVfcGVyY3B1KGlvYy0mZ3Q7cGNwdV9zdGF0KTsKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwl7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7CiYjNDM7CiYjNDM7CQlzcGluX2xvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKJiM0MzsJCW1vZGVsID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtJmd0O21vZGVsLAomIzQzOwkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7aW9jLSZndDtsb2NrKSk7CiYjNDM7CQlyY3VfYXNzaWduX3BvaW50ZXIoaW9jLSZndDttb2RlbCwgTlVMTCk7CiYjNDM7CQlzcGluX3VubG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwomIzQzOwkJaWYgKG1vZGVsKQomIzQzOwkJCWlvY29zdF9icGZfbW9kZWxfcHV0KG1vZGVsKTsKJiM0MzsJfQomIzQzOyNlbmRpZgogCWtmcmVlKGlvYyk7CiB9CiAKQEAgLTM0MzgsMTIgJiM0MzszNDk4LDMwIEBAIHN0YXRpYyB1NjQgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsKHN0cnVjdCBzZXFfZmlsZSAqc2YsCiAJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycSgmYW1wO2lvYy0mZ3Q7bG9jayk7CiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJewomIzQzOwkJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsID0KJiM0MzsJCQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlvYy0mZ3Q7bW9kZWwsCiYjNDM7CQkJCQlsb2NrZGVwX2lzX2hlbGQoJmFtcDtpb2MtJmd0O2xvY2spKTsKJiM0MzsKJiM0MzsJCXNlcV9wcmludGYoc2YsICYjMzQ7JXMgY3RybD0lcyBtb2RlbD0lcyAmIzM0OwomIzQzOwkJCSAgICYjMzQ7cmJwcz0lbGx1IHJzZXFpb3BzPSVsbHUgcnJhbmRpb3BzPSVsbHUgJiMzNDsKJiM0MzsJCQkgICAmIzM0O3dicHM9JWxsdSB3c2VxaW9wcz0lbGx1IHdyYW5kaW9wcz0lbGx1XG4mIzM0OywKJiM0MzsJCQkgICBkbmFtZSwgbW9kZWwgPyAmIzM0O2JwZiYjMzQ7IDoKJiM0MzsJCQkJICAgaW9jLSZndDt1c2VyX2Nvc3RfbW9kZWwgPyAmIzM0O3VzZXImIzM0OyA6ICYjMzQ7YXV0byYjMzQ7LAomIzQzOwkJCSAgIG1vZGVsID8gbW9kZWwtJmd0O25hbWUgOiAmIzM0O2xpbmVhciYjMzQ7LAomIzQzOwkJCSAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSwKJiM0MzsJCQkgICB1W0lfTENPRUZfUlJBTkRJT1BTXSwgdVtJX0xDT0VGX1dCUFNdLAomIzQzOwkJCSAgIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTsKJiM0MzsJfQomIzQzOyNlbHNlCiAJc2VxX3ByaW50ZihzZiwgJiMzNDslcyBjdHJsPSVzIG1vZGVsPWxpbmVhciAmIzM0OwogCQkgICAmIzM0O3JicHM9JWxsdSByc2VxaW9wcz0lbGx1IHJyYW5kaW9wcz0lbGx1ICYjMzQ7CiAJCSAgICYjMzQ7d2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcbiYjMzQ7LAogCQkgICBkbmFtZSwgaW9jLSZndDt1c2VyX2Nvc3RfbW9kZWwgPyAmIzM0O3VzZXImIzM0OyA6ICYjMzQ7YXV0byYjMzQ7LAogCQkgICB1W0lfTENPRUZfUkJQU10sIHVbSV9MQ09FRl9SU0VRSU9QU10sIHVbSV9MQ09FRl9SUkFORElPUFNdLAogCQkgICB1W0lfTENPRUZfV0JQU10sIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTsKJiM0MzsjZW5kaWYKIAlzcGluX3VubG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwogCXJldHVybiAwOwogfQpAQCAtMzQ1Nyw2ICYjNDM7MzUzNSwzNyBAQCBzdGF0aWMgaW50IGlvY19jb3N0X21vZGVsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogQmluZCBAbmFtZSAoZW1wdHkgPSBidWlsdGluIGxpbmVhciBtb2RlbCkgYXMgdGhlIGFjdGl2ZSBjb3N0IG1vZGVsIG9mCiYjNDM7ICogQGlvYy4gIFRoZSByZWdpc3RyeSBsb29rdXAgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGhhcHBlbiBvdXRzaWRlCiYjNDM7ICogaW9jLSZndDtsb2NrOyB0aGUgcG9pbnRlciBzd2FwIGhhcHBlbnMgdW5kZXIgaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBpb2NfYnBmX21vZGVsX2JpbmQoc3RydWN0IGlvYyAqaW9jLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwljb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbmV3ID0gTlVMTCwgKm9sZDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKG5hbWVbMF0pIHsKJiM0MzsJCXJldCA9IGlvY29zdF9icGZfbW9kZWxfZ2V0KG5hbWUsICZhbXA7bmV3KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKJiM0MzsJb2xkID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtJmd0O21vZGVsLAomIzQzOwkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7aW9jLSZndDtsb2NrKSk7CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihpb2MtJmd0O21vZGVsLCBuZXcpOwomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAob2xkKQomIzQzOwkJaW9jb3N0X2JwZl9tb2RlbF9wdXQob2xkKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7I2Vsc2UKJiM0MzsJcmV0dXJuIG5hbWVbMF0gPyAtRU5PRU5UIDogMDsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBjb3N0X2N0cmxfdG9rZW5zID0gewogCXsgQ09TVF9DVFJMLAkJJiMzNDtjdHJsPSVzJiMzNDsJfSwKIAl7IENPU1RfTU9ERUwsCQkmIzM0O21vZGVsPSVzJiMzNDsJfSwKQEAgLTM0ODIsNiAmIzQzOzM1OTEsNyBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LAogCXN0cnVjdCBpb2MgKmlvYzsKIAl1NjQgdVtOUl9JX0xDT0VGU107CiAJYm9vbCB1c2VyOwomIzQzOwljaGFyIGJwZl9tb2RlbFtJT0NPU1RfTU9ERUxfTkFNRV9MRU5dOwogCWNoYXIgKmJvZHksICpwOwogCWludCByZXQ7CiAKQEAgLTM1MTIsNiAmIzQzOzM2MjIsNyBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LAogCXNwaW5fbG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwogCW1lbWNweSh1LCBpb2MtJmd0O3BhcmFtcy5pX2xjb2Vmcywgc2l6ZW9mKHUpKTsKIAl1c2VyID0gaW9jLSZndDt1c2VyX2Nvc3RfbW9kZWw7CiYjNDM7CWJwZl9tb2RlbFswXSA9ICYjMzk7XDAmIzM5OzsKIAogCXJldCA9IC1FSU5WQUw7CiAKQEAgLTM1MzMsMTEgJiM0MzszNjQ0LDE2IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsCiAJCQkJdXNlciA9IHRydWU7CiAJCQllbHNlCiAJCQkJZ290byB1bmxvY2s7CiYjNDM7CQkJYnBmX21vZGVsWzBdID0gJiMzOTtcMCYjMzk7OwogCQkJY29udGludWU7CiAJCWNhc2UgQ09TVF9NT0RFTDoKIAkJCW1hdGNoX3N0cmxjcHkoYnVmLCAmYW1wO2FyZ3NbMF0sIHNpemVvZihidWYpKTsKLQkJCWlmIChzdHJjbXAoYnVmLCAmIzM0O2xpbmVhciYjMzQ7KSkKLQkJCQlnb3RvIHVubG9jazsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWYsICYjMzQ7bGluZWFyJiMzNDspKSB7CiYjNDM7CQkJCS8qIGJhY2sgdG8gdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsICovCiYjNDM7CQkJCWJwZl9tb2RlbFswXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQomIzQzOwkJCW1hdGNoX3N0cmxjcHkoYnBmX21vZGVsLCAmYW1wO2FyZ3NbMF0sIHNpemVvZihicGZfbW9kZWwpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTM1NjMsNiAmIzQzOzM2NzksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCwKIHVubG9jazoKIAlzcGluX3VubG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwogCiYjNDM7CS8qCiYjNDM7CSAqIEJpbmQgdGhlIEJQRiBtb2RlbCBvdXRzaWRlIGlvYy0mZ3Q7bG9jazogdGhlIHJlZ2lzdHJ5IGxvb2t1cAomIzQzOwkgKiB0YWtlcyB0aGUgcmVnaXN0cmF0aW9uIG11dGV4IGFuZCB0aGUgb2xkIG1vZGVsJiMzOTtzIHJlZmVyZW5jZQomIzQzOwkgKiBpcyBkcm9wcGVkIGFmdGVyIHRoZSBzd2FwLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXQgPSBpb2NfYnBmX21vZGVsX2JpbmQoaW9jLCBicGZfbW9kZWwpOwomIzQzOwogCWJsa19tcV91bnF1aWVzY2VfcXVldWUocSk7CiAJYmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmggYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zYTA4NTVlZmI2MTA3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmgKQEAgLTAsMCAmIzQzOzEsODIgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX0xJTlVYX0JMS19JT0NPU1RfSAomIzQzOyNkZWZpbmUgX0xJTlVYX0JMS19JT0NPU1RfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ibGtfdHlwZXMuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIElPQ09TVF9NT0RFTF9OQU1FX0xFTgkxNgomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGCiYjNDM7CiYjNDM7c3RydWN0IGJsa2NnOwomIzQzOwomIzQzOy8qCiYjNDM7ICogUGx1Z2dhYmxlIGNvc3QgbW9kZWwgaW50ZXJmYWNlIGZvciBibGstaW9jb3N0LgomIzQzOyAqCiYjNDM7ICogQSBCUEYgc3RydWN0X29wcyBpbXBsZW1lbnRhdGlvbiByZWdpc3RlcmVkIGFnYWluc3QgJiMzNDtpb2Nvc3RfbW9kZWxfb3BzJiMzNDsKJiM0MzsgKiBmdWxseSByZXBsYWNlcyB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgb24gdGhlIGRldmljZXMgaXQgaXMgYm91bmQgdG8KJiM0MzsgKiB0aHJvdWdoIGlvLmNvc3QubW9kZWwuICBUaGUgbW9kZWwgb3ducyBwcmljaW5nIGZvciBldmVyeSBJTyBvbiBhIGJvdW5kCiYjNDM7ICogZGV2aWNlOiBpdCBwcmljZXMgYWxsIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBmbHVzaGVzLCBhbmQgYm90aCB0aGUgYmlvCiYjNDM7ICogY2hhcmdpbmcgcGF0aCBhbmQgdGhlIHJlcXVlc3QtbGV2ZWwgc2l6aW5nIHBhdGggY29uc3VsdCBpdC4KJiM0MzsgKgomIzQzOyAqIGNhbGNfY29zdCgpIGlzIGNhbGxlZCBmcm9tIHRoZSBJTyBzdWJtaXNzaW9uIHBhdGggd2l0aCBSQ1UgcmVhZCBsb2NrCiYjNDM7ICogaGVsZCBhbmQgbXVzdCBub3Qgc2xlZXAuICBJdCByZXR1cm5zIHRoZSBjb3N0IG9mIHRoZSBJTyBpbiB2dGltZQomIzQzOyAqIHVuaXRzLCB3aGVyZSAxIHNlY29uZCBvZiBkZXZpY2UgdGltZSBlcXVhbHMgVlRJTUVfUEVSX1NFQyAoMl4zNywKJiM0MzsgKiBhdmFpbGFibGUgdG8gQlBGIHByb2dyYW1zIHRocm91Z2ggdm1saW51eC5oKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBpcwomIzQzOyAqIGNsYW1wZWQgdG8gMSBzZWNvbmQgb2YgZGV2aWNlIHRpbWUgcGVyIElPLgomIzQzOyAqCiYjNDM7ICogVGhlIG1vZGVsIGlzIHBhc3NlZCB0aGUgYmxrY2cgb2YgdGhlIGlzc3VpbmcgY2dyb3VwIHNvIGl0IGNhbiBrZWVwCiYjNDM7ICogcGVyLWNncm91cCBzdGF0ZS4gIGJsa2NnX29ubGluZSgpL2Jsa2NnX29mZmxpbmUoKSBhcmUgb3B0aW9uYWwKJiM0MzsgKiBjYWxsYmFja3MgbWlycm9yaW5nIHRoZSBibGtjZyBjc3MgbGlmZWN5Y2xlOiBzdGF0ZSBjcmVhdGVkIG9uIG9ubGluZQomIzQzOyAqIChvciBsYXppbHkgb24gZmlyc3QgdXNlKSBtdXN0IGJlIHJlbGVhc2VkIG9uIG9mZmxpbmUuCiYjNDM7ICoKJiM0MzsgKiBUaGUgcmVnaXN0cmF0aW9uIGFuZCBiaW5kaW5nIG1vZGVsIGZvbGxvd3MgdGhlIFRDUCBjb25nZXN0aW9uCiYjNDM7ICogY29udHJvbCBmcmFtZXdvcms6IHJlZ2lzdGVyaW5nIGEgc3RydWN0X29wcyBtYWtlcyB0aGUgbW9kZWwgYXZhaWxhYmxlCiYjNDM7ICogYnkgaXRzIG5hbWUsIHdoaWxlIGlvLmNvc3QubW9kZWwgYmluZHMgb25lIHJlZ2lzdGVyZWQgbW9kZWwgdG8gYQomIzQzOyAqIGRldmljZS4gIFVucmVnaXN0ZXJpbmcgcmVtb3ZlcyB0aGUgbmFtZSBmcm9tIHRoZSByZWdpc3RyeTsgZGV2aWNlcwomIzQzOyAqIGFscmVhZHkgYm91bmQga2VlcCB1c2luZyBpdCB1bnRpbCBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBidWlsdGluCiYjNDM7ICogbW9kZWwuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBJT0NPU1RfTU9ERUxfTkFNRV9MRU4JMTYKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGlvY29zdC1zcGVjaWZpYyBjYWxsIG1ldGFkYXRhIGZvciBjYWxjX2Nvc3QoKSYjMzk7cyBtb2RlbF9mbGFncwomIzQzOyAqIGFyZ3VtZW50OyBldmVyeXRoaW5nIGVsc2UsIGluY2x1ZGluZyBSRVFfUFJFRkxVU0gvUkVRX0ZVQSwgaXMKJiM0MzsgKiBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIG9wZiBhcmd1bWVudAomIzQzOyAqLwomIzQzOyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRQkoMVVMTCAmbHQ7Jmx0OyAwKQkvKiBjYWxsZWQgZnJvbSBtZXJnZSBwYXRoICovCiYjNDM7CiYjNDM7c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgewomIzQzOwl1NjQgKCpjYWxjX2Nvc3QpKHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHNlY3Rvcl90IHNlY3RvciwKJiM0MzsJCQkgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKTsKJiM0MzsJdm9pZCAoKmJsa2NnX29ubGluZSkoc3RydWN0IGJsa2NnICpibGtjZyk7CiYjNDM7CXZvaWQgKCpibGtjZ19vZmZsaW5lKShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTsKJiM0MzsKJiM0MzsJLyogbW9kZWwgbmFtZSwgdXNlZCB0byBzZWxlY3QgdGhlIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCAqLwomIzQzOwljaGFyIG5hbWVbMTZdOwomIzQzO307CiYjNDM7CiYjNDM7aW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJIGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcCk7CiYjNDM7dm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKTsKJiM0Mzt2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpOwomIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpOwomIzQzOwomIzQzOyNlbHNlCS8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi8KJiM0MzsKJiM0MztzdHJ1Y3QgYmxrY2c7CiYjNDM7c3RydWN0IGlvY29zdF9tb2RlbF9vcHM7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgaW9jb3N0X2JwZl9tb2RlbF9nZXQoY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpIHsgfQomIzQzOwomIzQzOyNlbmRpZgkvKiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGICovCiYjNDM7I2VuZGlmCS8qIF9MSU5VWF9CTEtfSU9DT1NUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgKaW5kZXggZTc3MmIxYmM2MGQ2MC4uMmI5ZmYzNDhhNGY1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgKQEAgLTE3OCw2ICYjNDM7MTc4LDQ2IEBAIFRSQUNFX0VWRU5UKGlvY29zdF9pb2NfdnJhdGVfYWRqLAogCSkKICk7CiAKJiM0MzsvKgomIzQzOyAqIFBlcmlvZGljIHBlci1kZXZpY2Ugc3VtbWFyeSwgZW1pdHRlZCBvbmNlIHBlciBwZXJpb2QgZnJvbSB0aGUgdGFpbCBvZgomIzQzOyAqIGlvY190aW1lcl9mbigpLiAgVW5saWtlIHRoZSBzdGF0ZS1jaGFuZ2UgZXZlbnRzIGFib3ZlLCB0aGlzIGZpcmVzIGV2ZXJ5CiYjNDM7ICogcGVyaW9kIHRoZSBjb250cm9sbGVyIGlzIHJ1bm5pbmcsIGluY2x1ZGluZyBzdGVhZHkgc3RhdGVzLCBhbmQgY2FycmllcwomIzQzOyAqIHRoZSBvdmVyYWxsIGNvbnRyb2xsZXIgc3RhdGUgc28gYmFzaWMgbW9uaXRvcmluZyBkb2VzbiYjMzk7dCByZXF1aXJlIGRyZ24uCiYjNDM7ICovCiYjNDM7VFJBQ0VfRVZFTlQoaW9jb3N0X2lvY190aWNrLAomIzQzOwomIzQzOwlUUF9QUk9UTyhzdHJ1Y3QgaW9jICppb2MsIGludCBucl9hY3RpdmUsIHU2NCB1c2FnZV91c19zdW0pLAomIzQzOwomIzQzOwlUUF9BUkdTKGlvYywgbnJfYWN0aXZlLCB1c2FnZV91c19zdW0pLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5ICgKJiM0MzsJCV9fc3RyaW5nKGRldm5hbWUsIGlvY19uYW1lKGlvYykpCiYjNDM7CQlfX2ZpZWxkKHUzMiwgcGVyaW9kX3VzKQomIzQzOwkJX19maWVsZCh1NjQsIHZyYXRlKQomIzQzOwkJX19maWVsZChpbnQsIGJ1c3lfbGV2ZWwpCiYjNDM7CQlfX2ZpZWxkKGludCwgbnJfYWN0aXZlKQomIzQzOwkJX19maWVsZCh1MzIsIHVzYWdlX3BjdCkKJiM0MzsJCV9fZmllbGQoaW50LCBydW5uaW5nKQomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCV9fYXNzaWduX3N0cihkZXZuYW1lKTsKJiM0MzsJCV9fZW50cnktJmd0O3BlcmlvZF91cyA9IGlvYy0mZ3Q7cGVyaW9kX3VzOwomIzQzOwkJX19lbnRyeS0mZ3Q7dnJhdGUgPSBpb2MtJmd0O3Z0aW1lX2Jhc2VfcmF0ZTsKJiM0MzsJCV9fZW50cnktJmd0O2J1c3lfbGV2ZWwgPSBpb2MtJmd0O2J1c3lfbGV2ZWw7CiYjNDM7CQlfX2VudHJ5LSZndDtucl9hY3RpdmUgPSBucl9hY3RpdmU7CiYjNDM7CQlfX2VudHJ5LSZndDt1c2FnZV9wY3QgPSBpb2MtJmd0O3BlcmlvZF91cyA/CiYjNDM7CQkJZGl2X3U2NCh1c2FnZV91c19zdW0gKiAxMDAsIGlvYy0mZ3Q7cGVyaW9kX3VzKSA6IDA7CiYjNDM7CQlfX2VudHJ5LSZndDtydW5uaW5nID0gaW9jLSZndDtydW5uaW5nOwomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9wcmludGsoJiMzNDtbJXNdIHBlcmlvZD0ldXVzIHZyYXRlPSVsbHUgYnVzeT0lZCBhY3RpdmU9JWQgdXNhZ2U9JXUlJSBydW5uaW5nPSVkJiMzNDssCiYjNDM7CQlfX2dldF9zdHIoZGV2bmFtZSksIF9fZW50cnktJmd0O3BlcmlvZF91cywgX19lbnRyeS0mZ3Q7dnJhdGUsCiYjNDM7CQlfX2VudHJ5LSZndDtidXN5X2xldmVsLCBfX2VudHJ5LSZndDtucl9hY3RpdmUsIF9fZW50cnktJmd0O3VzYWdlX3BjdCwKJiM0MzsJCV9fZW50cnktJmd0O3J1bm5pbmcKJiM0MzsJKQomIzQzOyk7CiYjNDM7CiBUUkFDRV9FVkVOVChpb2Nvc3RfaW9jZ19mb3JnaXZlX2RlYnQsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgaW9jX2dxICppb2NnLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgaW9jX25vdyAqbm93LApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcKaW5kZXggMmY3OTY4OGRjZjdjZS4uNjdhNjMwY2I1NjE0OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnCkBAIC0xMzgsMyAmIzQzOzEzOCw1IEBAIENPTkZJR19TTUNfSFNfQ1RSTF9CUEY9eQogQ09ORklHX0RJQlM9eQogQ09ORklHX0RJQlNfTE89eQogQ09ORklHX1BNX1dBS0VMT0NLUz15CiYjNDM7Q09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXkKJiM0MztDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaW9jb3N0X21vZGVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZTkzNDRiMTNmYmE5OAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jCkBAIC0wLDAgJiM0MzsxLDE5MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtpb2Nvc3RfbW9kZWwuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2lvY29zdF9tcy5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogV3JpdGUgYSBsaW5lIHRvIGlvLmNvc3QubW9kZWwgd2l0aCB3cml0ZSgyKSBhbmQgcmV0dXJuIHRoZSBlcnJubyBvZgomIzQzOyAqIHRoZSBmYWlsZWQgd3JpdGUsIG9yIDAgb24gc3VjY2Vzcy4gIHN0ZGlvIGlzIG5vdCB1c2VkIGhlcmUgb24KJiM0MzsgKiBwdXJwb3NlOiB0aGUga2VybmVsJiMzOTtzIHJlamVjdGlvbiBoYXBwZW5zIGluIHRoZSB3cml0ZSgpIHN5c2NhbGwsCiYjNDM7ICogbm90IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIGNvcHksIGFuZCBldmVyeSB3cml0ZSwgaW5jbHVkaW5nCiYjNDM7ICogdGhlIGVycm9yIHBhdGhzIG9mIHRoZSBjYWxsZXJzIGJlbG93LCBpcyBjaGVja2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfY29zdF9tb2RlbChjb25zdCBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVyciA9IDA7CiYjNDM7CXNzaXplX3QgbjsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5tb2RlbCYjMzQ7LCBPX1dST05MWSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJybm87CiYjNDM7CW4gPSB3cml0ZShmZCwgYnVmLCBzdHJsZW4oYnVmKSk7CiYjNDM7CWlmIChuICZsdDsgMCkKJiM0MzsJCWVyciA9IGVycm5vOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVhZCBiYWNrIHRoZSBpby5jb3N0Lm1vZGVsIGxpbmUgb2YgZGV2IGFuZCBjb3B5IHRoZSBtb2RlbD0gdmFsdWUKJiM0MzsgKiBpbnRvIEBtb2RlbC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcmVhZGJhY2tfbW9kZWwoY29uc3QgY2hhciAqZGV2LCBjaGFyICptb2RlbCwgc2l6ZV90IG1vZGVsX3N6KQomIzQzO3sKJiM0MzsJY2hhciBsaW5lWzI1Nl0sIHdvcmRbMjU2XSwgKm0sICplbmQ7CiYjNDM7CUZJTEUgKmZwOwomIzQzOwlpbnQgZm91bmQgPSAwOwomIzQzOwomIzQzOwlmcCA9IGZvcGVuKCYjMzQ7L3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5tb2RlbCYjMzQ7LCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZnApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSkgewomIzQzOwkJaWYgKHNzY2FuZihsaW5lLCAmIzM0OyUyNTVzJiMzNDssIHdvcmQpID09IDEgJmFtcDsmYW1wOyAhc3RyY21wKHdvcmQsIGRldikpIHsKJiM0MzsJCQlmb3VuZCA9IDE7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJZmNsb3NlKGZwKTsKJiM0MzsJaWYgKCFmb3VuZCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJbSA9IHN0cnN0cihsaW5lLCAmIzM0O21vZGVsPSYjMzQ7KTsKJiM0MzsJaWYgKCFtKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwltICYjNDM7PSBzdHJsZW4oJiMzNDttb2RlbD0mIzM0Oyk7CiYjNDM7CWVuZCA9IG07CiYjNDM7CXdoaWxlICgqZW5kICZhbXA7JmFtcDsgIWlzc3BhY2UoKmVuZCkpCiYjNDM7CQllbmQmIzQzOyYjNDM7OwomIzQzOwlzbnByaW50Zihtb2RlbCwgbW9kZWxfc3osICYjMzQ7JS4qcyYjMzQ7LCAoaW50KShlbmQgLSBtKSwgbSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEJpbmQgdGhlIG5hbWVkIG1vZGVsIHRvIGEgZGV2aWNlIHdpdGggJiMzNDttb2RlbD0mbHQ7bmFtZSZndDsmIzM0OywgdmVyaWZ5IHRoZQomIzQzOyAqIHJlYWRiYWNrIGFuZCByZXN0b3JlIHRoZSBidWlsdGluIG1vZGVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBiaW5kX21vZGVsKGNvbnN0IGNoYXIgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzMwMF0sIGdvdFs2NF07CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7JXMgbW9kZWw9JXNcbiYjMzQ7LCBkZXYsIG5hbWUpOwomIzQzOwllcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCUNIRUNLKGZhbHNlLCAmIzM0O3dyaXRlX21vZGVsJiMzNDssICYjMzQ7d3JpdGUgbW9kZWw9JXM6ICVzXG4mIzM0OywgbmFtZSwKJiM0MzsJCSAgICAgIHN0cmVycm9yKGVycikpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CWVyciA9IHJlYWRiYWNrX21vZGVsKGRldiwgZ290LCBzaXplb2YoZ290KSk7CiYjNDM7CWlmIChlcnIgfHwgc3RyY21wKGdvdCwgbmFtZSkpIHsKJiM0MzsJCUNIRUNLKGZhbHNlLCAmIzM0O3JlYWRiYWNrX21vZGVsJiMzNDssICYjMzQ7Z290IG1vZGVsPSVzIHdhbnQgJXNcbiYjMzQ7LAomIzQzOwkJICAgICAgZXJyID8gJiMzNDsobm9uZSkmIzM0OyA6IGdvdCwgbmFtZSk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogcmVzdG9yZSB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWw7IHRoZSB3cml0ZSBpcyBjaGVja2VkIHRvbyAqLwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyVzIG1vZGVsPWxpbmVhclxuJiMzNDssIGRldik7CiYjNDM7CWVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJQ0hFQ0soZmFsc2UsICYjMzQ7cmVzdG9yZV9saW5lYXImIzM0OywgJiMzNDt3cml0ZSBtb2RlbD1saW5lYXI6ICVzXG4mIzM0OywKJiM0MzsJCSAgICAgIHN0cmVycm9yKGVycikpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBkZXYgYXJndW1lbnQgbXVzdCBiZSBwcmVzZW50IGluIGlvLmNvc3QucW9zIGFscmVhZHksIHdoaWNoCiYjNDM7ICogbWVhbnMgaW9jb3N0IGlzIGVuYWJsZWQgZm9yIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZGV2X2hhc19pb2Nvc3QoY29uc3QgY2hhciAqZGV2KQomIzQzO3sKJiM0MzsJY2hhciBsaW5lWzI1Nl0sIHdvcmRbMjU2XTsKJiM0MzsJRklMRSAqZnA7CiYjNDM7CWludCBmb3VuZCA9IDA7CiYjNDM7CiYjNDM7CWZwID0gZm9wZW4oJiMzNDsvc3lzL2ZzL2Nncm91cC9pby5jb3N0LnFvcyYjMzQ7LCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZnApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7CiYjNDM7CQlpZiAoc3NjYW5mKGxpbmUsICYjMzQ7JTI1NXMmIzM0Oywgd29yZCkgPT0gMSAmYW1wOyZhbXA7ICFzdHJjbXAod29yZCwgZGV2KSkgewomIzQzOwkJCWZvdW5kID0gMTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlmY2xvc2UoZnApOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQmluZCB0aGUgMnggZXhhbXBsZSBtb2RlbCBhbmQgdmVyaWZ5IHRoZSBpby5jb3N0Lm1vZGVsIHJlYWRiYWNrLgomIzQzOyAqIElPIGFjY291bnRpbmcgaXRzZWxmIGlzIG5vdCBjaGVja2VkIGhlcmU7IGl0IG5lZWRzIGEgZGV2aWNlIGRvaW5nCiYjNDM7ICogcmVhbCBJTyB1bmRlciBpb2Nvc3QgYW5kIGlzIGNvdmVyZWQgYnkgdGhlIGtlcm5lbC1zaWRlIHZhbGlkYXRpb24KJiM0MzsgKiBkZXNjcmliZWQgaW4gdGhlIGNvdmVyIGxldHRlci4KJiM0MzsgKgomIzQzOyAqIFJlcXVpcmVzIHJvb3QsIGNncm91cCB2MiBhbmQgYSBkZXZpY2Ugd2l0aCBpb2Nvc3Qgc3VwcG9ydC4gIFRoZQomIzQzOyAqIGRldmljZSBtdXN0IGJlIGdpdmVuIGFzIG1ham9yOm1pbm9yIGluICRJT0NPU1RfVEVTVF9ERVYsIG90aGVyd2lzZQomIzQzOyAqIHRoZSB0ZXN0IGlzIHNraXBwZWQuCiYjNDM7ICovCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWwodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfbW9kZWwgKnNrZWw7CiYjNDM7CWNoYXIgYnVmWzMwMF0sICpkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWRldiA9IGdldGVudigmIzM0O0lPQ09TVF9URVNUX0RFViYjMzQ7KTsKJiM0MzsJaWYgKCFkZXYgfHwgZ2V0ZXVpZCgpICE9IDApIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksICYjMzQ7aW9jb3N0X21vdW50ZWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIG5lZ2F0aXZlOiBiaW5kaW5nIGFuIHVua25vd24gbW9kZWwgbmFtZSBtdXN0IGJlIHJlamVjdGVkLAomIzQzOwkgKiBzbyBhIHR5cG8gY2Fubm90IHNpbGVudGx5IGRpc2FibGUgY29zdCBtb2RlbCB1cGRhdGVzCiYjNDM7CSAqLwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyVzIG1vZGVsPW5vX3N1Y2hfbW9kZWxcbiYjMzQ7LCBkZXYpOwomIzQzOwllcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7CiYjNDM7CUFTU0VSVF9FUShlcnIsIEVOT0VOVCwgJiMzNDt1bmtub3duX21vZGVsX3JlamVjdGVkJiMzNDspOwomIzQzOwomIzQzOwlza2VsID0gaW9jb3N0X21vZGVsX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBhdHRhY2hpbmcgdGhlIHN0cnVjdF9vcHMgcmVnaXN0ZXJzIHRoZSBtb2RlbCBieSBuYW1lICovCiYjNDM7CWVyciA9IGlvY29zdF9tb2RlbF9fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoQVNTRVJUX09LKGVyciwgJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQlBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsICYjMzQ7aW9jb3N0XzJ4JiMzNDspLCAmIzM0O2JpbmRfYW5kX3JlYWRiYWNrJiMzNDspOwomIzQzOwomIzQzOwlpb2Nvc3RfbW9kZWxfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2FtZSBjaGVjayBmb3IgdGhlIG11bHRpLXN0cmVhbSBleGFtcGxlIG1vZGVsLiAgT25seSBvbmUgbW9kZWwgY2FuCiYjNDM7ICogYmUgYm91bmQgdG8gYSBkZXZpY2UgYXQgYSB0aW1lOyBib3RoIHRlc3RzIGJpbmQgYW5kIHJlc3RvcmUsIHNvCiYjNDM7ICogdGhleSBhcmUgc2VyaWFsIGFuZCBpbmRlcGVuZGVudC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2lvY29zdF9tb2RlbF9zdHJlYW1zKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X21zICpza2VsOwomIzQzOwljaGFyICpkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWRldiA9IGdldGVudigmIzM0O0lPQ09TVF9URVNUX0RFViYjMzQ7KTsKJiM0MzsJaWYgKCFkZXYgfHwgZ2V0ZXVpZCgpICE9IDApIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksICYjMzQ7aW9jb3N0X21vdW50ZWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrZWwgPSBpb2Nvc3RfbXNfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVyciA9IGlvY29zdF9tc19fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoQVNTRVJUX09LKGVyciwgJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQlBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsICYjMzQ7aW9jb3N0X21zJiMzNDspLCAmIzM0O2JpbmRfYW5kX3JlYWRiYWNrJiMzNDspOwomIzQzOwomIzQzOwlpb2Nvc3RfbXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmY4YWQ0MTdiMzU4NDgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21vZGVsLmMKQEAgLTAsMCAmIzQzOzEsMTE2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIEV4YW1wbGUgaW9jb3N0IGNvc3QgbW9kZWw6IHRoZSBidWlsdGluIGxpbmVhciBIREQgZm9ybXVsYSB3aXRoIGFsbAomIzQzOyAqIGNvc3RzIGRvdWJsZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgY29uc3RhbnRzIG1pcnJvciB3aGF0IGNhbGNfbGNvZWZzKCkgZGVyaXZlcyBmcm9tIHRoZSBBVVRPUF9IREQKJiM0MzsgKiBkZWZhdWx0cyAocmJwcz0xNzQwMTkxNzYgcnNlcWlvcHM9NDE3MDggcnJhbmRpb3BzPTM3MCwgdy1zaWRlCiYjNDM7ICogYW5hbG9nKSBpbiB2dGltZSB1bml0cyB3aGVyZSAxcyA9PSAyXjM3LCBleHByZXNzZWQgd2l0aCB0aGUgc2FtZQomIzQzOyAqIHJvdW5kLXVwIGRpdmlzaW9ucyBzbyB0aGV5IGNhbm5vdCBkcmlmdCBmcm9tIHRoZSBrZXJuZWwuICBBIGRldmljZQomIzQzOyAqIGJvdW5kIHRvIHRoaXMgbW9kZWwgdGhyb3VnaCBpby5jb3N0Lm1vZGVsIGNoYXJnZXMgZXhhY3RseSB0d2ljZSB0aGUKJiM0MzsgKiBidWlsdGluIG1vZGVsIHVuZGVyIHRoZSBzYW1lIHdvcmtsb2FkLCB3aGljaCBtYWtlcyBpdCBhIGNvbnZlbmllbnQKJiM0MzsgKiB3YXkgdG8gdmVyaWZ5IHRoYXQgYWNjb3VudGluZyBnb2VzIHRocm91Z2ggdGhlIEJQRiBwYXRoLgomIzQzOyAqCiYjNDM7ICogVGhlIG1vZGVsIGltcGxlbWVudHMgdGhlIGZ1bGwgbGluZWFyIGZvcm11bGEgaXRzZWxmLCBpbmNsdWRpbmcKJiM0MzsgKiBmbHVzaGVzOiB0aGVyZSBpcyBubyBmYWxsYmFjayB0byB0aGUgYnVpbHRpbiBtb2RlbCwgYSBkYXRhbGVzcwomIzQzOyAqIFdSSVRFfFJFUV9QUkVGTFVTSCBpcyBwcmljZWQgYXMgYSBvbmUtcGFnZSB3cml0ZS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsKJiM0MzsvKiBWVElNRV9QRVJfU0VDIGNvbWVzIGZyb20gdm1saW51eC5oIChhIEJURiBlbnVtIGNvbnN0YW50KSAqLwomIzQzOyNkZWZpbmUgSU9DX1BBR0VfU0laRQkJNDA5NgomIzQzOyNkZWZpbmUgSU9DX1NFQ1RfVE9fUEFHRV9TSElGVAkzCS8qIDUxMkIgc2VjdG9ycyB0byA0a0IgcGFnZXMgKi8KJiM0MzsjZGVmaW5lIExDT0VGX1JBTkRJT19QQUdFUwk0MDk2CS8qIDE2TUIgc2VlayB0aHJlc2hvbGQgKi8KJiM0MzsjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0UJKDFVTEwgJmx0OyZsdDsgMCkJLyogbm90IGluIEJURjogYSBwbGFpbiBtYWNybyAqLwomIzQzOyNkZWZpbmUgSU9DT1NUX1JFUV9PUF9NQVNLCTB4ZmYJCS8qIFJFUV9PUF9NQVNLLCBub3QgaW4gQlRGICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBESVY2NF9VNjRfUk9VTkRfVVAgLyBESVZfUk9VTkRfVVBfVUxMIGVxdWl2YWxlbnRzLCBmb2xkZWQgYXQKJiM0MzsgKiBjb21waWxlIHRpbWUKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJVKHgsIHkpCQkoKHgpIC8gKHkpICYjNDM7ICgoKHgpICUgKHkpKSA/IDEgOiAwKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFJCUFMJMTc0MDE5MTc2VUxMCiYjNDM7I2RlZmluZSBSU0VRSU9QUwk0MTcwOFVMTAomIzQzOyNkZWZpbmUgUlJBTkRJT1BTCTM3MFVMTAomIzQzOyNkZWZpbmUgV0JQUwkxNzgwNzU4NjZVTEwKJiM0MzsjZGVmaW5lIFdTRVFJT1BTCTQyNzA1VUxMCiYjNDM7I2RlZmluZSBXUkFORElPUFMJMzc4VUxMCiYjNDM7CiYjNDM7I2RlZmluZSBSUEFHRQkoUlUoVlRJTUVfUEVSX1NFQywgUlUoUkJQUywgSU9DX1BBR0VfU0laRSkpKQomIzQzOyNkZWZpbmUgUlNFUUlPCShSVShWVElNRV9QRVJfU0VDLCBSU0VRSU9QUykgLSBSUEFHRSkKJiM0MzsjZGVmaW5lIFJSQU5ESU8JKFJVKFZUSU1FX1BFUl9TRUMsIFJSQU5ESU9QUykgLSBSUEFHRSkKJiM0MzsjZGVmaW5lIFdQQUdFCShSVShWVElNRV9QRVJfU0VDLCBSVShXQlBTLCBJT0NfUEFHRV9TSVpFKSkpCiYjNDM7I2RlZmluZSBXU0VRSU8JKFJVKFZUSU1FX1BFUl9TRUMsIFdTRVFJT1BTKSAtIFdQQUdFKQomIzQzOyNkZWZpbmUgV1JBTkRJTwkoUlUoVlRJTUVfUEVSX1NFQywgV1JBTkRJT1BTKSAtIFdQQUdFKQomIzQzOwomIzQzOy8qCiYjNDM7ICogcGVyLWNncm91cCBjdXJzb3Igc3RvcmFnZToga2V5ZWQgYnkgdGhlIGNncm91cCwgZnJlZWQgd2l0aCBpdCwgc28KJiM0MzsgKiB0aGUgbW9kZWwgbmV2ZXIgbGVha3Mgb3IgcmV1c2VzIHN0YWxlIHBlci1jZ3JvdXAgc3RhdGUKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0NHUlBfU1RPUkFHRSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3U2NCk7CiYjNDM7fSBjdXJzb3Jfc3RvcmUgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO3U2NCBCUEZfUFJPRyhpb2Nvc3RfMnhfY2FsY19jb3N0LCB1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLAomIzQzOwkgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncykKJiM0Mzt7CiYjNDM7CXU2NCBwYWdlcywgc2Vla19wYWdlcyA9IDAsIGJhc2UsIGNvZWZfcGFnZSwgcmFuZGlvLCBjb3N0OwomIzQzOwomIzQzOwlpZiAoKG9wZiAmYW1wOyBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7CiYjNDM7CQliYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTzsKJiM0MzsJfSBlbHNlIGlmICgob3BmICZhbXA7IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1dSSVRFKSB7CiYjNDM7CQliYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBhIGZ1bGx5IG93bmluZyBtb2RlbCBtdXN0IHByaWNlIGV2ZXJ5IG9wOyB1bmtub3duCiYjNDM7CQkgKiBvcHMgYXJlIHByaWNlZCBhcyBhIHNpbmdsZSBwYWdlIHdyaXRlCiYjNDM7CQkgKi8KJiM0MzsJCWJhc2UgPSAwOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBtaXJyb3IgdGhlIGJ1aWx0aW4gc2luZ2xlIHBlci1jZ3JvdXAgY3Vyc29yOiB0aGUgbW9kZWwga2VlcHMKJiM0MzsJICogaXRzIG93biBjdXJzb3Iga2V5ZWQgYnkgdGhlIGJsa2NnIGFyZ3VtZW50CiYjNDM7CSAqLwomIzQzOwl7CiYjNDM7CQlfX3U2NCAqY3Vyc29yLCBjdXI7CiYjNDM7CiYjNDM7CQljdXJzb3IgPSBicGZfY2dycF9zdG9yYWdlX2dldCgmYW1wO2N1cnNvcl9zdG9yZSwKJiM0MzsJCQkJCSAgICAgIGJsa2NnLSZndDtjc3MuY2dyb3VwLCBOVUxMLAomIzQzOwkJCQkJICAgICAgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTsKJiM0MzsJCWlmICghY3Vyc29yKQomIzQzOwkJCXJldHVybiAyICogKGJhc2UgJiM0MzsgUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKSAqIGNvZWZfcGFnZSk7CiYjNDM7CQljdXIgPSAqY3Vyc29yOwomIzQzOwkJc2Vla19wYWdlcyA9IHNlY3RvciAmZ3Q7IGN1ciA/IHNlY3RvciAtIGN1ciA6IGN1ciAtIHNlY3RvcjsKJiM0MzsJCXNlZWtfcGFnZXMgJmd0OyZndDs9IElPQ19TRUNUX1RPX1BBR0VfU0hJRlQ7CiYjNDM7CQlpZiAoc2Vla19wYWdlcyAmZ3Q7IExDT0VGX1JBTkRJT19QQUdFUykKJiM0MzsJCQliYXNlID0gcmFuZGlvOwomIzQzOwkJaWYgKCEobW9kZWxfZmxhZ3MgJmFtcDsgSU9DT1NUX0NPU1RfRl9NRVJHRSkpCiYjNDM7CQkJKmN1cnNvciA9IHNlY3RvciAmIzQzOyBSVShuYnl0ZXMsIDUxMik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGFnZXMgPSBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpOwomIzQzOwlpZiAoIXBhZ2VzKQomIzQzOwkJcGFnZXMgPSAxOwkvKiBkYXRhbGVzcyBmbHVzaDogb25lIHBhZ2UgKi8KJiM0MzsJaWYgKG1vZGVsX2ZsYWdzICZhbXA7IElPQ09TVF9DT1NUX0ZfTUVSR0UpCiYjNDM7CQliYXNlID0gMDsKJiM0MzsKJiM0MzsJY29zdCA9IDIgKiAoYmFzZSAmIzQzOyBwYWdlcyAqIGNvZWZfcGFnZSk7CiYjNDM7CXJldHVybiBjb3N0OwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDsuc3RydWN0X29wcyYjMzQ7KQomIzQzO3N0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzIGlvY29zdF8yeCA9IHsKJiM0MzsJLmNhbGNfY29zdCA9ICh2b2lkICopaW9jb3N0XzJ4X2NhbGNfY29zdCwKJiM0MzsJLm5hbWUgPSAmIzM0O2lvY29zdF8yeCYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2NjNTdjMDNkM2M4OAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pb2Nvc3RfbXMuYwpAQCAtMCwwICYjNDM7MSwxMzYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogRXhhbXBsZSBtdWx0aS1zdHJlYW0gc2VxdWVudGlhbGl0eSBkZXRlY3Rpb24gY29zdCBtb2RlbC4KJiM0MzsgKgomIzQzOyAqIFRoZSBidWlsdGluIG1vZGVsIGtlZXBzIGEgc2luZ2xlIGN1cnNvciBwZXIgY2dyb3VwLCBzbyB0d28KJiM0MzsgKiBpbnRlcmxlYXZlZCBzZXF1ZW50aWFsIHJlYWRlcnMgaW4gb25lIGNncm91cCBhcmUgYWxsIHByaWNlZCByYW5kb20KJiM0MzsgKiAobWVhc3VyZWQgODl4IG92ZXJjaGFyZ2UsIDEyLjl4IHRocm91Z2hwdXQgY29sbGFwc2UpLCB3aGlsZSByYW5kb20KJiM0MzsgKiBJTyBpbnNpZGUgYSBob3Qgd2luZG93IHNtYWxsZXIgdGhhbiB0aGUgMTZNQiBzZWVrIHRocmVzaG9sZCBpcwomIzQzOyAqIHByaWNlZCBzZXF1ZW50aWFsIChtZWFzdXJlZCAxMDd4IHVuZGVyY2hhcmdlKS4gIFRoaXMgbW9kZWwgcmVwbGFjZXMKJiM0MzsgKiB0aGUgc2luZ2xlIGN1cnNvciB3aXRoIGEgcGVyLWNncm91cCB0YWJsZSBvZiBzdHJlYW0gc2xvdHM6IGFuIElPIGlzCiYjNDM7ICogc2VxdWVudGlhbCBpZmYgaXRzIHNlY3RvciBtYXRjaGVzIHRoZSBleHBlY3RlZCBuZXh0IHNlY3RvciBvZiBhbnkKJiM0MzsgKiB0cmFja2VkIHN0cmVhbS4gIEludGVybGVhdmVkIHN0cmVhbXMga2VlcCB0aGVpciBvd24gc2xvdHMsIGFuZAomIzQzOyAqIHdpbmRvd2VkIHJhbmRvbSBJTyByYXJlbHkgbWF0Y2hlcyBhIG1vdmluZyBleHBlY3RhdGlvbi4KJiM0MzsgKgomIzQzOyAqIFN0cmVhbSBzdGF0ZSBsaXZlcyBpbiBhIENHUlBfU1RPUkFHRSBtYXAsIHNvIGl0IGlzIGNyZWF0ZWQgYW5kCiYjNDM7ICogZnJlZWQgd2l0aCB0aGUgY2dyb3VwLiAgVGhlIG1vZGVsIGltcGxlbWVudHMgdGhlIGZ1bGwgYnVpbHRpbgomIzQzOyAqIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nIGZsdXNoIHByaWNpbmcuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7LyogVlRJTUVfUEVSX1NFQyBjb21lcyBmcm9tIHZtbGludXguaCAoYSBCVEYgZW51bSBjb25zdGFudCkgKi8KJiM0MzsjZGVmaW5lIElPQ19QQUdFX1NJWkUJCTQwOTYKJiM0MzsjZGVmaW5lIElPQ19TRUNUX1RPX1BBR0VfU0hJRlQJMwkvKiA1MTJCIHNlY3RvcnMgdG8gNGtCIHBhZ2VzICovCiYjNDM7I2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVMJNDA5NgkvKiAxNk1CIHNlZWsgdGhyZXNob2xkICovCiYjNDM7I2RlZmluZSBJT0NPU1RfQ09TVF9GX01FUkdFCSgxVUxMICZsdDsmbHQ7IDApCS8qIG5vdCBpbiBCVEY6IGEgcGxhaW4gbWFjcm8gKi8KJiM0MzsjZGVmaW5lIElPQ09TVF9SRVFfT1BfTUFTSwkweGZmCQkvKiBSRVFfT1BfTUFTSywgbm90IGluIEJURiAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogRElWNjRfVTY0X1JPVU5EX1VQIC8gRElWX1JPVU5EX1VQX1VMTCBlcXVpdmFsZW50cywgZm9sZGVkIGF0CiYjNDM7ICogY29tcGlsZSB0aW1lCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVSh4LCB5KQkJKCh4KSAvICh5KSAmIzQzOyAoKCh4KSAlICh5KSkgPyAxIDogMCkpCiYjNDM7CiYjNDM7I2RlZmluZSBSQlBTCTE3NDAxOTE3NlVMTAomIzQzOyNkZWZpbmUgUlNFUUlPUFMJNDE3MDhVTEwKJiM0MzsjZGVmaW5lIFJSQU5ESU9QUwkzNzBVTEwKJiM0MzsjZGVmaW5lIFdCUFMJMTc4MDc1ODY2VUxMCiYjNDM7I2RlZmluZSBXU0VRSU9QUwk0MjcwNVVMTAomIzQzOyNkZWZpbmUgV1JBTkRJT1BTCTM3OFVMTAomIzQzOwomIzQzOyNkZWZpbmUgUlBBR0UJKFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSkKJiM0MzsjZGVmaW5lIFJTRVFJTwkoUlUoVlRJTUVfUEVSX1NFQywgUlNFUUlPUFMpIC0gUlBBR0UpCiYjNDM7I2RlZmluZSBSUkFORElPCShSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpCiYjNDM7I2RlZmluZSBXUEFHRQkoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKQomIzQzOyNkZWZpbmUgV1NFUUlPCShSVShWVElNRV9QRVJfU0VDLCBXU0VRSU9QUykgLSBXUEFHRSkKJiM0MzsjZGVmaW5lIFdSQU5ESU8JKFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSkKJiM0MzsKJiM0MzsjZGVmaW5lIE5TTE9UUwk0CiYjNDM7CiYjNDM7c3RydWN0IHN0cmVhbXMgewomIzQzOwlfX3U2NCBleHBlY3RlZFtOU0xPVFNdOwkvKiBuZXh0IGV4cGVjdGVkIHNlY3RvciwgcGVyIHN0cmVhbSAqLwomIzQzOwlfX3U2NCBzdGFtcFtOU0xPVFNdOwkvKiBMUlUgc3RhbXAsIDAgPSBlbXB0eSAqLwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBwZXItY2dyb3VwIHN0cmVhbSB0YWJsZToga2V5ZWQgYnkgdGhlIGNncm91cCwgZnJlZWQgd2l0aCBpdAomIzQzOyAqLwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQ0dSUF9TVE9SQUdFKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBzdHJlYW1zKTsKJiM0Mzt9IHN0cmVhbV90YWIgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO3U2NCBCUEZfUFJPRyhpb2Nvc3RfbXNfY2FsY19jb3N0LCB1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLAomIzQzOwkgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdHJlYW1zICpzOwomIzQzOwl1NjQgcGFnZXMsIGJhc2UsIGNvZWZfcGFnZSwgcmFuZGlvLCBhZHZhbmNlLCBub3c7CiYjNDM7CXUzMiBpLCB2aWN0aW0gPSAwLCBmb3VuZCA9IDB4RkZGRkZGRkY7CiYjNDM7CiYjNDM7CWlmICgob3BmICZhbXA7IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1JFQUQpIHsKJiM0MzsJCWJhc2UgPSBSU0VRSU87IGNvZWZfcGFnZSA9IFJQQUdFOyByYW5kaW8gPSBSUkFORElPOwomIzQzOwl9IGVsc2UgaWYgKChvcGYgJmFtcDsgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfV1JJVEUpIHsKJiM0MzsJCWJhc2UgPSBXU0VRSU87IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSBXUkFORElPOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyoKJiM0MzsJCSAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd24KJiM0MzsJCSAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGUKJiM0MzsJCSAqLwomIzQzOwkJYmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwOwomIzQzOwl9CiYjNDM7CWFkdmFuY2UgPSBSVShuYnl0ZXMsIDUxMik7CS8qIHNlY3RvcnMgKi8KJiM0MzsKJiM0MzsJcyA9IGJwZl9jZ3JwX3N0b3JhZ2VfZ2V0KCZhbXA7c3RyZWFtX3RhYiwgYmxrY2ctJmd0O2Nzcy5jZ3JvdXAsIE5VTEwsCiYjNDM7CQkJCSBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpOwomIzQzOwlpZiAoIXMpCiYjNDM7CQlyZXR1cm4gYmFzZSAmIzQzOyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlOwomIzQzOwomIzQzOwlub3cgPSBicGZfa3RpbWVfZ2V0X25zKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOU0xPVFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocy0mZ3Q7ZXhwZWN0ZWRbaV0gPT0gc2VjdG9yICZhbXA7JmFtcDsgcy0mZ3Q7c3RhbXBbaV0pIHsKJiM0MzsJCQlmb3VuZCA9IGk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGZvdW5kICE9IDB4RkZGRkZGRkYpIHsKJiM0MzsJCS8qIHNlcXVlbnRpYWw6IGtlZXAgdGhlIHNlcSBiYXNlIGZyb20gdGhlIG9wIGJyYW5jaCAqLwomIzQzOwkJcy0mZ3Q7ZXhwZWN0ZWRbZm91bmRdID0gc2VjdG9yICYjNDM7IGFkdmFuY2U7CiYjNDM7CQlzLSZndDtzdGFtcFtmb3VuZF0gPSBub3c7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQliYXNlID0gcmFuZGlvOwomIzQzOwkJZm9yIChpID0gMTsgaSAmbHQ7IE5TTE9UUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAocy0mZ3Q7c3RhbXBbaV0gJmx0OyBzLSZndDtzdGFtcFt2aWN0aW1dKQomIzQzOwkJCQl2aWN0aW0gPSBpOwomIzQzOwkJfQomIzQzOwkJcy0mZ3Q7ZXhwZWN0ZWRbdmljdGltXSA9IHNlY3RvciAmIzQzOyBhZHZhbmNlOwomIzQzOwkJcy0mZ3Q7c3RhbXBbdmljdGltXSA9IG5vdzsKJiM0MzsJfQomIzQzOwomIzQzOwlwYWdlcyA9IFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSk7CiYjNDM7CWlmICghcGFnZXMpCiYjNDM7CQlwYWdlcyA9IDE7CS8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqLwomIzQzOwlpZiAobW9kZWxfZmxhZ3MgJmFtcDsgSU9DT1NUX0NPU1RfRl9NRVJHRSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIG1lcmdlZCBiaW9zIHNraXAgdGhlIGJhc2UgY29zdCBidXQgc3RpbGwgYWR2YW5jZQomIzQzOwkJICogdGhlIHN0cmVhbSBwb3NpdGlvbiBhYm92ZSwgc28gYSBtZXJnZSBhdCB0aGUKJiM0MzsJCSAqIGV4cGVjdGVkIHNlY3RvciBkb2VzIG5vdCBtYWtlIHRoZSBmb2xsb3dpbmcgbmV3IElPCiYjNDM7CQkgKiBsb29rIHJhbmRvbQomIzQzOwkJICovCiYjNDM7CQliYXNlID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYmFzZSAmIzQzOyBwYWdlcyAqIGNvZWZfcGFnZTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7LnN0cnVjdF9vcHMmIzM0OykKJiM0MztzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfbXMgPSB7CiYjNDM7CS5jYWxjX2Nvc3QgPSAodm9pZCAqKWlvY29zdF9tc19jYWxjX2Nvc3QsCiYjNDM7CS5uYW1lID0gJiMzNDtpb2Nvc3RfbXMmIzM0OywKJiM0Mzt9OwomIzQzOwomIzQzO2NoYXIgTElDRU5TRVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2OTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb24gb2YgQmxvY2svSU8gQ29zdCBCUEYgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgKm9ubHkqIEtNU0FOIGNvdWxkIGNhdGNoLiBCYXNlZCBvbiB0aGUgZ3VpZGVsaW5lcywgaWYgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgY2F0Y2ggdGhlIGlzc3VlLCB3ZSBkb24mIzM5O3QgbmVlZCBLTVNBTi4gIEl0JiMzOTtzIGFsbCBhYm91dCBmaW5kaW5nIHRoYXQgKnNwZWNpZmljKiB1bmluaXRpYWxpemVkIG1lbW9yeSBzY2VuYXJpbyB0aGF0IEtNU0FOIGFsb25lIHdpbGwgZXhwb3NlLgoKRmlyc3QsIEkgc2VlIGRvY3VtZW50YXRpb24gdXBkYXRlcyAoZ29vZCBwcmFjdGljZSksIG5ldyBjb25maWcgb3B0aW9ucyBmb3IgQlBGLCBhbmQgc29tZSBjYWxscyByZWxhdGVkIHRvIGNncm91cCBvbmxpbmUvb2ZmbGluZSBldmVudHMuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBidXQgaXQmIzM5O3Mgbm90IHdoZXJlIEkgZXhwZWN0IHRoZSByZWFsIHJpc2sgdG8gYmUuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBCUEYtcmVsYXRlZCBjb2RlIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGRhdGEgb2Z0ZW4gYXJpc2UuCgpUaGUgYGJsay1pb2Nvc3QtYnBmLmNgIGZpbGUgaGFzIGZ1bmN0aW9ucyBmb3IgbW9kZWwgbWFuYWdlbWVudDogbG9va3VwcywgcmVnaXN0cmF0aW9uIChgYnBmX2lvY29zdF9yZWdgKSwgYW5kIHVucmVnaXN0cmF0aW9uIChgYnBmX2lvY29zdF91bnJlZ2ApLiAgSSYjMzk7bSBub3RpbmcgdGhhdCBgYnBmX2lvY29zdF9yZWdgIHVzZXMgYGt6YWxsb2NgLCB3aGljaCBzaG91bGQgemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnksIGFuZCB0aGF0JiMzOTtzIGdvb2QuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBicGZfaW9jb3N0X3VucmVnYCwga2ZyZWUmIzM5O2luZyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmcm9tIGJwZl9pb2Nvc3RfcmVnLiAgV2l0aGluIGBicGZfaW9jb3N0X2luaXRfbWVtYmVyYCwgSSBzZWUgYSBjb3B5IG9wZXJhdGlvbiB1c2luZyBgYnBmX29ial9uYW1lX2NweWAsIGJ1dCB0aGF0IGNvcHkgaXMgY2hlY2tpbmcgbGVuZ3RoLiAgSXQgZG9lcyBub3QgbG9vayByaXNreS4gVGhlIHZhbGlkYXRpb24gaW4gYGJwZl9pb2Nvc3RfdmFsaWRhdGVgIGNvbmZpcm1zIHRoYXQgdGhlIGNvZGUgaXMgY2hlY2tpbmcgdGhhdCBgb3BzLSZndDtjYWxjX2Nvc3RgIGlzIGEgdmFsaWQgZnVuY3Rpb24sIG5vdCB1bmluaXRpYWxpemVkLgoKTm93LCB0aGUgYGJsay1pb2Nvc3QuY2AgZmlsZSBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiAgQSBuZXcgYG1vZGVsYCBmaWVsZCBpcyBhZGRlZCB0byB0aGUgYGlvY2Agc3RydWN0LCBidXQgaXQmIzM5O3Mgb25seSBjb25kaXRpb25hbCBvbiBgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmAsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBgaW9jYCBpcyBremFsbG9jJiMzOTtkIGluIHNvbWUgcGFydHMgb2YgdGhlIGNvZGUuIFRoYXQgbWVhbnMgdGhlIGBtb2RlbGAgcG9pbnRlciBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIChhbmQgdGh1cyBzYWZlIHRvIHJlYWQpLiAgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpb2NgIGlzIGFsbG9jYXRlZCBjb3JyZWN0bHkgdG8gYmUgc3VyZSB0aGF0IGBtb2RlbGAgaXMgemVyb2VkLiAgTG9va2luZyBhdCBgaW9jX3Jxb3NfaW5pdGAsIHllcywgYGlvY2AgKmlzKiBga3phbGxvY2AtZWQuIEkmIzM5O2xsIGNoZWNrIGBpb2NfcnFvc19leGl0YCBhcyB3ZWxsLCB0byBtYWtlIHN1cmUgaXQgaXMgZnJlZWQgY29ycmVjdGx5LiAgSXQgZG9lcywgYW5kIGFsc28gY2xlYW5zIHVwIGBpb2MtJmd0O21vZGVsYCB2aWEgYGlvY29zdF9icGZfbW9kZWxfcHV0KG1vZGVsKWAuCgpJbiB0aGUgYGlvY190aW1lcl9mbmAgZnVuY3Rpb24sIGBucl9hY3RpdmVgIGlzIGluaXRpYWxpemVkIHRvIDAuICBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGBjYWxjX3Z0aW1lX2Nvc3RgIGFuZCBgY2FsY19zaXplX3Z0aW1lX2Nvc3RgIGZ1bmN0aW9ucyBib3RoIGRlcmVmZXJlbmNlIHRoZSBgbW9kZWxgIHBvaW50ZXIsIGJ1dCBpZiBgaW9jYCBpcyBhbGxvY2F0ZWQgYnkgYGt6YWxsb2NgIHRoZW4gdGhlc2UgcG9pbnRlcnMgc2hvdWxkIGJlIHNhZmUgdG8gZGVyZWZlcmVuY2UsIGFsdGhvdWdoIHRoZXkgbWF5IGJlIGBOVUxMYC4gYGlvY19jb3N0X21vZGVsX3ByZmlsbGAgcmVhZHMgdGhlIGBpb2MtJmd0O21vZGVsYCwgcHJpbnRpbmcgdG8gYSBzZXFfZmlsZSwgYWdhaW4sIHNob3VsZCBiZSBzYWZlIHdpdGggcHJvcGVyIGluaXRpYWxpemF0aW9uLiAgVGhlIGBpb2NfYnBmX21vZGVsX2JpbmRgIGZ1bmN0aW9uIGxvb2tzIG9rYXkgdG9vLiBJdCBiaW5kcyBhIG5ldyBtb2RlbCBhbmQgcHV0cyB0aGUgb2xkLCB3aXRoIGNoZWNrcyBpbiBiZXR3ZWVuLgoKVGhlIGBpb2NfY29zdF9tb2RlbF93cml0ZWAgZnVuY3Rpb24gaGFuZGxlcyB3cml0aW5nIHRoZSBjb3N0IG1vZGVsLCBhbmQgZG9lcyBzdHJsY3B5IG9wZXJhdGlvbnMuIFRoZSBgYnBmX21vZGVsYCBjaGFyYWN0ZXIgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9lcy4KCk92ZXJhbGwsIHJldmlld2luZyB0aGlzIGNvZGUgd2l0aCB0aGUgS01TQU4gZ3VpZGVsaW5lcyBpbiBtaW5kLCBJIGRvIG5vdCBzZWUgYW55IG9idmlvdXMgY2FzZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgYmUgZXhwb3NlZCAqb25seSogYnkgS01TQU4uICBBbGwgdGhlIHN0cnVjdHVyZXMgSSBleGFtaW5lZCwgdGhhdCBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gcG90ZW50aWFsbHkgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYywgZWl0aGVyIGdldCB6ZXJvZWQvaW5pdGlhbGl6ZWQgYXQgYWxsb2NhdGlvbiAodXNpbmcga3phbGxvYywgbWVtc2V0LCA9IHswfSksIG9yIGhhdmUgYm91bmRzL2xlbmd0aCBjaGVja3MuIFRoZSBmYWN0IHRoYXQgdGhlIGNvcmUgYGlvY2Agc3RydWN0IGlzIGBremFsbG9jYCYjMzk7ZCBpcyBhIHNpZ25pZmljYW50IGZhY3RvciwgYXMgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBtb2RlbGAgc3RydWN0LiBUaGVyZWZvcmUsIEkmIzM5O20gY29uY2x1ZGluZyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXMgKm5vdCogaW50cm9kdWNlIEtNU0FOLXNwZWNpZmljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2MgPSBremFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvY29zdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2Nvc3QuYz0yOTc1PXN0YXRpYyBpbnQgYmxrX2lvY29zdF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTc5LVxuYmxvY2svYmxrLWlvY29zdC5jOjI5ODA6XHRpb2MgPSBremFsbG9jX29iaigqaW9jKTtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTgxLVx0aWYgKCFpb2MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzU2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIE1vZGVsIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGJwZl9tb2RlbGAgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBgaW9jX2Nvc3RfbW9kZWxfd3JpdGVgIGZ1bmN0aW9uLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSB3YW50IHRvIHNlZSB0aGUgbWVjaGFuaWNzLCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZmxvdywgc2VlIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMsIGFuZCBtYXAgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gVGltZSB0byBkaWcgaW4gYW5kIGdldCBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvY29zdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNTkwOlx0XHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4zNTkxOlx0XHRzdHJ1Y3QgaW9jICppb2M7XG4zNTkyOlx0XHR1NjQgdVtOUl9JX0xDT0VGU107XG4zNTkzOlx0XHRib29sIHVzZXI7XG4zNTk0Olx0XHRjaGFyIGJwZl9tb2RlbFtJT0NPU1RfTU9ERUxfTkFNRV9MRU5dO1xuMzU5NTpcdFx0Y2hhciAqYm9keSwgKnA7XG4zNTk2Olx0XHRpbnQgcmV0O1xuMzU5NzpcdFxuMzU5ODpcdFx0YmxrZ19jb25mX2luaXQoXHUwMDI2Y3R4LCBpbnB1dCk7XG4zNTk5Olx0XG4zNjAwOlx0XHRyZXQgPSBibGtnX2NvbmZfb3Blbl9iZGV2KFx1MDAyNmN0eCk7XG4zNjAxOlx0XHRpZiAocmV0KVxuMzYwMjpcdFx0XHRyZXR1cm4gcmV0O1xuMzYwMzpcdFxuMzYwNDpcdFx0Ym9keSA9IGN0eC5ib2R5O1xuMzYwNTpcdFx0cSA9IGJkZXZfZ2V0X3F1ZXVlKGN0eC5iZGV2KTtcbjM2MDY6XHRcdGlmICghcXVldWVfaXNfbXEocSkpIHtcbjM2MDc6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4zNjA4Olx0XHRcdGdvdG8gY2xvc2VfYmRldjtcbjM2MDk6XHRcdH1cbjM2MTA6XHRcbjM2MTE6XHRcdGlvYyA9IHFfdG9faW9jKHEpO1xuMzYxMjpcdFx0aWYgKCFpb2MpIHtcbjM2MTM6XHRcdFx0cmV0ID0gYmxrX2lvY29zdF9pbml0KGN0eC5iZGV2LVx1MDAzZWJkX2Rpc2spO1xuMzYxNDpcdFx0XHRpZiAocmV0KVxuMzYxNTpcdFx0XHRcdGdvdG8gY2xvc2VfYmRldjtcbjM2MTY6XHRcdFx0aW9jID0gcV90b19pb2MocSk7XG4zNjE3Olx0XHR9XG4zNjE4Olx0XG4zNjE5Olx0XHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7XG4zNjIwOlx0XHRibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTtcbjM2MjE6XHRcbjM2MjI6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuMzYyMzpcdFx0bWVtY3B5KHUsIGlvYy1cdTAwM2VwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7XG4zNjI0Olx0XHR1c2VyID0gaW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbDtcbjM2MjU6XHRcdGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTs7XG4zNjI2Olx0XG4zNjI3Olx0XHRyZXQgPSAtRUlOVkFMO1xuMzYyODpcdFxuMzYyOTpcdFx0d2hpbGUgKChwID0gc3Ryc2VwKFx1MDAyNmJvZHksIFwmIzM0OyBcXHRcXG5cJiMzNDspKSkge1xuMzYzMDpcdFx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG4zNjMxOlx0XHRcdGNoYXIgYnVmWzMyXTtcbjM2MzI6XHRcdFx0aW50IHRvaztcbjM2MzM6XHRcdFx0dTY0IHY7XG4zNjM0Olx0XG4zNjM1Olx0XHRcdGlmICghKnApXG4zNjM2Olx0XHRcdFx0Y29udGludWU7XG4zNjM3Olx0XG4zNjM4Olx0XHRcdHN3aXRjaCAobWF0Y2hfdG9rZW4ocCwgY29zdF9jdHJsX3Rva2VucywgYXJncykpIHtcbjM2Mzk6XHRcdFx0Y2FzZSBDT1NUX0NUUkw6XG4zNjQwOlx0XHRcdFx0bWF0Y2hfc3RybGNweShidWYsIFx1MDAyNmFyZ3NbMF0sIHNpemVvZihidWYpKTtcbjM2NDE6XHRcdFx0XHRpZiAoIXN0cmNtcChidWYsIFwmIzM0O2F1dG9cJiMzNDspKVxuMzY0MjpcdFx0XHRcdFx0dXNlciA9IGZhbHNlO1xuMzY0MzpcdFx0XHRcdGVsc2UgaWYgKCFzdHJjbXAoYnVmLCBcJiMzNDt1c2VyXCYjMzQ7KSlcbjM2NDQ6XHRcdFx0XHRcdHVzZXIgPSB0cnVlO1xuMzY0NTpcdFx0XHRcdGVsc2VcbjM2NDY6XHRcdFx0XHRcdGdvdG8gdW5sb2NrO1xuMzY0NzpcdFx0XHRcdGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTs7XG4zNjQ4Olx0XHRcdFx0Y29udGludWU7XG4zNjQ5Olx0XHRcdGNhc2UgQ09TVF9NT0RFTDpcbjM2NTA6XHRcdFx0XHRtYXRjaF9zdHJsY3B5KGJ1ZiwgXHUwMDI2YXJnc1swXSwgc2l6ZW9mKGJ1ZikpO1xuMzY1MTpcdFx0XHRcdGlmICghc3RyY21wKGJ1ZiwgXCYjMzQ7bGluZWFyXCYjMzQ7KSkge1xuMzY1MjpcdFx0XHRcdFx0LyogYmFjayB0byB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgKi9cbjM2NTM6XHRcdFx0XHRcdGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTs7XG4zNjU0Olx0XHRcdFx0XHRjb250aW51ZTtcbjM2NTU6XHRcdFx0XHR9XG4zNjU2Olx0XHRcdFx0bWF0Y2hfc3RybGNweShicGZfbW9kZWwsIFx1MDAyNmFyZ3NbMF0sIHNpemVvZihicGZfbW9kZWwpKTtcbjM2NTc6XHRcdFx0XHRjb250aW51ZTtcbjM2NTg6XHRcdFx0fVxuMzY1OTpcdFxuMzY2MDpcdFx0XHR0b2sgPSBtYXRjaF90b2tlbihwLCBpX2xjb2VmX3Rva2VucywgYXJncyk7XG4zNjYxOlx0XHRcdGlmICh0b2sgPT0gTlJfSV9MQ09FRlMpXG4zNjYyOlx0XHRcdFx0Z290byB1bmxvY2s7XG4zNjYzOlx0XHRcdGlmIChtYXRjaF91NjQoXHUwMDI2YXJnc1swXSwgXHUwMDI2dikpXG4zNjY0Olx0XHRcdFx0Z290byB1bmxvY2s7XG4zNjY1Olx0XHRcdHVbdG9rXSA9IHY7XG4zNjY2Olx0XHRcdHVzZXIgPSB0cnVlO1xuMzY2NzpcdFx0fVxuMzY2ODpcdFxuMzY2OTpcdFx0aWYgKHVzZXIpIHtcbjM2NzA6XHRcdFx0bWVtY3B5KGlvYy1cdTAwM2VwYXJhbXMuaV9sY29lZnMsIHUsIHNpemVvZih1KSk7XG4zNjcxOlx0XHRcdGlvYy1cdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPSB0cnVlO1xuMzY3MjpcdFx0fSBlbHNlIHtcbjM2NzM6XHRcdFx0aW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbCA9IGZhbHNlO1xuMzY3NDpcdFx0fVxuMzY3NTpcdFx0aW9jX3JlZnJlc2hfcGFyYW1zKGlvYywgdHJ1ZSk7XG4zNjc2Olx0XG4zNjc3Olx0XHRyZXQgPSAwO1xuMzY3ODpcdFxuMzY3OTpcdHVubG9jazpcbjM2ODA6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4zNjgxOlx0XG4zNjgyOlx0XHQvKlxuMzY4MzpcdFx0ICogQmluZCB0aGUgQlBGIG1vZGVsIG91dHNpZGUgaW9jLVx1MDAzZWxvY2s6IHRoZSByZWdpc3RyeSBsb29rdXBcbjM2ODQ6XHRcdCAqIHRha2VzIHRoZSByZWdpc3RyYXRpb24gbXV0ZXggYW5kIHRoZSBvbGQgbW9kZWwmIzM5O3MgcmVmZXJlbmNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODYwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJsb2NrIElPIENvc3QgQlBGIE9iamVjdCBIYW5kbGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJsay1pb2Nvc3QtYnBmLmNgIGNvZGUuIE15IGluaXRpYWwgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBhcm91bmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGBzdHJ1Y3Rfb3BzYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIG9iamVjdCBuYW1lIGNvcGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGRvbmUgY29ycmVjdGx5IGFuZCBzZWN1cmVseS4gTGV0IG1lIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyBgYnBmX29ial9uYW1lX2NweWAuIEZyb20gd2hhdCBJIGNhbiBzZWUgaGVyZSwgdGhleSYjMzk7cmUgdXNpbmcgYGJwZl9vYmpfbmFtZV9jcHkob3BzLSZndDtuYW1lLCB1b3BzLSZndDtuYW1lLCBzaXplb2Yob3BzLSZndDtuYW1lKSlgLiBTdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24sIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBCdXQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX29ial9uYW1lX2NweWAgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGxpa2Ugb2ZmLWJ5LW9uZSBlcnJvcnMgb3IgYnVmZmVyIG92ZXJmbG93cy4gTmVlZCB0byBtYWtlIGNlcnRhaW4gdGhlIG5hbWUgY29weSBpcyByb2J1c3Qgd2l0aGluIHRoZSBjb250ZXh0IG9mIEJQRiBvYmplY3QgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX29ial9uYW1lX2NweSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW9jb3N0LWJwZi5jPTEzOD1zdGF0aWMgaW50IGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMtMTQ3LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcywgbmFtZSk6XG5ibG9jay9ibGstaW9jb3N0LWJwZi5jOjE0ODpcdFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLVx1MDAzZW5hbWUsIHVvcHMtXHUwMDNlbmFtZSxcbmJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMtMTQ5LVx0XHRcdFx0ICAgICBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKSBcdTAwM2M9IDApXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmM9MzQ0PXN0YXRpYyBpbnQgYm1fYnBmX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zNTMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiaW5mbXRfbWlzY19vcHMsIG5hbWUpOlxuZnMvYmluZm10X21pc2NfYnBmLmM6MzU0Olx0XHRpZiAoYnBmX29ial9uYW1lX2NweShvcHMtXHUwMDNlbmFtZSwgdW9wcy1cdTAwM2VuYW1lLFxuZnMvYmluZm10X21pc2NfYnBmLmMtMzU1LVx0XHRcdFx0ICAgICBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKSBcdTAwM2M9IDApXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD02NTU9c3RydWN0IGJwZl9tYXAgKmJwZl9wcm9nX2FyZW5hKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjY1NjppbnQgYnBmX29ial9uYW1lX2NweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgaW50IHNpemUpO1xuaW5jbHVkZS9saW51eC9icGYuaC02NTctXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTIwMz1pbnQgYnBmX2dldF9maWxlX2ZsYWcoaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyMjQtICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjI1OmludCBicGZfb2JqX25hbWVfY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyMjYte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNDQtfVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI0NTpFWFBPUlRfU1lNQk9MX0dQTChicGZfb2JqX25hbWVfY3B5KTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNDYtXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1NDEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNTQyOlx0ZXJyID0gYnBmX29ial9uYW1lX2NweShtYXAtXHUwMDNlbmFtZSwgYXR0ci1cdTAwM2VtYXBfbmFtZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1NDMtXHRcdFx0ICAgICAgIHNpemVvZihhdHRyLVx1MDAzZW1hcF9uYW1lKSk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTI2LVx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlbG9hZF90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTI3Olx0ZXJyID0gYnBmX29ial9uYW1lX2NweShwcm9nLVx1MDAzZWF1eC1cdTAwM2VuYW1lLCBhdHRyLVx1MDAzZXByb2dfbmFtZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMjgtXHRcdFx0ICAgICAgIHNpemVvZihhdHRyLVx1MDAzZXByb2dfbmFtZSkpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODAxNT1zdGF0aWMgaW50IGJwZl9zY3hfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODAzNS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIG5hbWUpOlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDM2Olx0XHRyZXQgPSBicGZfb2JqX25hbWVfY3B5KG9wcy1cdTAwM2VuYW1lLCB1b3BzLVx1MDAzZW5hbWUsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwMzctXHRcdFx0XHQgICAgICAgc2l6ZW9mKG9wcy1cdTAwM2VuYW1lKSk7XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTIxMT1zdGF0aWMgaW50IGJwZl90Y3BfY2FfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjktXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMsIG5hbWUpOlxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIzMDpcdFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkodGNwX2NhLVx1MDAzZW5hbWUsIHV0Y3BfY2EtXHUwMDNlbmFtZSxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMzEtXHRcdFx0XHQgICAgIHNpemVvZih0Y3BfY2EtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbi0tXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM9MzYxPXN0YXRpYyBpbnQgYnBmX3FkaXNjX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtMzgyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgUWRpc2Nfb3BzLCBpZCk6XG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM6MzgzOlx0XHRpZiAoYnBmX29ial9uYW1lX2NweShxZGlzY19vcHMtXHUwMDNlaWQsIHVxZGlzY19vcHMtXHUwMDNlaWQsXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtMzg0LVx0XHRcdFx0ICAgICBzaXplb2YocWRpc2Nfb3BzLVx1MDAzZWlkKSkgXHUwMDNjPSAwKVxuLS1cbm5ldC9zbWMvc21jX2hzX2JwZi5jPTg1PXN0YXRpYyBpbnQgc21jX2JwZl9oc19jdHJsX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5uZXQvc21jL3NtY19oc19icGYuYy05OC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNtY19oc19jdHJsLCBuYW1lKTpcbm5ldC9zbWMvc21jX2hzX2JwZi5jOjk5Olx0XHRpZiAoYnBmX29ial9uYW1lX2NweShrX2N0cmwtXHUwMDNlbmFtZSwgdV9jdHJsLVx1MDAzZW5hbWUsXG5uZXQvc21jL3NtY19oc19icGYuYy0xMDAtXHRcdFx0XHQgICAgIHNpemVvZih1X2N0cmwtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2MDUKCQkJCQkJCW91dHB1dDogMzQ0CgkJCQkJCQl0aG91Z2h0czogMjE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBibGstaW9jb3N0IEJQRiBDb3N0IE1vZGVsIEltcGxlbWVudGF0aW9uIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIG5ldyBCUEYgY29zdCBtb2RlbCBpbnRlZ3JhdGlvbiB3aXRoaW4gYmxrLWlvY29zdCBpbnRyb2R1Y2VzIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCB3b3VsZCBuZWNlc3NpdGF0ZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gSSYjMzk7bSBleGFtaW5pbmcgdGhlIGNvZGUgd2l0aCBhIGNyaXRpY2FsIGV5ZSwgZm9jdXNpbmcgb24gZGF0YSBmbG93cywgaW5pdGlhbGl6YXRpb24gcGF0dGVybnMsIGFuZCBwb3RlbnRpYWwgZGF0YSBsZWFrcy4KCkZpcnN0LCBJJiMzOTttIHZlcmlmeWluZyB0aGUgYFRSQUNFX0VWRU5UKGlvY29zdF9pb2NfdGljaylgIHRyYWNlcG9pbnQuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgdHJhY2Vwb2ludCBzdHJ1Y3QgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGluIGBUUF9mYXN0X2Fzc2lnbmAuIFRoaXMgaW5jbHVkZXMgYGRldm5hbWVgLCBgcGVyaW9kX3VzYCwgYHZyYXRlYCwgYGJ1c3lfbGV2ZWxgLCBgbnJfYWN0aXZlYCwgYHVzYWdlX3BjdGAsIGFuZCBgcnVubmluZ2AuIEkgc2VlIHRoYXQgdGhlIGBucl9hY3RpdmVgIHZhbHVlIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIGlzIGluY3JlbWVudGVkIHdpdGhpbiB0aGUgcmVsZXZhbnQgbG9vcCBhbmQgdGhlbiBwYXNzZWQgdG8gdGhlIHRyYWNlIGV2ZW50LCBzbyB0aGlzIGlzIHNvbGlkLiBObyB3b3JyaWVzIHRoZXJlLgoKTmV4dCwgSSYjMzk7dmUgY2hlY2tlZCB0aGUgYGNhbGNfdnRpbWVfY29zdGAgYW5kIGBjYWxjX3NpemVfdnRpbWVfY29zdGAgZnVuY3Rpb25zLiBJJiMzOTt2ZSBmb2N1c2VkIG9uIGhvdyBgY29zdGAgaXMgYXNzaWduZWQgd2l0aGluIHRoZSBCUEYgbW9kZWwgcGF0aCwgYW5kIGhvdyB0aGUgdmFsdWUgaXMgdXNlZC4gQm90aCBmdW5jdGlvbnMgd2lsbCB1c2UgYGNhbGNfdnRpbWVfY29zdF9idWlsdGluYCBvciBgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbmAgaWYgQlBGIG1vZGVsIGlzIGRpc2FibGVkLiBUaGUgQlBGIG1vZGVsIGFzc2lnbnMgYGNvc3RgIHZpYSBgbW9kZWwtJmd0O2NhbGNfY29zdCguLi4pYC4gSSBjYW4gc2VlIHRoZXJlIGFyZSBjaGVja3MgdG8gdmVyaWZ5IG1vZGVsIGlzIHByZXNlbnQuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGlzIGNvc3QgaXMgcmV0dXJuZWQsIGFuZCB0aGF0IGBWVElNRV9QRVJfU0VDYCBpcyB1c2VkIGFzIGEgbWF4aW11bSB2YWx1ZSBzbyB0aGlzIGlzIHNhZmUgYXMgd2VsbC4KCkkmIzM5O3ZlIGFsc28gbG9va2VkIGF0IHRoZSBhbGxvY2F0aW9uIHBhdHRlcm5zLiBCb3RoIGBremFsbG9jYCBhbmQgYGt6YWxsb2Nfb2JqYCBhcmUgdXNlZCBmb3IgYWxsb2NhdGlvbiBvZiBgaW9jb3N0X2JwZl9tb2RlbGAgYW5kIGBzdHJ1Y3QgaW9jYCByZXNwZWN0aXZlbHksIGFuZCB0aGVzZSBhcmUgaW5pdGlhbGl6ZWQgd2l0aCB6ZXJvLCBhbmQgSSYjMzk7dmUgdmVyaWZpZWQgdGhhdCBubyB1bmluaXRpYWxpemVkIGRhdGEgaXMgdXNlZCBpbiBhbnkgb3RoZXIgc3RydWN0dXJlcy4KClRoZSBjb3JlIG9mIHRoZSBCUEYgbW9kZWwgaW50ZWdyYXRpb24gc2VlbXMgdG8gYmUgaGFuZGxlZCBieSBgaW9jb3N0X2JwZl9tb2RlbF9nZXRgLCBgaW9jX2JwZl9tb2RlbF9iaW5kYCwgYW5kIHRoZSBgaW9jX2Nvc3RfbW9kZWxfd3JpdGVgIGZ1bmN0aW9uLiBgaW9jb3N0X2JwZl9tb2RlbF9nZXRgIHJldHJpZXZlcyB0aGUgQlBGIG1vZGVsLiBgaW9jX2JwZl9tb2RlbF9iaW5kYCBoYW5kbGVzIHRoZSBiaW5kaW5nIGFuZCB1bmJpbmRpbmcgb2YgdGhlIGNvc3QgbW9kZWwgdG8gdGhlIGBpb2NgIHN0cnVjdCwgdXNpbmcgYHJjdV9hc3NpZ25fcG9pbnRlcmAgdG8gaGFuZGxlIGNvbmN1cnJlbmN5IHNhZmVseS4gSSB2ZXJpZmllZCB0aGF0IGEgYGJwZl9tb2RlbGAgc3RyaW5nIGlzIGJlaW5nIHByb3Blcmx5IG51bGwtdGVybWluYXRlZCB2aWEgYG1hdGNoX3N0cmxjcHlgLCBhbmQgcGFzc2VkIHRvIGBpb2NfYnBmX21vZGVsX2JpbmRgLiBJIGNhbiBjb25maXJtIHRoZXJlIGFyZSBubyBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKQmFzZWQgb24gbXkgYW5hbHlzaXMsIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIGRhdGEgcmFjZXMgb3IgbWlzc2luZyBpbml0aWFsaXphdGlvbiBzdGVwcyB0aGF0IHdvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igd3JpdGVzLiBUaGVyZSBhcmUgbm8gZGlyZWN0IGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgbm90IHJlcXVpcmVkLiBJJiMzOTt2ZSBjb25zaWRlcmVkIHRoZSBmb3VyIGNyaXRlcmlhIHJlbGF0ZWQgdG8gdGhlIGRldGVjdGlvbiBvZiB1bmluaXRpYWxpemVkIHJlYWRzIGFuZCBub25lIG9mIHRoZW0gYXBwbHk6IG5vIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBubyB1bmluaXRpYWxpemVkIGNvbXBsZXggc3RydWN0dXJlcywgYW5kIG5vIGJvdW5kcyBjaGVjayBpc3N1ZXMuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIHNvIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgpJbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgQlBGIHN0cnVjdF9vcHMtYmFzZWQgY29zdCBtb2RlbHMgdG8gYGJsay1pb2Nvc3RgLCBpbmNsdWRpbmcgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGhvb2tzLCBibGtjZyBub3RpZmljYXRpb25zLCBhIGNncm91cCB2MiBgaW8uY29zdC5tb2RlbGAgY29uZmlnLCBhbmQgYSBuZXcgdHJhY2Vwb2ludC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBhcmUgaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIHRoYXQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gTWVtb3J5IHNhZmV0eSBjb25jZXJucyAoUkNVIGxpZmV0aW1lLCBzdHJ1Y3Rfb3BzIHJlZmNvdW50aW5nLCBsb2NraW5nKSBhcmUgYWxyZWFkeSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRodXMsIHRoaXMgY29kZSBhZGRpdGlvbiBkb2VzIG5vdCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdCAoYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgKSwgYWRkaW5nIGBpb2Nvc3RfbW9kZWxfb3BzYCwgbW9kZWwgcmVnaXN0cmF0aW9uL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJzaW5nIGluIGBpby5jb3N0Lm1vZGVsYCwgYW5kIGEgbmV3IHRyYWNlcG9pbnQgYGlvY29zdF9pb2NfdGlja2AuXG5cbkFuIGV2YWx1YXRpb24gb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFjcm9zcyB0aGUgbW9kaWZpZWQgYW5kIG5ldyBjb2RlIHNob3dzOlxuLSBBbGwgc3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGBicGZfbW9kZWxgIGluaXRpYWxpemVkIHdpdGggYGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTtgLCBgbnJfYWN0aXZlYCBpbml0aWFsaXplZCB0byAwLCBhbmQgYGJ1ZmAgYnVmZmVycyBmaWxsZWQgd2l0aCBgbWF0Y2hfc3RybGNweWApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZC91c2UuXG4tIER5bmFtaWMgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jYCAoZm9yIGBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbGApIGFuZCB0aGUgZXhpc3RpbmcgemVyb2VkIGFsbG9jYXRpb24gZm9yIGBzdHJ1Y3QgaW9jYC5cbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29udGFpbmluZyB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlOyBvdXRwdXQgdG8gdXNlciBzcGFjZSBpcyBoYW5kbGVkIHZpYSBmb3JtYXR0ZWQgdGV4dCBpbiBgc2VxX3ByaW50ZmAuXG4tIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBjYWxsYmFja3MgKGBjYWxjX2Nvc3RgLCBgYmxrY2dfb25saW5lYCwgYGJsa2NnX29mZmxpbmVgKSBhcmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIGluaXRpYWxpemVkIGJpby9yZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIGJsa2NnIHBvaW50ZXJzLlxuXG5UaGUgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBzZXJpZXMgcGVydGFpbiB0byBSQ1Ugc3luY2hyb25pemF0aW9uLCBvYmplY3QgcmVmY291bnRpbmcvbGlmZXRpbWUgKGBicGZfc3RydWN0X29wc19nZXRgL2BwdXRgKSwgYW5kIGxvY2tpbmcsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgc3BlY2lmaWMgdG8gS01TQU4gYXJlIHByZXNlbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdCAoYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgKSwgYWRkaW5nIGBpb2Nvc3RfbW9kZWxfb3BzYCwgbW9kZWwgcmVnaXN0cmF0aW9uL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJzaW5nIGluIGBpby5jb3N0Lm1vZGVsYCwgYW5kIGEgbmV3IHRyYWNlcG9pbnQgYGlvY29zdF9pb2NfdGlja2AuXG5cbkFuIGV2YWx1YXRpb24gb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFjcm9zcyB0aGUgbW9kaWZpZWQgYW5kIG5ldyBjb2RlIHNob3dzOlxuLSBBbGwgc3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGBicGZfbW9kZWxgIGluaXRpYWxpemVkIHdpdGggYGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTtgLCBgbnJfYWN0aXZlYCBpbml0aWFsaXplZCB0byAwLCBhbmQgYGJ1ZmAgYnVmZmVycyBmaWxsZWQgd2l0aCBgbWF0Y2hfc3RybGNweWApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZC91c2UuXG4tIER5bmFtaWMgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jYCAoZm9yIGBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbGApIGFuZCB0aGUgZXhpc3RpbmcgemVyb2VkIGFsbG9jYXRpb24gZm9yIGBzdHJ1Y3QgaW9jYC5cbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29udGFpbmluZyB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlOyBvdXRwdXQgdG8gdXNlciBzcGFjZSBpcyBoYW5kbGVkIHZpYSBmb3JtYXR0ZWQgdGV4dCBpbiBgc2VxX3ByaW50ZmAuXG4tIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBjYWxsYmFja3MgKGBjYWxjX2Nvc3RgLCBgYmxrY2dfb25saW5lYCwgYGJsa2NnX29mZmxpbmVgKSBhcmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIGluaXRpYWxpemVkIGJpby9yZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIGJsa2NnIHBvaW50ZXJzLlxuXG5UaGUgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBzZXJpZXMgcGVydGFpbiB0byBSQ1Ugc3luY2hyb25pemF0aW9uLCBvYmplY3QgcmVmY291bnRpbmcvbGlmZXRpbWUgKGBicGZfc3RydWN0X29wc19nZXRgL2BwdXRgKSwgYW5kIGxvY2tpbmcsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgc3BlY2lmaWMgdG8gS01TQU4gYXJlIHByZXNlbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjEwOjUxLjc2NzA3MjQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTU4NzkxMTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUX0JQRlwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvY19icGZfbW9kZWxfYmluZFwiLFxuICAgIFwiaW9jX2Nvc3RfbW9kZWxfd3JpdGVcIixcbiAgICBcImNhbGNfdnRpbWVfY29zdFwiLFxuICAgIFwiY2FsY19zaXplX3Z0aW1lX2Nvc3RcIixcbiAgICBcImJwZl9pb2Nvc3RfcmVnXCIsXG4gICAgXCJicGZfaW9jb3N0X3VucmVnXCIsXG4gICAgXCJicGZfaW9jb3N0X3ZhbGlkYXRlXCIsXG4gICAgXCJpb2Nvc3RfYnBmX21vZGVsX2dldFwiLFxuICAgIFwiaW9jb3N0X2JwZl9tb2RlbF9wdXRcIixcbiAgICBcImlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lXCIsXG4gICAgXCJpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIEJQRiBzdHJ1Y3Rfb3BzIHN1cHBvcnQgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscyBpbiBibGstaW9jb3N0IChgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmApLCBhZGRpbmcgYGlvY29zdF9tb2RlbF9vcHNgLCBtb2RlbCByZWdpc3RyYXRpb24vbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHBhcnNpbmcgaW4gYGlvLmNvc3QubW9kZWxgLCBhbmQgYSBuZXcgdHJhY2Vwb2ludCBgaW9jb3N0X2lvY190aWNrYC5cXG5cXG5BbiBldmFsdWF0aW9uIG9mIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGFuZCBuZXcgY29kZSBzaG93czpcXG4tIEFsbCBzdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgYGJwZl9tb2RlbGAgaW5pdGlhbGl6ZWQgd2l0aCBgYnBmX21vZGVsWzBdID0gJ1xcXFwwJ2AsIGBucl9hY3RpdmVgIGluaXRpYWxpemVkIHRvIDAsIGFuZCBgYnVmYCBidWZmZXJzIGZpbGxlZCB3aXRoIGBtYXRjaF9zdHJsY3B5YCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSByZWFkL3VzZS5cXG4tIER5bmFtaWMgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jYCAoZm9yIGBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbGApIGFuZCB0aGUgZXhpc3RpbmcgemVyb2VkIGFsbG9jYXRpb24gZm9yIGBzdHJ1Y3QgaW9jYC5cXG4tIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZTsgb3V0cHV0IHRvIHVzZXIgc3BhY2UgaXMgaGFuZGxlZCB2aWEgZm9ybWF0dGVkIHRleHQgaW4gYHNlcV9wcmludGZgLlxcbi0gVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gQlBGIGNhbGxiYWNrcyAoYGNhbGNfY29zdGAsIGBibGtjZ19vbmxpbmVgLCBgYmxrY2dfb2ZmbGluZWApIGFyZSBkZXJpdmVkIGRpcmVjdGx5IGZyb20gaW5pdGlhbGl6ZWQgYmlvL3JlcXVlc3Qgc3RydWN0dXJlcyBhbmQgYmxrY2cgcG9pbnRlcnMuXFxuXFxuVGhlIHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggc2VyaWVzIHBlcnRhaW4gdG8gUkNVIHN5bmNocm9uaXphdGlvbiwgb2JqZWN0IHJlZmNvdW50aW5nL2xpZmV0aW1lIChgYnBmX3N0cnVjdF9vcHNfZ2V0YC9gcHV0YCksIGFuZCBsb2NraW5nLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZGV0ZWN0b3JzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHNwZWNpZmljIHRvIEtNU0FOIGFyZSBwcmVzZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgQlBGIHN0cnVjdF9vcHMgc3VwcG9ydCAoaW9jb3N0X21vZGVsX29wcykgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscyBpbiBibGstaW9jb3N0LiBJdCBpbnRyb2R1Y2VzIG5ldyBrZXJuZWwgY29kZSBpbiBibG9jay9ibGstaW9jb3N0LWJwZi5jIGZvciByZWdpc3RlcmluZywgdmFsaWRhdGluZywgYW5kIG1hbmFnaW5nIEJQRiBjb3N0IG1vZGVscywgYW5kIHVwZGF0ZXMgYmxvY2svYmxrLWlvY29zdC5jIGFuZCBibG9jay9ibGstY2dyb3VwLmMgdG8gaW50ZXJmYWNlIHdpdGggdGhlc2UgbW9kZWxzIGR1cmluZyBJTyBjb3N0IGNhbGN1bGF0aW9ucywgY29uZmlndXJhdGlvbiB3cml0ZXMsIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBCUEYgc3lzY2FsbHMgYW5kIGNncm91cCB2MiBpby5jb3N0Lm1vZGVsIGNvbmZpZ3VyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjEwOjUxLjc2NzA3ODY0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1ODQ1MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmM1MGQ0MDM0MzhiNGI0ZTE4OGIxNDhhMGFiNWNjNGFmNWI2N2EwNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNDoxMDo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcXG5pbmRleCA4ZDI2MDM3NTFjNTFhLi5hNjkxMGFkN2MyZDAyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxcbkBAIC0yMTI0LDYgKzIxMjQsMTcgQEAgSU8gSW50ZXJmYWNlIEZpbGVzXFxuIFxcdHBhcmFtZXRlcnMgYXJlIHdyaXR0ZW4gdG8sIFxcXCJjdHJsXFxcIiBiZWNvbWUgXFxcInVzZXJcXFwiIGFuZCB0aGVcXG4gXFx0YXV0b21hdGljIGNoYW5nZXMgYXJlIGRpc2FibGVkLlxcbiBcXG4rXFx0V2hlbiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGIGlzIGVuYWJsZWQsIFxcXCJtb2RlbFxcXCIgYWxzbyBhY2NlcHRzXFxuK1xcdHRoZSBuYW1lIG9mIGEgcmVnaXN0ZXJlZCBpb2Nvc3RfbW9kZWxfb3BzIEJQRiBzdHJ1Y3Rfb3BzIG1vZGVsOlxcbitcXHRcXFwibW9kZWw9XFx1MDAzY25hbWVcXHUwMDNlXFxcIiBiaW5kcyB0aGUgbW9kZWwgdG8gdGhlIGRldmljZSBhbmQgdGhlIG1vZGVsIGZ1bGx5XFxuK1xcdHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBwcmljaW5nLCBmb3IgZXZlcnkgb3BlcmF0aW9uIGluY2x1ZGluZ1xcbitcXHRmbHVzaGVzOyBcXFwibW9kZWw9bGluZWFyXFxcIiAob3IgXFxcImN0cmw9YXV0by91c2VyXFxcIikgcmVzdG9yZXMgdGhlIGJ1aWx0aW5cXG4rXFx0bW9kZWwuICBXcml0aW5nIGFuIHVua25vd24gbmFtZSBmYWlscyB3aXRoIEVOT0VOVC4gIFVucmVnaXN0ZXJpbmdcXG4rXFx0YSBtb2RlbCByZW1vdmVzIGl0cyBuYW1lOyBkZXZpY2VzIGFscmVhZHkgYm91bmQga2VlcCB1c2luZyBpdFxcbitcXHR1bnRpbCBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBidWlsdGluIG1vZGVsLCBmb2xsb3dpbmcgdGhlIGxpZmV0aW1lXFxuK1xcdG1vZGVsIG9mIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuICBTZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmhcXG4rXFx0Zm9yIHRoZSBtb2RlbCBpbnRlcmZhY2UuXFxuK1xcbiBcXHRXaGVuIFxcXCJtb2RlbFxcXCIgaXMgXFxcImxpbmVhclxcXCIsIHRoZSBmb2xsb3dpbmcgbW9kZWwgcGFyYW1ldGVycyBhcmVcXG4gXFx0ZGVmaW5lZC5cXG4gXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL0tjb25maWcgYi9ibG9jay9LY29uZmlnXFxuaW5kZXggNzBlNGE2NmQ5NDFmZi4uOTFlODA4Zjg2ZDI4ZCAxMDA2NDRcXG4tLS0gYS9ibG9jay9LY29uZmlnXFxuKysrIGIvYmxvY2svS2NvbmZpZ1xcbkBAIC0yMzEsNCArMjMxLDEzIEBAIGNvbmZpZyBCTEtfRVJST1JfSU5KRUNUSU9OXFxuIFxcbiBzb3VyY2UgXFxcImJsb2NrL0tjb25maWcuaW9zY2hlZFxcXCJcXG4gXFxuK2NvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVF9CUEZcXG4rXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBwbHVnZ2FibGUgY29zdCBtb2RlbCBzdXBwb3J0IGZvciB0aGUgY29zdCBJTyBjb250cm9sbGVyXFxcIlxcbitcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBfSU9DT1NUIFxcdTAwMjZcXHUwMDI2IEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgREVCVUdfSU5GT19CVEZcXG4rXFx0aGVscFxcbitcXHQgRW5hYmxpbmcgdGhpcyBvcHRpb24gcmVnaXN0ZXJzIHRoZSBcXFwiaW9jb3N0X21vZGVsX29wc1xcXCIgQlBGXFxuK1xcdCBzdHJ1Y3Rfb3BzIHR5cGUsIHdoaWNoIGFsbG93cyBhIEJQRiBwcm9ncmFtIHRvIGZ1bGx5IHJlcGxhY2VcXG4rXFx0IHRoZSBidWlsdGluIGxpbmVhciBjb3N0IG1vZGVsIG9uIGEgZGV2aWNlIGl0IGlzIGJvdW5kIHRvXFxuK1xcdCB0aHJvdWdoIGlvLmNvc3QubW9kZWwuXFxuK1xcbiBlbmRpZiAjIEJMT0NLXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGVcXG5pbmRleCBlN2JkMzIwZTNkNjk3Li5lZTVjZWJlZWEwMDZmIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL01ha2VmaWxlXFxuKysrIGIvYmxvY2svTWFrZWZpbGVcXG5AQCAtMzksMyArMzksNCBAQCBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OKVxcdCs9IGJsay1jcnlwdG8ubyBibGstY3J5cHRvLXByb2ZpbGUubyBcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGJsay1jcnlwdG8tc3lzZnMub1xcbiBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLKVxcdCs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xcbiBvYmotJChDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQpXFx0Kz0gaG9sZGVyLm9cXG4rb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRilcXHQrPSBibGstaW9jb3N0LWJwZi5vXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjg3Mjg3MTA0NTM1MWMgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXFxuKysrIGIvYmxvY2svYmxrLWNncm91cC5jXFxuQEAgLTMyLDYgKzMyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhcnRfc3RhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiYmxrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJibGstY2dyb3VwLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGstaW9jb3N0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJibGstaW9wcmlvLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJibGstdGhyb3R0bGUuaFxcXCJcXG4gXFxuQEAgLTEzNDEsNiArMTM0Miw3IEBAIHZvaWQgYmxrY2dfdW5waW5fb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpibGtjZ19jc3MpXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiB7XFxuK1xcdGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShjc3NfdG9fYmxrY2coY3NzKSk7XFxuIFxcdC8qIHRoaXMgcHJldmVudHMgYW55b25lIGZyb20gYXR0YWNoaW5nIG9yIG1pZ3JhdGluZyB0byB0aGlzIGJsa2NnICovXFxuIFxcdHdiX2Jsa2NnX29mZmxpbmUoY3NzKTtcXG4gXFxuQEAgLTE0NDUsNiArMTQ0Nyw3IEBAIGJsa2NnX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG4gXFxuIHN0YXRpYyBpbnQgYmxrY2dfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiB7XFxuK1xcdGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lKGNzc190b19ibGtjZyhjc3MpKTtcXG4gXFx0c3RydWN0IGJsa2NnICpwYXJlbnQgPSBibGtjZ19wYXJlbnQoY3NzX3RvX2Jsa2NnKGNzcykpO1xcbiBcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvY29zdC1icGYuYyBiL2Jsb2NrL2Jsay1pb2Nvc3QtYnBmLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlYzZkZjI3OTU5OTBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYmxvY2svYmxrLWlvY29zdC1icGYuY1xcbkBAIC0wLDAgKzEsMjUwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIGJsay1pb2Nvc3Q6IEJQRiBzdHJ1Y3Rfb3BzIHBsdW1iaW5nIGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMuXFxuKyAqXFxuKyAqIFJlZ2lzdGVycyB0aGUgXFxcImlvY29zdF9tb2RlbF9vcHNcXFwiIHN0cnVjdF9vcHMgdHlwZSBhbmQgbWFpbnRhaW5zIHRoZVxcbisgKiBuYW1lIHJlZ2lzdHJ5IG9mIHJlZ2lzdGVyZWQgbW9kZWxzLiAgQSByZWdpc3RlcmVkIG1vZGVsIGlzIGJvdW5kIHRvXFxuKyAqIGEgZGV2aWNlIHRocm91Z2ggaW8uY29zdC5tb2RlbDsgc2VlIGluY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oLlxcbisgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXFx1MDAzZVxcbitcXG4rc3RhdGljIERFRklORV9NVVRFWChpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcXG4rc3RhdGljIExJU1RfSEVBRChpb2Nvc3RfYnBmX21vZGVscyk7XFxuK1xcbisvKlxcbisgKiBUaGUgcmVnaXN0cnkgaG9sZHMgYSBicGZfc3RydWN0X29wc19nZXQoKSByZWZlcmVuY2Ugb2J0YWluZWQgaW4gLnJlZztcXG4rICogLnVucmVnIGRyb3BzIGl0LCBzbyB0aGUga2RhdGEgb2YgYW4gdW5yZWdpc3RlcmVkIG1vZGVsIHN0YXlzIGFsaXZlXFxuKyAqIHdoaWxlIGFueSBkZXZpY2UgaXMgc3RpbGwgYm91bmQgdG8gaXQuXFxuKyAqL1xcbitzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCB7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzO1xcbit9O1xcbitcXG4rLypcXG4rICogTG9vayB1cCBhIHJlZ2lzdGVyZWQgbW9kZWwgYnkgbmFtZSBhbmQgYWNxdWlyZSBhIHJlZmVyZW5jZSBvbiBpdC5cXG4rICogVGhlIHJlZ2lzdHJ5IGxvY2sgaXMgaGVsZCBhY3Jvc3MgbG9va3VwIGFuZCBicGZfc3RydWN0X29wc19nZXQoKSBzb1xcbisgKiB0aGUgbW9kZWwgY2Fubm90IGJlIHVucmVnaXN0ZXJlZCBpbiBiZXR3ZWVuLlxcbisgKi9cXG4raW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsXFxuK1xcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApXFxuK3tcXG4rXFx0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XFxuK1xcdGludCByZXQgPSAtRU5PRU5UO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XFxuK1xcdFxcdGlmICghc3RyY21wKG0tXFx1MDAzZW9wcy1cXHUwMDNlbmFtZSwgbmFtZSkpIHtcXG4rXFx0XFx0XFx0aWYgKGJwZl9zdHJ1Y3Rfb3BzX2dldChtLVxcdTAwM2VvcHMpKSB7XFxuK1xcdFxcdFxcdFxcdCpvcHNwID0gbS1cXHUwMDNlb3BzO1xcbitcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rdm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKVxcbit7XFxuK1xcdGJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKlxcbitpb2Nvc3RfYnBmX21vZGVsX2xvb2t1cChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKVxcbit7XFxuK1xcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKG0tXFx1MDAzZW9wcyA9PSBvcHMpXFxuK1xcdFxcdFxcdHJldHVybiBtO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpXFxuK3tcXG4rXFx0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFxcdTAwMjZpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkge1xcbitcXHRcXHRpZiAobS1cXHUwMDNlb3BzLVxcdTAwM2VibGtjZ19vbmxpbmUpXFxuK1xcdFxcdFxcdG0tXFx1MDAzZW9wcy1cXHUwMDNlYmxrY2dfb25saW5lKGJsa2NnKTtcXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKVxcbit7XFxuK1xcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKG0tXFx1MDAzZW9wcy1cXHUwMDNlYmxrY2dfb2ZmbGluZSlcXG4rXFx0XFx0XFx0bS1cXHUwMDNlb3BzLVxcdTAwM2VibGtjZ19vZmZsaW5lKGJsa2NnKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGJwZl9pb2Nvc3RfbW9kZWxfaW5pdChzdHJ1Y3QgYnRmICpidGYpXFxuK3tcXG4rXFx0czMyIHR5cGVfaWQ7XFxuK1xcbitcXHR0eXBlX2lkID0gYnRmX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXFxcImlvY29zdF9tb2RlbF9vcHNcXFwiLCBCVEZfS0lORF9TVFJVQ1QpO1xcbitcXHRpZiAodHlwZV9pZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2FjY2Vzc19hdXggKmluZm8pXFxuK3tcXG4rXFx0cmV0dXJuIGJwZl90cmFjaW5nX2J0Zl9jdHhfYWNjZXNzKG9mZiwgc2l6ZSwgdHlwZSwgcHJvZywgaW5mbyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbiticGZfaW9jb3N0X2dldF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCxcXG4rXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuK3tcXG4rXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxuKyNpZmRlZiBDT05GSUdfQ0dST1VQU1xcbitcXHRjYXNlIEJQRl9GVU5DX2NncnBfc3RvcmFnZV9nZXQ6XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2YnBmX2NncnBfc3RvcmFnZV9nZXRfcHJvdG87XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gYnBmX2Jhc2VfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbit7XFxuK1xcdC8qIGNhbGNfY29zdCgpIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZCAqL1xcbitcXHRpZiAocHJvZy1cXHUwMDNlc2xlZXBhYmxlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcXG4rXFx0XFx0XFx0XFx0ICB2b2lkICprZGF0YSwgY29uc3Qgdm9pZCAqdWRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhO1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqdW9wcyA9IHVkYXRhO1xcbitcXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xcbitcXG4rXFx0c3dpdGNoIChtb2ZmKSB7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlvY29zdF9tb2RlbF9vcHMsIG5hbWUpOlxcbitcXHRcXHRpZiAoYnBmX29ial9uYW1lX2NweShvcHMtXFx1MDAzZW5hbWUsIHVvcHMtXFx1MDAzZW5hbWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKG9wcy1cXHUwMDNlbmFtZSkpIFxcdTAwM2M9IDApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF92YWxpZGF0ZSh2b2lkICprZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XFxuK1xcbitcXHRyZXR1cm4gb3BzLVxcdTAwM2VjYWxjX2Nvc3QgPyAwIDogLUVJTlZBTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBicGZfaW9jb3N0X3JlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbit7XFxuK1xcdHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTtcXG4rXFx0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCFicGZfc3RydWN0X29wc19nZXQob3BzKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRtID0ga3phbGxvYyhzaXplb2YoKm0pLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtKSB7XFxuK1xcdFxcdGJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XFxuK1xcdHtcXG4rXFx0XFx0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm90aGVyO1xcbitcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgXFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKG90aGVyLVxcdTAwM2VvcHMtXFx1MDAzZW5hbWUsIG9wcy1cXHUwMDNlbmFtZSkpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVFWElTVDtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdG0tXFx1MDAzZW9wcyA9IG9wcztcXG4rXFx0XFx0bGlzdF9hZGQoXFx1MDAyNm0tXFx1MDAzZWxpc3QsIFxcdTAwMjZpb2Nvc3RfYnBmX21vZGVscyk7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcXG4rXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XFxuK1xcdFxcdGtmcmVlKG0pO1xcbitcXHR9XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJwZl9pb2Nvc3RfdW5yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcXG4re1xcbitcXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XFxuK1xcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XFxuK1xcdG0gPSBpb2Nvc3RfYnBmX21vZGVsX2xvb2t1cChvcHMpO1xcbitcXHRpZiAobSkge1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2bS1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdGJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpO1xcbitcXHRcXHRrZnJlZShtKTtcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2lvY29zdF92ZXJpZmllcl9vcHMgPSB7XFxuK1xcdC5nZXRfZnVuY19wcm90byA9IGJwZl9pb2Nvc3RfZ2V0X2Z1bmNfcHJvdG8sXFxuK1xcdC5pc192YWxpZF9hY2Nlc3MgPSBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcyxcXG4rfTtcXG4rXFxuK3N0YXRpYyB1NjQgYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1Yih1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzIF9fYnBmX29wc19pb2Nvc3RfbW9kZWxfb3BzID0ge1xcbitcXHQuY2FsY19jb3N0ID0gYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1YixcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2lvY29zdF9tb2RlbF9vcHMgPSB7XFxuK1xcdC52ZXJpZmllcl9vcHMgPSBcXHUwMDI2YnBmX2lvY29zdF92ZXJpZmllcl9vcHMsXFxuK1xcdC5pbml0ID0gYnBmX2lvY29zdF9tb2RlbF9pbml0LFxcbitcXHQuY2hlY2tfbWVtYmVyID0gYnBmX2lvY29zdF9jaGVja19tZW1iZXIsXFxuK1xcdC5pbml0X21lbWJlciA9IGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXIsXFxuK1xcdC52YWxpZGF0ZSA9IGJwZl9pb2Nvc3RfdmFsaWRhdGUsXFxuK1xcdC5yZWcgPSBicGZfaW9jb3N0X3JlZyxcXG4rXFx0LnVucmVnID0gYnBmX2lvY29zdF91bnJlZyxcXG4rXFx0Lm5hbWUgPSBcXFwiaW9jb3N0X21vZGVsX29wc1xcXCIsXFxuK1xcdC5jZmlfc3R1YnMgPSBcXHUwMDI2X19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMsXFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgYnBmX2lvY29zdF9pbml0KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKFxcdTAwMjZicGZfaW9jb3N0X21vZGVsX29wcywgaW9jb3N0X21vZGVsX29wcyk7XFxuK31cXG4rbGF0ZV9pbml0Y2FsbChicGZfaW9jb3N0X2luaXQpO1xcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jb3N0LmMgYi9ibG9jay9ibGstaW9jb3N0LmNcXG5pbmRleCAyNzQ1YmZmY2Q1ZWVmLi5iY2NkYmQyNDk2ZDgzIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay1pb2Nvc3QuY1xcbisrKyBiL2Jsb2NrL2Jsay1pb2Nvc3QuY1xcbkBAIC0xNzcsNiArMTc3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhcnNlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vbG9jYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9sb2NhbDY0LmhcXHUwMDNlXFxuQEAgLTQ0NSw2ICs0NDYsMTEgQEAgc3RydWN0IGlvYyB7XFxuIFxcdGludFxcdFxcdFxcdFxcdGF1dG9wX2lkeDtcXG4gXFx0Ym9vbFxcdFxcdFxcdFxcdHVzZXJfcW9zX3BhcmFtczoxO1xcbiBcXHRib29sXFx0XFx0XFx0XFx0dXNlcl9jb3N0X21vZGVsOjE7XFxuK1xcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxcbitcXHQvKiBib3VuZCBCUEYgY29zdCBtb2RlbCwgTlVMTCA9IGJ1aWx0aW4gbGluZWFyIG1vZGVsICovXFxuK1xcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzXFx0X19yY3UgKm1vZGVsO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCBpb2NnX3BjcHVfc3RhdCB7XFxuQEAgLTIyMzgsNiArMjI0NCw3IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXFxuIFxcdHN0cnVjdCBpb2Nfbm93IG5vdztcXG4gXFx0TElTVF9IRUFEKHN1cnBsdXNlcyk7XFxuIFxcdGludCBucl9kZWJ0b3JzLCBucl9zaG9ydGFnZXMgPSAwLCBucl9sYWdnaW5nID0gMDtcXG4rXFx0aW50IG5yX2FjdGl2ZSA9IDA7XFxuIFxcdHU2NCB1c2FnZV91c19zdW0gPSAwO1xcbiBcXHR1MzIgcHBtX3J0aHI7XFxuIFxcdHUzMiBwcG1fd3RocjtcXG5AQCAtMjI3NCw2ICsyMjgxLDggQEAgc3RhdGljIHZvaWQgaW9jX3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG4gXFx0XFx0dTY0IHZkb25lLCB2dGltZSwgdXNhZ2VfdXM7XFxuIFxcdFxcdHUzMiBod19hY3RpdmUsIGh3X2ludXNlO1xcbiBcXG4rXFx0XFx0bnJfYWN0aXZlKys7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBDb2xsZWN0IHVudXNlZCBhbmQgd2luZCB2dGltZSBjbG9zZXIgdG8gdm5vdyB0byBwcmV2ZW50XFxuIFxcdFxcdCAqIGlvY2dzIGZyb20gYWNjdW11bGF0aW5nIGEgbGFyZ2UgYW1vdW50IG9mIGJ1ZGdldC5cXG5AQCAtMjQ2MCw2ICsyNDY5LDggQEAgc3RhdGljIHZvaWQgaW9jX3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG4gXFx0XFx0aW9jX3JlZnJlc2hfdnJhdGUoaW9jLCBcXHUwMDI2bm93KTtcXG4gXFx0fVxcbiBcXG4rXFx0dHJhY2VfaW9jb3N0X2lvY190aWNrKGlvYywgbnJfYWN0aXZlLCB1c2FnZV91c19zdW0pO1xcbitcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZpb2MtXFx1MDAzZWxvY2spO1xcbiB9XFxuIFxcbkBAIC0yNTcxLDEwICsyNTgyLDI4IEBAIHN0YXRpYyB2b2lkIGNhbGNfdnRpbWVfY29zdF9idWlsdGluKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZyxcXG4gXFxuIHN0YXRpYyB1NjQgY2FsY192dGltZV9jb3N0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZywgYm9vbCBpc19tZXJnZSlcXG4ge1xcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxcbitcXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7XFxuIFxcdHU2NCBjb3N0O1xcbiBcXG4tXFx0Y2FsY192dGltZV9jb3N0X2J1aWx0aW4oYmlvLCBpb2NnLCBpc19tZXJnZSwgXFx1MDAyNmNvc3QpO1xcbi1cXHRyZXR1cm4gY29zdDtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRtb2RlbCA9IHJjdV9kZXJlZmVyZW5jZShpb2NnLVxcdTAwM2Vpb2MtXFx1MDAzZW1vZGVsKTtcXG4rXFx0aWYgKG1vZGVsKSB7XFxuK1xcdFxcdGNvc3QgPSBtb2RlbC1cXHUwMDNlY2FsY19jb3N0KGJpby1cXHUwMDNlYmlfb3BmLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvcixcXG4rXFx0XFx0XFx0XFx0XFx0aW9jZ190b19ibGtnKGlvY2cpLVxcdTAwM2VibGtjZyxcXG4rXFx0XFx0XFx0XFx0XFx0aXNfbWVyZ2UgPyBJT0NPU1RfQ09TVF9GX01FUkdFIDogMCk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbisjZW5kaWZcXG4rXFx0e1xcbitcXHRcXHR1NjQgY29zdDtcXG4rXFxuK1xcdFxcdGNhbGNfdnRpbWVfY29zdF9idWlsdGluKGJpbywgaW9jZywgaXNfbWVyZ2UsIFxcdTAwMjZjb3N0KTtcXG4rXFx0XFx0cmV0dXJuIGNvc3Q7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYyxcXG5AQCAtMjU5NiwxMCArMjYyNSwyOCBAQCBzdGF0aWMgdm9pZCBjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvYyAqaW9jLFxcbiBcXG4gc3RhdGljIHU2NCBjYWxjX3NpemVfdnRpbWVfY29zdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYylcXG4ge1xcbi1cXHR1NjQgY29zdDtcXG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcXG4rXFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xcbiBcXG4tXFx0Y2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihycSwgaW9jLCBcXHUwMDI2Y29zdCk7XFxuLVxcdHJldHVybiBjb3N0O1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG1vZGVsID0gcmN1X2RlcmVmZXJlbmNlKGlvYy1cXHUwMDNlbW9kZWwpO1xcbitcXHRpZiAobW9kZWwgXFx1MDAyNlxcdTAwMjYgcnEtXFx1MDAzZWJpbyBcXHUwMDI2XFx1MDAyNiBycS1cXHUwMDNlYmlvLVxcdTAwM2ViaV9ibGtnKSB7XFxuK1xcdFxcdHU2NCBjb3N0O1xcbitcXG4rXFx0XFx0Y29zdCA9IG1vZGVsLVxcdTAwM2VjYWxjX2Nvc3QocnEtXFx1MDAzZWNtZF9mbGFncywgYmxrX3JxX2J5dGVzKHJxKSxcXG4rXFx0XFx0XFx0XFx0XFx0YmxrX3JxX3BvcyhycSksXFxuK1xcdFxcdFxcdFxcdFxcdHJxLVxcdTAwM2ViaW8tXFx1MDAzZWJpX2Jsa2ctXFx1MDAzZWJsa2NnLCAwKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiBtaW4oY29zdCwgVlRJTUVfUEVSX1NFQyk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuKyNlbmRpZlxcbitcXHR7XFxuK1xcdFxcdHU2NCBjb3N0O1xcbitcXG4rXFx0XFx0Y2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihycSwgaW9jLCBcXHUwMDI2Y29zdCk7XFxuK1xcdFxcdHJldHVybiBjb3N0O1xcbitcXHR9XFxuIH1cXG4gXFxuIGVudW0gb3Zlcl9idWRnZXRfYWN0aW9uIHtcXG5AQCAtMjkwMCw2ICsyOTQ3LDE5IEBAIHN0YXRpYyB2b2lkIGlvY19ycW9zX2V4aXQoc3RydWN0IHJxX3FvcyAqcnFvcylcXG4gXFxuIFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNmlvYy1cXHUwMDNldGltZXIpO1xcbiBcXHRmcmVlX3BlcmNwdShpb2MtXFx1MDAzZXBjcHVfc3RhdCk7XFxuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXFxuK1xcdHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xcbitcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aW9jLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0bW9kZWwgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlvYy1cXHUwMDNlbW9kZWwsXFxuK1xcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2aW9jLVxcdTAwM2Vsb2NrKSk7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihpb2MtXFx1MDAzZW1vZGVsLCBOVUxMKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZpb2MtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRpZiAobW9kZWwpXFxuK1xcdFxcdFxcdGlvY29zdF9icGZfbW9kZWxfcHV0KG1vZGVsKTtcXG4rXFx0fVxcbisjZW5kaWZcXG4gXFx0a2ZyZWUoaW9jKTtcXG4gfVxcbiBcXG5AQCAtMzQzOCwxMiArMzQ5OCwzMCBAQCBzdGF0aWMgdTY0IGlvY19jb3N0X21vZGVsX3ByZmlsbChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXFxuK1xcdHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsID1cXG4rXFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtXFx1MDAzZW1vZGVsLFxcbitcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmlvYy1cXHUwMDNlbG9jaykpO1xcbitcXG4rXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIGN0cmw9JXMgbW9kZWw9JXMgXFxcIlxcbitcXHRcXHRcXHQgICBcXFwicmJwcz0lbGx1IHJzZXFpb3BzPSVsbHUgcnJhbmRpb3BzPSVsbHUgXFxcIlxcbitcXHRcXHRcXHQgICBcXFwid2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGRuYW1lLCBtb2RlbCA/IFxcXCJicGZcXFwiIDpcXG4rXFx0XFx0XFx0XFx0ICAgaW9jLVxcdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPyBcXFwidXNlclxcXCIgOiBcXFwiYXV0b1xcXCIsXFxuK1xcdFxcdFxcdCAgIG1vZGVsID8gbW9kZWwtXFx1MDAzZW5hbWUgOiBcXFwibGluZWFyXFxcIixcXG4rXFx0XFx0XFx0ICAgdVtJX0xDT0VGX1JCUFNdLCB1W0lfTENPRUZfUlNFUUlPUFNdLFxcbitcXHRcXHRcXHQgICB1W0lfTENPRUZfUlJBTkRJT1BTXSwgdVtJX0xDT0VGX1dCUFNdLFxcbitcXHRcXHRcXHQgICB1W0lfTENPRUZfV1NFUUlPUFNdLCB1W0lfTENPRUZfV1JBTkRJT1BTXSk7XFxuK1xcdH1cXG4rI2Vsc2VcXG4gXFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIGN0cmw9JXMgbW9kZWw9bGluZWFyIFxcXCJcXG4gXFx0XFx0ICAgXFxcInJicHM9JWxsdSByc2VxaW9wcz0lbGx1IHJyYW5kaW9wcz0lbGx1IFxcXCJcXG4gXFx0XFx0ICAgXFxcIndicHM9JWxsdSB3c2VxaW9wcz0lbGx1IHdyYW5kaW9wcz0lbGx1XFxcXG5cXFwiLFxcbiBcXHRcXHQgICBkbmFtZSwgaW9jLVxcdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPyBcXFwidXNlclxcXCIgOiBcXFwiYXV0b1xcXCIsXFxuIFxcdFxcdCAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSwgdVtJX0xDT0VGX1JSQU5ESU9QU10sXFxuIFxcdFxcdCAgIHVbSV9MQ09FRl9XQlBTXSwgdVtJX0xDT0VGX1dTRVFJT1BTXSwgdVtJX0xDT0VGX1dSQU5ESU9QU10pO1xcbisjZW5kaWZcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZpb2MtXFx1MDAzZWxvY2spO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zNDU3LDYgKzM1MzUsMzcgQEAgc3RhdGljIGludCBpb2NfY29zdF9tb2RlbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBCaW5kIEBuYW1lIChlbXB0eSA9IGJ1aWx0aW4gbGluZWFyIG1vZGVsKSBhcyB0aGUgYWN0aXZlIGNvc3QgbW9kZWwgb2ZcXG4rICogQGlvYy4gIFRoZSByZWdpc3RyeSBsb29rdXAgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGhhcHBlbiBvdXRzaWRlXFxuKyAqIGlvYy1cXHUwMDNlbG9jazsgdGhlIHBvaW50ZXIgc3dhcCBoYXBwZW5zIHVuZGVyIGl0LlxcbisgKi9cXG4rc3RhdGljIGludCBpb2NfYnBmX21vZGVsX2JpbmQoc3RydWN0IGlvYyAqaW9jLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXFxuK1xcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpuZXcgPSBOVUxMLCAqb2xkO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKG5hbWVbMF0pIHtcXG4rXFx0XFx0cmV0ID0gaW9jb3N0X2JwZl9tb2RlbF9nZXQobmFtZSwgXFx1MDAyNm5ldyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuK1xcdG9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLVxcdTAwM2Vtb2RlbCxcXG4rXFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZpb2MtXFx1MDAzZWxvY2spKTtcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGlvYy1cXHUwMDNlbW9kZWwsIG5ldyk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aW9jLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmIChvbGQpXFxuK1xcdFxcdGlvY29zdF9icGZfbW9kZWxfcHV0KG9sZCk7XFxuK1xcdHJldHVybiAwO1xcbisjZWxzZVxcbitcXHRyZXR1cm4gbmFtZVswXSA/IC1FTk9FTlQgOiAwO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgY29zdF9jdHJsX3Rva2VucyA9IHtcXG4gXFx0eyBDT1NUX0NUUkwsXFx0XFx0XFxcImN0cmw9JXNcXFwiXFx0fSxcXG4gXFx0eyBDT1NUX01PREVMLFxcdFxcdFxcXCJtb2RlbD0lc1xcXCJcXHR9LFxcbkBAIC0zNDgyLDYgKzM1OTEsNyBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LFxcbiBcXHRzdHJ1Y3QgaW9jICppb2M7XFxuIFxcdHU2NCB1W05SX0lfTENPRUZTXTtcXG4gXFx0Ym9vbCB1c2VyO1xcbitcXHRjaGFyIGJwZl9tb2RlbFtJT0NPU1RfTU9ERUxfTkFNRV9MRU5dO1xcbiBcXHRjaGFyICpib2R5LCAqcDtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTM1MTIsNiArMzYyMiw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuIFxcdG1lbWNweSh1LCBpb2MtXFx1MDAzZXBhcmFtcy5pX2xjb2Vmcywgc2l6ZW9mKHUpKTtcXG4gXFx0dXNlciA9IGlvYy1cXHUwMDNldXNlcl9jb3N0X21vZGVsO1xcbitcXHRicGZfbW9kZWxbMF0gPSAnXFxcXDAnO1xcbiBcXG4gXFx0cmV0ID0gLUVJTlZBTDtcXG4gXFxuQEAgLTM1MzMsMTEgKzM2NDQsMTYgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcXG4gXFx0XFx0XFx0XFx0dXNlciA9IHRydWU7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdFxcdGJwZl9tb2RlbFswXSA9ICdcXFxcMCc7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRjYXNlIENPU1RfTU9ERUw6XFxuIFxcdFxcdFxcdG1hdGNoX3N0cmxjcHkoYnVmLCBcXHUwMDI2YXJnc1swXSwgc2l6ZW9mKGJ1ZikpO1xcbi1cXHRcXHRcXHRpZiAoc3RyY21wKGJ1ZiwgXFxcImxpbmVhclxcXCIpKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAoYnVmLCBcXFwibGluZWFyXFxcIikpIHtcXG4rXFx0XFx0XFx0XFx0LyogYmFjayB0byB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgKi9cXG4rXFx0XFx0XFx0XFx0YnBmX21vZGVsWzBdID0gJ1xcXFwwJztcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bWF0Y2hfc3RybGNweShicGZfbW9kZWwsIFxcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnBmX21vZGVsKSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0zNTYzLDYgKzM2NzksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcXG4gdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBCaW5kIHRoZSBCUEYgbW9kZWwgb3V0c2lkZSBpb2MtXFx1MDAzZWxvY2s6IHRoZSByZWdpc3RyeSBsb29rdXBcXG4rXFx0ICogdGFrZXMgdGhlIHJlZ2lzdHJhdGlvbiBtdXRleCBhbmQgdGhlIG9sZCBtb2RlbCdzIHJlZmVyZW5jZVxcbitcXHQgKiBpcyBkcm9wcGVkIGFmdGVyIHRoZSBzd2FwLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldCA9IGlvY19icGZfbW9kZWxfYmluZChpb2MsIGJwZl9tb2RlbCk7XFxuK1xcbiBcXHRibGtfbXFfdW5xdWllc2NlX3F1ZXVlKHEpO1xcbiBcXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmggYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2EwODU1ZWZiNjEwN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaFxcbkBAIC0wLDAgKzEsODIgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfTElOVVhfQkxLX0lPQ09TVF9IXFxuKyNkZWZpbmUgX0xJTlVYX0JMS19JT0NPU1RfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtfdHlwZXMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgSU9DT1NUX01PREVMX05BTUVfTEVOXFx0MTZcXG4rXFxuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXFxuK1xcbitzdHJ1Y3QgYmxrY2c7XFxuK1xcbisvKlxcbisgKiBQbHVnZ2FibGUgY29zdCBtb2RlbCBpbnRlcmZhY2UgZm9yIGJsay1pb2Nvc3QuXFxuKyAqXFxuKyAqIEEgQlBGIHN0cnVjdF9vcHMgaW1wbGVtZW50YXRpb24gcmVnaXN0ZXJlZCBhZ2FpbnN0IFxcXCJpb2Nvc3RfbW9kZWxfb3BzXFxcIlxcbisgKiBmdWxseSByZXBsYWNlcyB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgb24gdGhlIGRldmljZXMgaXQgaXMgYm91bmQgdG9cXG4rICogdGhyb3VnaCBpby5jb3N0Lm1vZGVsLiAgVGhlIG1vZGVsIG93bnMgcHJpY2luZyBmb3IgZXZlcnkgSU8gb24gYSBib3VuZFxcbisgKiBkZXZpY2U6IGl0IHByaWNlcyBhbGwgb3BlcmF0aW9ucywgaW5jbHVkaW5nIGZsdXNoZXMsIGFuZCBib3RoIHRoZSBiaW9cXG4rICogY2hhcmdpbmcgcGF0aCBhbmQgdGhlIHJlcXVlc3QtbGV2ZWwgc2l6aW5nIHBhdGggY29uc3VsdCBpdC5cXG4rICpcXG4rICogY2FsY19jb3N0KCkgaXMgY2FsbGVkIGZyb20gdGhlIElPIHN1Ym1pc3Npb24gcGF0aCB3aXRoIFJDVSByZWFkIGxvY2tcXG4rICogaGVsZCBhbmQgbXVzdCBub3Qgc2xlZXAuICBJdCByZXR1cm5zIHRoZSBjb3N0IG9mIHRoZSBJTyBpbiB2dGltZVxcbisgKiB1bml0cywgd2hlcmUgMSBzZWNvbmQgb2YgZGV2aWNlIHRpbWUgZXF1YWxzIFZUSU1FX1BFUl9TRUMgKDJeMzcsXFxuKyAqIGF2YWlsYWJsZSB0byBCUEYgcHJvZ3JhbXMgdGhyb3VnaCB2bWxpbnV4LmgpLiAgVGhlIHJldHVybmVkIHZhbHVlIGlzXFxuKyAqIGNsYW1wZWQgdG8gMSBzZWNvbmQgb2YgZGV2aWNlIHRpbWUgcGVyIElPLlxcbisgKlxcbisgKiBUaGUgbW9kZWwgaXMgcGFzc2VkIHRoZSBibGtjZyBvZiB0aGUgaXNzdWluZyBjZ3JvdXAgc28gaXQgY2FuIGtlZXBcXG4rICogcGVyLWNncm91cCBzdGF0ZS4gIGJsa2NnX29ubGluZSgpL2Jsa2NnX29mZmxpbmUoKSBhcmUgb3B0aW9uYWxcXG4rICogY2FsbGJhY2tzIG1pcnJvcmluZyB0aGUgYmxrY2cgY3NzIGxpZmVjeWNsZTogc3RhdGUgY3JlYXRlZCBvbiBvbmxpbmVcXG4rICogKG9yIGxhemlseSBvbiBmaXJzdCB1c2UpIG11c3QgYmUgcmVsZWFzZWQgb24gb2ZmbGluZS5cXG4rICpcXG4rICogVGhlIHJlZ2lzdHJhdGlvbiBhbmQgYmluZGluZyBtb2RlbCBmb2xsb3dzIHRoZSBUQ1AgY29uZ2VzdGlvblxcbisgKiBjb250cm9sIGZyYW1ld29yazogcmVnaXN0ZXJpbmcgYSBzdHJ1Y3Rfb3BzIG1ha2VzIHRoZSBtb2RlbCBhdmFpbGFibGVcXG4rICogYnkgaXRzIG5hbWUsIHdoaWxlIGlvLmNvc3QubW9kZWwgYmluZHMgb25lIHJlZ2lzdGVyZWQgbW9kZWwgdG8gYVxcbisgKiBkZXZpY2UuICBVbnJlZ2lzdGVyaW5nIHJlbW92ZXMgdGhlIG5hbWUgZnJvbSB0aGUgcmVnaXN0cnk7IGRldmljZXNcXG4rICogYWxyZWFkeSBib3VuZCBrZWVwIHVzaW5nIGl0IHVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW5cXG4rICogbW9kZWwuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBJT0NPU1RfTU9ERUxfTkFNRV9MRU5cXHQxNlxcbitcXG4rLypcXG4rICogaW9jb3N0LXNwZWNpZmljIGNhbGwgbWV0YWRhdGEgZm9yIGNhbGNfY29zdCgpJ3MgbW9kZWxfZmxhZ3NcXG4rICogYXJndW1lbnQ7IGV2ZXJ5dGhpbmcgZWxzZSwgaW5jbHVkaW5nIFJFUV9QUkVGTFVTSC9SRVFfRlVBLCBpc1xcbisgKiBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIG9wZiBhcmd1bWVudFxcbisgKi9cXG4rI2RlZmluZSBJT0NPU1RfQ09TVF9GX01FUkdFXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMClcXHQvKiBjYWxsZWQgZnJvbSBtZXJnZSBwYXRoICovXFxuK1xcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyB7XFxuK1xcdHU2NCAoKmNhbGNfY29zdCkodTY0IG9wZiwgdTY0IG5ieXRlcywgc2VjdG9yX3Qgc2VjdG9yLFxcbitcXHRcXHRcXHQgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKTtcXG4rXFx0dm9pZCAoKmJsa2NnX29ubGluZSkoc3RydWN0IGJsa2NnICpibGtjZyk7XFxuK1xcdHZvaWQgKCpibGtjZ19vZmZsaW5lKShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcXG4rXFxuK1xcdC8qIG1vZGVsIG5hbWUsIHVzZWQgdG8gc2VsZWN0IHRoZSBtb2RlbCB0aHJvdWdoIGlvLmNvc3QubW9kZWwgKi9cXG4rXFx0Y2hhciBuYW1lWzE2XTtcXG4rfTtcXG4rXFxuK2ludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKipvcHNwKTtcXG4rdm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKTtcXG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcXG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoc3RydWN0IGJsa2NnICpibGtjZyk7XFxuK1xcbisjZWxzZVxcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cXG4rXFxuK3N0cnVjdCBibGtjZztcXG4rc3RydWN0IGlvY29zdF9tb2RlbF9vcHM7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKipvcHNwKVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcykgeyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH1cXG4rXFxuKyNlbmRpZlxcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cXG4rI2VuZGlmXFx0LyogX0xJTlVYX0JMS19JT0NPU1RfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXFxuaW5kZXggZTc3MmIxYmM2MGQ2MC4uMmI5ZmYzNDhhNGY1MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXFxuQEAgLTE3OCw2ICsxNzgsNDYgQEAgVFJBQ0VfRVZFTlQoaW9jb3N0X2lvY192cmF0ZV9hZGosXFxuIFxcdClcXG4gKTtcXG4gXFxuKy8qXFxuKyAqIFBlcmlvZGljIHBlci1kZXZpY2Ugc3VtbWFyeSwgZW1pdHRlZCBvbmNlIHBlciBwZXJpb2QgZnJvbSB0aGUgdGFpbCBvZlxcbisgKiBpb2NfdGltZXJfZm4oKS4gIFVubGlrZSB0aGUgc3RhdGUtY2hhbmdlIGV2ZW50cyBhYm92ZSwgdGhpcyBmaXJlcyBldmVyeVxcbisgKiBwZXJpb2QgdGhlIGNvbnRyb2xsZXIgaXMgcnVubmluZywgaW5jbHVkaW5nIHN0ZWFkeSBzdGF0ZXMsIGFuZCBjYXJyaWVzXFxuKyAqIHRoZSBvdmVyYWxsIGNvbnRyb2xsZXIgc3RhdGUgc28gYmFzaWMgbW9uaXRvcmluZyBkb2Vzbid0IHJlcXVpcmUgZHJnbi5cXG4rICovXFxuK1RSQUNFX0VWRU5UKGlvY29zdF9pb2NfdGljayxcXG4rXFxuK1xcdFRQX1BST1RPKHN0cnVjdCBpb2MgKmlvYywgaW50IG5yX2FjdGl2ZSwgdTY0IHVzYWdlX3VzX3N1bSksXFxuK1xcbitcXHRUUF9BUkdTKGlvYywgbnJfYWN0aXZlLCB1c2FnZV91c19zdW0pLFxcbitcXG4rXFx0VFBfU1RSVUNUX19lbnRyeSAoXFxuK1xcdFxcdF9fc3RyaW5nKGRldm5hbWUsIGlvY19uYW1lKGlvYykpXFxuK1xcdFxcdF9fZmllbGQodTMyLCBwZXJpb2RfdXMpXFxuK1xcdFxcdF9fZmllbGQodTY0LCB2cmF0ZSlcXG4rXFx0XFx0X19maWVsZChpbnQsIGJ1c3lfbGV2ZWwpXFxuK1xcdFxcdF9fZmllbGQoaW50LCBucl9hY3RpdmUpXFxuK1xcdFxcdF9fZmllbGQodTMyLCB1c2FnZV9wY3QpXFxuK1xcdFxcdF9fZmllbGQoaW50LCBydW5uaW5nKVxcbitcXHQpLFxcbitcXG4rXFx0VFBfZmFzdF9hc3NpZ24oXFxuK1xcdFxcdF9fYXNzaWduX3N0cihkZXZuYW1lKTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlcGVyaW9kX3VzID0gaW9jLVxcdTAwM2VwZXJpb2RfdXM7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXZyYXRlID0gaW9jLVxcdTAwM2V2dGltZV9iYXNlX3JhdGU7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWJ1c3lfbGV2ZWwgPSBpb2MtXFx1MDAzZWJ1c3lfbGV2ZWw7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX2FjdGl2ZSA9IG5yX2FjdGl2ZTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNldXNhZ2VfcGN0ID0gaW9jLVxcdTAwM2VwZXJpb2RfdXMgP1xcbitcXHRcXHRcXHRkaXZfdTY0KHVzYWdlX3VzX3N1bSAqIDEwMCwgaW9jLVxcdTAwM2VwZXJpb2RfdXMpIDogMDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlcnVubmluZyA9IGlvYy1cXHUwMDNlcnVubmluZztcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX3ByaW50ayhcXFwiWyVzXSBwZXJpb2Q9JXV1cyB2cmF0ZT0lbGx1IGJ1c3k9JWQgYWN0aXZlPSVkIHVzYWdlPSV1JSUgcnVubmluZz0lZFxcXCIsXFxuK1xcdFxcdF9fZ2V0X3N0cihkZXZuYW1lKSwgX19lbnRyeS1cXHUwMDNlcGVyaW9kX3VzLCBfX2VudHJ5LVxcdTAwM2V2cmF0ZSxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlYnVzeV9sZXZlbCwgX19lbnRyeS1cXHUwMDNlbnJfYWN0aXZlLCBfX2VudHJ5LVxcdTAwM2V1c2FnZV9wY3QsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXJ1bm5pbmdcXG4rXFx0KVxcbispO1xcbitcXG4gVFJBQ0VfRVZFTlQoaW9jb3N0X2lvY2dfZm9yZ2l2ZV9kZWJ0LFxcbiBcXG4gXFx0VFBfUFJPVE8oc3RydWN0IGlvY19ncSAqaW9jZywgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGlvY19ub3cgKm5vdyxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcXG5pbmRleCAyZjc5Njg4ZGNmN2NlLi42N2E2MzBjYjU2MTQ4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXFxuQEAgLTEzOCwzICsxMzgsNSBAQCBDT05GSUdfU01DX0hTX0NUUkxfQlBGPXlcXG4gQ09ORklHX0RJQlM9eVxcbiBDT05GSUdfRElCU19MTz15XFxuIENPTkZJR19QTV9XQUtFTE9DS1M9eVxcbitDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1Q9eVxcbitDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGPXlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaW9jb3N0X21vZGVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTkzNDRiMTNmYmE5OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuY1xcbkBAIC0wLDAgKzEsMTkzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJpb2Nvc3RfbW9kZWwuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaW9jb3N0X21zLnNrZWwuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFdyaXRlIGEgbGluZSB0byBpby5jb3N0Lm1vZGVsIHdpdGggd3JpdGUoMikgYW5kIHJldHVybiB0aGUgZXJybm8gb2ZcXG4rICogdGhlIGZhaWxlZCB3cml0ZSwgb3IgMCBvbiBzdWNjZXNzLiAgc3RkaW8gaXMgbm90IHVzZWQgaGVyZSBvblxcbisgKiBwdXJwb3NlOiB0aGUga2VybmVsJ3MgcmVqZWN0aW9uIGhhcHBlbnMgaW4gdGhlIHdyaXRlKCkgc3lzY2FsbCxcXG4rICogbm90IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIGNvcHksIGFuZCBldmVyeSB3cml0ZSwgaW5jbHVkaW5nXFxuKyAqIHRoZSBlcnJvciBwYXRocyBvZiB0aGUgY2FsbGVycyBiZWxvdywgaXMgY2hlY2tlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgd3JpdGVfY29zdF9tb2RlbChjb25zdCBjaGFyICpidWYpXFxuK3tcXG4rXFx0aW50IGZkLCBlcnIgPSAwO1xcbitcXHRzc2l6ZV90IG47XFxuK1xcbitcXHRmZCA9IG9wZW4oXFxcIi9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWxcXFwiLCBPX1dST05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBlcnJubztcXG4rXFx0biA9IHdyaXRlKGZkLCBidWYsIHN0cmxlbihidWYpKTtcXG4rXFx0aWYgKG4gXFx1MDAzYyAwKVxcbitcXHRcXHRlcnIgPSBlcnJubztcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZWFkIGJhY2sgdGhlIGlvLmNvc3QubW9kZWwgbGluZSBvZiBkZXYgYW5kIGNvcHkgdGhlIG1vZGVsPSB2YWx1ZVxcbisgKiBpbnRvIEBtb2RlbC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLlxcbisgKi9cXG4rc3RhdGljIGludCByZWFkYmFja19tb2RlbChjb25zdCBjaGFyICpkZXYsIGNoYXIgKm1vZGVsLCBzaXplX3QgbW9kZWxfc3opXFxuK3tcXG4rXFx0Y2hhciBsaW5lWzI1Nl0sIHdvcmRbMjU2XSwgKm0sICplbmQ7XFxuK1xcdEZJTEUgKmZwO1xcbitcXHRpbnQgZm91bmQgPSAwO1xcbitcXG4rXFx0ZnAgPSBmb3BlbihcXFwiL3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5tb2RlbFxcXCIsIFxcXCJyXFxcIik7XFxuK1xcdGlmICghZnApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XFxuK1xcdFxcdGlmIChzc2NhbmYobGluZSwgXFxcIiUyNTVzXFxcIiwgd29yZCkgPT0gMSBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKHdvcmQsIGRldikpIHtcXG4rXFx0XFx0XFx0Zm91bmQgPSAxO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGZjbG9zZShmcCk7XFxuK1xcdGlmICghZm91bmQpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdG0gPSBzdHJzdHIobGluZSwgXFxcIm1vZGVsPVxcXCIpO1xcbitcXHRpZiAoIW0pXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0bSArPSBzdHJsZW4oXFxcIm1vZGVsPVxcXCIpO1xcbitcXHRlbmQgPSBtO1xcbitcXHR3aGlsZSAoKmVuZCBcXHUwMDI2XFx1MDAyNiAhaXNzcGFjZSgqZW5kKSlcXG4rXFx0XFx0ZW5kKys7XFxuK1xcdHNucHJpbnRmKG1vZGVsLCBtb2RlbF9zeiwgXFxcIiUuKnNcXFwiLCAoaW50KShlbmQgLSBtKSwgbSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBCaW5kIHRoZSBuYW1lZCBtb2RlbCB0byBhIGRldmljZSB3aXRoIFxcXCJtb2RlbD1cXHUwMDNjbmFtZVxcdTAwM2VcXFwiLCB2ZXJpZnkgdGhlXFxuKyAqIHJlYWRiYWNrIGFuZCByZXN0b3JlIHRoZSBidWlsdGluIG1vZGVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXFxuKyAqL1xcbitzdGF0aWMgaW50IGJpbmRfbW9kZWwoY29uc3QgY2hhciAqZGV2LCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGNoYXIgYnVmWzMwMF0sIGdvdFs2NF07XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJXMgbW9kZWw9JXNcXFxcblxcXCIsIGRldiwgbmFtZSk7XFxuK1xcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRDSEVDSyhmYWxzZSwgXFxcIndyaXRlX21vZGVsXFxcIiwgXFxcIndyaXRlIG1vZGVsPSVzOiAlc1xcXFxuXFxcIiwgbmFtZSxcXG4rXFx0XFx0ICAgICAgc3RyZXJyb3IoZXJyKSk7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXHRlcnIgPSByZWFkYmFja19tb2RlbChkZXYsIGdvdCwgc2l6ZW9mKGdvdCkpO1xcbitcXHRpZiAoZXJyIHx8IHN0cmNtcChnb3QsIG5hbWUpKSB7XFxuK1xcdFxcdENIRUNLKGZhbHNlLCBcXFwicmVhZGJhY2tfbW9kZWxcXFwiLCBcXFwiZ290IG1vZGVsPSVzIHdhbnQgJXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgIGVyciA/IFxcXCIobm9uZSlcXFwiIDogZ290LCBuYW1lKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHQvKiByZXN0b3JlIHRoZSBidWlsdGluIGxpbmVhciBtb2RlbDsgdGhlIHdyaXRlIGlzIGNoZWNrZWQgdG9vICovXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIlcyBtb2RlbD1saW5lYXJcXFxcblxcXCIsIGRldik7XFxuK1xcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRDSEVDSyhmYWxzZSwgXFxcInJlc3RvcmVfbGluZWFyXFxcIiwgXFxcIndyaXRlIG1vZGVsPWxpbmVhcjogJXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgIHN0cmVycm9yKGVycikpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoZSBkZXYgYXJndW1lbnQgbXVzdCBiZSBwcmVzZW50IGluIGlvLmNvc3QucW9zIGFscmVhZHksIHdoaWNoXFxuKyAqIG1lYW5zIGlvY29zdCBpcyBlbmFibGVkIGZvciBpdC5cXG4rICovXFxuK3N0YXRpYyBpbnQgZGV2X2hhc19pb2Nvc3QoY29uc3QgY2hhciAqZGV2KVxcbit7XFxuK1xcdGNoYXIgbGluZVsyNTZdLCB3b3JkWzI1Nl07XFxuK1xcdEZJTEUgKmZwO1xcbitcXHRpbnQgZm91bmQgPSAwO1xcbitcXG4rXFx0ZnAgPSBmb3BlbihcXFwiL3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5xb3NcXFwiLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIWZwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XFxuK1xcdFxcdGlmIChzc2NhbmYobGluZSwgXFxcIiUyNTVzXFxcIiwgd29yZCkgPT0gMSBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKHdvcmQsIGRldikpIHtcXG4rXFx0XFx0XFx0Zm91bmQgPSAxO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGZjbG9zZShmcCk7XFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4rLypcXG4rICogQmluZCB0aGUgMnggZXhhbXBsZSBtb2RlbCBhbmQgdmVyaWZ5IHRoZSBpby5jb3N0Lm1vZGVsIHJlYWRiYWNrLlxcbisgKiBJTyBhY2NvdW50aW5nIGl0c2VsZiBpcyBub3QgY2hlY2tlZCBoZXJlOyBpdCBuZWVkcyBhIGRldmljZSBkb2luZ1xcbisgKiByZWFsIElPIHVuZGVyIGlvY29zdCBhbmQgaXMgY292ZXJlZCBieSB0aGUga2VybmVsLXNpZGUgdmFsaWRhdGlvblxcbisgKiBkZXNjcmliZWQgaW4gdGhlIGNvdmVyIGxldHRlci5cXG4rICpcXG4rICogUmVxdWlyZXMgcm9vdCwgY2dyb3VwIHYyIGFuZCBhIGRldmljZSB3aXRoIGlvY29zdCBzdXBwb3J0LiAgVGhlXFxuKyAqIGRldmljZSBtdXN0IGJlIGdpdmVuIGFzIG1ham9yOm1pbm9yIGluICRJT0NPU1RfVEVTVF9ERVYsIG90aGVyd2lzZVxcbisgKiB0aGUgdGVzdCBpcyBza2lwcGVkLlxcbisgKi9cXG4rdm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWwodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaW9jb3N0X21vZGVsICpza2VsO1xcbitcXHRjaGFyIGJ1ZlszMDBdLCAqZGV2O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZGV2ID0gZ2V0ZW52KFxcXCJJT0NPU1RfVEVTVF9ERVZcXFwiKTtcXG4rXFx0aWYgKCFkZXYgfHwgZ2V0ZXVpZCgpICE9IDApIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0aWYgKCFBU1NFUlRfVFJVRShkZXZfaGFzX2lvY29zdChkZXYpLCBcXFwiaW9jb3N0X21vdW50ZWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LypcXG4rXFx0ICogbmVnYXRpdmU6IGJpbmRpbmcgYW4gdW5rbm93biBtb2RlbCBuYW1lIG11c3QgYmUgcmVqZWN0ZWQsXFxuK1xcdCAqIHNvIGEgdHlwbyBjYW5ub3Qgc2lsZW50bHkgZGlzYWJsZSBjb3N0IG1vZGVsIHVwZGF0ZXNcXG4rXFx0ICovXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIlcyBtb2RlbD1ub19zdWNoX21vZGVsXFxcXG5cXFwiLCBkZXYpO1xcbitcXHRlcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7XFxuK1xcdEFTU0VSVF9FUShlcnIsIEVOT0VOVCwgXFxcInVua25vd25fbW9kZWxfcmVqZWN0ZWRcXFwiKTtcXG4rXFxuK1xcdHNrZWwgPSBpb2Nvc3RfbW9kZWxfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5fbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBhdHRhY2hpbmcgdGhlIHN0cnVjdF9vcHMgcmVnaXN0ZXJzIHRoZSBtb2RlbCBieSBuYW1lICovXFxuK1xcdGVyciA9IGlvY29zdF9tb2RlbF9fYXR0YWNoKHNrZWwpO1xcbitcXHRpZiAoQVNTRVJUX09LKGVyciwgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsIFxcXCJpb2Nvc3RfMnhcXFwiKSwgXFxcImJpbmRfYW5kX3JlYWRiYWNrXFxcIik7XFxuK1xcbitcXHRpb2Nvc3RfbW9kZWxfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNhbWUgY2hlY2sgZm9yIHRoZSBtdWx0aS1zdHJlYW0gZXhhbXBsZSBtb2RlbC4gIE9ubHkgb25lIG1vZGVsIGNhblxcbisgKiBiZSBib3VuZCB0byBhIGRldmljZSBhdCBhIHRpbWU7IGJvdGggdGVzdHMgYmluZCBhbmQgcmVzdG9yZSwgc29cXG4rICogdGhleSBhcmUgc2VyaWFsIGFuZCBpbmRlcGVuZGVudC5cXG4rICovXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfaW9jb3N0X21vZGVsX3N0cmVhbXModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaW9jb3N0X21zICpza2VsO1xcbitcXHRjaGFyICpkZXY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRkZXYgPSBnZXRlbnYoXFxcIklPQ09TVF9URVNUX0RFVlxcXCIpO1xcbitcXHRpZiAoIWRldiB8fCBnZXRldWlkKCkgIT0gMCkge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksIFxcXCJpb2Nvc3RfbW91bnRlZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsID0gaW9jb3N0X21zX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gaW9jb3N0X21zX19hdHRhY2goc2tlbCk7XFxuK1xcdGlmIChBU1NFUlRfT0soZXJyLCBcXFwiYXR0YWNoXFxcIikpXFxuK1xcdFxcdEFTU0VSVF9PSyhiaW5kX21vZGVsKGRldiwgXFxcImlvY29zdF9tc1xcXCIpLCBcXFwiYmluZF9hbmRfcmVhZGJhY2tcXFwiKTtcXG4rXFxuK1xcdGlvY29zdF9tc19fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21vZGVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21vZGVsLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY4YWQ0MTdiMzU4NDhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXFxuQEAgLTAsMCArMSwxMTYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogRXhhbXBsZSBpb2Nvc3QgY29zdCBtb2RlbDogdGhlIGJ1aWx0aW4gbGluZWFyIEhERCBmb3JtdWxhIHdpdGggYWxsXFxuKyAqIGNvc3RzIGRvdWJsZWQuXFxuKyAqXFxuKyAqIFRoZSBjb25zdGFudHMgbWlycm9yIHdoYXQgY2FsY19sY29lZnMoKSBkZXJpdmVzIGZyb20gdGhlIEFVVE9QX0hERFxcbisgKiBkZWZhdWx0cyAocmJwcz0xNzQwMTkxNzYgcnNlcWlvcHM9NDE3MDggcnJhbmRpb3BzPTM3MCwgdy1zaWRlXFxuKyAqIGFuYWxvZykgaW4gdnRpbWUgdW5pdHMgd2hlcmUgMXMgPT0gMl4zNywgZXhwcmVzc2VkIHdpdGggdGhlIHNhbWVcXG4rICogcm91bmQtdXAgZGl2aXNpb25zIHNvIHRoZXkgY2Fubm90IGRyaWZ0IGZyb20gdGhlIGtlcm5lbC4gIEEgZGV2aWNlXFxuKyAqIGJvdW5kIHRvIHRoaXMgbW9kZWwgdGhyb3VnaCBpby5jb3N0Lm1vZGVsIGNoYXJnZXMgZXhhY3RseSB0d2ljZSB0aGVcXG4rICogYnVpbHRpbiBtb2RlbCB1bmRlciB0aGUgc2FtZSB3b3JrbG9hZCwgd2hpY2ggbWFrZXMgaXQgYSBjb252ZW5pZW50XFxuKyAqIHdheSB0byB2ZXJpZnkgdGhhdCBhY2NvdW50aW5nIGdvZXMgdGhyb3VnaCB0aGUgQlBGIHBhdGguXFxuKyAqXFxuKyAqIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nXFxuKyAqIGZsdXNoZXM6IHRoZXJlIGlzIG5vIGZhbGxiYWNrIHRvIHRoZSBidWlsdGluIG1vZGVsLCBhIGRhdGFsZXNzXFxuKyAqIFdSSVRFfFJFUV9QUkVGTFVTSCBpcyBwcmljZWQgYXMgYSBvbmUtcGFnZSB3cml0ZS5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuKy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovXFxuKyNkZWZpbmUgSU9DX1BBR0VfU0laRVxcdFxcdDQwOTZcXG4rI2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUXFx0M1xcdC8qIDUxMkIgc2VjdG9ycyB0byA0a0IgcGFnZXMgKi9cXG4rI2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVNcXHQ0MDk2XFx0LyogMTZNQiBzZWVrIHRocmVzaG9sZCAqL1xcbisjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0VcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcdC8qIG5vdCBpbiBCVEY6IGEgcGxhaW4gbWFjcm8gKi9cXG4rI2RlZmluZSBJT0NPU1RfUkVRX09QX01BU0tcXHQweGZmXFx0XFx0LyogUkVRX09QX01BU0ssIG5vdCBpbiBCVEYgKi9cXG4rXFxuKy8qXFxuKyAqIERJVjY0X1U2NF9ST1VORF9VUCAvIERJVl9ST1VORF9VUF9VTEwgZXF1aXZhbGVudHMsIGZvbGRlZCBhdFxcbisgKiBjb21waWxlIHRpbWVcXG4rICovXFxuKyNkZWZpbmUgUlUoeCwgeSlcXHRcXHQoKHgpIC8gKHkpICsgKCgoeCkgJSAoeSkpID8gMSA6IDApKVxcbitcXG4rI2RlZmluZSBSQlBTXFx0MTc0MDE5MTc2VUxMXFxuKyNkZWZpbmUgUlNFUUlPUFNcXHQ0MTcwOFVMTFxcbisjZGVmaW5lIFJSQU5ESU9QU1xcdDM3MFVMTFxcbisjZGVmaW5lIFdCUFNcXHQxNzgwNzU4NjZVTExcXG4rI2RlZmluZSBXU0VRSU9QU1xcdDQyNzA1VUxMXFxuKyNkZWZpbmUgV1JBTkRJT1BTXFx0Mzc4VUxMXFxuK1xcbisjZGVmaW5lIFJQQUdFXFx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSlcXG4rI2RlZmluZSBSU0VRSU9cXHQoUlUoVlRJTUVfUEVSX1NFQywgUlNFUUlPUFMpIC0gUlBBR0UpXFxuKyNkZWZpbmUgUlJBTkRJT1xcdChSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpXFxuKyNkZWZpbmUgV1BBR0VcXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKVxcbisjZGVmaW5lIFdTRVFJT1xcdChSVShWVElNRV9QRVJfU0VDLCBXU0VRSU9QUykgLSBXUEFHRSlcXG4rI2RlZmluZSBXUkFORElPXFx0KFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSlcXG4rXFxuKy8qXFxuKyAqIHBlci1jZ3JvdXAgY3Vyc29yIHN0b3JhZ2U6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXQsIHNvXFxuKyAqIHRoZSBtb2RlbCBuZXZlciBsZWFrcyBvciByZXVzZXMgc3RhbGUgcGVyLWNncm91cCBzdGF0ZVxcbisgKi9cXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9DR1JQX1NUT1JBR0UpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xcbit9IGN1cnNvcl9zdG9yZSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbit1NjQgQlBGX1BST0coaW9jb3N0XzJ4X2NhbGNfY29zdCwgdTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvcixcXG4rXFx0ICAgICBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgbW9kZWxfZmxhZ3MpXFxuK3tcXG4rXFx0dTY0IHBhZ2VzLCBzZWVrX3BhZ2VzID0gMCwgYmFzZSwgY29lZl9wYWdlLCByYW5kaW8sIGNvc3Q7XFxuK1xcbitcXHRpZiAoKG9wZiBcXHUwMDI2IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1JFQUQpIHtcXG4rXFx0XFx0YmFzZSA9IFJTRVFJTzsgY29lZl9wYWdlID0gUlBBR0U7IHJhbmRpbyA9IFJSQU5ESU87XFxuK1xcdH0gZWxzZSBpZiAoKG9wZiBcXHUwMDI2IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1dSSVRFKSB7XFxuK1xcdFxcdGJhc2UgPSBXU0VRSU87IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSBXUkFORElPO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBhIGZ1bGx5IG93bmluZyBtb2RlbCBtdXN0IHByaWNlIGV2ZXJ5IG9wOyB1bmtub3duXFxuK1xcdFxcdCAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGVcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGJhc2UgPSAwOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogbWlycm9yIHRoZSBidWlsdGluIHNpbmdsZSBwZXItY2dyb3VwIGN1cnNvcjogdGhlIG1vZGVsIGtlZXBzXFxuK1xcdCAqIGl0cyBvd24gY3Vyc29yIGtleWVkIGJ5IHRoZSBibGtjZyBhcmd1bWVudFxcbitcXHQgKi9cXG4rXFx0e1xcbitcXHRcXHRfX3U2NCAqY3Vyc29yLCBjdXI7XFxuK1xcbitcXHRcXHRjdXJzb3IgPSBicGZfY2dycF9zdG9yYWdlX2dldChcXHUwMDI2Y3Vyc29yX3N0b3JlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBibGtjZy1cXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTtcXG4rXFx0XFx0aWYgKCFjdXJzb3IpXFxuK1xcdFxcdFxcdHJldHVybiAyICogKGJhc2UgKyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlKTtcXG4rXFx0XFx0Y3VyID0gKmN1cnNvcjtcXG4rXFx0XFx0c2Vla19wYWdlcyA9IHNlY3RvciBcXHUwMDNlIGN1ciA/IHNlY3RvciAtIGN1ciA6IGN1ciAtIHNlY3RvcjtcXG4rXFx0XFx0c2Vla19wYWdlcyBcXHUwMDNlXFx1MDAzZT0gSU9DX1NFQ1RfVE9fUEFHRV9TSElGVDtcXG4rXFx0XFx0aWYgKHNlZWtfcGFnZXMgXFx1MDAzZSBMQ09FRl9SQU5ESU9fUEFHRVMpXFxuK1xcdFxcdFxcdGJhc2UgPSByYW5kaW87XFxuK1xcdFxcdGlmICghKG1vZGVsX2ZsYWdzIFxcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkpXFxuK1xcdFxcdFxcdCpjdXJzb3IgPSBzZWN0b3IgKyBSVShuYnl0ZXMsIDUxMik7XFxuK1xcdH1cXG4rXFxuK1xcdHBhZ2VzID0gUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKTtcXG4rXFx0aWYgKCFwYWdlcylcXG4rXFx0XFx0cGFnZXMgPSAxO1xcdC8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqL1xcbitcXHRpZiAobW9kZWxfZmxhZ3MgXFx1MDAyNiBJT0NPU1RfQ09TVF9GX01FUkdFKVxcbitcXHRcXHRiYXNlID0gMDtcXG4rXFxuK1xcdGNvc3QgPSAyICogKGJhc2UgKyBwYWdlcyAqIGNvZWZfcGFnZSk7XFxuK1xcdHJldHVybiBjb3N0O1xcbit9XFxuK1xcbitTRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG4rc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgaW9jb3N0XzJ4ID0ge1xcbitcXHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfMnhfY2FsY19jb3N0LFxcbitcXHQubmFtZSA9IFxcXCJpb2Nvc3RfMnhcXFwiLFxcbit9O1xcbitcXG4rY2hhciBMSUNFTlNFW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zY2M1N2MwM2QzYzg4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pb2Nvc3RfbXMuY1xcbkBAIC0wLDAgKzEsMTM2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIEV4YW1wbGUgbXVsdGktc3RyZWFtIHNlcXVlbnRpYWxpdHkgZGV0ZWN0aW9uIGNvc3QgbW9kZWwuXFxuKyAqXFxuKyAqIFRoZSBidWlsdGluIG1vZGVsIGtlZXBzIGEgc2luZ2xlIGN1cnNvciBwZXIgY2dyb3VwLCBzbyB0d29cXG4rICogaW50ZXJsZWF2ZWQgc2VxdWVudGlhbCByZWFkZXJzIGluIG9uZSBjZ3JvdXAgYXJlIGFsbCBwcmljZWQgcmFuZG9tXFxuKyAqIChtZWFzdXJlZCA4OXggb3ZlcmNoYXJnZSwgMTIuOXggdGhyb3VnaHB1dCBjb2xsYXBzZSksIHdoaWxlIHJhbmRvbVxcbisgKiBJTyBpbnNpZGUgYSBob3Qgd2luZG93IHNtYWxsZXIgdGhhbiB0aGUgMTZNQiBzZWVrIHRocmVzaG9sZCBpc1xcbisgKiBwcmljZWQgc2VxdWVudGlhbCAobWVhc3VyZWQgMTA3eCB1bmRlcmNoYXJnZSkuICBUaGlzIG1vZGVsIHJlcGxhY2VzXFxuKyAqIHRoZSBzaW5nbGUgY3Vyc29yIHdpdGggYSBwZXItY2dyb3VwIHRhYmxlIG9mIHN0cmVhbSBzbG90czogYW4gSU8gaXNcXG4rICogc2VxdWVudGlhbCBpZmYgaXRzIHNlY3RvciBtYXRjaGVzIHRoZSBleHBlY3RlZCBuZXh0IHNlY3RvciBvZiBhbnlcXG4rICogdHJhY2tlZCBzdHJlYW0uICBJbnRlcmxlYXZlZCBzdHJlYW1zIGtlZXAgdGhlaXIgb3duIHNsb3RzLCBhbmRcXG4rICogd2luZG93ZWQgcmFuZG9tIElPIHJhcmVseSBtYXRjaGVzIGEgbW92aW5nIGV4cGVjdGF0aW9uLlxcbisgKlxcbisgKiBTdHJlYW0gc3RhdGUgbGl2ZXMgaW4gYSBDR1JQX1NUT1JBR0UgbWFwLCBzbyBpdCBpcyBjcmVhdGVkIGFuZFxcbisgKiBmcmVlZCB3aXRoIHRoZSBjZ3JvdXAuICBUaGUgbW9kZWwgaW1wbGVtZW50cyB0aGUgZnVsbCBidWlsdGluXFxuKyAqIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nIGZsdXNoIHByaWNpbmcuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuKy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovXFxuKyNkZWZpbmUgSU9DX1BBR0VfU0laRVxcdFxcdDQwOTZcXG4rI2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUXFx0M1xcdC8qIDUxMkIgc2VjdG9ycyB0byA0a0IgcGFnZXMgKi9cXG4rI2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVNcXHQ0MDk2XFx0LyogMTZNQiBzZWVrIHRocmVzaG9sZCAqL1xcbisjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0VcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcdC8qIG5vdCBpbiBCVEY6IGEgcGxhaW4gbWFjcm8gKi9cXG4rI2RlZmluZSBJT0NPU1RfUkVRX09QX01BU0tcXHQweGZmXFx0XFx0LyogUkVRX09QX01BU0ssIG5vdCBpbiBCVEYgKi9cXG4rXFxuKy8qXFxuKyAqIERJVjY0X1U2NF9ST1VORF9VUCAvIERJVl9ST1VORF9VUF9VTEwgZXF1aXZhbGVudHMsIGZvbGRlZCBhdFxcbisgKiBjb21waWxlIHRpbWVcXG4rICovXFxuKyNkZWZpbmUgUlUoeCwgeSlcXHRcXHQoKHgpIC8gKHkpICsgKCgoeCkgJSAoeSkpID8gMSA6IDApKVxcbitcXG4rI2RlZmluZSBSQlBTXFx0MTc0MDE5MTc2VUxMXFxuKyNkZWZpbmUgUlNFUUlPUFNcXHQ0MTcwOFVMTFxcbisjZGVmaW5lIFJSQU5ESU9QU1xcdDM3MFVMTFxcbisjZGVmaW5lIFdCUFNcXHQxNzgwNzU4NjZVTExcXG4rI2RlZmluZSBXU0VRSU9QU1xcdDQyNzA1VUxMXFxuKyNkZWZpbmUgV1JBTkRJT1BTXFx0Mzc4VUxMXFxuK1xcbisjZGVmaW5lIFJQQUdFXFx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSlcXG4rI2RlZmluZSBSU0VRSU9cXHQoUlUoVlRJTUVfUEVSX1NFQywgUlNFUUlPUFMpIC0gUlBBR0UpXFxuKyNkZWZpbmUgUlJBTkRJT1xcdChSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpXFxuKyNkZWZpbmUgV1BBR0VcXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKVxcbisjZGVmaW5lIFdTRVFJT1xcdChSVShWVElNRV9QRVJfU0VDLCBXU0VRSU9QUykgLSBXUEFHRSlcXG4rI2RlZmluZSBXUkFORElPXFx0KFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSlcXG4rXFxuKyNkZWZpbmUgTlNMT1RTXFx0NFxcbitcXG4rc3RydWN0IHN0cmVhbXMge1xcbitcXHRfX3U2NCBleHBlY3RlZFtOU0xPVFNdO1xcdC8qIG5leHQgZXhwZWN0ZWQgc2VjdG9yLCBwZXIgc3RyZWFtICovXFxuK1xcdF9fdTY0IHN0YW1wW05TTE9UU107XFx0LyogTFJVIHN0YW1wLCAwID0gZW1wdHkgKi9cXG4rfTtcXG4rXFxuKy8qXFxuKyAqIHBlci1jZ3JvdXAgc3RyZWFtIHRhYmxlOiBrZXllZCBieSB0aGUgY2dyb3VwLCBmcmVlZCB3aXRoIGl0XFxuKyAqL1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0NHUlBfU1RPUkFHRSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3Qgc3RyZWFtcyk7XFxuK30gc3RyZWFtX3RhYiBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbit1NjQgQlBGX1BST0coaW9jb3N0X21zX2NhbGNfY29zdCwgdTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvcixcXG4rXFx0ICAgICBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgbW9kZWxfZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHN0cmVhbXMgKnM7XFxuK1xcdHU2NCBwYWdlcywgYmFzZSwgY29lZl9wYWdlLCByYW5kaW8sIGFkdmFuY2UsIG5vdztcXG4rXFx0dTMyIGksIHZpY3RpbSA9IDAsIGZvdW5kID0gMHhGRkZGRkZGRjtcXG4rXFxuK1xcdGlmICgob3BmIFxcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfUkVBRCkge1xcbitcXHRcXHRiYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTztcXG4rXFx0fSBlbHNlIGlmICgob3BmIFxcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfV1JJVEUpIHtcXG4rXFx0XFx0YmFzZSA9IFdTRVFJTzsgY29lZl9wYWdlID0gV1BBR0U7IHJhbmRpbyA9IFdSQU5ESU87XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd25cXG4rXFx0XFx0ICogb3BzIGFyZSBwcmljZWQgYXMgYSBzaW5nbGUgcGFnZSB3cml0ZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwO1xcbitcXHR9XFxuK1xcdGFkdmFuY2UgPSBSVShuYnl0ZXMsIDUxMik7XFx0Lyogc2VjdG9ycyAqL1xcbitcXG4rXFx0cyA9IGJwZl9jZ3JwX3N0b3JhZ2VfZ2V0KFxcdTAwMjZzdHJlYW1fdGFiLCBibGtjZy1cXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0IEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7XFxuK1xcdGlmICghcylcXG4rXFx0XFx0cmV0dXJuIGJhc2UgKyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlO1xcbitcXG4rXFx0bm93ID0gYnBmX2t0aW1lX2dldF9ucygpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlNMT1RTOyBpKyspIHtcXG4rXFx0XFx0aWYgKHMtXFx1MDAzZWV4cGVjdGVkW2ldID09IHNlY3RvciBcXHUwMDI2XFx1MDAyNiBzLVxcdTAwM2VzdGFtcFtpXSkge1xcbitcXHRcXHRcXHRmb3VuZCA9IGk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKGZvdW5kICE9IDB4RkZGRkZGRkYpIHtcXG4rXFx0XFx0Lyogc2VxdWVudGlhbDoga2VlcCB0aGUgc2VxIGJhc2UgZnJvbSB0aGUgb3AgYnJhbmNoICovXFxuK1xcdFxcdHMtXFx1MDAzZWV4cGVjdGVkW2ZvdW5kXSA9IHNlY3RvciArIGFkdmFuY2U7XFxuK1xcdFxcdHMtXFx1MDAzZXN0YW1wW2ZvdW5kXSA9IG5vdztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0YmFzZSA9IHJhbmRpbztcXG4rXFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIE5TTE9UUzsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmIChzLVxcdTAwM2VzdGFtcFtpXSBcXHUwMDNjIHMtXFx1MDAzZXN0YW1wW3ZpY3RpbV0pXFxuK1xcdFxcdFxcdFxcdHZpY3RpbSA9IGk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cy1cXHUwMDNlZXhwZWN0ZWRbdmljdGltXSA9IHNlY3RvciArIGFkdmFuY2U7XFxuK1xcdFxcdHMtXFx1MDAzZXN0YW1wW3ZpY3RpbV0gPSBub3c7XFxuK1xcdH1cXG4rXFxuK1xcdHBhZ2VzID0gUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKTtcXG4rXFx0aWYgKCFwYWdlcylcXG4rXFx0XFx0cGFnZXMgPSAxO1xcdC8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqL1xcbitcXHRpZiAobW9kZWxfZmxhZ3MgXFx1MDAyNiBJT0NPU1RfQ09TVF9GX01FUkdFKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIG1lcmdlZCBiaW9zIHNraXAgdGhlIGJhc2UgY29zdCBidXQgc3RpbGwgYWR2YW5jZVxcbitcXHRcXHQgKiB0aGUgc3RyZWFtIHBvc2l0aW9uIGFib3ZlLCBzbyBhIG1lcmdlIGF0IHRoZVxcbitcXHRcXHQgKiBleHBlY3RlZCBzZWN0b3IgZG9lcyBub3QgbWFrZSB0aGUgZm9sbG93aW5nIG5ldyBJT1xcbitcXHRcXHQgKiBsb29rIHJhbmRvbVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YmFzZSA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBiYXNlICsgcGFnZXMgKiBjb2VmX3BhZ2U7XFxuK31cXG4rXFxuK1NFQyhcXFwiLnN0cnVjdF9vcHNcXFwiKVxcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfbXMgPSB7XFxuK1xcdC5jYWxjX2Nvc3QgPSAodm9pZCAqKWlvY29zdF9tc19jYWxjX2Nvc3QsXFxuK1xcdC5uYW1lID0gXFxcImlvY29zdF9tc1xcXCIsXFxuK307XFxuK1xcbitjaGFyIExJQ0VOU0VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMDo1Mi4zOTM4Nzk2MzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyNjM0MzIzNjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUX0JQRlwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvY19icGZfbW9kZWxfYmluZFwiLFxuICAgIFwiaW9jX2Nvc3RfbW9kZWxfd3JpdGVcIixcbiAgICBcImNhbGNfdnRpbWVfY29zdFwiLFxuICAgIFwiY2FsY19zaXplX3Z0aW1lX2Nvc3RcIixcbiAgICBcImJwZl9pb2Nvc3RfcmVnXCIsXG4gICAgXCJicGZfaW9jb3N0X3VucmVnXCIsXG4gICAgXCJicGZfaW9jb3N0X3ZhbGlkYXRlXCIsXG4gICAgXCJpb2Nvc3RfYnBmX21vZGVsX2dldFwiLFxuICAgIFwiaW9jb3N0X2JwZl9tb2RlbF9wdXRcIixcbiAgICBcImlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lXCIsXG4gICAgXCJpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEJQRiBzdHJ1Y3Rfb3BzIHN1cHBvcnQgKGlvY29zdF9tb2RlbF9vcHMpIGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdC4gSXQgaW50cm9kdWNlcyBuZXcga2VybmVsIGNvZGUgaW4gYmxvY2svYmxrLWlvY29zdC1icGYuYyBmb3IgcmVnaXN0ZXJpbmcsIHZhbGlkYXRpbmcsIGFuZCBtYW5hZ2luZyBCUEYgY29zdCBtb2RlbHMsIGFuZCB1cGRhdGVzIGJsb2NrL2Jsay1pb2Nvc3QuYyBhbmQgYmxvY2svYmxrLWNncm91cC5jIHRvIGludGVyZmFjZSB3aXRoIHRoZXNlIG1vZGVscyBkdXJpbmcgSU8gY29zdCBjYWxjdWxhdGlvbnMsIGNvbmZpZ3VyYXRpb24gd3JpdGVzLCBhbmQgY2dyb3VwIGxpZmVjeWNsZSBldmVudHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgQlBGIHN5c2NhbGxzIGFuZCBjZ3JvdXAgdjIgaW8uY29zdC5tb2RlbCBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjNTBkNDAzNDM4YjRiNGUxODhiMTQ4YTBhYjVjYzRhZjViNjdhMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNDoxMDo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuaW5kZXggOGQyNjAzNzUxYzUxYS4uYTY5MTBhZDdjMmQwMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5AQCAtMjEyNCw2ICsyMTI0LDE3IEBAIElPIEludGVyZmFjZSBGaWxlc1xuIFx0cGFyYW1ldGVycyBhcmUgd3JpdHRlbiB0bywgXCJjdHJsXCIgYmVjb21lIFwidXNlclwiIGFuZCB0aGVcbiBcdGF1dG9tYXRpYyBjaGFuZ2VzIGFyZSBkaXNhYmxlZC5cbiBcbitcdFdoZW4gQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiBpcyBlbmFibGVkLCBcIm1vZGVsXCIgYWxzbyBhY2NlcHRzXG4rXHR0aGUgbmFtZSBvZiBhIHJlZ2lzdGVyZWQgaW9jb3N0X21vZGVsX29wcyBCUEYgc3RydWN0X29wcyBtb2RlbDpcbitcdFwibW9kZWw9XHUwMDNjbmFtZVx1MDAzZVwiIGJpbmRzIHRoZSBtb2RlbCB0byB0aGUgZGV2aWNlIGFuZCB0aGUgbW9kZWwgZnVsbHlcbitcdHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBwcmljaW5nLCBmb3IgZXZlcnkgb3BlcmF0aW9uIGluY2x1ZGluZ1xuK1x0Zmx1c2hlczsgXCJtb2RlbD1saW5lYXJcIiAob3IgXCJjdHJsPWF1dG8vdXNlclwiKSByZXN0b3JlcyB0aGUgYnVpbHRpblxuK1x0bW9kZWwuICBXcml0aW5nIGFuIHVua25vd24gbmFtZSBmYWlscyB3aXRoIEVOT0VOVC4gIFVucmVnaXN0ZXJpbmdcbitcdGEgbW9kZWwgcmVtb3ZlcyBpdHMgbmFtZTsgZGV2aWNlcyBhbHJlYWR5IGJvdW5kIGtlZXAgdXNpbmcgaXRcbitcdHVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGZvbGxvd2luZyB0aGUgbGlmZXRpbWVcbitcdG1vZGVsIG9mIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuICBTZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmhcbitcdGZvciB0aGUgbW9kZWwgaW50ZXJmYWNlLlxuK1xuIFx0V2hlbiBcIm1vZGVsXCIgaXMgXCJsaW5lYXJcIiwgdGhlIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzIGFyZVxuIFx0ZGVmaW5lZC5cbiBcbmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZ1xuaW5kZXggNzBlNGE2NmQ5NDFmZi4uOTFlODA4Zjg2ZDI4ZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL0tjb25maWdcbisrKyBiL2Jsb2NrL0tjb25maWdcbkBAIC0yMzEsNCArMjMxLDEzIEBAIGNvbmZpZyBCTEtfRVJST1JfSU5KRUNUSU9OXG4gXG4gc291cmNlIFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkXCJcbiBcbitjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHRib29sIFwiRW5hYmxlIEJQRiBwbHVnZ2FibGUgY29zdCBtb2RlbCBzdXBwb3J0IGZvciB0aGUgY29zdCBJTyBjb250cm9sbGVyXCJcbitcdGRlcGVuZHMgb24gQkxLX0NHUk9VUF9JT0NPU1QgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuK1x0aGVscFxuK1x0IEVuYWJsaW5nIHRoaXMgb3B0aW9uIHJlZ2lzdGVycyB0aGUgXCJpb2Nvc3RfbW9kZWxfb3BzXCIgQlBGXG4rXHQgc3RydWN0X29wcyB0eXBlLCB3aGljaCBhbGxvd3MgYSBCUEYgcHJvZ3JhbSB0byBmdWxseSByZXBsYWNlXG4rXHQgdGhlIGJ1aWx0aW4gbGluZWFyIGNvc3QgbW9kZWwgb24gYSBkZXZpY2UgaXQgaXMgYm91bmQgdG9cbitcdCB0aHJvdWdoIGlvLmNvc3QubW9kZWwuXG4rXG4gZW5kaWYgIyBCTE9DS1xuZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGVcbmluZGV4IGU3YmQzMjBlM2Q2OTcuLmVlNWNlYmVlYTAwNmYgMTAwNjQ0XG4tLS0gYS9ibG9jay9NYWtlZmlsZVxuKysrIGIvYmxvY2svTWFrZWZpbGVcbkBAIC0zOSwzICszOSw0IEBAIG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT04pXHQrPSBibGstY3J5cHRvLm8gYmxrLWNyeXB0by1wcm9maWxlLm8gXFxcbiBcdFx0XHRcdFx0ICAgYmxrLWNyeXB0by1zeXNmcy5vXG4gb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcdCs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xuIG9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcdCs9IGhvbGRlci5vXG4rb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRilcdCs9IGJsay1pb2Nvc3QtYnBmLm9cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjg3Mjg3MTA0NTM1MWMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTMyLDYgKzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFwiYmxrLmhcIlxuICNpbmNsdWRlIFwiYmxrLWNncm91cC5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGstaW9jb3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcImJsay1pb3ByaW8uaFwiXG4gI2luY2x1ZGUgXCJibGstdGhyb3R0bGUuaFwiXG4gXG5AQCAtMTM0MSw2ICsxMzQyLDcgQEAgdm9pZCBibGtjZ191bnBpbl9vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2NnX2NzcylcbiAgKi9cbiBzdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIHtcbitcdGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShjc3NfdG9fYmxrY2coY3NzKSk7XG4gXHQvKiB0aGlzIHByZXZlbnRzIGFueW9uZSBmcm9tIGF0dGFjaGluZyBvciBtaWdyYXRpbmcgdG8gdGhpcyBibGtjZyAqL1xuIFx0d2JfYmxrY2dfb2ZmbGluZShjc3MpO1xuIFxuQEAgLTE0NDUsNiArMTQ0Nyw3IEBAIGJsa2NnX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiBcbiBzdGF0aWMgaW50IGJsa2NnX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiB7XG4rXHRpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShjc3NfdG9fYmxrY2coY3NzKSk7XG4gXHRzdHJ1Y3QgYmxrY2cgKnBhcmVudCA9IGJsa2NnX3BhcmVudChjc3NfdG9fYmxrY2coY3NzKSk7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgYi9ibG9jay9ibGstaW9jb3N0LWJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWVjNmRmMjc5NTk5MFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYmxvY2svYmxrLWlvY29zdC1icGYuY1xuQEAgLTAsMCArMSwyNTAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogYmxrLWlvY29zdDogQlBGIHN0cnVjdF9vcHMgcGx1bWJpbmcgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscy5cbisgKlxuKyAqIFJlZ2lzdGVycyB0aGUgXCJpb2Nvc3RfbW9kZWxfb3BzXCIgc3RydWN0X29wcyB0eXBlIGFuZCBtYWludGFpbnMgdGhlXG4rICogbmFtZSByZWdpc3RyeSBvZiByZWdpc3RlcmVkIG1vZGVscy4gIEEgcmVnaXN0ZXJlZCBtb2RlbCBpcyBib3VuZCB0b1xuKyAqIGEgZGV2aWNlIHRocm91Z2ggaW8uY29zdC5tb2RlbDsgc2VlIGluY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oLlxuKyAqL1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXHUwMDNlXG4rXG4rc3RhdGljIERFRklORV9NVVRFWChpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitzdGF0aWMgTElTVF9IRUFEKGlvY29zdF9icGZfbW9kZWxzKTtcbitcbisvKlxuKyAqIFRoZSByZWdpc3RyeSBob2xkcyBhIGJwZl9zdHJ1Y3Rfb3BzX2dldCgpIHJlZmVyZW5jZSBvYnRhaW5lZCBpbiAucmVnO1xuKyAqIC51bnJlZyBkcm9wcyBpdCwgc28gdGhlIGtkYXRhIG9mIGFuIHVucmVnaXN0ZXJlZCBtb2RlbCBzdGF5cyBhbGl2ZVxuKyAqIHdoaWxlIGFueSBkZXZpY2UgaXMgc3RpbGwgYm91bmQgdG8gaXQuXG4rICovXG4rc3RydWN0IGlvY29zdF9icGZfbW9kZWwge1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbitcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHM7XG4rfTtcbitcbisvKlxuKyAqIExvb2sgdXAgYSByZWdpc3RlcmVkIG1vZGVsIGJ5IG5hbWUgYW5kIGFjcXVpcmUgYSByZWZlcmVuY2Ugb24gaXQuXG4rICogVGhlIHJlZ2lzdHJ5IGxvY2sgaXMgaGVsZCBhY3Jvc3MgbG9va3VwIGFuZCBicGZfc3RydWN0X29wc19nZXQoKSBzb1xuKyAqIHRoZSBtb2RlbCBjYW5ub3QgYmUgdW5yZWdpc3RlcmVkIGluIGJldHdlZW4uXG4rICovXG4raW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0IGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcClcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcdGludCByZXQgPSAtRU5PRU5UO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKCFzdHJjbXAobS1cdTAwM2VvcHMtXHUwMDNlbmFtZSwgbmFtZSkpIHtcbitcdFx0XHRpZiAoYnBmX3N0cnVjdF9vcHNfZ2V0KG0tXHUwMDNlb3BzKSkge1xuK1x0XHRcdFx0Km9wc3AgPSBtLVx1MDAzZW9wcztcbitcdFx0XHRcdHJldCA9IDA7XG4rXHRcdFx0fVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbit2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpXG4re1xuK1x0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqXG4raW9jb3N0X2JwZl9tb2RlbF9sb29rdXAoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKG0tXHUwMDNlb3BzID09IG9wcylcbitcdFx0XHRyZXR1cm4gbTtcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpXG4re1xuK1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XG4rXHRcdGlmIChtLVx1MDAzZW9wcy1cdTAwM2VibGtjZ19vbmxpbmUpXG4rXHRcdFx0bS1cdTAwM2VvcHMtXHUwMDNlYmxrY2dfb25saW5lKGJsa2NnKTtcbitcdH1cbit9XG4rXG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoc3RydWN0IGJsa2NnICpibGtjZylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKG0tXHUwMDNlb3BzLVx1MDAzZWJsa2NnX29mZmxpbmUpXG4rXHRcdFx0bS1cdTAwM2VvcHMtXHUwMDNlYmxrY2dfb2ZmbGluZShibGtjZyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9tb2RlbF9pbml0KHN0cnVjdCBidGYgKmJ0Zilcbit7XG4rXHRzMzIgdHlwZV9pZDtcbitcbitcdHR5cGVfaWQgPSBidGZfZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBcImlvY29zdF9tb2RlbF9vcHNcIiwgQlRGX0tJTkRfU1RSVUNUKTtcbitcdGlmICh0eXBlX2lkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgYm9vbCBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcbitcdFx0XHRcdCAgICAgICBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYWNjZXNzX2F1eCAqaW5mbylcbit7XG4rXHRyZXR1cm4gYnBmX3RyYWNpbmdfYnRmX2N0eF9hY2Nlc3Mob2ZmLCBzaXplLCB0eXBlLCBwcm9nLCBpbmZvKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG4rYnBmX2lvY29zdF9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXG4rXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0c3dpdGNoIChmdW5jX2lkKSB7XG4rI2lmZGVmIENPTkZJR19DR1JPVVBTXG4rXHRjYXNlIEJQRl9GVU5DX2NncnBfc3RvcmFnZV9nZXQ6XG4rXHRcdHJldHVybiBcdTAwMjZicGZfY2dycF9zdG9yYWdlX2dldF9wcm90bztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBicGZfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0LyogY2FsY19jb3N0KCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkICovXG4rXHRpZiAocHJvZy1cdTAwM2VzbGVlcGFibGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4rXHRcdFx0XHQgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSlcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqdW9wcyA9IHVkYXRhO1xuK1x0dTMyIG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODtcbitcbitcdHN3aXRjaCAobW9mZikge1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcywgbmFtZSk6XG4rXHRcdGlmIChicGZfb2JqX25hbWVfY3B5KG9wcy1cdTAwM2VuYW1lLCB1b3BzLVx1MDAzZW5hbWUsXG4rXHRcdFx0XHQgICAgIHNpemVvZihvcHMtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBicGZfaW9jb3N0X3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxuK3tcbitcdHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTtcbitcbitcdHJldHVybiBvcHMtXHUwMDNlY2FsY19jb3N0ID8gMCA6IC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKCFicGZfc3RydWN0X29wc19nZXQob3BzKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRtID0ga3phbGxvYyhzaXplb2YoKm0pLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbSkge1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1x0e1xuK1x0XHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqb3RoZXI7XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob3RoZXIsIFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAob3RoZXItXHUwMDNlb3BzLVx1MDAzZW5hbWUsIG9wcy1cdTAwM2VuYW1lKSkge1xuK1x0XHRcdFx0cmV0ID0gLUVFWElTVDtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0aWYgKCFyZXQpIHtcbitcdFx0bS1cdTAwM2VvcHMgPSBvcHM7XG4rXHRcdGxpc3RfYWRkKFx1MDAyNm0tXHUwMDNlbGlzdCwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMpO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1xuK1x0aWYgKHJldCkge1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0a2ZyZWUobSk7XG4rXHR9XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBicGZfaW9jb3N0X3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4re1xuK1x0c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhO1xuK1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1x0bSA9IGlvY29zdF9icGZfbW9kZWxfbG9va3VwKG9wcyk7XG4rXHRpZiAobSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZtLVx1MDAzZWxpc3QpO1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0a2ZyZWUobSk7XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfaW9jb3N0X3ZlcmlmaWVyX29wcyA9IHtcbitcdC5nZXRfZnVuY19wcm90byA9IGJwZl9pb2Nvc3RfZ2V0X2Z1bmNfcHJvdG8sXG4rXHQuaXNfdmFsaWRfYWNjZXNzID0gYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MsXG4rfTtcbitcbitzdGF0aWMgdTY0IGJwZl9pb2Nvc3RfY2FsY19jb3N0X3N0dWIodTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvcixcbitcdFx0XHRcdCAgICAgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IGZsYWdzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgX19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMgPSB7XG4rXHQuY2FsY19jb3N0ID0gYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1Yixcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2lvY29zdF9tb2RlbF9vcHMgPSB7XG4rXHQudmVyaWZpZXJfb3BzID0gXHUwMDI2YnBmX2lvY29zdF92ZXJpZmllcl9vcHMsXG4rXHQuaW5pdCA9IGJwZl9pb2Nvc3RfbW9kZWxfaW5pdCxcbitcdC5jaGVja19tZW1iZXIgPSBicGZfaW9jb3N0X2NoZWNrX21lbWJlcixcbitcdC5pbml0X21lbWJlciA9IGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXIsXG4rXHQudmFsaWRhdGUgPSBicGZfaW9jb3N0X3ZhbGlkYXRlLFxuK1x0LnJlZyA9IGJwZl9pb2Nvc3RfcmVnLFxuK1x0LnVucmVnID0gYnBmX2lvY29zdF91bnJlZyxcbitcdC5uYW1lID0gXCJpb2Nvc3RfbW9kZWxfb3BzXCIsXG4rXHQuY2ZpX3N0dWJzID0gXHUwMDI2X19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMsXG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9pb2Nvc3RfaW5pdCh2b2lkKVxuK3tcbitcdHJldHVybiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcdTAwMjZicGZfaW9jb3N0X21vZGVsX29wcywgaW9jb3N0X21vZGVsX29wcyk7XG4rfVxuK2xhdGVfaW5pdGNhbGwoYnBmX2lvY29zdF9pbml0KTtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jb3N0LmMgYi9ibG9jay9ibGstaW9jb3N0LmNcbmluZGV4IDI3NDViZmZjZDVlZWYuLmJjY2RiZDI0OTZkODMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstaW9jb3N0LmNcbisrKyBiL2Jsb2NrL2Jsay1pb2Nvc3QuY1xuQEAgLTE3Nyw2ICsxNzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhcnNlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbG9jYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9sb2NhbDY0LmhcdTAwM2VcbkBAIC00NDUsNiArNDQ2LDExIEBAIHN0cnVjdCBpb2Mge1xuIFx0aW50XHRcdFx0XHRhdXRvcF9pZHg7XG4gXHRib29sXHRcdFx0XHR1c2VyX3Fvc19wYXJhbXM6MTtcbiBcdGJvb2xcdFx0XHRcdHVzZXJfY29zdF9tb2RlbDoxO1xuK1xuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHQvKiBib3VuZCBCUEYgY29zdCBtb2RlbCwgTlVMTCA9IGJ1aWx0aW4gbGluZWFyIG1vZGVsICovXG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wc1x0X19yY3UgKm1vZGVsO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IGlvY2dfcGNwdV9zdGF0IHtcbkBAIC0yMjM4LDYgKzIyNDQsNyBAQCBzdGF0aWMgdm9pZCBpb2NfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuIFx0c3RydWN0IGlvY19ub3cgbm93O1xuIFx0TElTVF9IRUFEKHN1cnBsdXNlcyk7XG4gXHRpbnQgbnJfZGVidG9ycywgbnJfc2hvcnRhZ2VzID0gMCwgbnJfbGFnZ2luZyA9IDA7XG4rXHRpbnQgbnJfYWN0aXZlID0gMDtcbiBcdHU2NCB1c2FnZV91c19zdW0gPSAwO1xuIFx0dTMyIHBwbV9ydGhyO1xuIFx0dTMyIHBwbV93dGhyO1xuQEAgLTIyNzQsNiArMjI4MSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRcdHU2NCB2ZG9uZSwgdnRpbWUsIHVzYWdlX3VzO1xuIFx0XHR1MzIgaHdfYWN0aXZlLCBod19pbnVzZTtcbiBcbitcdFx0bnJfYWN0aXZlKys7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIENvbGxlY3QgdW51c2VkIGFuZCB3aW5kIHZ0aW1lIGNsb3NlciB0byB2bm93IHRvIHByZXZlbnRcbiBcdFx0ICogaW9jZ3MgZnJvbSBhY2N1bXVsYXRpbmcgYSBsYXJnZSBhbW91bnQgb2YgYnVkZ2V0LlxuQEAgLTI0NjAsNiArMjQ2OSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRcdGlvY19yZWZyZXNoX3ZyYXRlKGlvYywgXHUwMDI2bm93KTtcbiBcdH1cbiBcbitcdHRyYWNlX2lvY29zdF9pb2NfdGljayhpb2MsIG5yX2FjdGl2ZSwgdXNhZ2VfdXNfc3VtKTtcbitcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gfVxuIFxuQEAgLTI1NzEsMTAgKzI1ODIsMjggQEAgc3RhdGljIHZvaWQgY2FsY192dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW9jX2dxICppb2NnLFxuIFxuIHN0YXRpYyB1NjQgY2FsY192dGltZV9jb3N0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZywgYm9vbCBpc19tZXJnZSlcbiB7XG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICptb2RlbDtcbiBcdHU2NCBjb3N0O1xuIFxuLVx0Y2FsY192dGltZV9jb3N0X2J1aWx0aW4oYmlvLCBpb2NnLCBpc19tZXJnZSwgXHUwMDI2Y29zdCk7XG4tXHRyZXR1cm4gY29zdDtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG1vZGVsID0gcmN1X2RlcmVmZXJlbmNlKGlvY2ctXHUwMDNlaW9jLVx1MDAzZW1vZGVsKTtcbitcdGlmIChtb2RlbCkge1xuK1x0XHRjb3N0ID0gbW9kZWwtXHUwMDNlY2FsY19jb3N0KGJpby1cdTAwM2ViaV9vcGYsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsXG4rXHRcdFx0XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvcixcbitcdFx0XHRcdFx0aW9jZ190b19ibGtnKGlvY2cpLVx1MDAzZWJsa2NnLFxuK1x0XHRcdFx0XHRpc19tZXJnZSA/IElPQ09TVF9DT1NUX0ZfTUVSR0UgOiAwKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiBtaW4oY29zdCwgVlRJTUVfUEVSX1NFQyk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbisjZW5kaWZcbitcdHtcbitcdFx0dTY0IGNvc3Q7XG4rXG4rXHRcdGNhbGNfdnRpbWVfY29zdF9idWlsdGluKGJpbywgaW9jZywgaXNfbWVyZ2UsIFx1MDAyNmNvc3QpO1xuK1x0XHRyZXR1cm4gY29zdDtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYyxcbkBAIC0yNTk2LDEwICsyNjI1LDI4IEBAIHN0YXRpYyB2b2lkIGNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW9jICppb2MsXG4gXG4gc3RhdGljIHU2NCBjYWxjX3NpemVfdnRpbWVfY29zdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYylcbiB7XG4tXHR1NjQgY29zdDtcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxuK1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xuIFxuLVx0Y2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihycSwgaW9jLCBcdTAwMjZjb3N0KTtcbi1cdHJldHVybiBjb3N0O1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bW9kZWwgPSByY3VfZGVyZWZlcmVuY2UoaW9jLVx1MDAzZW1vZGVsKTtcbitcdGlmIChtb2RlbCBcdTAwMjZcdTAwMjYgcnEtXHUwMDNlYmlvIFx1MDAyNlx1MDAyNiBycS1cdTAwM2ViaW8tXHUwMDNlYmlfYmxrZykge1xuK1x0XHR1NjQgY29zdDtcbitcbitcdFx0Y29zdCA9IG1vZGVsLVx1MDAzZWNhbGNfY29zdChycS1cdTAwM2VjbWRfZmxhZ3MsIGJsa19ycV9ieXRlcyhycSksXG4rXHRcdFx0XHRcdGJsa19ycV9wb3MocnEpLFxuK1x0XHRcdFx0XHRycS1cdTAwM2ViaW8tXHUwMDNlYmlfYmxrZy1cdTAwM2VibGtjZywgMCk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rI2VuZGlmXG4rXHR7XG4rXHRcdHU2NCBjb3N0O1xuK1xuK1x0XHRjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHJxLCBpb2MsIFx1MDAyNmNvc3QpO1xuK1x0XHRyZXR1cm4gY29zdDtcbitcdH1cbiB9XG4gXG4gZW51bSBvdmVyX2J1ZGdldF9hY3Rpb24ge1xuQEAgLTI5MDAsNiArMjk0NywxOSBAQCBzdGF0aWMgdm9pZCBpb2NfcnFvc19leGl0KHN0cnVjdCBycV9xb3MgKnJxb3MpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmlvYy1cdTAwM2V0aW1lcik7XG4gXHRmcmVlX3BlcmNwdShpb2MtXHUwMDNlcGNwdV9zdGF0KTtcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxuK1x0e1xuK1x0XHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7XG4rXG4rXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuK1x0XHRtb2RlbCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLVx1MDAzZW1vZGVsLFxuK1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGlvYy1cdTAwM2Vtb2RlbCwgTlVMTCk7XG4rXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4rXHRcdGlmIChtb2RlbClcbitcdFx0XHRpb2Nvc3RfYnBmX21vZGVsX3B1dChtb2RlbCk7XG4rXHR9XG4rI2VuZGlmXG4gXHRrZnJlZShpb2MpO1xuIH1cbiBcbkBAIC0zNDM4LDEyICszNDk4LDMwIEBAIHN0YXRpYyB1NjQgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsKHN0cnVjdCBzZXFfZmlsZSAqc2YsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcdHtcbitcdFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsID1cbitcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlvYy1cdTAwM2Vtb2RlbCxcbitcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKSk7XG4rXG4rXHRcdHNlcV9wcmludGYoc2YsIFwiJXMgY3RybD0lcyBtb2RlbD0lcyBcIlxuK1x0XHRcdCAgIFwicmJwcz0lbGx1IHJzZXFpb3BzPSVsbHUgcnJhbmRpb3BzPSVsbHUgXCJcbitcdFx0XHQgICBcIndicHM9JWxsdSB3c2VxaW9wcz0lbGx1IHdyYW5kaW9wcz0lbGx1XFxuXCIsXG4rXHRcdFx0ICAgZG5hbWUsIG1vZGVsID8gXCJicGZcIiA6XG4rXHRcdFx0XHQgICBpb2MtXHUwMDNldXNlcl9jb3N0X21vZGVsID8gXCJ1c2VyXCIgOiBcImF1dG9cIixcbitcdFx0XHQgICBtb2RlbCA/IG1vZGVsLVx1MDAzZW5hbWUgOiBcImxpbmVhclwiLFxuK1x0XHRcdCAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSxcbitcdFx0XHQgICB1W0lfTENPRUZfUlJBTkRJT1BTXSwgdVtJX0xDT0VGX1dCUFNdLFxuK1x0XHRcdCAgIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTtcbitcdH1cbisjZWxzZVxuIFx0c2VxX3ByaW50ZihzZiwgXCIlcyBjdHJsPSVzIG1vZGVsPWxpbmVhciBcIlxuIFx0XHQgICBcInJicHM9JWxsdSByc2VxaW9wcz0lbGx1IHJyYW5kaW9wcz0lbGx1IFwiXG4gXHRcdCAgIFwid2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcXG5cIixcbiBcdFx0ICAgZG5hbWUsIGlvYy1cdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPyBcInVzZXJcIiA6IFwiYXV0b1wiLFxuIFx0XHQgICB1W0lfTENPRUZfUkJQU10sIHVbSV9MQ09FRl9SU0VRSU9QU10sIHVbSV9MQ09FRl9SUkFORElPUFNdLFxuIFx0XHQgICB1W0lfTENPRUZfV0JQU10sIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTtcbisjZW5kaWZcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzQ1Nyw2ICszNTM1LDM3IEBAIHN0YXRpYyBpbnQgaW9jX2Nvc3RfbW9kZWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogQmluZCBAbmFtZSAoZW1wdHkgPSBidWlsdGluIGxpbmVhciBtb2RlbCkgYXMgdGhlIGFjdGl2ZSBjb3N0IG1vZGVsIG9mXG4rICogQGlvYy4gIFRoZSByZWdpc3RyeSBsb29rdXAgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGhhcHBlbiBvdXRzaWRlXG4rICogaW9jLVx1MDAzZWxvY2s7IHRoZSBwb2ludGVyIHN3YXAgaGFwcGVucyB1bmRlciBpdC5cbisgKi9cbitzdGF0aWMgaW50IGlvY19icGZfbW9kZWxfYmluZChzdHJ1Y3QgaW9jICppb2MsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbmV3ID0gTlVMTCwgKm9sZDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAobmFtZVswXSkge1xuK1x0XHRyZXQgPSBpb2Nvc3RfYnBmX21vZGVsX2dldChuYW1lLCBcdTAwMjZuZXcpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKTtcbitcdG9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLVx1MDAzZW1vZGVsLFxuK1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihpb2MtXHUwMDNlbW9kZWwsIG5ldyk7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKG9sZClcbitcdFx0aW9jb3N0X2JwZl9tb2RlbF9wdXQob2xkKTtcbitcdHJldHVybiAwO1xuKyNlbHNlXG4rXHRyZXR1cm4gbmFtZVswXSA/IC1FTk9FTlQgOiAwO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBjb3N0X2N0cmxfdG9rZW5zID0ge1xuIFx0eyBDT1NUX0NUUkwsXHRcdFwiY3RybD0lc1wiXHR9LFxuIFx0eyBDT1NUX01PREVMLFx0XHRcIm1vZGVsPSVzXCJcdH0sXG5AQCAtMzQ4Miw2ICszNTkxLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiBcdHN0cnVjdCBpb2MgKmlvYztcbiBcdHU2NCB1W05SX0lfTENPRUZTXTtcbiBcdGJvb2wgdXNlcjtcbitcdGNoYXIgYnBmX21vZGVsW0lPQ09TVF9NT0RFTF9OQU1FX0xFTl07XG4gXHRjaGFyICpib2R5LCAqcDtcbiBcdGludCByZXQ7XG4gXG5AQCAtMzUxMiw2ICszNjIyLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuIFx0bWVtY3B5KHUsIGlvYy1cdTAwM2VwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7XG4gXHR1c2VyID0gaW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbDtcbitcdGJwZl9tb2RlbFswXSA9ICdcXDAnO1xuIFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcbkBAIC0zNTMzLDExICszNjQ0LDE2IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXG4gXHRcdFx0XHR1c2VyID0gdHJ1ZTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0XHRicGZfbW9kZWxbMF0gPSAnXFwwJztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0Y2FzZSBDT1NUX01PREVMOlxuIFx0XHRcdG1hdGNoX3N0cmxjcHkoYnVmLCBcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnVmKSk7XG4tXHRcdFx0aWYgKHN0cmNtcChidWYsIFwibGluZWFyXCIpKVxuLVx0XHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmLCBcImxpbmVhclwiKSkge1xuK1x0XHRcdFx0LyogYmFjayB0byB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgKi9cbitcdFx0XHRcdGJwZl9tb2RlbFswXSA9ICdcXDAnO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuK1x0XHRcdG1hdGNoX3N0cmxjcHkoYnBmX21vZGVsLCBcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnBmX21vZGVsKSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0zNTYzLDYgKzM2NzksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuIFxuK1x0LypcbitcdCAqIEJpbmQgdGhlIEJQRiBtb2RlbCBvdXRzaWRlIGlvYy1cdTAwM2Vsb2NrOiB0aGUgcmVnaXN0cnkgbG9va3VwXG4rXHQgKiB0YWtlcyB0aGUgcmVnaXN0cmF0aW9uIG11dGV4IGFuZCB0aGUgb2xkIG1vZGVsJ3MgcmVmZXJlbmNlXG4rXHQgKiBpcyBkcm9wcGVkIGFmdGVyIHRoZSBzd2FwLlxuK1x0ICovXG4rXHRpZiAoIXJldClcbitcdFx0cmV0ID0gaW9jX2JwZl9tb2RlbF9iaW5kKGlvYywgYnBmX21vZGVsKTtcbitcbiBcdGJsa19tcV91bnF1aWVzY2VfcXVldWUocSk7XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oIGIvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zYTA4NTVlZmI2MTA3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaFxuQEAgLTAsMCArMSw4MiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfTElOVVhfQkxLX0lPQ09TVF9IXG4rI2RlZmluZSBfTElOVVhfQkxLX0lPQ09TVF9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa190eXBlcy5oXHUwMDNlXG4rXG4rI2RlZmluZSBJT0NPU1RfTU9ERUxfTkFNRV9MRU5cdDE2XG4rXG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcbitzdHJ1Y3QgYmxrY2c7XG4rXG4rLypcbisgKiBQbHVnZ2FibGUgY29zdCBtb2RlbCBpbnRlcmZhY2UgZm9yIGJsay1pb2Nvc3QuXG4rICpcbisgKiBBIEJQRiBzdHJ1Y3Rfb3BzIGltcGxlbWVudGF0aW9uIHJlZ2lzdGVyZWQgYWdhaW5zdCBcImlvY29zdF9tb2RlbF9vcHNcIlxuKyAqIGZ1bGx5IHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBtb2RlbCBvbiB0aGUgZGV2aWNlcyBpdCBpcyBib3VuZCB0b1xuKyAqIHRocm91Z2ggaW8uY29zdC5tb2RlbC4gIFRoZSBtb2RlbCBvd25zIHByaWNpbmcgZm9yIGV2ZXJ5IElPIG9uIGEgYm91bmRcbisgKiBkZXZpY2U6IGl0IHByaWNlcyBhbGwgb3BlcmF0aW9ucywgaW5jbHVkaW5nIGZsdXNoZXMsIGFuZCBib3RoIHRoZSBiaW9cbisgKiBjaGFyZ2luZyBwYXRoIGFuZCB0aGUgcmVxdWVzdC1sZXZlbCBzaXppbmcgcGF0aCBjb25zdWx0IGl0LlxuKyAqXG4rICogY2FsY19jb3N0KCkgaXMgY2FsbGVkIGZyb20gdGhlIElPIHN1Ym1pc3Npb24gcGF0aCB3aXRoIFJDVSByZWFkIGxvY2tcbisgKiBoZWxkIGFuZCBtdXN0IG5vdCBzbGVlcC4gIEl0IHJldHVybnMgdGhlIGNvc3Qgb2YgdGhlIElPIGluIHZ0aW1lXG4rICogdW5pdHMsIHdoZXJlIDEgc2Vjb25kIG9mIGRldmljZSB0aW1lIGVxdWFscyBWVElNRV9QRVJfU0VDICgyXjM3LFxuKyAqIGF2YWlsYWJsZSB0byBCUEYgcHJvZ3JhbXMgdGhyb3VnaCB2bWxpbnV4LmgpLiAgVGhlIHJldHVybmVkIHZhbHVlIGlzXG4rICogY2xhbXBlZCB0byAxIHNlY29uZCBvZiBkZXZpY2UgdGltZSBwZXIgSU8uXG4rICpcbisgKiBUaGUgbW9kZWwgaXMgcGFzc2VkIHRoZSBibGtjZyBvZiB0aGUgaXNzdWluZyBjZ3JvdXAgc28gaXQgY2FuIGtlZXBcbisgKiBwZXItY2dyb3VwIHN0YXRlLiAgYmxrY2dfb25saW5lKCkvYmxrY2dfb2ZmbGluZSgpIGFyZSBvcHRpb25hbFxuKyAqIGNhbGxiYWNrcyBtaXJyb3JpbmcgdGhlIGJsa2NnIGNzcyBsaWZlY3ljbGU6IHN0YXRlIGNyZWF0ZWQgb24gb25saW5lXG4rICogKG9yIGxhemlseSBvbiBmaXJzdCB1c2UpIG11c3QgYmUgcmVsZWFzZWQgb24gb2ZmbGluZS5cbisgKlxuKyAqIFRoZSByZWdpc3RyYXRpb24gYW5kIGJpbmRpbmcgbW9kZWwgZm9sbG93cyB0aGUgVENQIGNvbmdlc3Rpb25cbisgKiBjb250cm9sIGZyYW1ld29yazogcmVnaXN0ZXJpbmcgYSBzdHJ1Y3Rfb3BzIG1ha2VzIHRoZSBtb2RlbCBhdmFpbGFibGVcbisgKiBieSBpdHMgbmFtZSwgd2hpbGUgaW8uY29zdC5tb2RlbCBiaW5kcyBvbmUgcmVnaXN0ZXJlZCBtb2RlbCB0byBhXG4rICogZGV2aWNlLiAgVW5yZWdpc3RlcmluZyByZW1vdmVzIHRoZSBuYW1lIGZyb20gdGhlIHJlZ2lzdHJ5OyBkZXZpY2VzXG4rICogYWxyZWFkeSBib3VuZCBrZWVwIHVzaW5nIGl0IHVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW5cbisgKiBtb2RlbC5cbisgKi9cbitcbisjZGVmaW5lIElPQ09TVF9NT0RFTF9OQU1FX0xFTlx0MTZcbitcbisvKlxuKyAqIGlvY29zdC1zcGVjaWZpYyBjYWxsIG1ldGFkYXRhIGZvciBjYWxjX2Nvc3QoKSdzIG1vZGVsX2ZsYWdzXG4rICogYXJndW1lbnQ7IGV2ZXJ5dGhpbmcgZWxzZSwgaW5jbHVkaW5nIFJFUV9QUkVGTFVTSC9SRVFfRlVBLCBpc1xuKyAqIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgb3BmIGFyZ3VtZW50XG4rICovXG4rI2RlZmluZSBJT0NPU1RfQ09TVF9GX01FUkdFXHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcdC8qIGNhbGxlZCBmcm9tIG1lcmdlIHBhdGggKi9cbitcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyB7XG4rXHR1NjQgKCpjYWxjX2Nvc3QpKHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHNlY3Rvcl90IHNlY3RvcixcbitcdFx0XHQgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKTtcbitcdHZvaWQgKCpibGtjZ19vbmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuK1x0dm9pZCAoKmJsa2NnX29mZmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuK1xuK1x0LyogbW9kZWwgbmFtZSwgdXNlZCB0byBzZWxlY3QgdGhlIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCAqL1xuK1x0Y2hhciBuYW1lWzE2XTtcbit9O1xuK1xuK2ludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdCBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApO1xuK3ZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyk7XG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcbitcbisjZWxzZVx0LyogQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiAqL1xuK1xuK3N0cnVjdCBibGtjZztcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcztcbitcbitzdGF0aWMgaW5saW5lIGludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH1cbitcbisjZW5kaWZcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cbisjZW5kaWZcdC8qIF9MSU5VWF9CTEtfSU9DT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXG5pbmRleCBlNzcyYjFiYzYwZDYwLi4yYjlmZjM0OGE0ZjUxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXG5AQCAtMTc4LDYgKzE3OCw0NiBAQCBUUkFDRV9FVkVOVChpb2Nvc3RfaW9jX3ZyYXRlX2FkaixcbiBcdClcbiApO1xuIFxuKy8qXG4rICogUGVyaW9kaWMgcGVyLWRldmljZSBzdW1tYXJ5LCBlbWl0dGVkIG9uY2UgcGVyIHBlcmlvZCBmcm9tIHRoZSB0YWlsIG9mXG4rICogaW9jX3RpbWVyX2ZuKCkuICBVbmxpa2UgdGhlIHN0YXRlLWNoYW5nZSBldmVudHMgYWJvdmUsIHRoaXMgZmlyZXMgZXZlcnlcbisgKiBwZXJpb2QgdGhlIGNvbnRyb2xsZXIgaXMgcnVubmluZywgaW5jbHVkaW5nIHN0ZWFkeSBzdGF0ZXMsIGFuZCBjYXJyaWVzXG4rICogdGhlIG92ZXJhbGwgY29udHJvbGxlciBzdGF0ZSBzbyBiYXNpYyBtb25pdG9yaW5nIGRvZXNuJ3QgcmVxdWlyZSBkcmduLlxuKyAqL1xuK1RSQUNFX0VWRU5UKGlvY29zdF9pb2NfdGljayxcbitcbitcdFRQX1BST1RPKHN0cnVjdCBpb2MgKmlvYywgaW50IG5yX2FjdGl2ZSwgdTY0IHVzYWdlX3VzX3N1bSksXG4rXG4rXHRUUF9BUkdTKGlvYywgbnJfYWN0aXZlLCB1c2FnZV91c19zdW0pLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeSAoXG4rXHRcdF9fc3RyaW5nKGRldm5hbWUsIGlvY19uYW1lKGlvYykpXG4rXHRcdF9fZmllbGQodTMyLCBwZXJpb2RfdXMpXG4rXHRcdF9fZmllbGQodTY0LCB2cmF0ZSlcbitcdFx0X19maWVsZChpbnQsIGJ1c3lfbGV2ZWwpXG4rXHRcdF9fZmllbGQoaW50LCBucl9hY3RpdmUpXG4rXHRcdF9fZmllbGQodTMyLCB1c2FnZV9wY3QpXG4rXHRcdF9fZmllbGQoaW50LCBydW5uaW5nKVxuK1x0KSxcbitcbitcdFRQX2Zhc3RfYXNzaWduKFxuK1x0XHRfX2Fzc2lnbl9zdHIoZGV2bmFtZSk7XG4rXHRcdF9fZW50cnktXHUwMDNlcGVyaW9kX3VzID0gaW9jLVx1MDAzZXBlcmlvZF91cztcbitcdFx0X19lbnRyeS1cdTAwM2V2cmF0ZSA9IGlvYy1cdTAwM2V2dGltZV9iYXNlX3JhdGU7XG4rXHRcdF9fZW50cnktXHUwMDNlYnVzeV9sZXZlbCA9IGlvYy1cdTAwM2VidXN5X2xldmVsO1xuK1x0XHRfX2VudHJ5LVx1MDAzZW5yX2FjdGl2ZSA9IG5yX2FjdGl2ZTtcbitcdFx0X19lbnRyeS1cdTAwM2V1c2FnZV9wY3QgPSBpb2MtXHUwMDNlcGVyaW9kX3VzID9cbitcdFx0XHRkaXZfdTY0KHVzYWdlX3VzX3N1bSAqIDEwMCwgaW9jLVx1MDAzZXBlcmlvZF91cykgOiAwO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXJ1bm5pbmcgPSBpb2MtXHUwMDNlcnVubmluZztcbitcdCksXG4rXG4rXHRUUF9wcmludGsoXCJbJXNdIHBlcmlvZD0ldXVzIHZyYXRlPSVsbHUgYnVzeT0lZCBhY3RpdmU9JWQgdXNhZ2U9JXUlJSBydW5uaW5nPSVkXCIsXG4rXHRcdF9fZ2V0X3N0cihkZXZuYW1lKSwgX19lbnRyeS1cdTAwM2VwZXJpb2RfdXMsIF9fZW50cnktXHUwMDNldnJhdGUsXG4rXHRcdF9fZW50cnktXHUwMDNlYnVzeV9sZXZlbCwgX19lbnRyeS1cdTAwM2Vucl9hY3RpdmUsIF9fZW50cnktXHUwMDNldXNhZ2VfcGN0LFxuK1x0XHRfX2VudHJ5LVx1MDAzZXJ1bm5pbmdcbitcdClcbispO1xuK1xuIFRSQUNFX0VWRU5UKGlvY29zdF9pb2NnX2ZvcmdpdmVfZGVidCxcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBpb2NfZ3EgKmlvY2csIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBpb2Nfbm93ICpub3csXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbmluZGV4IDJmNzk2ODhkY2Y3Y2UuLjY3YTYzMGNiNTYxNDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5AQCAtMTM4LDMgKzEzOCw1IEBAIENPTkZJR19TTUNfSFNfQ1RSTF9CUEY9eVxuIENPTkZJR19ESUJTPXlcbiBDT05GSUdfRElCU19MTz15XG4gQ09ORklHX1BNX1dBS0VMT0NLUz15XG4rQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbitDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTkzNDRiMTNmYmE5OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaW9jb3N0X21vZGVsLmNcbkBAIC0wLDAgKzEsMTkzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcImlvY29zdF9tb2RlbC5za2VsLmhcIlxuKyNpbmNsdWRlIFwiaW9jb3N0X21zLnNrZWwuaFwiXG4rXG4rLypcbisgKiBXcml0ZSBhIGxpbmUgdG8gaW8uY29zdC5tb2RlbCB3aXRoIHdyaXRlKDIpIGFuZCByZXR1cm4gdGhlIGVycm5vIG9mXG4rICogdGhlIGZhaWxlZCB3cml0ZSwgb3IgMCBvbiBzdWNjZXNzLiAgc3RkaW8gaXMgbm90IHVzZWQgaGVyZSBvblxuKyAqIHB1cnBvc2U6IHRoZSBrZXJuZWwncyByZWplY3Rpb24gaGFwcGVucyBpbiB0aGUgd3JpdGUoKSBzeXNjYWxsLFxuKyAqIG5vdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBjb3B5LCBhbmQgZXZlcnkgd3JpdGUsIGluY2x1ZGluZ1xuKyAqIHRoZSBlcnJvciBwYXRocyBvZiB0aGUgY2FsbGVycyBiZWxvdywgaXMgY2hlY2tlZC5cbisgKi9cbitzdGF0aWMgaW50IHdyaXRlX2Nvc3RfbW9kZWwoY29uc3QgY2hhciAqYnVmKVxuK3tcbitcdGludCBmZCwgZXJyID0gMDtcbitcdHNzaXplX3QgbjtcbitcbitcdGZkID0gb3BlbihcIi9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWxcIiwgT19XUk9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJybm87XG4rXHRuID0gd3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpO1xuK1x0aWYgKG4gXHUwMDNjIDApXG4rXHRcdGVyciA9IGVycm5vO1xuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBSZWFkIGJhY2sgdGhlIGlvLmNvc3QubW9kZWwgbGluZSBvZiBkZXYgYW5kIGNvcHkgdGhlIG1vZGVsPSB2YWx1ZVxuKyAqIGludG8gQG1vZGVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4rICovXG4rc3RhdGljIGludCByZWFkYmFja19tb2RlbChjb25zdCBjaGFyICpkZXYsIGNoYXIgKm1vZGVsLCBzaXplX3QgbW9kZWxfc3opXG4re1xuK1x0Y2hhciBsaW5lWzI1Nl0sIHdvcmRbMjU2XSwgKm0sICplbmQ7XG4rXHRGSUxFICpmcDtcbitcdGludCBmb3VuZCA9IDA7XG4rXG4rXHRmcCA9IGZvcGVuKFwiL3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5tb2RlbFwiLCBcInJcIik7XG4rXHRpZiAoIWZwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHtcbitcdFx0aWYgKHNzY2FuZihsaW5lLCBcIiUyNTVzXCIsIHdvcmQpID09IDEgXHUwMDI2XHUwMDI2ICFzdHJjbXAod29yZCwgZGV2KSkge1xuK1x0XHRcdGZvdW5kID0gMTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0ZmNsb3NlKGZwKTtcbitcdGlmICghZm91bmQpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdG0gPSBzdHJzdHIobGluZSwgXCJtb2RlbD1cIik7XG4rXHRpZiAoIW0pXG4rXHRcdHJldHVybiAtMTtcbitcdG0gKz0gc3RybGVuKFwibW9kZWw9XCIpO1xuK1x0ZW5kID0gbTtcbitcdHdoaWxlICgqZW5kIFx1MDAyNlx1MDAyNiAhaXNzcGFjZSgqZW5kKSlcbitcdFx0ZW5kKys7XG4rXHRzbnByaW50Zihtb2RlbCwgbW9kZWxfc3osIFwiJS4qc1wiLCAoaW50KShlbmQgLSBtKSwgbSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBCaW5kIHRoZSBuYW1lZCBtb2RlbCB0byBhIGRldmljZSB3aXRoIFwibW9kZWw9XHUwMDNjbmFtZVx1MDAzZVwiLCB2ZXJpZnkgdGhlXG4rICogcmVhZGJhY2sgYW5kIHJlc3RvcmUgdGhlIGJ1aWx0aW4gbW9kZWwuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW50IGJpbmRfbW9kZWwoY29uc3QgY2hhciAqZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGNoYXIgYnVmWzMwMF0sIGdvdFs2NF07XG4rXHRpbnQgZXJyO1xuK1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlcyBtb2RlbD0lc1xcblwiLCBkZXYsIG5hbWUpO1xuK1x0ZXJyID0gd3JpdGVfY29zdF9tb2RlbChidWYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRDSEVDSyhmYWxzZSwgXCJ3cml0ZV9tb2RlbFwiLCBcIndyaXRlIG1vZGVsPSVzOiAlc1xcblwiLCBuYW1lLFxuK1x0XHQgICAgICBzdHJlcnJvcihlcnIpKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0ZXJyID0gcmVhZGJhY2tfbW9kZWwoZGV2LCBnb3QsIHNpemVvZihnb3QpKTtcbitcdGlmIChlcnIgfHwgc3RyY21wKGdvdCwgbmFtZSkpIHtcbitcdFx0Q0hFQ0soZmFsc2UsIFwicmVhZGJhY2tfbW9kZWxcIiwgXCJnb3QgbW9kZWw9JXMgd2FudCAlc1xcblwiLFxuK1x0XHQgICAgICBlcnIgPyBcIihub25lKVwiIDogZ290LCBuYW1lKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0LyogcmVzdG9yZSB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWw7IHRoZSB3cml0ZSBpcyBjaGVja2VkIHRvbyAqL1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlcyBtb2RlbD1saW5lYXJcXG5cIiwgZGV2KTtcbitcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcbitcdGlmIChlcnIpIHtcbitcdFx0Q0hFQ0soZmFsc2UsIFwicmVzdG9yZV9saW5lYXJcIiwgXCJ3cml0ZSBtb2RlbD1saW5lYXI6ICVzXFxuXCIsXG4rXHRcdCAgICAgIHN0cmVycm9yKGVycikpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBUaGUgZGV2IGFyZ3VtZW50IG11c3QgYmUgcHJlc2VudCBpbiBpby5jb3N0LnFvcyBhbHJlYWR5LCB3aGljaFxuKyAqIG1lYW5zIGlvY29zdCBpcyBlbmFibGVkIGZvciBpdC5cbisgKi9cbitzdGF0aWMgaW50IGRldl9oYXNfaW9jb3N0KGNvbnN0IGNoYXIgKmRldilcbit7XG4rXHRjaGFyIGxpbmVbMjU2XSwgd29yZFsyNTZdO1xuK1x0RklMRSAqZnA7XG4rXHRpbnQgZm91bmQgPSAwO1xuK1xuK1x0ZnAgPSBmb3BlbihcIi9zeXMvZnMvY2dyb3VwL2lvLmNvc3QucW9zXCIsIFwiclwiKTtcbitcdGlmICghZnApXG4rXHRcdHJldHVybiAwO1xuK1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XG4rXHRcdGlmIChzc2NhbmYobGluZSwgXCIlMjU1c1wiLCB3b3JkKSA9PSAxIFx1MDAyNlx1MDAyNiAhc3RyY21wKHdvcmQsIGRldikpIHtcbitcdFx0XHRmb3VuZCA9IDE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGZjbG9zZShmcCk7XG4rXHRyZXR1cm4gZm91bmQ7XG4rfVxuK1xuKy8qXG4rICogQmluZCB0aGUgMnggZXhhbXBsZSBtb2RlbCBhbmQgdmVyaWZ5IHRoZSBpby5jb3N0Lm1vZGVsIHJlYWRiYWNrLlxuKyAqIElPIGFjY291bnRpbmcgaXRzZWxmIGlzIG5vdCBjaGVja2VkIGhlcmU7IGl0IG5lZWRzIGEgZGV2aWNlIGRvaW5nXG4rICogcmVhbCBJTyB1bmRlciBpb2Nvc3QgYW5kIGlzIGNvdmVyZWQgYnkgdGhlIGtlcm5lbC1zaWRlIHZhbGlkYXRpb25cbisgKiBkZXNjcmliZWQgaW4gdGhlIGNvdmVyIGxldHRlci5cbisgKlxuKyAqIFJlcXVpcmVzIHJvb3QsIGNncm91cCB2MiBhbmQgYSBkZXZpY2Ugd2l0aCBpb2Nvc3Qgc3VwcG9ydC4gIFRoZVxuKyAqIGRldmljZSBtdXN0IGJlIGdpdmVuIGFzIG1ham9yOm1pbm9yIGluICRJT0NPU1RfVEVTVF9ERVYsIG90aGVyd2lzZVxuKyAqIHRoZSB0ZXN0IGlzIHNraXBwZWQuXG4rICovXG4rdm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWwodm9pZClcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsICpza2VsO1xuK1x0Y2hhciBidWZbMzAwXSwgKmRldjtcbitcdGludCBlcnI7XG4rXG4rXHRkZXYgPSBnZXRlbnYoXCJJT0NPU1RfVEVTVF9ERVZcIik7XG4rXHRpZiAoIWRldiB8fCBnZXRldWlkKCkgIT0gMCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdGlmICghQVNTRVJUX1RSVUUoZGV2X2hhc19pb2Nvc3QoZGV2KSwgXCJpb2Nvc3RfbW91bnRlZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIG5lZ2F0aXZlOiBiaW5kaW5nIGFuIHVua25vd24gbW9kZWwgbmFtZSBtdXN0IGJlIHJlamVjdGVkLFxuK1x0ICogc28gYSB0eXBvIGNhbm5vdCBzaWxlbnRseSBkaXNhYmxlIGNvc3QgbW9kZWwgdXBkYXRlc1xuK1x0ICovXG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVzIG1vZGVsPW5vX3N1Y2hfbW9kZWxcXG5cIiwgZGV2KTtcbitcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcbitcdEFTU0VSVF9FUShlcnIsIEVOT0VOVCwgXCJ1bmtub3duX21vZGVsX3JlamVjdGVkXCIpO1xuK1xuK1x0c2tlbCA9IGlvY29zdF9tb2RlbF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIGF0dGFjaGluZyB0aGUgc3RydWN0X29wcyByZWdpc3RlcnMgdGhlIG1vZGVsIGJ5IG5hbWUgKi9cbitcdGVyciA9IGlvY29zdF9tb2RlbF9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKEFTU0VSVF9PSyhlcnIsIFwiYXR0YWNoXCIpKVxuK1x0XHRBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsIFwiaW9jb3N0XzJ4XCIpLCBcImJpbmRfYW5kX3JlYWRiYWNrXCIpO1xuK1xuK1x0aW9jb3N0X21vZGVsX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIFNhbWUgY2hlY2sgZm9yIHRoZSBtdWx0aS1zdHJlYW0gZXhhbXBsZSBtb2RlbC4gIE9ubHkgb25lIG1vZGVsIGNhblxuKyAqIGJlIGJvdW5kIHRvIGEgZGV2aWNlIGF0IGEgdGltZTsgYm90aCB0ZXN0cyBiaW5kIGFuZCByZXN0b3JlLCBzb1xuKyAqIHRoZXkgYXJlIHNlcmlhbCBhbmQgaW5kZXBlbmRlbnQuXG4rICovXG4rdm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWxfc3RyZWFtcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBpb2Nvc3RfbXMgKnNrZWw7XG4rXHRjaGFyICpkZXY7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZGV2ID0gZ2V0ZW52KFwiSU9DT1NUX1RFU1RfREVWXCIpO1xuK1x0aWYgKCFkZXYgfHwgZ2V0ZXVpZCgpICE9IDApIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksIFwiaW9jb3N0X21vdW50ZWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHNrZWwgPSBpb2Nvc3RfbXNfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBpb2Nvc3RfbXNfX2F0dGFjaChza2VsKTtcbitcdGlmIChBU1NFUlRfT0soZXJyLCBcImF0dGFjaFwiKSlcbitcdFx0QVNTRVJUX09LKGJpbmRfbW9kZWwoZGV2LCBcImlvY29zdF9tc1wiKSwgXCJiaW5kX2FuZF9yZWFkYmFja1wiKTtcbitcbitcdGlvY29zdF9tc19fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjhhZDQxN2IzNTg0OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5AQCAtMCwwICsxLDExNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBFeGFtcGxlIGlvY29zdCBjb3N0IG1vZGVsOiB0aGUgYnVpbHRpbiBsaW5lYXIgSEREIGZvcm11bGEgd2l0aCBhbGxcbisgKiBjb3N0cyBkb3VibGVkLlxuKyAqXG4rICogVGhlIGNvbnN0YW50cyBtaXJyb3Igd2hhdCBjYWxjX2xjb2VmcygpIGRlcml2ZXMgZnJvbSB0aGUgQVVUT1BfSEREXG4rICogZGVmYXVsdHMgKHJicHM9MTc0MDE5MTc2IHJzZXFpb3BzPTQxNzA4IHJyYW5kaW9wcz0zNzAsIHctc2lkZVxuKyAqIGFuYWxvZykgaW4gdnRpbWUgdW5pdHMgd2hlcmUgMXMgPT0gMl4zNywgZXhwcmVzc2VkIHdpdGggdGhlIHNhbWVcbisgKiByb3VuZC11cCBkaXZpc2lvbnMgc28gdGhleSBjYW5ub3QgZHJpZnQgZnJvbSB0aGUga2VybmVsLiAgQSBkZXZpY2VcbisgKiBib3VuZCB0byB0aGlzIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCBjaGFyZ2VzIGV4YWN0bHkgdHdpY2UgdGhlXG4rICogYnVpbHRpbiBtb2RlbCB1bmRlciB0aGUgc2FtZSB3b3JrbG9hZCwgd2hpY2ggbWFrZXMgaXQgYSBjb252ZW5pZW50XG4rICogd2F5IHRvIHZlcmlmeSB0aGF0IGFjY291bnRpbmcgZ29lcyB0aHJvdWdoIHRoZSBCUEYgcGF0aC5cbisgKlxuKyAqIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nXG4rICogZmx1c2hlczogdGhlcmUgaXMgbm8gZmFsbGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGEgZGF0YWxlc3NcbisgKiBXUklURXxSRVFfUFJFRkxVU0ggaXMgcHJpY2VkIGFzIGEgb25lLXBhZ2Ugd3JpdGUuXG4rICovXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbisvKiBWVElNRV9QRVJfU0VDIGNvbWVzIGZyb20gdm1saW51eC5oIChhIEJURiBlbnVtIGNvbnN0YW50KSAqL1xuKyNkZWZpbmUgSU9DX1BBR0VfU0laRVx0XHQ0MDk2XG4rI2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUXHQzXHQvKiA1MTJCIHNlY3RvcnMgdG8gNGtCIHBhZ2VzICovXG4rI2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVNcdDQwOTZcdC8qIDE2TUIgc2VlayB0aHJlc2hvbGQgKi9cbisjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAwKVx0Lyogbm90IGluIEJURjogYSBwbGFpbiBtYWNybyAqL1xuKyNkZWZpbmUgSU9DT1NUX1JFUV9PUF9NQVNLXHQweGZmXHRcdC8qIFJFUV9PUF9NQVNLLCBub3QgaW4gQlRGICovXG4rXG4rLypcbisgKiBESVY2NF9VNjRfUk9VTkRfVVAgLyBESVZfUk9VTkRfVVBfVUxMIGVxdWl2YWxlbnRzLCBmb2xkZWQgYXRcbisgKiBjb21waWxlIHRpbWVcbisgKi9cbisjZGVmaW5lIFJVKHgsIHkpXHRcdCgoeCkgLyAoeSkgKyAoKCh4KSAlICh5KSkgPyAxIDogMCkpXG4rXG4rI2RlZmluZSBSQlBTXHQxNzQwMTkxNzZVTExcbisjZGVmaW5lIFJTRVFJT1BTXHQ0MTcwOFVMTFxuKyNkZWZpbmUgUlJBTkRJT1BTXHQzNzBVTExcbisjZGVmaW5lIFdCUFNcdDE3ODA3NTg2NlVMTFxuKyNkZWZpbmUgV1NFUUlPUFNcdDQyNzA1VUxMXG4rI2RlZmluZSBXUkFORElPUFNcdDM3OFVMTFxuK1xuKyNkZWZpbmUgUlBBR0VcdChSVShWVElNRV9QRVJfU0VDLCBSVShSQlBTLCBJT0NfUEFHRV9TSVpFKSkpXG4rI2RlZmluZSBSU0VRSU9cdChSVShWVElNRV9QRVJfU0VDLCBSU0VRSU9QUykgLSBSUEFHRSlcbisjZGVmaW5lIFJSQU5ESU9cdChSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpXG4rI2RlZmluZSBXUEFHRVx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFdCUFMsIElPQ19QQUdFX1NJWkUpKSlcbisjZGVmaW5lIFdTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdTRVFJT1BTKSAtIFdQQUdFKVxuKyNkZWZpbmUgV1JBTkRJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSlcbitcbisvKlxuKyAqIHBlci1jZ3JvdXAgY3Vyc29yIHN0b3JhZ2U6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXQsIHNvXG4rICogdGhlIG1vZGVsIG5ldmVyIGxlYWtzIG9yIHJldXNlcyBzdGFsZSBwZXItY2dyb3VwIHN0YXRlXG4rICovXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQ0dSUF9TVE9SQUdFKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbit9IGN1cnNvcl9zdG9yZSBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rdTY0IEJQRl9QUk9HKGlvY29zdF8yeF9jYWxjX2Nvc3QsIHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHU2NCBzZWN0b3IsXG4rXHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncylcbit7XG4rXHR1NjQgcGFnZXMsIHNlZWtfcGFnZXMgPSAwLCBiYXNlLCBjb2VmX3BhZ2UsIHJhbmRpbywgY29zdDtcbitcbitcdGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7XG4rXHRcdGJhc2UgPSBSU0VRSU87IGNvZWZfcGFnZSA9IFJQQUdFOyByYW5kaW8gPSBSUkFORElPO1xuK1x0fSBlbHNlIGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9XUklURSkge1xuK1x0XHRiYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTztcbitcdH0gZWxzZSB7XG4rXHRcdC8qXG4rXHRcdCAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd25cbitcdFx0ICogb3BzIGFyZSBwcmljZWQgYXMgYSBzaW5nbGUgcGFnZSB3cml0ZVxuK1x0XHQgKi9cbitcdFx0YmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIG1pcnJvciB0aGUgYnVpbHRpbiBzaW5nbGUgcGVyLWNncm91cCBjdXJzb3I6IHRoZSBtb2RlbCBrZWVwc1xuK1x0ICogaXRzIG93biBjdXJzb3Iga2V5ZWQgYnkgdGhlIGJsa2NnIGFyZ3VtZW50XG4rXHQgKi9cbitcdHtcbitcdFx0X191NjQgKmN1cnNvciwgY3VyO1xuK1xuK1x0XHRjdXJzb3IgPSBicGZfY2dycF9zdG9yYWdlX2dldChcdTAwMjZjdXJzb3Jfc3RvcmUsXG4rXHRcdFx0XHRcdCAgICAgIGJsa2NnLVx1MDAzZWNzcy5jZ3JvdXAsIE5VTEwsXG4rXHRcdFx0XHRcdCAgICAgIEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7XG4rXHRcdGlmICghY3Vyc29yKVxuK1x0XHRcdHJldHVybiAyICogKGJhc2UgKyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlKTtcbitcdFx0Y3VyID0gKmN1cnNvcjtcbitcdFx0c2Vla19wYWdlcyA9IHNlY3RvciBcdTAwM2UgY3VyID8gc2VjdG9yIC0gY3VyIDogY3VyIC0gc2VjdG9yO1xuK1x0XHRzZWVrX3BhZ2VzIFx1MDAzZVx1MDAzZT0gSU9DX1NFQ1RfVE9fUEFHRV9TSElGVDtcbitcdFx0aWYgKHNlZWtfcGFnZXMgXHUwMDNlIExDT0VGX1JBTkRJT19QQUdFUylcbitcdFx0XHRiYXNlID0gcmFuZGlvO1xuK1x0XHRpZiAoIShtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkpXG4rXHRcdFx0KmN1cnNvciA9IHNlY3RvciArIFJVKG5ieXRlcywgNTEyKTtcbitcdH1cbitcbitcdHBhZ2VzID0gUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKTtcbitcdGlmICghcGFnZXMpXG4rXHRcdHBhZ2VzID0gMTtcdC8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqL1xuK1x0aWYgKG1vZGVsX2ZsYWdzIFx1MDAyNiBJT0NPU1RfQ09TVF9GX01FUkdFKVxuK1x0XHRiYXNlID0gMDtcbitcbitcdGNvc3QgPSAyICogKGJhc2UgKyBwYWdlcyAqIGNvZWZfcGFnZSk7XG4rXHRyZXR1cm4gY29zdDtcbit9XG4rXG4rU0VDKFwiLnN0cnVjdF9vcHNcIilcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfMnggPSB7XG4rXHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfMnhfY2FsY19jb3N0LFxuK1x0Lm5hbWUgPSBcImlvY29zdF8yeFwiLFxuK307XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2NjNTdjMDNkM2M4OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5AQCAtMCwwICsxLDEzNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBFeGFtcGxlIG11bHRpLXN0cmVhbSBzZXF1ZW50aWFsaXR5IGRldGVjdGlvbiBjb3N0IG1vZGVsLlxuKyAqXG4rICogVGhlIGJ1aWx0aW4gbW9kZWwga2VlcHMgYSBzaW5nbGUgY3Vyc29yIHBlciBjZ3JvdXAsIHNvIHR3b1xuKyAqIGludGVybGVhdmVkIHNlcXVlbnRpYWwgcmVhZGVycyBpbiBvbmUgY2dyb3VwIGFyZSBhbGwgcHJpY2VkIHJhbmRvbVxuKyAqIChtZWFzdXJlZCA4OXggb3ZlcmNoYXJnZSwgMTIuOXggdGhyb3VnaHB1dCBjb2xsYXBzZSksIHdoaWxlIHJhbmRvbVxuKyAqIElPIGluc2lkZSBhIGhvdCB3aW5kb3cgc21hbGxlciB0aGFuIHRoZSAxNk1CIHNlZWsgdGhyZXNob2xkIGlzXG4rICogcHJpY2VkIHNlcXVlbnRpYWwgKG1lYXN1cmVkIDEwN3ggdW5kZXJjaGFyZ2UpLiAgVGhpcyBtb2RlbCByZXBsYWNlc1xuKyAqIHRoZSBzaW5nbGUgY3Vyc29yIHdpdGggYSBwZXItY2dyb3VwIHRhYmxlIG9mIHN0cmVhbSBzbG90czogYW4gSU8gaXNcbisgKiBzZXF1ZW50aWFsIGlmZiBpdHMgc2VjdG9yIG1hdGNoZXMgdGhlIGV4cGVjdGVkIG5leHQgc2VjdG9yIG9mIGFueVxuKyAqIHRyYWNrZWQgc3RyZWFtLiAgSW50ZXJsZWF2ZWQgc3RyZWFtcyBrZWVwIHRoZWlyIG93biBzbG90cywgYW5kXG4rICogd2luZG93ZWQgcmFuZG9tIElPIHJhcmVseSBtYXRjaGVzIGEgbW92aW5nIGV4cGVjdGF0aW9uLlxuKyAqXG4rICogU3RyZWFtIHN0YXRlIGxpdmVzIGluIGEgQ0dSUF9TVE9SQUdFIG1hcCwgc28gaXQgaXMgY3JlYXRlZCBhbmRcbisgKiBmcmVlZCB3aXRoIHRoZSBjZ3JvdXAuICBUaGUgbW9kZWwgaW1wbGVtZW50cyB0aGUgZnVsbCBidWlsdGluXG4rICogbGluZWFyIGZvcm11bGEgaXRzZWxmLCBpbmNsdWRpbmcgZmx1c2ggcHJpY2luZy5cbisgKi9cbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuKy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovXG4rI2RlZmluZSBJT0NfUEFHRV9TSVpFXHRcdDQwOTZcbisjZGVmaW5lIElPQ19TRUNUX1RPX1BBR0VfU0hJRlRcdDNcdC8qIDUxMkIgc2VjdG9ycyB0byA0a0IgcGFnZXMgKi9cbisjZGVmaW5lIExDT0VGX1JBTkRJT19QQUdFU1x0NDA5Nlx0LyogMTZNQiBzZWVrIHRocmVzaG9sZCAqL1xuKyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXHQvKiBub3QgaW4gQlRGOiBhIHBsYWluIG1hY3JvICovXG4rI2RlZmluZSBJT0NPU1RfUkVRX09QX01BU0tcdDB4ZmZcdFx0LyogUkVRX09QX01BU0ssIG5vdCBpbiBCVEYgKi9cbitcbisvKlxuKyAqIERJVjY0X1U2NF9ST1VORF9VUCAvIERJVl9ST1VORF9VUF9VTEwgZXF1aXZhbGVudHMsIGZvbGRlZCBhdFxuKyAqIGNvbXBpbGUgdGltZVxuKyAqL1xuKyNkZWZpbmUgUlUoeCwgeSlcdFx0KCh4KSAvICh5KSArICgoKHgpICUgKHkpKSA/IDEgOiAwKSlcbitcbisjZGVmaW5lIFJCUFNcdDE3NDAxOTE3NlVMTFxuKyNkZWZpbmUgUlNFUUlPUFNcdDQxNzA4VUxMXG4rI2RlZmluZSBSUkFORElPUFNcdDM3MFVMTFxuKyNkZWZpbmUgV0JQU1x0MTc4MDc1ODY2VUxMXG4rI2RlZmluZSBXU0VRSU9QU1x0NDI3MDVVTExcbisjZGVmaW5lIFdSQU5ESU9QU1x0Mzc4VUxMXG4rXG4rI2RlZmluZSBSUEFHRVx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSlcbisjZGVmaW5lIFJTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFJTRVFJT1BTKSAtIFJQQUdFKVxuKyNkZWZpbmUgUlJBTkRJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFJSQU5ESU9QUykgLSBSUEFHRSlcbisjZGVmaW5lIFdQQUdFXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKVxuKyNkZWZpbmUgV1NFUUlPXHQoUlUoVlRJTUVfUEVSX1NFQywgV1NFUUlPUFMpIC0gV1BBR0UpXG4rI2RlZmluZSBXUkFORElPXHQoUlUoVlRJTUVfUEVSX1NFQywgV1JBTkRJT1BTKSAtIFdQQUdFKVxuK1xuKyNkZWZpbmUgTlNMT1RTXHQ0XG4rXG4rc3RydWN0IHN0cmVhbXMge1xuK1x0X191NjQgZXhwZWN0ZWRbTlNMT1RTXTtcdC8qIG5leHQgZXhwZWN0ZWQgc2VjdG9yLCBwZXIgc3RyZWFtICovXG4rXHRfX3U2NCBzdGFtcFtOU0xPVFNdO1x0LyogTFJVIHN0YW1wLCAwID0gZW1wdHkgKi9cbit9O1xuK1xuKy8qXG4rICogcGVyLWNncm91cCBzdHJlYW0gdGFibGU6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXRcbisgKi9cbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9DR1JQX1NUT1JBR0UpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IHN0cmVhbXMpO1xuK30gc3RyZWFtX3RhYiBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rdTY0IEJQRl9QUk9HKGlvY29zdF9tc19jYWxjX2Nvc3QsIHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHU2NCBzZWN0b3IsXG4rXHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncylcbit7XG4rXHRzdHJ1Y3Qgc3RyZWFtcyAqcztcbitcdHU2NCBwYWdlcywgYmFzZSwgY29lZl9wYWdlLCByYW5kaW8sIGFkdmFuY2UsIG5vdztcbitcdHUzMiBpLCB2aWN0aW0gPSAwLCBmb3VuZCA9IDB4RkZGRkZGRkY7XG4rXG4rXHRpZiAoKG9wZiBcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfUkVBRCkge1xuK1x0XHRiYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTztcbitcdH0gZWxzZSBpZiAoKG9wZiBcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfV1JJVEUpIHtcbitcdFx0YmFzZSA9IFdTRVFJTzsgY29lZl9wYWdlID0gV1BBR0U7IHJhbmRpbyA9IFdSQU5ESU87XG4rXHR9IGVsc2Uge1xuK1x0XHQvKlxuK1x0XHQgKiBhIGZ1bGx5IG93bmluZyBtb2RlbCBtdXN0IHByaWNlIGV2ZXJ5IG9wOyB1bmtub3duXG4rXHRcdCAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGVcbitcdFx0ICovXG4rXHRcdGJhc2UgPSAwOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gMDtcbitcdH1cbitcdGFkdmFuY2UgPSBSVShuYnl0ZXMsIDUxMik7XHQvKiBzZWN0b3JzICovXG4rXG4rXHRzID0gYnBmX2NncnBfc3RvcmFnZV9nZXQoXHUwMDI2c3RyZWFtX3RhYiwgYmxrY2ctXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcbitcdFx0XHRcdCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xuK1x0aWYgKCFzKVxuK1x0XHRyZXR1cm4gYmFzZSArIFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSkgKiBjb2VmX3BhZ2U7XG4rXG4rXHRub3cgPSBicGZfa3RpbWVfZ2V0X25zKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOU0xPVFM7IGkrKykge1xuK1x0XHRpZiAocy1cdTAwM2VleHBlY3RlZFtpXSA9PSBzZWN0b3IgXHUwMDI2XHUwMDI2IHMtXHUwMDNlc3RhbXBbaV0pIHtcbitcdFx0XHRmb3VuZCA9IGk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmIChmb3VuZCAhPSAweEZGRkZGRkZGKSB7XG4rXHRcdC8qIHNlcXVlbnRpYWw6IGtlZXAgdGhlIHNlcSBiYXNlIGZyb20gdGhlIG9wIGJyYW5jaCAqL1xuK1x0XHRzLVx1MDAzZWV4cGVjdGVkW2ZvdW5kXSA9IHNlY3RvciArIGFkdmFuY2U7XG4rXHRcdHMtXHUwMDNlc3RhbXBbZm91bmRdID0gbm93O1xuK1x0fSBlbHNlIHtcbitcdFx0YmFzZSA9IHJhbmRpbztcbitcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgTlNMT1RTOyBpKyspIHtcbitcdFx0XHRpZiAocy1cdTAwM2VzdGFtcFtpXSBcdTAwM2Mgcy1cdTAwM2VzdGFtcFt2aWN0aW1dKVxuK1x0XHRcdFx0dmljdGltID0gaTtcbitcdFx0fVxuK1x0XHRzLVx1MDAzZWV4cGVjdGVkW3ZpY3RpbV0gPSBzZWN0b3IgKyBhZHZhbmNlO1xuK1x0XHRzLVx1MDAzZXN0YW1wW3ZpY3RpbV0gPSBub3c7XG4rXHR9XG4rXG4rXHRwYWdlcyA9IFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSk7XG4rXHRpZiAoIXBhZ2VzKVxuK1x0XHRwYWdlcyA9IDE7XHQvKiBkYXRhbGVzcyBmbHVzaDogb25lIHBhZ2UgKi9cbitcdGlmIChtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkge1xuK1x0XHQvKlxuK1x0XHQgKiBtZXJnZWQgYmlvcyBza2lwIHRoZSBiYXNlIGNvc3QgYnV0IHN0aWxsIGFkdmFuY2VcbitcdFx0ICogdGhlIHN0cmVhbSBwb3NpdGlvbiBhYm92ZSwgc28gYSBtZXJnZSBhdCB0aGVcbitcdFx0ICogZXhwZWN0ZWQgc2VjdG9yIGRvZXMgbm90IG1ha2UgdGhlIGZvbGxvd2luZyBuZXcgSU9cbitcdFx0ICogbG9vayByYW5kb21cbitcdFx0ICovXG4rXHRcdGJhc2UgPSAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGJhc2UgKyBwYWdlcyAqIGNvZWZfcGFnZTtcbit9XG4rXG4rU0VDKFwiLnN0cnVjdF9vcHNcIilcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfbXMgPSB7XG4rXHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfbXNfY2FsY19jb3N0LFxuK1x0Lm5hbWUgPSBcImlvY29zdF9tc1wiLFxuK307XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMDo1Mi4zOTM4ODE5MDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MzA2NjcyNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGLUJhc2VkIEJsb2NrIElPIENvc3QgTW9kZWwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHNlcmllcyBsb29rcyBpbnRlcmVzdGluZy4gSXQncyBpbnRyb2R1Y2luZyBCUEYgcGx1Z2dhYmxlIGNvc3QgbW9kZWwgc3VwcG9ydCBmb3IgdGhlIGJsb2NrIElPIGNvbnRyb2xsZXIgKGJsay1pb2Nvc3QpLCBsZXZlcmFnaW5nIEJQRiBzdHJ1Y3Rfb3BzIChgaW9jb3N0X21vZGVsX29wc2ApLiBMZXQncyBicmVhayBkb3duIHRoZSBjaGFuZ2VzIGFuZCBzZWUgaWYgdGhpcyBpcyBzb21ldGhpbmcgd2UgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvLlxuXG5GaXJzdCwgdGhlcmUncyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgaW4gYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdGAsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbi4gVGhlbiwgYSBuZXcgY29uZmlnIG9wdGlvbiwgYEJMS19DR1JPVVBfSU9DT1NUX0JQRmAsIGluIGBibG9jay9LY29uZmlnYC4gSXQgaGFzIHNvbWUgZGVwZW5kZW5jaWVzOiBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLiBBbHJpZ2h0LCBzbyBCUEYgYW5kIHRoZSBpbyBjb3N0IG1vZGVsIG5lZWQgdG8gYmUgc2V0IHVwIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIE1ha2VmaWxlIG5vdyBpbmNsdWRlcyBgYmxrLWlvY29zdC1icGYub2Agd2hlbiB0aGF0IGNvbmZpZyBpcyBlbmFibGVkLlxuXG5JbiBgYmxvY2svYmxrLWNncm91cC5jYCwgdGhleSd2ZSBhZGRlZCBob29rcyB0byB0aGUgY2dyb3VwIGxpZmVjeWNsZSBjYWxsYmFja3MsIGBibGtjZ19jc3Nfb2ZmbGluZWAgYW5kIGBibGtjZ19jc3Nfb25saW5lYCwgdG8gdHJpZ2dlciBzb21lIG5ldyBgaW9jb3N0X25vdGlmeWAgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgaW4gYGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmNgLCB3aGljaCBjb250YWlucyB0aGUgYWN0dWFsIEJQRiBzdHJ1Y3Rfb3BzLCBhbG9uZyB3aXRoIHJlZ2lzdHJhdGlvbiwgbG9va3VwLCBhbmQgbm90aWZpY2F0aW9uIGNhbGxiYWNrcy4gSXQgbG9va3MgbGlrZSB0aGUgZ2x1ZSBjb2RlIHRoYXQgbWFrZXMgZXZlcnl0aGluZyB3b3JrLlxuXG5gYmxvY2svYmxrLWlvY29zdC5jYCBoYXMgc2VlbiB0aGUgbW9zdCBjaGFuZ2VzLCB3aXRoIGhvb2tzIGludG8gdGhlIGNvc3QgY2FsY3VsYXRpb24gZnVuY3Rpb25zIChgY2FsY192dGltZV9jb3N0YCwgYGNhbGNfc2l6ZV92dGltZV9jb3N0YCksIHRoZSBJTyBRb1MgZXhpdCBmdW5jdGlvbiAoYGlvY19ycW9zX2V4aXRgKSwgYW5kIHNvbWUgb3RoZXIga2V5IHBvaW50cywgbGlrZSBgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsYCwgYGlvY19icGZfbW9kZWxfYmluZGAsIGBpb2NfY29zdF9tb2RlbF93cml0ZWAgYW5kIGFsc28gYSB0cmFjZXBvaW50IGBpb2Nvc3RfaW9jX3RpY2tgLiBgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmhgIGRlZmluZXMgdGhlIGBpb2Nvc3RfbW9kZWxfb3BzYCBzdHJ1Y3R1cmUgYW5kIHJlbGF0ZWQgZnVuY3Rpb24gaGVhZGVycywgd2hpbGUgYGluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oYCBpbnRyb2R1Y2VzIGEgbmV3IHRyYWNlIGV2ZW50LiBXZSBhbHNvIGhhdmUgc2VsZnRlc3RzIGZvciBCUEYuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZSwgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IExldCdzIHNlZS4uLiBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gUUVNVSBvciBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIGJsay1pb2Nvc3QsIGJsay1jZ3JvdXAsIEJQRiwgYW5kIGNncm91cCB2MiBpby5jb3N0Lm1vZGVsIHN5c2ZzL2Nncm91cCBpbnRlcmZhY2UsIHRoaXMgaXMgYWxsIHZlcnkgcmVhY2hhYmxlLiBBcmUgdGhlc2UgY29yZSBrZXJuZWwgY2hhbmdlcz8gWWVzLCB0aGlzIGhpdHMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIsIEJQRiBzdWJzeXN0ZW0sIGFuZCBjZ3JvdXAgSU8gY29udHJvbGxlci4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIVxuXG5JIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN5bWJvbHMgYW5kIGNvbmZpZ3MuIEknbGwgcHJvYmFibHkgbmVlZCB0byB1c2UgZ3JlcCBvciBhIGNvZGUgc2VhcmNoIHRvb2wgdG8gY2hlY2sgZGVwZW5kZW5jaWVzIG1vcmUgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMTowMS43MDA1NTc0OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNjIxMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0xNDU9Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcXG4tLVxcbmJsb2NrL0tjb25maWctMTUzLVxcbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxcbmJsb2NrL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZz0yMzI9c291cmNlIFxcXCJibG9jay9LY29uZmlnLmlvc2NoZWRcXFwiXFxuYmxvY2svS2NvbmZpZy0yMzMtXFxuYmxvY2svS2NvbmZpZzoyMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUX0JQRlxcbmJsb2NrL0tjb25maWctMjM1LVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgcGx1Z2dhYmxlIGNvc3QgbW9kZWwgc3VwcG9ydCBmb3IgdGhlIGNvc3QgSU8gY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MDEuODQxMTgyODYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg0NDY4MjEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UsIGBibG9jay9LY29uZmlnYCBpcyB1c3VhbGx5IHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBJJ20gcHJldHR5IHN1cmUgSSd2ZSBiZWVuIGluIHRoZXJlIGJlZm9yZS4uLiBub3cgd2hlcmUgd2FzIHRoYXQgc2V0dGluZz8gUmlnaHQsIGl0J3MgdmFndWVseSBmYW1pbGlhci4uLiBIbW0sIGxpbmVzIDE1NCBhbmQgMjM0IGluIHRoYXQgZmlsZSBzb3VuZCBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBMZXQncyBzZWUgd2hhdCdzIGRlZmluZWQgYXJvdW5kIHRob3NlIGxpbmVzLiBJJ2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGNoZWNrIHRoZW0uIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmUsIG9yIGF0IGxlYXN0IHByb3ZpZGUgc29tZSBjbHVlcyB0byBmb2xsb3chXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MDQuNjg1ODY5NDg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcdCAgY2dyb3VwIGFwcGxpY2F0aW9ucy4gSXQgZW5hYmxlcyB0aGUgRmFicmljIGFuZCB0aGUgc3RvcmFnZSB0YXJnZXRzIHRvXFxuIDE1MTpcXHRcXHQgIGlkZW50aWZ5LCBtb25pdG9yLCBhbmQgaGFuZGxlIEZDIHRyYWZmaWMgYmFzZWQgb24gVk0gdGFncyBieSBpbnNlcnRpbmdcXG4gMTUyOlxcdFxcdCAgYXBwbGljYXRpb24gc3BlY2lmaWMgaWRlbnRpZmljYXRpb24gaW50byB0aGUgRkMgZnJhbWUuXFxuIDE1MzpcXHRcXG4gMTU0OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxcbiAxNTU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuIDE1NjpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTU3OlxcdFxcdHNlbGVjdCBCTEtfUlFfQUxMT0NfVElNRVxcbiAxNTg6XFx0XFx0aGVscFxcbiAxNTk6XFx0XFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLndlaWdodCBpbnRlcmZhY2UgZm9yIGNvc3RcXG4gMTYwOlxcdFxcdG1vZGVsIGJhc2VkIHByb3BvcnRpb25hbCBJTyBjb250cm9sLiAgVGhlIElPIGNvbnRyb2xsZXJcXG4gMTYxOlxcdFxcdGRpc3RyaWJ1dGVzIElPIGNhcGFjaXR5IGJldHdlZW4gZGlmZmVyZW50IGdyb3VwcyBiYXNlZCBvblxcbiAxNjI6XFx0XFx0dGhlaXIgc2hhcmUgb2YgdGhlIG92ZXJhbGwgd2VpZ2h0IGRpc3RyaWJ1dGlvbi5cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXFxuIDE2NTpcXHRcXHRib29sIFxcXCJDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcXFwiXFxuIDE2NjpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTY3OlxcdFxcdGhlbHBcXG4gMTY4OlxcdFxcdEVuYWJsZSB0aGUgLnByaW8gaW50ZXJmYWNlIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzIHRvXFxuIDE2OTpcXHRcXHRyZXF1ZXN0cy4gVGhlIEkvTyBwcmlvcml0eSBjbGFzcyBhZmZlY3RzIHRoZSBvcmRlciBpbiB3aGljaCBhbiBJL09cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MDQuNjg2MDAwMDI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxODc5MDI2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQkxLX0NHUk9VUF9JT0NPU1RfQlBGIERlcGVuZGVuY2llcyBhbmQgS2V5IEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19DR1JPVVBfSU9DT1NUX0JQRmAuIEkgc2VlIGl0IHJlbGllcyBvbiBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLiBGdXJ0aGVyLCBgQkxLX0NHUk9VUF9JT0NPU1RgIGl0c2VsZiBkZXBlbmRzIG9uIGBCTEtfQ0dST1VQYC4gU28sIEknbGwgbmVlZCB0byBlbmFibGUgdGhvc2UgY29uZmlndXJhdGlvbnM6IGBCTEtfQ0dST1VQX0lPQ09TVF9CUEZgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQkxLX0NHUk9VUGAuIEdvb2QsIGdvdCB0aGUgS2NvbmZpZyBzaWRlIGhhbmRsZWQuXG5cbk5vdywgSSdtIGRpZ2dpbmcgaW50byB0aGUgY29kZS4gSW4gYGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmNgLCBJIHNwb3QgdGhlIHVzZSBvZiBgQ09ORklHX0NHUk9VUFNgIGZvciBgQlBGX0ZVTkNfY2dycF9zdG9yYWdlX2dldGAsIGFuZCBgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmAgaXMgdXNlZCB0byBjb21waWxlIGBibG9jay9ibGstaW9jb3N0LWJwZi5vYC4gSW4gYGJsb2NrL2Jsay1pb2Nvc3QuY2AsIEkgc2VlIGAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmAsIHdoaWNoIG1lYW5zIHRoZSBCUEYgZmVhdHVyZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluLlxuXG5OZXh0LCB0aGUgY3JpdGljYWwgc3RlcDogaWRlbnRpZnlpbmcgdGhlIG1vZGlmaWVkIGFuZCBpbnRyb2R1Y2VkIGZ1bmN0aW9ucy4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBsaWVzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXhpc3Rpbmcgc3lzdGVtLiBGcm9tIGBibG9jay9ibGstaW9jb3N0LWJwZi5jYCwgdGhlc2UgbG9vayBpbXBvcnRhbnQ6IGBpb2Nvc3RfYnBmX21vZGVsX2dldGAsIGBpb2Nvc3RfYnBmX21vZGVsX3B1dGAsIGBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZWAsIGBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmVgLCBhbmQgdGhlIHN0cnVjdF9vcHMgbWV0aG9kcyBgYnBmX2lvY29zdF9yZWdgLCBgYnBmX2lvY29zdF91bnJlZ2AsIGBicGZfaW9jb3N0X3ZhbGlkYXRlYCwgYGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyYCwgYGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXJgLCBgYnBmX2lvY29zdF9nZXRfZnVuY19wcm90b2AsIGBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2Vzc2AsIGBicGZfaW9jb3N0X21vZGVsX2luaXRgLiBUaGVuLCBpbiBgYmxvY2svYmxrLWlvY29zdC5jYCwgSSd2ZSBnb3QgYGlvY19icGZfbW9kZWxfYmluZGAsIGBpb2NfY29zdF9tb2RlbF93cml0ZWAsIGBjYWxjX3Z0aW1lX2Nvc3RgLCBgY2FsY19zaXplX3Z0aW1lX2Nvc3RgLCBgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsYCwgYGlvY19ycW9zX2V4aXRgLiBGaW5hbGx5LCBJIHNlZSB0aGF0IGNncm91cCBvcGVyYXRpb25zIChgYmxrY2dfY3NzX29mZmxpbmVgLCBgYmxrY2dfY3NzX29ubGluZWApIGluIGBibG9jay9ibGstY2dyb3VwLmNgIGFyZSBhbHNvIHBvdGVudGlhbGx5IHJlbGV2YW50LlxuXG5Ob3csIEknbSBjcm9zcy1yZWZlcmVuY2luZyB0byBjb25maXJtIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYW5kIGluZGVlZCwgdGhvc2UgSSBpZGVudGlmaWVkIGFyZSBub24tc3RhdGljIGFuZCBleHBvc2VkLCB3aGljaCBjb25maXJtcyB0aG9zZSBhcmUgaW50ZXJlc3RpbmcuXG5cbkZpbmFsbHksIEknbSBjaGVja2luZyBteSBndWlkZWxpbmVzLiBJIHdhbnQgdG8gdGFyZ2V0IHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGF2b2lkIHRoZSBnZW5lcmljIHN0dWZmLiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBuZXcga2V5IGZ1bmN0aW9ucyBmcm9tIGJvdGggZmlsZXMgdG8gYnVpbGQgYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuIEknbSBjaG9vc2luZyB0aGUgZm9sbG93aW5nIGFzIHRoZSBgRm9jdXNTeW1ib2xzYDogYGlvY19icGZfbW9kZWxfYmluZGAsIGBpb2NfY29zdF9tb2RlbF93cml0ZWAsIGBjYWxjX3Z0aW1lX2Nvc3RgLCBgY2FsY19zaXplX3Z0aW1lX2Nvc3RgLCBgYnBmX2lvY29zdF9yZWdgLCBgYnBmX2lvY29zdF91bnJlZ2AsIGBicGZfaW9jb3N0X3ZhbGlkYXRlYCwgYGlvY29zdF9icGZfbW9kZWxfZ2V0YCwgYGlvY29zdF9icGZfbW9kZWxfcHV0YCwgYGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lYCwgYGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZWAuXG5cbk9rYXksIEkndmUgZ290IGV2ZXJ5dGhpbmcgbGluZWQgdXAuIEFsbCB0aGUgY2hlY2tzIHBhc3MuIEknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhlIHRvb2wgY2FsbCBub3csIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ3ZlIGNhcmVmdWxseSBpZGVudGlmaWVkIHRoZSBrZXkgY29tcG9uZW50cyByZWxhdGVkIHRvIHRoZSBCUEYtYmFzZWQgSS9PIGNvc3QgYWNjb3VudGluZyBhbmQgdGhlIGludGVncmF0aW9uIHdpdGggY2dyb3Vwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzOTgsIk91dHB1dFRva2VucyI6MzI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjExOjE0Ljg3MzkwNTU5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjkzNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVF9CUEZcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb2NfYnBmX21vZGVsX2JpbmRcIixcbiAgICBcImlvY19jb3N0X21vZGVsX3dyaXRlXCIsXG4gICAgXCJjYWxjX3Z0aW1lX2Nvc3RcIixcbiAgICBcImNhbGNfc2l6ZV92dGltZV9jb3N0XCIsXG4gICAgXCJicGZfaW9jb3N0X3JlZ1wiLFxuICAgIFwiYnBmX2lvY29zdF91bnJlZ1wiLFxuICAgIFwiYnBmX2lvY29zdF92YWxpZGF0ZVwiLFxuICAgIFwiaW9jb3N0X2JwZl9tb2RlbF9nZXRcIixcbiAgICBcImlvY29zdF9icGZfbW9kZWxfcHV0XCIsXG4gICAgXCJpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZVwiLFxuICAgIFwiaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IChpb2Nvc3RfbW9kZWxfb3BzKSBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzIGluIGJsay1pb2Nvc3QuIEl0IGludHJvZHVjZXMgbmV3IGtlcm5lbCBjb2RlIGluIGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgZm9yIHJlZ2lzdGVyaW5nLCB2YWxpZGF0aW5nLCBhbmQgbWFuYWdpbmcgQlBGIGNvc3QgbW9kZWxzLCBhbmQgdXBkYXRlcyBibG9jay9ibGstaW9jb3N0LmMgYW5kIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBtb2RlbHMgZHVyaW5nIElPIGNvc3QgY2FsY3VsYXRpb25zLCBjb25maWd1cmF0aW9uIHdyaXRlcywgYW5kIGNncm91cCBsaWZlY3ljbGUgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEJQRiBzeXNjYWxscyBhbmQgY2dyb3VwIHYyIGlvLmNvc3QubW9kZWwgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVF9CUEZcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb2NfYnBmX21vZGVsX2JpbmRcIixcbiAgICBcImlvY19jb3N0X21vZGVsX3dyaXRlXCIsXG4gICAgXCJjYWxjX3Z0aW1lX2Nvc3RcIixcbiAgICBcImNhbGNfc2l6ZV92dGltZV9jb3N0XCIsXG4gICAgXCJicGZfaW9jb3N0X3JlZ1wiLFxuICAgIFwiYnBmX2lvY29zdF91bnJlZ1wiLFxuICAgIFwiYnBmX2lvY29zdF92YWxpZGF0ZVwiLFxuICAgIFwiaW9jb3N0X2JwZl9tb2RlbF9nZXRcIixcbiAgICBcImlvY29zdF9icGZfbW9kZWxfcHV0XCIsXG4gICAgXCJpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZVwiLFxuICAgIFwiaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IChpb2Nvc3RfbW9kZWxfb3BzKSBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzIGluIGJsay1pb2Nvc3QuIEl0IGludHJvZHVjZXMgbmV3IGtlcm5lbCBjb2RlIGluIGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgZm9yIHJlZ2lzdGVyaW5nLCB2YWxpZGF0aW5nLCBhbmQgbWFuYWdpbmcgQlBGIGNvc3QgbW9kZWxzLCBhbmQgdXBkYXRlcyBibG9jay9ibGstaW9jb3N0LmMgYW5kIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBtb2RlbHMgZHVyaW5nIElPIGNvc3QgY2FsY3VsYXRpb25zLCBjb25maWd1cmF0aW9uIHdyaXRlcywgYW5kIGNncm91cCBsaWZlY3ljbGUgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEJQRiBzeXNjYWxscyBhbmQgY2dyb3VwIHYyIGlvLmNvc3QubW9kZWwgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MTUuMDI4MjA4MDY2WiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1Njk3NjQ1MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MTUuMDI4NzAxMzE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzU2OTcxNDg3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIEJQRiBzdHJ1Y3Rfb3BzIHN1cHBvcnQgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscyBpbiBibGstaW9jb3N0IChgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmApLCBhZGRpbmcgYGlvY29zdF9tb2RlbF9vcHNgLCBtb2RlbCByZWdpc3RyYXRpb24vbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHBhcnNpbmcgaW4gYGlvLmNvc3QubW9kZWxgLCBhbmQgYSBuZXcgdHJhY2Vwb2ludCBgaW9jb3N0X2lvY190aWNrYC5cXG5cXG5BbiBldmFsdWF0aW9uIG9mIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGFuZCBuZXcgY29kZSBzaG93czpcXG4tIEFsbCBzdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgYGJwZl9tb2RlbGAgaW5pdGlhbGl6ZWQgd2l0aCBgYnBmX21vZGVsWzBdID0gJ1xcXFwwJ2AsIGBucl9hY3RpdmVgIGluaXRpYWxpemVkIHRvIDAsIGFuZCBgYnVmYCBidWZmZXJzIGZpbGxlZCB3aXRoIGBtYXRjaF9zdHJsY3B5YCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSByZWFkL3VzZS5cXG4tIER5bmFtaWMgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jYCAoZm9yIGBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbGApIGFuZCB0aGUgZXhpc3RpbmcgemVyb2VkIGFsbG9jYXRpb24gZm9yIGBzdHJ1Y3QgaW9jYC5cXG4tIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZTsgb3V0cHV0IHRvIHVzZXIgc3BhY2UgaXMgaGFuZGxlZCB2aWEgZm9ybWF0dGVkIHRleHQgaW4gYHNlcV9wcmludGZgLlxcbi0gVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gQlBGIGNhbGxiYWNrcyAoYGNhbGNfY29zdGAsIGBibGtjZ19vbmxpbmVgLCBgYmxrY2dfb2ZmbGluZWApIGFyZSBkZXJpdmVkIGRpcmVjdGx5IGZyb20gaW5pdGlhbGl6ZWQgYmlvL3JlcXVlc3Qgc3RydWN0dXJlcyBhbmQgYmxrY2cgcG9pbnRlcnMuXFxuXFxuVGhlIHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggc2VyaWVzIHBlcnRhaW4gdG8gUkNVIHN5bmNocm9uaXphdGlvbiwgb2JqZWN0IHJlZmNvdW50aW5nL2xpZmV0aW1lIChgYnBmX3N0cnVjdF9vcHNfZ2V0YC9gcHV0YCksIGFuZCBsb2NraW5nLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZGV0ZWN0b3JzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHNwZWNpZmljIHRvIEtNU0FOIGFyZSBwcmVzZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjNTBkNDAzNDM4YjRiNGUxODhiMTQ4YTBhYjVjYzRhZjViNjdhMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNDoxMDo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuaW5kZXggOGQyNjAzNzUxYzUxYS4uYTY5MTBhZDdjMmQwMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5AQCAtMjEyNCw2ICsyMTI0LDE3IEBAIElPIEludGVyZmFjZSBGaWxlc1xuIFx0cGFyYW1ldGVycyBhcmUgd3JpdHRlbiB0bywgXCJjdHJsXCIgYmVjb21lIFwidXNlclwiIGFuZCB0aGVcbiBcdGF1dG9tYXRpYyBjaGFuZ2VzIGFyZSBkaXNhYmxlZC5cbiBcbitcdFdoZW4gQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiBpcyBlbmFibGVkLCBcIm1vZGVsXCIgYWxzbyBhY2NlcHRzXG4rXHR0aGUgbmFtZSBvZiBhIHJlZ2lzdGVyZWQgaW9jb3N0X21vZGVsX29wcyBCUEYgc3RydWN0X29wcyBtb2RlbDpcbitcdFwibW9kZWw9XHUwMDNjbmFtZVx1MDAzZVwiIGJpbmRzIHRoZSBtb2RlbCB0byB0aGUgZGV2aWNlIGFuZCB0aGUgbW9kZWwgZnVsbHlcbitcdHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBwcmljaW5nLCBmb3IgZXZlcnkgb3BlcmF0aW9uIGluY2x1ZGluZ1xuK1x0Zmx1c2hlczsgXCJtb2RlbD1saW5lYXJcIiAob3IgXCJjdHJsPWF1dG8vdXNlclwiKSByZXN0b3JlcyB0aGUgYnVpbHRpblxuK1x0bW9kZWwuICBXcml0aW5nIGFuIHVua25vd24gbmFtZSBmYWlscyB3aXRoIEVOT0VOVC4gIFVucmVnaXN0ZXJpbmdcbitcdGEgbW9kZWwgcmVtb3ZlcyBpdHMgbmFtZTsgZGV2aWNlcyBhbHJlYWR5IGJvdW5kIGtlZXAgdXNpbmcgaXRcbitcdHVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGZvbGxvd2luZyB0aGUgbGlmZXRpbWVcbitcdG1vZGVsIG9mIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuICBTZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmhcbitcdGZvciB0aGUgbW9kZWwgaW50ZXJmYWNlLlxuK1xuIFx0V2hlbiBcIm1vZGVsXCIgaXMgXCJsaW5lYXJcIiwgdGhlIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzIGFyZVxuIFx0ZGVmaW5lZC5cbiBcbmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZ1xuaW5kZXggNzBlNGE2NmQ5NDFmZi4uOTFlODA4Zjg2ZDI4ZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL0tjb25maWdcbisrKyBiL2Jsb2NrL0tjb25maWdcbkBAIC0yMzEsNCArMjMxLDEzIEBAIGNvbmZpZyBCTEtfRVJST1JfSU5KRUNUSU9OXG4gXG4gc291cmNlIFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkXCJcbiBcbitjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHRib29sIFwiRW5hYmxlIEJQRiBwbHVnZ2FibGUgY29zdCBtb2RlbCBzdXBwb3J0IGZvciB0aGUgY29zdCBJTyBjb250cm9sbGVyXCJcbitcdGRlcGVuZHMgb24gQkxLX0NHUk9VUF9JT0NPU1QgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuK1x0aGVscFxuK1x0IEVuYWJsaW5nIHRoaXMgb3B0aW9uIHJlZ2lzdGVycyB0aGUgXCJpb2Nvc3RfbW9kZWxfb3BzXCIgQlBGXG4rXHQgc3RydWN0X29wcyB0eXBlLCB3aGljaCBhbGxvd3MgYSBCUEYgcHJvZ3JhbSB0byBmdWxseSByZXBsYWNlXG4rXHQgdGhlIGJ1aWx0aW4gbGluZWFyIGNvc3QgbW9kZWwgb24gYSBkZXZpY2UgaXQgaXMgYm91bmQgdG9cbitcdCB0aHJvdWdoIGlvLmNvc3QubW9kZWwuXG4rXG4gZW5kaWYgIyBCTE9DS1xuZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGVcbmluZGV4IGU3YmQzMjBlM2Q2OTcuLmVlNWNlYmVlYTAwNmYgMTAwNjQ0XG4tLS0gYS9ibG9jay9NYWtlZmlsZVxuKysrIGIvYmxvY2svTWFrZWZpbGVcbkBAIC0zOSwzICszOSw0IEBAIG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT04pXHQrPSBibGstY3J5cHRvLm8gYmxrLWNyeXB0by1wcm9maWxlLm8gXFxcbiBcdFx0XHRcdFx0ICAgYmxrLWNyeXB0by1zeXNmcy5vXG4gb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcdCs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xuIG9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcdCs9IGhvbGRlci5vXG4rb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRilcdCs9IGJsay1pb2Nvc3QtYnBmLm9cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjg3Mjg3MTA0NTM1MWMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTMyLDYgKzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFwiYmxrLmhcIlxuICNpbmNsdWRlIFwiYmxrLWNncm91cC5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGstaW9jb3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcImJsay1pb3ByaW8uaFwiXG4gI2luY2x1ZGUgXCJibGstdGhyb3R0bGUuaFwiXG4gXG5AQCAtMTM0MSw2ICsxMzQyLDcgQEAgdm9pZCBibGtjZ191bnBpbl9vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2NnX2NzcylcbiAgKi9cbiBzdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIHtcbitcdGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShjc3NfdG9fYmxrY2coY3NzKSk7XG4gXHQvKiB0aGlzIHByZXZlbnRzIGFueW9uZSBmcm9tIGF0dGFjaGluZyBvciBtaWdyYXRpbmcgdG8gdGhpcyBibGtjZyAqL1xuIFx0d2JfYmxrY2dfb2ZmbGluZShjc3MpO1xuIFxuQEAgLTE0NDUsNiArMTQ0Nyw3IEBAIGJsa2NnX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiBcbiBzdGF0aWMgaW50IGJsa2NnX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiB7XG4rXHRpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShjc3NfdG9fYmxrY2coY3NzKSk7XG4gXHRzdHJ1Y3QgYmxrY2cgKnBhcmVudCA9IGJsa2NnX3BhcmVudChjc3NfdG9fYmxrY2coY3NzKSk7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgYi9ibG9jay9ibGstaW9jb3N0LWJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWVjNmRmMjc5NTk5MFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYmxvY2svYmxrLWlvY29zdC1icGYuY1xuQEAgLTAsMCArMSwyNTAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogYmxrLWlvY29zdDogQlBGIHN0cnVjdF9vcHMgcGx1bWJpbmcgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscy5cbisgKlxuKyAqIFJlZ2lzdGVycyB0aGUgXCJpb2Nvc3RfbW9kZWxfb3BzXCIgc3RydWN0X29wcyB0eXBlIGFuZCBtYWludGFpbnMgdGhlXG4rICogbmFtZSByZWdpc3RyeSBvZiByZWdpc3RlcmVkIG1vZGVscy4gIEEgcmVnaXN0ZXJlZCBtb2RlbCBpcyBib3VuZCB0b1xuKyAqIGEgZGV2aWNlIHRocm91Z2ggaW8uY29zdC5tb2RlbDsgc2VlIGluY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oLlxuKyAqL1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXHUwMDNlXG4rXG4rc3RhdGljIERFRklORV9NVVRFWChpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitzdGF0aWMgTElTVF9IRUFEKGlvY29zdF9icGZfbW9kZWxzKTtcbitcbisvKlxuKyAqIFRoZSByZWdpc3RyeSBob2xkcyBhIGJwZl9zdHJ1Y3Rfb3BzX2dldCgpIHJlZmVyZW5jZSBvYnRhaW5lZCBpbiAucmVnO1xuKyAqIC51bnJlZyBkcm9wcyBpdCwgc28gdGhlIGtkYXRhIG9mIGFuIHVucmVnaXN0ZXJlZCBtb2RlbCBzdGF5cyBhbGl2ZVxuKyAqIHdoaWxlIGFueSBkZXZpY2UgaXMgc3RpbGwgYm91bmQgdG8gaXQuXG4rICovXG4rc3RydWN0IGlvY29zdF9icGZfbW9kZWwge1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbitcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHM7XG4rfTtcbitcbisvKlxuKyAqIExvb2sgdXAgYSByZWdpc3RlcmVkIG1vZGVsIGJ5IG5hbWUgYW5kIGFjcXVpcmUgYSByZWZlcmVuY2Ugb24gaXQuXG4rICogVGhlIHJlZ2lzdHJ5IGxvY2sgaXMgaGVsZCBhY3Jvc3MgbG9va3VwIGFuZCBicGZfc3RydWN0X29wc19nZXQoKSBzb1xuKyAqIHRoZSBtb2RlbCBjYW5ub3QgYmUgdW5yZWdpc3RlcmVkIGluIGJldHdlZW4uXG4rICovXG4raW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0IGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcClcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcdGludCByZXQgPSAtRU5PRU5UO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKCFzdHJjbXAobS1cdTAwM2VvcHMtXHUwMDNlbmFtZSwgbmFtZSkpIHtcbitcdFx0XHRpZiAoYnBmX3N0cnVjdF9vcHNfZ2V0KG0tXHUwMDNlb3BzKSkge1xuK1x0XHRcdFx0Km9wc3AgPSBtLVx1MDAzZW9wcztcbitcdFx0XHRcdHJldCA9IDA7XG4rXHRcdFx0fVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbit2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpXG4re1xuK1x0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqXG4raW9jb3N0X2JwZl9tb2RlbF9sb29rdXAoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKG0tXHUwMDNlb3BzID09IG9wcylcbitcdFx0XHRyZXR1cm4gbTtcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpXG4re1xuK1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XG4rXHRcdGlmIChtLVx1MDAzZW9wcy1cdTAwM2VibGtjZ19vbmxpbmUpXG4rXHRcdFx0bS1cdTAwM2VvcHMtXHUwMDNlYmxrY2dfb25saW5lKGJsa2NnKTtcbitcdH1cbit9XG4rXG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoc3RydWN0IGJsa2NnICpibGtjZylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKG0tXHUwMDNlb3BzLVx1MDAzZWJsa2NnX29mZmxpbmUpXG4rXHRcdFx0bS1cdTAwM2VvcHMtXHUwMDNlYmxrY2dfb2ZmbGluZShibGtjZyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9tb2RlbF9pbml0KHN0cnVjdCBidGYgKmJ0Zilcbit7XG4rXHRzMzIgdHlwZV9pZDtcbitcbitcdHR5cGVfaWQgPSBidGZfZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBcImlvY29zdF9tb2RlbF9vcHNcIiwgQlRGX0tJTkRfU1RSVUNUKTtcbitcdGlmICh0eXBlX2lkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgYm9vbCBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcbitcdFx0XHRcdCAgICAgICBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYWNjZXNzX2F1eCAqaW5mbylcbit7XG4rXHRyZXR1cm4gYnBmX3RyYWNpbmdfYnRmX2N0eF9hY2Nlc3Mob2ZmLCBzaXplLCB0eXBlLCBwcm9nLCBpbmZvKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG4rYnBmX2lvY29zdF9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXG4rXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0c3dpdGNoIChmdW5jX2lkKSB7XG4rI2lmZGVmIENPTkZJR19DR1JPVVBTXG4rXHRjYXNlIEJQRl9GVU5DX2NncnBfc3RvcmFnZV9nZXQ6XG4rXHRcdHJldHVybiBcdTAwMjZicGZfY2dycF9zdG9yYWdlX2dldF9wcm90bztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBicGZfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0LyogY2FsY19jb3N0KCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkICovXG4rXHRpZiAocHJvZy1cdTAwM2VzbGVlcGFibGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4rXHRcdFx0XHQgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSlcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqdW9wcyA9IHVkYXRhO1xuK1x0dTMyIG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODtcbitcbitcdHN3aXRjaCAobW9mZikge1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcywgbmFtZSk6XG4rXHRcdGlmIChicGZfb2JqX25hbWVfY3B5KG9wcy1cdTAwM2VuYW1lLCB1b3BzLVx1MDAzZW5hbWUsXG4rXHRcdFx0XHQgICAgIHNpemVvZihvcHMtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBicGZfaW9jb3N0X3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxuK3tcbitcdHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTtcbitcbitcdHJldHVybiBvcHMtXHUwMDNlY2FsY19jb3N0ID8gMCA6IC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKCFicGZfc3RydWN0X29wc19nZXQob3BzKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRtID0ga3phbGxvYyhzaXplb2YoKm0pLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbSkge1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1x0e1xuK1x0XHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqb3RoZXI7XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob3RoZXIsIFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAob3RoZXItXHUwMDNlb3BzLVx1MDAzZW5hbWUsIG9wcy1cdTAwM2VuYW1lKSkge1xuK1x0XHRcdFx0cmV0ID0gLUVFWElTVDtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0aWYgKCFyZXQpIHtcbitcdFx0bS1cdTAwM2VvcHMgPSBvcHM7XG4rXHRcdGxpc3RfYWRkKFx1MDAyNm0tXHUwMDNlbGlzdCwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMpO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1xuK1x0aWYgKHJldCkge1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0a2ZyZWUobSk7XG4rXHR9XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBicGZfaW9jb3N0X3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4re1xuK1x0c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhO1xuK1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1x0bSA9IGlvY29zdF9icGZfbW9kZWxfbG9va3VwKG9wcyk7XG4rXHRpZiAobSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZtLVx1MDAzZWxpc3QpO1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0a2ZyZWUobSk7XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfaW9jb3N0X3ZlcmlmaWVyX29wcyA9IHtcbitcdC5nZXRfZnVuY19wcm90byA9IGJwZl9pb2Nvc3RfZ2V0X2Z1bmNfcHJvdG8sXG4rXHQuaXNfdmFsaWRfYWNjZXNzID0gYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MsXG4rfTtcbitcbitzdGF0aWMgdTY0IGJwZl9pb2Nvc3RfY2FsY19jb3N0X3N0dWIodTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvcixcbitcdFx0XHRcdCAgICAgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IGZsYWdzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgX19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMgPSB7XG4rXHQuY2FsY19jb3N0ID0gYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1Yixcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2lvY29zdF9tb2RlbF9vcHMgPSB7XG4rXHQudmVyaWZpZXJfb3BzID0gXHUwMDI2YnBmX2lvY29zdF92ZXJpZmllcl9vcHMsXG4rXHQuaW5pdCA9IGJwZl9pb2Nvc3RfbW9kZWxfaW5pdCxcbitcdC5jaGVja19tZW1iZXIgPSBicGZfaW9jb3N0X2NoZWNrX21lbWJlcixcbitcdC5pbml0X21lbWJlciA9IGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXIsXG4rXHQudmFsaWRhdGUgPSBicGZfaW9jb3N0X3ZhbGlkYXRlLFxuK1x0LnJlZyA9IGJwZl9pb2Nvc3RfcmVnLFxuK1x0LnVucmVnID0gYnBmX2lvY29zdF91bnJlZyxcbitcdC5uYW1lID0gXCJpb2Nvc3RfbW9kZWxfb3BzXCIsXG4rXHQuY2ZpX3N0dWJzID0gXHUwMDI2X19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMsXG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9pb2Nvc3RfaW5pdCh2b2lkKVxuK3tcbitcdHJldHVybiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcdTAwMjZicGZfaW9jb3N0X21vZGVsX29wcywgaW9jb3N0X21vZGVsX29wcyk7XG4rfVxuK2xhdGVfaW5pdGNhbGwoYnBmX2lvY29zdF9pbml0KTtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jb3N0LmMgYi9ibG9jay9ibGstaW9jb3N0LmNcbmluZGV4IDI3NDViZmZjZDVlZWYuLmJjY2RiZDI0OTZkODMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstaW9jb3N0LmNcbisrKyBiL2Jsb2NrL2Jsay1pb2Nvc3QuY1xuQEAgLTE3Nyw2ICsxNzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhcnNlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbG9jYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9sb2NhbDY0LmhcdTAwM2VcbkBAIC00NDUsNiArNDQ2LDExIEBAIHN0cnVjdCBpb2Mge1xuIFx0aW50XHRcdFx0XHRhdXRvcF9pZHg7XG4gXHRib29sXHRcdFx0XHR1c2VyX3Fvc19wYXJhbXM6MTtcbiBcdGJvb2xcdFx0XHRcdHVzZXJfY29zdF9tb2RlbDoxO1xuK1xuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHQvKiBib3VuZCBCUEYgY29zdCBtb2RlbCwgTlVMTCA9IGJ1aWx0aW4gbGluZWFyIG1vZGVsICovXG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wc1x0X19yY3UgKm1vZGVsO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IGlvY2dfcGNwdV9zdGF0IHtcbkBAIC0yMjM4LDYgKzIyNDQsNyBAQCBzdGF0aWMgdm9pZCBpb2NfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuIFx0c3RydWN0IGlvY19ub3cgbm93O1xuIFx0TElTVF9IRUFEKHN1cnBsdXNlcyk7XG4gXHRpbnQgbnJfZGVidG9ycywgbnJfc2hvcnRhZ2VzID0gMCwgbnJfbGFnZ2luZyA9IDA7XG4rXHRpbnQgbnJfYWN0aXZlID0gMDtcbiBcdHU2NCB1c2FnZV91c19zdW0gPSAwO1xuIFx0dTMyIHBwbV9ydGhyO1xuIFx0dTMyIHBwbV93dGhyO1xuQEAgLTIyNzQsNiArMjI4MSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRcdHU2NCB2ZG9uZSwgdnRpbWUsIHVzYWdlX3VzO1xuIFx0XHR1MzIgaHdfYWN0aXZlLCBod19pbnVzZTtcbiBcbitcdFx0bnJfYWN0aXZlKys7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIENvbGxlY3QgdW51c2VkIGFuZCB3aW5kIHZ0aW1lIGNsb3NlciB0byB2bm93IHRvIHByZXZlbnRcbiBcdFx0ICogaW9jZ3MgZnJvbSBhY2N1bXVsYXRpbmcgYSBsYXJnZSBhbW91bnQgb2YgYnVkZ2V0LlxuQEAgLTI0NjAsNiArMjQ2OSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRcdGlvY19yZWZyZXNoX3ZyYXRlKGlvYywgXHUwMDI2bm93KTtcbiBcdH1cbiBcbitcdHRyYWNlX2lvY29zdF9pb2NfdGljayhpb2MsIG5yX2FjdGl2ZSwgdXNhZ2VfdXNfc3VtKTtcbitcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gfVxuIFxuQEAgLTI1NzEsMTAgKzI1ODIsMjggQEAgc3RhdGljIHZvaWQgY2FsY192dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW9jX2dxICppb2NnLFxuIFxuIHN0YXRpYyB1NjQgY2FsY192dGltZV9jb3N0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZywgYm9vbCBpc19tZXJnZSlcbiB7XG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICptb2RlbDtcbiBcdHU2NCBjb3N0O1xuIFxuLVx0Y2FsY192dGltZV9jb3N0X2J1aWx0aW4oYmlvLCBpb2NnLCBpc19tZXJnZSwgXHUwMDI2Y29zdCk7XG4tXHRyZXR1cm4gY29zdDtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG1vZGVsID0gcmN1X2RlcmVmZXJlbmNlKGlvY2ctXHUwMDNlaW9jLVx1MDAzZW1vZGVsKTtcbitcdGlmIChtb2RlbCkge1xuK1x0XHRjb3N0ID0gbW9kZWwtXHUwMDNlY2FsY19jb3N0KGJpby1cdTAwM2ViaV9vcGYsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsXG4rXHRcdFx0XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvcixcbitcdFx0XHRcdFx0aW9jZ190b19ibGtnKGlvY2cpLVx1MDAzZWJsa2NnLFxuK1x0XHRcdFx0XHRpc19tZXJnZSA/IElPQ09TVF9DT1NUX0ZfTUVSR0UgOiAwKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiBtaW4oY29zdCwgVlRJTUVfUEVSX1NFQyk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbisjZW5kaWZcbitcdHtcbitcdFx0dTY0IGNvc3Q7XG4rXG4rXHRcdGNhbGNfdnRpbWVfY29zdF9idWlsdGluKGJpbywgaW9jZywgaXNfbWVyZ2UsIFx1MDAyNmNvc3QpO1xuK1x0XHRyZXR1cm4gY29zdDtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYyxcbkBAIC0yNTk2LDEwICsyNjI1LDI4IEBAIHN0YXRpYyB2b2lkIGNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW9jICppb2MsXG4gXG4gc3RhdGljIHU2NCBjYWxjX3NpemVfdnRpbWVfY29zdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYylcbiB7XG4tXHR1NjQgY29zdDtcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxuK1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xuIFxuLVx0Y2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihycSwgaW9jLCBcdTAwMjZjb3N0KTtcbi1cdHJldHVybiBjb3N0O1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bW9kZWwgPSByY3VfZGVyZWZlcmVuY2UoaW9jLVx1MDAzZW1vZGVsKTtcbitcdGlmIChtb2RlbCBcdTAwMjZcdTAwMjYgcnEtXHUwMDNlYmlvIFx1MDAyNlx1MDAyNiBycS1cdTAwM2ViaW8tXHUwMDNlYmlfYmxrZykge1xuK1x0XHR1NjQgY29zdDtcbitcbitcdFx0Y29zdCA9IG1vZGVsLVx1MDAzZWNhbGNfY29zdChycS1cdTAwM2VjbWRfZmxhZ3MsIGJsa19ycV9ieXRlcyhycSksXG4rXHRcdFx0XHRcdGJsa19ycV9wb3MocnEpLFxuK1x0XHRcdFx0XHRycS1cdTAwM2ViaW8tXHUwMDNlYmlfYmxrZy1cdTAwM2VibGtjZywgMCk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rI2VuZGlmXG4rXHR7XG4rXHRcdHU2NCBjb3N0O1xuK1xuK1x0XHRjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHJxLCBpb2MsIFx1MDAyNmNvc3QpO1xuK1x0XHRyZXR1cm4gY29zdDtcbitcdH1cbiB9XG4gXG4gZW51bSBvdmVyX2J1ZGdldF9hY3Rpb24ge1xuQEAgLTI5MDAsNiArMjk0NywxOSBAQCBzdGF0aWMgdm9pZCBpb2NfcnFvc19leGl0KHN0cnVjdCBycV9xb3MgKnJxb3MpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmlvYy1cdTAwM2V0aW1lcik7XG4gXHRmcmVlX3BlcmNwdShpb2MtXHUwMDNlcGNwdV9zdGF0KTtcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxuK1x0e1xuK1x0XHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7XG4rXG4rXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuK1x0XHRtb2RlbCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLVx1MDAzZW1vZGVsLFxuK1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGlvYy1cdTAwM2Vtb2RlbCwgTlVMTCk7XG4rXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4rXHRcdGlmIChtb2RlbClcbitcdFx0XHRpb2Nvc3RfYnBmX21vZGVsX3B1dChtb2RlbCk7XG4rXHR9XG4rI2VuZGlmXG4gXHRrZnJlZShpb2MpO1xuIH1cbiBcbkBAIC0zNDM4LDEyICszNDk4LDMwIEBAIHN0YXRpYyB1NjQgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsKHN0cnVjdCBzZXFfZmlsZSAqc2YsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcdHtcbitcdFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsID1cbitcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlvYy1cdTAwM2Vtb2RlbCxcbitcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKSk7XG4rXG4rXHRcdHNlcV9wcmludGYoc2YsIFwiJXMgY3RybD0lcyBtb2RlbD0lcyBcIlxuK1x0XHRcdCAgIFwicmJwcz0lbGx1IHJzZXFpb3BzPSVsbHUgcnJhbmRpb3BzPSVsbHUgXCJcbitcdFx0XHQgICBcIndicHM9JWxsdSB3c2VxaW9wcz0lbGx1IHdyYW5kaW9wcz0lbGx1XFxuXCIsXG4rXHRcdFx0ICAgZG5hbWUsIG1vZGVsID8gXCJicGZcIiA6XG4rXHRcdFx0XHQgICBpb2MtXHUwMDNldXNlcl9jb3N0X21vZGVsID8gXCJ1c2VyXCIgOiBcImF1dG9cIixcbitcdFx0XHQgICBtb2RlbCA/IG1vZGVsLVx1MDAzZW5hbWUgOiBcImxpbmVhclwiLFxuK1x0XHRcdCAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSxcbitcdFx0XHQgICB1W0lfTENPRUZfUlJBTkRJT1BTXSwgdVtJX0xDT0VGX1dCUFNdLFxuK1x0XHRcdCAgIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTtcbitcdH1cbisjZWxzZVxuIFx0c2VxX3ByaW50ZihzZiwgXCIlcyBjdHJsPSVzIG1vZGVsPWxpbmVhciBcIlxuIFx0XHQgICBcInJicHM9JWxsdSByc2VxaW9wcz0lbGx1IHJyYW5kaW9wcz0lbGx1IFwiXG4gXHRcdCAgIFwid2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcXG5cIixcbiBcdFx0ICAgZG5hbWUsIGlvYy1cdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPyBcInVzZXJcIiA6IFwiYXV0b1wiLFxuIFx0XHQgICB1W0lfTENPRUZfUkJQU10sIHVbSV9MQ09FRl9SU0VRSU9QU10sIHVbSV9MQ09FRl9SUkFORElPUFNdLFxuIFx0XHQgICB1W0lfTENPRUZfV0JQU10sIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTtcbisjZW5kaWZcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzQ1Nyw2ICszNTM1LDM3IEBAIHN0YXRpYyBpbnQgaW9jX2Nvc3RfbW9kZWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogQmluZCBAbmFtZSAoZW1wdHkgPSBidWlsdGluIGxpbmVhciBtb2RlbCkgYXMgdGhlIGFjdGl2ZSBjb3N0IG1vZGVsIG9mXG4rICogQGlvYy4gIFRoZSByZWdpc3RyeSBsb29rdXAgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGhhcHBlbiBvdXRzaWRlXG4rICogaW9jLVx1MDAzZWxvY2s7IHRoZSBwb2ludGVyIHN3YXAgaGFwcGVucyB1bmRlciBpdC5cbisgKi9cbitzdGF0aWMgaW50IGlvY19icGZfbW9kZWxfYmluZChzdHJ1Y3QgaW9jICppb2MsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbmV3ID0gTlVMTCwgKm9sZDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAobmFtZVswXSkge1xuK1x0XHRyZXQgPSBpb2Nvc3RfYnBmX21vZGVsX2dldChuYW1lLCBcdTAwMjZuZXcpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKTtcbitcdG9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLVx1MDAzZW1vZGVsLFxuK1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihpb2MtXHUwMDNlbW9kZWwsIG5ldyk7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKG9sZClcbitcdFx0aW9jb3N0X2JwZl9tb2RlbF9wdXQob2xkKTtcbitcdHJldHVybiAwO1xuKyNlbHNlXG4rXHRyZXR1cm4gbmFtZVswXSA/IC1FTk9FTlQgOiAwO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBjb3N0X2N0cmxfdG9rZW5zID0ge1xuIFx0eyBDT1NUX0NUUkwsXHRcdFwiY3RybD0lc1wiXHR9LFxuIFx0eyBDT1NUX01PREVMLFx0XHRcIm1vZGVsPSVzXCJcdH0sXG5AQCAtMzQ4Miw2ICszNTkxLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiBcdHN0cnVjdCBpb2MgKmlvYztcbiBcdHU2NCB1W05SX0lfTENPRUZTXTtcbiBcdGJvb2wgdXNlcjtcbitcdGNoYXIgYnBmX21vZGVsW0lPQ09TVF9NT0RFTF9OQU1FX0xFTl07XG4gXHRjaGFyICpib2R5LCAqcDtcbiBcdGludCByZXQ7XG4gXG5AQCAtMzUxMiw2ICszNjIyLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuIFx0bWVtY3B5KHUsIGlvYy1cdTAwM2VwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7XG4gXHR1c2VyID0gaW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbDtcbitcdGJwZl9tb2RlbFswXSA9ICdcXDAnO1xuIFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcbkBAIC0zNTMzLDExICszNjQ0LDE2IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXG4gXHRcdFx0XHR1c2VyID0gdHJ1ZTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0XHRicGZfbW9kZWxbMF0gPSAnXFwwJztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0Y2FzZSBDT1NUX01PREVMOlxuIFx0XHRcdG1hdGNoX3N0cmxjcHkoYnVmLCBcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnVmKSk7XG4tXHRcdFx0aWYgKHN0cmNtcChidWYsIFwibGluZWFyXCIpKVxuLVx0XHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmLCBcImxpbmVhclwiKSkge1xuK1x0XHRcdFx0LyogYmFjayB0byB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgKi9cbitcdFx0XHRcdGJwZl9tb2RlbFswXSA9ICdcXDAnO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuK1x0XHRcdG1hdGNoX3N0cmxjcHkoYnBmX21vZGVsLCBcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnBmX21vZGVsKSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0zNTYzLDYgKzM2NzksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuIFxuK1x0LypcbitcdCAqIEJpbmQgdGhlIEJQRiBtb2RlbCBvdXRzaWRlIGlvYy1cdTAwM2Vsb2NrOiB0aGUgcmVnaXN0cnkgbG9va3VwXG4rXHQgKiB0YWtlcyB0aGUgcmVnaXN0cmF0aW9uIG11dGV4IGFuZCB0aGUgb2xkIG1vZGVsJ3MgcmVmZXJlbmNlXG4rXHQgKiBpcyBkcm9wcGVkIGFmdGVyIHRoZSBzd2FwLlxuK1x0ICovXG4rXHRpZiAoIXJldClcbitcdFx0cmV0ID0gaW9jX2JwZl9tb2RlbF9iaW5kKGlvYywgYnBmX21vZGVsKTtcbitcbiBcdGJsa19tcV91bnF1aWVzY2VfcXVldWUocSk7XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oIGIvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zYTA4NTVlZmI2MTA3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaFxuQEAgLTAsMCArMSw4MiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfTElOVVhfQkxLX0lPQ09TVF9IXG4rI2RlZmluZSBfTElOVVhfQkxLX0lPQ09TVF9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa190eXBlcy5oXHUwMDNlXG4rXG4rI2RlZmluZSBJT0NPU1RfTU9ERUxfTkFNRV9MRU5cdDE2XG4rXG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcbitzdHJ1Y3QgYmxrY2c7XG4rXG4rLypcbisgKiBQbHVnZ2FibGUgY29zdCBtb2RlbCBpbnRlcmZhY2UgZm9yIGJsay1pb2Nvc3QuXG4rICpcbisgKiBBIEJQRiBzdHJ1Y3Rfb3BzIGltcGxlbWVudGF0aW9uIHJlZ2lzdGVyZWQgYWdhaW5zdCBcImlvY29zdF9tb2RlbF9vcHNcIlxuKyAqIGZ1bGx5IHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBtb2RlbCBvbiB0aGUgZGV2aWNlcyBpdCBpcyBib3VuZCB0b1xuKyAqIHRocm91Z2ggaW8uY29zdC5tb2RlbC4gIFRoZSBtb2RlbCBvd25zIHByaWNpbmcgZm9yIGV2ZXJ5IElPIG9uIGEgYm91bmRcbisgKiBkZXZpY2U6IGl0IHByaWNlcyBhbGwgb3BlcmF0aW9ucywgaW5jbHVkaW5nIGZsdXNoZXMsIGFuZCBib3RoIHRoZSBiaW9cbisgKiBjaGFyZ2luZyBwYXRoIGFuZCB0aGUgcmVxdWVzdC1sZXZlbCBzaXppbmcgcGF0aCBjb25zdWx0IGl0LlxuKyAqXG4rICogY2FsY19jb3N0KCkgaXMgY2FsbGVkIGZyb20gdGhlIElPIHN1Ym1pc3Npb24gcGF0aCB3aXRoIFJDVSByZWFkIGxvY2tcbisgKiBoZWxkIGFuZCBtdXN0IG5vdCBzbGVlcC4gIEl0IHJldHVybnMgdGhlIGNvc3Qgb2YgdGhlIElPIGluIHZ0aW1lXG4rICogdW5pdHMsIHdoZXJlIDEgc2Vjb25kIG9mIGRldmljZSB0aW1lIGVxdWFscyBWVElNRV9QRVJfU0VDICgyXjM3LFxuKyAqIGF2YWlsYWJsZSB0byBCUEYgcHJvZ3JhbXMgdGhyb3VnaCB2bWxpbnV4LmgpLiAgVGhlIHJldHVybmVkIHZhbHVlIGlzXG4rICogY2xhbXBlZCB0byAxIHNlY29uZCBvZiBkZXZpY2UgdGltZSBwZXIgSU8uXG4rICpcbisgKiBUaGUgbW9kZWwgaXMgcGFzc2VkIHRoZSBibGtjZyBvZiB0aGUgaXNzdWluZyBjZ3JvdXAgc28gaXQgY2FuIGtlZXBcbisgKiBwZXItY2dyb3VwIHN0YXRlLiAgYmxrY2dfb25saW5lKCkvYmxrY2dfb2ZmbGluZSgpIGFyZSBvcHRpb25hbFxuKyAqIGNhbGxiYWNrcyBtaXJyb3JpbmcgdGhlIGJsa2NnIGNzcyBsaWZlY3ljbGU6IHN0YXRlIGNyZWF0ZWQgb24gb25saW5lXG4rICogKG9yIGxhemlseSBvbiBmaXJzdCB1c2UpIG11c3QgYmUgcmVsZWFzZWQgb24gb2ZmbGluZS5cbisgKlxuKyAqIFRoZSByZWdpc3RyYXRpb24gYW5kIGJpbmRpbmcgbW9kZWwgZm9sbG93cyB0aGUgVENQIGNvbmdlc3Rpb25cbisgKiBjb250cm9sIGZyYW1ld29yazogcmVnaXN0ZXJpbmcgYSBzdHJ1Y3Rfb3BzIG1ha2VzIHRoZSBtb2RlbCBhdmFpbGFibGVcbisgKiBieSBpdHMgbmFtZSwgd2hpbGUgaW8uY29zdC5tb2RlbCBiaW5kcyBvbmUgcmVnaXN0ZXJlZCBtb2RlbCB0byBhXG4rICogZGV2aWNlLiAgVW5yZWdpc3RlcmluZyByZW1vdmVzIHRoZSBuYW1lIGZyb20gdGhlIHJlZ2lzdHJ5OyBkZXZpY2VzXG4rICogYWxyZWFkeSBib3VuZCBrZWVwIHVzaW5nIGl0IHVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW5cbisgKiBtb2RlbC5cbisgKi9cbitcbisjZGVmaW5lIElPQ09TVF9NT0RFTF9OQU1FX0xFTlx0MTZcbitcbisvKlxuKyAqIGlvY29zdC1zcGVjaWZpYyBjYWxsIG1ldGFkYXRhIGZvciBjYWxjX2Nvc3QoKSdzIG1vZGVsX2ZsYWdzXG4rICogYXJndW1lbnQ7IGV2ZXJ5dGhpbmcgZWxzZSwgaW5jbHVkaW5nIFJFUV9QUkVGTFVTSC9SRVFfRlVBLCBpc1xuKyAqIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgb3BmIGFyZ3VtZW50XG4rICovXG4rI2RlZmluZSBJT0NPU1RfQ09TVF9GX01FUkdFXHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcdC8qIGNhbGxlZCBmcm9tIG1lcmdlIHBhdGggKi9cbitcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyB7XG4rXHR1NjQgKCpjYWxjX2Nvc3QpKHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHNlY3Rvcl90IHNlY3RvcixcbitcdFx0XHQgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKTtcbitcdHZvaWQgKCpibGtjZ19vbmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuK1x0dm9pZCAoKmJsa2NnX29mZmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuK1xuK1x0LyogbW9kZWwgbmFtZSwgdXNlZCB0byBzZWxlY3QgdGhlIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCAqL1xuK1x0Y2hhciBuYW1lWzE2XTtcbit9O1xuK1xuK2ludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdCBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApO1xuK3ZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyk7XG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcbitcbisjZWxzZVx0LyogQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiAqL1xuK1xuK3N0cnVjdCBibGtjZztcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcztcbitcbitzdGF0aWMgaW5saW5lIGludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH1cbitcbisjZW5kaWZcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cbisjZW5kaWZcdC8qIF9MSU5VWF9CTEtfSU9DT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXG5pbmRleCBlNzcyYjFiYzYwZDYwLi4yYjlmZjM0OGE0ZjUxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXG5AQCAtMTc4LDYgKzE3OCw0NiBAQCBUUkFDRV9FVkVOVChpb2Nvc3RfaW9jX3ZyYXRlX2FkaixcbiBcdClcbiApO1xuIFxuKy8qXG4rICogUGVyaW9kaWMgcGVyLWRldmljZSBzdW1tYXJ5LCBlbWl0dGVkIG9uY2UgcGVyIHBlcmlvZCBmcm9tIHRoZSB0YWlsIG9mXG4rICogaW9jX3RpbWVyX2ZuKCkuICBVbmxpa2UgdGhlIHN0YXRlLWNoYW5nZSBldmVudHMgYWJvdmUsIHRoaXMgZmlyZXMgZXZlcnlcbisgKiBwZXJpb2QgdGhlIGNvbnRyb2xsZXIgaXMgcnVubmluZywgaW5jbHVkaW5nIHN0ZWFkeSBzdGF0ZXMsIGFuZCBjYXJyaWVzXG4rICogdGhlIG92ZXJhbGwgY29udHJvbGxlciBzdGF0ZSBzbyBiYXNpYyBtb25pdG9yaW5nIGRvZXNuJ3QgcmVxdWlyZSBkcmduLlxuKyAqL1xuK1RSQUNFX0VWRU5UKGlvY29zdF9pb2NfdGljayxcbitcbitcdFRQX1BST1RPKHN0cnVjdCBpb2MgKmlvYywgaW50IG5yX2FjdGl2ZSwgdTY0IHVzYWdlX3VzX3N1bSksXG4rXG4rXHRUUF9BUkdTKGlvYywgbnJfYWN0aXZlLCB1c2FnZV91c19zdW0pLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeSAoXG4rXHRcdF9fc3RyaW5nKGRldm5hbWUsIGlvY19uYW1lKGlvYykpXG4rXHRcdF9fZmllbGQodTMyLCBwZXJpb2RfdXMpXG4rXHRcdF9fZmllbGQodTY0LCB2cmF0ZSlcbitcdFx0X19maWVsZChpbnQsIGJ1c3lfbGV2ZWwpXG4rXHRcdF9fZmllbGQoaW50LCBucl9hY3RpdmUpXG4rXHRcdF9fZmllbGQodTMyLCB1c2FnZV9wY3QpXG4rXHRcdF9fZmllbGQoaW50LCBydW5uaW5nKVxuK1x0KSxcbitcbitcdFRQX2Zhc3RfYXNzaWduKFxuK1x0XHRfX2Fzc2lnbl9zdHIoZGV2bmFtZSk7XG4rXHRcdF9fZW50cnktXHUwMDNlcGVyaW9kX3VzID0gaW9jLVx1MDAzZXBlcmlvZF91cztcbitcdFx0X19lbnRyeS1cdTAwM2V2cmF0ZSA9IGlvYy1cdTAwM2V2dGltZV9iYXNlX3JhdGU7XG4rXHRcdF9fZW50cnktXHUwMDNlYnVzeV9sZXZlbCA9IGlvYy1cdTAwM2VidXN5X2xldmVsO1xuK1x0XHRfX2VudHJ5LVx1MDAzZW5yX2FjdGl2ZSA9IG5yX2FjdGl2ZTtcbitcdFx0X19lbnRyeS1cdTAwM2V1c2FnZV9wY3QgPSBpb2MtXHUwMDNlcGVyaW9kX3VzID9cbitcdFx0XHRkaXZfdTY0KHVzYWdlX3VzX3N1bSAqIDEwMCwgaW9jLVx1MDAzZXBlcmlvZF91cykgOiAwO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXJ1bm5pbmcgPSBpb2MtXHUwMDNlcnVubmluZztcbitcdCksXG4rXG4rXHRUUF9wcmludGsoXCJbJXNdIHBlcmlvZD0ldXVzIHZyYXRlPSVsbHUgYnVzeT0lZCBhY3RpdmU9JWQgdXNhZ2U9JXUlJSBydW5uaW5nPSVkXCIsXG4rXHRcdF9fZ2V0X3N0cihkZXZuYW1lKSwgX19lbnRyeS1cdTAwM2VwZXJpb2RfdXMsIF9fZW50cnktXHUwMDNldnJhdGUsXG4rXHRcdF9fZW50cnktXHUwMDNlYnVzeV9sZXZlbCwgX19lbnRyeS1cdTAwM2Vucl9hY3RpdmUsIF9fZW50cnktXHUwMDNldXNhZ2VfcGN0LFxuK1x0XHRfX2VudHJ5LVx1MDAzZXJ1bm5pbmdcbitcdClcbispO1xuK1xuIFRSQUNFX0VWRU5UKGlvY29zdF9pb2NnX2ZvcmdpdmVfZGVidCxcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBpb2NfZ3EgKmlvY2csIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBpb2Nfbm93ICpub3csXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbmluZGV4IDJmNzk2ODhkY2Y3Y2UuLjY3YTYzMGNiNTYxNDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5AQCAtMTM4LDMgKzEzOCw1IEBAIENPTkZJR19TTUNfSFNfQ1RSTF9CUEY9eVxuIENPTkZJR19ESUJTPXlcbiBDT05GSUdfRElCU19MTz15XG4gQ09ORklHX1BNX1dBS0VMT0NLUz15XG4rQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbitDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTkzNDRiMTNmYmE5OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaW9jb3N0X21vZGVsLmNcbkBAIC0wLDAgKzEsMTkzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcImlvY29zdF9tb2RlbC5za2VsLmhcIlxuKyNpbmNsdWRlIFwiaW9jb3N0X21zLnNrZWwuaFwiXG4rXG4rLypcbisgKiBXcml0ZSBhIGxpbmUgdG8gaW8uY29zdC5tb2RlbCB3aXRoIHdyaXRlKDIpIGFuZCByZXR1cm4gdGhlIGVycm5vIG9mXG4rICogdGhlIGZhaWxlZCB3cml0ZSwgb3IgMCBvbiBzdWNjZXNzLiAgc3RkaW8gaXMgbm90IHVzZWQgaGVyZSBvblxuKyAqIHB1cnBvc2U6IHRoZSBrZXJuZWwncyByZWplY3Rpb24gaGFwcGVucyBpbiB0aGUgd3JpdGUoKSBzeXNjYWxsLFxuKyAqIG5vdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBjb3B5LCBhbmQgZXZlcnkgd3JpdGUsIGluY2x1ZGluZ1xuKyAqIHRoZSBlcnJvciBwYXRocyBvZiB0aGUgY2FsbGVycyBiZWxvdywgaXMgY2hlY2tlZC5cbisgKi9cbitzdGF0aWMgaW50IHdyaXRlX2Nvc3RfbW9kZWwoY29uc3QgY2hhciAqYnVmKVxuK3tcbitcdGludCBmZCwgZXJyID0gMDtcbitcdHNzaXplX3QgbjtcbitcbitcdGZkID0gb3BlbihcIi9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWxcIiwgT19XUk9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJybm87XG4rXHRuID0gd3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpO1xuK1x0aWYgKG4gXHUwMDNjIDApXG4rXHRcdGVyciA9IGVycm5vO1xuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBSZWFkIGJhY2sgdGhlIGlvLmNvc3QubW9kZWwgbGluZSBvZiBkZXYgYW5kIGNvcHkgdGhlIG1vZGVsPSB2YWx1ZVxuKyAqIGludG8gQG1vZGVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4rICovXG4rc3RhdGljIGludCByZWFkYmFja19tb2RlbChjb25zdCBjaGFyICpkZXYsIGNoYXIgKm1vZGVsLCBzaXplX3QgbW9kZWxfc3opXG4re1xuK1x0Y2hhciBsaW5lWzI1Nl0sIHdvcmRbMjU2XSwgKm0sICplbmQ7XG4rXHRGSUxFICpmcDtcbitcdGludCBmb3VuZCA9IDA7XG4rXG4rXHRmcCA9IGZvcGVuKFwiL3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5tb2RlbFwiLCBcInJcIik7XG4rXHRpZiAoIWZwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHtcbitcdFx0aWYgKHNzY2FuZihsaW5lLCBcIiUyNTVzXCIsIHdvcmQpID09IDEgXHUwMDI2XHUwMDI2ICFzdHJjbXAod29yZCwgZGV2KSkge1xuK1x0XHRcdGZvdW5kID0gMTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0ZmNsb3NlKGZwKTtcbitcdGlmICghZm91bmQpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdG0gPSBzdHJzdHIobGluZSwgXCJtb2RlbD1cIik7XG4rXHRpZiAoIW0pXG4rXHRcdHJldHVybiAtMTtcbitcdG0gKz0gc3RybGVuKFwibW9kZWw9XCIpO1xuK1x0ZW5kID0gbTtcbitcdHdoaWxlICgqZW5kIFx1MDAyNlx1MDAyNiAhaXNzcGFjZSgqZW5kKSlcbitcdFx0ZW5kKys7XG4rXHRzbnByaW50Zihtb2RlbCwgbW9kZWxfc3osIFwiJS4qc1wiLCAoaW50KShlbmQgLSBtKSwgbSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBCaW5kIHRoZSBuYW1lZCBtb2RlbCB0byBhIGRldmljZSB3aXRoIFwibW9kZWw9XHUwMDNjbmFtZVx1MDAzZVwiLCB2ZXJpZnkgdGhlXG4rICogcmVhZGJhY2sgYW5kIHJlc3RvcmUgdGhlIGJ1aWx0aW4gbW9kZWwuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW50IGJpbmRfbW9kZWwoY29uc3QgY2hhciAqZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGNoYXIgYnVmWzMwMF0sIGdvdFs2NF07XG4rXHRpbnQgZXJyO1xuK1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlcyBtb2RlbD0lc1xcblwiLCBkZXYsIG5hbWUpO1xuK1x0ZXJyID0gd3JpdGVfY29zdF9tb2RlbChidWYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRDSEVDSyhmYWxzZSwgXCJ3cml0ZV9tb2RlbFwiLCBcIndyaXRlIG1vZGVsPSVzOiAlc1xcblwiLCBuYW1lLFxuK1x0XHQgICAgICBzdHJlcnJvcihlcnIpKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0ZXJyID0gcmVhZGJhY2tfbW9kZWwoZGV2LCBnb3QsIHNpemVvZihnb3QpKTtcbitcdGlmIChlcnIgfHwgc3RyY21wKGdvdCwgbmFtZSkpIHtcbitcdFx0Q0hFQ0soZmFsc2UsIFwicmVhZGJhY2tfbW9kZWxcIiwgXCJnb3QgbW9kZWw9JXMgd2FudCAlc1xcblwiLFxuK1x0XHQgICAgICBlcnIgPyBcIihub25lKVwiIDogZ290LCBuYW1lKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0LyogcmVzdG9yZSB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWw7IHRoZSB3cml0ZSBpcyBjaGVja2VkIHRvbyAqL1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlcyBtb2RlbD1saW5lYXJcXG5cIiwgZGV2KTtcbitcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcbitcdGlmIChlcnIpIHtcbitcdFx0Q0hFQ0soZmFsc2UsIFwicmVzdG9yZV9saW5lYXJcIiwgXCJ3cml0ZSBtb2RlbD1saW5lYXI6ICVzXFxuXCIsXG4rXHRcdCAgICAgIHN0cmVycm9yKGVycikpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBUaGUgZGV2IGFyZ3VtZW50IG11c3QgYmUgcHJlc2VudCBpbiBpby5jb3N0LnFvcyBhbHJlYWR5LCB3aGljaFxuKyAqIG1lYW5zIGlvY29zdCBpcyBlbmFibGVkIGZvciBpdC5cbisgKi9cbitzdGF0aWMgaW50IGRldl9oYXNfaW9jb3N0KGNvbnN0IGNoYXIgKmRldilcbit7XG4rXHRjaGFyIGxpbmVbMjU2XSwgd29yZFsyNTZdO1xuK1x0RklMRSAqZnA7XG4rXHRpbnQgZm91bmQgPSAwO1xuK1xuK1x0ZnAgPSBmb3BlbihcIi9zeXMvZnMvY2dyb3VwL2lvLmNvc3QucW9zXCIsIFwiclwiKTtcbitcdGlmICghZnApXG4rXHRcdHJldHVybiAwO1xuK1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XG4rXHRcdGlmIChzc2NhbmYobGluZSwgXCIlMjU1c1wiLCB3b3JkKSA9PSAxIFx1MDAyNlx1MDAyNiAhc3RyY21wKHdvcmQsIGRldikpIHtcbitcdFx0XHRmb3VuZCA9IDE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGZjbG9zZShmcCk7XG4rXHRyZXR1cm4gZm91bmQ7XG4rfVxuK1xuKy8qXG4rICogQmluZCB0aGUgMnggZXhhbXBsZSBtb2RlbCBhbmQgdmVyaWZ5IHRoZSBpby5jb3N0Lm1vZGVsIHJlYWRiYWNrLlxuKyAqIElPIGFjY291bnRpbmcgaXRzZWxmIGlzIG5vdCBjaGVja2VkIGhlcmU7IGl0IG5lZWRzIGEgZGV2aWNlIGRvaW5nXG4rICogcmVhbCBJTyB1bmRlciBpb2Nvc3QgYW5kIGlzIGNvdmVyZWQgYnkgdGhlIGtlcm5lbC1zaWRlIHZhbGlkYXRpb25cbisgKiBkZXNjcmliZWQgaW4gdGhlIGNvdmVyIGxldHRlci5cbisgKlxuKyAqIFJlcXVpcmVzIHJvb3QsIGNncm91cCB2MiBhbmQgYSBkZXZpY2Ugd2l0aCBpb2Nvc3Qgc3VwcG9ydC4gIFRoZVxuKyAqIGRldmljZSBtdXN0IGJlIGdpdmVuIGFzIG1ham9yOm1pbm9yIGluICRJT0NPU1RfVEVTVF9ERVYsIG90aGVyd2lzZVxuKyAqIHRoZSB0ZXN0IGlzIHNraXBwZWQuXG4rICovXG4rdm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWwodm9pZClcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsICpza2VsO1xuK1x0Y2hhciBidWZbMzAwXSwgKmRldjtcbitcdGludCBlcnI7XG4rXG4rXHRkZXYgPSBnZXRlbnYoXCJJT0NPU1RfVEVTVF9ERVZcIik7XG4rXHRpZiAoIWRldiB8fCBnZXRldWlkKCkgIT0gMCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdGlmICghQVNTRVJUX1RSVUUoZGV2X2hhc19pb2Nvc3QoZGV2KSwgXCJpb2Nvc3RfbW91bnRlZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIG5lZ2F0aXZlOiBiaW5kaW5nIGFuIHVua25vd24gbW9kZWwgbmFtZSBtdXN0IGJlIHJlamVjdGVkLFxuK1x0ICogc28gYSB0eXBvIGNhbm5vdCBzaWxlbnRseSBkaXNhYmxlIGNvc3QgbW9kZWwgdXBkYXRlc1xuK1x0ICovXG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVzIG1vZGVsPW5vX3N1Y2hfbW9kZWxcXG5cIiwgZGV2KTtcbitcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcbitcdEFTU0VSVF9FUShlcnIsIEVOT0VOVCwgXCJ1bmtub3duX21vZGVsX3JlamVjdGVkXCIpO1xuK1xuK1x0c2tlbCA9IGlvY29zdF9tb2RlbF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIGF0dGFjaGluZyB0aGUgc3RydWN0X29wcyByZWdpc3RlcnMgdGhlIG1vZGVsIGJ5IG5hbWUgKi9cbitcdGVyciA9IGlvY29zdF9tb2RlbF9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKEFTU0VSVF9PSyhlcnIsIFwiYXR0YWNoXCIpKVxuK1x0XHRBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsIFwiaW9jb3N0XzJ4XCIpLCBcImJpbmRfYW5kX3JlYWRiYWNrXCIpO1xuK1xuK1x0aW9jb3N0X21vZGVsX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIFNhbWUgY2hlY2sgZm9yIHRoZSBtdWx0aS1zdHJlYW0gZXhhbXBsZSBtb2RlbC4gIE9ubHkgb25lIG1vZGVsIGNhblxuKyAqIGJlIGJvdW5kIHRvIGEgZGV2aWNlIGF0IGEgdGltZTsgYm90aCB0ZXN0cyBiaW5kIGFuZCByZXN0b3JlLCBzb1xuKyAqIHRoZXkgYXJlIHNlcmlhbCBhbmQgaW5kZXBlbmRlbnQuXG4rICovXG4rdm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWxfc3RyZWFtcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBpb2Nvc3RfbXMgKnNrZWw7XG4rXHRjaGFyICpkZXY7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZGV2ID0gZ2V0ZW52KFwiSU9DT1NUX1RFU1RfREVWXCIpO1xuK1x0aWYgKCFkZXYgfHwgZ2V0ZXVpZCgpICE9IDApIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksIFwiaW9jb3N0X21vdW50ZWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHNrZWwgPSBpb2Nvc3RfbXNfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBpb2Nvc3RfbXNfX2F0dGFjaChza2VsKTtcbitcdGlmIChBU1NFUlRfT0soZXJyLCBcImF0dGFjaFwiKSlcbitcdFx0QVNTRVJUX09LKGJpbmRfbW9kZWwoZGV2LCBcImlvY29zdF9tc1wiKSwgXCJiaW5kX2FuZF9yZWFkYmFja1wiKTtcbitcbitcdGlvY29zdF9tc19fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjhhZDQxN2IzNTg0OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5AQCAtMCwwICsxLDExNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBFeGFtcGxlIGlvY29zdCBjb3N0IG1vZGVsOiB0aGUgYnVpbHRpbiBsaW5lYXIgSEREIGZvcm11bGEgd2l0aCBhbGxcbisgKiBjb3N0cyBkb3VibGVkLlxuKyAqXG4rICogVGhlIGNvbnN0YW50cyBtaXJyb3Igd2hhdCBjYWxjX2xjb2VmcygpIGRlcml2ZXMgZnJvbSB0aGUgQVVUT1BfSEREXG4rICogZGVmYXVsdHMgKHJicHM9MTc0MDE5MTc2IHJzZXFpb3BzPTQxNzA4IHJyYW5kaW9wcz0zNzAsIHctc2lkZVxuKyAqIGFuYWxvZykgaW4gdnRpbWUgdW5pdHMgd2hlcmUgMXMgPT0gMl4zNywgZXhwcmVzc2VkIHdpdGggdGhlIHNhbWVcbisgKiByb3VuZC11cCBkaXZpc2lvbnMgc28gdGhleSBjYW5ub3QgZHJpZnQgZnJvbSB0aGUga2VybmVsLiAgQSBkZXZpY2VcbisgKiBib3VuZCB0byB0aGlzIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCBjaGFyZ2VzIGV4YWN0bHkgdHdpY2UgdGhlXG4rICogYnVpbHRpbiBtb2RlbCB1bmRlciB0aGUgc2FtZSB3b3JrbG9hZCwgd2hpY2ggbWFrZXMgaXQgYSBjb252ZW5pZW50XG4rICogd2F5IHRvIHZlcmlmeSB0aGF0IGFjY291bnRpbmcgZ29lcyB0aHJvdWdoIHRoZSBCUEYgcGF0aC5cbisgKlxuKyAqIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nXG4rICogZmx1c2hlczogdGhlcmUgaXMgbm8gZmFsbGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGEgZGF0YWxlc3NcbisgKiBXUklURXxSRVFfUFJFRkxVU0ggaXMgcHJpY2VkIGFzIGEgb25lLXBhZ2Ugd3JpdGUuXG4rICovXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbisvKiBWVElNRV9QRVJfU0VDIGNvbWVzIGZyb20gdm1saW51eC5oIChhIEJURiBlbnVtIGNvbnN0YW50KSAqL1xuKyNkZWZpbmUgSU9DX1BBR0VfU0laRVx0XHQ0MDk2XG4rI2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUXHQzXHQvKiA1MTJCIHNlY3RvcnMgdG8gNGtCIHBhZ2VzICovXG4rI2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVNcdDQwOTZcdC8qIDE2TUIgc2VlayB0aHJlc2hvbGQgKi9cbisjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAwKVx0Lyogbm90IGluIEJURjogYSBwbGFpbiBtYWNybyAqL1xuKyNkZWZpbmUgSU9DT1NUX1JFUV9PUF9NQVNLXHQweGZmXHRcdC8qIFJFUV9PUF9NQVNLLCBub3QgaW4gQlRGICovXG4rXG4rLypcbisgKiBESVY2NF9VNjRfUk9VTkRfVVAgLyBESVZfUk9VTkRfVVBfVUxMIGVxdWl2YWxlbnRzLCBmb2xkZWQgYXRcbisgKiBjb21waWxlIHRpbWVcbisgKi9cbisjZGVmaW5lIFJVKHgsIHkpXHRcdCgoeCkgLyAoeSkgKyAoKCh4KSAlICh5KSkgPyAxIDogMCkpXG4rXG4rI2RlZmluZSBSQlBTXHQxNzQwMTkxNzZVTExcbisjZGVmaW5lIFJTRVFJT1BTXHQ0MTcwOFVMTFxuKyNkZWZpbmUgUlJBTkRJT1BTXHQzNzBVTExcbisjZGVmaW5lIFdCUFNcdDE3ODA3NTg2NlVMTFxuKyNkZWZpbmUgV1NFUUlPUFNcdDQyNzA1VUxMXG4rI2RlZmluZSBXUkFORElPUFNcdDM3OFVMTFxuK1xuKyNkZWZpbmUgUlBBR0VcdChSVShWVElNRV9QRVJfU0VDLCBSVShSQlBTLCBJT0NfUEFHRV9TSVpFKSkpXG4rI2RlZmluZSBSU0VRSU9cdChSVShWVElNRV9QRVJfU0VDLCBSU0VRSU9QUykgLSBSUEFHRSlcbisjZGVmaW5lIFJSQU5ESU9cdChSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpXG4rI2RlZmluZSBXUEFHRVx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFdCUFMsIElPQ19QQUdFX1NJWkUpKSlcbisjZGVmaW5lIFdTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdTRVFJT1BTKSAtIFdQQUdFKVxuKyNkZWZpbmUgV1JBTkRJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSlcbitcbisvKlxuKyAqIHBlci1jZ3JvdXAgY3Vyc29yIHN0b3JhZ2U6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXQsIHNvXG4rICogdGhlIG1vZGVsIG5ldmVyIGxlYWtzIG9yIHJldXNlcyBzdGFsZSBwZXItY2dyb3VwIHN0YXRlXG4rICovXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQ0dSUF9TVE9SQUdFKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbit9IGN1cnNvcl9zdG9yZSBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rdTY0IEJQRl9QUk9HKGlvY29zdF8yeF9jYWxjX2Nvc3QsIHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHU2NCBzZWN0b3IsXG4rXHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncylcbit7XG4rXHR1NjQgcGFnZXMsIHNlZWtfcGFnZXMgPSAwLCBiYXNlLCBjb2VmX3BhZ2UsIHJhbmRpbywgY29zdDtcbitcbitcdGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7XG4rXHRcdGJhc2UgPSBSU0VRSU87IGNvZWZfcGFnZSA9IFJQQUdFOyByYW5kaW8gPSBSUkFORElPO1xuK1x0fSBlbHNlIGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9XUklURSkge1xuK1x0XHRiYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTztcbitcdH0gZWxzZSB7XG4rXHRcdC8qXG4rXHRcdCAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd25cbitcdFx0ICogb3BzIGFyZSBwcmljZWQgYXMgYSBzaW5nbGUgcGFnZSB3cml0ZVxuK1x0XHQgKi9cbitcdFx0YmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIG1pcnJvciB0aGUgYnVpbHRpbiBzaW5nbGUgcGVyLWNncm91cCBjdXJzb3I6IHRoZSBtb2RlbCBrZWVwc1xuK1x0ICogaXRzIG93biBjdXJzb3Iga2V5ZWQgYnkgdGhlIGJsa2NnIGFyZ3VtZW50XG4rXHQgKi9cbitcdHtcbitcdFx0X191NjQgKmN1cnNvciwgY3VyO1xuK1xuK1x0XHRjdXJzb3IgPSBicGZfY2dycF9zdG9yYWdlX2dldChcdTAwMjZjdXJzb3Jfc3RvcmUsXG4rXHRcdFx0XHRcdCAgICAgIGJsa2NnLVx1MDAzZWNzcy5jZ3JvdXAsIE5VTEwsXG4rXHRcdFx0XHRcdCAgICAgIEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7XG4rXHRcdGlmICghY3Vyc29yKVxuK1x0XHRcdHJldHVybiAyICogKGJhc2UgKyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlKTtcbitcdFx0Y3VyID0gKmN1cnNvcjtcbitcdFx0c2Vla19wYWdlcyA9IHNlY3RvciBcdTAwM2UgY3VyID8gc2VjdG9yIC0gY3VyIDogY3VyIC0gc2VjdG9yO1xuK1x0XHRzZWVrX3BhZ2VzIFx1MDAzZVx1MDAzZT0gSU9DX1NFQ1RfVE9fUEFHRV9TSElGVDtcbitcdFx0aWYgKHNlZWtfcGFnZXMgXHUwMDNlIExDT0VGX1JBTkRJT19QQUdFUylcbitcdFx0XHRiYXNlID0gcmFuZGlvO1xuK1x0XHRpZiAoIShtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkpXG4rXHRcdFx0KmN1cnNvciA9IHNlY3RvciArIFJVKG5ieXRlcywgNTEyKTtcbitcdH1cbitcbitcdHBhZ2VzID0gUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKTtcbitcdGlmICghcGFnZXMpXG4rXHRcdHBhZ2VzID0gMTtcdC8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqL1xuK1x0aWYgKG1vZGVsX2ZsYWdzIFx1MDAyNiBJT0NPU1RfQ09TVF9GX01FUkdFKVxuK1x0XHRiYXNlID0gMDtcbitcbitcdGNvc3QgPSAyICogKGJhc2UgKyBwYWdlcyAqIGNvZWZfcGFnZSk7XG4rXHRyZXR1cm4gY29zdDtcbit9XG4rXG4rU0VDKFwiLnN0cnVjdF9vcHNcIilcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfMnggPSB7XG4rXHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfMnhfY2FsY19jb3N0LFxuK1x0Lm5hbWUgPSBcImlvY29zdF8yeFwiLFxuK307XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2NjNTdjMDNkM2M4OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5AQCAtMCwwICsxLDEzNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBFeGFtcGxlIG11bHRpLXN0cmVhbSBzZXF1ZW50aWFsaXR5IGRldGVjdGlvbiBjb3N0IG1vZGVsLlxuKyAqXG4rICogVGhlIGJ1aWx0aW4gbW9kZWwga2VlcHMgYSBzaW5nbGUgY3Vyc29yIHBlciBjZ3JvdXAsIHNvIHR3b1xuKyAqIGludGVybGVhdmVkIHNlcXVlbnRpYWwgcmVhZGVycyBpbiBvbmUgY2dyb3VwIGFyZSBhbGwgcHJpY2VkIHJhbmRvbVxuKyAqIChtZWFzdXJlZCA4OXggb3ZlcmNoYXJnZSwgMTIuOXggdGhyb3VnaHB1dCBjb2xsYXBzZSksIHdoaWxlIHJhbmRvbVxuKyAqIElPIGluc2lkZSBhIGhvdCB3aW5kb3cgc21hbGxlciB0aGFuIHRoZSAxNk1CIHNlZWsgdGhyZXNob2xkIGlzXG4rICogcHJpY2VkIHNlcXVlbnRpYWwgKG1lYXN1cmVkIDEwN3ggdW5kZXJjaGFyZ2UpLiAgVGhpcyBtb2RlbCByZXBsYWNlc1xuKyAqIHRoZSBzaW5nbGUgY3Vyc29yIHdpdGggYSBwZXItY2dyb3VwIHRhYmxlIG9mIHN0cmVhbSBzbG90czogYW4gSU8gaXNcbisgKiBzZXF1ZW50aWFsIGlmZiBpdHMgc2VjdG9yIG1hdGNoZXMgdGhlIGV4cGVjdGVkIG5leHQgc2VjdG9yIG9mIGFueVxuKyAqIHRyYWNrZWQgc3RyZWFtLiAgSW50ZXJsZWF2ZWQgc3RyZWFtcyBrZWVwIHRoZWlyIG93biBzbG90cywgYW5kXG4rICogd2luZG93ZWQgcmFuZG9tIElPIHJhcmVseSBtYXRjaGVzIGEgbW92aW5nIGV4cGVjdGF0aW9uLlxuKyAqXG4rICogU3RyZWFtIHN0YXRlIGxpdmVzIGluIGEgQ0dSUF9TVE9SQUdFIG1hcCwgc28gaXQgaXMgY3JlYXRlZCBhbmRcbisgKiBmcmVlZCB3aXRoIHRoZSBjZ3JvdXAuICBUaGUgbW9kZWwgaW1wbGVtZW50cyB0aGUgZnVsbCBidWlsdGluXG4rICogbGluZWFyIGZvcm11bGEgaXRzZWxmLCBpbmNsdWRpbmcgZmx1c2ggcHJpY2luZy5cbisgKi9cbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuKy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovXG4rI2RlZmluZSBJT0NfUEFHRV9TSVpFXHRcdDQwOTZcbisjZGVmaW5lIElPQ19TRUNUX1RPX1BBR0VfU0hJRlRcdDNcdC8qIDUxMkIgc2VjdG9ycyB0byA0a0IgcGFnZXMgKi9cbisjZGVmaW5lIExDT0VGX1JBTkRJT19QQUdFU1x0NDA5Nlx0LyogMTZNQiBzZWVrIHRocmVzaG9sZCAqL1xuKyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXHQvKiBub3QgaW4gQlRGOiBhIHBsYWluIG1hY3JvICovXG4rI2RlZmluZSBJT0NPU1RfUkVRX09QX01BU0tcdDB4ZmZcdFx0LyogUkVRX09QX01BU0ssIG5vdCBpbiBCVEYgKi9cbitcbisvKlxuKyAqIERJVjY0X1U2NF9ST1VORF9VUCAvIERJVl9ST1VORF9VUF9VTEwgZXF1aXZhbGVudHMsIGZvbGRlZCBhdFxuKyAqIGNvbXBpbGUgdGltZVxuKyAqL1xuKyNkZWZpbmUgUlUoeCwgeSlcdFx0KCh4KSAvICh5KSArICgoKHgpICUgKHkpKSA/IDEgOiAwKSlcbitcbisjZGVmaW5lIFJCUFNcdDE3NDAxOTE3NlVMTFxuKyNkZWZpbmUgUlNFUUlPUFNcdDQxNzA4VUxMXG4rI2RlZmluZSBSUkFORElPUFNcdDM3MFVMTFxuKyNkZWZpbmUgV0JQU1x0MTc4MDc1ODY2VUxMXG4rI2RlZmluZSBXU0VRSU9QU1x0NDI3MDVVTExcbisjZGVmaW5lIFdSQU5ESU9QU1x0Mzc4VUxMXG4rXG4rI2RlZmluZSBSUEFHRVx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSlcbisjZGVmaW5lIFJTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFJTRVFJT1BTKSAtIFJQQUdFKVxuKyNkZWZpbmUgUlJBTkRJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFJSQU5ESU9QUykgLSBSUEFHRSlcbisjZGVmaW5lIFdQQUdFXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKVxuKyNkZWZpbmUgV1NFUUlPXHQoUlUoVlRJTUVfUEVSX1NFQywgV1NFUUlPUFMpIC0gV1BBR0UpXG4rI2RlZmluZSBXUkFORElPXHQoUlUoVlRJTUVfUEVSX1NFQywgV1JBTkRJT1BTKSAtIFdQQUdFKVxuK1xuKyNkZWZpbmUgTlNMT1RTXHQ0XG4rXG4rc3RydWN0IHN0cmVhbXMge1xuK1x0X191NjQgZXhwZWN0ZWRbTlNMT1RTXTtcdC8qIG5leHQgZXhwZWN0ZWQgc2VjdG9yLCBwZXIgc3RyZWFtICovXG4rXHRfX3U2NCBzdGFtcFtOU0xPVFNdO1x0LyogTFJVIHN0YW1wLCAwID0gZW1wdHkgKi9cbit9O1xuK1xuKy8qXG4rICogcGVyLWNncm91cCBzdHJlYW0gdGFibGU6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXRcbisgKi9cbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9DR1JQX1NUT1JBR0UpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IHN0cmVhbXMpO1xuK30gc3RyZWFtX3RhYiBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rdTY0IEJQRl9QUk9HKGlvY29zdF9tc19jYWxjX2Nvc3QsIHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHU2NCBzZWN0b3IsXG4rXHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncylcbit7XG4rXHRzdHJ1Y3Qgc3RyZWFtcyAqcztcbitcdHU2NCBwYWdlcywgYmFzZSwgY29lZl9wYWdlLCByYW5kaW8sIGFkdmFuY2UsIG5vdztcbitcdHUzMiBpLCB2aWN0aW0gPSAwLCBmb3VuZCA9IDB4RkZGRkZGRkY7XG4rXG4rXHRpZiAoKG9wZiBcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfUkVBRCkge1xuK1x0XHRiYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTztcbitcdH0gZWxzZSBpZiAoKG9wZiBcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfV1JJVEUpIHtcbitcdFx0YmFzZSA9IFdTRVFJTzsgY29lZl9wYWdlID0gV1BBR0U7IHJhbmRpbyA9IFdSQU5ESU87XG4rXHR9IGVsc2Uge1xuK1x0XHQvKlxuK1x0XHQgKiBhIGZ1bGx5IG93bmluZyBtb2RlbCBtdXN0IHByaWNlIGV2ZXJ5IG9wOyB1bmtub3duXG4rXHRcdCAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGVcbitcdFx0ICovXG4rXHRcdGJhc2UgPSAwOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gMDtcbitcdH1cbitcdGFkdmFuY2UgPSBSVShuYnl0ZXMsIDUxMik7XHQvKiBzZWN0b3JzICovXG4rXG4rXHRzID0gYnBmX2NncnBfc3RvcmFnZV9nZXQoXHUwMDI2c3RyZWFtX3RhYiwgYmxrY2ctXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcbitcdFx0XHRcdCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xuK1x0aWYgKCFzKVxuK1x0XHRyZXR1cm4gYmFzZSArIFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSkgKiBjb2VmX3BhZ2U7XG4rXG4rXHRub3cgPSBicGZfa3RpbWVfZ2V0X25zKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOU0xPVFM7IGkrKykge1xuK1x0XHRpZiAocy1cdTAwM2VleHBlY3RlZFtpXSA9PSBzZWN0b3IgXHUwMDI2XHUwMDI2IHMtXHUwMDNlc3RhbXBbaV0pIHtcbitcdFx0XHRmb3VuZCA9IGk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmIChmb3VuZCAhPSAweEZGRkZGRkZGKSB7XG4rXHRcdC8qIHNlcXVlbnRpYWw6IGtlZXAgdGhlIHNlcSBiYXNlIGZyb20gdGhlIG9wIGJyYW5jaCAqL1xuK1x0XHRzLVx1MDAzZWV4cGVjdGVkW2ZvdW5kXSA9IHNlY3RvciArIGFkdmFuY2U7XG4rXHRcdHMtXHUwMDNlc3RhbXBbZm91bmRdID0gbm93O1xuK1x0fSBlbHNlIHtcbitcdFx0YmFzZSA9IHJhbmRpbztcbitcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgTlNMT1RTOyBpKyspIHtcbitcdFx0XHRpZiAocy1cdTAwM2VzdGFtcFtpXSBcdTAwM2Mgcy1cdTAwM2VzdGFtcFt2aWN0aW1dKVxuK1x0XHRcdFx0dmljdGltID0gaTtcbitcdFx0fVxuK1x0XHRzLVx1MDAzZWV4cGVjdGVkW3ZpY3RpbV0gPSBzZWN0b3IgKyBhZHZhbmNlO1xuK1x0XHRzLVx1MDAzZXN0YW1wW3ZpY3RpbV0gPSBub3c7XG4rXHR9XG4rXG4rXHRwYWdlcyA9IFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSk7XG4rXHRpZiAoIXBhZ2VzKVxuK1x0XHRwYWdlcyA9IDE7XHQvKiBkYXRhbGVzcyBmbHVzaDogb25lIHBhZ2UgKi9cbitcdGlmIChtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkge1xuK1x0XHQvKlxuK1x0XHQgKiBtZXJnZWQgYmlvcyBza2lwIHRoZSBiYXNlIGNvc3QgYnV0IHN0aWxsIGFkdmFuY2VcbitcdFx0ICogdGhlIHN0cmVhbSBwb3NpdGlvbiBhYm92ZSwgc28gYSBtZXJnZSBhdCB0aGVcbitcdFx0ICogZXhwZWN0ZWQgc2VjdG9yIGRvZXMgbm90IG1ha2UgdGhlIGZvbGxvd2luZyBuZXcgSU9cbitcdFx0ICogbG9vayByYW5kb21cbitcdFx0ICovXG4rXHRcdGJhc2UgPSAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGJhc2UgKyBwYWdlcyAqIGNvZWZfcGFnZTtcbit9XG4rXG4rU0VDKFwiLnN0cnVjdF9vcHNcIilcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfbXMgPSB7XG4rXHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfbXNfY2FsY19jb3N0LFxuK1x0Lm5hbWUgPSBcImlvY29zdF9tc1wiLFxuK307XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMToxNS4wMjg3MDIxNjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxMTIzMTg0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBvZiBCbG9jay9JTyBDb3N0IEJQRiBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgKm9ubHkqIEtNU0FOIGNvdWxkIGNhdGNoLiBCYXNlZCBvbiB0aGUgZ3VpZGVsaW5lcywgaWYgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgY2F0Y2ggdGhlIGlzc3VlLCB3ZSBkb24ndCBuZWVkIEtNU0FOLiAgSXQncyBhbGwgYWJvdXQgZmluZGluZyB0aGF0ICpzcGVjaWZpYyogdW5pbml0aWFsaXplZCBtZW1vcnkgc2NlbmFyaW8gdGhhdCBLTVNBTiBhbG9uZSB3aWxsIGV4cG9zZS5cblxuRmlyc3QsIEkgc2VlIGRvY3VtZW50YXRpb24gdXBkYXRlcyAoZ29vZCBwcmFjdGljZSksIG5ldyBjb25maWcgb3B0aW9ucyBmb3IgQlBGLCBhbmQgc29tZSBjYWxscyByZWxhdGVkIHRvIGNncm91cCBvbmxpbmUvb2ZmbGluZSBldmVudHMuIFRoYXQncyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGJ1dCBpdCdzIG5vdCB3aGVyZSBJIGV4cGVjdCB0aGUgcmVhbCByaXNrIHRvIGJlLiBJJ2xsIGZvY3VzIG9uIHRoZSBCUEYtcmVsYXRlZCBjb2RlIHNpbmNlIHRoYXQncyB3aGVyZSBjb21wbGV4aXR5IGFuZCBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBvZnRlbiBhcmlzZS5cblxuVGhlIGBibGstaW9jb3N0LWJwZi5jYCBmaWxlIGhhcyBmdW5jdGlvbnMgZm9yIG1vZGVsIG1hbmFnZW1lbnQ6IGxvb2t1cHMsIHJlZ2lzdHJhdGlvbiAoYGJwZl9pb2Nvc3RfcmVnYCksIGFuZCB1bnJlZ2lzdHJhdGlvbiAoYGJwZl9pb2Nvc3RfdW5yZWdgKS4gIEknbSBub3RpbmcgdGhhdCBgYnBmX2lvY29zdF9yZWdgIHVzZXMgYGt6YWxsb2NgLCB3aGljaCBzaG91bGQgemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnksIGFuZCB0aGF0J3MgZ29vZC4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYGJwZl9pb2Nvc3RfdW5yZWdgLCBrZnJlZSdpbmcgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSBicGZfaW9jb3N0X3JlZy4gIFdpdGhpbiBgYnBmX2lvY29zdF9pbml0X21lbWJlcmAsIEkgc2VlIGEgY29weSBvcGVyYXRpb24gdXNpbmcgYGJwZl9vYmpfbmFtZV9jcHlgLCBidXQgdGhhdCBjb3B5IGlzIGNoZWNraW5nIGxlbmd0aC4gIEl0IGRvZXMgbm90IGxvb2sgcmlza3kuIFRoZSB2YWxpZGF0aW9uIGluIGBicGZfaW9jb3N0X3ZhbGlkYXRlYCBjb25maXJtcyB0aGF0IHRoZSBjb2RlIGlzIGNoZWNraW5nIHRoYXQgYG9wcy1cdTAwM2VjYWxjX2Nvc3RgIGlzIGEgdmFsaWQgZnVuY3Rpb24sIG5vdCB1bmluaXRpYWxpemVkLlxuXG5Ob3csIHRoZSBgYmxrLWlvY29zdC5jYCBmaWxlIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBBIG5ldyBgbW9kZWxgIGZpZWxkIGlzIGFkZGVkIHRvIHRoZSBgaW9jYCBzdHJ1Y3QsIGJ1dCBpdCdzIG9ubHkgY29uZGl0aW9uYWwgb24gYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgLCBidXQgbW9yZSBpbXBvcnRhbnRseSwgYGlvY2AgaXMga3phbGxvYydkIGluIHNvbWUgcGFydHMgb2YgdGhlIGNvZGUuIFRoYXQgbWVhbnMgdGhlIGBtb2RlbGAgcG9pbnRlciBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIChhbmQgdGh1cyBzYWZlIHRvIHJlYWQpLiAgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpb2NgIGlzIGFsbG9jYXRlZCBjb3JyZWN0bHkgdG8gYmUgc3VyZSB0aGF0IGBtb2RlbGAgaXMgemVyb2VkLiAgTG9va2luZyBhdCBgaW9jX3Jxb3NfaW5pdGAsIHllcywgYGlvY2AgKmlzKiBga3phbGxvY2AtZWQuIEknbGwgY2hlY2sgYGlvY19ycW9zX2V4aXRgIGFzIHdlbGwsIHRvIG1ha2Ugc3VyZSBpdCBpcyBmcmVlZCBjb3JyZWN0bHkuICBJdCBkb2VzLCBhbmQgYWxzbyBjbGVhbnMgdXAgYGlvYy1cdTAwM2Vtb2RlbGAgdmlhIGBpb2Nvc3RfYnBmX21vZGVsX3B1dChtb2RlbClgLlxuXG5JbiB0aGUgYGlvY190aW1lcl9mbmAgZnVuY3Rpb24sIGBucl9hY3RpdmVgIGlzIGluaXRpYWxpemVkIHRvIDAuICBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYGNhbGNfdnRpbWVfY29zdGAgYW5kIGBjYWxjX3NpemVfdnRpbWVfY29zdGAgZnVuY3Rpb25zIGJvdGggZGVyZWZlcmVuY2UgdGhlIGBtb2RlbGAgcG9pbnRlciwgYnV0IGlmIGBpb2NgIGlzIGFsbG9jYXRlZCBieSBga3phbGxvY2AgdGhlbiB0aGVzZSBwb2ludGVycyBzaG91bGQgYmUgc2FmZSB0byBkZXJlZmVyZW5jZSwgYWx0aG91Z2ggdGhleSBtYXkgYmUgYE5VTExgLiBgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsYCByZWFkcyB0aGUgYGlvYy1cdTAwM2Vtb2RlbGAsIHByaW50aW5nIHRvIGEgc2VxX2ZpbGUsIGFnYWluLCBzaG91bGQgYmUgc2FmZSB3aXRoIHByb3BlciBpbml0aWFsaXphdGlvbi4gIFRoZSBgaW9jX2JwZl9tb2RlbF9iaW5kYCBmdW5jdGlvbiBsb29rcyBva2F5IHRvby4gSXQgYmluZHMgYSBuZXcgbW9kZWwgYW5kIHB1dHMgdGhlIG9sZCwgd2l0aCBjaGVja3MgaW4gYmV0d2Vlbi5cblxuVGhlIGBpb2NfY29zdF9tb2RlbF93cml0ZWAgZnVuY3Rpb24gaGFuZGxlcyB3cml0aW5nIHRoZSBjb3N0IG1vZGVsLCBhbmQgZG9lcyBzdHJsY3B5IG9wZXJhdGlvbnMuIFRoZSBgYnBmX21vZGVsYCBjaGFyYWN0ZXIgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9lcy5cblxuT3ZlcmFsbCwgcmV2aWV3aW5nIHRoaXMgY29kZSB3aXRoIHRoZSBLTVNBTiBndWlkZWxpbmVzIGluIG1pbmQsIEkgZG8gbm90IHNlZSBhbnkgb2J2aW91cyBjYXNlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3b3VsZCBiZSBleHBvc2VkICpvbmx5KiBieSBLTVNBTi4gIEFsbCB0aGUgc3RydWN0dXJlcyBJIGV4YW1pbmVkLCB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBwb3RlbnRpYWxseSBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljLCBlaXRoZXIgZ2V0IHplcm9lZC9pbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uICh1c2luZyBremFsbG9jLCBtZW1zZXQsID0gezB9KSwgb3IgaGF2ZSBib3VuZHMvbGVuZ3RoIGNoZWNrcy4gVGhlIGZhY3QgdGhhdCB0aGUgY29yZSBgaW9jYCBzdHJ1Y3QgaXMgYGt6YWxsb2NgJ2QgaXMgYSBzaWduaWZpY2FudCBmYWN0b3IsIGFzIGl0IGhhbmRsZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgbW9kZWxgIHN0cnVjdC4gVGhlcmVmb3JlLCBJJ20gY29uY2x1ZGluZyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXMgKm5vdCogaW50cm9kdWNlIEtNU0FOLXNwZWNpZmljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY5NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMToyNS4xNDEwMjQwNzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjczNjcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2MgPSBremFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1pb2Nvc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstaW9jb3N0LmM9Mjk3NT1zdGF0aWMgaW50IGJsa19pb2Nvc3RfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTc5LVxcbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTgwOlxcdGlvYyA9IGt6YWxsb2Nfb2JqKCppb2MpO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTgxLVxcdGlmICghaW9jKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMToyNS41Mzc3NjcxOTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwMTA3NDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIE1vZGVsIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgYnBmX21vZGVsYCBpcyBhY3R1YWxseSBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIGBpb2NfY29zdF9tb2RlbF93cml0ZWAgZnVuY3Rpb24uIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgd2FudCB0byBzZWUgdGhlIG1lY2hhbmljcywgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3csIHNlZSB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzLCBhbmQgbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBwcmVjaXNlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM1NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjExOjI3LjYzODg0Mzc4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLWlvY29zdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1OTAsXG4gIFwiTGluZUNvdW50XCI6IDk1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1OTA6XFx0XFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbjM1OTE6XFx0XFx0c3RydWN0IGlvYyAqaW9jO1xcbjM1OTI6XFx0XFx0dTY0IHVbTlJfSV9MQ09FRlNdO1xcbjM1OTM6XFx0XFx0Ym9vbCB1c2VyO1xcbjM1OTQ6XFx0XFx0Y2hhciBicGZfbW9kZWxbSU9DT1NUX01PREVMX05BTUVfTEVOXTtcXG4zNTk1OlxcdFxcdGNoYXIgKmJvZHksICpwO1xcbjM1OTY6XFx0XFx0aW50IHJldDtcXG4zNTk3OlxcdFxcbjM1OTg6XFx0XFx0YmxrZ19jb25mX2luaXQoXFx1MDAyNmN0eCwgaW5wdXQpO1xcbjM1OTk6XFx0XFxuMzYwMDpcXHRcXHRyZXQgPSBibGtnX2NvbmZfb3Blbl9iZGV2KFxcdTAwMjZjdHgpO1xcbjM2MDE6XFx0XFx0aWYgKHJldClcXG4zNjAyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzYwMzpcXHRcXG4zNjA0OlxcdFxcdGJvZHkgPSBjdHguYm9keTtcXG4zNjA1OlxcdFxcdHEgPSBiZGV2X2dldF9xdWV1ZShjdHguYmRldik7XFxuMzYwNjpcXHRcXHRpZiAoIXF1ZXVlX2lzX21xKHEpKSB7XFxuMzYwNzpcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4zNjA4OlxcdFxcdFxcdGdvdG8gY2xvc2VfYmRldjtcXG4zNjA5OlxcdFxcdH1cXG4zNjEwOlxcdFxcbjM2MTE6XFx0XFx0aW9jID0gcV90b19pb2MocSk7XFxuMzYxMjpcXHRcXHRpZiAoIWlvYykge1xcbjM2MTM6XFx0XFx0XFx0cmV0ID0gYmxrX2lvY29zdF9pbml0KGN0eC5iZGV2LVxcdTAwM2ViZF9kaXNrKTtcXG4zNjE0OlxcdFxcdFxcdGlmIChyZXQpXFxuMzYxNTpcXHRcXHRcXHRcXHRnb3RvIGNsb3NlX2JkZXY7XFxuMzYxNjpcXHRcXHRcXHRpb2MgPSBxX3RvX2lvYyhxKTtcXG4zNjE3OlxcdFxcdH1cXG4zNjE4OlxcdFxcbjM2MTk6XFx0XFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbjM2MjA6XFx0XFx0YmxrX21xX3F1aWVzY2VfcXVldWUocSk7XFxuMzYyMTpcXHRcXG4zNjIyOlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuMzYyMzpcXHRcXHRtZW1jcHkodSwgaW9jLVxcdTAwM2VwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7XFxuMzYyNDpcXHRcXHR1c2VyID0gaW9jLVxcdTAwM2V1c2VyX2Nvc3RfbW9kZWw7XFxuMzYyNTpcXHRcXHRicGZfbW9kZWxbMF0gPSAnXFxcXDAnO1xcbjM2MjY6XFx0XFxuMzYyNzpcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjM2Mjg6XFx0XFxuMzYyOTpcXHRcXHR3aGlsZSAoKHAgPSBzdHJzZXAoXFx1MDAyNmJvZHksIFxcXCIgXFxcXHRcXFxcblxcXCIpKSkge1xcbjM2MzA6XFx0XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjM2MzE6XFx0XFx0XFx0Y2hhciBidWZbMzJdO1xcbjM2MzI6XFx0XFx0XFx0aW50IHRvaztcXG4zNjMzOlxcdFxcdFxcdHU2NCB2O1xcbjM2MzQ6XFx0XFxuMzYzNTpcXHRcXHRcXHRpZiAoISpwKVxcbjM2MzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzYzNzpcXHRcXG4zNjM4OlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4ocCwgY29zdF9jdHJsX3Rva2VucywgYXJncykpIHtcXG4zNjM5OlxcdFxcdFxcdGNhc2UgQ09TVF9DVFJMOlxcbjM2NDA6XFx0XFx0XFx0XFx0bWF0Y2hfc3RybGNweShidWYsIFxcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnVmKSk7XFxuMzY0MTpcXHRcXHRcXHRcXHRpZiAoIXN0cmNtcChidWYsIFxcXCJhdXRvXFxcIikpXFxuMzY0MjpcXHRcXHRcXHRcXHRcXHR1c2VyID0gZmFsc2U7XFxuMzY0MzpcXHRcXHRcXHRcXHRlbHNlIGlmICghc3RyY21wKGJ1ZiwgXFxcInVzZXJcXFwiKSlcXG4zNjQ0OlxcdFxcdFxcdFxcdFxcdHVzZXIgPSB0cnVlO1xcbjM2NDU6XFx0XFx0XFx0XFx0ZWxzZVxcbjM2NDY6XFx0XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzY0NzpcXHRcXHRcXHRcXHRicGZfbW9kZWxbMF0gPSAnXFxcXDAnO1xcbjM2NDg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzY0OTpcXHRcXHRcXHRjYXNlIENPU1RfTU9ERUw6XFxuMzY1MDpcXHRcXHRcXHRcXHRtYXRjaF9zdHJsY3B5KGJ1ZiwgXFx1MDAyNmFyZ3NbMF0sIHNpemVvZihidWYpKTtcXG4zNjUxOlxcdFxcdFxcdFxcdGlmICghc3RyY21wKGJ1ZiwgXFxcImxpbmVhclxcXCIpKSB7XFxuMzY1MjpcXHRcXHRcXHRcXHRcXHQvKiBiYWNrIHRvIHRoZSBidWlsdGluIGxpbmVhciBtb2RlbCAqL1xcbjM2NTM6XFx0XFx0XFx0XFx0XFx0YnBmX21vZGVsWzBdID0gJ1xcXFwwJztcXG4zNjU0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM2NTU6XFx0XFx0XFx0XFx0fVxcbjM2NTY6XFx0XFx0XFx0XFx0bWF0Y2hfc3RybGNweShicGZfbW9kZWwsIFxcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnBmX21vZGVsKSk7XFxuMzY1NzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNjU4OlxcdFxcdFxcdH1cXG4zNjU5OlxcdFxcbjM2NjA6XFx0XFx0XFx0dG9rID0gbWF0Y2hfdG9rZW4ocCwgaV9sY29lZl90b2tlbnMsIGFyZ3MpO1xcbjM2NjE6XFx0XFx0XFx0aWYgKHRvayA9PSBOUl9JX0xDT0VGUylcXG4zNjYyOlxcdFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjM2NjM6XFx0XFx0XFx0aWYgKG1hdGNoX3U2NChcXHUwMDI2YXJnc1swXSwgXFx1MDAyNnYpKVxcbjM2NjQ6XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzY2NTpcXHRcXHRcXHR1W3Rva10gPSB2O1xcbjM2NjY6XFx0XFx0XFx0dXNlciA9IHRydWU7XFxuMzY2NzpcXHRcXHR9XFxuMzY2ODpcXHRcXG4zNjY5OlxcdFxcdGlmICh1c2VyKSB7XFxuMzY3MDpcXHRcXHRcXHRtZW1jcHkoaW9jLVxcdTAwM2VwYXJhbXMuaV9sY29lZnMsIHUsIHNpemVvZih1KSk7XFxuMzY3MTpcXHRcXHRcXHRpb2MtXFx1MDAzZXVzZXJfY29zdF9tb2RlbCA9IHRydWU7XFxuMzY3MjpcXHRcXHR9IGVsc2Uge1xcbjM2NzM6XFx0XFx0XFx0aW9jLVxcdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPSBmYWxzZTtcXG4zNjc0OlxcdFxcdH1cXG4zNjc1OlxcdFxcdGlvY19yZWZyZXNoX3BhcmFtcyhpb2MsIHRydWUpO1xcbjM2NzY6XFx0XFxuMzY3NzpcXHRcXHRyZXQgPSAwO1xcbjM2Nzg6XFx0XFxuMzY3OTpcXHR1bmxvY2s6XFxuMzY4MDpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuMzY4MTpcXHRcXG4zNjgyOlxcdFxcdC8qXFxuMzY4MzpcXHRcXHQgKiBCaW5kIHRoZSBCUEYgbW9kZWwgb3V0c2lkZSBpb2MtXFx1MDAzZWxvY2s6IHRoZSByZWdpc3RyeSBsb29rdXBcXG4zNjg0OlxcdFxcdCAqIHRha2VzIHRoZSByZWdpc3RyYXRpb24gbXV0ZXggYW5kIHRoZSBvbGQgbW9kZWwncyByZWZlcmVuY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MjcuNjM5MDY5NTI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NTU1NzE5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEJsb2NrIElPIENvc3QgQlBGIE9iamVjdCBIYW5kbGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBibGstaW9jb3N0LWJwZi5jYCBjb2RlLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgYXJvdW5kIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGBzdHJ1Y3Rfb3BzYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIG9iamVjdCBuYW1lIGNvcGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGRvbmUgY29ycmVjdGx5IGFuZCBzZWN1cmVseS4gTGV0IG1lIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyBgYnBmX29ial9uYW1lX2NweWAuIEZyb20gd2hhdCBJIGNhbiBzZWUgaGVyZSwgdGhleSdyZSB1c2luZyBgYnBmX29ial9uYW1lX2NweShvcHMtXHUwMDNlbmFtZSwgdW9wcy1cdTAwM2VuYW1lLCBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKWAuIFN0YW5kYXJkIGtlcm5lbCBmdW5jdGlvbiwgc28gdGhhdCdzIGEgZ29vZCBzdGFydC4gQnV0IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX29ial9uYW1lX2NweWAgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGxpa2Ugb2ZmLWJ5LW9uZSBlcnJvcnMgb3IgYnVmZmVyIG92ZXJmbG93cy4gTmVlZCB0byBtYWtlIGNlcnRhaW4gdGhlIG5hbWUgY29weSBpcyByb2J1c3Qgd2l0aGluIHRoZSBjb250ZXh0IG9mIEJQRiBvYmplY3QgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NjAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjExOjM0LjQ5NDY0NDc5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0Nzc3MTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfb2JqX25hbWVfY3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1pb2Nvc3QtYnBmLmM9MTM4PXN0YXRpYyBpbnQgYnBmX2lvY29zdF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LWJwZi5jLTE0Ny1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzLCBuYW1lKTpcXG5ibG9jay9ibGstaW9jb3N0LWJwZi5jOjE0ODpcXHRcXHRpZiAoYnBmX29ial9uYW1lX2NweShvcHMtXFx1MDAzZW5hbWUsIHVvcHMtXFx1MDAzZW5hbWUsXFxuYmxvY2svYmxrLWlvY29zdC1icGYuYy0xNDktXFx0XFx0XFx0XFx0ICAgICBzaXplb2Yob3BzLVxcdTAwM2VuYW1lKSkgXFx1MDAzYz0gMClcXG4tLVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jPTM0ND1zdGF0aWMgaW50IGJtX2JwZl9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zNTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmluZm10X21pc2Nfb3BzLCBuYW1lKTpcXG5mcy9iaW5mbXRfbWlzY19icGYuYzozNTQ6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLVxcdTAwM2VuYW1lLCB1b3BzLVxcdTAwM2VuYW1lLFxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTM1NS1cXHRcXHRcXHRcXHQgICAgIHNpemVvZihvcHMtXFx1MDAzZW5hbWUpKSBcXHUwMDNjPSAwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD02NTU9c3RydWN0IGJwZl9tYXAgKmJwZl9wcm9nX2FyZW5hKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYuaDo2NTY6aW50IGJwZl9vYmpfbmFtZV9jcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGludCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY1Ny1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyMDM9aW50IGJwZl9nZXRfZmlsZV9mbGFnKGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyMjQtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTIyNTppbnQgYnBmX29ial9uYW1lX2NweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgaW50IHNpemUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIyNi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjQ0LX1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjQ1OkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9vYmpfbmFtZV9jcHkpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNDYtXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTQxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1NDI6XFx0ZXJyID0gYnBmX29ial9uYW1lX2NweShtYXAtXFx1MDAzZW5hbWUsIGF0dHItXFx1MDAzZW1hcF9uYW1lLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1NDMtXFx0XFx0XFx0ICAgICAgIHNpemVvZihhdHRyLVxcdTAwM2VtYXBfbmFtZSkpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMjYtXFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2Vsb2FkX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTI3OlxcdGVyciA9IGJwZl9vYmpfbmFtZV9jcHkocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VuYW1lLCBhdHRyLVxcdTAwM2Vwcm9nX25hbWUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEyOC1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGF0dHItXFx1MDAzZXByb2dfbmFtZSkpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDE1PXN0YXRpYyBpbnQgYnBmX3NjeF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwMzUtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgbmFtZSk6XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDM2OlxcdFxcdHJldCA9IGJwZl9vYmpfbmFtZV9jcHkob3BzLVxcdTAwM2VuYW1lLCB1b3BzLVxcdTAwM2VuYW1lLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODAzNy1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKG9wcy1cXHUwMDNlbmFtZSkpO1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTIxMT1zdGF0aWMgaW50IGJwZl90Y3BfY2FfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyOS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMsIG5hbWUpOlxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMzA6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkodGNwX2NhLVxcdTAwM2VuYW1lLCB1dGNwX2NhLVxcdTAwM2VuYW1lLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMzEtXFx0XFx0XFx0XFx0ICAgICBzaXplb2YodGNwX2NhLVxcdTAwM2VuYW1lKSkgXFx1MDAzYz0gMClcXG4tLVxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYz0zNjE9c3RhdGljIGludCBicGZfcWRpc2NfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTM4Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBRZGlzY19vcHMsIGlkKTpcXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM6MzgzOlxcdFxcdGlmIChicGZfb2JqX25hbWVfY3B5KHFkaXNjX29wcy1cXHUwMDNlaWQsIHVxZGlzY19vcHMtXFx1MDAzZWlkLFxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYy0zODQtXFx0XFx0XFx0XFx0ICAgICBzaXplb2YocWRpc2Nfb3BzLVxcdTAwM2VpZCkpIFxcdTAwM2M9IDApXFxuLS1cXG5uZXQvc21jL3NtY19oc19icGYuYz04NT1zdGF0aWMgaW50IHNtY19icGZfaHNfY3RybF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5uZXQvc21jL3NtY19oc19icGYuYy05OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzbWNfaHNfY3RybCwgbmFtZSk6XFxubmV0L3NtYy9zbWNfaHNfYnBmLmM6OTk6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkoa19jdHJsLVxcdTAwM2VuYW1lLCB1X2N0cmwtXFx1MDAzZW5hbWUsXFxubmV0L3NtYy9zbWNfaHNfYnBmLmMtMTAwLVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHVfY3RybC1cXHUwMDNlbmFtZSkpIFxcdTAwM2M9IDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjExOjM2Ljg0MjQyMjkwOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzg4MzQwMzYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBibGstaW9jb3N0IEJQRiBDb3N0IE1vZGVsIEltcGxlbWVudGF0aW9uIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBuZXcgQlBGIGNvc3QgbW9kZWwgaW50ZWdyYXRpb24gd2l0aGluIGJsay1pb2Nvc3QgaW50cm9kdWNlcyBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggd291bGQgbmVjZXNzaXRhdGUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIEknbSBleGFtaW5pbmcgdGhlIGNvZGUgd2l0aCBhIGNyaXRpY2FsIGV5ZSwgZm9jdXNpbmcgb24gZGF0YSBmbG93cywgaW5pdGlhbGl6YXRpb24gcGF0dGVybnMsIGFuZCBwb3RlbnRpYWwgZGF0YSBsZWFrcy5cblxuRmlyc3QsIEknbSB2ZXJpZnlpbmcgdGhlIGBUUkFDRV9FVkVOVChpb2Nvc3RfaW9jX3RpY2spYCB0cmFjZXBvaW50LiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgdHJhY2Vwb2ludCBzdHJ1Y3QgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGluIGBUUF9mYXN0X2Fzc2lnbmAuIFRoaXMgaW5jbHVkZXMgYGRldm5hbWVgLCBgcGVyaW9kX3VzYCwgYHZyYXRlYCwgYGJ1c3lfbGV2ZWxgLCBgbnJfYWN0aXZlYCwgYHVzYWdlX3BjdGAsIGFuZCBgcnVubmluZ2AuIEkgc2VlIHRoYXQgdGhlIGBucl9hY3RpdmVgIHZhbHVlIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIGlzIGluY3JlbWVudGVkIHdpdGhpbiB0aGUgcmVsZXZhbnQgbG9vcCBhbmQgdGhlbiBwYXNzZWQgdG8gdGhlIHRyYWNlIGV2ZW50LCBzbyB0aGlzIGlzIHNvbGlkLiBObyB3b3JyaWVzIHRoZXJlLlxuXG5OZXh0LCBJJ3ZlIGNoZWNrZWQgdGhlIGBjYWxjX3Z0aW1lX2Nvc3RgIGFuZCBgY2FsY19zaXplX3Z0aW1lX2Nvc3RgIGZ1bmN0aW9ucy4gSSd2ZSBmb2N1c2VkIG9uIGhvdyBgY29zdGAgaXMgYXNzaWduZWQgd2l0aGluIHRoZSBCUEYgbW9kZWwgcGF0aCwgYW5kIGhvdyB0aGUgdmFsdWUgaXMgdXNlZC4gQm90aCBmdW5jdGlvbnMgd2lsbCB1c2UgYGNhbGNfdnRpbWVfY29zdF9idWlsdGluYCBvciBgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbmAgaWYgQlBGIG1vZGVsIGlzIGRpc2FibGVkLiBUaGUgQlBGIG1vZGVsIGFzc2lnbnMgYGNvc3RgIHZpYSBgbW9kZWwtXHUwMDNlY2FsY19jb3N0KC4uLilgLiBJIGNhbiBzZWUgdGhlcmUgYXJlIGNoZWNrcyB0byB2ZXJpZnkgbW9kZWwgaXMgcHJlc2VudC4gSSd2ZSBjb25maXJtZWQgdGhpcyBjb3N0IGlzIHJldHVybmVkLCBhbmQgdGhhdCBgVlRJTUVfUEVSX1NFQ2AgaXMgdXNlZCBhcyBhIG1heGltdW0gdmFsdWUgc28gdGhpcyBpcyBzYWZlIGFzIHdlbGwuXG5cbkkndmUgYWxzbyBsb29rZWQgYXQgdGhlIGFsbG9jYXRpb24gcGF0dGVybnMuIEJvdGggYGt6YWxsb2NgIGFuZCBga3phbGxvY19vYmpgIGFyZSB1c2VkIGZvciBhbGxvY2F0aW9uIG9mIGBpb2Nvc3RfYnBmX21vZGVsYCBhbmQgYHN0cnVjdCBpb2NgIHJlc3BlY3RpdmVseSwgYW5kIHRoZXNlIGFyZSBpbml0aWFsaXplZCB3aXRoIHplcm8sIGFuZCBJJ3ZlIHZlcmlmaWVkIHRoYXQgbm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHVzZWQgaW4gYW55IG90aGVyIHN0cnVjdHVyZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBCUEYgbW9kZWwgaW50ZWdyYXRpb24gc2VlbXMgdG8gYmUgaGFuZGxlZCBieSBgaW9jb3N0X2JwZl9tb2RlbF9nZXRgLCBgaW9jX2JwZl9tb2RlbF9iaW5kYCwgYW5kIHRoZSBgaW9jX2Nvc3RfbW9kZWxfd3JpdGVgIGZ1bmN0aW9uLiBgaW9jb3N0X2JwZl9tb2RlbF9nZXRgIHJldHJpZXZlcyB0aGUgQlBGIG1vZGVsLiBgaW9jX2JwZl9tb2RlbF9iaW5kYCBoYW5kbGVzIHRoZSBiaW5kaW5nIGFuZCB1bmJpbmRpbmcgb2YgdGhlIGNvc3QgbW9kZWwgdG8gdGhlIGBpb2NgIHN0cnVjdCwgdXNpbmcgYHJjdV9hc3NpZ25fcG9pbnRlcmAgdG8gaGFuZGxlIGNvbmN1cnJlbmN5IHNhZmVseS4gSSB2ZXJpZmllZCB0aGF0IGEgYGJwZl9tb2RlbGAgc3RyaW5nIGlzIGJlaW5nIHByb3Blcmx5IG51bGwtdGVybWluYXRlZCB2aWEgYG1hdGNoX3N0cmxjcHlgLCBhbmQgcGFzc2VkIHRvIGBpb2NfYnBmX21vZGVsX2JpbmRgLiBJIGNhbiBjb25maXJtIHRoZXJlIGFyZSBubyBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5CYXNlZCBvbiBteSBhbmFseXNpcywgSSBhbSBjb25maWRlbnQgdGhhdCB0aGVyZSBhcmUgbm8gZGF0YSByYWNlcyBvciBtaXNzaW5nIGluaXRpYWxpemF0aW9uIHN0ZXBzIHRoYXQgd291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMuIFRoZXJlIGFyZSBubyBkaXJlY3QgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIEkndmUgY29uc2lkZXJlZCB0aGUgZm91ciBjcml0ZXJpYSByZWxhdGVkIHRvIHRoZSBkZXRlY3Rpb24gb2YgdW5pbml0aWFsaXplZCByZWFkcyBhbmQgbm9uZSBvZiB0aGVtIGFwcGx5OiBubyBrZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbm8gdW5pbml0aWFsaXplZCBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBubyBib3VuZHMgY2hlY2sgaXNzdWVzLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBzbyBJJ20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cbkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBCUEYgc3RydWN0X29wcy1iYXNlZCBjb3N0IG1vZGVscyB0byBgYmxrLWlvY29zdGAsIGluY2x1ZGluZyByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gaG9va3MsIGJsa2NnIG5vdGlmaWNhdGlvbnMsIGEgY2dyb3VwIHYyIGBpby5jb3N0Lm1vZGVsYCBjb25maWcsIGFuZCBhIG5ldyB0cmFjZXBvaW50LiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGFyZSBpbml0aWFsaXplZC4gVGhlcmUgYXJlIG5vIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UgdGhhdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBkYXRhLiBNZW1vcnkgc2FmZXR5IGNvbmNlcm5zIChSQ1UgbGlmZXRpbWUsIHN0cnVjdF9vcHMgcmVmY291bnRpbmcsIGxvY2tpbmcpIGFyZSBhbHJlYWR5IGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgdGhpcyBjb2RlIGFkZGl0aW9uIGRvZXMgbm90IHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjA1LCJPdXRwdXRUb2tlbnMiOjM0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6NTAuNzI1ODMwMDIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdCAoYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgKSwgYWRkaW5nIGBpb2Nvc3RfbW9kZWxfb3BzYCwgbW9kZWwgcmVnaXN0cmF0aW9uL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJzaW5nIGluIGBpby5jb3N0Lm1vZGVsYCwgYW5kIGEgbmV3IHRyYWNlcG9pbnQgYGlvY29zdF9pb2NfdGlja2AuXFxuXFxuQW4gZXZhbHVhdGlvbiBvZiBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYWNyb3NzIHRoZSBtb2RpZmllZCBhbmQgbmV3IGNvZGUgc2hvd3M6XFxuLSBBbGwgc3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGBicGZfbW9kZWxgIGluaXRpYWxpemVkIHdpdGggYGJwZl9tb2RlbFswXSA9ICdcXFxcMCdgLCBgbnJfYWN0aXZlYCBpbml0aWFsaXplZCB0byAwLCBhbmQgYGJ1ZmAgYnVmZmVycyBmaWxsZWQgd2l0aCBgbWF0Y2hfc3RybGNweWApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZC91c2UuXFxuLSBEeW5hbWljIGFsbG9jYXRpb25zIHVzZSBga3phbGxvY2AgKGZvciBgc3RydWN0IGlvY29zdF9icGZfbW9kZWxgKSBhbmQgdGhlIGV4aXN0aW5nIHplcm9lZCBhbGxvY2F0aW9uIGZvciBgc3RydWN0IGlvY2AuXFxuLSBObyBrZXJuZWwgc3RydWN0dXJlcyBjb250YWluaW5nIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2U7IG91dHB1dCB0byB1c2VyIHNwYWNlIGlzIGhhbmRsZWQgdmlhIGZvcm1hdHRlZCB0ZXh0IGluIGBzZXFfcHJpbnRmYC5cXG4tIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBjYWxsYmFja3MgKGBjYWxjX2Nvc3RgLCBgYmxrY2dfb25saW5lYCwgYGJsa2NnX29mZmxpbmVgKSBhcmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIGluaXRpYWxpemVkIGJpby9yZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIGJsa2NnIHBvaW50ZXJzLlxcblxcblRoZSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHNlcmllcyBwZXJ0YWluIHRvIFJDVSBzeW5jaHJvbml6YXRpb24sIG9iamVjdCByZWZjb3VudGluZy9saWZldGltZSAoYGJwZl9zdHJ1Y3Rfb3BzX2dldGAvYHB1dGApLCBhbmQgbG9ja2luZywgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGRldGVjdG9ycy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBzcGVjaWZpYyB0byBLTVNBTiBhcmUgcHJlc2VudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdCAoYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgKSwgYWRkaW5nIGBpb2Nvc3RfbW9kZWxfb3BzYCwgbW9kZWwgcmVnaXN0cmF0aW9uL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJzaW5nIGluIGBpby5jb3N0Lm1vZGVsYCwgYW5kIGEgbmV3IHRyYWNlcG9pbnQgYGlvY29zdF9pb2NfdGlja2AuXFxuXFxuQW4gZXZhbHVhdGlvbiBvZiBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYWNyb3NzIHRoZSBtb2RpZmllZCBhbmQgbmV3IGNvZGUgc2hvd3M6XFxuLSBBbGwgc3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGBicGZfbW9kZWxgIGluaXRpYWxpemVkIHdpdGggYGJwZl9tb2RlbFswXSA9ICdcXFxcMCdgLCBgbnJfYWN0aXZlYCBpbml0aWFsaXplZCB0byAwLCBhbmQgYGJ1ZmAgYnVmZmVycyBmaWxsZWQgd2l0aCBgbWF0Y2hfc3RybGNweWApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZC91c2UuXFxuLSBEeW5hbWljIGFsbG9jYXRpb25zIHVzZSBga3phbGxvY2AgKGZvciBgc3RydWN0IGlvY29zdF9icGZfbW9kZWxgKSBhbmQgdGhlIGV4aXN0aW5nIHplcm9lZCBhbGxvY2F0aW9uIGZvciBgc3RydWN0IGlvY2AuXFxuLSBObyBrZXJuZWwgc3RydWN0dXJlcyBjb250YWluaW5nIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2U7IG91dHB1dCB0byB1c2VyIHNwYWNlIGlzIGhhbmRsZWQgdmlhIGZvcm1hdHRlZCB0ZXh0IGluIGBzZXFfcHJpbnRmYC5cXG4tIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBjYWxsYmFja3MgKGBjYWxjX2Nvc3RgLCBgYmxrY2dfb25saW5lYCwgYGJsa2NnX29mZmxpbmVgKSBhcmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIGluaXRpYWxpemVkIGJpby9yZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIGJsa2NnIHBvaW50ZXJzLlxcblxcblRoZSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHNlcmllcyBwZXJ0YWluIHRvIFJDVSBzeW5jaHJvbml6YXRpb24sIG9iamVjdCByZWZjb3VudGluZy9saWZldGltZSAoYGJwZl9zdHJ1Y3Rfb3BzX2dldGAvYHB1dGApLCBhbmQgbG9ja2luZywgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGRldGVjdG9ycy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBzcGVjaWZpYyB0byBLTVNBTiBhcmUgcHJlc2VudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2wsfq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 13:54:15 +0000 UTC FinishedAt: 2026-09-10 14:11:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP_IOCOST_BPF", "BLK_CGROUP_IOCOST", "BLK_CGROUP", "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP_IOCOST_BPF", "BLK_CGROUP_IOCOST", "BLK_CGROUP", "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "a2010ea6-5d95-4530-a1de-b18113c7c89a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "ioc_bpf_model_bind", "ioc_cost_model_write", "calc_vtime_cost", "calc_size_vtime_cost", "bpf_iocost_reg", "bpf_iocost_unreg", "bpf_iocost_validate", "iocost_bpf_model_get", "iocost_bpf_model_put", "iocost_notify_blkcg_online", "iocost_notify_blkcg_offline" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUX0JQRiYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2NfYnBmX21vZGVsX2JpbmQmIzM0OywKICAgICYjMzQ7aW9jX2Nvc3RfbW9kZWxfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2FsY192dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2NhbGNfc2l6ZV92dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfdW5yZWcmIzM0OywKICAgICYjMzQ7YnBmX2lvY29zdF92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX2dldCYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX3B1dCYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdCAoYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgKSwgYWRkaW5nIGBpb2Nvc3RfbW9kZWxfb3BzYCwgbW9kZWwgcmVnaXN0cmF0aW9uL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJzaW5nIGluIGBpby5jb3N0Lm1vZGVsYCwgYW5kIGEgbmV3IHRyYWNlcG9pbnQgYGlvY29zdF9pb2NfdGlja2AuXG5cbkFuIGV2YWx1YXRpb24gb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFjcm9zcyB0aGUgbW9kaWZpZWQgYW5kIG5ldyBjb2RlIHNob3dzOlxuLSBBbGwgc3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGBicGZfbW9kZWxgIGluaXRpYWxpemVkIHdpdGggYGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTtgLCBgbnJfYWN0aXZlYCBpbml0aWFsaXplZCB0byAwLCBhbmQgYGJ1ZmAgYnVmZmVycyBmaWxsZWQgd2l0aCBgbWF0Y2hfc3RybGNweWApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZC91c2UuXG4tIER5bmFtaWMgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jYCAoZm9yIGBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbGApIGFuZCB0aGUgZXhpc3RpbmcgemVyb2VkIGFsbG9jYXRpb24gZm9yIGBzdHJ1Y3QgaW9jYC5cbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29udGFpbmluZyB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlOyBvdXRwdXQgdG8gdXNlciBzcGFjZSBpcyBoYW5kbGVkIHZpYSBmb3JtYXR0ZWQgdGV4dCBpbiBgc2VxX3ByaW50ZmAuXG4tIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBjYWxsYmFja3MgKGBjYWxjX2Nvc3RgLCBgYmxrY2dfb25saW5lYCwgYGJsa2NnX29mZmxpbmVgKSBhcmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIGluaXRpYWxpemVkIGJpby9yZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIGJsa2NnIHBvaW50ZXJzLlxuXG5UaGUgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBzZXJpZXMgcGVydGFpbiB0byBSQ1Ugc3luY2hyb25pemF0aW9uLCBvYmplY3QgcmVmY291bnRpbmcvbGlmZXRpbWUgKGBicGZfc3RydWN0X29wc19nZXRgL2BwdXRgKSwgYW5kIGxvY2tpbmcsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgc3BlY2lmaWMgdG8gS01TQU4gYXJlIHByZXNlbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQlBGIHN0cnVjdF9vcHMgc3VwcG9ydCAoaW9jb3N0X21vZGVsX29wcykgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscyBpbiBibGstaW9jb3N0LiBJdCBpbnRyb2R1Y2VzIG5ldyBrZXJuZWwgY29kZSBpbiBibG9jay9ibGstaW9jb3N0LWJwZi5jIGZvciByZWdpc3RlcmluZywgdmFsaWRhdGluZywgYW5kIG1hbmFnaW5nIEJQRiBjb3N0IG1vZGVscywgYW5kIHVwZGF0ZXMgYmxvY2svYmxrLWlvY29zdC5jIGFuZCBibG9jay9ibGstY2dyb3VwLmMgdG8gaW50ZXJmYWNlIHdpdGggdGhlc2UgbW9kZWxzIGR1cmluZyBJTyBjb3N0IGNhbGN1bGF0aW9ucywgY29uZmlndXJhdGlvbiB3cml0ZXMsIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBCUEYgc3lzY2FsbHMgYW5kIGNncm91cCB2MiBpby5jb3N0Lm1vZGVsIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiYzUwZDQwMzQzOGI0YjRlMTg4YjE0OGEwYWI1Y2M0YWY1YjY3YTA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTQ6MTA6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5pbmRleCA4ZDI2MDM3NTFjNTFhLi5hNjkxMGFkN2MyZDAyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbkBAIC0yMTI0LDYgJiM0MzsyMTI0LDE3IEBAIElPIEludGVyZmFjZSBGaWxlc1xuIFx0cGFyYW1ldGVycyBhcmUgd3JpdHRlbiB0bywgXCYjMzQ7Y3RybFwmIzM0OyBiZWNvbWUgXCYjMzQ7dXNlclwmIzM0OyBhbmQgdGhlXG4gXHRhdXRvbWF0aWMgY2hhbmdlcyBhcmUgZGlzYWJsZWQuXG4gXG4mIzQzO1x0V2hlbiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGIGlzIGVuYWJsZWQsIFwmIzM0O21vZGVsXCYjMzQ7IGFsc28gYWNjZXB0c1xuJiM0MztcdHRoZSBuYW1lIG9mIGEgcmVnaXN0ZXJlZCBpb2Nvc3RfbW9kZWxfb3BzIEJQRiBzdHJ1Y3Rfb3BzIG1vZGVsOlxuJiM0MztcdFwmIzM0O21vZGVsPVx1MDAzY25hbWVcdTAwM2VcJiMzNDsgYmluZHMgdGhlIG1vZGVsIHRvIHRoZSBkZXZpY2UgYW5kIHRoZSBtb2RlbCBmdWxseVxuJiM0MztcdHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBwcmljaW5nLCBmb3IgZXZlcnkgb3BlcmF0aW9uIGluY2x1ZGluZ1xuJiM0MztcdGZsdXNoZXM7IFwmIzM0O21vZGVsPWxpbmVhclwmIzM0OyAob3IgXCYjMzQ7Y3RybD1hdXRvL3VzZXJcJiMzNDspIHJlc3RvcmVzIHRoZSBidWlsdGluXG4mIzQzO1x0bW9kZWwuICBXcml0aW5nIGFuIHVua25vd24gbmFtZSBmYWlscyB3aXRoIEVOT0VOVC4gIFVucmVnaXN0ZXJpbmdcbiYjNDM7XHRhIG1vZGVsIHJlbW92ZXMgaXRzIG5hbWU7IGRldmljZXMgYWxyZWFkeSBib3VuZCBrZWVwIHVzaW5nIGl0XG4mIzQzO1x0dW50aWwgc3dpdGNoZWQgYmFjayB0byB0aGUgYnVpbHRpbiBtb2RlbCwgZm9sbG93aW5nIHRoZSBsaWZldGltZVxuJiM0MztcdG1vZGVsIG9mIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuICBTZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmhcbiYjNDM7XHRmb3IgdGhlIG1vZGVsIGludGVyZmFjZS5cbiYjNDM7XG4gXHRXaGVuIFwmIzM0O21vZGVsXCYjMzQ7IGlzIFwmIzM0O2xpbmVhclwmIzM0OywgdGhlIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzIGFyZVxuIFx0ZGVmaW5lZC5cbiBcbmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZ1xuaW5kZXggNzBlNGE2NmQ5NDFmZi4uOTFlODA4Zjg2ZDI4ZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL0tjb25maWdcbkBAIC0yMzEsNCAmIzQzOzIzMSwxMyBAQCBjb25maWcgQkxLX0VSUk9SX0lOSkVDVElPTlxuIFxuIHNvdXJjZSBcJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWRcJiMzNDtcbiBcbiYjNDM7Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUX0JQRlxuJiM0MztcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBwbHVnZ2FibGUgY29zdCBtb2RlbCBzdXBwb3J0IGZvciB0aGUgY29zdCBJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQX0lPQ09TVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IERFQlVHX0lORk9fQlRGXG4mIzQzO1x0aGVscFxuJiM0MztcdCBFbmFibGluZyB0aGlzIG9wdGlvbiByZWdpc3RlcnMgdGhlIFwmIzM0O2lvY29zdF9tb2RlbF9vcHNcJiMzNDsgQlBGXG4mIzQzO1x0IHN0cnVjdF9vcHMgdHlwZSwgd2hpY2ggYWxsb3dzIGEgQlBGIHByb2dyYW0gdG8gZnVsbHkgcmVwbGFjZVxuJiM0MztcdCB0aGUgYnVpbHRpbiBsaW5lYXIgY29zdCBtb2RlbCBvbiBhIGRldmljZSBpdCBpcyBib3VuZCB0b1xuJiM0MztcdCB0aHJvdWdoIGlvLmNvc3QubW9kZWwuXG4mIzQzO1xuIGVuZGlmICMgQkxPQ0tcbmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlXG5pbmRleCBlN2JkMzIwZTNkNjk3Li5lZTVjZWJlZWEwMDZmIDEwMDY0NFxuLS0tIGEvYmxvY2svTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL01ha2VmaWxlXG5AQCAtMzksMyAmIzQzOzM5LDQgQEAgb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTilcdCYjNDM7PSBibGstY3J5cHRvLm8gYmxrLWNyeXB0by1wcm9maWxlLm8gXFxcbiBcdFx0XHRcdFx0ICAgYmxrLWNyeXB0by1zeXNmcy5vXG4gb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcdCYjNDM7PSBibGstY3J5cHRvLWZhbGxiYWNrLm9cbiBvYmotJChDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQpXHQmIzQzOz0gaG9sZGVyLm9cbiYjNDM7b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRilcdCYjNDM7PSBibGstaW9jb3N0LWJwZi5vXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXG5pbmRleCAyYjVjMjk0MzRlNDI2Li44NzI4NzEwNDUzNTFjIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmNcbkBAIC0zMiw2ICYjNDM7MzIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhcnRfc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YmxrLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtibGstY2dyb3VwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YmxrLWlvcHJpby5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YmxrLXRocm90dGxlLmhcJiMzNDtcbiBcbkBAIC0xMzQxLDYgJiM0MzsxMzQyLDcgQEAgdm9pZCBibGtjZ191bnBpbl9vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2NnX2NzcylcbiAgKi9cbiBzdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIHtcbiYjNDM7XHRpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoY3NzX3RvX2Jsa2NnKGNzcykpO1xuIFx0LyogdGhpcyBwcmV2ZW50cyBhbnlvbmUgZnJvbSBhdHRhY2hpbmcgb3IgbWlncmF0aW5nIHRvIHRoaXMgYmxrY2cgKi9cbiBcdHdiX2Jsa2NnX29mZmxpbmUoY3NzKTtcbiBcbkBAIC0xNDQ1LDYgJiM0MzsxNDQ3LDcgQEAgYmxrY2dfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuIFxuIHN0YXRpYyBpbnQgYmxrY2dfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIHtcbiYjNDM7XHRpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShjc3NfdG9fYmxrY2coY3NzKSk7XG4gXHRzdHJ1Y3QgYmxrY2cgKnBhcmVudCA9IGJsa2NnX3BhcmVudChjc3NfdG9fYmxrY2coY3NzKSk7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgYi9ibG9jay9ibGstaW9jb3N0LWJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWVjNmRmMjc5NTk5MFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvY29zdC1icGYuY1xuQEAgLTAsMCAmIzQzOzEsMjUwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIGJsay1pb2Nvc3Q6IEJQRiBzdHJ1Y3Rfb3BzIHBsdW1iaW5nIGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJlZ2lzdGVycyB0aGUgXCYjMzQ7aW9jb3N0X21vZGVsX29wc1wmIzM0OyBzdHJ1Y3Rfb3BzIHR5cGUgYW5kIG1haW50YWlucyB0aGVcbiYjNDM7ICogbmFtZSByZWdpc3RyeSBvZiByZWdpc3RlcmVkIG1vZGVscy4gIEEgcmVnaXN0ZXJlZCBtb2RlbCBpcyBib3VuZCB0b1xuJiM0MzsgKiBhIGRldmljZSB0aHJvdWdoIGlvLmNvc3QubW9kZWw7IHNlZSBpbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaC5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGstaW9jb3N0LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoaW9jb3N0X2JwZl9yZWdfbG9jayk7XG4mIzQzO3N0YXRpYyBMSVNUX0hFQUQoaW9jb3N0X2JwZl9tb2RlbHMpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHJlZ2lzdHJ5IGhvbGRzIGEgYnBmX3N0cnVjdF9vcHNfZ2V0KCkgcmVmZXJlbmNlIG9idGFpbmVkIGluIC5yZWc7XG4mIzQzOyAqIC51bnJlZyBkcm9wcyBpdCwgc28gdGhlIGtkYXRhIG9mIGFuIHVucmVnaXN0ZXJlZCBtb2RlbCBzdGF5cyBhbGl2ZVxuJiM0MzsgKiB3aGlsZSBhbnkgZGV2aWNlIGlzIHN0aWxsIGJvdW5kIHRvIGl0LlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGlvY29zdF9icGZfbW9kZWwge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIExvb2sgdXAgYSByZWdpc3RlcmVkIG1vZGVsIGJ5IG5hbWUgYW5kIGFjcXVpcmUgYSByZWZlcmVuY2Ugb24gaXQuXG4mIzQzOyAqIFRoZSByZWdpc3RyeSBsb2NrIGlzIGhlbGQgYWNyb3NzIGxvb2t1cCBhbmQgYnBmX3N0cnVjdF9vcHNfZ2V0KCkgc29cbiYjNDM7ICogdGhlIG1vZGVsIGNhbm5vdCBiZSB1bnJlZ2lzdGVyZWQgaW4gYmV0d2Vlbi5cbiYjNDM7ICovXG4mIzQzO2ludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHQgY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKipvcHNwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4mIzQzO1x0aW50IHJldCA9IC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcdTAwMjZpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkge1xuJiM0MztcdFx0aWYgKCFzdHJjbXAobS1cdTAwM2VvcHMtXHUwMDNlbmFtZSwgbmFtZSkpIHtcbiYjNDM7XHRcdFx0aWYgKGJwZl9zdHJ1Y3Rfb3BzX2dldChtLVx1MDAzZW9wcykpIHtcbiYjNDM7XHRcdFx0XHQqb3BzcCA9IG0tXHUwMDNlb3BzO1xuJiM0MztcdFx0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpXG4mIzQzO3tcbiYjNDM7XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICpcbiYjNDM7aW9jb3N0X2JwZl9tb2RlbF9sb29rdXAoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAobS1cdTAwM2VvcHMgPT0gb3BzKVxuJiM0MztcdFx0XHRyZXR1cm4gbTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcdTAwMjZpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkge1xuJiM0MztcdFx0aWYgKG0tXHUwMDNlb3BzLVx1MDAzZWJsa2NnX29ubGluZSlcbiYjNDM7XHRcdFx0bS1cdTAwM2VvcHMtXHUwMDNlYmxrY2dfb25saW5lKGJsa2NnKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbiYjNDM7XHRcdGlmIChtLVx1MDAzZW9wcy1cdTAwM2VibGtjZ19vZmZsaW5lKVxuJiM0MztcdFx0XHRtLVx1MDAzZW9wcy1cdTAwM2VibGtjZ19vZmZsaW5lKGJsa2NnKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF9tb2RlbF9pbml0KHN0cnVjdCBidGYgKmJ0ZilcbiYjNDM7e1xuJiM0MztcdHMzMiB0eXBlX2lkO1xuJiM0MztcbiYjNDM7XHR0eXBlX2lkID0gYnRmX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXCYjMzQ7aW9jb3N0X21vZGVsX29wc1wmIzM0OywgQlRGX0tJTkRfU1RSVUNUKTtcbiYjNDM7XHRpZiAodHlwZV9pZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYWNjZXNzX2F1eCAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBicGZfdHJhY2luZ19idGZfY3R4X2FjY2VzcyhvZmYsIHNpemUsIHR5cGUsIHByb2csIGluZm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbiYjNDM7YnBmX2lvY29zdF9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXG4mIzQzO1x0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChmdW5jX2lkKSB7XG4mIzQzOyNpZmRlZiBDT05GSUdfQ0dST1VQU1xuJiM0MztcdGNhc2UgQlBGX0ZVTkNfY2dycF9zdG9yYWdlX2dldDpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZicGZfY2dycF9zdG9yYWdlX2dldF9wcm90bztcbiYjNDM7I2VuZGlmXG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBicGZfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBicGZfaW9jb3N0X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHQvKiBjYWxjX2Nvc3QoKSBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQgKi9cbiYjNDM7XHRpZiAocHJvZy1cdTAwM2VzbGVlcGFibGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBicGZfaW9jb3N0X2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4mIzQzO1x0XHRcdFx0ICB2b2lkICprZGF0YSwgY29uc3Qgdm9pZCAqdWRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKnVvcHMgPSB1ZGF0YTtcbiYjNDM7XHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKG1vZmYpIHtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzLCBuYW1lKTpcbiYjNDM7XHRcdGlmIChicGZfb2JqX25hbWVfY3B5KG9wcy1cdTAwM2VuYW1lLCB1b3BzLVx1MDAzZW5hbWUsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKSBcdTAwM2M9IDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBicGZfaW9jb3N0X3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3BzLVx1MDAzZWNhbGNfY29zdCA/IDAgOiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl9pb2Nvc3RfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4mIzQzO1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghYnBmX3N0cnVjdF9vcHNfZ2V0KG9wcykpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0bSA9IGt6YWxsb2Moc2l6ZW9mKCptKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFtKSB7XG4mIzQzO1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbiYjNDM7XHR7XG4mIzQzO1x0XHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqb3RoZXI7XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAob3RoZXItXHUwMDNlb3BzLVx1MDAzZW5hbWUsIG9wcy1cdTAwM2VuYW1lKSkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FRVhJU1Q7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdG0tXHUwMDNlb3BzID0gb3BzO1xuJiM0MztcdFx0bGlzdF9hZGQoXHUwMDI2bS1cdTAwM2VsaXN0LCBcdTAwMjZpb2Nvc3RfYnBmX21vZGVscyk7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4mIzQzO1x0XHRrZnJlZShtKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnBmX2lvY29zdF91bnJlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhO1xuJiM0MztcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuJiM0MztcdG0gPSBpb2Nvc3RfYnBmX21vZGVsX2xvb2t1cChvcHMpO1xuJiM0MztcdGlmIChtKSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZtLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4mIzQzO1x0XHRrZnJlZShtKTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2lvY29zdF92ZXJpZmllcl9vcHMgPSB7XG4mIzQzO1x0LmdldF9mdW5jX3Byb3RvID0gYnBmX2lvY29zdF9nZXRfZnVuY19wcm90byxcbiYjNDM7XHQuaXNfdmFsaWRfYWNjZXNzID0gYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IGJwZl9pb2Nvc3RfY2FsY19jb3N0X3N0dWIodTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvcixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgX19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMgPSB7XG4mIzQzO1x0LmNhbGNfY29zdCA9IGJwZl9pb2Nvc3RfY2FsY19jb3N0X3N0dWIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl9pb2Nvc3RfbW9kZWxfb3BzID0ge1xuJiM0MztcdC52ZXJpZmllcl9vcHMgPSBcdTAwMjZicGZfaW9jb3N0X3ZlcmlmaWVyX29wcyxcbiYjNDM7XHQuaW5pdCA9IGJwZl9pb2Nvc3RfbW9kZWxfaW5pdCxcbiYjNDM7XHQuY2hlY2tfbWVtYmVyID0gYnBmX2lvY29zdF9jaGVja19tZW1iZXIsXG4mIzQzO1x0LmluaXRfbWVtYmVyID0gYnBmX2lvY29zdF9pbml0X21lbWJlcixcbiYjNDM7XHQudmFsaWRhdGUgPSBicGZfaW9jb3N0X3ZhbGlkYXRlLFxuJiM0MztcdC5yZWcgPSBicGZfaW9jb3N0X3JlZyxcbiYjNDM7XHQudW5yZWcgPSBicGZfaW9jb3N0X3VucmVnLFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7aW9jb3N0X21vZGVsX29wc1wmIzM0OyxcbiYjNDM7XHQuY2ZpX3N0dWJzID0gXHUwMDI2X19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMsXG4mIzQzO1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBicGZfaW9jb3N0X2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcdTAwMjZicGZfaW9jb3N0X21vZGVsX29wcywgaW9jb3N0X21vZGVsX29wcyk7XG4mIzQzO31cbiYjNDM7bGF0ZV9pbml0Y2FsbChicGZfaW9jb3N0X2luaXQpO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QuYyBiL2Jsb2NrL2Jsay1pb2Nvc3QuY1xuaW5kZXggMjc0NWJmZmNkNWVlZi4uYmNjZGJkMjQ5NmQ4MyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1pb2Nvc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvY29zdC5jXG5AQCAtMTc3LDYgJiM0MzsxNzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhcnNlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsay1pb2Nvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2xvY2FsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbG9jYWw2NC5oXHUwMDNlXG5AQCAtNDQ1LDYgJiM0Mzs0NDYsMTEgQEAgc3RydWN0IGlvYyB7XG4gXHRpbnRcdFx0XHRcdGF1dG9wX2lkeDtcbiBcdGJvb2xcdFx0XHRcdHVzZXJfcW9zX3BhcmFtczoxO1xuIFx0Ym9vbFx0XHRcdFx0dXNlcl9jb3N0X21vZGVsOjE7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxuJiM0MztcdC8qIGJvdW5kIEJQRiBjb3N0IG1vZGVsLCBOVUxMID0gYnVpbHRpbiBsaW5lYXIgbW9kZWwgKi9cbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wc1x0X19yY3UgKm1vZGVsO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCBpb2NnX3BjcHVfc3RhdCB7XG5AQCAtMjIzOCw2ICYjNDM7MjI0NCw3IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRzdHJ1Y3QgaW9jX25vdyBub3c7XG4gXHRMSVNUX0hFQUQoc3VycGx1c2VzKTtcbiBcdGludCBucl9kZWJ0b3JzLCBucl9zaG9ydGFnZXMgPSAwLCBucl9sYWdnaW5nID0gMDtcbiYjNDM7XHRpbnQgbnJfYWN0aXZlID0gMDtcbiBcdHU2NCB1c2FnZV91c19zdW0gPSAwO1xuIFx0dTMyIHBwbV9ydGhyO1xuIFx0dTMyIHBwbV93dGhyO1xuQEAgLTIyNzQsNiAmIzQzOzIyODEsOCBAQCBzdGF0aWMgdm9pZCBpb2NfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuIFx0XHR1NjQgdmRvbmUsIHZ0aW1lLCB1c2FnZV91cztcbiBcdFx0dTMyIGh3X2FjdGl2ZSwgaHdfaW51c2U7XG4gXG4mIzQzO1x0XHRucl9hY3RpdmUmIzQzOyYjNDM7O1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogQ29sbGVjdCB1bnVzZWQgYW5kIHdpbmQgdnRpbWUgY2xvc2VyIHRvIHZub3cgdG8gcHJldmVudFxuIFx0XHQgKiBpb2NncyBmcm9tIGFjY3VtdWxhdGluZyBhIGxhcmdlIGFtb3VudCBvZiBidWRnZXQuXG5AQCAtMjQ2MCw2ICYjNDM7MjQ2OSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRcdGlvY19yZWZyZXNoX3ZyYXRlKGlvYywgXHUwMDI2bm93KTtcbiBcdH1cbiBcbiYjNDM7XHR0cmFjZV9pb2Nvc3RfaW9jX3RpY2soaW9jLCBucl9hY3RpdmUsIHVzYWdlX3VzX3N1bSk7XG4mIzQzO1xuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKTtcbiB9XG4gXG5AQCAtMjU3MSwxMCAmIzQzOzI1ODIsMjggQEAgc3RhdGljIHZvaWQgY2FsY192dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW9jX2dxICppb2NnLFxuIFxuIHN0YXRpYyB1NjQgY2FsY192dGltZV9jb3N0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZywgYm9vbCBpc19tZXJnZSlcbiB7XG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xuIFx0dTY0IGNvc3Q7XG4gXG4tXHRjYWxjX3Z0aW1lX2Nvc3RfYnVpbHRpbihiaW8sIGlvY2csIGlzX21lcmdlLCBcdTAwMjZjb3N0KTtcbi1cdHJldHVybiBjb3N0O1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtb2RlbCA9IHJjdV9kZXJlZmVyZW5jZShpb2NnLVx1MDAzZWlvYy1cdTAwM2Vtb2RlbCk7XG4mIzQzO1x0aWYgKG1vZGVsKSB7XG4mIzQzO1x0XHRjb3N0ID0gbW9kZWwtXHUwMDNlY2FsY19jb3N0KGJpby1cdTAwM2ViaV9vcGYsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsXG4mIzQzO1x0XHRcdFx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IsXG4mIzQzO1x0XHRcdFx0XHRpb2NnX3RvX2Jsa2coaW9jZyktXHUwMDNlYmxrY2csXG4mIzQzO1x0XHRcdFx0XHRpc19tZXJnZSA/IElPQ09TVF9DT1NUX0ZfTUVSR0UgOiAwKTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIG1pbihjb3N0LCBWVElNRV9QRVJfU0VDKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHtcbiYjNDM7XHRcdHU2NCBjb3N0O1xuJiM0MztcbiYjNDM7XHRcdGNhbGNfdnRpbWVfY29zdF9idWlsdGluKGJpbywgaW9jZywgaXNfbWVyZ2UsIFx1MDAyNmNvc3QpO1xuJiM0MztcdFx0cmV0dXJuIGNvc3Q7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvYyAqaW9jLFxuQEAgLTI1OTYsMTAgJiM0MzsyNjI1LDI4IEBAIHN0YXRpYyB2b2lkIGNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW9jICppb2MsXG4gXG4gc3RhdGljIHU2NCBjYWxjX3NpemVfdnRpbWVfY29zdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYylcbiB7XG4tXHR1NjQgY29zdDtcbiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7XG4gXG4tXHRjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHJxLCBpb2MsIFx1MDAyNmNvc3QpO1xuLVx0cmV0dXJuIGNvc3Q7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG1vZGVsID0gcmN1X2RlcmVmZXJlbmNlKGlvYy1cdTAwM2Vtb2RlbCk7XG4mIzQzO1x0aWYgKG1vZGVsIFx1MDAyNlx1MDAyNiBycS1cdTAwM2ViaW8gXHUwMDI2XHUwMDI2IHJxLVx1MDAzZWJpby1cdTAwM2ViaV9ibGtnKSB7XG4mIzQzO1x0XHR1NjQgY29zdDtcbiYjNDM7XG4mIzQzO1x0XHRjb3N0ID0gbW9kZWwtXHUwMDNlY2FsY19jb3N0KHJxLVx1MDAzZWNtZF9mbGFncywgYmxrX3JxX2J5dGVzKHJxKSxcbiYjNDM7XHRcdFx0XHRcdGJsa19ycV9wb3MocnEpLFxuJiM0MztcdFx0XHRcdFx0cnEtXHUwMDNlYmlvLVx1MDAzZWJpX2Jsa2ctXHUwMDNlYmxrY2csIDApO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0e1xuJiM0MztcdFx0dTY0IGNvc3Q7XG4mIzQzO1xuJiM0MztcdFx0Y2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihycSwgaW9jLCBcdTAwMjZjb3N0KTtcbiYjNDM7XHRcdHJldHVybiBjb3N0O1xuJiM0MztcdH1cbiB9XG4gXG4gZW51bSBvdmVyX2J1ZGdldF9hY3Rpb24ge1xuQEAgLTI5MDAsNiAmIzQzOzI5NDcsMTkgQEAgc3RhdGljIHZvaWQgaW9jX3Jxb3NfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZpb2MtXHUwMDNldGltZXIpO1xuIFx0ZnJlZV9wZXJjcHUoaW9jLVx1MDAzZXBjcHVfc3RhdCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4mIzQzO1x0e1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0bW9kZWwgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlvYy1cdTAwM2Vtb2RlbCxcbiYjNDM7XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZpb2MtXHUwMDNlbG9jaykpO1xuJiM0MztcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGlvYy1cdTAwM2Vtb2RlbCwgTlVMTCk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0aWYgKG1vZGVsKVxuJiM0MztcdFx0XHRpb2Nvc3RfYnBmX21vZGVsX3B1dChtb2RlbCk7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiBcdGtmcmVlKGlvYyk7XG4gfVxuIFxuQEAgLTM0MzgsMTIgJiM0MzszNDk4LDMwIEBAIHN0YXRpYyB1NjQgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsKHN0cnVjdCBzZXFfZmlsZSAqc2YsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4mIzQzO1x0e1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsID1cbiYjNDM7XHRcdFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtXHUwMDNlbW9kZWwsXG4mIzQzO1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbiYjNDM7XG4mIzQzO1x0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDslcyBjdHJsPSVzIG1vZGVsPSVzIFwmIzM0O1xuJiM0MztcdFx0XHQgICBcJiMzNDtyYnBzPSVsbHUgcnNlcWlvcHM9JWxsdSBycmFuZGlvcHM9JWxsdSBcJiMzNDtcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7d2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGRuYW1lLCBtb2RlbCA/IFwmIzM0O2JwZlwmIzM0OyA6XG4mIzQzO1x0XHRcdFx0ICAgaW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbCA/IFwmIzM0O3VzZXJcJiMzNDsgOiBcJiMzNDthdXRvXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBtb2RlbCA/IG1vZGVsLVx1MDAzZW5hbWUgOiBcJiMzNDtsaW5lYXJcJiMzNDssXG4mIzQzO1x0XHRcdCAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSxcbiYjNDM7XHRcdFx0ICAgdVtJX0xDT0VGX1JSQU5ESU9QU10sIHVbSV9MQ09FRl9XQlBTXSxcbiYjNDM7XHRcdFx0ICAgdVtJX0xDT0VGX1dTRVFJT1BTXSwgdVtJX0xDT0VGX1dSQU5ESU9QU10pO1xuJiM0MztcdH1cbiYjNDM7I2Vsc2VcbiBcdHNlcV9wcmludGYoc2YsIFwmIzM0OyVzIGN0cmw9JXMgbW9kZWw9bGluZWFyIFwmIzM0O1xuIFx0XHQgICBcJiMzNDtyYnBzPSVsbHUgcnNlcWlvcHM9JWxsdSBycmFuZGlvcHM9JWxsdSBcJiMzNDtcbiBcdFx0ICAgXCYjMzQ7d2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcXG5cJiMzNDssXG4gXHRcdCAgIGRuYW1lLCBpb2MtXHUwMDNldXNlcl9jb3N0X21vZGVsID8gXCYjMzQ7dXNlclwmIzM0OyA6IFwmIzM0O2F1dG9cJiMzNDssXG4gXHRcdCAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSwgdVtJX0xDT0VGX1JSQU5ESU9QU10sXG4gXHRcdCAgIHVbSV9MQ09FRl9XQlBTXSwgdVtJX0xDT0VGX1dTRVFJT1BTXSwgdVtJX0xDT0VGX1dSQU5ESU9QU10pO1xuJiM0MzsjZW5kaWZcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzQ1Nyw2ICYjNDM7MzUzNSwzNyBAQCBzdGF0aWMgaW50IGlvY19jb3N0X21vZGVsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQmluZCBAbmFtZSAoZW1wdHkgPSBidWlsdGluIGxpbmVhciBtb2RlbCkgYXMgdGhlIGFjdGl2ZSBjb3N0IG1vZGVsIG9mXG4mIzQzOyAqIEBpb2MuICBUaGUgcmVnaXN0cnkgbG9va3VwIGFuZCByZWZlcmVuY2UgbWFuYWdlbWVudCBoYXBwZW4gb3V0c2lkZVxuJiM0MzsgKiBpb2MtXHUwMDNlbG9jazsgdGhlIHBvaW50ZXIgc3dhcCBoYXBwZW5zIHVuZGVyIGl0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpb2NfYnBmX21vZGVsX2JpbmQoc3RydWN0IGlvYyAqaW9jLCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm5ldyA9IE5VTEwsICpvbGQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5hbWVbMF0pIHtcbiYjNDM7XHRcdHJldCA9IGlvY29zdF9icGZfbW9kZWxfZ2V0KG5hbWUsIFx1MDAyNm5ldyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4mIzQzO1x0b2xkID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtXHUwMDNlbW9kZWwsXG4mIzQzO1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoaW9jLVx1MDAzZW1vZGVsLCBuZXcpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChvbGQpXG4mIzQzO1x0XHRpb2Nvc3RfYnBmX21vZGVsX3B1dChvbGQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBuYW1lWzBdID8gLUVOT0VOVCA6IDA7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IGNvc3RfY3RybF90b2tlbnMgPSB7XG4gXHR7IENPU1RfQ1RSTCxcdFx0XCYjMzQ7Y3RybD0lc1wmIzM0O1x0fSxcbiBcdHsgQ09TVF9NT0RFTCxcdFx0XCYjMzQ7bW9kZWw9JXNcJiMzNDtcdH0sXG5AQCAtMzQ4Miw2ICYjNDM7MzU5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXG4gXHRzdHJ1Y3QgaW9jICppb2M7XG4gXHR1NjQgdVtOUl9JX0xDT0VGU107XG4gXHRib29sIHVzZXI7XG4mIzQzO1x0Y2hhciBicGZfbW9kZWxbSU9DT1NUX01PREVMX05BTUVfTEVOXTtcbiBcdGNoYXIgKmJvZHksICpwO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNTEyLDYgJiM0MzszNjIyLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuIFx0bWVtY3B5KHUsIGlvYy1cdTAwM2VwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7XG4gXHR1c2VyID0gaW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbDtcbiYjNDM7XHRicGZfbW9kZWxbMF0gPSAmIzM5O1xcMCYjMzk7O1xuIFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcbkBAIC0zNTMzLDExICYjNDM7MzY0NCwxNiBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LFxuIFx0XHRcdFx0dXNlciA9IHRydWU7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRcdGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTs7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGNhc2UgQ09TVF9NT0RFTDpcbiBcdFx0XHRtYXRjaF9zdHJsY3B5KGJ1ZiwgXHUwMDI2YXJnc1swXSwgc2l6ZW9mKGJ1ZikpO1xuLVx0XHRcdGlmIChzdHJjbXAoYnVmLCBcJiMzNDtsaW5lYXJcJiMzNDspKVxuLVx0XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGJ1ZiwgXCYjMzQ7bGluZWFyXCYjMzQ7KSkge1xuJiM0MztcdFx0XHRcdC8qIGJhY2sgdG8gdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsICovXG4mIzQzO1x0XHRcdFx0YnBmX21vZGVsWzBdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRtYXRjaF9zdHJsY3B5KGJwZl9tb2RlbCwgXHUwMDI2YXJnc1swXSwgc2l6ZW9mKGJwZl9tb2RlbCkpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMzU2Myw2ICYjNDM7MzY3OSwxNCBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LFxuIHVubG9jazpcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCaW5kIHRoZSBCUEYgbW9kZWwgb3V0c2lkZSBpb2MtXHUwMDNlbG9jazogdGhlIHJlZ2lzdHJ5IGxvb2t1cFxuJiM0MztcdCAqIHRha2VzIHRoZSByZWdpc3RyYXRpb24gbXV0ZXggYW5kIHRoZSBvbGQgbW9kZWwmIzM5O3MgcmVmZXJlbmNlXG4mIzQzO1x0ICogaXMgZHJvcHBlZCBhZnRlciB0aGUgc3dhcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldCA9IGlvY19icGZfbW9kZWxfYmluZChpb2MsIGJwZl9tb2RlbCk7XG4mIzQzO1xuIFx0YmxrX21xX3VucXVpZXNjZV9xdWV1ZShxKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmggYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNhMDg1NWVmYjYxMDdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oXG5AQCAtMCwwICYjNDM7MSw4MiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9MSU5VWF9CTEtfSU9DT1NUX0hcbiYjNDM7I2RlZmluZSBfTElOVVhfQkxLX0lPQ09TVF9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa190eXBlcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIElPQ09TVF9NT0RFTF9OQU1FX0xFTlx0MTZcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYmxrY2c7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQbHVnZ2FibGUgY29zdCBtb2RlbCBpbnRlcmZhY2UgZm9yIGJsay1pb2Nvc3QuXG4mIzQzOyAqXG4mIzQzOyAqIEEgQlBGIHN0cnVjdF9vcHMgaW1wbGVtZW50YXRpb24gcmVnaXN0ZXJlZCBhZ2FpbnN0IFwmIzM0O2lvY29zdF9tb2RlbF9vcHNcJiMzNDtcbiYjNDM7ICogZnVsbHkgcmVwbGFjZXMgdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsIG9uIHRoZSBkZXZpY2VzIGl0IGlzIGJvdW5kIHRvXG4mIzQzOyAqIHRocm91Z2ggaW8uY29zdC5tb2RlbC4gIFRoZSBtb2RlbCBvd25zIHByaWNpbmcgZm9yIGV2ZXJ5IElPIG9uIGEgYm91bmRcbiYjNDM7ICogZGV2aWNlOiBpdCBwcmljZXMgYWxsIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBmbHVzaGVzLCBhbmQgYm90aCB0aGUgYmlvXG4mIzQzOyAqIGNoYXJnaW5nIHBhdGggYW5kIHRoZSByZXF1ZXN0LWxldmVsIHNpemluZyBwYXRoIGNvbnN1bHQgaXQuXG4mIzQzOyAqXG4mIzQzOyAqIGNhbGNfY29zdCgpIGlzIGNhbGxlZCBmcm9tIHRoZSBJTyBzdWJtaXNzaW9uIHBhdGggd2l0aCBSQ1UgcmVhZCBsb2NrXG4mIzQzOyAqIGhlbGQgYW5kIG11c3Qgbm90IHNsZWVwLiAgSXQgcmV0dXJucyB0aGUgY29zdCBvZiB0aGUgSU8gaW4gdnRpbWVcbiYjNDM7ICogdW5pdHMsIHdoZXJlIDEgc2Vjb25kIG9mIGRldmljZSB0aW1lIGVxdWFscyBWVElNRV9QRVJfU0VDICgyXjM3LFxuJiM0MzsgKiBhdmFpbGFibGUgdG8gQlBGIHByb2dyYW1zIHRocm91Z2ggdm1saW51eC5oKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBpc1xuJiM0MzsgKiBjbGFtcGVkIHRvIDEgc2Vjb25kIG9mIGRldmljZSB0aW1lIHBlciBJTy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIG1vZGVsIGlzIHBhc3NlZCB0aGUgYmxrY2cgb2YgdGhlIGlzc3VpbmcgY2dyb3VwIHNvIGl0IGNhbiBrZWVwXG4mIzQzOyAqIHBlci1jZ3JvdXAgc3RhdGUuICBibGtjZ19vbmxpbmUoKS9ibGtjZ19vZmZsaW5lKCkgYXJlIG9wdGlvbmFsXG4mIzQzOyAqIGNhbGxiYWNrcyBtaXJyb3JpbmcgdGhlIGJsa2NnIGNzcyBsaWZlY3ljbGU6IHN0YXRlIGNyZWF0ZWQgb24gb25saW5lXG4mIzQzOyAqIChvciBsYXppbHkgb24gZmlyc3QgdXNlKSBtdXN0IGJlIHJlbGVhc2VkIG9uIG9mZmxpbmUuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZWdpc3RyYXRpb24gYW5kIGJpbmRpbmcgbW9kZWwgZm9sbG93cyB0aGUgVENQIGNvbmdlc3Rpb25cbiYjNDM7ICogY29udHJvbCBmcmFtZXdvcms6IHJlZ2lzdGVyaW5nIGEgc3RydWN0X29wcyBtYWtlcyB0aGUgbW9kZWwgYXZhaWxhYmxlXG4mIzQzOyAqIGJ5IGl0cyBuYW1lLCB3aGlsZSBpby5jb3N0Lm1vZGVsIGJpbmRzIG9uZSByZWdpc3RlcmVkIG1vZGVsIHRvIGFcbiYjNDM7ICogZGV2aWNlLiAgVW5yZWdpc3RlcmluZyByZW1vdmVzIHRoZSBuYW1lIGZyb20gdGhlIHJlZ2lzdHJ5OyBkZXZpY2VzXG4mIzQzOyAqIGFscmVhZHkgYm91bmQga2VlcCB1c2luZyBpdCB1bnRpbCBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBidWlsdGluXG4mIzQzOyAqIG1vZGVsLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgSU9DT1NUX01PREVMX05BTUVfTEVOXHQxNlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogaW9jb3N0LXNwZWNpZmljIGNhbGwgbWV0YWRhdGEgZm9yIGNhbGNfY29zdCgpJiMzOTtzIG1vZGVsX2ZsYWdzXG4mIzQzOyAqIGFyZ3VtZW50OyBldmVyeXRoaW5nIGVsc2UsIGluY2x1ZGluZyBSRVFfUFJFRkxVU0gvUkVRX0ZVQSwgaXNcbiYjNDM7ICogYWxyZWFkeSBwcmVzZW50IGluIHRoZSBvcGYgYXJndW1lbnRcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXHQvKiBjYWxsZWQgZnJvbSBtZXJnZSBwYXRoICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyB7XG4mIzQzO1x0dTY0ICgqY2FsY19jb3N0KSh1NjQgb3BmLCB1NjQgbmJ5dGVzLCBzZWN0b3JfdCBzZWN0b3IsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgbW9kZWxfZmxhZ3MpO1xuJiM0MztcdHZvaWQgKCpibGtjZ19vbmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuJiM0MztcdHZvaWQgKCpibGtjZ19vZmZsaW5lKShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcbiYjNDM7XG4mIzQzO1x0LyogbW9kZWwgbmFtZSwgdXNlZCB0byBzZWxlY3QgdGhlIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCAqL1xuJiM0MztcdGNoYXIgbmFtZVsxNl07XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgaW9jb3N0X2JwZl9tb2RlbF9nZXQoY29uc3QgY2hhciAqbmFtZSxcbiYjNDM7XHRcdFx0IGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcCk7XG4mIzQzO3ZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyk7XG4mIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZyk7XG4mIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuJiM0MztcbiYjNDM7I2Vsc2VcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBibGtjZztcbiYjNDM7c3RydWN0IGlvY29zdF9tb2RlbF9vcHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykgeyB9XG4mIzQzO1xuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cbiYjNDM7I2VuZGlmXHQvKiBfTElOVVhfQkxLX0lPQ09TVF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaFxuaW5kZXggZTc3MmIxYmM2MGQ2MC4uMmI5ZmYzNDhhNGY1MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaFxuQEAgLTE3OCw2ICYjNDM7MTc4LDQ2IEBAIFRSQUNFX0VWRU5UKGlvY29zdF9pb2NfdnJhdGVfYWRqLFxuIFx0KVxuICk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFBlcmlvZGljIHBlci1kZXZpY2Ugc3VtbWFyeSwgZW1pdHRlZCBvbmNlIHBlciBwZXJpb2QgZnJvbSB0aGUgdGFpbCBvZlxuJiM0MzsgKiBpb2NfdGltZXJfZm4oKS4gIFVubGlrZSB0aGUgc3RhdGUtY2hhbmdlIGV2ZW50cyBhYm92ZSwgdGhpcyBmaXJlcyBldmVyeVxuJiM0MzsgKiBwZXJpb2QgdGhlIGNvbnRyb2xsZXIgaXMgcnVubmluZywgaW5jbHVkaW5nIHN0ZWFkeSBzdGF0ZXMsIGFuZCBjYXJyaWVzXG4mIzQzOyAqIHRoZSBvdmVyYWxsIGNvbnRyb2xsZXIgc3RhdGUgc28gYmFzaWMgbW9uaXRvcmluZyBkb2VzbiYjMzk7dCByZXF1aXJlIGRyZ24uXG4mIzQzOyAqL1xuJiM0MztUUkFDRV9FVkVOVChpb2Nvc3RfaW9jX3RpY2ssXG4mIzQzO1xuJiM0MztcdFRQX1BST1RPKHN0cnVjdCBpb2MgKmlvYywgaW50IG5yX2FjdGl2ZSwgdTY0IHVzYWdlX3VzX3N1bSksXG4mIzQzO1xuJiM0MztcdFRQX0FSR1MoaW9jLCBucl9hY3RpdmUsIHVzYWdlX3VzX3N1bSksXG4mIzQzO1xuJiM0MztcdFRQX1NUUlVDVF9fZW50cnkgKFxuJiM0MztcdFx0X19zdHJpbmcoZGV2bmFtZSwgaW9jX25hbWUoaW9jKSlcbiYjNDM7XHRcdF9fZmllbGQodTMyLCBwZXJpb2RfdXMpXG4mIzQzO1x0XHRfX2ZpZWxkKHU2NCwgdnJhdGUpXG4mIzQzO1x0XHRfX2ZpZWxkKGludCwgYnVzeV9sZXZlbClcbiYjNDM7XHRcdF9fZmllbGQoaW50LCBucl9hY3RpdmUpXG4mIzQzO1x0XHRfX2ZpZWxkKHUzMiwgdXNhZ2VfcGN0KVxuJiM0MztcdFx0X19maWVsZChpbnQsIHJ1bm5pbmcpXG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfZmFzdF9hc3NpZ24oXG4mIzQzO1x0XHRfX2Fzc2lnbl9zdHIoZGV2bmFtZSk7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXBlcmlvZF91cyA9IGlvYy1cdTAwM2VwZXJpb2RfdXM7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXZyYXRlID0gaW9jLVx1MDAzZXZ0aW1lX2Jhc2VfcmF0ZTtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlYnVzeV9sZXZlbCA9IGlvYy1cdTAwM2VidXN5X2xldmVsO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9hY3RpdmUgPSBucl9hY3RpdmU7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXVzYWdlX3BjdCA9IGlvYy1cdTAwM2VwZXJpb2RfdXMgP1xuJiM0MztcdFx0XHRkaXZfdTY0KHVzYWdlX3VzX3N1bSAqIDEwMCwgaW9jLVx1MDAzZXBlcmlvZF91cykgOiAwO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VydW5uaW5nID0gaW9jLVx1MDAzZXJ1bm5pbmc7XG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfcHJpbnRrKFwmIzM0O1slc10gcGVyaW9kPSV1dXMgdnJhdGU9JWxsdSBidXN5PSVkIGFjdGl2ZT0lZCB1c2FnZT0ldSUlIHJ1bm5pbmc9JWRcJiMzNDssXG4mIzQzO1x0XHRfX2dldF9zdHIoZGV2bmFtZSksIF9fZW50cnktXHUwMDNlcGVyaW9kX3VzLCBfX2VudHJ5LVx1MDAzZXZyYXRlLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VidXN5X2xldmVsLCBfX2VudHJ5LVx1MDAzZW5yX2FjdGl2ZSwgX19lbnRyeS1cdTAwM2V1c2FnZV9wY3QsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXJ1bm5pbmdcbiYjNDM7XHQpXG4mIzQzOyk7XG4mIzQzO1xuIFRSQUNFX0VWRU5UKGlvY29zdF9pb2NnX2ZvcmdpdmVfZGVidCxcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBpb2NfZ3EgKmlvY2csIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBpb2Nfbm93ICpub3csXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbmluZGV4IDJmNzk2ODhkY2Y3Y2UuLjY3YTYzMGNiNTYxNDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5AQCAtMTM4LDMgJiM0MzsxMzgsNSBAQCBDT05GSUdfU01DX0hTX0NUUkxfQlBGPXlcbiBDT05GSUdfRElCUz15XG4gQ09ORklHX0RJQlNfTE89eVxuIENPTkZJR19QTV9XQUtFTE9DS1M9eVxuJiM0MztDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1Q9eVxuJiM0MztDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTkzNDRiMTNmYmE5OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaW9jb3N0X21vZGVsLmNcbkBAIC0wLDAgJiM0MzsxLDE5MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpb2Nvc3RfbW9kZWwuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvY29zdF9tcy5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFdyaXRlIGEgbGluZSB0byBpby5jb3N0Lm1vZGVsIHdpdGggd3JpdGUoMikgYW5kIHJldHVybiB0aGUgZXJybm8gb2ZcbiYjNDM7ICogdGhlIGZhaWxlZCB3cml0ZSwgb3IgMCBvbiBzdWNjZXNzLiAgc3RkaW8gaXMgbm90IHVzZWQgaGVyZSBvblxuJiM0MzsgKiBwdXJwb3NlOiB0aGUga2VybmVsJiMzOTtzIHJlamVjdGlvbiBoYXBwZW5zIGluIHRoZSB3cml0ZSgpIHN5c2NhbGwsXG4mIzQzOyAqIG5vdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBjb3B5LCBhbmQgZXZlcnkgd3JpdGUsIGluY2x1ZGluZ1xuJiM0MzsgKiB0aGUgZXJyb3IgcGF0aHMgb2YgdGhlIGNhbGxlcnMgYmVsb3csIGlzIGNoZWNrZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX2Nvc3RfbW9kZWwoY29uc3QgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBlcnIgPSAwO1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWxcJiMzNDssIE9fV1JPTkxZKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJybm87XG4mIzQzO1x0biA9IHdyaXRlKGZkLCBidWYsIHN0cmxlbihidWYpKTtcbiYjNDM7XHRpZiAobiBcdTAwM2MgMClcbiYjNDM7XHRcdGVyciA9IGVycm5vO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWFkIGJhY2sgdGhlIGlvLmNvc3QubW9kZWwgbGluZSBvZiBkZXYgYW5kIGNvcHkgdGhlIG1vZGVsPSB2YWx1ZVxuJiM0MzsgKiBpbnRvIEBtb2RlbC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCByZWFkYmFja19tb2RlbChjb25zdCBjaGFyICpkZXYsIGNoYXIgKm1vZGVsLCBzaXplX3QgbW9kZWxfc3opXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGxpbmVbMjU2XSwgd29yZFsyNTZdLCAqbSwgKmVuZDtcbiYjNDM7XHRGSUxFICpmcDtcbiYjNDM7XHRpbnQgZm91bmQgPSAwO1xuJiM0MztcbiYjNDM7XHRmcCA9IGZvcGVuKFwmIzM0Oy9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWxcJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZnApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XG4mIzQzO1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwmIzM0OyUyNTVzXCYjMzQ7LCB3b3JkKSA9PSAxIFx1MDAyNlx1MDAyNiAhc3RyY21wKHdvcmQsIGRldikpIHtcbiYjNDM7XHRcdFx0Zm91bmQgPSAxO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0ZmNsb3NlKGZwKTtcbiYjNDM7XHRpZiAoIWZvdW5kKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRtID0gc3Ryc3RyKGxpbmUsIFwmIzM0O21vZGVsPVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFtKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdG0gJiM0Mzs9IHN0cmxlbihcJiMzNDttb2RlbD1cJiMzNDspO1xuJiM0MztcdGVuZCA9IG07XG4mIzQzO1x0d2hpbGUgKCplbmQgXHUwMDI2XHUwMDI2ICFpc3NwYWNlKCplbmQpKVxuJiM0MztcdFx0ZW5kJiM0MzsmIzQzOztcbiYjNDM7XHRzbnByaW50Zihtb2RlbCwgbW9kZWxfc3osIFwmIzM0OyUuKnNcJiMzNDssIChpbnQpKGVuZCAtIG0pLCBtKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQmluZCB0aGUgbmFtZWQgbW9kZWwgdG8gYSBkZXZpY2Ugd2l0aCBcJiMzNDttb2RlbD1cdTAwM2NuYW1lXHUwMDNlXCYjMzQ7LCB2ZXJpZnkgdGhlXG4mIzQzOyAqIHJlYWRiYWNrIGFuZCByZXN0b3JlIHRoZSBidWlsdGluIG1vZGVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGJpbmRfbW9kZWwoY29uc3QgY2hhciAqZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMzAwXSwgZ290WzY0XTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslcyBtb2RlbD0lc1xcblwmIzM0OywgZGV2LCBuYW1lKTtcbiYjNDM7XHRlcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0Q0hFQ0soZmFsc2UsIFwmIzM0O3dyaXRlX21vZGVsXCYjMzQ7LCBcJiMzNDt3cml0ZSBtb2RlbD0lczogJXNcXG5cJiMzNDssIG5hbWUsXG4mIzQzO1x0XHQgICAgICBzdHJlcnJvcihlcnIpKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gcmVhZGJhY2tfbW9kZWwoZGV2LCBnb3QsIHNpemVvZihnb3QpKTtcbiYjNDM7XHRpZiAoZXJyIHx8IHN0cmNtcChnb3QsIG5hbWUpKSB7XG4mIzQzO1x0XHRDSEVDSyhmYWxzZSwgXCYjMzQ7cmVhZGJhY2tfbW9kZWxcJiMzNDssIFwmIzM0O2dvdCBtb2RlbD0lcyB3YW50ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgZXJyID8gXCYjMzQ7KG5vbmUpXCYjMzQ7IDogZ290LCBuYW1lKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHJlc3RvcmUgdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsOyB0aGUgd3JpdGUgaXMgY2hlY2tlZCB0b28gKi9cbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslcyBtb2RlbD1saW5lYXJcXG5cJiMzNDssIGRldik7XG4mIzQzO1x0ZXJyID0gd3JpdGVfY29zdF9tb2RlbChidWYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdENIRUNLKGZhbHNlLCBcJiMzNDtyZXN0b3JlX2xpbmVhclwmIzM0OywgXCYjMzQ7d3JpdGUgbW9kZWw9bGluZWFyOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIHN0cmVycm9yKGVycikpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGRldiBhcmd1bWVudCBtdXN0IGJlIHByZXNlbnQgaW4gaW8uY29zdC5xb3MgYWxyZWFkeSwgd2hpY2hcbiYjNDM7ICogbWVhbnMgaW9jb3N0IGlzIGVuYWJsZWQgZm9yIGl0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBkZXZfaGFzX2lvY29zdChjb25zdCBjaGFyICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGxpbmVbMjU2XSwgd29yZFsyNTZdO1xuJiM0MztcdEZJTEUgKmZwO1xuJiM0MztcdGludCBmb3VuZCA9IDA7XG4mIzQzO1xuJiM0MztcdGZwID0gZm9wZW4oXCYjMzQ7L3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5xb3NcJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHtcbiYjNDM7XHRcdGlmIChzc2NhbmYobGluZSwgXCYjMzQ7JTI1NXNcJiMzNDssIHdvcmQpID09IDEgXHUwMDI2XHUwMDI2ICFzdHJjbXAod29yZCwgZGV2KSkge1xuJiM0MztcdFx0XHRmb3VuZCA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRmY2xvc2UoZnApO1xuJiM0MztcdHJldHVybiBmb3VuZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQmluZCB0aGUgMnggZXhhbXBsZSBtb2RlbCBhbmQgdmVyaWZ5IHRoZSBpby5jb3N0Lm1vZGVsIHJlYWRiYWNrLlxuJiM0MzsgKiBJTyBhY2NvdW50aW5nIGl0c2VsZiBpcyBub3QgY2hlY2tlZCBoZXJlOyBpdCBuZWVkcyBhIGRldmljZSBkb2luZ1xuJiM0MzsgKiByZWFsIElPIHVuZGVyIGlvY29zdCBhbmQgaXMgY292ZXJlZCBieSB0aGUga2VybmVsLXNpZGUgdmFsaWRhdGlvblxuJiM0MzsgKiBkZXNjcmliZWQgaW4gdGhlIGNvdmVyIGxldHRlci5cbiYjNDM7ICpcbiYjNDM7ICogUmVxdWlyZXMgcm9vdCwgY2dyb3VwIHYyIGFuZCBhIGRldmljZSB3aXRoIGlvY29zdCBzdXBwb3J0LiAgVGhlXG4mIzQzOyAqIGRldmljZSBtdXN0IGJlIGdpdmVuIGFzIG1ham9yOm1pbm9yIGluICRJT0NPU1RfVEVTVF9ERVYsIG90aGVyd2lzZVxuJiM0MzsgKiB0aGUgdGVzdCBpcyBza2lwcGVkLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWwodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb2Nvc3RfbW9kZWwgKnNrZWw7XG4mIzQzO1x0Y2hhciBidWZbMzAwXSwgKmRldjtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRkZXYgPSBnZXRlbnYoXCYjMzQ7SU9DT1NUX1RFU1RfREVWXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWRldiB8fCBnZXRldWlkKCkgIT0gMCkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksIFwmIzM0O2lvY29zdF9tb3VudGVkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBuZWdhdGl2ZTogYmluZGluZyBhbiB1bmtub3duIG1vZGVsIG5hbWUgbXVzdCBiZSByZWplY3RlZCxcbiYjNDM7XHQgKiBzbyBhIHR5cG8gY2Fubm90IHNpbGVudGx5IGRpc2FibGUgY29zdCBtb2RlbCB1cGRhdGVzXG4mIzQzO1x0ICovXG4mIzQzO1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7JXMgbW9kZWw9bm9fc3VjaF9tb2RlbFxcblwmIzM0OywgZGV2KTtcbiYjNDM7XHRlcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgRU5PRU5ULCBcJiMzNDt1bmtub3duX21vZGVsX3JlamVjdGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGlvY29zdF9tb2RlbF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5fbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIGF0dGFjaGluZyB0aGUgc3RydWN0X29wcyByZWdpc3RlcnMgdGhlIG1vZGVsIGJ5IG5hbWUgKi9cbiYjNDM7XHRlcnIgPSBpb2Nvc3RfbW9kZWxfX2F0dGFjaChza2VsKTtcbiYjNDM7XHRpZiAoQVNTRVJUX09LKGVyciwgXCYjMzQ7YXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdEFTU0VSVF9PSyhiaW5kX21vZGVsKGRldiwgXCYjMzQ7aW9jb3N0XzJ4XCYjMzQ7KSwgXCYjMzQ7YmluZF9hbmRfcmVhZGJhY2tcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpb2Nvc3RfbW9kZWxfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFNhbWUgY2hlY2sgZm9yIHRoZSBtdWx0aS1zdHJlYW0gZXhhbXBsZSBtb2RlbC4gIE9ubHkgb25lIG1vZGVsIGNhblxuJiM0MzsgKiBiZSBib3VuZCB0byBhIGRldmljZSBhdCBhIHRpbWU7IGJvdGggdGVzdHMgYmluZCBhbmQgcmVzdG9yZSwgc29cbiYjNDM7ICogdGhleSBhcmUgc2VyaWFsIGFuZCBpbmRlcGVuZGVudC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfaW9jb3N0X21vZGVsX3N0cmVhbXModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb2Nvc3RfbXMgKnNrZWw7XG4mIzQzO1x0Y2hhciAqZGV2O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGRldiA9IGdldGVudihcJiMzNDtJT0NPU1RfVEVTVF9ERVZcJiMzNDspO1xuJiM0MztcdGlmICghZGV2IHx8IGdldGV1aWQoKSAhPSAwKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGlmICghQVNTRVJUX1RSVUUoZGV2X2hhc19pb2Nvc3QoZGV2KSwgXCYjMzQ7aW9jb3N0X21vdW50ZWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRza2VsID0gaW9jb3N0X21zX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaW9jb3N0X21zX19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKEFTU0VSVF9PSyhlcnIsIFwmIzM0O2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsIFwmIzM0O2lvY29zdF9tc1wmIzM0OyksIFwmIzM0O2JpbmRfYW5kX3JlYWRiYWNrXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aW9jb3N0X21zX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjhhZDQxN2IzNTg0OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5AQCAtMCwwICYjNDM7MSwxMTYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogRXhhbXBsZSBpb2Nvc3QgY29zdCBtb2RlbDogdGhlIGJ1aWx0aW4gbGluZWFyIEhERCBmb3JtdWxhIHdpdGggYWxsXG4mIzQzOyAqIGNvc3RzIGRvdWJsZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjb25zdGFudHMgbWlycm9yIHdoYXQgY2FsY19sY29lZnMoKSBkZXJpdmVzIGZyb20gdGhlIEFVVE9QX0hERFxuJiM0MzsgKiBkZWZhdWx0cyAocmJwcz0xNzQwMTkxNzYgcnNlcWlvcHM9NDE3MDggcnJhbmRpb3BzPTM3MCwgdy1zaWRlXG4mIzQzOyAqIGFuYWxvZykgaW4gdnRpbWUgdW5pdHMgd2hlcmUgMXMgPT0gMl4zNywgZXhwcmVzc2VkIHdpdGggdGhlIHNhbWVcbiYjNDM7ICogcm91bmQtdXAgZGl2aXNpb25zIHNvIHRoZXkgY2Fubm90IGRyaWZ0IGZyb20gdGhlIGtlcm5lbC4gIEEgZGV2aWNlXG4mIzQzOyAqIGJvdW5kIHRvIHRoaXMgbW9kZWwgdGhyb3VnaCBpby5jb3N0Lm1vZGVsIGNoYXJnZXMgZXhhY3RseSB0d2ljZSB0aGVcbiYjNDM7ICogYnVpbHRpbiBtb2RlbCB1bmRlciB0aGUgc2FtZSB3b3JrbG9hZCwgd2hpY2ggbWFrZXMgaXQgYSBjb252ZW5pZW50XG4mIzQzOyAqIHdheSB0byB2ZXJpZnkgdGhhdCBhY2NvdW50aW5nIGdvZXMgdGhyb3VnaCB0aGUgQlBGIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nXG4mIzQzOyAqIGZsdXNoZXM6IHRoZXJlIGlzIG5vIGZhbGxiYWNrIHRvIHRoZSBidWlsdGluIG1vZGVsLCBhIGRhdGFsZXNzXG4mIzQzOyAqIFdSSVRFfFJFUV9QUkVGTFVTSCBpcyBwcmljZWQgYXMgYSBvbmUtcGFnZSB3cml0ZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovXG4mIzQzOyNkZWZpbmUgSU9DX1BBR0VfU0laRVx0XHQ0MDk2XG4mIzQzOyNkZWZpbmUgSU9DX1NFQ1RfVE9fUEFHRV9TSElGVFx0M1x0LyogNTEyQiBzZWN0b3JzIHRvIDRrQiBwYWdlcyAqL1xuJiM0MzsjZGVmaW5lIExDT0VGX1JBTkRJT19QQUdFU1x0NDA5Nlx0LyogMTZNQiBzZWVrIHRocmVzaG9sZCAqL1xuJiM0MzsjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAwKVx0Lyogbm90IGluIEJURjogYSBwbGFpbiBtYWNybyAqL1xuJiM0MzsjZGVmaW5lIElPQ09TVF9SRVFfT1BfTUFTS1x0MHhmZlx0XHQvKiBSRVFfT1BfTUFTSywgbm90IGluIEJURiAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRElWNjRfVTY0X1JPVU5EX1VQIC8gRElWX1JPVU5EX1VQX1VMTCBlcXVpdmFsZW50cywgZm9sZGVkIGF0XG4mIzQzOyAqIGNvbXBpbGUgdGltZVxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVSh4LCB5KVx0XHQoKHgpIC8gKHkpICYjNDM7ICgoKHgpICUgKHkpKSA/IDEgOiAwKSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkJQU1x0MTc0MDE5MTc2VUxMXG4mIzQzOyNkZWZpbmUgUlNFUUlPUFNcdDQxNzA4VUxMXG4mIzQzOyNkZWZpbmUgUlJBTkRJT1BTXHQzNzBVTExcbiYjNDM7I2RlZmluZSBXQlBTXHQxNzgwNzU4NjZVTExcbiYjNDM7I2RlZmluZSBXU0VRSU9QU1x0NDI3MDVVTExcbiYjNDM7I2RlZmluZSBXUkFORElPUFNcdDM3OFVMTFxuJiM0MztcbiYjNDM7I2RlZmluZSBSUEFHRVx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSlcbiYjNDM7I2RlZmluZSBSU0VRSU9cdChSVShWVElNRV9QRVJfU0VDLCBSU0VRSU9QUykgLSBSUEFHRSlcbiYjNDM7I2RlZmluZSBSUkFORElPXHQoUlUoVlRJTUVfUEVSX1NFQywgUlJBTkRJT1BTKSAtIFJQQUdFKVxuJiM0MzsjZGVmaW5lIFdQQUdFXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKVxuJiM0MzsjZGVmaW5lIFdTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdTRVFJT1BTKSAtIFdQQUdFKVxuJiM0MzsjZGVmaW5lIFdSQU5ESU9cdChSVShWVElNRV9QRVJfU0VDLCBXUkFORElPUFMpIC0gV1BBR0UpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBwZXItY2dyb3VwIGN1cnNvciBzdG9yYWdlOiBrZXllZCBieSB0aGUgY2dyb3VwLCBmcmVlZCB3aXRoIGl0LCBzb1xuJiM0MzsgKiB0aGUgbW9kZWwgbmV2ZXIgbGVha3Mgb3IgcmV1c2VzIHN0YWxlIHBlci1jZ3JvdXAgc3RhdGVcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9DR1JQX1NUT1JBR0UpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0Mzt9IGN1cnNvcl9zdG9yZSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO3U2NCBCUEZfUFJPRyhpb2Nvc3RfMnhfY2FsY19jb3N0LCB1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLFxuJiM0MztcdCAgICAgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHBhZ2VzLCBzZWVrX3BhZ2VzID0gMCwgYmFzZSwgY29lZl9wYWdlLCByYW5kaW8sIGNvc3Q7XG4mIzQzO1xuJiM0MztcdGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7XG4mIzQzO1x0XHRiYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTztcbiYjNDM7XHR9IGVsc2UgaWYgKChvcGYgXHUwMDI2IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1dSSVRFKSB7XG4mIzQzO1x0XHRiYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd25cbiYjNDM7XHRcdCAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGVcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBtaXJyb3IgdGhlIGJ1aWx0aW4gc2luZ2xlIHBlci1jZ3JvdXAgY3Vyc29yOiB0aGUgbW9kZWwga2VlcHNcbiYjNDM7XHQgKiBpdHMgb3duIGN1cnNvciBrZXllZCBieSB0aGUgYmxrY2cgYXJndW1lbnRcbiYjNDM7XHQgKi9cbiYjNDM7XHR7XG4mIzQzO1x0XHRfX3U2NCAqY3Vyc29yLCBjdXI7XG4mIzQzO1xuJiM0MztcdFx0Y3Vyc29yID0gYnBmX2NncnBfc3RvcmFnZV9nZXQoXHUwMDI2Y3Vyc29yX3N0b3JlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgYmxrY2ctXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7XG4mIzQzO1x0XHRpZiAoIWN1cnNvcilcbiYjNDM7XHRcdFx0cmV0dXJuIDIgKiAoYmFzZSAmIzQzOyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlKTtcbiYjNDM7XHRcdGN1ciA9ICpjdXJzb3I7XG4mIzQzO1x0XHRzZWVrX3BhZ2VzID0gc2VjdG9yIFx1MDAzZSBjdXIgPyBzZWN0b3IgLSBjdXIgOiBjdXIgLSBzZWN0b3I7XG4mIzQzO1x0XHRzZWVrX3BhZ2VzIFx1MDAzZVx1MDAzZT0gSU9DX1NFQ1RfVE9fUEFHRV9TSElGVDtcbiYjNDM7XHRcdGlmIChzZWVrX3BhZ2VzIFx1MDAzZSBMQ09FRl9SQU5ESU9fUEFHRVMpXG4mIzQzO1x0XHRcdGJhc2UgPSByYW5kaW87XG4mIzQzO1x0XHRpZiAoIShtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkpXG4mIzQzO1x0XHRcdCpjdXJzb3IgPSBzZWN0b3IgJiM0MzsgUlUobmJ5dGVzLCA1MTIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFnZXMgPSBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpO1xuJiM0MztcdGlmICghcGFnZXMpXG4mIzQzO1x0XHRwYWdlcyA9IDE7XHQvKiBkYXRhbGVzcyBmbHVzaDogb25lIHBhZ2UgKi9cbiYjNDM7XHRpZiAobW9kZWxfZmxhZ3MgXHUwMDI2IElPQ09TVF9DT1NUX0ZfTUVSR0UpXG4mIzQzO1x0XHRiYXNlID0gMDtcbiYjNDM7XG4mIzQzO1x0Y29zdCA9IDIgKiAoYmFzZSAmIzQzOyBwYWdlcyAqIGNvZWZfcGFnZSk7XG4mIzQzO1x0cmV0dXJuIGNvc3Q7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbiYjNDM7c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgaW9jb3N0XzJ4ID0ge1xuJiM0MztcdC5jYWxjX2Nvc3QgPSAodm9pZCAqKWlvY29zdF8yeF9jYWxjX2Nvc3QsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtpb2Nvc3RfMnhcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2NjNTdjMDNkM2M4OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5AQCAtMCwwICYjNDM7MSwxMzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogRXhhbXBsZSBtdWx0aS1zdHJlYW0gc2VxdWVudGlhbGl0eSBkZXRlY3Rpb24gY29zdCBtb2RlbC5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGJ1aWx0aW4gbW9kZWwga2VlcHMgYSBzaW5nbGUgY3Vyc29yIHBlciBjZ3JvdXAsIHNvIHR3b1xuJiM0MzsgKiBpbnRlcmxlYXZlZCBzZXF1ZW50aWFsIHJlYWRlcnMgaW4gb25lIGNncm91cCBhcmUgYWxsIHByaWNlZCByYW5kb21cbiYjNDM7ICogKG1lYXN1cmVkIDg5eCBvdmVyY2hhcmdlLCAxMi45eCB0aHJvdWdocHV0IGNvbGxhcHNlKSwgd2hpbGUgcmFuZG9tXG4mIzQzOyAqIElPIGluc2lkZSBhIGhvdCB3aW5kb3cgc21hbGxlciB0aGFuIHRoZSAxNk1CIHNlZWsgdGhyZXNob2xkIGlzXG4mIzQzOyAqIHByaWNlZCBzZXF1ZW50aWFsIChtZWFzdXJlZCAxMDd4IHVuZGVyY2hhcmdlKS4gIFRoaXMgbW9kZWwgcmVwbGFjZXNcbiYjNDM7ICogdGhlIHNpbmdsZSBjdXJzb3Igd2l0aCBhIHBlci1jZ3JvdXAgdGFibGUgb2Ygc3RyZWFtIHNsb3RzOiBhbiBJTyBpc1xuJiM0MzsgKiBzZXF1ZW50aWFsIGlmZiBpdHMgc2VjdG9yIG1hdGNoZXMgdGhlIGV4cGVjdGVkIG5leHQgc2VjdG9yIG9mIGFueVxuJiM0MzsgKiB0cmFja2VkIHN0cmVhbS4gIEludGVybGVhdmVkIHN0cmVhbXMga2VlcCB0aGVpciBvd24gc2xvdHMsIGFuZFxuJiM0MzsgKiB3aW5kb3dlZCByYW5kb20gSU8gcmFyZWx5IG1hdGNoZXMgYSBtb3ZpbmcgZXhwZWN0YXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFN0cmVhbSBzdGF0ZSBsaXZlcyBpbiBhIENHUlBfU1RPUkFHRSBtYXAsIHNvIGl0IGlzIGNyZWF0ZWQgYW5kXG4mIzQzOyAqIGZyZWVkIHdpdGggdGhlIGNncm91cC4gIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGJ1aWx0aW5cbiYjNDM7ICogbGluZWFyIGZvcm11bGEgaXRzZWxmLCBpbmNsdWRpbmcgZmx1c2ggcHJpY2luZy5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7LyogVlRJTUVfUEVSX1NFQyBjb21lcyBmcm9tIHZtbGludXguaCAoYSBCVEYgZW51bSBjb25zdGFudCkgKi9cbiYjNDM7I2RlZmluZSBJT0NfUEFHRV9TSVpFXHRcdDQwOTZcbiYjNDM7I2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUXHQzXHQvKiA1MTJCIHNlY3RvcnMgdG8gNGtCIHBhZ2VzICovXG4mIzQzOyNkZWZpbmUgTENPRUZfUkFORElPX1BBR0VTXHQ0MDk2XHQvKiAxNk1CIHNlZWsgdGhyZXNob2xkICovXG4mIzQzOyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXHQvKiBub3QgaW4gQlRGOiBhIHBsYWluIG1hY3JvICovXG4mIzQzOyNkZWZpbmUgSU9DT1NUX1JFUV9PUF9NQVNLXHQweGZmXHRcdC8qIFJFUV9PUF9NQVNLLCBub3QgaW4gQlRGICovXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBESVY2NF9VNjRfUk9VTkRfVVAgLyBESVZfUk9VTkRfVVBfVUxMIGVxdWl2YWxlbnRzLCBmb2xkZWQgYXRcbiYjNDM7ICogY29tcGlsZSB0aW1lXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJVKHgsIHkpXHRcdCgoeCkgLyAoeSkgJiM0MzsgKCgoeCkgJSAoeSkpID8gMSA6IDApKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQlBTXHQxNzQwMTkxNzZVTExcbiYjNDM7I2RlZmluZSBSU0VRSU9QU1x0NDE3MDhVTExcbiYjNDM7I2RlZmluZSBSUkFORElPUFNcdDM3MFVMTFxuJiM0MzsjZGVmaW5lIFdCUFNcdDE3ODA3NTg2NlVMTFxuJiM0MzsjZGVmaW5lIFdTRVFJT1BTXHQ0MjcwNVVMTFxuJiM0MzsjZGVmaW5lIFdSQU5ESU9QU1x0Mzc4VUxMXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJQQUdFXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoUkJQUywgSU9DX1BBR0VfU0laRSkpKVxuJiM0MzsjZGVmaW5lIFJTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFJTRVFJT1BTKSAtIFJQQUdFKVxuJiM0MzsjZGVmaW5lIFJSQU5ESU9cdChSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpXG4mIzQzOyNkZWZpbmUgV1BBR0VcdChSVShWVElNRV9QRVJfU0VDLCBSVShXQlBTLCBJT0NfUEFHRV9TSVpFKSkpXG4mIzQzOyNkZWZpbmUgV1NFUUlPXHQoUlUoVlRJTUVfUEVSX1NFQywgV1NFUUlPUFMpIC0gV1BBR0UpXG4mIzQzOyNkZWZpbmUgV1JBTkRJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlNMT1RTXHQ0XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc3RyZWFtcyB7XG4mIzQzO1x0X191NjQgZXhwZWN0ZWRbTlNMT1RTXTtcdC8qIG5leHQgZXhwZWN0ZWQgc2VjdG9yLCBwZXIgc3RyZWFtICovXG4mIzQzO1x0X191NjQgc3RhbXBbTlNMT1RTXTtcdC8qIExSVSBzdGFtcCwgMCA9IGVtcHR5ICovXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBwZXItY2dyb3VwIHN0cmVhbSB0YWJsZToga2V5ZWQgYnkgdGhlIGNncm91cCwgZnJlZWQgd2l0aCBpdFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0NHUlBfU1RPUkFHRSk7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qgc3RyZWFtcyk7XG4mIzQzO30gc3RyZWFtX3RhYiBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO3U2NCBCUEZfUFJPRyhpb2Nvc3RfbXNfY2FsY19jb3N0LCB1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLFxuJiM0MztcdCAgICAgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN0cmVhbXMgKnM7XG4mIzQzO1x0dTY0IHBhZ2VzLCBiYXNlLCBjb2VmX3BhZ2UsIHJhbmRpbywgYWR2YW5jZSwgbm93O1xuJiM0MztcdHUzMiBpLCB2aWN0aW0gPSAwLCBmb3VuZCA9IDB4RkZGRkZGRkY7XG4mIzQzO1xuJiM0MztcdGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7XG4mIzQzO1x0XHRiYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTztcbiYjNDM7XHR9IGVsc2UgaWYgKChvcGYgXHUwMDI2IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1dSSVRFKSB7XG4mIzQzO1x0XHRiYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd25cbiYjNDM7XHRcdCAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGVcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRhZHZhbmNlID0gUlUobmJ5dGVzLCA1MTIpO1x0Lyogc2VjdG9ycyAqL1xuJiM0MztcbiYjNDM7XHRzID0gYnBmX2NncnBfc3RvcmFnZV9nZXQoXHUwMDI2c3RyZWFtX3RhYiwgYmxrY2ctXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcbiYjNDM7XHRcdFx0XHQgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTtcbiYjNDM7XHRpZiAoIXMpXG4mIzQzO1x0XHRyZXR1cm4gYmFzZSAmIzQzOyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlO1xuJiM0MztcbiYjNDM7XHRub3cgPSBicGZfa3RpbWVfZ2V0X25zKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlNMT1RTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHMtXHUwMDNlZXhwZWN0ZWRbaV0gPT0gc2VjdG9yIFx1MDAyNlx1MDAyNiBzLVx1MDAzZXN0YW1wW2ldKSB7XG4mIzQzO1x0XHRcdGZvdW5kID0gaTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmIChmb3VuZCAhPSAweEZGRkZGRkZGKSB7XG4mIzQzO1x0XHQvKiBzZXF1ZW50aWFsOiBrZWVwIHRoZSBzZXEgYmFzZSBmcm9tIHRoZSBvcCBicmFuY2ggKi9cbiYjNDM7XHRcdHMtXHUwMDNlZXhwZWN0ZWRbZm91bmRdID0gc2VjdG9yICYjNDM7IGFkdmFuY2U7XG4mIzQzO1x0XHRzLVx1MDAzZXN0YW1wW2ZvdW5kXSA9IG5vdztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0YmFzZSA9IHJhbmRpbztcbiYjNDM7XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIE5TTE9UUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHMtXHUwMDNlc3RhbXBbaV0gXHUwMDNjIHMtXHUwMDNlc3RhbXBbdmljdGltXSlcbiYjNDM7XHRcdFx0XHR2aWN0aW0gPSBpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cy1cdTAwM2VleHBlY3RlZFt2aWN0aW1dID0gc2VjdG9yICYjNDM7IGFkdmFuY2U7XG4mIzQzO1x0XHRzLVx1MDAzZXN0YW1wW3ZpY3RpbV0gPSBub3c7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwYWdlcyA9IFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSk7XG4mIzQzO1x0aWYgKCFwYWdlcylcbiYjNDM7XHRcdHBhZ2VzID0gMTtcdC8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqL1xuJiM0MztcdGlmIChtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIG1lcmdlZCBiaW9zIHNraXAgdGhlIGJhc2UgY29zdCBidXQgc3RpbGwgYWR2YW5jZVxuJiM0MztcdFx0ICogdGhlIHN0cmVhbSBwb3NpdGlvbiBhYm92ZSwgc28gYSBtZXJnZSBhdCB0aGVcbiYjNDM7XHRcdCAqIGV4cGVjdGVkIHNlY3RvciBkb2VzIG5vdCBtYWtlIHRoZSBmb2xsb3dpbmcgbmV3IElPXG4mIzQzO1x0XHQgKiBsb29rIHJhbmRvbVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRiYXNlID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBiYXNlICYjNDM7IHBhZ2VzICogY29lZl9wYWdlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7LnN0cnVjdF9vcHNcJiMzNDspXG4mIzQzO3N0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzIGlvY29zdF9tcyA9IHtcbiYjNDM7XHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfbXNfY2FsY19jb3N0LFxuJiM0MztcdC5uYW1lID0gXCYjMzQ7aW9jb3N0X21zXCYjMzQ7LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUX0JQRiYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2NfYnBmX21vZGVsX2JpbmQmIzM0OywKICAgICYjMzQ7aW9jX2Nvc3RfbW9kZWxfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2FsY192dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2NhbGNfc2l6ZV92dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfdW5yZWcmIzM0OywKICAgICYjMzQ7YnBmX2lvY29zdF92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX2dldCYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX3B1dCYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IChpb2Nvc3RfbW9kZWxfb3BzKSBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzIGluIGJsay1pb2Nvc3QuIEl0IGludHJvZHVjZXMgbmV3IGtlcm5lbCBjb2RlIGluIGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgZm9yIHJlZ2lzdGVyaW5nLCB2YWxpZGF0aW5nLCBhbmQgbWFuYWdpbmcgQlBGIGNvc3QgbW9kZWxzLCBhbmQgdXBkYXRlcyBibG9jay9ibGstaW9jb3N0LmMgYW5kIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBtb2RlbHMgZHVyaW5nIElPIGNvc3QgY2FsY3VsYXRpb25zLCBjb25maWd1cmF0aW9uIHdyaXRlcywgYW5kIGNncm91cCBsaWZlY3ljbGUgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEJQRiBzeXNjYWxscyBhbmQgY2dyb3VwIHYyIGlvLmNvc3QubW9kZWwgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjNTBkNDAzNDM4YjRiNGUxODhiMTQ4YTBhYjVjYzRhZjViNjdhMDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxNDoxMDo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAppbmRleCA4ZDI2MDM3NTFjNTFhLi5hNjkxMGFkN2MyZDAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CkBAIC0yMTI0LDYgJiM0MzsyMTI0LDE3IEBAIElPIEludGVyZmFjZSBGaWxlcwogCXBhcmFtZXRlcnMgYXJlIHdyaXR0ZW4gdG8sICYjMzQ7Y3RybCYjMzQ7IGJlY29tZSAmIzM0O3VzZXImIzM0OyBhbmQgdGhlCiAJYXV0b21hdGljIGNoYW5nZXMgYXJlIGRpc2FibGVkLgogCiYjNDM7CVdoZW4gQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiBpcyBlbmFibGVkLCAmIzM0O21vZGVsJiMzNDsgYWxzbyBhY2NlcHRzCiYjNDM7CXRoZSBuYW1lIG9mIGEgcmVnaXN0ZXJlZCBpb2Nvc3RfbW9kZWxfb3BzIEJQRiBzdHJ1Y3Rfb3BzIG1vZGVsOgomIzQzOwkmIzM0O21vZGVsPSZsdDtuYW1lJmd0OyYjMzQ7IGJpbmRzIHRoZSBtb2RlbCB0byB0aGUgZGV2aWNlIGFuZCB0aGUgbW9kZWwgZnVsbHkKJiM0MzsJcmVwbGFjZXMgdGhlIGJ1aWx0aW4gbGluZWFyIHByaWNpbmcsIGZvciBldmVyeSBvcGVyYXRpb24gaW5jbHVkaW5nCiYjNDM7CWZsdXNoZXM7ICYjMzQ7bW9kZWw9bGluZWFyJiMzNDsgKG9yICYjMzQ7Y3RybD1hdXRvL3VzZXImIzM0OykgcmVzdG9yZXMgdGhlIGJ1aWx0aW4KJiM0MzsJbW9kZWwuICBXcml0aW5nIGFuIHVua25vd24gbmFtZSBmYWlscyB3aXRoIEVOT0VOVC4gIFVucmVnaXN0ZXJpbmcKJiM0MzsJYSBtb2RlbCByZW1vdmVzIGl0cyBuYW1lOyBkZXZpY2VzIGFscmVhZHkgYm91bmQga2VlcCB1c2luZyBpdAomIzQzOwl1bnRpbCBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBidWlsdGluIG1vZGVsLCBmb2xsb3dpbmcgdGhlIGxpZmV0aW1lCiYjNDM7CW1vZGVsIG9mIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuICBTZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmgKJiM0MzsJZm9yIHRoZSBtb2RlbCBpbnRlcmZhY2UuCiYjNDM7CiAJV2hlbiAmIzM0O21vZGVsJiMzNDsgaXMgJiMzNDtsaW5lYXImIzM0OywgdGhlIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzIGFyZQogCWRlZmluZWQuCiAKZGlmZiAtLWdpdCBhL2Jsb2NrL0tjb25maWcgYi9ibG9jay9LY29uZmlnCmluZGV4IDcwZTRhNjZkOTQxZmYuLjkxZTgwOGY4NmQyOGQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svS2NvbmZpZwpAQCAtMjMxLDQgJiM0MzsyMzEsMTMgQEAgY29uZmlnIEJMS19FUlJPUl9JTkpFQ1RJT04KIAogc291cmNlICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkJiMzNDsKIAomIzQzO2NvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJYm9vbCAmIzM0O0VuYWJsZSBCUEYgcGx1Z2dhYmxlIGNvc3QgbW9kZWwgc3VwcG9ydCBmb3IgdGhlIGNvc3QgSU8gY29udHJvbGxlciYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQkxLX0NHUk9VUF9JT0NPU1QgJmFtcDsmYW1wOyBCUEZfU1lTQ0FMTCAmYW1wOyZhbXA7IEJQRl9KSVQgJmFtcDsmYW1wOyBERUJVR19JTkZPX0JURgomIzQzOwloZWxwCiYjNDM7CSBFbmFibGluZyB0aGlzIG9wdGlvbiByZWdpc3RlcnMgdGhlICYjMzQ7aW9jb3N0X21vZGVsX29wcyYjMzQ7IEJQRgomIzQzOwkgc3RydWN0X29wcyB0eXBlLCB3aGljaCBhbGxvd3MgYSBCUEYgcHJvZ3JhbSB0byBmdWxseSByZXBsYWNlCiYjNDM7CSB0aGUgYnVpbHRpbiBsaW5lYXIgY29zdCBtb2RlbCBvbiBhIGRldmljZSBpdCBpcyBib3VuZCB0bwomIzQzOwkgdGhyb3VnaCBpby5jb3N0Lm1vZGVsLgomIzQzOwogZW5kaWYgIyBCTE9DSwpkaWZmIC0tZ2l0IGEvYmxvY2svTWFrZWZpbGUgYi9ibG9jay9NYWtlZmlsZQppbmRleCBlN2JkMzIwZTNkNjk3Li5lZTVjZWJlZWEwMDZmIDEwMDY0NAotLS0gYS9ibG9jay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9NYWtlZmlsZQpAQCAtMzksMyAmIzQzOzM5LDQgQEAgb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTikJJiM0Mzs9IGJsay1jcnlwdG8ubyBibGstY3J5cHRvLXByb2ZpbGUubyBcCiAJCQkJCSAgIGJsay1jcnlwdG8tc3lzZnMubwogb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSykJJiM0Mzs9IGJsay1jcnlwdG8tZmFsbGJhY2subwogb2JqLSQoQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEKQkmIzQzOz0gaG9sZGVyLm8KJiM0MztvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGKQkmIzQzOz0gYmxrLWlvY29zdC1icGYubwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IDJiNWMyOTQzNGU0MjYuLjg3Mjg3MTA0NTM1MWMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTMyLDYgJiM0MzszMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGFydF9zdGF0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2Jsay5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YmxrLWNncm91cC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrLWlvY29zdC5oJmd0OwogI2luY2x1ZGUgJiMzNDtibGstaW9wcmlvLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtibGstdGhyb3R0bGUuaCYjMzQ7CiAKQEAgLTEzNDEsNiAmIzQzOzEzNDIsNyBAQCB2b2lkIGJsa2NnX3VucGluX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqYmxrY2dfY3NzKQogICovCiBzdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogewomIzQzOwlpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoY3NzX3RvX2Jsa2NnKGNzcykpOwogCS8qIHRoaXMgcHJldmVudHMgYW55b25lIGZyb20gYXR0YWNoaW5nIG9yIG1pZ3JhdGluZyB0byB0aGlzIGJsa2NnICovCiAJd2JfYmxrY2dfb2ZmbGluZShjc3MpOwogCkBAIC0xNDQ1LDYgJiM0MzsxNDQ3LDcgQEAgYmxrY2dfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKQogCiBzdGF0aWMgaW50IGJsa2NnX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIHsKJiM0MzsJaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoY3NzX3RvX2Jsa2NnKGNzcykpOwogCXN0cnVjdCBibGtjZyAqcGFyZW50ID0gYmxrY2dfcGFyZW50KGNzc190b19ibGtjZyhjc3MpKTsKIAogCS8qCmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jb3N0LWJwZi5jIGIvYmxvY2svYmxrLWlvY29zdC1icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZWM2ZGYyNzk1OTkwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvY29zdC1icGYuYwpAQCAtMCwwICYjNDM7MSwyNTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogYmxrLWlvY29zdDogQlBGIHN0cnVjdF9vcHMgcGx1bWJpbmcgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscy4KJiM0MzsgKgomIzQzOyAqIFJlZ2lzdGVycyB0aGUgJiMzNDtpb2Nvc3RfbW9kZWxfb3BzJiMzNDsgc3RydWN0X29wcyB0eXBlIGFuZCBtYWludGFpbnMgdGhlCiYjNDM7ICogbmFtZSByZWdpc3RyeSBvZiByZWdpc3RlcmVkIG1vZGVscy4gIEEgcmVnaXN0ZXJlZCBtb2RlbCBpcyBib3VuZCB0bwomIzQzOyAqIGEgZGV2aWNlIHRocm91Z2ggaW8uY29zdC5tb2RlbDsgc2VlIGluY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmX3ZlcmlmaWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ibGstaW9jb3N0LmgmZ3Q7CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9NVVRFWChpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0MztzdGF0aWMgTElTVF9IRUFEKGlvY29zdF9icGZfbW9kZWxzKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSByZWdpc3RyeSBob2xkcyBhIGJwZl9zdHJ1Y3Rfb3BzX2dldCgpIHJlZmVyZW5jZSBvYnRhaW5lZCBpbiAucmVnOwomIzQzOyAqIC51bnJlZyBkcm9wcyBpdCwgc28gdGhlIGtkYXRhIG9mIGFuIHVucmVnaXN0ZXJlZCBtb2RlbCBzdGF5cyBhbGl2ZQomIzQzOyAqIHdoaWxlIGFueSBkZXZpY2UgaXMgc3RpbGwgYm91bmQgdG8gaXQuCiYjNDM7ICovCiYjNDM7c3RydWN0IGlvY29zdF9icGZfbW9kZWwgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHM7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIExvb2sgdXAgYSByZWdpc3RlcmVkIG1vZGVsIGJ5IG5hbWUgYW5kIGFjcXVpcmUgYSByZWZlcmVuY2Ugb24gaXQuCiYjNDM7ICogVGhlIHJlZ2lzdHJ5IGxvY2sgaXMgaGVsZCBhY3Jvc3MgbG9va3VwIGFuZCBicGZfc3RydWN0X29wc19nZXQoKSBzbwomIzQzOyAqIHRoZSBtb2RlbCBjYW5ub3QgYmUgdW5yZWdpc3RlcmVkIGluIGJldHdlZW4uCiYjNDM7ICovCiYjNDM7aW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJIGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptOwomIzQzOwlpbnQgcmV0ID0gLUVOT0VOVDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZhbXA7aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHsKJiM0MzsJCWlmICghc3RyY21wKG0tJmd0O29wcy0mZ3Q7bmFtZSwgbmFtZSkpIHsKJiM0MzsJCQlpZiAoYnBmX3N0cnVjdF9vcHNfZ2V0KG0tJmd0O29wcykpIHsKJiM0MzsJCQkJKm9wc3AgPSBtLSZndDtvcHM7CiYjNDM7CQkJCXJldCA9IDA7CiYjNDM7CQkJfQomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpCiYjNDM7ewomIzQzOwlicGZfc3RydWN0X29wc19wdXQob3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICoKJiM0Mztpb2Nvc3RfYnBmX21vZGVsX2xvb2t1cChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJmFtcDtpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkgewomIzQzOwkJaWYgKG0tJmd0O29wcyA9PSBvcHMpCiYjNDM7CQkJcmV0dXJuIG07CiYjNDM7CX0KJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmYW1wO2lvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7CiYjNDM7CQlpZiAobS0mZ3Q7b3BzLSZndDtibGtjZ19vbmxpbmUpCiYjNDM7CQkJbS0mZ3Q7b3BzLSZndDtibGtjZ19vbmxpbmUoYmxrY2cpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7aW9jb3N0X2JwZl9yZWdfbG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJmFtcDtpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkgewomIzQzOwkJaWYgKG0tJmd0O29wcy0mZ3Q7YmxrY2dfb2ZmbGluZSkKJiM0MzsJCQltLSZndDtvcHMtJmd0O2Jsa2NnX29mZmxpbmUoYmxrY2cpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF9tb2RlbF9pbml0KHN0cnVjdCBidGYgKmJ0ZikKJiM0Mzt7CiYjNDM7CXMzMiB0eXBlX2lkOwomIzQzOwomIzQzOwl0eXBlX2lkID0gYnRmX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgJiMzNDtpb2Nvc3RfbW9kZWxfb3BzJiMzNDssIEJURl9LSU5EX1NUUlVDVCk7CiYjNDM7CWlmICh0eXBlX2lkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsCiYjNDM7CQkJCSAgICAgICBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGJwZl9pbnNuX2FjY2Vzc19hdXggKmluZm8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYnBmX3RyYWNpbmdfYnRmX2N0eF9hY2Nlc3Mob2ZmLCBzaXplLCB0eXBlLCBwcm9nLCBpbmZvKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqCiYjNDM7YnBmX2lvY29zdF9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsCiYjNDM7CQkJICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGZ1bmNfaWQpIHsKJiM0MzsjaWZkZWYgQ09ORklHX0NHUk9VUFMKJiM0MzsJY2FzZSBCUEZfRlVOQ19jZ3JwX3N0b3JhZ2VfZ2V0OgomIzQzOwkJcmV0dXJuICZhbXA7YnBmX2NncnBfc3RvcmFnZV9nZXRfcHJvdG87CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gYnBmX2Jhc2VfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlciwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQomIzQzO3sKJiM0MzsJLyogY2FsY19jb3N0KCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkICovCiYjNDM7CWlmIChwcm9nLSZndDtzbGVlcGFibGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlciwKJiM0MzsJCQkJICB2b2lkICprZGF0YSwgY29uc3Qgdm9pZCAqdWRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICp1b3BzID0gdWRhdGE7CiYjNDM7CXUzMiBtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7CiYjNDM7CiYjNDM7CXN3aXRjaCAobW9mZikgewomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzLCBuYW1lKToKJiM0MzsJCWlmIChicGZfb2JqX25hbWVfY3B5KG9wcy0mZ3Q7bmFtZSwgdW9wcy0mZ3Q7bmFtZSwKJiM0MzsJCQkJICAgICBzaXplb2Yob3BzLSZndDtuYW1lKSkgJmx0Oz0gMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9pb2Nvc3RfdmFsaWRhdGUodm9pZCAqa2RhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7CiYjNDM7CiYjNDM7CXJldHVybiBvcHMtJmd0O2NhbGNfY29zdCA/IDAgOiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9pb2Nvc3RfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFicGZfc3RydWN0X29wc19nZXQob3BzKSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwltID0ga3phbGxvYyhzaXplb2YoKm0pLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtKSB7CiYjNDM7CQlicGZfc3RydWN0X29wc19wdXQob3BzKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0MzsJewomIzQzOwkJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm90aGVyOwomIzQzOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgJmFtcDtpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkgewomIzQzOwkJCWlmICghc3RyY21wKG90aGVyLSZndDtvcHMtJmd0O25hbWUsIG9wcy0mZ3Q7bmFtZSkpIHsKJiM0MzsJCQkJcmV0ID0gLUVFWElTVDsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmICghcmV0KSB7CiYjNDM7CQltLSZndDtvcHMgPSBvcHM7CiYjNDM7CQlsaXN0X2FkZCgmYW1wO20tJmd0O2xpc3QsICZhbXA7aW9jb3N0X2JwZl9tb2RlbHMpOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlicGZfc3RydWN0X29wc19wdXQob3BzKTsKJiM0MzsJCWtmcmVlKG0pOwomIzQzOwl9CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJwZl9pb2Nvc3RfdW5yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTsKJiM0MzsJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0MzsJbSA9IGlvY29zdF9icGZfbW9kZWxfbG9va3VwKG9wcyk7CiYjNDM7CWlmIChtKSB7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO20tJmd0O2xpc3QpOwomIzQzOwkJYnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7CiYjNDM7CQlrZnJlZShtKTsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9pb2Nvc3RfdmVyaWZpZXJfb3BzID0gewomIzQzOwkuZ2V0X2Z1bmNfcHJvdG8gPSBicGZfaW9jb3N0X2dldF9mdW5jX3Byb3RvLAomIzQzOwkuaXNfdmFsaWRfYWNjZXNzID0gYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IGJwZl9pb2Nvc3RfY2FsY19jb3N0X3N0dWIodTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvciwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzIF9fYnBmX29wc19pb2Nvc3RfbW9kZWxfb3BzID0gewomIzQzOwkuY2FsY19jb3N0ID0gYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1YiwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2lvY29zdF9tb2RlbF9vcHMgPSB7CiYjNDM7CS52ZXJpZmllcl9vcHMgPSAmYW1wO2JwZl9pb2Nvc3RfdmVyaWZpZXJfb3BzLAomIzQzOwkuaW5pdCA9IGJwZl9pb2Nvc3RfbW9kZWxfaW5pdCwKJiM0MzsJLmNoZWNrX21lbWJlciA9IGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyLAomIzQzOwkuaW5pdF9tZW1iZXIgPSBicGZfaW9jb3N0X2luaXRfbWVtYmVyLAomIzQzOwkudmFsaWRhdGUgPSBicGZfaW9jb3N0X3ZhbGlkYXRlLAomIzQzOwkucmVnID0gYnBmX2lvY29zdF9yZWcsCiYjNDM7CS51bnJlZyA9IGJwZl9pb2Nvc3RfdW5yZWcsCiYjNDM7CS5uYW1lID0gJiMzNDtpb2Nvc3RfbW9kZWxfb3BzJiMzNDssCiYjNDM7CS5jZmlfc3R1YnMgPSAmYW1wO19fYnBmX29wc19pb2Nvc3RfbW9kZWxfb3BzLAomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9pb2Nvc3RfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKCZhbXA7YnBmX2lvY29zdF9tb2RlbF9vcHMsIGlvY29zdF9tb2RlbF9vcHMpOwomIzQzO30KJiM0MztsYXRlX2luaXRjYWxsKGJwZl9pb2Nvc3RfaW5pdCk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jb3N0LmMgYi9ibG9jay9ibGstaW9jb3N0LmMKaW5kZXggMjc0NWJmZmNkNWVlZi4uYmNjZGJkMjQ5NmQ4MyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWlvY29zdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1pb2Nvc3QuYwpAQCAtMTc3LDYgJiM0MzsxNzcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFyc2VyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Jsay1pb2Nvc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDthc20vbG9jYWwuaCZndDsKICNpbmNsdWRlICZsdDthc20vbG9jYWw2NC5oJmd0OwpAQCAtNDQ1LDYgJiM0Mzs0NDYsMTEgQEAgc3RydWN0IGlvYyB7CiAJaW50CQkJCWF1dG9wX2lkeDsKIAlib29sCQkJCXVzZXJfcW9zX3BhcmFtczoxOwogCWJvb2wJCQkJdXNlcl9jb3N0X21vZGVsOjE7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJLyogYm91bmQgQlBGIGNvc3QgbW9kZWwsIE5VTEwgPSBidWlsdGluIGxpbmVhciBtb2RlbCAqLwomIzQzOwljb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcwlfX3JjdSAqbW9kZWw7CiYjNDM7I2VuZGlmCiB9OwogCiBzdHJ1Y3QgaW9jZ19wY3B1X3N0YXQgewpAQCAtMjIzOCw2ICYjNDM7MjI0NCw3IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiAJc3RydWN0IGlvY19ub3cgbm93OwogCUxJU1RfSEVBRChzdXJwbHVzZXMpOwogCWludCBucl9kZWJ0b3JzLCBucl9zaG9ydGFnZXMgPSAwLCBucl9sYWdnaW5nID0gMDsKJiM0MzsJaW50IG5yX2FjdGl2ZSA9IDA7CiAJdTY0IHVzYWdlX3VzX3N1bSA9IDA7CiAJdTMyIHBwbV9ydGhyOwogCXUzMiBwcG1fd3RocjsKQEAgLTIyNzQsNiAmIzQzOzIyODEsOCBAQCBzdGF0aWMgdm9pZCBpb2NfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogCQl1NjQgdmRvbmUsIHZ0aW1lLCB1c2FnZV91czsKIAkJdTMyIGh3X2FjdGl2ZSwgaHdfaW51c2U7CiAKJiM0MzsJCW5yX2FjdGl2ZSYjNDM7JiM0Mzs7CiYjNDM7CiAJCS8qCiAJCSAqIENvbGxlY3QgdW51c2VkIGFuZCB3aW5kIHZ0aW1lIGNsb3NlciB0byB2bm93IHRvIHByZXZlbnQKIAkJICogaW9jZ3MgZnJvbSBhY2N1bXVsYXRpbmcgYSBsYXJnZSBhbW91bnQgb2YgYnVkZ2V0LgpAQCAtMjQ2MCw2ICYjNDM7MjQ2OSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiAJCWlvY19yZWZyZXNoX3ZyYXRlKGlvYywgJmFtcDtub3cpOwogCX0KIAomIzQzOwl0cmFjZV9pb2Nvc3RfaW9jX3RpY2soaW9jLCBucl9hY3RpdmUsIHVzYWdlX3VzX3N1bSk7CiYjNDM7CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKIH0KIApAQCAtMjU3MSwxMCAmIzQzOzI1ODIsMjggQEAgc3RhdGljIHZvaWQgY2FsY192dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW9jX2dxICppb2NnLAogCiBzdGF0aWMgdTY0IGNhbGNfdnRpbWVfY29zdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb2NfZ3EgKmlvY2csIGJvb2wgaXNfbWVyZ2UpCiB7CiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsOwogCXU2NCBjb3N0OwogCi0JY2FsY192dGltZV9jb3N0X2J1aWx0aW4oYmlvLCBpb2NnLCBpc19tZXJnZSwgJmFtcDtjb3N0KTsKLQlyZXR1cm4gY29zdDsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltb2RlbCA9IHJjdV9kZXJlZmVyZW5jZShpb2NnLSZndDtpb2MtJmd0O21vZGVsKTsKJiM0MzsJaWYgKG1vZGVsKSB7CiYjNDM7CQljb3N0ID0gbW9kZWwtJmd0O2NhbGNfY29zdChiaW8tJmd0O2JpX29wZiwgYmlvLSZndDtiaV9pdGVyLmJpX3NpemUsCiYjNDM7CQkJCQliaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yLAomIzQzOwkJCQkJaW9jZ190b19ibGtnKGlvY2cpLSZndDtibGtjZywKJiM0MzsJCQkJCWlzX21lcmdlID8gSU9DT1NUX0NPU1RfRl9NRVJHRSA6IDApOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOyNlbmRpZgomIzQzOwl7CiYjNDM7CQl1NjQgY29zdDsKJiM0MzsKJiM0MzsJCWNhbGNfdnRpbWVfY29zdF9idWlsdGluKGJpbywgaW9jZywgaXNfbWVyZ2UsICZhbXA7Y29zdCk7CiYjNDM7CQlyZXR1cm4gY29zdDsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvYyAqaW9jLApAQCAtMjU5NiwxMCAmIzQzOzI2MjUsMjggQEAgc3RhdGljIHZvaWQgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYywKIAogc3RhdGljIHU2NCBjYWxjX3NpemVfdnRpbWVfY29zdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYykKIHsKLQl1NjQgY29zdDsKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwljb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7CiAKLQljYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHJxLCBpb2MsICZhbXA7Y29zdCk7Ci0JcmV0dXJuIGNvc3Q7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbW9kZWwgPSByY3VfZGVyZWZlcmVuY2UoaW9jLSZndDttb2RlbCk7CiYjNDM7CWlmIChtb2RlbCAmYW1wOyZhbXA7IHJxLSZndDtiaW8gJmFtcDsmYW1wOyBycS0mZ3Q7YmlvLSZndDtiaV9ibGtnKSB7CiYjNDM7CQl1NjQgY29zdDsKJiM0MzsKJiM0MzsJCWNvc3QgPSBtb2RlbC0mZ3Q7Y2FsY19jb3N0KHJxLSZndDtjbWRfZmxhZ3MsIGJsa19ycV9ieXRlcyhycSksCiYjNDM7CQkJCQlibGtfcnFfcG9zKHJxKSwKJiM0MzsJCQkJCXJxLSZndDtiaW8tJmd0O2JpX2Jsa2ctJmd0O2Jsa2NnLCAwKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIG1pbihjb3N0LCBWVElNRV9QRVJfU0VDKTsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsjZW5kaWYKJiM0MzsJewomIzQzOwkJdTY0IGNvc3Q7CiYjNDM7CiYjNDM7CQljYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHJxLCBpb2MsICZhbXA7Y29zdCk7CiYjNDM7CQlyZXR1cm4gY29zdDsKJiM0MzsJfQogfQogCiBlbnVtIG92ZXJfYnVkZ2V0X2FjdGlvbiB7CkBAIC0yOTAwLDYgJiM0MzsyOTQ3LDE5IEBAIHN0YXRpYyB2b2lkIGlvY19ycW9zX2V4aXQoc3RydWN0IHJxX3FvcyAqcnFvcykKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtpb2MtJmd0O3RpbWVyKTsKIAlmcmVlX3BlcmNwdShpb2MtJmd0O3BjcHVfc3RhdCk7CiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJewomIzQzOwkJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2lycSgmYW1wO2lvYy0mZ3Q7bG9jayk7CiYjNDM7CQltb2RlbCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLSZndDttb2RlbCwKJiM0MzsJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO2lvYy0mZ3Q7bG9jaykpOwomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKGlvYy0mZ3Q7bW9kZWwsIE5VTEwpOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKJiM0MzsJCWlmIChtb2RlbCkKJiM0MzsJCQlpb2Nvc3RfYnBmX21vZGVsX3B1dChtb2RlbCk7CiYjNDM7CX0KJiM0MzsjZW5kaWYKIAlrZnJlZShpb2MpOwogfQogCkBAIC0zNDM4LDEyICYjNDM7MzQ5OCwzMCBAQCBzdGF0aWMgdTY0IGlvY19jb3N0X21vZGVsX3ByZmlsbChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLAogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwomIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGCiYjNDM7CXsKJiM0MzsJCWNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICptb2RlbCA9CiYjNDM7CQkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtJmd0O21vZGVsLAomIzQzOwkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7aW9jLSZndDtsb2NrKSk7CiYjNDM7CiYjNDM7CQlzZXFfcHJpbnRmKHNmLCAmIzM0OyVzIGN0cmw9JXMgbW9kZWw9JXMgJiMzNDsKJiM0MzsJCQkgICAmIzM0O3JicHM9JWxsdSByc2VxaW9wcz0lbGx1IHJyYW5kaW9wcz0lbGx1ICYjMzQ7CiYjNDM7CQkJICAgJiMzNDt3YnBzPSVsbHUgd3NlcWlvcHM9JWxsdSB3cmFuZGlvcHM9JWxsdVxuJiMzNDssCiYjNDM7CQkJICAgZG5hbWUsIG1vZGVsID8gJiMzNDticGYmIzM0OyA6CiYjNDM7CQkJCSAgIGlvYy0mZ3Q7dXNlcl9jb3N0X21vZGVsID8gJiMzNDt1c2VyJiMzNDsgOiAmIzM0O2F1dG8mIzM0OywKJiM0MzsJCQkgICBtb2RlbCA/IG1vZGVsLSZndDtuYW1lIDogJiMzNDtsaW5lYXImIzM0OywKJiM0MzsJCQkgICB1W0lfTENPRUZfUkJQU10sIHVbSV9MQ09FRl9SU0VRSU9QU10sCiYjNDM7CQkJICAgdVtJX0xDT0VGX1JSQU5ESU9QU10sIHVbSV9MQ09FRl9XQlBTXSwKJiM0MzsJCQkgICB1W0lfTENPRUZfV1NFUUlPUFNdLCB1W0lfTENPRUZfV1JBTkRJT1BTXSk7CiYjNDM7CX0KJiM0MzsjZWxzZQogCXNlcV9wcmludGYoc2YsICYjMzQ7JXMgY3RybD0lcyBtb2RlbD1saW5lYXIgJiMzNDsKIAkJICAgJiMzNDtyYnBzPSVsbHUgcnNlcWlvcHM9JWxsdSBycmFuZGlvcHM9JWxsdSAmIzM0OwogCQkgICAmIzM0O3dicHM9JWxsdSB3c2VxaW9wcz0lbGx1IHdyYW5kaW9wcz0lbGx1XG4mIzM0OywKIAkJICAgZG5hbWUsIGlvYy0mZ3Q7dXNlcl9jb3N0X21vZGVsID8gJiMzNDt1c2VyJiMzNDsgOiAmIzM0O2F1dG8mIzM0OywKIAkJICAgdVtJX0xDT0VGX1JCUFNdLCB1W0lfTENPRUZfUlNFUUlPUFNdLCB1W0lfTENPRUZfUlJBTkRJT1BTXSwKIAkJICAgdVtJX0xDT0VGX1dCUFNdLCB1W0lfTENPRUZfV1NFUUlPUFNdLCB1W0lfTENPRUZfV1JBTkRJT1BTXSk7CiYjNDM7I2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM0NTcsNiAmIzQzOzM1MzUsMzcgQEAgc3RhdGljIGludCBpb2NfY29zdF9tb2RlbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEJpbmQgQG5hbWUgKGVtcHR5ID0gYnVpbHRpbiBsaW5lYXIgbW9kZWwpIGFzIHRoZSBhY3RpdmUgY29zdCBtb2RlbCBvZgomIzQzOyAqIEBpb2MuICBUaGUgcmVnaXN0cnkgbG9va3VwIGFuZCByZWZlcmVuY2UgbWFuYWdlbWVudCBoYXBwZW4gb3V0c2lkZQomIzQzOyAqIGlvYy0mZ3Q7bG9jazsgdGhlIHBvaW50ZXIgc3dhcCBoYXBwZW5zIHVuZGVyIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgaW9jX2JwZl9tb2RlbF9iaW5kKHN0cnVjdCBpb2MgKmlvYywgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm5ldyA9IE5VTEwsICpvbGQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChuYW1lWzBdKSB7CiYjNDM7CQlyZXQgPSBpb2Nvc3RfYnBmX21vZGVsX2dldChuYW1lLCAmYW1wO25ldyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO2lvYy0mZ3Q7bG9jayk7CiYjNDM7CW9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLSZndDttb2RlbCwKJiM0MzsJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO2lvYy0mZ3Q7bG9jaykpOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoaW9jLSZndDttb2RlbCwgbmV3KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWlvY29zdF9icGZfbW9kZWxfcHV0KG9sZCk7CiYjNDM7CXJldHVybiAwOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBuYW1lWzBdID8gLUVOT0VOVCA6IDA7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgY29zdF9jdHJsX3Rva2VucyA9IHsKIAl7IENPU1RfQ1RSTCwJCSYjMzQ7Y3RybD0lcyYjMzQ7CX0sCiAJeyBDT1NUX01PREVMLAkJJiMzNDttb2RlbD0lcyYjMzQ7CX0sCkBAIC0zNDgyLDYgJiM0MzszNTkxLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCwKIAlzdHJ1Y3QgaW9jICppb2M7CiAJdTY0IHVbTlJfSV9MQ09FRlNdOwogCWJvb2wgdXNlcjsKJiM0MzsJY2hhciBicGZfbW9kZWxbSU9DT1NUX01PREVMX05BTUVfTEVOXTsKIAljaGFyICpib2R5LCAqcDsKIAlpbnQgcmV0OwogCkBAIC0zNTEyLDYgJiM0MzszNjIyLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCwKIAlzcGluX2xvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKIAltZW1jcHkodSwgaW9jLSZndDtwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7CiAJdXNlciA9IGlvYy0mZ3Q7dXNlcl9jb3N0X21vZGVsOwomIzQzOwlicGZfbW9kZWxbMF0gPSAmIzM5O1wwJiMzOTs7CiAKIAlyZXQgPSAtRUlOVkFMOwogCkBAIC0zNTMzLDExICYjNDM7MzY0NCwxNiBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LAogCQkJCXVzZXIgPSB0cnVlOwogCQkJZWxzZQogCQkJCWdvdG8gdW5sb2NrOwomIzQzOwkJCWJwZl9tb2RlbFswXSA9ICYjMzk7XDAmIzM5OzsKIAkJCWNvbnRpbnVlOwogCQljYXNlIENPU1RfTU9ERUw6CiAJCQltYXRjaF9zdHJsY3B5KGJ1ZiwgJmFtcDthcmdzWzBdLCBzaXplb2YoYnVmKSk7Ci0JCQlpZiAoc3RyY21wKGJ1ZiwgJiMzNDtsaW5lYXImIzM0OykpCi0JCQkJZ290byB1bmxvY2s7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmLCAmIzM0O2xpbmVhciYjMzQ7KSkgewomIzQzOwkJCQkvKiBiYWNrIHRvIHRoZSBidWlsdGluIGxpbmVhciBtb2RlbCAqLwomIzQzOwkJCQlicGZfbW9kZWxbMF0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCQltYXRjaF9zdHJsY3B5KGJwZl9tb2RlbCwgJmFtcDthcmdzWzBdLCBzaXplb2YoYnBmX21vZGVsKSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0zNTYzLDYgJiM0MzszNjc5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsCiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKIAomIzQzOwkvKgomIzQzOwkgKiBCaW5kIHRoZSBCUEYgbW9kZWwgb3V0c2lkZSBpb2MtJmd0O2xvY2s6IHRoZSByZWdpc3RyeSBsb29rdXAKJiM0MzsJICogdGFrZXMgdGhlIHJlZ2lzdHJhdGlvbiBtdXRleCBhbmQgdGhlIG9sZCBtb2RlbCYjMzk7cyByZWZlcmVuY2UKJiM0MzsJICogaXMgZHJvcHBlZCBhZnRlciB0aGUgc3dhcC4KJiM0MzsJICovCiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0ID0gaW9jX2JwZl9tb2RlbF9iaW5kKGlvYywgYnBmX21vZGVsKTsKJiM0MzsKIAlibGtfbXFfdW5xdWllc2NlX3F1ZXVlKHEpOwogCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oIGIvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2EwODU1ZWZiNjEwNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oCkBAIC0wLDAgJiM0MzsxLDgyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9MSU5VWF9CTEtfSU9DT1NUX0gKJiM0MzsjZGVmaW5lIF9MSU5VWF9CTEtfSU9DT1NUX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrX3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBJT0NPU1RfTU9ERUxfTkFNRV9MRU4JMTYKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwomIzQzO3N0cnVjdCBibGtjZzsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBsdWdnYWJsZSBjb3N0IG1vZGVsIGludGVyZmFjZSBmb3IgYmxrLWlvY29zdC4KJiM0MzsgKgomIzQzOyAqIEEgQlBGIHN0cnVjdF9vcHMgaW1wbGVtZW50YXRpb24gcmVnaXN0ZXJlZCBhZ2FpbnN0ICYjMzQ7aW9jb3N0X21vZGVsX29wcyYjMzQ7CiYjNDM7ICogZnVsbHkgcmVwbGFjZXMgdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsIG9uIHRoZSBkZXZpY2VzIGl0IGlzIGJvdW5kIHRvCiYjNDM7ICogdGhyb3VnaCBpby5jb3N0Lm1vZGVsLiAgVGhlIG1vZGVsIG93bnMgcHJpY2luZyBmb3IgZXZlcnkgSU8gb24gYSBib3VuZAomIzQzOyAqIGRldmljZTogaXQgcHJpY2VzIGFsbCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgZmx1c2hlcywgYW5kIGJvdGggdGhlIGJpbwomIzQzOyAqIGNoYXJnaW5nIHBhdGggYW5kIHRoZSByZXF1ZXN0LWxldmVsIHNpemluZyBwYXRoIGNvbnN1bHQgaXQuCiYjNDM7ICoKJiM0MzsgKiBjYWxjX2Nvc3QoKSBpcyBjYWxsZWQgZnJvbSB0aGUgSU8gc3VibWlzc2lvbiBwYXRoIHdpdGggUkNVIHJlYWQgbG9jawomIzQzOyAqIGhlbGQgYW5kIG11c3Qgbm90IHNsZWVwLiAgSXQgcmV0dXJucyB0aGUgY29zdCBvZiB0aGUgSU8gaW4gdnRpbWUKJiM0MzsgKiB1bml0cywgd2hlcmUgMSBzZWNvbmQgb2YgZGV2aWNlIHRpbWUgZXF1YWxzIFZUSU1FX1BFUl9TRUMgKDJeMzcsCiYjNDM7ICogYXZhaWxhYmxlIHRvIEJQRiBwcm9ncmFtcyB0aHJvdWdoIHZtbGludXguaCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgaXMKJiM0MzsgKiBjbGFtcGVkIHRvIDEgc2Vjb25kIG9mIGRldmljZSB0aW1lIHBlciBJTy4KJiM0MzsgKgomIzQzOyAqIFRoZSBtb2RlbCBpcyBwYXNzZWQgdGhlIGJsa2NnIG9mIHRoZSBpc3N1aW5nIGNncm91cCBzbyBpdCBjYW4ga2VlcAomIzQzOyAqIHBlci1jZ3JvdXAgc3RhdGUuICBibGtjZ19vbmxpbmUoKS9ibGtjZ19vZmZsaW5lKCkgYXJlIG9wdGlvbmFsCiYjNDM7ICogY2FsbGJhY2tzIG1pcnJvcmluZyB0aGUgYmxrY2cgY3NzIGxpZmVjeWNsZTogc3RhdGUgY3JlYXRlZCBvbiBvbmxpbmUKJiM0MzsgKiAob3IgbGF6aWx5IG9uIGZpcnN0IHVzZSkgbXVzdCBiZSByZWxlYXNlZCBvbiBvZmZsaW5lLgomIzQzOyAqCiYjNDM7ICogVGhlIHJlZ2lzdHJhdGlvbiBhbmQgYmluZGluZyBtb2RlbCBmb2xsb3dzIHRoZSBUQ1AgY29uZ2VzdGlvbgomIzQzOyAqIGNvbnRyb2wgZnJhbWV3b3JrOiByZWdpc3RlcmluZyBhIHN0cnVjdF9vcHMgbWFrZXMgdGhlIG1vZGVsIGF2YWlsYWJsZQomIzQzOyAqIGJ5IGl0cyBuYW1lLCB3aGlsZSBpby5jb3N0Lm1vZGVsIGJpbmRzIG9uZSByZWdpc3RlcmVkIG1vZGVsIHRvIGEKJiM0MzsgKiBkZXZpY2UuICBVbnJlZ2lzdGVyaW5nIHJlbW92ZXMgdGhlIG5hbWUgZnJvbSB0aGUgcmVnaXN0cnk7IGRldmljZXMKJiM0MzsgKiBhbHJlYWR5IGJvdW5kIGtlZXAgdXNpbmcgaXQgdW50aWwgc3dpdGNoZWQgYmFjayB0byB0aGUgYnVpbHRpbgomIzQzOyAqIG1vZGVsLgomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgSU9DT1NUX01PREVMX05BTUVfTEVOCTE2CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBpb2Nvc3Qtc3BlY2lmaWMgY2FsbCBtZXRhZGF0YSBmb3IgY2FsY19jb3N0KCkmIzM5O3MgbW9kZWxfZmxhZ3MKJiM0MzsgKiBhcmd1bWVudDsgZXZlcnl0aGluZyBlbHNlLCBpbmNsdWRpbmcgUkVRX1BSRUZMVVNIL1JFUV9GVUEsIGlzCiYjNDM7ICogYWxyZWFkeSBwcmVzZW50IGluIHRoZSBvcGYgYXJndW1lbnQKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0UJKDFVTEwgJmx0OyZsdDsgMCkJLyogY2FsbGVkIGZyb20gbWVyZ2UgcGF0aCAqLwomIzQzOwomIzQzO3N0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzIHsKJiM0MzsJdTY0ICgqY2FsY19jb3N0KSh1NjQgb3BmLCB1NjQgbmJ5dGVzLCBzZWN0b3JfdCBzZWN0b3IsCiYjNDM7CQkJIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncyk7CiYjNDM7CXZvaWQgKCpibGtjZ19vbmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpOwomIzQzOwl2b2lkICgqYmxrY2dfb2ZmbGluZSkoc3RydWN0IGJsa2NnICpibGtjZyk7CiYjNDM7CiYjNDM7CS8qIG1vZGVsIG5hbWUsIHVzZWQgdG8gc2VsZWN0IHRoZSBtb2RlbCB0aHJvdWdoIGlvLmNvc3QubW9kZWwgKi8KJiM0MzsJY2hhciBuYW1lWzE2XTsKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLAomIzQzOwkJCSBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApOwomIzQzO3ZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyk7CiYjNDM7dm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTsKJiM0Mzt2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTsKJiM0MzsKJiM0MzsjZWxzZQkvKiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGICovCiYjNDM7CiYjNDM7c3RydWN0IGJsa2NnOwomIzQzO3N0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH0KJiM0MzsKJiM0MzsjZW5kaWYJLyogQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiAqLwomIzQzOyNlbmRpZgkvKiBfTElOVVhfQkxLX0lPQ09TVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oCmluZGV4IGU3NzJiMWJjNjBkNjAuLjJiOWZmMzQ4YTRmNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oCkBAIC0xNzgsNiAmIzQzOzE3OCw0NiBAQCBUUkFDRV9FVkVOVChpb2Nvc3RfaW9jX3ZyYXRlX2FkaiwKIAkpCiApOwogCiYjNDM7LyoKJiM0MzsgKiBQZXJpb2RpYyBwZXItZGV2aWNlIHN1bW1hcnksIGVtaXR0ZWQgb25jZSBwZXIgcGVyaW9kIGZyb20gdGhlIHRhaWwgb2YKJiM0MzsgKiBpb2NfdGltZXJfZm4oKS4gIFVubGlrZSB0aGUgc3RhdGUtY2hhbmdlIGV2ZW50cyBhYm92ZSwgdGhpcyBmaXJlcyBldmVyeQomIzQzOyAqIHBlcmlvZCB0aGUgY29udHJvbGxlciBpcyBydW5uaW5nLCBpbmNsdWRpbmcgc3RlYWR5IHN0YXRlcywgYW5kIGNhcnJpZXMKJiM0MzsgKiB0aGUgb3ZlcmFsbCBjb250cm9sbGVyIHN0YXRlIHNvIGJhc2ljIG1vbml0b3JpbmcgZG9lc24mIzM5O3QgcmVxdWlyZSBkcmduLgomIzQzOyAqLwomIzQzO1RSQUNFX0VWRU5UKGlvY29zdF9pb2NfdGljaywKJiM0MzsKJiM0MzsJVFBfUFJPVE8oc3RydWN0IGlvYyAqaW9jLCBpbnQgbnJfYWN0aXZlLCB1NjQgdXNhZ2VfdXNfc3VtKSwKJiM0MzsKJiM0MzsJVFBfQVJHUyhpb2MsIG5yX2FjdGl2ZSwgdXNhZ2VfdXNfc3VtKSwKJiM0MzsKJiM0MzsJVFBfU1RSVUNUX19lbnRyeSAoCiYjNDM7CQlfX3N0cmluZyhkZXZuYW1lLCBpb2NfbmFtZShpb2MpKQomIzQzOwkJX19maWVsZCh1MzIsIHBlcmlvZF91cykKJiM0MzsJCV9fZmllbGQodTY0LCB2cmF0ZSkKJiM0MzsJCV9fZmllbGQoaW50LCBidXN5X2xldmVsKQomIzQzOwkJX19maWVsZChpbnQsIG5yX2FjdGl2ZSkKJiM0MzsJCV9fZmllbGQodTMyLCB1c2FnZV9wY3QpCiYjNDM7CQlfX2ZpZWxkKGludCwgcnVubmluZykKJiM0MzsJKSwKJiM0MzsKJiM0MzsJVFBfZmFzdF9hc3NpZ24oCiYjNDM7CQlfX2Fzc2lnbl9zdHIoZGV2bmFtZSk7CiYjNDM7CQlfX2VudHJ5LSZndDtwZXJpb2RfdXMgPSBpb2MtJmd0O3BlcmlvZF91czsKJiM0MzsJCV9fZW50cnktJmd0O3ZyYXRlID0gaW9jLSZndDt2dGltZV9iYXNlX3JhdGU7CiYjNDM7CQlfX2VudHJ5LSZndDtidXN5X2xldmVsID0gaW9jLSZndDtidXN5X2xldmVsOwomIzQzOwkJX19lbnRyeS0mZ3Q7bnJfYWN0aXZlID0gbnJfYWN0aXZlOwomIzQzOwkJX19lbnRyeS0mZ3Q7dXNhZ2VfcGN0ID0gaW9jLSZndDtwZXJpb2RfdXMgPwomIzQzOwkJCWRpdl91NjQodXNhZ2VfdXNfc3VtICogMTAwLCBpb2MtJmd0O3BlcmlvZF91cykgOiAwOwomIzQzOwkJX19lbnRyeS0mZ3Q7cnVubmluZyA9IGlvYy0mZ3Q7cnVubmluZzsKJiM0MzsJKSwKJiM0MzsKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7WyVzXSBwZXJpb2Q9JXV1cyB2cmF0ZT0lbGx1IGJ1c3k9JWQgYWN0aXZlPSVkIHVzYWdlPSV1JSUgcnVubmluZz0lZCYjMzQ7LAomIzQzOwkJX19nZXRfc3RyKGRldm5hbWUpLCBfX2VudHJ5LSZndDtwZXJpb2RfdXMsIF9fZW50cnktJmd0O3ZyYXRlLAomIzQzOwkJX19lbnRyeS0mZ3Q7YnVzeV9sZXZlbCwgX19lbnRyeS0mZ3Q7bnJfYWN0aXZlLCBfX2VudHJ5LSZndDt1c2FnZV9wY3QsCiYjNDM7CQlfX2VudHJ5LSZndDtydW5uaW5nCiYjNDM7CSkKJiM0MzspOwomIzQzOwogVFJBQ0VfRVZFTlQoaW9jb3N0X2lvY2dfZm9yZ2l2ZV9kZWJ0LAogCiAJVFBfUFJPVE8oc3RydWN0IGlvY19ncSAqaW9jZywgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGlvY19ub3cgKm5vdywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnCmluZGV4IDJmNzk2ODhkY2Y3Y2UuLjY3YTYzMGNiNTYxNDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZwpAQCAtMTM4LDMgJiM0MzsxMzgsNSBAQCBDT05GSUdfU01DX0hTX0NUUkxfQlBGPXkKIENPTkZJR19ESUJTPXkKIENPTkZJR19ESUJTX0xPPXkKIENPTkZJR19QTV9XQUtFTE9DS1M9eQomIzQzO0NPTkZJR19CTEtfQ0dST1VQX0lPQ09TVD15CiYjNDM7Q09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRj15CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmU5MzQ0YjEzZmJhOTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuYwpAQCAtMCwwICYjNDM7MSwxOTMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9jb3N0X21vZGVsLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtpb2Nvc3RfbXMuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdyaXRlIGEgbGluZSB0byBpby5jb3N0Lm1vZGVsIHdpdGggd3JpdGUoMikgYW5kIHJldHVybiB0aGUgZXJybm8gb2YKJiM0MzsgKiB0aGUgZmFpbGVkIHdyaXRlLCBvciAwIG9uIHN1Y2Nlc3MuICBzdGRpbyBpcyBub3QgdXNlZCBoZXJlIG9uCiYjNDM7ICogcHVycG9zZTogdGhlIGtlcm5lbCYjMzk7cyByZWplY3Rpb24gaGFwcGVucyBpbiB0aGUgd3JpdGUoKSBzeXNjYWxsLAomIzQzOyAqIG5vdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBjb3B5LCBhbmQgZXZlcnkgd3JpdGUsIGluY2x1ZGluZwomIzQzOyAqIHRoZSBlcnJvciBwYXRocyBvZiB0aGUgY2FsbGVycyBiZWxvdywgaXMgY2hlY2tlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHdyaXRlX2Nvc3RfbW9kZWwoY29uc3QgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnIgPSAwOwomIzQzOwlzc2l6ZV90IG47CiYjNDM7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWwmIzM0OywgT19XUk9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycm5vOwomIzQzOwluID0gd3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpOwomIzQzOwlpZiAobiAmbHQ7IDApCiYjNDM7CQllcnIgPSBlcnJubzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlYWQgYmFjayB0aGUgaW8uY29zdC5tb2RlbCBsaW5lIG9mIGRldiBhbmQgY29weSB0aGUgbW9kZWw9IHZhbHVlCiYjNDM7ICogaW50byBAbW9kZWwuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHJlYWRiYWNrX21vZGVsKGNvbnN0IGNoYXIgKmRldiwgY2hhciAqbW9kZWwsIHNpemVfdCBtb2RlbF9zeikKJiM0Mzt7CiYjNDM7CWNoYXIgbGluZVsyNTZdLCB3b3JkWzI1Nl0sICptLCAqZW5kOwomIzQzOwlGSUxFICpmcDsKJiM0MzsJaW50IGZvdW5kID0gMDsKJiM0MzsKJiM0MzsJZnAgPSBmb3BlbigmIzM0Oy9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWwmIzM0OywgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWZwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHsKJiM0MzsJCWlmIChzc2NhbmYobGluZSwgJiMzNDslMjU1cyYjMzQ7LCB3b3JkKSA9PSAxICZhbXA7JmFtcDsgIXN0cmNtcCh3b3JkLCBkZXYpKSB7CiYjNDM7CQkJZm91bmQgPSAxOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWZjbG9zZShmcCk7CiYjNDM7CWlmICghZm91bmQpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CW0gPSBzdHJzdHIobGluZSwgJiMzNDttb2RlbD0mIzM0Oyk7CiYjNDM7CWlmICghbSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJbSAmIzQzOz0gc3RybGVuKCYjMzQ7bW9kZWw9JiMzNDspOwomIzQzOwllbmQgPSBtOwomIzQzOwl3aGlsZSAoKmVuZCAmYW1wOyZhbXA7ICFpc3NwYWNlKCplbmQpKQomIzQzOwkJZW5kJiM0MzsmIzQzOzsKJiM0MzsJc25wcmludGYobW9kZWwsIG1vZGVsX3N6LCAmIzM0OyUuKnMmIzM0OywgKGludCkoZW5kIC0gbSksIG0pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCaW5kIHRoZSBuYW1lZCBtb2RlbCB0byBhIGRldmljZSB3aXRoICYjMzQ7bW9kZWw9Jmx0O25hbWUmZ3Q7JiMzNDssIHZlcmlmeSB0aGUKJiM0MzsgKiByZWFkYmFjayBhbmQgcmVzdG9yZSB0aGUgYnVpbHRpbiBtb2RlbC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYmluZF9tb2RlbChjb25zdCBjaGFyICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlszMDBdLCBnb3RbNjRdOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyVzIG1vZGVsPSVzXG4mIzM0OywgZGV2LCBuYW1lKTsKJiM0MzsJZXJyID0gd3JpdGVfY29zdF9tb2RlbChidWYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlDSEVDSyhmYWxzZSwgJiMzNDt3cml0ZV9tb2RlbCYjMzQ7LCAmIzM0O3dyaXRlIG1vZGVsPSVzOiAlc1xuJiMzNDssIG5hbWUsCiYjNDM7CQkgICAgICBzdHJlcnJvcihlcnIpKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwllcnIgPSByZWFkYmFja19tb2RlbChkZXYsIGdvdCwgc2l6ZW9mKGdvdCkpOwomIzQzOwlpZiAoZXJyIHx8IHN0cmNtcChnb3QsIG5hbWUpKSB7CiYjNDM7CQlDSEVDSyhmYWxzZSwgJiMzNDtyZWFkYmFja19tb2RlbCYjMzQ7LCAmIzM0O2dvdCBtb2RlbD0lcyB3YW50ICVzXG4mIzM0OywKJiM0MzsJCSAgICAgIGVyciA/ICYjMzQ7KG5vbmUpJiMzNDsgOiBnb3QsIG5hbWUpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHJlc3RvcmUgdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsOyB0aGUgd3JpdGUgaXMgY2hlY2tlZCB0b28gKi8KJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslcyBtb2RlbD1saW5lYXJcbiYjMzQ7LCBkZXYpOwomIzQzOwllcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCUNIRUNLKGZhbHNlLCAmIzM0O3Jlc3RvcmVfbGluZWFyJiMzNDssICYjMzQ7d3JpdGUgbW9kZWw9bGluZWFyOiAlc1xuJiMzNDssCiYjNDM7CQkgICAgICBzdHJlcnJvcihlcnIpKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgZGV2IGFyZ3VtZW50IG11c3QgYmUgcHJlc2VudCBpbiBpby5jb3N0LnFvcyBhbHJlYWR5LCB3aGljaAomIzQzOyAqIG1lYW5zIGlvY29zdCBpcyBlbmFibGVkIGZvciBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGRldl9oYXNfaW9jb3N0KGNvbnN0IGNoYXIgKmRldikKJiM0Mzt7CiYjNDM7CWNoYXIgbGluZVsyNTZdLCB3b3JkWzI1Nl07CiYjNDM7CUZJTEUgKmZwOwomIzQzOwlpbnQgZm91bmQgPSAwOwomIzQzOwomIzQzOwlmcCA9IGZvcGVuKCYjMzQ7L3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5xb3MmIzM0OywgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWZwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSkgewomIzQzOwkJaWYgKHNzY2FuZihsaW5lLCAmIzM0OyUyNTVzJiMzNDssIHdvcmQpID09IDEgJmFtcDsmYW1wOyAhc3RyY21wKHdvcmQsIGRldikpIHsKJiM0MzsJCQlmb3VuZCA9IDE7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJZmNsb3NlKGZwKTsKJiM0MzsJcmV0dXJuIGZvdW5kOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEJpbmQgdGhlIDJ4IGV4YW1wbGUgbW9kZWwgYW5kIHZlcmlmeSB0aGUgaW8uY29zdC5tb2RlbCByZWFkYmFjay4KJiM0MzsgKiBJTyBhY2NvdW50aW5nIGl0c2VsZiBpcyBub3QgY2hlY2tlZCBoZXJlOyBpdCBuZWVkcyBhIGRldmljZSBkb2luZwomIzQzOyAqIHJlYWwgSU8gdW5kZXIgaW9jb3N0IGFuZCBpcyBjb3ZlcmVkIGJ5IHRoZSBrZXJuZWwtc2lkZSB2YWxpZGF0aW9uCiYjNDM7ICogZGVzY3JpYmVkIGluIHRoZSBjb3ZlciBsZXR0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXF1aXJlcyByb290LCBjZ3JvdXAgdjIgYW5kIGEgZGV2aWNlIHdpdGggaW9jb3N0IHN1cHBvcnQuICBUaGUKJiM0MzsgKiBkZXZpY2UgbXVzdCBiZSBnaXZlbiBhcyBtYWpvcjptaW5vciBpbiAkSU9DT1NUX1RFU1RfREVWLCBvdGhlcndpc2UKJiM0MzsgKiB0aGUgdGVzdCBpcyBza2lwcGVkLgomIzQzOyAqLwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfaW9jb3N0X21vZGVsKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X21vZGVsICpza2VsOwomIzQzOwljaGFyIGJ1ZlszMDBdLCAqZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlkZXYgPSBnZXRlbnYoJiMzNDtJT0NPU1RfVEVTVF9ERVYmIzM0Oyk7CiYjNDM7CWlmICghZGV2IHx8IGdldGV1aWQoKSAhPSAwKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJaWYgKCFBU1NFUlRfVFJVRShkZXZfaGFzX2lvY29zdChkZXYpLCAmIzM0O2lvY29zdF9tb3VudGVkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBuZWdhdGl2ZTogYmluZGluZyBhbiB1bmtub3duIG1vZGVsIG5hbWUgbXVzdCBiZSByZWplY3RlZCwKJiM0MzsJICogc28gYSB0eXBvIGNhbm5vdCBzaWxlbnRseSBkaXNhYmxlIGNvc3QgbW9kZWwgdXBkYXRlcwomIzQzOwkgKi8KJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslcyBtb2RlbD1ub19zdWNoX21vZGVsXG4mIzM0OywgZGV2KTsKJiM0MzsJZXJyID0gd3JpdGVfY29zdF9tb2RlbChidWYpOwomIzQzOwlBU1NFUlRfRVEoZXJyLCBFTk9FTlQsICYjMzQ7dW5rbm93bl9tb2RlbF9yZWplY3RlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJc2tlbCA9IGlvY29zdF9tb2RlbF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogYXR0YWNoaW5nIHRoZSBzdHJ1Y3Rfb3BzIHJlZ2lzdGVycyB0aGUgbW9kZWwgYnkgbmFtZSAqLwomIzQzOwllcnIgPSBpb2Nvc3RfbW9kZWxfX2F0dGFjaChza2VsKTsKJiM0MzsJaWYgKEFTU0VSVF9PSyhlcnIsICYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJQVNTRVJUX09LKGJpbmRfbW9kZWwoZGV2LCAmIzM0O2lvY29zdF8yeCYjMzQ7KSwgJiMzNDtiaW5kX2FuZF9yZWFkYmFjayYjMzQ7KTsKJiM0MzsKJiM0MzsJaW9jb3N0X21vZGVsX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNhbWUgY2hlY2sgZm9yIHRoZSBtdWx0aS1zdHJlYW0gZXhhbXBsZSBtb2RlbC4gIE9ubHkgb25lIG1vZGVsIGNhbgomIzQzOyAqIGJlIGJvdW5kIHRvIGEgZGV2aWNlIGF0IGEgdGltZTsgYm90aCB0ZXN0cyBiaW5kIGFuZCByZXN0b3JlLCBzbwomIzQzOyAqIHRoZXkgYXJlIHNlcmlhbCBhbmQgaW5kZXBlbmRlbnQuCiYjNDM7ICovCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWxfc3RyZWFtcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvY29zdF9tcyAqc2tlbDsKJiM0MzsJY2hhciAqZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlkZXYgPSBnZXRlbnYoJiMzNDtJT0NPU1RfVEVTVF9ERVYmIzM0Oyk7CiYjNDM7CWlmICghZGV2IHx8IGdldGV1aWQoKSAhPSAwKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJaWYgKCFBU1NFUlRfVFJVRShkZXZfaGFzX2lvY29zdChkZXYpLCAmIzM0O2lvY29zdF9tb3VudGVkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsID0gaW9jb3N0X21zX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBpb2Nvc3RfbXNfX2F0dGFjaChza2VsKTsKJiM0MzsJaWYgKEFTU0VSVF9PSyhlcnIsICYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJQVNTRVJUX09LKGJpbmRfbW9kZWwoZGV2LCAmIzM0O2lvY29zdF9tcyYjMzQ7KSwgJiMzNDtiaW5kX2FuZF9yZWFkYmFjayYjMzQ7KTsKJiM0MzsKJiM0MzsJaW9jb3N0X21zX19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pb2Nvc3RfbW9kZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pb2Nvc3RfbW9kZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mOGFkNDE3YjM1ODQ4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jCkBAIC0wLDAgJiM0MzsxLDExNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBFeGFtcGxlIGlvY29zdCBjb3N0IG1vZGVsOiB0aGUgYnVpbHRpbiBsaW5lYXIgSEREIGZvcm11bGEgd2l0aCBhbGwKJiM0MzsgKiBjb3N0cyBkb3VibGVkLgomIzQzOyAqCiYjNDM7ICogVGhlIGNvbnN0YW50cyBtaXJyb3Igd2hhdCBjYWxjX2xjb2VmcygpIGRlcml2ZXMgZnJvbSB0aGUgQVVUT1BfSERECiYjNDM7ICogZGVmYXVsdHMgKHJicHM9MTc0MDE5MTc2IHJzZXFpb3BzPTQxNzA4IHJyYW5kaW9wcz0zNzAsIHctc2lkZQomIzQzOyAqIGFuYWxvZykgaW4gdnRpbWUgdW5pdHMgd2hlcmUgMXMgPT0gMl4zNywgZXhwcmVzc2VkIHdpdGggdGhlIHNhbWUKJiM0MzsgKiByb3VuZC11cCBkaXZpc2lvbnMgc28gdGhleSBjYW5ub3QgZHJpZnQgZnJvbSB0aGUga2VybmVsLiAgQSBkZXZpY2UKJiM0MzsgKiBib3VuZCB0byB0aGlzIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCBjaGFyZ2VzIGV4YWN0bHkgdHdpY2UgdGhlCiYjNDM7ICogYnVpbHRpbiBtb2RlbCB1bmRlciB0aGUgc2FtZSB3b3JrbG9hZCwgd2hpY2ggbWFrZXMgaXQgYSBjb252ZW5pZW50CiYjNDM7ICogd2F5IHRvIHZlcmlmeSB0aGF0IGFjY291bnRpbmcgZ29lcyB0aHJvdWdoIHRoZSBCUEYgcGF0aC4KJiM0MzsgKgomIzQzOyAqIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nCiYjNDM7ICogZmx1c2hlczogdGhlcmUgaXMgbm8gZmFsbGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGEgZGF0YWxlc3MKJiM0MzsgKiBXUklURXxSRVFfUFJFRkxVU0ggaXMgcHJpY2VkIGFzIGEgb25lLXBhZ2Ugd3JpdGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7LyogVlRJTUVfUEVSX1NFQyBjb21lcyBmcm9tIHZtbGludXguaCAoYSBCVEYgZW51bSBjb25zdGFudCkgKi8KJiM0MzsjZGVmaW5lIElPQ19QQUdFX1NJWkUJCTQwOTYKJiM0MzsjZGVmaW5lIElPQ19TRUNUX1RPX1BBR0VfU0hJRlQJMwkvKiA1MTJCIHNlY3RvcnMgdG8gNGtCIHBhZ2VzICovCiYjNDM7I2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVMJNDA5NgkvKiAxNk1CIHNlZWsgdGhyZXNob2xkICovCiYjNDM7I2RlZmluZSBJT0NPU1RfQ09TVF9GX01FUkdFCSgxVUxMICZsdDsmbHQ7IDApCS8qIG5vdCBpbiBCVEY6IGEgcGxhaW4gbWFjcm8gKi8KJiM0MzsjZGVmaW5lIElPQ09TVF9SRVFfT1BfTUFTSwkweGZmCQkvKiBSRVFfT1BfTUFTSywgbm90IGluIEJURiAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogRElWNjRfVTY0X1JPVU5EX1VQIC8gRElWX1JPVU5EX1VQX1VMTCBlcXVpdmFsZW50cywgZm9sZGVkIGF0CiYjNDM7ICogY29tcGlsZSB0aW1lCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVSh4LCB5KQkJKCh4KSAvICh5KSAmIzQzOyAoKCh4KSAlICh5KSkgPyAxIDogMCkpCiYjNDM7CiYjNDM7I2RlZmluZSBSQlBTCTE3NDAxOTE3NlVMTAomIzQzOyNkZWZpbmUgUlNFUUlPUFMJNDE3MDhVTEwKJiM0MzsjZGVmaW5lIFJSQU5ESU9QUwkzNzBVTEwKJiM0MzsjZGVmaW5lIFdCUFMJMTc4MDc1ODY2VUxMCiYjNDM7I2RlZmluZSBXU0VRSU9QUwk0MjcwNVVMTAomIzQzOyNkZWZpbmUgV1JBTkRJT1BTCTM3OFVMTAomIzQzOwomIzQzOyNkZWZpbmUgUlBBR0UJKFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSkKJiM0MzsjZGVmaW5lIFJTRVFJTwkoUlUoVlRJTUVfUEVSX1NFQywgUlNFUUlPUFMpIC0gUlBBR0UpCiYjNDM7I2RlZmluZSBSUkFORElPCShSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpCiYjNDM7I2RlZmluZSBXUEFHRQkoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKQomIzQzOyNkZWZpbmUgV1NFUUlPCShSVShWVElNRV9QRVJfU0VDLCBXU0VRSU9QUykgLSBXUEFHRSkKJiM0MzsjZGVmaW5lIFdSQU5ESU8JKFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIHBlci1jZ3JvdXAgY3Vyc29yIHN0b3JhZ2U6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXQsIHNvCiYjNDM7ICogdGhlIG1vZGVsIG5ldmVyIGxlYWtzIG9yIHJldXNlcyBzdGFsZSBwZXItY2dyb3VwIHN0YXRlCiYjNDM7ICovCiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9DR1JQX1NUT1JBR0UpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gY3Vyc29yX3N0b3JlIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0Mzt1NjQgQlBGX1BST0coaW9jb3N0XzJ4X2NhbGNfY29zdCwgdTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvciwKJiM0MzsJICAgICBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgbW9kZWxfZmxhZ3MpCiYjNDM7ewomIzQzOwl1NjQgcGFnZXMsIHNlZWtfcGFnZXMgPSAwLCBiYXNlLCBjb2VmX3BhZ2UsIHJhbmRpbywgY29zdDsKJiM0MzsKJiM0MzsJaWYgKChvcGYgJmFtcDsgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfUkVBRCkgewomIzQzOwkJYmFzZSA9IFJTRVFJTzsgY29lZl9wYWdlID0gUlBBR0U7IHJhbmRpbyA9IFJSQU5ESU87CiYjNDM7CX0gZWxzZSBpZiAoKG9wZiAmYW1wOyBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9XUklURSkgewomIzQzOwkJYmFzZSA9IFdTRVFJTzsgY29lZl9wYWdlID0gV1BBR0U7IHJhbmRpbyA9IFdSQU5ESU87CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKgomIzQzOwkJICogYSBmdWxseSBvd25pbmcgbW9kZWwgbXVzdCBwcmljZSBldmVyeSBvcDsgdW5rbm93bgomIzQzOwkJICogb3BzIGFyZSBwcmljZWQgYXMgYSBzaW5nbGUgcGFnZSB3cml0ZQomIzQzOwkJICovCiYjNDM7CQliYXNlID0gMDsgY29lZl9wYWdlID0gV1BBR0U7IHJhbmRpbyA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbWlycm9yIHRoZSBidWlsdGluIHNpbmdsZSBwZXItY2dyb3VwIGN1cnNvcjogdGhlIG1vZGVsIGtlZXBzCiYjNDM7CSAqIGl0cyBvd24gY3Vyc29yIGtleWVkIGJ5IHRoZSBibGtjZyBhcmd1bWVudAomIzQzOwkgKi8KJiM0MzsJewomIzQzOwkJX191NjQgKmN1cnNvciwgY3VyOwomIzQzOwomIzQzOwkJY3Vyc29yID0gYnBmX2NncnBfc3RvcmFnZV9nZXQoJmFtcDtjdXJzb3Jfc3RvcmUsCiYjNDM7CQkJCQkgICAgICBibGtjZy0mZ3Q7Y3NzLmNncm91cCwgTlVMTCwKJiM0MzsJCQkJCSAgICAgIEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7CiYjNDM7CQlpZiAoIWN1cnNvcikKJiM0MzsJCQlyZXR1cm4gMiAqIChiYXNlICYjNDM7IFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSkgKiBjb2VmX3BhZ2UpOwomIzQzOwkJY3VyID0gKmN1cnNvcjsKJiM0MzsJCXNlZWtfcGFnZXMgPSBzZWN0b3IgJmd0OyBjdXIgPyBzZWN0b3IgLSBjdXIgOiBjdXIgLSBzZWN0b3I7CiYjNDM7CQlzZWVrX3BhZ2VzICZndDsmZ3Q7PSBJT0NfU0VDVF9UT19QQUdFX1NISUZUOwomIzQzOwkJaWYgKHNlZWtfcGFnZXMgJmd0OyBMQ09FRl9SQU5ESU9fUEFHRVMpCiYjNDM7CQkJYmFzZSA9IHJhbmRpbzsKJiM0MzsJCWlmICghKG1vZGVsX2ZsYWdzICZhbXA7IElPQ09TVF9DT1NUX0ZfTUVSR0UpKQomIzQzOwkJCSpjdXJzb3IgPSBzZWN0b3IgJiM0MzsgUlUobmJ5dGVzLCA1MTIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBhZ2VzID0gUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKTsKJiM0MzsJaWYgKCFwYWdlcykKJiM0MzsJCXBhZ2VzID0gMTsJLyogZGF0YWxlc3MgZmx1c2g6IG9uZSBwYWdlICovCiYjNDM7CWlmIChtb2RlbF9mbGFncyAmYW1wOyBJT0NPU1RfQ09TVF9GX01FUkdFKQomIzQzOwkJYmFzZSA9IDA7CiYjNDM7CiYjNDM7CWNvc3QgPSAyICogKGJhc2UgJiM0MzsgcGFnZXMgKiBjb2VmX3BhZ2UpOwomIzQzOwlyZXR1cm4gY29zdDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7LnN0cnVjdF9vcHMmIzM0OykKJiM0MztzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfMnggPSB7CiYjNDM7CS5jYWxjX2Nvc3QgPSAodm9pZCAqKWlvY29zdF8yeF9jYWxjX2Nvc3QsCiYjNDM7CS5uYW1lID0gJiMzNDtpb2Nvc3RfMngmIzM0OywKJiM0Mzt9OwomIzQzOwomIzQzO2NoYXIgTElDRU5TRVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjNjYzU3YzAzZDNjODgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21zLmMKQEAgLTAsMCAmIzQzOzEsMTM2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIEV4YW1wbGUgbXVsdGktc3RyZWFtIHNlcXVlbnRpYWxpdHkgZGV0ZWN0aW9uIGNvc3QgbW9kZWwuCiYjNDM7ICoKJiM0MzsgKiBUaGUgYnVpbHRpbiBtb2RlbCBrZWVwcyBhIHNpbmdsZSBjdXJzb3IgcGVyIGNncm91cCwgc28gdHdvCiYjNDM7ICogaW50ZXJsZWF2ZWQgc2VxdWVudGlhbCByZWFkZXJzIGluIG9uZSBjZ3JvdXAgYXJlIGFsbCBwcmljZWQgcmFuZG9tCiYjNDM7ICogKG1lYXN1cmVkIDg5eCBvdmVyY2hhcmdlLCAxMi45eCB0aHJvdWdocHV0IGNvbGxhcHNlKSwgd2hpbGUgcmFuZG9tCiYjNDM7ICogSU8gaW5zaWRlIGEgaG90IHdpbmRvdyBzbWFsbGVyIHRoYW4gdGhlIDE2TUIgc2VlayB0aHJlc2hvbGQgaXMKJiM0MzsgKiBwcmljZWQgc2VxdWVudGlhbCAobWVhc3VyZWQgMTA3eCB1bmRlcmNoYXJnZSkuICBUaGlzIG1vZGVsIHJlcGxhY2VzCiYjNDM7ICogdGhlIHNpbmdsZSBjdXJzb3Igd2l0aCBhIHBlci1jZ3JvdXAgdGFibGUgb2Ygc3RyZWFtIHNsb3RzOiBhbiBJTyBpcwomIzQzOyAqIHNlcXVlbnRpYWwgaWZmIGl0cyBzZWN0b3IgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgbmV4dCBzZWN0b3Igb2YgYW55CiYjNDM7ICogdHJhY2tlZCBzdHJlYW0uICBJbnRlcmxlYXZlZCBzdHJlYW1zIGtlZXAgdGhlaXIgb3duIHNsb3RzLCBhbmQKJiM0MzsgKiB3aW5kb3dlZCByYW5kb20gSU8gcmFyZWx5IG1hdGNoZXMgYSBtb3ZpbmcgZXhwZWN0YXRpb24uCiYjNDM7ICoKJiM0MzsgKiBTdHJlYW0gc3RhdGUgbGl2ZXMgaW4gYSBDR1JQX1NUT1JBR0UgbWFwLCBzbyBpdCBpcyBjcmVhdGVkIGFuZAomIzQzOyAqIGZyZWVkIHdpdGggdGhlIGNncm91cC4gIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGJ1aWx0aW4KJiM0MzsgKiBsaW5lYXIgZm9ybXVsYSBpdHNlbGYsIGluY2x1ZGluZyBmbHVzaCBwcmljaW5nLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzOy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovCiYjNDM7I2RlZmluZSBJT0NfUEFHRV9TSVpFCQk0MDk2CiYjNDM7I2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUCTMJLyogNTEyQiBzZWN0b3JzIHRvIDRrQiBwYWdlcyAqLwomIzQzOyNkZWZpbmUgTENPRUZfUkFORElPX1BBR0VTCTQwOTYJLyogMTZNQiBzZWVrIHRocmVzaG9sZCAqLwomIzQzOyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRQkoMVVMTCAmbHQ7Jmx0OyAwKQkvKiBub3QgaW4gQlRGOiBhIHBsYWluIG1hY3JvICovCiYjNDM7I2RlZmluZSBJT0NPU1RfUkVRX09QX01BU0sJMHhmZgkJLyogUkVRX09QX01BU0ssIG5vdCBpbiBCVEYgKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERJVjY0X1U2NF9ST1VORF9VUCAvIERJVl9ST1VORF9VUF9VTEwgZXF1aXZhbGVudHMsIGZvbGRlZCBhdAomIzQzOyAqIGNvbXBpbGUgdGltZQomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlUoeCwgeSkJCSgoeCkgLyAoeSkgJiM0MzsgKCgoeCkgJSAoeSkpID8gMSA6IDApKQomIzQzOwomIzQzOyNkZWZpbmUgUkJQUwkxNzQwMTkxNzZVTEwKJiM0MzsjZGVmaW5lIFJTRVFJT1BTCTQxNzA4VUxMCiYjNDM7I2RlZmluZSBSUkFORElPUFMJMzcwVUxMCiYjNDM7I2RlZmluZSBXQlBTCTE3ODA3NTg2NlVMTAomIzQzOyNkZWZpbmUgV1NFUUlPUFMJNDI3MDVVTEwKJiM0MzsjZGVmaW5lIFdSQU5ESU9QUwkzNzhVTEwKJiM0MzsKJiM0MzsjZGVmaW5lIFJQQUdFCShSVShWVElNRV9QRVJfU0VDLCBSVShSQlBTLCBJT0NfUEFHRV9TSVpFKSkpCiYjNDM7I2RlZmluZSBSU0VRSU8JKFJVKFZUSU1FX1BFUl9TRUMsIFJTRVFJT1BTKSAtIFJQQUdFKQomIzQzOyNkZWZpbmUgUlJBTkRJTwkoUlUoVlRJTUVfUEVSX1NFQywgUlJBTkRJT1BTKSAtIFJQQUdFKQomIzQzOyNkZWZpbmUgV1BBR0UJKFJVKFZUSU1FX1BFUl9TRUMsIFJVKFdCUFMsIElPQ19QQUdFX1NJWkUpKSkKJiM0MzsjZGVmaW5lIFdTRVFJTwkoUlUoVlRJTUVfUEVSX1NFQywgV1NFUUlPUFMpIC0gV1BBR0UpCiYjNDM7I2RlZmluZSBXUkFORElPCShSVShWVElNRV9QRVJfU0VDLCBXUkFORElPUFMpIC0gV1BBR0UpCiYjNDM7CiYjNDM7I2RlZmluZSBOU0xPVFMJNAomIzQzOwomIzQzO3N0cnVjdCBzdHJlYW1zIHsKJiM0MzsJX191NjQgZXhwZWN0ZWRbTlNMT1RTXTsJLyogbmV4dCBleHBlY3RlZCBzZWN0b3IsIHBlciBzdHJlYW0gKi8KJiM0MzsJX191NjQgc3RhbXBbTlNMT1RTXTsJLyogTFJVIHN0YW1wLCAwID0gZW1wdHkgKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogcGVyLWNncm91cCBzdHJlYW0gdGFibGU6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0NHUlBfU1RPUkFHRSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qgc3RyZWFtcyk7CiYjNDM7fSBzdHJlYW1fdGFiIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0Mzt1NjQgQlBGX1BST0coaW9jb3N0X21zX2NhbGNfY29zdCwgdTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvciwKJiM0MzsJICAgICBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgbW9kZWxfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3RyZWFtcyAqczsKJiM0MzsJdTY0IHBhZ2VzLCBiYXNlLCBjb2VmX3BhZ2UsIHJhbmRpbywgYWR2YW5jZSwgbm93OwomIzQzOwl1MzIgaSwgdmljdGltID0gMCwgZm91bmQgPSAweEZGRkZGRkZGOwomIzQzOwomIzQzOwlpZiAoKG9wZiAmYW1wOyBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7CiYjNDM7CQliYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTzsKJiM0MzsJfSBlbHNlIGlmICgob3BmICZhbXA7IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1dSSVRFKSB7CiYjNDM7CQliYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBhIGZ1bGx5IG93bmluZyBtb2RlbCBtdXN0IHByaWNlIGV2ZXJ5IG9wOyB1bmtub3duCiYjNDM7CQkgKiBvcHMgYXJlIHByaWNlZCBhcyBhIHNpbmdsZSBwYWdlIHdyaXRlCiYjNDM7CQkgKi8KJiM0MzsJCWJhc2UgPSAwOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gMDsKJiM0MzsJfQomIzQzOwlhZHZhbmNlID0gUlUobmJ5dGVzLCA1MTIpOwkvKiBzZWN0b3JzICovCiYjNDM7CiYjNDM7CXMgPSBicGZfY2dycF9zdG9yYWdlX2dldCgmYW1wO3N0cmVhbV90YWIsIGJsa2NnLSZndDtjc3MuY2dyb3VwLCBOVUxMLAomIzQzOwkJCQkgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTsKJiM0MzsJaWYgKCFzKQomIzQzOwkJcmV0dXJuIGJhc2UgJiM0MzsgUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKSAqIGNvZWZfcGFnZTsKJiM0MzsKJiM0MzsJbm93ID0gYnBmX2t0aW1lX2dldF9ucygpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlNMT1RTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHMtJmd0O2V4cGVjdGVkW2ldID09IHNlY3RvciAmYW1wOyZhbXA7IHMtJmd0O3N0YW1wW2ldKSB7CiYjNDM7CQkJZm91bmQgPSBpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChmb3VuZCAhPSAweEZGRkZGRkZGKSB7CiYjNDM7CQkvKiBzZXF1ZW50aWFsOiBrZWVwIHRoZSBzZXEgYmFzZSBmcm9tIHRoZSBvcCBicmFuY2ggKi8KJiM0MzsJCXMtJmd0O2V4cGVjdGVkW2ZvdW5kXSA9IHNlY3RvciAmIzQzOyBhZHZhbmNlOwomIzQzOwkJcy0mZ3Q7c3RhbXBbZm91bmRdID0gbm93OwomIzQzOwl9IGVsc2UgewomIzQzOwkJYmFzZSA9IHJhbmRpbzsKJiM0MzsJCWZvciAoaSA9IDE7IGkgJmx0OyBOU0xPVFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHMtJmd0O3N0YW1wW2ldICZsdDsgcy0mZ3Q7c3RhbXBbdmljdGltXSkKJiM0MzsJCQkJdmljdGltID0gaTsKJiM0MzsJCX0KJiM0MzsJCXMtJmd0O2V4cGVjdGVkW3ZpY3RpbV0gPSBzZWN0b3IgJiM0MzsgYWR2YW5jZTsKJiM0MzsJCXMtJmd0O3N0YW1wW3ZpY3RpbV0gPSBub3c7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGFnZXMgPSBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpOwomIzQzOwlpZiAoIXBhZ2VzKQomIzQzOwkJcGFnZXMgPSAxOwkvKiBkYXRhbGVzcyBmbHVzaDogb25lIHBhZ2UgKi8KJiM0MzsJaWYgKG1vZGVsX2ZsYWdzICZhbXA7IElPQ09TVF9DT1NUX0ZfTUVSR0UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBtZXJnZWQgYmlvcyBza2lwIHRoZSBiYXNlIGNvc3QgYnV0IHN0aWxsIGFkdmFuY2UKJiM0MzsJCSAqIHRoZSBzdHJlYW0gcG9zaXRpb24gYWJvdmUsIHNvIGEgbWVyZ2UgYXQgdGhlCiYjNDM7CQkgKiBleHBlY3RlZCBzZWN0b3IgZG9lcyBub3QgbWFrZSB0aGUgZm9sbG93aW5nIG5ldyBJTwomIzQzOwkJICogbG9vayByYW5kb20KJiM0MzsJCSAqLwomIzQzOwkJYmFzZSA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGJhc2UgJiM0MzsgcGFnZXMgKiBjb2VmX3BhZ2U7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oy5zdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgaW9jb3N0X21zID0gewomIzQzOwkuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfbXNfY2FsY19jb3N0LAomIzQzOwkubmFtZSA9ICYjMzQ7aW9jb3N0X21zJiMzNDssCiYjNDM7fTsKJiM0MzsKJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0ODIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYtQmFzZWQgQmxvY2sgSU8gQ29zdCBNb2RlbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlcmllcyBsb29rcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgaW50cm9kdWNpbmcgQlBGIHBsdWdnYWJsZSBjb3N0IG1vZGVsIHN1cHBvcnQgZm9yIHRoZSBibG9jayBJTyBjb250cm9sbGVyIChibGstaW9jb3N0KSwgbGV2ZXJhZ2luZyBCUEYgc3RydWN0X29wcyAoYGlvY29zdF9tb2RlbF9vcHNgKS4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMgYW5kIHNlZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB3ZSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8uCgpGaXJzdCwgdGhlcmUmIzM5O3MgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGluIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RgLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHNpZ24uIFRoZW4sIGEgbmV3IGNvbmZpZyBvcHRpb24sIGBCTEtfQ0dST1VQX0lPQ09TVF9CUEZgLCBpbiBgYmxvY2svS2NvbmZpZ2AuIEl0IGhhcyBzb21lIGRlcGVuZGVuY2llczogYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4gQWxyaWdodCwgc28gQlBGIGFuZCB0aGUgaW8gY29zdCBtb2RlbCBuZWVkIHRvIGJlIHNldCB1cCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBNYWtlZmlsZSBub3cgaW5jbHVkZXMgYGJsay1pb2Nvc3QtYnBmLm9gIHdoZW4gdGhhdCBjb25maWcgaXMgZW5hYmxlZC4KCkluIGBibG9jay9ibGstY2dyb3VwLmNgLCB0aGV5JiMzOTt2ZSBhZGRlZCBob29rcyB0byB0aGUgY2dyb3VwIGxpZmVjeWNsZSBjYWxsYmFja3MsIGBibGtjZ19jc3Nfb2ZmbGluZWAgYW5kIGBibGtjZ19jc3Nfb25saW5lYCwgdG8gdHJpZ2dlciBzb21lIG5ldyBgaW9jb3N0X25vdGlmeWAgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgaW4gYGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmNgLCB3aGljaCBjb250YWlucyB0aGUgYWN0dWFsIEJQRiBzdHJ1Y3Rfb3BzLCBhbG9uZyB3aXRoIHJlZ2lzdHJhdGlvbiwgbG9va3VwLCBhbmQgbm90aWZpY2F0aW9uIGNhbGxiYWNrcy4gSXQgbG9va3MgbGlrZSB0aGUgZ2x1ZSBjb2RlIHRoYXQgbWFrZXMgZXZlcnl0aGluZyB3b3JrLgoKYGJsb2NrL2Jsay1pb2Nvc3QuY2AgaGFzIHNlZW4gdGhlIG1vc3QgY2hhbmdlcywgd2l0aCBob29rcyBpbnRvIHRoZSBjb3N0IGNhbGN1bGF0aW9uIGZ1bmN0aW9ucyAoYGNhbGNfdnRpbWVfY29zdGAsIGBjYWxjX3NpemVfdnRpbWVfY29zdGApLCB0aGUgSU8gUW9TIGV4aXQgZnVuY3Rpb24gKGBpb2NfcnFvc19leGl0YCksIGFuZCBzb21lIG90aGVyIGtleSBwb2ludHMsIGxpa2UgYGlvY19jb3N0X21vZGVsX3ByZmlsbGAsIGBpb2NfYnBmX21vZGVsX2JpbmRgLCBgaW9jX2Nvc3RfbW9kZWxfd3JpdGVgIGFuZCBhbHNvIGEgdHJhY2Vwb2ludCBgaW9jb3N0X2lvY190aWNrYC4gYGluY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oYCBkZWZpbmVzIHRoZSBgaW9jb3N0X21vZGVsX29wc2Agc3RydWN0dXJlIGFuZCByZWxhdGVkIGZ1bmN0aW9uIGhlYWRlcnMsIHdoaWxlIGBpbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaGAgaW50cm9kdWNlcyBhIG5ldyB0cmFjZSBldmVudC4gV2UgYWxzbyBoYXZlIHNlbGZ0ZXN0cyBmb3IgQlBGLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlLCBhbmQgaXMgaXQgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIHNlZS4uLiBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gUUVNVSBvciBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIGJsay1pb2Nvc3QsIGJsay1jZ3JvdXAsIEJQRiwgYW5kIGNncm91cCB2MiBpby5jb3N0Lm1vZGVsIHN5c2ZzL2Nncm91cCBpbnRlcmZhY2UsIHRoaXMgaXMgYWxsIHZlcnkgcmVhY2hhYmxlLiBBcmUgdGhlc2UgY29yZSBrZXJuZWwgY2hhbmdlcz8gWWVzLCB0aGlzIGhpdHMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIsIEJQRiBzdWJzeXN0ZW0sIGFuZCBjZ3JvdXAgSU8gY29udHJvbGxlci4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIQoKSSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBzeW1ib2xzIGFuZCBjb25maWdzLiBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVzZSBncmVwIG9yIGEgY29kZSBzZWFyY2ggdG9vbCB0byBjaGVjayBkZXBlbmRlbmNpZXMgbW9yZSB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTE0NT1jb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTIzMj1zb3VyY2UgXCYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkXCYjMzQ7XG5ibG9jay9LY29uZmlnLTIzMy1cbmJsb2NrL0tjb25maWc6MjM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVF9CUEZcbmJsb2NrL0tjb25maWctMjM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIHBsdWdnYWJsZSBjb3N0IG1vZGVsIHN1cHBvcnQgZm9yIHRoZSBjb3N0IElPIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UsIGBibG9jay9LY29uZmlnYCBpcyB1c3VhbGx5IHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIGJlZW4gaW4gdGhlcmUgYmVmb3JlLi4uIG5vdyB3aGVyZSB3YXMgdGhhdCBzZXR0aW5nPyBSaWdodCwgaXQmIzM5O3MgdmFndWVseSBmYW1pbGlhci4uLiBIbW0sIGxpbmVzIDE1NCBhbmQgMjM0IGluIHRoYXQgZmlsZSBzb3VuZCBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCBhcm91bmQgdGhvc2UgbGluZXMuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGNoZWNrIHRoZW0uIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmUsIG9yIGF0IGxlYXN0IHByb3ZpZGUgc29tZSBjbHVlcyB0byBmb2xsb3chCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdCAgY2dyb3VwIGFwcGxpY2F0aW9ucy4gSXQgZW5hYmxlcyB0aGUgRmFicmljIGFuZCB0aGUgc3RvcmFnZSB0YXJnZXRzIHRvXG4gMTUxOlx0XHQgIGlkZW50aWZ5LCBtb25pdG9yLCBhbmQgaGFuZGxlIEZDIHRyYWZmaWMgYmFzZWQgb24gVk0gdGFncyBieSBpbnNlcnRpbmdcbiAxNTI6XHRcdCAgYXBwbGljYXRpb24gc3BlY2lmaWMgaWRlbnRpZmljYXRpb24gaW50byB0aGUgRkMgZnJhbWUuXG4gMTUzOlx0XG4gMTU0Olx0Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG4gMTU1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXCYjMzQ7XG4gMTU2Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxNTc6XHRcdHNlbGVjdCBCTEtfUlFfQUxMT0NfVElNRVxuIDE1ODpcdFx0aGVscFxuIDE1OTpcdFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLndlaWdodCBpbnRlcmZhY2UgZm9yIGNvc3RcbiAxNjA6XHRcdG1vZGVsIGJhc2VkIHByb3BvcnRpb25hbCBJTyBjb250cm9sLiAgVGhlIElPIGNvbnRyb2xsZXJcbiAxNjE6XHRcdGRpc3RyaWJ1dGVzIElPIGNhcGFjaXR5IGJldHdlZW4gZGlmZmVyZW50IGdyb3VwcyBiYXNlZCBvblxuIDE2MjpcdFx0dGhlaXIgc2hhcmUgb2YgdGhlIG92ZXJhbGwgd2VpZ2h0IGRpc3RyaWJ1dGlvbi5cbiAxNjM6XHRcbiAxNjQ6XHRjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cbiAxNjU6XHRcdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4gMTY2Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxNjc6XHRcdGhlbHBcbiAxNjg6XHRcdEVuYWJsZSB0aGUgLnByaW8gaW50ZXJmYWNlIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzIHRvXG4gMTY5Olx0XHRyZXF1ZXN0cy4gVGhlIEkvTyBwcmlvcml0eSBjbGFzcyBhZmZlY3RzIHRoZSBvcmRlciBpbiB3aGljaCBhbiBJL09cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM5OAoJCQkJCQkJb3V0cHV0OiAzMjYKCQkJCQkJCXRob3VnaHRzOiAxMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJMS19DR1JPVVBfSU9DT1NUX0JQRiBEZXBlbmRlbmNpZXMgYW5kIEtleSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19DR1JPVVBfSU9DT1NUX0JQRmAuIEkgc2VlIGl0IHJlbGllcyBvbiBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLiBGdXJ0aGVyLCBgQkxLX0NHUk9VUF9JT0NPU1RgIGl0c2VsZiBkZXBlbmRzIG9uIGBCTEtfQ0dST1VQYC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRob3NlIGNvbmZpZ3VyYXRpb25zOiBgQkxLX0NHUk9VUF9JT0NPU1RfQlBGYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBgREVCVUdfSU5GT19CVEZgLCBhbmQgYEJMS19DR1JPVVBgLiBHb29kLCBnb3QgdGhlIEtjb25maWcgc2lkZSBoYW5kbGVkLgoKTm93LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgY29kZS4gSW4gYGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmNgLCBJIHNwb3QgdGhlIHVzZSBvZiBgQ09ORklHX0NHUk9VUFNgIGZvciBgQlBGX0ZVTkNfY2dycF9zdG9yYWdlX2dldGAsIGFuZCBgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmAgaXMgdXNlZCB0byBjb21waWxlIGBibG9jay9ibGstaW9jb3N0LWJwZi5vYC4gSW4gYGJsb2NrL2Jsay1pb2Nvc3QuY2AsIEkgc2VlIGAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmAsIHdoaWNoIG1lYW5zIHRoZSBCUEYgZmVhdHVyZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluLgoKTmV4dCwgdGhlIGNyaXRpY2FsIHN0ZXA6IGlkZW50aWZ5aW5nIHRoZSBtb2RpZmllZCBhbmQgaW50cm9kdWNlZCBmdW5jdGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgbGllcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGV4aXN0aW5nIHN5c3RlbS4gRnJvbSBgYmxvY2svYmxrLWlvY29zdC1icGYuY2AsIHRoZXNlIGxvb2sgaW1wb3J0YW50OiBgaW9jb3N0X2JwZl9tb2RlbF9nZXRgLCBgaW9jb3N0X2JwZl9tb2RlbF9wdXRgLCBgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmVgLCBgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lYCwgYW5kIHRoZSBzdHJ1Y3Rfb3BzIG1ldGhvZHMgYGJwZl9pb2Nvc3RfcmVnYCwgYGJwZl9pb2Nvc3RfdW5yZWdgLCBgYnBmX2lvY29zdF92YWxpZGF0ZWAsIGBicGZfaW9jb3N0X2NoZWNrX21lbWJlcmAsIGBicGZfaW9jb3N0X2luaXRfbWVtYmVyYCwgYGJwZl9pb2Nvc3RfZ2V0X2Z1bmNfcHJvdG9gLCBgYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3NgLCBgYnBmX2lvY29zdF9tb2RlbF9pbml0YC4gVGhlbiwgaW4gYGJsb2NrL2Jsay1pb2Nvc3QuY2AsIEkmIzM5O3ZlIGdvdCBgaW9jX2JwZl9tb2RlbF9iaW5kYCwgYGlvY19jb3N0X21vZGVsX3dyaXRlYCwgYGNhbGNfdnRpbWVfY29zdGAsIGBjYWxjX3NpemVfdnRpbWVfY29zdGAsIGBpb2NfY29zdF9tb2RlbF9wcmZpbGxgLCBgaW9jX3Jxb3NfZXhpdGAuIEZpbmFsbHksIEkgc2VlIHRoYXQgY2dyb3VwIG9wZXJhdGlvbnMgKGBibGtjZ19jc3Nfb2ZmbGluZWAsIGBibGtjZ19jc3Nfb25saW5lYCkgaW4gYGJsb2NrL2Jsay1jZ3JvdXAuY2AgYXJlIGFsc28gcG90ZW50aWFsbHkgcmVsZXZhbnQuCgpOb3csIEkmIzM5O20gY3Jvc3MtcmVmZXJlbmNpbmcgdG8gY29uZmlybSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFuZCBpbmRlZWQsIHRob3NlIEkgaWRlbnRpZmllZCBhcmUgbm9uLXN0YXRpYyBhbmQgZXhwb3NlZCwgd2hpY2ggY29uZmlybXMgdGhvc2UgYXJlIGludGVyZXN0aW5nLgoKRmluYWxseSwgSSYjMzk7bSBjaGVja2luZyBteSBndWlkZWxpbmVzLiBJIHdhbnQgdG8gdGFyZ2V0IHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGF2b2lkIHRoZSBnZW5lcmljIHN0dWZmLiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBuZXcga2V5IGZ1bmN0aW9ucyBmcm9tIGJvdGggZmlsZXMgdG8gYnVpbGQgYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuIEkmIzM5O20gY2hvb3NpbmcgdGhlIGZvbGxvd2luZyBhcyB0aGUgYEZvY3VzU3ltYm9sc2A6IGBpb2NfYnBmX21vZGVsX2JpbmRgLCBgaW9jX2Nvc3RfbW9kZWxfd3JpdGVgLCBgY2FsY192dGltZV9jb3N0YCwgYGNhbGNfc2l6ZV92dGltZV9jb3N0YCwgYGJwZl9pb2Nvc3RfcmVnYCwgYGJwZl9pb2Nvc3RfdW5yZWdgLCBgYnBmX2lvY29zdF92YWxpZGF0ZWAsIGBpb2Nvc3RfYnBmX21vZGVsX2dldGAsIGBpb2Nvc3RfYnBmX21vZGVsX3B1dGAsIGBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZWAsIGBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmVgLgoKT2theSwgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgbGluZWQgdXAuIEFsbCB0aGUgY2hlY2tzIHBhc3MuIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHRoZSB0b29sIGNhbGwgbm93LCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7dmUgY2FyZWZ1bGx5IGlkZW50aWZpZWQgdGhlIGtleSBjb21wb25lbnRzIHJlbGF0ZWQgdG8gdGhlIEJQRi1iYXNlZCBJL08gY29zdCBhY2NvdW50aW5nIGFuZCB0aGUgaW50ZWdyYXRpb24gd2l0aCBjZ3JvdXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVF9CUEYmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0NPU1QmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9jX2JwZl9tb2RlbF9iaW5kJiMzNDssCiAgICAmIzM0O2lvY19jb3N0X21vZGVsX3dyaXRlJiMzNDssCiAgICAmIzM0O2NhbGNfdnRpbWVfY29zdCYjMzQ7LAogICAgJiMzNDtjYWxjX3NpemVfdnRpbWVfY29zdCYjMzQ7LAogICAgJiMzNDticGZfaW9jb3N0X3JlZyYjMzQ7LAogICAgJiMzNDticGZfaW9jb3N0X3VucmVnJiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7aW9jb3N0X2JwZl9tb2RlbF9nZXQmIzM0OywKICAgICYjMzQ7aW9jb3N0X2JwZl9tb2RlbF9wdXQmIzM0OywKICAgICYjMzQ7aW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUmIzM0OywKICAgICYjMzQ7aW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQlBGIHN0cnVjdF9vcHMgc3VwcG9ydCAoaW9jb3N0X21vZGVsX29wcykgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscyBpbiBibGstaW9jb3N0LiBJdCBpbnRyb2R1Y2VzIG5ldyBrZXJuZWwgY29kZSBpbiBibG9jay9ibGstaW9jb3N0LWJwZi5jIGZvciByZWdpc3RlcmluZywgdmFsaWRhdGluZywgYW5kIG1hbmFnaW5nIEJQRiBjb3N0IG1vZGVscywgYW5kIHVwZGF0ZXMgYmxvY2svYmxrLWlvY29zdC5jIGFuZCBibG9jay9ibGstY2dyb3VwLmMgdG8gaW50ZXJmYWNlIHdpdGggdGhlc2UgbW9kZWxzIGR1cmluZyBJTyBjb3N0IGNhbGN1bGF0aW9ucywgY29uZmlndXJhdGlvbiB3cml0ZXMsIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBCUEYgc3lzY2FsbHMgYW5kIGNncm91cCB2MiBpby5jb3N0Lm1vZGVsIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUX0JQRiYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2NfYnBmX21vZGVsX2JpbmQmIzM0OywKICAgICYjMzQ7aW9jX2Nvc3RfbW9kZWxfd3JpdGUmIzM0OywKICAgICYjMzQ7Y2FsY192dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2NhbGNfc2l6ZV92dGltZV9jb3N0JiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9pb2Nvc3RfdW5yZWcmIzM0OywKICAgICYjMzQ7YnBmX2lvY29zdF92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX2dldCYjMzQ7LAogICAgJiMzNDtpb2Nvc3RfYnBmX21vZGVsX3B1dCYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZSYjMzQ7LAogICAgJiMzNDtpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IChpb2Nvc3RfbW9kZWxfb3BzKSBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzIGluIGJsay1pb2Nvc3QuIEl0IGludHJvZHVjZXMgbmV3IGtlcm5lbCBjb2RlIGluIGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgZm9yIHJlZ2lzdGVyaW5nLCB2YWxpZGF0aW5nLCBhbmQgbWFuYWdpbmcgQlBGIGNvc3QgbW9kZWxzLCBhbmQgdXBkYXRlcyBibG9jay9ibGstaW9jb3N0LmMgYW5kIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBtb2RlbHMgZHVyaW5nIElPIGNvc3QgY2FsY3VsYXRpb25zLCBjb25maWd1cmF0aW9uIHdyaXRlcywgYW5kIGNncm91cCBsaWZlY3ljbGUgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEJQRiBzeXNjYWxscyBhbmQgY2dyb3VwIHYyIGlvLmNvc3QubW9kZWwgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNDoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGltcGxlbWVudHMgQlBGIHN0cnVjdF9vcHMgc3VwcG9ydCBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzIGluIGJsay1pb2Nvc3QgKGBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGYCksIGFkZGluZyBgaW9jb3N0X21vZGVsX29wc2AsIG1vZGVsIHJlZ2lzdHJhdGlvbi9saWZlY3ljbGUgbWFuYWdlbWVudCwgcGFyc2luZyBpbiBgaW8uY29zdC5tb2RlbGAsIGFuZCBhIG5ldyB0cmFjZXBvaW50IGBpb2Nvc3RfaW9jX3RpY2tgLlxuXG5BbiBldmFsdWF0aW9uIG9mIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGFuZCBuZXcgY29kZSBzaG93czpcbi0gQWxsIHN0YWNrIHZhcmlhYmxlcyAoc3VjaCBhcyBgYnBmX21vZGVsYCBpbml0aWFsaXplZCB3aXRoIGBicGZfbW9kZWxbMF0gPSAmIzM5O1xcMCYjMzk7YCwgYG5yX2FjdGl2ZWAgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGBidWZgIGJ1ZmZlcnMgZmlsbGVkIHdpdGggYG1hdGNoX3N0cmxjcHlgKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWQvdXNlLlxuLSBEeW5hbWljIGFsbG9jYXRpb25zIHVzZSBga3phbGxvY2AgKGZvciBgc3RydWN0IGlvY29zdF9icGZfbW9kZWxgKSBhbmQgdGhlIGV4aXN0aW5nIHplcm9lZCBhbGxvY2F0aW9uIGZvciBgc3RydWN0IGlvY2AuXG4tIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZTsgb3V0cHV0IHRvIHVzZXIgc3BhY2UgaXMgaGFuZGxlZCB2aWEgZm9ybWF0dGVkIHRleHQgaW4gYHNlcV9wcmludGZgLlxuLSBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byBCUEYgY2FsbGJhY2tzIChgY2FsY19jb3N0YCwgYGJsa2NnX29ubGluZWAsIGBibGtjZ19vZmZsaW5lYCkgYXJlIGRlcml2ZWQgZGlyZWN0bHkgZnJvbSBpbml0aWFsaXplZCBiaW8vcmVxdWVzdCBzdHJ1Y3R1cmVzIGFuZCBibGtjZyBwb2ludGVycy5cblxuVGhlIHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggc2VyaWVzIHBlcnRhaW4gdG8gUkNVIHN5bmNocm9uaXphdGlvbiwgb2JqZWN0IHJlZmNvdW50aW5nL2xpZmV0aW1lIChgYnBmX3N0cnVjdF9vcHNfZ2V0YC9gcHV0YCksIGFuZCBsb2NraW5nLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZGV0ZWN0b3JzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHNwZWNpZmljIHRvIEtNU0FOIGFyZSBwcmVzZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmM1MGQ0MDM0MzhiNGI0ZTE4OGIxNDhhMGFiNWNjNGFmNWI2N2EwNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE0OjEwOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CmluZGV4IDhkMjYwMzc1MWM1MWEuLmE2OTEwYWQ3YzJkMDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKQEAgLTIxMjQsNiAmIzQzOzIxMjQsMTcgQEAgSU8gSW50ZXJmYWNlIEZpbGVzCiAJcGFyYW1ldGVycyBhcmUgd3JpdHRlbiB0bywgJiMzNDtjdHJsJiMzNDsgYmVjb21lICYjMzQ7dXNlciYjMzQ7IGFuZCB0aGUKIAlhdXRvbWF0aWMgY2hhbmdlcyBhcmUgZGlzYWJsZWQuCiAKJiM0MzsJV2hlbiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGIGlzIGVuYWJsZWQsICYjMzQ7bW9kZWwmIzM0OyBhbHNvIGFjY2VwdHMKJiM0MzsJdGhlIG5hbWUgb2YgYSByZWdpc3RlcmVkIGlvY29zdF9tb2RlbF9vcHMgQlBGIHN0cnVjdF9vcHMgbW9kZWw6CiYjNDM7CSYjMzQ7bW9kZWw9Jmx0O25hbWUmZ3Q7JiMzNDsgYmluZHMgdGhlIG1vZGVsIHRvIHRoZSBkZXZpY2UgYW5kIHRoZSBtb2RlbCBmdWxseQomIzQzOwlyZXBsYWNlcyB0aGUgYnVpbHRpbiBsaW5lYXIgcHJpY2luZywgZm9yIGV2ZXJ5IG9wZXJhdGlvbiBpbmNsdWRpbmcKJiM0MzsJZmx1c2hlczsgJiMzNDttb2RlbD1saW5lYXImIzM0OyAob3IgJiMzNDtjdHJsPWF1dG8vdXNlciYjMzQ7KSByZXN0b3JlcyB0aGUgYnVpbHRpbgomIzQzOwltb2RlbC4gIFdyaXRpbmcgYW4gdW5rbm93biBuYW1lIGZhaWxzIHdpdGggRU5PRU5ULiAgVW5yZWdpc3RlcmluZwomIzQzOwlhIG1vZGVsIHJlbW92ZXMgaXRzIG5hbWU7IGRldmljZXMgYWxyZWFkeSBib3VuZCBrZWVwIHVzaW5nIGl0CiYjNDM7CXVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGZvbGxvd2luZyB0aGUgbGlmZXRpbWUKJiM0MzsJbW9kZWwgb2YgVENQIGNvbmdlc3Rpb24gY29udHJvbC4gIFNlZSBpbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaAomIzQzOwlmb3IgdGhlIG1vZGVsIGludGVyZmFjZS4KJiM0MzsKIAlXaGVuICYjMzQ7bW9kZWwmIzM0OyBpcyAmIzM0O2xpbmVhciYjMzQ7LCB0aGUgZm9sbG93aW5nIG1vZGVsIHBhcmFtZXRlcnMgYXJlCiAJZGVmaW5lZC4KIApkaWZmIC0tZ2l0IGEvYmxvY2svS2NvbmZpZyBiL2Jsb2NrL0tjb25maWcKaW5kZXggNzBlNGE2NmQ5NDFmZi4uOTFlODA4Zjg2ZDI4ZCAxMDA2NDQKLS0tIGEvYmxvY2svS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9LY29uZmlnCkBAIC0yMzEsNCAmIzQzOzIzMSwxMyBAQCBjb25maWcgQkxLX0VSUk9SX0lOSkVDVElPTgogCiBzb3VyY2UgJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWQmIzM0OwogCiYjNDM7Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwlib29sICYjMzQ7RW5hYmxlIEJQRiBwbHVnZ2FibGUgY29zdCBtb2RlbCBzdXBwb3J0IGZvciB0aGUgY29zdCBJTyBjb250cm9sbGVyJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBCTEtfQ0dST1VQX0lPQ09TVCAmYW1wOyZhbXA7IEJQRl9TWVNDQUxMICZhbXA7JmFtcDsgQlBGX0pJVCAmYW1wOyZhbXA7IERFQlVHX0lORk9fQlRGCiYjNDM7CWhlbHAKJiM0MzsJIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHJlZ2lzdGVycyB0aGUgJiMzNDtpb2Nvc3RfbW9kZWxfb3BzJiMzNDsgQlBGCiYjNDM7CSBzdHJ1Y3Rfb3BzIHR5cGUsIHdoaWNoIGFsbG93cyBhIEJQRiBwcm9ncmFtIHRvIGZ1bGx5IHJlcGxhY2UKJiM0MzsJIHRoZSBidWlsdGluIGxpbmVhciBjb3N0IG1vZGVsIG9uIGEgZGV2aWNlIGl0IGlzIGJvdW5kIHRvCiYjNDM7CSB0aHJvdWdoIGlvLmNvc3QubW9kZWwuCiYjNDM7CiBlbmRpZiAjIEJMT0NLCmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlCmluZGV4IGU3YmQzMjBlM2Q2OTcuLmVlNWNlYmVlYTAwNmYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL01ha2VmaWxlCkBAIC0zOSwzICYjNDM7MzksNCBAQCBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OKQkmIzQzOz0gYmxrLWNyeXB0by5vIGJsay1jcnlwdG8tcHJvZmlsZS5vIFwKIAkJCQkJICAgYmxrLWNyeXB0by1zeXNmcy5vCiBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLKQkmIzQzOz0gYmxrLWNyeXB0by1mYWxsYmFjay5vCiBvYmotJChDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQpCSYjNDM7PSBob2xkZXIubwomIzQzO29iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYpCSYjNDM7PSBibGstaW9jb3N0LWJwZi5vCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmMKaW5kZXggMmI1YzI5NDM0ZTQyNi4uODcyODcxMDQ1MzUxYyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwpAQCAtMzIsNiAmIzQzOzMyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wYXJ0X3N0YXQuaCZndDsKICNpbmNsdWRlICYjMzQ7YmxrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtibGstY2dyb3VwLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ibGstaW9jb3N0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2Jsay1pb3ByaW8uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Jsay10aHJvdHRsZS5oJiMzNDsKIApAQCAtMTM0MSw2ICYjNDM7MTM0Miw3IEBAIHZvaWQgYmxrY2dfdW5waW5fb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpibGtjZ19jc3MpCiAgKi8KIHN0YXRpYyB2b2lkIGJsa2NnX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiB7CiYjNDM7CWlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShjc3NfdG9fYmxrY2coY3NzKSk7CiAJLyogdGhpcyBwcmV2ZW50cyBhbnlvbmUgZnJvbSBhdHRhY2hpbmcgb3IgbWlncmF0aW5nIHRvIHRoaXMgYmxrY2cgKi8KIAl3Yl9ibGtjZ19vZmZsaW5lKGNzcyk7CiAKQEAgLTE0NDUsNiAmIzQzOzE0NDcsNyBAQCBibGtjZ19jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAKIHN0YXRpYyBpbnQgYmxrY2dfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogewomIzQzOwlpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShjc3NfdG9fYmxrY2coY3NzKSk7CiAJc3RydWN0IGJsa2NnICpwYXJlbnQgPSBibGtjZ19wYXJlbnQoY3NzX3RvX2Jsa2NnKGNzcykpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgYi9ibG9jay9ibGstaW9jb3N0LWJwZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlYzZkZjI3OTU5OTAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstaW9jb3N0LWJwZi5jCkBAIC0wLDAgJiM0MzsxLDI1MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBibGstaW9jb3N0OiBCUEYgc3RydWN0X29wcyBwbHVtYmluZyBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzLgomIzQzOyAqCiYjNDM7ICogUmVnaXN0ZXJzIHRoZSAmIzM0O2lvY29zdF9tb2RlbF9vcHMmIzM0OyBzdHJ1Y3Rfb3BzIHR5cGUgYW5kIG1haW50YWlucyB0aGUKJiM0MzsgKiBuYW1lIHJlZ2lzdHJ5IG9mIHJlZ2lzdGVyZWQgbW9kZWxzLiAgQSByZWdpc3RlcmVkIG1vZGVsIGlzIGJvdW5kIHRvCiYjNDM7ICogYSBkZXZpY2UgdGhyb3VnaCBpby5jb3N0Lm1vZGVsOyBzZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmguCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGZfdmVyaWZpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnRmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Jsay1pb2Nvc3QuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKGlvY29zdF9icGZfcmVnX2xvY2spOwomIzQzO3N0YXRpYyBMSVNUX0hFQUQoaW9jb3N0X2JwZl9tb2RlbHMpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHJlZ2lzdHJ5IGhvbGRzIGEgYnBmX3N0cnVjdF9vcHNfZ2V0KCkgcmVmZXJlbmNlIG9idGFpbmVkIGluIC5yZWc7CiYjNDM7ICogLnVucmVnIGRyb3BzIGl0LCBzbyB0aGUga2RhdGEgb2YgYW4gdW5yZWdpc3RlcmVkIG1vZGVsIHN0YXlzIGFsaXZlCiYjNDM7ICogd2hpbGUgYW55IGRldmljZSBpcyBzdGlsbCBib3VuZCB0byBpdC4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKJiM0MzsJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wczsKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogTG9vayB1cCBhIHJlZ2lzdGVyZWQgbW9kZWwgYnkgbmFtZSBhbmQgYWNxdWlyZSBhIHJlZmVyZW5jZSBvbiBpdC4KJiM0MzsgKiBUaGUgcmVnaXN0cnkgbG9jayBpcyBoZWxkIGFjcm9zcyBsb29rdXAgYW5kIGJwZl9zdHJ1Y3Rfb3BzX2dldCgpIHNvCiYjNDM7ICogdGhlIG1vZGVsIGNhbm5vdCBiZSB1bnJlZ2lzdGVyZWQgaW4gYmV0d2Vlbi4KJiM0MzsgKi8KJiM0MztpbnQgaW9jb3N0X2JwZl9tb2RlbF9nZXQoY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKipvcHNwKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07CiYjNDM7CWludCByZXQgPSAtRU5PRU5UOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aW9jb3N0X2JwZl9yZWdfbG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJmFtcDtpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkgewomIzQzOwkJaWYgKCFzdHJjbXAobS0mZ3Q7b3BzLSZndDtuYW1lLCBuYW1lKSkgewomIzQzOwkJCWlmIChicGZfc3RydWN0X29wc19nZXQobS0mZ3Q7b3BzKSkgewomIzQzOwkJCQkqb3BzcCA9IG0tJmd0O29wczsKJiM0MzsJCQkJcmV0ID0gMDsKJiM0MzsJCQl9CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7aW9jb3N0X2JwZl9yZWdfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcykKJiM0Mzt7CiYjNDM7CWJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKgomIzQzO2lvY29zdF9icGZfbW9kZWxfbG9va3VwKGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmYW1wO2lvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7CiYjNDM7CQlpZiAobS0mZ3Q7b3BzID09IG9wcykKJiM0MzsJCQlyZXR1cm4gbTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZhbXA7aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHsKJiM0MzsJCWlmIChtLSZndDtvcHMtJmd0O2Jsa2NnX29ubGluZSkKJiM0MzsJCQltLSZndDtvcHMtJmd0O2Jsa2NnX29ubGluZShibGtjZyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtpb2Nvc3RfYnBmX3JlZ19sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmYW1wO2lvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7CiYjNDM7CQlpZiAobS0mZ3Q7b3BzLSZndDtibGtjZ19vZmZsaW5lKQomIzQzOwkJCW0tJmd0O29wcy0mZ3Q7YmxrY2dfb2ZmbGluZShibGtjZyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfaW9jb3N0X21vZGVsX2luaXQoc3RydWN0IGJ0ZiAqYnRmKQomIzQzO3sKJiM0MzsJczMyIHR5cGVfaWQ7CiYjNDM7CiYjNDM7CXR5cGVfaWQgPSBidGZfZmluZF9ieV9uYW1lX2tpbmQoYnRmLCAmIzM0O2lvY29zdF9tb2RlbF9vcHMmIzM0OywgQlRGX0tJTkRfU1RSVUNUKTsKJiM0MzsJaWYgKHR5cGVfaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwKJiM0MzsJCQkJICAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgYnBmX2luc25fYWNjZXNzX2F1eCAqaW5mbykKJiM0Mzt7CiYjNDM7CXJldHVybiBicGZfdHJhY2luZ19idGZfY3R4X2FjY2VzcyhvZmYsIHNpemUsIHR5cGUsIHByb2csIGluZm8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICoKJiM0MzticGZfaW9jb3N0X2dldF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwKJiM0MzsJCQkgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoZnVuY19pZCkgewomIzQzOyNpZmRlZiBDT05GSUdfQ0dST1VQUwomIzQzOwljYXNlIEJQRl9GVU5DX2NncnBfc3RvcmFnZV9nZXQ6CiYjNDM7CQlyZXR1cm4gJmFtcDticGZfY2dycF9zdG9yYWdlX2dldF9wcm90bzsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBicGZfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7ewomIzQzOwkvKiBjYWxjX2Nvc3QoKSBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQgKi8KJiM0MzsJaWYgKHByb2ctJmd0O3NsZWVwYWJsZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfaW9jb3N0X2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLAomIzQzOwkJCQkgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTsKJiM0MzsJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKnVvcHMgPSB1ZGF0YTsKJiM0MzsJdTMyIG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODsKJiM0MzsKJiM0MzsJc3dpdGNoIChtb2ZmKSB7CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlvY29zdF9tb2RlbF9vcHMsIG5hbWUpOgomIzQzOwkJaWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLSZndDtuYW1lLCB1b3BzLSZndDtuYW1lLAomIzQzOwkJCQkgICAgIHNpemVvZihvcHMtJmd0O25hbWUpKSAmbHQ7PSAwKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF92YWxpZGF0ZSh2b2lkICprZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9wcy0mZ3Q7Y2FsY19jb3N0ID8gMCA6IC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2lvY29zdF9yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTsKJiM0MzsJc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIWJwZl9zdHJ1Y3Rfb3BzX2dldChvcHMpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CW0gPSBremFsbG9jKHNpemVvZigqbSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIW0pIHsKJiM0MzsJCWJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwl7CiYjNDM7CQlzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqb3RoZXI7CiYjNDM7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG90aGVyLCAmYW1wO2lvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAob3RoZXItJmd0O29wcy0mZ3Q7bmFtZSwgb3BzLSZndDtuYW1lKSkgewomIzQzOwkJCQlyZXQgPSAtRUVYSVNUOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCW0tJmd0O29wcyA9IG9wczsKJiM0MzsJCWxpc3RfYWRkKCZhbXA7bS0mZ3Q7bGlzdCwgJmFtcDtpb2Nvc3RfYnBmX21vZGVscyk7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7aW9jb3N0X2JwZl9yZWdfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpOwomIzQzOwkJa2ZyZWUobSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnBmX2lvY29zdF91bnJlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhOwomIzQzOwlzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzOwltID0gaW9jb3N0X2JwZl9tb2RlbF9sb29rdXAob3BzKTsKJiM0MzsJaWYgKG0pIHsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7bS0mZ3Q7bGlzdCk7CiYjNDM7CQlicGZfc3RydWN0X29wc19wdXQob3BzKTsKJiM0MzsJCWtmcmVlKG0pOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2lvY29zdF9icGZfcmVnX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2lvY29zdF92ZXJpZmllcl9vcHMgPSB7CiYjNDM7CS5nZXRfZnVuY19wcm90byA9IGJwZl9pb2Nvc3RfZ2V0X2Z1bmNfcHJvdG8sCiYjNDM7CS5pc192YWxpZF9hY2Nlc3MgPSBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcywKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1NjQgYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1Yih1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLAomIzQzOwkJCQkgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgX19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMgPSB7CiYjNDM7CS5jYWxjX2Nvc3QgPSBicGZfaW9jb3N0X2NhbGNfY29zdF9zdHViLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfaW9jb3N0X21vZGVsX29wcyA9IHsKJiM0MzsJLnZlcmlmaWVyX29wcyA9ICZhbXA7YnBmX2lvY29zdF92ZXJpZmllcl9vcHMsCiYjNDM7CS5pbml0ID0gYnBmX2lvY29zdF9tb2RlbF9pbml0LAomIzQzOwkuY2hlY2tfbWVtYmVyID0gYnBmX2lvY29zdF9jaGVja19tZW1iZXIsCiYjNDM7CS5pbml0X21lbWJlciA9IGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXIsCiYjNDM7CS52YWxpZGF0ZSA9IGJwZl9pb2Nvc3RfdmFsaWRhdGUsCiYjNDM7CS5yZWcgPSBicGZfaW9jb3N0X3JlZywKJiM0MzsJLnVucmVnID0gYnBmX2lvY29zdF91bnJlZywKJiM0MzsJLm5hbWUgPSAmIzM0O2lvY29zdF9tb2RlbF9vcHMmIzM0OywKJiM0MzsJLmNmaV9zdHVicyA9ICZhbXA7X19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMsCiYjNDM7CS5vd25lciA9IFRISVNfTU9EVUxFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgYnBmX2lvY29zdF9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVnaXN0ZXJfYnBmX3N0cnVjdF9vcHMoJmFtcDticGZfaW9jb3N0X21vZGVsX29wcywgaW9jb3N0X21vZGVsX29wcyk7CiYjNDM7fQomIzQzO2xhdGVfaW5pdGNhbGwoYnBmX2lvY29zdF9pbml0KTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QuYyBiL2Jsb2NrL2Jsay1pb2Nvc3QuYwppbmRleCAyNzQ1YmZmY2Q1ZWVmLi5iY2NkYmQyNDk2ZDgzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstaW9jb3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWlvY29zdC5jCkBAIC0xNzcsNiAmIzQzOzE3Nyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYXJzZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrLWlvY29zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9sb2NhbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9sb2NhbDY0LmgmZ3Q7CkBAIC00NDUsNiAmIzQzOzQ0NiwxMSBAQCBzdHJ1Y3QgaW9jIHsKIAlpbnQJCQkJYXV0b3BfaWR4OwogCWJvb2wJCQkJdXNlcl9xb3NfcGFyYW1zOjE7CiAJYm9vbAkJCQl1c2VyX2Nvc3RfbW9kZWw6MTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwkvKiBib3VuZCBCUEYgY29zdCBtb2RlbCwgTlVMTCA9IGJ1aWx0aW4gbGluZWFyIG1vZGVsICovCiYjNDM7CWNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzCV9fcmN1ICptb2RlbDsKJiM0MzsjZW5kaWYKIH07CiAKIHN0cnVjdCBpb2NnX3BjcHVfc3RhdCB7CkBAIC0yMjM4LDYgJiM0MzsyMjQ0LDcgQEAgc3RhdGljIHZvaWQgaW9jX3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKIAlzdHJ1Y3QgaW9jX25vdyBub3c7CiAJTElTVF9IRUFEKHN1cnBsdXNlcyk7CiAJaW50IG5yX2RlYnRvcnMsIG5yX3Nob3J0YWdlcyA9IDAsIG5yX2xhZ2dpbmcgPSAwOwomIzQzOwlpbnQgbnJfYWN0aXZlID0gMDsKIAl1NjQgdXNhZ2VfdXNfc3VtID0gMDsKIAl1MzIgcHBtX3J0aHI7CiAJdTMyIHBwbV93dGhyOwpAQCAtMjI3NCw2ICYjNDM7MjI4MSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiAJCXU2NCB2ZG9uZSwgdnRpbWUsIHVzYWdlX3VzOwogCQl1MzIgaHdfYWN0aXZlLCBod19pbnVzZTsKIAomIzQzOwkJbnJfYWN0aXZlJiM0MzsmIzQzOzsKJiM0MzsKIAkJLyoKIAkJICogQ29sbGVjdCB1bnVzZWQgYW5kIHdpbmQgdnRpbWUgY2xvc2VyIHRvIHZub3cgdG8gcHJldmVudAogCQkgKiBpb2NncyBmcm9tIGFjY3VtdWxhdGluZyBhIGxhcmdlIGFtb3VudCBvZiBidWRnZXQuCkBAIC0yNDYwLDYgJiM0MzsyNDY5LDggQEAgc3RhdGljIHZvaWQgaW9jX3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKIAkJaW9jX3JlZnJlc2hfdnJhdGUoaW9jLCAmYW1wO25vdyk7CiAJfQogCiYjNDM7CXRyYWNlX2lvY29zdF9pb2NfdGljayhpb2MsIG5yX2FjdGl2ZSwgdXNhZ2VfdXNfc3VtKTsKJiM0MzsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwogfQogCkBAIC0yNTcxLDEwICYjNDM7MjU4MiwyOCBAQCBzdGF0aWMgdm9pZCBjYWxjX3Z0aW1lX2Nvc3RfYnVpbHRpbihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb2NfZ3EgKmlvY2csCiAKIHN0YXRpYyB1NjQgY2FsY192dGltZV9jb3N0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZywgYm9vbCBpc19tZXJnZSkKIHsKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwljb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7CiAJdTY0IGNvc3Q7CiAKLQljYWxjX3Z0aW1lX2Nvc3RfYnVpbHRpbihiaW8sIGlvY2csIGlzX21lcmdlLCAmYW1wO2Nvc3QpOwotCXJldHVybiBjb3N0OwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW1vZGVsID0gcmN1X2RlcmVmZXJlbmNlKGlvY2ctJmd0O2lvYy0mZ3Q7bW9kZWwpOwomIzQzOwlpZiAobW9kZWwpIHsKJiM0MzsJCWNvc3QgPSBtb2RlbC0mZ3Q7Y2FsY19jb3N0KGJpby0mZ3Q7Ymlfb3BmLCBiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSwKJiM0MzsJCQkJCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IsCiYjNDM7CQkJCQlpb2NnX3RvX2Jsa2coaW9jZyktJmd0O2Jsa2NnLAomIzQzOwkJCQkJaXNfbWVyZ2UgPyBJT0NPU1RfQ09TVF9GX01FUkdFIDogMCk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiBtaW4oY29zdCwgVlRJTUVfUEVSX1NFQyk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7I2VuZGlmCiYjNDM7CXsKJiM0MzsJCXU2NCBjb3N0OwomIzQzOwomIzQzOwkJY2FsY192dGltZV9jb3N0X2J1aWx0aW4oYmlvLCBpb2NnLCBpc19tZXJnZSwgJmFtcDtjb3N0KTsKJiM0MzsJCXJldHVybiBjb3N0OwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIGNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW9jICppb2MsCkBAIC0yNTk2LDEwICYjNDM7MjYyNSwyOCBAQCBzdGF0aWMgdm9pZCBjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvYyAqaW9jLAogCiBzdGF0aWMgdTY0IGNhbGNfc2l6ZV92dGltZV9jb3N0KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvYyAqaW9jKQogewotCXU2NCBjb3N0OwomIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGCiYjNDM7CWNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICptb2RlbDsKIAotCWNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4ocnEsIGlvYywgJmFtcDtjb3N0KTsKLQlyZXR1cm4gY29zdDsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltb2RlbCA9IHJjdV9kZXJlZmVyZW5jZShpb2MtJmd0O21vZGVsKTsKJiM0MzsJaWYgKG1vZGVsICZhbXA7JmFtcDsgcnEtJmd0O2JpbyAmYW1wOyZhbXA7IHJxLSZndDtiaW8tJmd0O2JpX2Jsa2cpIHsKJiM0MzsJCXU2NCBjb3N0OwomIzQzOwomIzQzOwkJY29zdCA9IG1vZGVsLSZndDtjYWxjX2Nvc3QocnEtJmd0O2NtZF9mbGFncywgYmxrX3JxX2J5dGVzKHJxKSwKJiM0MzsJCQkJCWJsa19ycV9wb3MocnEpLAomIzQzOwkJCQkJcnEtJmd0O2Jpby0mZ3Q7YmlfYmxrZy0mZ3Q7YmxrY2csIDApOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOyNlbmRpZgomIzQzOwl7CiYjNDM7CQl1NjQgY29zdDsKJiM0MzsKJiM0MzsJCWNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4ocnEsIGlvYywgJmFtcDtjb3N0KTsKJiM0MzsJCXJldHVybiBjb3N0OwomIzQzOwl9CiB9CiAKIGVudW0gb3Zlcl9idWRnZXRfYWN0aW9uIHsKQEAgLTI5MDAsNiAmIzQzOzI5NDcsMTkgQEAgc3RhdGljIHZvaWQgaW9jX3Jxb3NfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKQogCiAJdGltZXJfc2h1dGRvd25fc3luYygmYW1wO2lvYy0mZ3Q7dGltZXIpOwogCWZyZWVfcGVyY3B1KGlvYy0mZ3Q7cGNwdV9zdGF0KTsKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwl7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7CiYjNDM7CiYjNDM7CQlzcGluX2xvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKJiM0MzsJCW1vZGVsID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtJmd0O21vZGVsLAomIzQzOwkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7aW9jLSZndDtsb2NrKSk7CiYjNDM7CQlyY3VfYXNzaWduX3BvaW50ZXIoaW9jLSZndDttb2RlbCwgTlVMTCk7CiYjNDM7CQlzcGluX3VubG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwomIzQzOwkJaWYgKG1vZGVsKQomIzQzOwkJCWlvY29zdF9icGZfbW9kZWxfcHV0KG1vZGVsKTsKJiM0MzsJfQomIzQzOyNlbmRpZgogCWtmcmVlKGlvYyk7CiB9CiAKQEAgLTM0MzgsMTIgJiM0MzszNDk4LDMwIEBAIHN0YXRpYyB1NjQgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsKHN0cnVjdCBzZXFfZmlsZSAqc2YsCiAJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycSgmYW1wO2lvYy0mZ3Q7bG9jayk7CiYjNDM7I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYKJiM0MzsJewomIzQzOwkJY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsID0KJiM0MzsJCQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlvYy0mZ3Q7bW9kZWwsCiYjNDM7CQkJCQlsb2NrZGVwX2lzX2hlbGQoJmFtcDtpb2MtJmd0O2xvY2spKTsKJiM0MzsKJiM0MzsJCXNlcV9wcmludGYoc2YsICYjMzQ7JXMgY3RybD0lcyBtb2RlbD0lcyAmIzM0OwomIzQzOwkJCSAgICYjMzQ7cmJwcz0lbGx1IHJzZXFpb3BzPSVsbHUgcnJhbmRpb3BzPSVsbHUgJiMzNDsKJiM0MzsJCQkgICAmIzM0O3dicHM9JWxsdSB3c2VxaW9wcz0lbGx1IHdyYW5kaW9wcz0lbGx1XG4mIzM0OywKJiM0MzsJCQkgICBkbmFtZSwgbW9kZWwgPyAmIzM0O2JwZiYjMzQ7IDoKJiM0MzsJCQkJICAgaW9jLSZndDt1c2VyX2Nvc3RfbW9kZWwgPyAmIzM0O3VzZXImIzM0OyA6ICYjMzQ7YXV0byYjMzQ7LAomIzQzOwkJCSAgIG1vZGVsID8gbW9kZWwtJmd0O25hbWUgOiAmIzM0O2xpbmVhciYjMzQ7LAomIzQzOwkJCSAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSwKJiM0MzsJCQkgICB1W0lfTENPRUZfUlJBTkRJT1BTXSwgdVtJX0xDT0VGX1dCUFNdLAomIzQzOwkJCSAgIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTsKJiM0MzsJfQomIzQzOyNlbHNlCiAJc2VxX3ByaW50ZihzZiwgJiMzNDslcyBjdHJsPSVzIG1vZGVsPWxpbmVhciAmIzM0OwogCQkgICAmIzM0O3JicHM9JWxsdSByc2VxaW9wcz0lbGx1IHJyYW5kaW9wcz0lbGx1ICYjMzQ7CiAJCSAgICYjMzQ7d2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcbiYjMzQ7LAogCQkgICBkbmFtZSwgaW9jLSZndDt1c2VyX2Nvc3RfbW9kZWwgPyAmIzM0O3VzZXImIzM0OyA6ICYjMzQ7YXV0byYjMzQ7LAogCQkgICB1W0lfTENPRUZfUkJQU10sIHVbSV9MQ09FRl9SU0VRSU9QU10sIHVbSV9MQ09FRl9SUkFORElPUFNdLAogCQkgICB1W0lfTENPRUZfV0JQU10sIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTsKJiM0MzsjZW5kaWYKIAlzcGluX3VubG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwogCXJldHVybiAwOwogfQpAQCAtMzQ1Nyw2ICYjNDM7MzUzNSwzNyBAQCBzdGF0aWMgaW50IGlvY19jb3N0X21vZGVsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogQmluZCBAbmFtZSAoZW1wdHkgPSBidWlsdGluIGxpbmVhciBtb2RlbCkgYXMgdGhlIGFjdGl2ZSBjb3N0IG1vZGVsIG9mCiYjNDM7ICogQGlvYy4gIFRoZSByZWdpc3RyeSBsb29rdXAgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGhhcHBlbiBvdXRzaWRlCiYjNDM7ICogaW9jLSZndDtsb2NrOyB0aGUgcG9pbnRlciBzd2FwIGhhcHBlbnMgdW5kZXIgaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBpb2NfYnBmX21vZGVsX2JpbmQoc3RydWN0IGlvYyAqaW9jLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRgomIzQzOwljb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbmV3ID0gTlVMTCwgKm9sZDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKG5hbWVbMF0pIHsKJiM0MzsJCXJldCA9IGlvY29zdF9icGZfbW9kZWxfZ2V0KG5hbWUsICZhbXA7bmV3KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7aW9jLSZndDtsb2NrKTsKJiM0MzsJb2xkID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtJmd0O21vZGVsLAomIzQzOwkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7aW9jLSZndDtsb2NrKSk7CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihpb2MtJmd0O21vZGVsLCBuZXcpOwomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAob2xkKQomIzQzOwkJaW9jb3N0X2JwZl9tb2RlbF9wdXQob2xkKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7I2Vsc2UKJiM0MzsJcmV0dXJuIG5hbWVbMF0gPyAtRU5PRU5UIDogMDsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBjb3N0X2N0cmxfdG9rZW5zID0gewogCXsgQ09TVF9DVFJMLAkJJiMzNDtjdHJsPSVzJiMzNDsJfSwKIAl7IENPU1RfTU9ERUwsCQkmIzM0O21vZGVsPSVzJiMzNDsJfSwKQEAgLTM0ODIsNiAmIzQzOzM1OTEsNyBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LAogCXN0cnVjdCBpb2MgKmlvYzsKIAl1NjQgdVtOUl9JX0xDT0VGU107CiAJYm9vbCB1c2VyOwomIzQzOwljaGFyIGJwZl9tb2RlbFtJT0NPU1RfTU9ERUxfTkFNRV9MRU5dOwogCWNoYXIgKmJvZHksICpwOwogCWludCByZXQ7CiAKQEAgLTM1MTIsNiAmIzQzOzM2MjIsNyBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LAogCXNwaW5fbG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwogCW1lbWNweSh1LCBpb2MtJmd0O3BhcmFtcy5pX2xjb2Vmcywgc2l6ZW9mKHUpKTsKIAl1c2VyID0gaW9jLSZndDt1c2VyX2Nvc3RfbW9kZWw7CiYjNDM7CWJwZl9tb2RlbFswXSA9ICYjMzk7XDAmIzM5OzsKIAogCXJldCA9IC1FSU5WQUw7CiAKQEAgLTM1MzMsMTEgJiM0MzszNjQ0LDE2IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsCiAJCQkJdXNlciA9IHRydWU7CiAJCQllbHNlCiAJCQkJZ290byB1bmxvY2s7CiYjNDM7CQkJYnBmX21vZGVsWzBdID0gJiMzOTtcMCYjMzk7OwogCQkJY29udGludWU7CiAJCWNhc2UgQ09TVF9NT0RFTDoKIAkJCW1hdGNoX3N0cmxjcHkoYnVmLCAmYW1wO2FyZ3NbMF0sIHNpemVvZihidWYpKTsKLQkJCWlmIChzdHJjbXAoYnVmLCAmIzM0O2xpbmVhciYjMzQ7KSkKLQkJCQlnb3RvIHVubG9jazsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWYsICYjMzQ7bGluZWFyJiMzNDspKSB7CiYjNDM7CQkJCS8qIGJhY2sgdG8gdGhlIGJ1aWx0aW4gbGluZWFyIG1vZGVsICovCiYjNDM7CQkJCWJwZl9tb2RlbFswXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQomIzQzOwkJCW1hdGNoX3N0cmxjcHkoYnBmX21vZGVsLCAmYW1wO2FyZ3NbMF0sIHNpemVvZihicGZfbW9kZWwpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTM1NjMsNiAmIzQzOzM2NzksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCwKIHVubG9jazoKIAlzcGluX3VubG9ja19pcnEoJmFtcDtpb2MtJmd0O2xvY2spOwogCiYjNDM7CS8qCiYjNDM7CSAqIEJpbmQgdGhlIEJQRiBtb2RlbCBvdXRzaWRlIGlvYy0mZ3Q7bG9jazogdGhlIHJlZ2lzdHJ5IGxvb2t1cAomIzQzOwkgKiB0YWtlcyB0aGUgcmVnaXN0cmF0aW9uIG11dGV4IGFuZCB0aGUgb2xkIG1vZGVsJiMzOTtzIHJlZmVyZW5jZQomIzQzOwkgKiBpcyBkcm9wcGVkIGFmdGVyIHRoZSBzd2FwLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXQgPSBpb2NfYnBmX21vZGVsX2JpbmQoaW9jLCBicGZfbW9kZWwpOwomIzQzOwogCWJsa19tcV91bnF1aWVzY2VfcXVldWUocSk7CiAJYmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmggYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zYTA4NTVlZmI2MTA3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmgKQEAgLTAsMCAmIzQzOzEsODIgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX0xJTlVYX0JMS19JT0NPU1RfSAomIzQzOyNkZWZpbmUgX0xJTlVYX0JMS19JT0NPU1RfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ibGtfdHlwZXMuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIElPQ09TVF9NT0RFTF9OQU1FX0xFTgkxNgomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGCiYjNDM7CiYjNDM7c3RydWN0IGJsa2NnOwomIzQzOwomIzQzOy8qCiYjNDM7ICogUGx1Z2dhYmxlIGNvc3QgbW9kZWwgaW50ZXJmYWNlIGZvciBibGstaW9jb3N0LgomIzQzOyAqCiYjNDM7ICogQSBCUEYgc3RydWN0X29wcyBpbXBsZW1lbnRhdGlvbiByZWdpc3RlcmVkIGFnYWluc3QgJiMzNDtpb2Nvc3RfbW9kZWxfb3BzJiMzNDsKJiM0MzsgKiBmdWxseSByZXBsYWNlcyB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgb24gdGhlIGRldmljZXMgaXQgaXMgYm91bmQgdG8KJiM0MzsgKiB0aHJvdWdoIGlvLmNvc3QubW9kZWwuICBUaGUgbW9kZWwgb3ducyBwcmljaW5nIGZvciBldmVyeSBJTyBvbiBhIGJvdW5kCiYjNDM7ICogZGV2aWNlOiBpdCBwcmljZXMgYWxsIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBmbHVzaGVzLCBhbmQgYm90aCB0aGUgYmlvCiYjNDM7ICogY2hhcmdpbmcgcGF0aCBhbmQgdGhlIHJlcXVlc3QtbGV2ZWwgc2l6aW5nIHBhdGggY29uc3VsdCBpdC4KJiM0MzsgKgomIzQzOyAqIGNhbGNfY29zdCgpIGlzIGNhbGxlZCBmcm9tIHRoZSBJTyBzdWJtaXNzaW9uIHBhdGggd2l0aCBSQ1UgcmVhZCBsb2NrCiYjNDM7ICogaGVsZCBhbmQgbXVzdCBub3Qgc2xlZXAuICBJdCByZXR1cm5zIHRoZSBjb3N0IG9mIHRoZSBJTyBpbiB2dGltZQomIzQzOyAqIHVuaXRzLCB3aGVyZSAxIHNlY29uZCBvZiBkZXZpY2UgdGltZSBlcXVhbHMgVlRJTUVfUEVSX1NFQyAoMl4zNywKJiM0MzsgKiBhdmFpbGFibGUgdG8gQlBGIHByb2dyYW1zIHRocm91Z2ggdm1saW51eC5oKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBpcwomIzQzOyAqIGNsYW1wZWQgdG8gMSBzZWNvbmQgb2YgZGV2aWNlIHRpbWUgcGVyIElPLgomIzQzOyAqCiYjNDM7ICogVGhlIG1vZGVsIGlzIHBhc3NlZCB0aGUgYmxrY2cgb2YgdGhlIGlzc3VpbmcgY2dyb3VwIHNvIGl0IGNhbiBrZWVwCiYjNDM7ICogcGVyLWNncm91cCBzdGF0ZS4gIGJsa2NnX29ubGluZSgpL2Jsa2NnX29mZmxpbmUoKSBhcmUgb3B0aW9uYWwKJiM0MzsgKiBjYWxsYmFja3MgbWlycm9yaW5nIHRoZSBibGtjZyBjc3MgbGlmZWN5Y2xlOiBzdGF0ZSBjcmVhdGVkIG9uIG9ubGluZQomIzQzOyAqIChvciBsYXppbHkgb24gZmlyc3QgdXNlKSBtdXN0IGJlIHJlbGVhc2VkIG9uIG9mZmxpbmUuCiYjNDM7ICoKJiM0MzsgKiBUaGUgcmVnaXN0cmF0aW9uIGFuZCBiaW5kaW5nIG1vZGVsIGZvbGxvd3MgdGhlIFRDUCBjb25nZXN0aW9uCiYjNDM7ICogY29udHJvbCBmcmFtZXdvcms6IHJlZ2lzdGVyaW5nIGEgc3RydWN0X29wcyBtYWtlcyB0aGUgbW9kZWwgYXZhaWxhYmxlCiYjNDM7ICogYnkgaXRzIG5hbWUsIHdoaWxlIGlvLmNvc3QubW9kZWwgYmluZHMgb25lIHJlZ2lzdGVyZWQgbW9kZWwgdG8gYQomIzQzOyAqIGRldmljZS4gIFVucmVnaXN0ZXJpbmcgcmVtb3ZlcyB0aGUgbmFtZSBmcm9tIHRoZSByZWdpc3RyeTsgZGV2aWNlcwomIzQzOyAqIGFscmVhZHkgYm91bmQga2VlcCB1c2luZyBpdCB1bnRpbCBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBidWlsdGluCiYjNDM7ICogbW9kZWwuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBJT0NPU1RfTU9ERUxfTkFNRV9MRU4JMTYKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGlvY29zdC1zcGVjaWZpYyBjYWxsIG1ldGFkYXRhIGZvciBjYWxjX2Nvc3QoKSYjMzk7cyBtb2RlbF9mbGFncwomIzQzOyAqIGFyZ3VtZW50OyBldmVyeXRoaW5nIGVsc2UsIGluY2x1ZGluZyBSRVFfUFJFRkxVU0gvUkVRX0ZVQSwgaXMKJiM0MzsgKiBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIG9wZiBhcmd1bWVudAomIzQzOyAqLwomIzQzOyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRQkoMVVMTCAmbHQ7Jmx0OyAwKQkvKiBjYWxsZWQgZnJvbSBtZXJnZSBwYXRoICovCiYjNDM7CiYjNDM7c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgewomIzQzOwl1NjQgKCpjYWxjX2Nvc3QpKHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHNlY3Rvcl90IHNlY3RvciwKJiM0MzsJCQkgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKTsKJiM0MzsJdm9pZCAoKmJsa2NnX29ubGluZSkoc3RydWN0IGJsa2NnICpibGtjZyk7CiYjNDM7CXZvaWQgKCpibGtjZ19vZmZsaW5lKShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTsKJiM0MzsKJiM0MzsJLyogbW9kZWwgbmFtZSwgdXNlZCB0byBzZWxlY3QgdGhlIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCAqLwomIzQzOwljaGFyIG5hbWVbMTZdOwomIzQzO307CiYjNDM7CiYjNDM7aW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJIGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcCk7CiYjNDM7dm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKTsKJiM0Mzt2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpOwomIzQzO3ZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpOwomIzQzOwomIzQzOyNlbHNlCS8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi8KJiM0MzsKJiM0MztzdHJ1Y3QgYmxrY2c7CiYjNDM7c3RydWN0IGlvY29zdF9tb2RlbF9vcHM7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgaW9jb3N0X2JwZl9tb2RlbF9nZXQoY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpIHsgfQomIzQzOwomIzQzOyNlbmRpZgkvKiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGICovCiYjNDM7I2VuZGlmCS8qIF9MSU5VWF9CTEtfSU9DT1NUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgKaW5kZXggZTc3MmIxYmM2MGQ2MC4uMmI5ZmYzNDhhNGY1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgKQEAgLTE3OCw2ICYjNDM7MTc4LDQ2IEBAIFRSQUNFX0VWRU5UKGlvY29zdF9pb2NfdnJhdGVfYWRqLAogCSkKICk7CiAKJiM0MzsvKgomIzQzOyAqIFBlcmlvZGljIHBlci1kZXZpY2Ugc3VtbWFyeSwgZW1pdHRlZCBvbmNlIHBlciBwZXJpb2QgZnJvbSB0aGUgdGFpbCBvZgomIzQzOyAqIGlvY190aW1lcl9mbigpLiAgVW5saWtlIHRoZSBzdGF0ZS1jaGFuZ2UgZXZlbnRzIGFib3ZlLCB0aGlzIGZpcmVzIGV2ZXJ5CiYjNDM7ICogcGVyaW9kIHRoZSBjb250cm9sbGVyIGlzIHJ1bm5pbmcsIGluY2x1ZGluZyBzdGVhZHkgc3RhdGVzLCBhbmQgY2FycmllcwomIzQzOyAqIHRoZSBvdmVyYWxsIGNvbnRyb2xsZXIgc3RhdGUgc28gYmFzaWMgbW9uaXRvcmluZyBkb2VzbiYjMzk7dCByZXF1aXJlIGRyZ24uCiYjNDM7ICovCiYjNDM7VFJBQ0VfRVZFTlQoaW9jb3N0X2lvY190aWNrLAomIzQzOwomIzQzOwlUUF9QUk9UTyhzdHJ1Y3QgaW9jICppb2MsIGludCBucl9hY3RpdmUsIHU2NCB1c2FnZV91c19zdW0pLAomIzQzOwomIzQzOwlUUF9BUkdTKGlvYywgbnJfYWN0aXZlLCB1c2FnZV91c19zdW0pLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5ICgKJiM0MzsJCV9fc3RyaW5nKGRldm5hbWUsIGlvY19uYW1lKGlvYykpCiYjNDM7CQlfX2ZpZWxkKHUzMiwgcGVyaW9kX3VzKQomIzQzOwkJX19maWVsZCh1NjQsIHZyYXRlKQomIzQzOwkJX19maWVsZChpbnQsIGJ1c3lfbGV2ZWwpCiYjNDM7CQlfX2ZpZWxkKGludCwgbnJfYWN0aXZlKQomIzQzOwkJX19maWVsZCh1MzIsIHVzYWdlX3BjdCkKJiM0MzsJCV9fZmllbGQoaW50LCBydW5uaW5nKQomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCV9fYXNzaWduX3N0cihkZXZuYW1lKTsKJiM0MzsJCV9fZW50cnktJmd0O3BlcmlvZF91cyA9IGlvYy0mZ3Q7cGVyaW9kX3VzOwomIzQzOwkJX19lbnRyeS0mZ3Q7dnJhdGUgPSBpb2MtJmd0O3Z0aW1lX2Jhc2VfcmF0ZTsKJiM0MzsJCV9fZW50cnktJmd0O2J1c3lfbGV2ZWwgPSBpb2MtJmd0O2J1c3lfbGV2ZWw7CiYjNDM7CQlfX2VudHJ5LSZndDtucl9hY3RpdmUgPSBucl9hY3RpdmU7CiYjNDM7CQlfX2VudHJ5LSZndDt1c2FnZV9wY3QgPSBpb2MtJmd0O3BlcmlvZF91cyA/CiYjNDM7CQkJZGl2X3U2NCh1c2FnZV91c19zdW0gKiAxMDAsIGlvYy0mZ3Q7cGVyaW9kX3VzKSA6IDA7CiYjNDM7CQlfX2VudHJ5LSZndDtydW5uaW5nID0gaW9jLSZndDtydW5uaW5nOwomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9wcmludGsoJiMzNDtbJXNdIHBlcmlvZD0ldXVzIHZyYXRlPSVsbHUgYnVzeT0lZCBhY3RpdmU9JWQgdXNhZ2U9JXUlJSBydW5uaW5nPSVkJiMzNDssCiYjNDM7CQlfX2dldF9zdHIoZGV2bmFtZSksIF9fZW50cnktJmd0O3BlcmlvZF91cywgX19lbnRyeS0mZ3Q7dnJhdGUsCiYjNDM7CQlfX2VudHJ5LSZndDtidXN5X2xldmVsLCBfX2VudHJ5LSZndDtucl9hY3RpdmUsIF9fZW50cnktJmd0O3VzYWdlX3BjdCwKJiM0MzsJCV9fZW50cnktJmd0O3J1bm5pbmcKJiM0MzsJKQomIzQzOyk7CiYjNDM7CiBUUkFDRV9FVkVOVChpb2Nvc3RfaW9jZ19mb3JnaXZlX2RlYnQsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgaW9jX2dxICppb2NnLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgaW9jX25vdyAqbm93LApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcKaW5kZXggMmY3OTY4OGRjZjdjZS4uNjdhNjMwY2I1NjE0OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnCkBAIC0xMzgsMyAmIzQzOzEzOCw1IEBAIENPTkZJR19TTUNfSFNfQ1RSTF9CUEY9eQogQ09ORklHX0RJQlM9eQogQ09ORklHX0RJQlNfTE89eQogQ09ORklHX1BNX1dBS0VMT0NLUz15CiYjNDM7Q09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXkKJiM0MztDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaW9jb3N0X21vZGVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZTkzNDRiMTNmYmE5OAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jCkBAIC0wLDAgJiM0MzsxLDE5MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtpb2Nvc3RfbW9kZWwuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2lvY29zdF9tcy5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogV3JpdGUgYSBsaW5lIHRvIGlvLmNvc3QubW9kZWwgd2l0aCB3cml0ZSgyKSBhbmQgcmV0dXJuIHRoZSBlcnJubyBvZgomIzQzOyAqIHRoZSBmYWlsZWQgd3JpdGUsIG9yIDAgb24gc3VjY2Vzcy4gIHN0ZGlvIGlzIG5vdCB1c2VkIGhlcmUgb24KJiM0MzsgKiBwdXJwb3NlOiB0aGUga2VybmVsJiMzOTtzIHJlamVjdGlvbiBoYXBwZW5zIGluIHRoZSB3cml0ZSgpIHN5c2NhbGwsCiYjNDM7ICogbm90IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIGNvcHksIGFuZCBldmVyeSB3cml0ZSwgaW5jbHVkaW5nCiYjNDM7ICogdGhlIGVycm9yIHBhdGhzIG9mIHRoZSBjYWxsZXJzIGJlbG93LCBpcyBjaGVja2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfY29zdF9tb2RlbChjb25zdCBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVyciA9IDA7CiYjNDM7CXNzaXplX3QgbjsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5tb2RlbCYjMzQ7LCBPX1dST05MWSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJybm87CiYjNDM7CW4gPSB3cml0ZShmZCwgYnVmLCBzdHJsZW4oYnVmKSk7CiYjNDM7CWlmIChuICZsdDsgMCkKJiM0MzsJCWVyciA9IGVycm5vOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVhZCBiYWNrIHRoZSBpby5jb3N0Lm1vZGVsIGxpbmUgb2YgZGV2IGFuZCBjb3B5IHRoZSBtb2RlbD0gdmFsdWUKJiM0MzsgKiBpbnRvIEBtb2RlbC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcmVhZGJhY2tfbW9kZWwoY29uc3QgY2hhciAqZGV2LCBjaGFyICptb2RlbCwgc2l6ZV90IG1vZGVsX3N6KQomIzQzO3sKJiM0MzsJY2hhciBsaW5lWzI1Nl0sIHdvcmRbMjU2XSwgKm0sICplbmQ7CiYjNDM7CUZJTEUgKmZwOwomIzQzOwlpbnQgZm91bmQgPSAwOwomIzQzOwomIzQzOwlmcCA9IGZvcGVuKCYjMzQ7L3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5tb2RlbCYjMzQ7LCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZnApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSkgewomIzQzOwkJaWYgKHNzY2FuZihsaW5lLCAmIzM0OyUyNTVzJiMzNDssIHdvcmQpID09IDEgJmFtcDsmYW1wOyAhc3RyY21wKHdvcmQsIGRldikpIHsKJiM0MzsJCQlmb3VuZCA9IDE7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJZmNsb3NlKGZwKTsKJiM0MzsJaWYgKCFmb3VuZCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJbSA9IHN0cnN0cihsaW5lLCAmIzM0O21vZGVsPSYjMzQ7KTsKJiM0MzsJaWYgKCFtKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwltICYjNDM7PSBzdHJsZW4oJiMzNDttb2RlbD0mIzM0Oyk7CiYjNDM7CWVuZCA9IG07CiYjNDM7CXdoaWxlICgqZW5kICZhbXA7JmFtcDsgIWlzc3BhY2UoKmVuZCkpCiYjNDM7CQllbmQmIzQzOyYjNDM7OwomIzQzOwlzbnByaW50Zihtb2RlbCwgbW9kZWxfc3osICYjMzQ7JS4qcyYjMzQ7LCAoaW50KShlbmQgLSBtKSwgbSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEJpbmQgdGhlIG5hbWVkIG1vZGVsIHRvIGEgZGV2aWNlIHdpdGggJiMzNDttb2RlbD0mbHQ7bmFtZSZndDsmIzM0OywgdmVyaWZ5IHRoZQomIzQzOyAqIHJlYWRiYWNrIGFuZCByZXN0b3JlIHRoZSBidWlsdGluIG1vZGVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBiaW5kX21vZGVsKGNvbnN0IGNoYXIgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzMwMF0sIGdvdFs2NF07CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7JXMgbW9kZWw9JXNcbiYjMzQ7LCBkZXYsIG5hbWUpOwomIzQzOwllcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCUNIRUNLKGZhbHNlLCAmIzM0O3dyaXRlX21vZGVsJiMzNDssICYjMzQ7d3JpdGUgbW9kZWw9JXM6ICVzXG4mIzM0OywgbmFtZSwKJiM0MzsJCSAgICAgIHN0cmVycm9yKGVycikpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CWVyciA9IHJlYWRiYWNrX21vZGVsKGRldiwgZ290LCBzaXplb2YoZ290KSk7CiYjNDM7CWlmIChlcnIgfHwgc3RyY21wKGdvdCwgbmFtZSkpIHsKJiM0MzsJCUNIRUNLKGZhbHNlLCAmIzM0O3JlYWRiYWNrX21vZGVsJiMzNDssICYjMzQ7Z290IG1vZGVsPSVzIHdhbnQgJXNcbiYjMzQ7LAomIzQzOwkJICAgICAgZXJyID8gJiMzNDsobm9uZSkmIzM0OyA6IGdvdCwgbmFtZSk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogcmVzdG9yZSB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWw7IHRoZSB3cml0ZSBpcyBjaGVja2VkIHRvbyAqLwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyVzIG1vZGVsPWxpbmVhclxuJiMzNDssIGRldik7CiYjNDM7CWVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJQ0hFQ0soZmFsc2UsICYjMzQ7cmVzdG9yZV9saW5lYXImIzM0OywgJiMzNDt3cml0ZSBtb2RlbD1saW5lYXI6ICVzXG4mIzM0OywKJiM0MzsJCSAgICAgIHN0cmVycm9yKGVycikpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBkZXYgYXJndW1lbnQgbXVzdCBiZSBwcmVzZW50IGluIGlvLmNvc3QucW9zIGFscmVhZHksIHdoaWNoCiYjNDM7ICogbWVhbnMgaW9jb3N0IGlzIGVuYWJsZWQgZm9yIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZGV2X2hhc19pb2Nvc3QoY29uc3QgY2hhciAqZGV2KQomIzQzO3sKJiM0MzsJY2hhciBsaW5lWzI1Nl0sIHdvcmRbMjU2XTsKJiM0MzsJRklMRSAqZnA7CiYjNDM7CWludCBmb3VuZCA9IDA7CiYjNDM7CiYjNDM7CWZwID0gZm9wZW4oJiMzNDsvc3lzL2ZzL2Nncm91cC9pby5jb3N0LnFvcyYjMzQ7LCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZnApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7CiYjNDM7CQlpZiAoc3NjYW5mKGxpbmUsICYjMzQ7JTI1NXMmIzM0Oywgd29yZCkgPT0gMSAmYW1wOyZhbXA7ICFzdHJjbXAod29yZCwgZGV2KSkgewomIzQzOwkJCWZvdW5kID0gMTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlmY2xvc2UoZnApOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQmluZCB0aGUgMnggZXhhbXBsZSBtb2RlbCBhbmQgdmVyaWZ5IHRoZSBpby5jb3N0Lm1vZGVsIHJlYWRiYWNrLgomIzQzOyAqIElPIGFjY291bnRpbmcgaXRzZWxmIGlzIG5vdCBjaGVja2VkIGhlcmU7IGl0IG5lZWRzIGEgZGV2aWNlIGRvaW5nCiYjNDM7ICogcmVhbCBJTyB1bmRlciBpb2Nvc3QgYW5kIGlzIGNvdmVyZWQgYnkgdGhlIGtlcm5lbC1zaWRlIHZhbGlkYXRpb24KJiM0MzsgKiBkZXNjcmliZWQgaW4gdGhlIGNvdmVyIGxldHRlci4KJiM0MzsgKgomIzQzOyAqIFJlcXVpcmVzIHJvb3QsIGNncm91cCB2MiBhbmQgYSBkZXZpY2Ugd2l0aCBpb2Nvc3Qgc3VwcG9ydC4gIFRoZQomIzQzOyAqIGRldmljZSBtdXN0IGJlIGdpdmVuIGFzIG1ham9yOm1pbm9yIGluICRJT0NPU1RfVEVTVF9ERVYsIG90aGVyd2lzZQomIzQzOyAqIHRoZSB0ZXN0IGlzIHNraXBwZWQuCiYjNDM7ICovCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWwodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb2Nvc3RfbW9kZWwgKnNrZWw7CiYjNDM7CWNoYXIgYnVmWzMwMF0sICpkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWRldiA9IGdldGVudigmIzM0O0lPQ09TVF9URVNUX0RFViYjMzQ7KTsKJiM0MzsJaWYgKCFkZXYgfHwgZ2V0ZXVpZCgpICE9IDApIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksICYjMzQ7aW9jb3N0X21vdW50ZWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIG5lZ2F0aXZlOiBiaW5kaW5nIGFuIHVua25vd24gbW9kZWwgbmFtZSBtdXN0IGJlIHJlamVjdGVkLAomIzQzOwkgKiBzbyBhIHR5cG8gY2Fubm90IHNpbGVudGx5IGRpc2FibGUgY29zdCBtb2RlbCB1cGRhdGVzCiYjNDM7CSAqLwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyVzIG1vZGVsPW5vX3N1Y2hfbW9kZWxcbiYjMzQ7LCBkZXYpOwomIzQzOwllcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7CiYjNDM7CUFTU0VSVF9FUShlcnIsIEVOT0VOVCwgJiMzNDt1bmtub3duX21vZGVsX3JlamVjdGVkJiMzNDspOwomIzQzOwomIzQzOwlza2VsID0gaW9jb3N0X21vZGVsX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBhdHRhY2hpbmcgdGhlIHN0cnVjdF9vcHMgcmVnaXN0ZXJzIHRoZSBtb2RlbCBieSBuYW1lICovCiYjNDM7CWVyciA9IGlvY29zdF9tb2RlbF9fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoQVNTRVJUX09LKGVyciwgJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQlBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsICYjMzQ7aW9jb3N0XzJ4JiMzNDspLCAmIzM0O2JpbmRfYW5kX3JlYWRiYWNrJiMzNDspOwomIzQzOwomIzQzOwlpb2Nvc3RfbW9kZWxfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2FtZSBjaGVjayBmb3IgdGhlIG11bHRpLXN0cmVhbSBleGFtcGxlIG1vZGVsLiAgT25seSBvbmUgbW9kZWwgY2FuCiYjNDM7ICogYmUgYm91bmQgdG8gYSBkZXZpY2UgYXQgYSB0aW1lOyBib3RoIHRlc3RzIGJpbmQgYW5kIHJlc3RvcmUsIHNvCiYjNDM7ICogdGhleSBhcmUgc2VyaWFsIGFuZCBpbmRlcGVuZGVudC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2lvY29zdF9tb2RlbF9zdHJlYW1zKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9jb3N0X21zICpza2VsOwomIzQzOwljaGFyICpkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWRldiA9IGdldGVudigmIzM0O0lPQ09TVF9URVNUX0RFViYjMzQ7KTsKJiM0MzsJaWYgKCFkZXYgfHwgZ2V0ZXVpZCgpICE9IDApIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksICYjMzQ7aW9jb3N0X21vdW50ZWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrZWwgPSBpb2Nvc3RfbXNfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVyciA9IGlvY29zdF9tc19fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoQVNTRVJUX09LKGVyciwgJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQlBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsICYjMzQ7aW9jb3N0X21zJiMzNDspLCAmIzM0O2JpbmRfYW5kX3JlYWRiYWNrJiMzNDspOwomIzQzOwomIzQzOwlpb2Nvc3RfbXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmY4YWQ0MTdiMzU4NDgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21vZGVsLmMKQEAgLTAsMCAmIzQzOzEsMTE2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIEV4YW1wbGUgaW9jb3N0IGNvc3QgbW9kZWw6IHRoZSBidWlsdGluIGxpbmVhciBIREQgZm9ybXVsYSB3aXRoIGFsbAomIzQzOyAqIGNvc3RzIGRvdWJsZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgY29uc3RhbnRzIG1pcnJvciB3aGF0IGNhbGNfbGNvZWZzKCkgZGVyaXZlcyBmcm9tIHRoZSBBVVRPUF9IREQKJiM0MzsgKiBkZWZhdWx0cyAocmJwcz0xNzQwMTkxNzYgcnNlcWlvcHM9NDE3MDggcnJhbmRpb3BzPTM3MCwgdy1zaWRlCiYjNDM7ICogYW5hbG9nKSBpbiB2dGltZSB1bml0cyB3aGVyZSAxcyA9PSAyXjM3LCBleHByZXNzZWQgd2l0aCB0aGUgc2FtZQomIzQzOyAqIHJvdW5kLXVwIGRpdmlzaW9ucyBzbyB0aGV5IGNhbm5vdCBkcmlmdCBmcm9tIHRoZSBrZXJuZWwuICBBIGRldmljZQomIzQzOyAqIGJvdW5kIHRvIHRoaXMgbW9kZWwgdGhyb3VnaCBpby5jb3N0Lm1vZGVsIGNoYXJnZXMgZXhhY3RseSB0d2ljZSB0aGUKJiM0MzsgKiBidWlsdGluIG1vZGVsIHVuZGVyIHRoZSBzYW1lIHdvcmtsb2FkLCB3aGljaCBtYWtlcyBpdCBhIGNvbnZlbmllbnQKJiM0MzsgKiB3YXkgdG8gdmVyaWZ5IHRoYXQgYWNjb3VudGluZyBnb2VzIHRocm91Z2ggdGhlIEJQRiBwYXRoLgomIzQzOyAqCiYjNDM7ICogVGhlIG1vZGVsIGltcGxlbWVudHMgdGhlIGZ1bGwgbGluZWFyIGZvcm11bGEgaXRzZWxmLCBpbmNsdWRpbmcKJiM0MzsgKiBmbHVzaGVzOiB0aGVyZSBpcyBubyBmYWxsYmFjayB0byB0aGUgYnVpbHRpbiBtb2RlbCwgYSBkYXRhbGVzcwomIzQzOyAqIFdSSVRFfFJFUV9QUkVGTFVTSCBpcyBwcmljZWQgYXMgYSBvbmUtcGFnZSB3cml0ZS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsKJiM0MzsvKiBWVElNRV9QRVJfU0VDIGNvbWVzIGZyb20gdm1saW51eC5oIChhIEJURiBlbnVtIGNvbnN0YW50KSAqLwomIzQzOyNkZWZpbmUgSU9DX1BBR0VfU0laRQkJNDA5NgomIzQzOyNkZWZpbmUgSU9DX1NFQ1RfVE9fUEFHRV9TSElGVAkzCS8qIDUxMkIgc2VjdG9ycyB0byA0a0IgcGFnZXMgKi8KJiM0MzsjZGVmaW5lIExDT0VGX1JBTkRJT19QQUdFUwk0MDk2CS8qIDE2TUIgc2VlayB0aHJlc2hvbGQgKi8KJiM0MzsjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0UJKDFVTEwgJmx0OyZsdDsgMCkJLyogbm90IGluIEJURjogYSBwbGFpbiBtYWNybyAqLwomIzQzOyNkZWZpbmUgSU9DT1NUX1JFUV9PUF9NQVNLCTB4ZmYJCS8qIFJFUV9PUF9NQVNLLCBub3QgaW4gQlRGICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBESVY2NF9VNjRfUk9VTkRfVVAgLyBESVZfUk9VTkRfVVBfVUxMIGVxdWl2YWxlbnRzLCBmb2xkZWQgYXQKJiM0MzsgKiBjb21waWxlIHRpbWUKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJVKHgsIHkpCQkoKHgpIC8gKHkpICYjNDM7ICgoKHgpICUgKHkpKSA/IDEgOiAwKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFJCUFMJMTc0MDE5MTc2VUxMCiYjNDM7I2RlZmluZSBSU0VRSU9QUwk0MTcwOFVMTAomIzQzOyNkZWZpbmUgUlJBTkRJT1BTCTM3MFVMTAomIzQzOyNkZWZpbmUgV0JQUwkxNzgwNzU4NjZVTEwKJiM0MzsjZGVmaW5lIFdTRVFJT1BTCTQyNzA1VUxMCiYjNDM7I2RlZmluZSBXUkFORElPUFMJMzc4VUxMCiYjNDM7CiYjNDM7I2RlZmluZSBSUEFHRQkoUlUoVlRJTUVfUEVSX1NFQywgUlUoUkJQUywgSU9DX1BBR0VfU0laRSkpKQomIzQzOyNkZWZpbmUgUlNFUUlPCShSVShWVElNRV9QRVJfU0VDLCBSU0VRSU9QUykgLSBSUEFHRSkKJiM0MzsjZGVmaW5lIFJSQU5ESU8JKFJVKFZUSU1FX1BFUl9TRUMsIFJSQU5ESU9QUykgLSBSUEFHRSkKJiM0MzsjZGVmaW5lIFdQQUdFCShSVShWVElNRV9QRVJfU0VDLCBSVShXQlBTLCBJT0NfUEFHRV9TSVpFKSkpCiYjNDM7I2RlZmluZSBXU0VRSU8JKFJVKFZUSU1FX1BFUl9TRUMsIFdTRVFJT1BTKSAtIFdQQUdFKQomIzQzOyNkZWZpbmUgV1JBTkRJTwkoUlUoVlRJTUVfUEVSX1NFQywgV1JBTkRJT1BTKSAtIFdQQUdFKQomIzQzOwomIzQzOy8qCiYjNDM7ICogcGVyLWNncm91cCBjdXJzb3Igc3RvcmFnZToga2V5ZWQgYnkgdGhlIGNncm91cCwgZnJlZWQgd2l0aCBpdCwgc28KJiM0MzsgKiB0aGUgbW9kZWwgbmV2ZXIgbGVha3Mgb3IgcmV1c2VzIHN0YWxlIHBlci1jZ3JvdXAgc3RhdGUKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0NHUlBfU1RPUkFHRSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3U2NCk7CiYjNDM7fSBjdXJzb3Jfc3RvcmUgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO3U2NCBCUEZfUFJPRyhpb2Nvc3RfMnhfY2FsY19jb3N0LCB1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLAomIzQzOwkgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncykKJiM0Mzt7CiYjNDM7CXU2NCBwYWdlcywgc2Vla19wYWdlcyA9IDAsIGJhc2UsIGNvZWZfcGFnZSwgcmFuZGlvLCBjb3N0OwomIzQzOwomIzQzOwlpZiAoKG9wZiAmYW1wOyBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7CiYjNDM7CQliYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTzsKJiM0MzsJfSBlbHNlIGlmICgob3BmICZhbXA7IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1dSSVRFKSB7CiYjNDM7CQliYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBhIGZ1bGx5IG93bmluZyBtb2RlbCBtdXN0IHByaWNlIGV2ZXJ5IG9wOyB1bmtub3duCiYjNDM7CQkgKiBvcHMgYXJlIHByaWNlZCBhcyBhIHNpbmdsZSBwYWdlIHdyaXRlCiYjNDM7CQkgKi8KJiM0MzsJCWJhc2UgPSAwOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBtaXJyb3IgdGhlIGJ1aWx0aW4gc2luZ2xlIHBlci1jZ3JvdXAgY3Vyc29yOiB0aGUgbW9kZWwga2VlcHMKJiM0MzsJICogaXRzIG93biBjdXJzb3Iga2V5ZWQgYnkgdGhlIGJsa2NnIGFyZ3VtZW50CiYjNDM7CSAqLwomIzQzOwl7CiYjNDM7CQlfX3U2NCAqY3Vyc29yLCBjdXI7CiYjNDM7CiYjNDM7CQljdXJzb3IgPSBicGZfY2dycF9zdG9yYWdlX2dldCgmYW1wO2N1cnNvcl9zdG9yZSwKJiM0MzsJCQkJCSAgICAgIGJsa2NnLSZndDtjc3MuY2dyb3VwLCBOVUxMLAomIzQzOwkJCQkJICAgICAgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTsKJiM0MzsJCWlmICghY3Vyc29yKQomIzQzOwkJCXJldHVybiAyICogKGJhc2UgJiM0MzsgUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKSAqIGNvZWZfcGFnZSk7CiYjNDM7CQljdXIgPSAqY3Vyc29yOwomIzQzOwkJc2Vla19wYWdlcyA9IHNlY3RvciAmZ3Q7IGN1ciA/IHNlY3RvciAtIGN1ciA6IGN1ciAtIHNlY3RvcjsKJiM0MzsJCXNlZWtfcGFnZXMgJmd0OyZndDs9IElPQ19TRUNUX1RPX1BBR0VfU0hJRlQ7CiYjNDM7CQlpZiAoc2Vla19wYWdlcyAmZ3Q7IExDT0VGX1JBTkRJT19QQUdFUykKJiM0MzsJCQliYXNlID0gcmFuZGlvOwomIzQzOwkJaWYgKCEobW9kZWxfZmxhZ3MgJmFtcDsgSU9DT1NUX0NPU1RfRl9NRVJHRSkpCiYjNDM7CQkJKmN1cnNvciA9IHNlY3RvciAmIzQzOyBSVShuYnl0ZXMsIDUxMik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGFnZXMgPSBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpOwomIzQzOwlpZiAoIXBhZ2VzKQomIzQzOwkJcGFnZXMgPSAxOwkvKiBkYXRhbGVzcyBmbHVzaDogb25lIHBhZ2UgKi8KJiM0MzsJaWYgKG1vZGVsX2ZsYWdzICZhbXA7IElPQ09TVF9DT1NUX0ZfTUVSR0UpCiYjNDM7CQliYXNlID0gMDsKJiM0MzsKJiM0MzsJY29zdCA9IDIgKiAoYmFzZSAmIzQzOyBwYWdlcyAqIGNvZWZfcGFnZSk7CiYjNDM7CXJldHVybiBjb3N0OwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDsuc3RydWN0X29wcyYjMzQ7KQomIzQzO3N0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzIGlvY29zdF8yeCA9IHsKJiM0MzsJLmNhbGNfY29zdCA9ICh2b2lkICopaW9jb3N0XzJ4X2NhbGNfY29zdCwKJiM0MzsJLm5hbWUgPSAmIzM0O2lvY29zdF8yeCYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2NjNTdjMDNkM2M4OAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pb2Nvc3RfbXMuYwpAQCAtMCwwICYjNDM7MSwxMzYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogRXhhbXBsZSBtdWx0aS1zdHJlYW0gc2VxdWVudGlhbGl0eSBkZXRlY3Rpb24gY29zdCBtb2RlbC4KJiM0MzsgKgomIzQzOyAqIFRoZSBidWlsdGluIG1vZGVsIGtlZXBzIGEgc2luZ2xlIGN1cnNvciBwZXIgY2dyb3VwLCBzbyB0d28KJiM0MzsgKiBpbnRlcmxlYXZlZCBzZXF1ZW50aWFsIHJlYWRlcnMgaW4gb25lIGNncm91cCBhcmUgYWxsIHByaWNlZCByYW5kb20KJiM0MzsgKiAobWVhc3VyZWQgODl4IG92ZXJjaGFyZ2UsIDEyLjl4IHRocm91Z2hwdXQgY29sbGFwc2UpLCB3aGlsZSByYW5kb20KJiM0MzsgKiBJTyBpbnNpZGUgYSBob3Qgd2luZG93IHNtYWxsZXIgdGhhbiB0aGUgMTZNQiBzZWVrIHRocmVzaG9sZCBpcwomIzQzOyAqIHByaWNlZCBzZXF1ZW50aWFsIChtZWFzdXJlZCAxMDd4IHVuZGVyY2hhcmdlKS4gIFRoaXMgbW9kZWwgcmVwbGFjZXMKJiM0MzsgKiB0aGUgc2luZ2xlIGN1cnNvciB3aXRoIGEgcGVyLWNncm91cCB0YWJsZSBvZiBzdHJlYW0gc2xvdHM6IGFuIElPIGlzCiYjNDM7ICogc2VxdWVudGlhbCBpZmYgaXRzIHNlY3RvciBtYXRjaGVzIHRoZSBleHBlY3RlZCBuZXh0IHNlY3RvciBvZiBhbnkKJiM0MzsgKiB0cmFja2VkIHN0cmVhbS4gIEludGVybGVhdmVkIHN0cmVhbXMga2VlcCB0aGVpciBvd24gc2xvdHMsIGFuZAomIzQzOyAqIHdpbmRvd2VkIHJhbmRvbSBJTyByYXJlbHkgbWF0Y2hlcyBhIG1vdmluZyBleHBlY3RhdGlvbi4KJiM0MzsgKgomIzQzOyAqIFN0cmVhbSBzdGF0ZSBsaXZlcyBpbiBhIENHUlBfU1RPUkFHRSBtYXAsIHNvIGl0IGlzIGNyZWF0ZWQgYW5kCiYjNDM7ICogZnJlZWQgd2l0aCB0aGUgY2dyb3VwLiAgVGhlIG1vZGVsIGltcGxlbWVudHMgdGhlIGZ1bGwgYnVpbHRpbgomIzQzOyAqIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nIGZsdXNoIHByaWNpbmcuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7LyogVlRJTUVfUEVSX1NFQyBjb21lcyBmcm9tIHZtbGludXguaCAoYSBCVEYgZW51bSBjb25zdGFudCkgKi8KJiM0MzsjZGVmaW5lIElPQ19QQUdFX1NJWkUJCTQwOTYKJiM0MzsjZGVmaW5lIElPQ19TRUNUX1RPX1BBR0VfU0hJRlQJMwkvKiA1MTJCIHNlY3RvcnMgdG8gNGtCIHBhZ2VzICovCiYjNDM7I2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVMJNDA5NgkvKiAxNk1CIHNlZWsgdGhyZXNob2xkICovCiYjNDM7I2RlZmluZSBJT0NPU1RfQ09TVF9GX01FUkdFCSgxVUxMICZsdDsmbHQ7IDApCS8qIG5vdCBpbiBCVEY6IGEgcGxhaW4gbWFjcm8gKi8KJiM0MzsjZGVmaW5lIElPQ09TVF9SRVFfT1BfTUFTSwkweGZmCQkvKiBSRVFfT1BfTUFTSywgbm90IGluIEJURiAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogRElWNjRfVTY0X1JPVU5EX1VQIC8gRElWX1JPVU5EX1VQX1VMTCBlcXVpdmFsZW50cywgZm9sZGVkIGF0CiYjNDM7ICogY29tcGlsZSB0aW1lCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSVSh4LCB5KQkJKCh4KSAvICh5KSAmIzQzOyAoKCh4KSAlICh5KSkgPyAxIDogMCkpCiYjNDM7CiYjNDM7I2RlZmluZSBSQlBTCTE3NDAxOTE3NlVMTAomIzQzOyNkZWZpbmUgUlNFUUlPUFMJNDE3MDhVTEwKJiM0MzsjZGVmaW5lIFJSQU5ESU9QUwkzNzBVTEwKJiM0MzsjZGVmaW5lIFdCUFMJMTc4MDc1ODY2VUxMCiYjNDM7I2RlZmluZSBXU0VRSU9QUwk0MjcwNVVMTAomIzQzOyNkZWZpbmUgV1JBTkRJT1BTCTM3OFVMTAomIzQzOwomIzQzOyNkZWZpbmUgUlBBR0UJKFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSkKJiM0MzsjZGVmaW5lIFJTRVFJTwkoUlUoVlRJTUVfUEVSX1NFQywgUlNFUUlPUFMpIC0gUlBBR0UpCiYjNDM7I2RlZmluZSBSUkFORElPCShSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpCiYjNDM7I2RlZmluZSBXUEFHRQkoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKQomIzQzOyNkZWZpbmUgV1NFUUlPCShSVShWVElNRV9QRVJfU0VDLCBXU0VRSU9QUykgLSBXUEFHRSkKJiM0MzsjZGVmaW5lIFdSQU5ESU8JKFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSkKJiM0MzsKJiM0MzsjZGVmaW5lIE5TTE9UUwk0CiYjNDM7CiYjNDM7c3RydWN0IHN0cmVhbXMgewomIzQzOwlfX3U2NCBleHBlY3RlZFtOU0xPVFNdOwkvKiBuZXh0IGV4cGVjdGVkIHNlY3RvciwgcGVyIHN0cmVhbSAqLwomIzQzOwlfX3U2NCBzdGFtcFtOU0xPVFNdOwkvKiBMUlUgc3RhbXAsIDAgPSBlbXB0eSAqLwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBwZXItY2dyb3VwIHN0cmVhbSB0YWJsZToga2V5ZWQgYnkgdGhlIGNncm91cCwgZnJlZWQgd2l0aCBpdAomIzQzOyAqLwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQ0dSUF9TVE9SQUdFKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBzdHJlYW1zKTsKJiM0Mzt9IHN0cmVhbV90YWIgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO3U2NCBCUEZfUFJPRyhpb2Nvc3RfbXNfY2FsY19jb3N0LCB1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLAomIzQzOwkgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdHJlYW1zICpzOwomIzQzOwl1NjQgcGFnZXMsIGJhc2UsIGNvZWZfcGFnZSwgcmFuZGlvLCBhZHZhbmNlLCBub3c7CiYjNDM7CXUzMiBpLCB2aWN0aW0gPSAwLCBmb3VuZCA9IDB4RkZGRkZGRkY7CiYjNDM7CiYjNDM7CWlmICgob3BmICZhbXA7IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1JFQUQpIHsKJiM0MzsJCWJhc2UgPSBSU0VRSU87IGNvZWZfcGFnZSA9IFJQQUdFOyByYW5kaW8gPSBSUkFORElPOwomIzQzOwl9IGVsc2UgaWYgKChvcGYgJmFtcDsgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfV1JJVEUpIHsKJiM0MzsJCWJhc2UgPSBXU0VRSU87IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSBXUkFORElPOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyoKJiM0MzsJCSAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd24KJiM0MzsJCSAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGUKJiM0MzsJCSAqLwomIzQzOwkJYmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwOwomIzQzOwl9CiYjNDM7CWFkdmFuY2UgPSBSVShuYnl0ZXMsIDUxMik7CS8qIHNlY3RvcnMgKi8KJiM0MzsKJiM0MzsJcyA9IGJwZl9jZ3JwX3N0b3JhZ2VfZ2V0KCZhbXA7c3RyZWFtX3RhYiwgYmxrY2ctJmd0O2Nzcy5jZ3JvdXAsIE5VTEwsCiYjNDM7CQkJCSBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpOwomIzQzOwlpZiAoIXMpCiYjNDM7CQlyZXR1cm4gYmFzZSAmIzQzOyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlOwomIzQzOwomIzQzOwlub3cgPSBicGZfa3RpbWVfZ2V0X25zKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOU0xPVFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocy0mZ3Q7ZXhwZWN0ZWRbaV0gPT0gc2VjdG9yICZhbXA7JmFtcDsgcy0mZ3Q7c3RhbXBbaV0pIHsKJiM0MzsJCQlmb3VuZCA9IGk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGZvdW5kICE9IDB4RkZGRkZGRkYpIHsKJiM0MzsJCS8qIHNlcXVlbnRpYWw6IGtlZXAgdGhlIHNlcSBiYXNlIGZyb20gdGhlIG9wIGJyYW5jaCAqLwomIzQzOwkJcy0mZ3Q7ZXhwZWN0ZWRbZm91bmRdID0gc2VjdG9yICYjNDM7IGFkdmFuY2U7CiYjNDM7CQlzLSZndDtzdGFtcFtmb3VuZF0gPSBub3c7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQliYXNlID0gcmFuZGlvOwomIzQzOwkJZm9yIChpID0gMTsgaSAmbHQ7IE5TTE9UUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAocy0mZ3Q7c3RhbXBbaV0gJmx0OyBzLSZndDtzdGFtcFt2aWN0aW1dKQomIzQzOwkJCQl2aWN0aW0gPSBpOwomIzQzOwkJfQomIzQzOwkJcy0mZ3Q7ZXhwZWN0ZWRbdmljdGltXSA9IHNlY3RvciAmIzQzOyBhZHZhbmNlOwomIzQzOwkJcy0mZ3Q7c3RhbXBbdmljdGltXSA9IG5vdzsKJiM0MzsJfQomIzQzOwomIzQzOwlwYWdlcyA9IFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSk7CiYjNDM7CWlmICghcGFnZXMpCiYjNDM7CQlwYWdlcyA9IDE7CS8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqLwomIzQzOwlpZiAobW9kZWxfZmxhZ3MgJmFtcDsgSU9DT1NUX0NPU1RfRl9NRVJHRSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIG1lcmdlZCBiaW9zIHNraXAgdGhlIGJhc2UgY29zdCBidXQgc3RpbGwgYWR2YW5jZQomIzQzOwkJICogdGhlIHN0cmVhbSBwb3NpdGlvbiBhYm92ZSwgc28gYSBtZXJnZSBhdCB0aGUKJiM0MzsJCSAqIGV4cGVjdGVkIHNlY3RvciBkb2VzIG5vdCBtYWtlIHRoZSBmb2xsb3dpbmcgbmV3IElPCiYjNDM7CQkgKiBsb29rIHJhbmRvbQomIzQzOwkJICovCiYjNDM7CQliYXNlID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYmFzZSAmIzQzOyBwYWdlcyAqIGNvZWZfcGFnZTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7LnN0cnVjdF9vcHMmIzM0OykKJiM0MztzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfbXMgPSB7CiYjNDM7CS5jYWxjX2Nvc3QgPSAodm9pZCAqKWlvY29zdF9tc19jYWxjX2Nvc3QsCiYjNDM7CS5uYW1lID0gJiMzNDtpb2Nvc3RfbXMmIzM0OywKJiM0Mzt9OwomIzQzOwomIzQzO2NoYXIgTElDRU5TRVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2OTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb24gb2YgQmxvY2svSU8gQ29zdCBCUEYgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgKm9ubHkqIEtNU0FOIGNvdWxkIGNhdGNoLiBCYXNlZCBvbiB0aGUgZ3VpZGVsaW5lcywgaWYgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgY2F0Y2ggdGhlIGlzc3VlLCB3ZSBkb24mIzM5O3QgbmVlZCBLTVNBTi4gIEl0JiMzOTtzIGFsbCBhYm91dCBmaW5kaW5nIHRoYXQgKnNwZWNpZmljKiB1bmluaXRpYWxpemVkIG1lbW9yeSBzY2VuYXJpbyB0aGF0IEtNU0FOIGFsb25lIHdpbGwgZXhwb3NlLgoKRmlyc3QsIEkgc2VlIGRvY3VtZW50YXRpb24gdXBkYXRlcyAoZ29vZCBwcmFjdGljZSksIG5ldyBjb25maWcgb3B0aW9ucyBmb3IgQlBGLCBhbmQgc29tZSBjYWxscyByZWxhdGVkIHRvIGNncm91cCBvbmxpbmUvb2ZmbGluZSBldmVudHMuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBidXQgaXQmIzM5O3Mgbm90IHdoZXJlIEkgZXhwZWN0IHRoZSByZWFsIHJpc2sgdG8gYmUuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBCUEYtcmVsYXRlZCBjb2RlIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGRhdGEgb2Z0ZW4gYXJpc2UuCgpUaGUgYGJsay1pb2Nvc3QtYnBmLmNgIGZpbGUgaGFzIGZ1bmN0aW9ucyBmb3IgbW9kZWwgbWFuYWdlbWVudDogbG9va3VwcywgcmVnaXN0cmF0aW9uIChgYnBmX2lvY29zdF9yZWdgKSwgYW5kIHVucmVnaXN0cmF0aW9uIChgYnBmX2lvY29zdF91bnJlZ2ApLiAgSSYjMzk7bSBub3RpbmcgdGhhdCBgYnBmX2lvY29zdF9yZWdgIHVzZXMgYGt6YWxsb2NgLCB3aGljaCBzaG91bGQgemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnksIGFuZCB0aGF0JiMzOTtzIGdvb2QuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBicGZfaW9jb3N0X3VucmVnYCwga2ZyZWUmIzM5O2luZyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmcm9tIGJwZl9pb2Nvc3RfcmVnLiAgV2l0aGluIGBicGZfaW9jb3N0X2luaXRfbWVtYmVyYCwgSSBzZWUgYSBjb3B5IG9wZXJhdGlvbiB1c2luZyBgYnBmX29ial9uYW1lX2NweWAsIGJ1dCB0aGF0IGNvcHkgaXMgY2hlY2tpbmcgbGVuZ3RoLiAgSXQgZG9lcyBub3QgbG9vayByaXNreS4gVGhlIHZhbGlkYXRpb24gaW4gYGJwZl9pb2Nvc3RfdmFsaWRhdGVgIGNvbmZpcm1zIHRoYXQgdGhlIGNvZGUgaXMgY2hlY2tpbmcgdGhhdCBgb3BzLSZndDtjYWxjX2Nvc3RgIGlzIGEgdmFsaWQgZnVuY3Rpb24sIG5vdCB1bmluaXRpYWxpemVkLgoKTm93LCB0aGUgYGJsay1pb2Nvc3QuY2AgZmlsZSBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiAgQSBuZXcgYG1vZGVsYCBmaWVsZCBpcyBhZGRlZCB0byB0aGUgYGlvY2Agc3RydWN0LCBidXQgaXQmIzM5O3Mgb25seSBjb25kaXRpb25hbCBvbiBgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmAsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBgaW9jYCBpcyBremFsbG9jJiMzOTtkIGluIHNvbWUgcGFydHMgb2YgdGhlIGNvZGUuIFRoYXQgbWVhbnMgdGhlIGBtb2RlbGAgcG9pbnRlciBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIChhbmQgdGh1cyBzYWZlIHRvIHJlYWQpLiAgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpb2NgIGlzIGFsbG9jYXRlZCBjb3JyZWN0bHkgdG8gYmUgc3VyZSB0aGF0IGBtb2RlbGAgaXMgemVyb2VkLiAgTG9va2luZyBhdCBgaW9jX3Jxb3NfaW5pdGAsIHllcywgYGlvY2AgKmlzKiBga3phbGxvY2AtZWQuIEkmIzM5O2xsIGNoZWNrIGBpb2NfcnFvc19leGl0YCBhcyB3ZWxsLCB0byBtYWtlIHN1cmUgaXQgaXMgZnJlZWQgY29ycmVjdGx5LiAgSXQgZG9lcywgYW5kIGFsc28gY2xlYW5zIHVwIGBpb2MtJmd0O21vZGVsYCB2aWEgYGlvY29zdF9icGZfbW9kZWxfcHV0KG1vZGVsKWAuCgpJbiB0aGUgYGlvY190aW1lcl9mbmAgZnVuY3Rpb24sIGBucl9hY3RpdmVgIGlzIGluaXRpYWxpemVkIHRvIDAuICBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGBjYWxjX3Z0aW1lX2Nvc3RgIGFuZCBgY2FsY19zaXplX3Z0aW1lX2Nvc3RgIGZ1bmN0aW9ucyBib3RoIGRlcmVmZXJlbmNlIHRoZSBgbW9kZWxgIHBvaW50ZXIsIGJ1dCBpZiBgaW9jYCBpcyBhbGxvY2F0ZWQgYnkgYGt6YWxsb2NgIHRoZW4gdGhlc2UgcG9pbnRlcnMgc2hvdWxkIGJlIHNhZmUgdG8gZGVyZWZlcmVuY2UsIGFsdGhvdWdoIHRoZXkgbWF5IGJlIGBOVUxMYC4gYGlvY19jb3N0X21vZGVsX3ByZmlsbGAgcmVhZHMgdGhlIGBpb2MtJmd0O21vZGVsYCwgcHJpbnRpbmcgdG8gYSBzZXFfZmlsZSwgYWdhaW4sIHNob3VsZCBiZSBzYWZlIHdpdGggcHJvcGVyIGluaXRpYWxpemF0aW9uLiAgVGhlIGBpb2NfYnBmX21vZGVsX2JpbmRgIGZ1bmN0aW9uIGxvb2tzIG9rYXkgdG9vLiBJdCBiaW5kcyBhIG5ldyBtb2RlbCBhbmQgcHV0cyB0aGUgb2xkLCB3aXRoIGNoZWNrcyBpbiBiZXR3ZWVuLgoKVGhlIGBpb2NfY29zdF9tb2RlbF93cml0ZWAgZnVuY3Rpb24gaGFuZGxlcyB3cml0aW5nIHRoZSBjb3N0IG1vZGVsLCBhbmQgZG9lcyBzdHJsY3B5IG9wZXJhdGlvbnMuIFRoZSBgYnBmX21vZGVsYCBjaGFyYWN0ZXIgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9lcy4KCk92ZXJhbGwsIHJldmlld2luZyB0aGlzIGNvZGUgd2l0aCB0aGUgS01TQU4gZ3VpZGVsaW5lcyBpbiBtaW5kLCBJIGRvIG5vdCBzZWUgYW55IG9idmlvdXMgY2FzZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgYmUgZXhwb3NlZCAqb25seSogYnkgS01TQU4uICBBbGwgdGhlIHN0cnVjdHVyZXMgSSBleGFtaW5lZCwgdGhhdCBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gcG90ZW50aWFsbHkgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYywgZWl0aGVyIGdldCB6ZXJvZWQvaW5pdGlhbGl6ZWQgYXQgYWxsb2NhdGlvbiAodXNpbmcga3phbGxvYywgbWVtc2V0LCA9IHswfSksIG9yIGhhdmUgYm91bmRzL2xlbmd0aCBjaGVja3MuIFRoZSBmYWN0IHRoYXQgdGhlIGNvcmUgYGlvY2Agc3RydWN0IGlzIGBremFsbG9jYCYjMzk7ZCBpcyBhIHNpZ25pZmljYW50IGZhY3RvciwgYXMgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBtb2RlbGAgc3RydWN0LiBUaGVyZWZvcmUsIEkmIzM5O20gY29uY2x1ZGluZyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXMgKm5vdCogaW50cm9kdWNlIEtNU0FOLXNwZWNpZmljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2MgPSBremFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvY29zdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pb2Nvc3QuYz0yOTc1PXN0YXRpYyBpbnQgYmxrX2lvY29zdF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTc5LVxuYmxvY2svYmxrLWlvY29zdC5jOjI5ODA6XHRpb2MgPSBremFsbG9jX29iaigqaW9jKTtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTgxLVx0aWYgKCFpb2MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzU2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIE1vZGVsIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGJwZl9tb2RlbGAgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBgaW9jX2Nvc3RfbW9kZWxfd3JpdGVgIGZ1bmN0aW9uLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSB3YW50IHRvIHNlZSB0aGUgbWVjaGFuaWNzLCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZmxvdywgc2VlIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMsIGFuZCBtYXAgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gVGltZSB0byBkaWcgaW4gYW5kIGdldCBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvY29zdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNTkwOlx0XHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4zNTkxOlx0XHRzdHJ1Y3QgaW9jICppb2M7XG4zNTkyOlx0XHR1NjQgdVtOUl9JX0xDT0VGU107XG4zNTkzOlx0XHRib29sIHVzZXI7XG4zNTk0Olx0XHRjaGFyIGJwZl9tb2RlbFtJT0NPU1RfTU9ERUxfTkFNRV9MRU5dO1xuMzU5NTpcdFx0Y2hhciAqYm9keSwgKnA7XG4zNTk2Olx0XHRpbnQgcmV0O1xuMzU5NzpcdFxuMzU5ODpcdFx0YmxrZ19jb25mX2luaXQoXHUwMDI2Y3R4LCBpbnB1dCk7XG4zNTk5Olx0XG4zNjAwOlx0XHRyZXQgPSBibGtnX2NvbmZfb3Blbl9iZGV2KFx1MDAyNmN0eCk7XG4zNjAxOlx0XHRpZiAocmV0KVxuMzYwMjpcdFx0XHRyZXR1cm4gcmV0O1xuMzYwMzpcdFxuMzYwNDpcdFx0Ym9keSA9IGN0eC5ib2R5O1xuMzYwNTpcdFx0cSA9IGJkZXZfZ2V0X3F1ZXVlKGN0eC5iZGV2KTtcbjM2MDY6XHRcdGlmICghcXVldWVfaXNfbXEocSkpIHtcbjM2MDc6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4zNjA4Olx0XHRcdGdvdG8gY2xvc2VfYmRldjtcbjM2MDk6XHRcdH1cbjM2MTA6XHRcbjM2MTE6XHRcdGlvYyA9IHFfdG9faW9jKHEpO1xuMzYxMjpcdFx0aWYgKCFpb2MpIHtcbjM2MTM6XHRcdFx0cmV0ID0gYmxrX2lvY29zdF9pbml0KGN0eC5iZGV2LVx1MDAzZWJkX2Rpc2spO1xuMzYxNDpcdFx0XHRpZiAocmV0KVxuMzYxNTpcdFx0XHRcdGdvdG8gY2xvc2VfYmRldjtcbjM2MTY6XHRcdFx0aW9jID0gcV90b19pb2MocSk7XG4zNjE3Olx0XHR9XG4zNjE4Olx0XG4zNjE5Olx0XHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7XG4zNjIwOlx0XHRibGtfbXFfcXVpZXNjZV9xdWV1ZShxKTtcbjM2MjE6XHRcbjM2MjI6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuMzYyMzpcdFx0bWVtY3B5KHUsIGlvYy1cdTAwM2VwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7XG4zNjI0Olx0XHR1c2VyID0gaW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbDtcbjM2MjU6XHRcdGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTs7XG4zNjI2Olx0XG4zNjI3Olx0XHRyZXQgPSAtRUlOVkFMO1xuMzYyODpcdFxuMzYyOTpcdFx0d2hpbGUgKChwID0gc3Ryc2VwKFx1MDAyNmJvZHksIFwmIzM0OyBcXHRcXG5cJiMzNDspKSkge1xuMzYzMDpcdFx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG4zNjMxOlx0XHRcdGNoYXIgYnVmWzMyXTtcbjM2MzI6XHRcdFx0aW50IHRvaztcbjM2MzM6XHRcdFx0dTY0IHY7XG4zNjM0Olx0XG4zNjM1Olx0XHRcdGlmICghKnApXG4zNjM2Olx0XHRcdFx0Y29udGludWU7XG4zNjM3Olx0XG4zNjM4Olx0XHRcdHN3aXRjaCAobWF0Y2hfdG9rZW4ocCwgY29zdF9jdHJsX3Rva2VucywgYXJncykpIHtcbjM2Mzk6XHRcdFx0Y2FzZSBDT1NUX0NUUkw6XG4zNjQwOlx0XHRcdFx0bWF0Y2hfc3RybGNweShidWYsIFx1MDAyNmFyZ3NbMF0sIHNpemVvZihidWYpKTtcbjM2NDE6XHRcdFx0XHRpZiAoIXN0cmNtcChidWYsIFwmIzM0O2F1dG9cJiMzNDspKVxuMzY0MjpcdFx0XHRcdFx0dXNlciA9IGZhbHNlO1xuMzY0MzpcdFx0XHRcdGVsc2UgaWYgKCFzdHJjbXAoYnVmLCBcJiMzNDt1c2VyXCYjMzQ7KSlcbjM2NDQ6XHRcdFx0XHRcdHVzZXIgPSB0cnVlO1xuMzY0NTpcdFx0XHRcdGVsc2VcbjM2NDY6XHRcdFx0XHRcdGdvdG8gdW5sb2NrO1xuMzY0NzpcdFx0XHRcdGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTs7XG4zNjQ4Olx0XHRcdFx0Y29udGludWU7XG4zNjQ5Olx0XHRcdGNhc2UgQ09TVF9NT0RFTDpcbjM2NTA6XHRcdFx0XHRtYXRjaF9zdHJsY3B5KGJ1ZiwgXHUwMDI2YXJnc1swXSwgc2l6ZW9mKGJ1ZikpO1xuMzY1MTpcdFx0XHRcdGlmICghc3RyY21wKGJ1ZiwgXCYjMzQ7bGluZWFyXCYjMzQ7KSkge1xuMzY1MjpcdFx0XHRcdFx0LyogYmFjayB0byB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgKi9cbjM2NTM6XHRcdFx0XHRcdGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTs7XG4zNjU0Olx0XHRcdFx0XHRjb250aW51ZTtcbjM2NTU6XHRcdFx0XHR9XG4zNjU2Olx0XHRcdFx0bWF0Y2hfc3RybGNweShicGZfbW9kZWwsIFx1MDAyNmFyZ3NbMF0sIHNpemVvZihicGZfbW9kZWwpKTtcbjM2NTc6XHRcdFx0XHRjb250aW51ZTtcbjM2NTg6XHRcdFx0fVxuMzY1OTpcdFxuMzY2MDpcdFx0XHR0b2sgPSBtYXRjaF90b2tlbihwLCBpX2xjb2VmX3Rva2VucywgYXJncyk7XG4zNjYxOlx0XHRcdGlmICh0b2sgPT0gTlJfSV9MQ09FRlMpXG4zNjYyOlx0XHRcdFx0Z290byB1bmxvY2s7XG4zNjYzOlx0XHRcdGlmIChtYXRjaF91NjQoXHUwMDI2YXJnc1swXSwgXHUwMDI2dikpXG4zNjY0Olx0XHRcdFx0Z290byB1bmxvY2s7XG4zNjY1Olx0XHRcdHVbdG9rXSA9IHY7XG4zNjY2Olx0XHRcdHVzZXIgPSB0cnVlO1xuMzY2NzpcdFx0fVxuMzY2ODpcdFxuMzY2OTpcdFx0aWYgKHVzZXIpIHtcbjM2NzA6XHRcdFx0bWVtY3B5KGlvYy1cdTAwM2VwYXJhbXMuaV9sY29lZnMsIHUsIHNpemVvZih1KSk7XG4zNjcxOlx0XHRcdGlvYy1cdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPSB0cnVlO1xuMzY3MjpcdFx0fSBlbHNlIHtcbjM2NzM6XHRcdFx0aW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbCA9IGZhbHNlO1xuMzY3NDpcdFx0fVxuMzY3NTpcdFx0aW9jX3JlZnJlc2hfcGFyYW1zKGlvYywgdHJ1ZSk7XG4zNjc2Olx0XG4zNjc3Olx0XHRyZXQgPSAwO1xuMzY3ODpcdFxuMzY3OTpcdHVubG9jazpcbjM2ODA6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4zNjgxOlx0XG4zNjgyOlx0XHQvKlxuMzY4MzpcdFx0ICogQmluZCB0aGUgQlBGIG1vZGVsIG91dHNpZGUgaW9jLVx1MDAzZWxvY2s6IHRoZSByZWdpc3RyeSBsb29rdXBcbjM2ODQ6XHRcdCAqIHRha2VzIHRoZSByZWdpc3RyYXRpb24gbXV0ZXggYW5kIHRoZSBvbGQgbW9kZWwmIzM5O3MgcmVmZXJlbmNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODYwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJsb2NrIElPIENvc3QgQlBGIE9iamVjdCBIYW5kbGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJsay1pb2Nvc3QtYnBmLmNgIGNvZGUuIE15IGluaXRpYWwgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBhcm91bmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGBzdHJ1Y3Rfb3BzYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIG9iamVjdCBuYW1lIGNvcGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGRvbmUgY29ycmVjdGx5IGFuZCBzZWN1cmVseS4gTGV0IG1lIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyBgYnBmX29ial9uYW1lX2NweWAuIEZyb20gd2hhdCBJIGNhbiBzZWUgaGVyZSwgdGhleSYjMzk7cmUgdXNpbmcgYGJwZl9vYmpfbmFtZV9jcHkob3BzLSZndDtuYW1lLCB1b3BzLSZndDtuYW1lLCBzaXplb2Yob3BzLSZndDtuYW1lKSlgLiBTdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24sIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBCdXQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX29ial9uYW1lX2NweWAgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGxpa2Ugb2ZmLWJ5LW9uZSBlcnJvcnMgb3IgYnVmZmVyIG92ZXJmbG93cy4gTmVlZCB0byBtYWtlIGNlcnRhaW4gdGhlIG5hbWUgY29weSBpcyByb2J1c3Qgd2l0aGluIHRoZSBjb250ZXh0IG9mIEJQRiBvYmplY3QgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX29ial9uYW1lX2NweSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW9jb3N0LWJwZi5jPTEzOD1zdGF0aWMgaW50IGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMtMTQ3LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcywgbmFtZSk6XG5ibG9jay9ibGstaW9jb3N0LWJwZi5jOjE0ODpcdFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLVx1MDAzZW5hbWUsIHVvcHMtXHUwMDNlbmFtZSxcbmJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMtMTQ5LVx0XHRcdFx0ICAgICBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKSBcdTAwM2M9IDApXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmM9MzQ0PXN0YXRpYyBpbnQgYm1fYnBmX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zNTMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiaW5mbXRfbWlzY19vcHMsIG5hbWUpOlxuZnMvYmluZm10X21pc2NfYnBmLmM6MzU0Olx0XHRpZiAoYnBmX29ial9uYW1lX2NweShvcHMtXHUwMDNlbmFtZSwgdW9wcy1cdTAwM2VuYW1lLFxuZnMvYmluZm10X21pc2NfYnBmLmMtMzU1LVx0XHRcdFx0ICAgICBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKSBcdTAwM2M9IDApXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD02NTU9c3RydWN0IGJwZl9tYXAgKmJwZl9wcm9nX2FyZW5hKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjY1NjppbnQgYnBmX29ial9uYW1lX2NweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgaW50IHNpemUpO1xuaW5jbHVkZS9saW51eC9icGYuaC02NTctXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTIwMz1pbnQgYnBmX2dldF9maWxlX2ZsYWcoaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyMjQtICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjI1OmludCBicGZfb2JqX25hbWVfY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyMjYte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNDQtfVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI0NTpFWFBPUlRfU1lNQk9MX0dQTChicGZfb2JqX25hbWVfY3B5KTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNDYtXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1NDEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNTQyOlx0ZXJyID0gYnBmX29ial9uYW1lX2NweShtYXAtXHUwMDNlbmFtZSwgYXR0ci1cdTAwM2VtYXBfbmFtZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1NDMtXHRcdFx0ICAgICAgIHNpemVvZihhdHRyLVx1MDAzZW1hcF9uYW1lKSk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTI2LVx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlbG9hZF90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTI3Olx0ZXJyID0gYnBmX29ial9uYW1lX2NweShwcm9nLVx1MDAzZWF1eC1cdTAwM2VuYW1lLCBhdHRyLVx1MDAzZXByb2dfbmFtZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMjgtXHRcdFx0ICAgICAgIHNpemVvZihhdHRyLVx1MDAzZXByb2dfbmFtZSkpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODAxNT1zdGF0aWMgaW50IGJwZl9zY3hfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODAzNS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIG5hbWUpOlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDM2Olx0XHRyZXQgPSBicGZfb2JqX25hbWVfY3B5KG9wcy1cdTAwM2VuYW1lLCB1b3BzLVx1MDAzZW5hbWUsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwMzctXHRcdFx0XHQgICAgICAgc2l6ZW9mKG9wcy1cdTAwM2VuYW1lKSk7XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTIxMT1zdGF0aWMgaW50IGJwZl90Y3BfY2FfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjktXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMsIG5hbWUpOlxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIzMDpcdFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkodGNwX2NhLVx1MDAzZW5hbWUsIHV0Y3BfY2EtXHUwMDNlbmFtZSxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMzEtXHRcdFx0XHQgICAgIHNpemVvZih0Y3BfY2EtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbi0tXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM9MzYxPXN0YXRpYyBpbnQgYnBmX3FkaXNjX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtMzgyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgUWRpc2Nfb3BzLCBpZCk6XG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM6MzgzOlx0XHRpZiAoYnBmX29ial9uYW1lX2NweShxZGlzY19vcHMtXHUwMDNlaWQsIHVxZGlzY19vcHMtXHUwMDNlaWQsXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtMzg0LVx0XHRcdFx0ICAgICBzaXplb2YocWRpc2Nfb3BzLVx1MDAzZWlkKSkgXHUwMDNjPSAwKVxuLS1cbm5ldC9zbWMvc21jX2hzX2JwZi5jPTg1PXN0YXRpYyBpbnQgc21jX2JwZl9oc19jdHJsX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5uZXQvc21jL3NtY19oc19icGYuYy05OC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNtY19oc19jdHJsLCBuYW1lKTpcbm5ldC9zbWMvc21jX2hzX2JwZi5jOjk5Olx0XHRpZiAoYnBmX29ial9uYW1lX2NweShrX2N0cmwtXHUwMDNlbmFtZSwgdV9jdHJsLVx1MDAzZW5hbWUsXG5uZXQvc21jL3NtY19oc19icGYuYy0xMDAtXHRcdFx0XHQgICAgIHNpemVvZih1X2N0cmwtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2MDUKCQkJCQkJCW91dHB1dDogMzQ0CgkJCQkJCQl0aG91Z2h0czogMjE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBibGstaW9jb3N0IEJQRiBDb3N0IE1vZGVsIEltcGxlbWVudGF0aW9uIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIG5ldyBCUEYgY29zdCBtb2RlbCBpbnRlZ3JhdGlvbiB3aXRoaW4gYmxrLWlvY29zdCBpbnRyb2R1Y2VzIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCB3b3VsZCBuZWNlc3NpdGF0ZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gSSYjMzk7bSBleGFtaW5pbmcgdGhlIGNvZGUgd2l0aCBhIGNyaXRpY2FsIGV5ZSwgZm9jdXNpbmcgb24gZGF0YSBmbG93cywgaW5pdGlhbGl6YXRpb24gcGF0dGVybnMsIGFuZCBwb3RlbnRpYWwgZGF0YSBsZWFrcy4KCkZpcnN0LCBJJiMzOTttIHZlcmlmeWluZyB0aGUgYFRSQUNFX0VWRU5UKGlvY29zdF9pb2NfdGljaylgIHRyYWNlcG9pbnQuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgdHJhY2Vwb2ludCBzdHJ1Y3QgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGluIGBUUF9mYXN0X2Fzc2lnbmAuIFRoaXMgaW5jbHVkZXMgYGRldm5hbWVgLCBgcGVyaW9kX3VzYCwgYHZyYXRlYCwgYGJ1c3lfbGV2ZWxgLCBgbnJfYWN0aXZlYCwgYHVzYWdlX3BjdGAsIGFuZCBgcnVubmluZ2AuIEkgc2VlIHRoYXQgdGhlIGBucl9hY3RpdmVgIHZhbHVlIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIGlzIGluY3JlbWVudGVkIHdpdGhpbiB0aGUgcmVsZXZhbnQgbG9vcCBhbmQgdGhlbiBwYXNzZWQgdG8gdGhlIHRyYWNlIGV2ZW50LCBzbyB0aGlzIGlzIHNvbGlkLiBObyB3b3JyaWVzIHRoZXJlLgoKTmV4dCwgSSYjMzk7dmUgY2hlY2tlZCB0aGUgYGNhbGNfdnRpbWVfY29zdGAgYW5kIGBjYWxjX3NpemVfdnRpbWVfY29zdGAgZnVuY3Rpb25zLiBJJiMzOTt2ZSBmb2N1c2VkIG9uIGhvdyBgY29zdGAgaXMgYXNzaWduZWQgd2l0aGluIHRoZSBCUEYgbW9kZWwgcGF0aCwgYW5kIGhvdyB0aGUgdmFsdWUgaXMgdXNlZC4gQm90aCBmdW5jdGlvbnMgd2lsbCB1c2UgYGNhbGNfdnRpbWVfY29zdF9idWlsdGluYCBvciBgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbmAgaWYgQlBGIG1vZGVsIGlzIGRpc2FibGVkLiBUaGUgQlBGIG1vZGVsIGFzc2lnbnMgYGNvc3RgIHZpYSBgbW9kZWwtJmd0O2NhbGNfY29zdCguLi4pYC4gSSBjYW4gc2VlIHRoZXJlIGFyZSBjaGVja3MgdG8gdmVyaWZ5IG1vZGVsIGlzIHByZXNlbnQuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGlzIGNvc3QgaXMgcmV0dXJuZWQsIGFuZCB0aGF0IGBWVElNRV9QRVJfU0VDYCBpcyB1c2VkIGFzIGEgbWF4aW11bSB2YWx1ZSBzbyB0aGlzIGlzIHNhZmUgYXMgd2VsbC4KCkkmIzM5O3ZlIGFsc28gbG9va2VkIGF0IHRoZSBhbGxvY2F0aW9uIHBhdHRlcm5zLiBCb3RoIGBremFsbG9jYCBhbmQgYGt6YWxsb2Nfb2JqYCBhcmUgdXNlZCBmb3IgYWxsb2NhdGlvbiBvZiBgaW9jb3N0X2JwZl9tb2RlbGAgYW5kIGBzdHJ1Y3QgaW9jYCByZXNwZWN0aXZlbHksIGFuZCB0aGVzZSBhcmUgaW5pdGlhbGl6ZWQgd2l0aCB6ZXJvLCBhbmQgSSYjMzk7dmUgdmVyaWZpZWQgdGhhdCBubyB1bmluaXRpYWxpemVkIGRhdGEgaXMgdXNlZCBpbiBhbnkgb3RoZXIgc3RydWN0dXJlcy4KClRoZSBjb3JlIG9mIHRoZSBCUEYgbW9kZWwgaW50ZWdyYXRpb24gc2VlbXMgdG8gYmUgaGFuZGxlZCBieSBgaW9jb3N0X2JwZl9tb2RlbF9nZXRgLCBgaW9jX2JwZl9tb2RlbF9iaW5kYCwgYW5kIHRoZSBgaW9jX2Nvc3RfbW9kZWxfd3JpdGVgIGZ1bmN0aW9uLiBgaW9jb3N0X2JwZl9tb2RlbF9nZXRgIHJldHJpZXZlcyB0aGUgQlBGIG1vZGVsLiBgaW9jX2JwZl9tb2RlbF9iaW5kYCBoYW5kbGVzIHRoZSBiaW5kaW5nIGFuZCB1bmJpbmRpbmcgb2YgdGhlIGNvc3QgbW9kZWwgdG8gdGhlIGBpb2NgIHN0cnVjdCwgdXNpbmcgYHJjdV9hc3NpZ25fcG9pbnRlcmAgdG8gaGFuZGxlIGNvbmN1cnJlbmN5IHNhZmVseS4gSSB2ZXJpZmllZCB0aGF0IGEgYGJwZl9tb2RlbGAgc3RyaW5nIGlzIGJlaW5nIHByb3Blcmx5IG51bGwtdGVybWluYXRlZCB2aWEgYG1hdGNoX3N0cmxjcHlgLCBhbmQgcGFzc2VkIHRvIGBpb2NfYnBmX21vZGVsX2JpbmRgLiBJIGNhbiBjb25maXJtIHRoZXJlIGFyZSBubyBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKQmFzZWQgb24gbXkgYW5hbHlzaXMsIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIGRhdGEgcmFjZXMgb3IgbWlzc2luZyBpbml0aWFsaXphdGlvbiBzdGVwcyB0aGF0IHdvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igd3JpdGVzLiBUaGVyZSBhcmUgbm8gZGlyZWN0IGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgbm90IHJlcXVpcmVkLiBJJiMzOTt2ZSBjb25zaWRlcmVkIHRoZSBmb3VyIGNyaXRlcmlhIHJlbGF0ZWQgdG8gdGhlIGRldGVjdGlvbiBvZiB1bmluaXRpYWxpemVkIHJlYWRzIGFuZCBub25lIG9mIHRoZW0gYXBwbHk6IG5vIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBubyB1bmluaXRpYWxpemVkIGNvbXBsZXggc3RydWN0dXJlcywgYW5kIG5vIGJvdW5kcyBjaGVjayBpc3N1ZXMuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIHNvIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgpJbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgQlBGIHN0cnVjdF9vcHMtYmFzZWQgY29zdCBtb2RlbHMgdG8gYGJsay1pb2Nvc3RgLCBpbmNsdWRpbmcgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGhvb2tzLCBibGtjZyBub3RpZmljYXRpb25zLCBhIGNncm91cCB2MiBgaW8uY29zdC5tb2RlbGAgY29uZmlnLCBhbmQgYSBuZXcgdHJhY2Vwb2ludC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBhcmUgaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIHRoYXQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gTWVtb3J5IHNhZmV0eSBjb25jZXJucyAoUkNVIGxpZmV0aW1lLCBzdHJ1Y3Rfb3BzIHJlZmNvdW50aW5nLCBsb2NraW5nKSBhcmUgYWxyZWFkeSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRodXMsIHRoaXMgY29kZSBhZGRpdGlvbiBkb2VzIG5vdCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdCAoYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgKSwgYWRkaW5nIGBpb2Nvc3RfbW9kZWxfb3BzYCwgbW9kZWwgcmVnaXN0cmF0aW9uL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJzaW5nIGluIGBpby5jb3N0Lm1vZGVsYCwgYW5kIGEgbmV3IHRyYWNlcG9pbnQgYGlvY29zdF9pb2NfdGlja2AuXG5cbkFuIGV2YWx1YXRpb24gb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFjcm9zcyB0aGUgbW9kaWZpZWQgYW5kIG5ldyBjb2RlIHNob3dzOlxuLSBBbGwgc3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGBicGZfbW9kZWxgIGluaXRpYWxpemVkIHdpdGggYGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTtgLCBgbnJfYWN0aXZlYCBpbml0aWFsaXplZCB0byAwLCBhbmQgYGJ1ZmAgYnVmZmVycyBmaWxsZWQgd2l0aCBgbWF0Y2hfc3RybGNweWApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZC91c2UuXG4tIER5bmFtaWMgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jYCAoZm9yIGBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbGApIGFuZCB0aGUgZXhpc3RpbmcgemVyb2VkIGFsbG9jYXRpb24gZm9yIGBzdHJ1Y3QgaW9jYC5cbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29udGFpbmluZyB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlOyBvdXRwdXQgdG8gdXNlciBzcGFjZSBpcyBoYW5kbGVkIHZpYSBmb3JtYXR0ZWQgdGV4dCBpbiBgc2VxX3ByaW50ZmAuXG4tIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBjYWxsYmFja3MgKGBjYWxjX2Nvc3RgLCBgYmxrY2dfb25saW5lYCwgYGJsa2NnX29mZmxpbmVgKSBhcmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIGluaXRpYWxpemVkIGJpby9yZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIGJsa2NnIHBvaW50ZXJzLlxuXG5UaGUgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBzZXJpZXMgcGVydGFpbiB0byBSQ1Ugc3luY2hyb25pemF0aW9uLCBvYmplY3QgcmVmY291bnRpbmcvbGlmZXRpbWUgKGBicGZfc3RydWN0X29wc19nZXRgL2BwdXRgKSwgYW5kIGxvY2tpbmcsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgc3BlY2lmaWMgdG8gS01TQU4gYXJlIHByZXNlbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdCAoYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgKSwgYWRkaW5nIGBpb2Nvc3RfbW9kZWxfb3BzYCwgbW9kZWwgcmVnaXN0cmF0aW9uL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJzaW5nIGluIGBpby5jb3N0Lm1vZGVsYCwgYW5kIGEgbmV3IHRyYWNlcG9pbnQgYGlvY29zdF9pb2NfdGlja2AuXG5cbkFuIGV2YWx1YXRpb24gb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFjcm9zcyB0aGUgbW9kaWZpZWQgYW5kIG5ldyBjb2RlIHNob3dzOlxuLSBBbGwgc3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGBicGZfbW9kZWxgIGluaXRpYWxpemVkIHdpdGggYGJwZl9tb2RlbFswXSA9ICYjMzk7XFwwJiMzOTtgLCBgbnJfYWN0aXZlYCBpbml0aWFsaXplZCB0byAwLCBhbmQgYGJ1ZmAgYnVmZmVycyBmaWxsZWQgd2l0aCBgbWF0Y2hfc3RybGNweWApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZC91c2UuXG4tIER5bmFtaWMgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jYCAoZm9yIGBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbGApIGFuZCB0aGUgZXhpc3RpbmcgemVyb2VkIGFsbG9jYXRpb24gZm9yIGBzdHJ1Y3QgaW9jYC5cbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29udGFpbmluZyB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlOyBvdXRwdXQgdG8gdXNlciBzcGFjZSBpcyBoYW5kbGVkIHZpYSBmb3JtYXR0ZWQgdGV4dCBpbiBgc2VxX3ByaW50ZmAuXG4tIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBjYWxsYmFja3MgKGBjYWxjX2Nvc3RgLCBgYmxrY2dfb25saW5lYCwgYGJsa2NnX29mZmxpbmVgKSBhcmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIGluaXRpYWxpemVkIGJpby9yZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIGJsa2NnIHBvaW50ZXJzLlxuXG5UaGUgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBzZXJpZXMgcGVydGFpbiB0byBSQ1Ugc3luY2hyb25pemF0aW9uLCBvYmplY3QgcmVmY291bnRpbmcvbGlmZXRpbWUgKGBicGZfc3RydWN0X29wc19nZXRgL2BwdXRgKSwgYW5kIGxvY2tpbmcsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgc3BlY2lmaWMgdG8gS01TQU4gYXJlIHByZXNlbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjEwOjUxLjc2NzA3MjQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTU4NzkxMTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUX0JQRlwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvY19icGZfbW9kZWxfYmluZFwiLFxuICAgIFwiaW9jX2Nvc3RfbW9kZWxfd3JpdGVcIixcbiAgICBcImNhbGNfdnRpbWVfY29zdFwiLFxuICAgIFwiY2FsY19zaXplX3Z0aW1lX2Nvc3RcIixcbiAgICBcImJwZl9pb2Nvc3RfcmVnXCIsXG4gICAgXCJicGZfaW9jb3N0X3VucmVnXCIsXG4gICAgXCJicGZfaW9jb3N0X3ZhbGlkYXRlXCIsXG4gICAgXCJpb2Nvc3RfYnBmX21vZGVsX2dldFwiLFxuICAgIFwiaW9jb3N0X2JwZl9tb2RlbF9wdXRcIixcbiAgICBcImlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lXCIsXG4gICAgXCJpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIEJQRiBzdHJ1Y3Rfb3BzIHN1cHBvcnQgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscyBpbiBibGstaW9jb3N0IChgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmApLCBhZGRpbmcgYGlvY29zdF9tb2RlbF9vcHNgLCBtb2RlbCByZWdpc3RyYXRpb24vbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHBhcnNpbmcgaW4gYGlvLmNvc3QubW9kZWxgLCBhbmQgYSBuZXcgdHJhY2Vwb2ludCBgaW9jb3N0X2lvY190aWNrYC5cXG5cXG5BbiBldmFsdWF0aW9uIG9mIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGFuZCBuZXcgY29kZSBzaG93czpcXG4tIEFsbCBzdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgYGJwZl9tb2RlbGAgaW5pdGlhbGl6ZWQgd2l0aCBgYnBmX21vZGVsWzBdID0gJ1xcXFwwJ2AsIGBucl9hY3RpdmVgIGluaXRpYWxpemVkIHRvIDAsIGFuZCBgYnVmYCBidWZmZXJzIGZpbGxlZCB3aXRoIGBtYXRjaF9zdHJsY3B5YCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSByZWFkL3VzZS5cXG4tIER5bmFtaWMgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jYCAoZm9yIGBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbGApIGFuZCB0aGUgZXhpc3RpbmcgemVyb2VkIGFsbG9jYXRpb24gZm9yIGBzdHJ1Y3QgaW9jYC5cXG4tIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZTsgb3V0cHV0IHRvIHVzZXIgc3BhY2UgaXMgaGFuZGxlZCB2aWEgZm9ybWF0dGVkIHRleHQgaW4gYHNlcV9wcmludGZgLlxcbi0gVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gQlBGIGNhbGxiYWNrcyAoYGNhbGNfY29zdGAsIGBibGtjZ19vbmxpbmVgLCBgYmxrY2dfb2ZmbGluZWApIGFyZSBkZXJpdmVkIGRpcmVjdGx5IGZyb20gaW5pdGlhbGl6ZWQgYmlvL3JlcXVlc3Qgc3RydWN0dXJlcyBhbmQgYmxrY2cgcG9pbnRlcnMuXFxuXFxuVGhlIHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggc2VyaWVzIHBlcnRhaW4gdG8gUkNVIHN5bmNocm9uaXphdGlvbiwgb2JqZWN0IHJlZmNvdW50aW5nL2xpZmV0aW1lIChgYnBmX3N0cnVjdF9vcHNfZ2V0YC9gcHV0YCksIGFuZCBsb2NraW5nLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZGV0ZWN0b3JzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHNwZWNpZmljIHRvIEtNU0FOIGFyZSBwcmVzZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgQlBGIHN0cnVjdF9vcHMgc3VwcG9ydCAoaW9jb3N0X21vZGVsX29wcykgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscyBpbiBibGstaW9jb3N0LiBJdCBpbnRyb2R1Y2VzIG5ldyBrZXJuZWwgY29kZSBpbiBibG9jay9ibGstaW9jb3N0LWJwZi5jIGZvciByZWdpc3RlcmluZywgdmFsaWRhdGluZywgYW5kIG1hbmFnaW5nIEJQRiBjb3N0IG1vZGVscywgYW5kIHVwZGF0ZXMgYmxvY2svYmxrLWlvY29zdC5jIGFuZCBibG9jay9ibGstY2dyb3VwLmMgdG8gaW50ZXJmYWNlIHdpdGggdGhlc2UgbW9kZWxzIGR1cmluZyBJTyBjb3N0IGNhbGN1bGF0aW9ucywgY29uZmlndXJhdGlvbiB3cml0ZXMsIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBCUEYgc3lzY2FsbHMgYW5kIGNncm91cCB2MiBpby5jb3N0Lm1vZGVsIGNvbmZpZ3VyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjEwOjUxLjc2NzA3ODY0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1ODQ1MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmM1MGQ0MDM0MzhiNGI0ZTE4OGIxNDhhMGFiNWNjNGFmNWI2N2EwNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNDoxMDo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcXG5pbmRleCA4ZDI2MDM3NTFjNTFhLi5hNjkxMGFkN2MyZDAyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxcbkBAIC0yMTI0LDYgKzIxMjQsMTcgQEAgSU8gSW50ZXJmYWNlIEZpbGVzXFxuIFxcdHBhcmFtZXRlcnMgYXJlIHdyaXR0ZW4gdG8sIFxcXCJjdHJsXFxcIiBiZWNvbWUgXFxcInVzZXJcXFwiIGFuZCB0aGVcXG4gXFx0YXV0b21hdGljIGNoYW5nZXMgYXJlIGRpc2FibGVkLlxcbiBcXG4rXFx0V2hlbiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGIGlzIGVuYWJsZWQsIFxcXCJtb2RlbFxcXCIgYWxzbyBhY2NlcHRzXFxuK1xcdHRoZSBuYW1lIG9mIGEgcmVnaXN0ZXJlZCBpb2Nvc3RfbW9kZWxfb3BzIEJQRiBzdHJ1Y3Rfb3BzIG1vZGVsOlxcbitcXHRcXFwibW9kZWw9XFx1MDAzY25hbWVcXHUwMDNlXFxcIiBiaW5kcyB0aGUgbW9kZWwgdG8gdGhlIGRldmljZSBhbmQgdGhlIG1vZGVsIGZ1bGx5XFxuK1xcdHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBwcmljaW5nLCBmb3IgZXZlcnkgb3BlcmF0aW9uIGluY2x1ZGluZ1xcbitcXHRmbHVzaGVzOyBcXFwibW9kZWw9bGluZWFyXFxcIiAob3IgXFxcImN0cmw9YXV0by91c2VyXFxcIikgcmVzdG9yZXMgdGhlIGJ1aWx0aW5cXG4rXFx0bW9kZWwuICBXcml0aW5nIGFuIHVua25vd24gbmFtZSBmYWlscyB3aXRoIEVOT0VOVC4gIFVucmVnaXN0ZXJpbmdcXG4rXFx0YSBtb2RlbCByZW1vdmVzIGl0cyBuYW1lOyBkZXZpY2VzIGFscmVhZHkgYm91bmQga2VlcCB1c2luZyBpdFxcbitcXHR1bnRpbCBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBidWlsdGluIG1vZGVsLCBmb2xsb3dpbmcgdGhlIGxpZmV0aW1lXFxuK1xcdG1vZGVsIG9mIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuICBTZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmhcXG4rXFx0Zm9yIHRoZSBtb2RlbCBpbnRlcmZhY2UuXFxuK1xcbiBcXHRXaGVuIFxcXCJtb2RlbFxcXCIgaXMgXFxcImxpbmVhclxcXCIsIHRoZSBmb2xsb3dpbmcgbW9kZWwgcGFyYW1ldGVycyBhcmVcXG4gXFx0ZGVmaW5lZC5cXG4gXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL0tjb25maWcgYi9ibG9jay9LY29uZmlnXFxuaW5kZXggNzBlNGE2NmQ5NDFmZi4uOTFlODA4Zjg2ZDI4ZCAxMDA2NDRcXG4tLS0gYS9ibG9jay9LY29uZmlnXFxuKysrIGIvYmxvY2svS2NvbmZpZ1xcbkBAIC0yMzEsNCArMjMxLDEzIEBAIGNvbmZpZyBCTEtfRVJST1JfSU5KRUNUSU9OXFxuIFxcbiBzb3VyY2UgXFxcImJsb2NrL0tjb25maWcuaW9zY2hlZFxcXCJcXG4gXFxuK2NvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVF9CUEZcXG4rXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBwbHVnZ2FibGUgY29zdCBtb2RlbCBzdXBwb3J0IGZvciB0aGUgY29zdCBJTyBjb250cm9sbGVyXFxcIlxcbitcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBfSU9DT1NUIFxcdTAwMjZcXHUwMDI2IEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgREVCVUdfSU5GT19CVEZcXG4rXFx0aGVscFxcbitcXHQgRW5hYmxpbmcgdGhpcyBvcHRpb24gcmVnaXN0ZXJzIHRoZSBcXFwiaW9jb3N0X21vZGVsX29wc1xcXCIgQlBGXFxuK1xcdCBzdHJ1Y3Rfb3BzIHR5cGUsIHdoaWNoIGFsbG93cyBhIEJQRiBwcm9ncmFtIHRvIGZ1bGx5IHJlcGxhY2VcXG4rXFx0IHRoZSBidWlsdGluIGxpbmVhciBjb3N0IG1vZGVsIG9uIGEgZGV2aWNlIGl0IGlzIGJvdW5kIHRvXFxuK1xcdCB0aHJvdWdoIGlvLmNvc3QubW9kZWwuXFxuK1xcbiBlbmRpZiAjIEJMT0NLXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGVcXG5pbmRleCBlN2JkMzIwZTNkNjk3Li5lZTVjZWJlZWEwMDZmIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL01ha2VmaWxlXFxuKysrIGIvYmxvY2svTWFrZWZpbGVcXG5AQCAtMzksMyArMzksNCBAQCBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OKVxcdCs9IGJsay1jcnlwdG8ubyBibGstY3J5cHRvLXByb2ZpbGUubyBcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGJsay1jcnlwdG8tc3lzZnMub1xcbiBvYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLKVxcdCs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xcbiBvYmotJChDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQpXFx0Kz0gaG9sZGVyLm9cXG4rb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRilcXHQrPSBibGstaW9jb3N0LWJwZi5vXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjg3Mjg3MTA0NTM1MWMgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXFxuKysrIGIvYmxvY2svYmxrLWNncm91cC5jXFxuQEAgLTMyLDYgKzMyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhcnRfc3RhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiYmxrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJibGstY2dyb3VwLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGstaW9jb3N0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJibGstaW9wcmlvLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJibGstdGhyb3R0bGUuaFxcXCJcXG4gXFxuQEAgLTEzNDEsNiArMTM0Miw3IEBAIHZvaWQgYmxrY2dfdW5waW5fb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpibGtjZ19jc3MpXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiB7XFxuK1xcdGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShjc3NfdG9fYmxrY2coY3NzKSk7XFxuIFxcdC8qIHRoaXMgcHJldmVudHMgYW55b25lIGZyb20gYXR0YWNoaW5nIG9yIG1pZ3JhdGluZyB0byB0aGlzIGJsa2NnICovXFxuIFxcdHdiX2Jsa2NnX29mZmxpbmUoY3NzKTtcXG4gXFxuQEAgLTE0NDUsNiArMTQ0Nyw3IEBAIGJsa2NnX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG4gXFxuIHN0YXRpYyBpbnQgYmxrY2dfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiB7XFxuK1xcdGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lKGNzc190b19ibGtjZyhjc3MpKTtcXG4gXFx0c3RydWN0IGJsa2NnICpwYXJlbnQgPSBibGtjZ19wYXJlbnQoY3NzX3RvX2Jsa2NnKGNzcykpO1xcbiBcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvY29zdC1icGYuYyBiL2Jsb2NrL2Jsay1pb2Nvc3QtYnBmLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlYzZkZjI3OTU5OTBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYmxvY2svYmxrLWlvY29zdC1icGYuY1xcbkBAIC0wLDAgKzEsMjUwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIGJsay1pb2Nvc3Q6IEJQRiBzdHJ1Y3Rfb3BzIHBsdW1iaW5nIGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMuXFxuKyAqXFxuKyAqIFJlZ2lzdGVycyB0aGUgXFxcImlvY29zdF9tb2RlbF9vcHNcXFwiIHN0cnVjdF9vcHMgdHlwZSBhbmQgbWFpbnRhaW5zIHRoZVxcbisgKiBuYW1lIHJlZ2lzdHJ5IG9mIHJlZ2lzdGVyZWQgbW9kZWxzLiAgQSByZWdpc3RlcmVkIG1vZGVsIGlzIGJvdW5kIHRvXFxuKyAqIGEgZGV2aWNlIHRocm91Z2ggaW8uY29zdC5tb2RlbDsgc2VlIGluY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oLlxcbisgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXFx1MDAzZVxcbitcXG4rc3RhdGljIERFRklORV9NVVRFWChpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcXG4rc3RhdGljIExJU1RfSEVBRChpb2Nvc3RfYnBmX21vZGVscyk7XFxuK1xcbisvKlxcbisgKiBUaGUgcmVnaXN0cnkgaG9sZHMgYSBicGZfc3RydWN0X29wc19nZXQoKSByZWZlcmVuY2Ugb2J0YWluZWQgaW4gLnJlZztcXG4rICogLnVucmVnIGRyb3BzIGl0LCBzbyB0aGUga2RhdGEgb2YgYW4gdW5yZWdpc3RlcmVkIG1vZGVsIHN0YXlzIGFsaXZlXFxuKyAqIHdoaWxlIGFueSBkZXZpY2UgaXMgc3RpbGwgYm91bmQgdG8gaXQuXFxuKyAqL1xcbitzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCB7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzO1xcbit9O1xcbitcXG4rLypcXG4rICogTG9vayB1cCBhIHJlZ2lzdGVyZWQgbW9kZWwgYnkgbmFtZSBhbmQgYWNxdWlyZSBhIHJlZmVyZW5jZSBvbiBpdC5cXG4rICogVGhlIHJlZ2lzdHJ5IGxvY2sgaXMgaGVsZCBhY3Jvc3MgbG9va3VwIGFuZCBicGZfc3RydWN0X29wc19nZXQoKSBzb1xcbisgKiB0aGUgbW9kZWwgY2Fubm90IGJlIHVucmVnaXN0ZXJlZCBpbiBiZXR3ZWVuLlxcbisgKi9cXG4raW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsXFxuK1xcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApXFxuK3tcXG4rXFx0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XFxuK1xcdGludCByZXQgPSAtRU5PRU5UO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XFxuK1xcdFxcdGlmICghc3RyY21wKG0tXFx1MDAzZW9wcy1cXHUwMDNlbmFtZSwgbmFtZSkpIHtcXG4rXFx0XFx0XFx0aWYgKGJwZl9zdHJ1Y3Rfb3BzX2dldChtLVxcdTAwM2VvcHMpKSB7XFxuK1xcdFxcdFxcdFxcdCpvcHNwID0gbS1cXHUwMDNlb3BzO1xcbitcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rdm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKVxcbit7XFxuK1xcdGJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGlvY29zdF9icGZfbW9kZWwgKlxcbitpb2Nvc3RfYnBmX21vZGVsX2xvb2t1cChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKVxcbit7XFxuK1xcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKG0tXFx1MDAzZW9wcyA9PSBvcHMpXFxuK1xcdFxcdFxcdHJldHVybiBtO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpXFxuK3tcXG4rXFx0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFxcdTAwMjZpb2Nvc3RfYnBmX21vZGVscywgbGlzdCkge1xcbitcXHRcXHRpZiAobS1cXHUwMDNlb3BzLVxcdTAwM2VibGtjZ19vbmxpbmUpXFxuK1xcdFxcdFxcdG0tXFx1MDAzZW9wcy1cXHUwMDNlYmxrY2dfb25saW5lKGJsa2NnKTtcXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKVxcbit7XFxuK1xcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKG0tXFx1MDAzZW9wcy1cXHUwMDNlYmxrY2dfb2ZmbGluZSlcXG4rXFx0XFx0XFx0bS1cXHUwMDNlb3BzLVxcdTAwM2VibGtjZ19vZmZsaW5lKGJsa2NnKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGJwZl9pb2Nvc3RfbW9kZWxfaW5pdChzdHJ1Y3QgYnRmICpidGYpXFxuK3tcXG4rXFx0czMyIHR5cGVfaWQ7XFxuK1xcbitcXHR0eXBlX2lkID0gYnRmX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXFxcImlvY29zdF9tb2RlbF9vcHNcXFwiLCBCVEZfS0lORF9TVFJVQ1QpO1xcbitcXHRpZiAodHlwZV9pZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2FjY2Vzc19hdXggKmluZm8pXFxuK3tcXG4rXFx0cmV0dXJuIGJwZl90cmFjaW5nX2J0Zl9jdHhfYWNjZXNzKG9mZiwgc2l6ZSwgdHlwZSwgcHJvZywgaW5mbyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbiticGZfaW9jb3N0X2dldF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCxcXG4rXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuK3tcXG4rXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxuKyNpZmRlZiBDT05GSUdfQ0dST1VQU1xcbitcXHRjYXNlIEJQRl9GVU5DX2NncnBfc3RvcmFnZV9nZXQ6XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2YnBmX2NncnBfc3RvcmFnZV9nZXRfcHJvdG87XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gYnBmX2Jhc2VfZnVuY19wcm90byhmdW5jX2lkLCBwcm9nKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbit7XFxuK1xcdC8qIGNhbGNfY29zdCgpIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZCAqL1xcbitcXHRpZiAocHJvZy1cXHUwMDNlc2xlZXBhYmxlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcXG4rXFx0XFx0XFx0XFx0ICB2b2lkICprZGF0YSwgY29uc3Qgdm9pZCAqdWRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhO1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqdW9wcyA9IHVkYXRhO1xcbitcXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xcbitcXG4rXFx0c3dpdGNoIChtb2ZmKSB7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlvY29zdF9tb2RlbF9vcHMsIG5hbWUpOlxcbitcXHRcXHRpZiAoYnBmX29ial9uYW1lX2NweShvcHMtXFx1MDAzZW5hbWUsIHVvcHMtXFx1MDAzZW5hbWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKG9wcy1cXHUwMDNlbmFtZSkpIFxcdTAwM2M9IDApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF92YWxpZGF0ZSh2b2lkICprZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XFxuK1xcbitcXHRyZXR1cm4gb3BzLVxcdTAwM2VjYWxjX2Nvc3QgPyAwIDogLUVJTlZBTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBicGZfaW9jb3N0X3JlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbit7XFxuK1xcdHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTtcXG4rXFx0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCFicGZfc3RydWN0X29wc19nZXQob3BzKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRtID0ga3phbGxvYyhzaXplb2YoKm0pLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtKSB7XFxuK1xcdFxcdGJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XFxuK1xcdHtcXG4rXFx0XFx0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm90aGVyO1xcbitcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgXFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKG90aGVyLVxcdTAwM2VvcHMtXFx1MDAzZW5hbWUsIG9wcy1cXHUwMDNlbmFtZSkpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVFWElTVDtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdG0tXFx1MDAzZW9wcyA9IG9wcztcXG4rXFx0XFx0bGlzdF9hZGQoXFx1MDAyNm0tXFx1MDAzZWxpc3QsIFxcdTAwMjZpb2Nvc3RfYnBmX21vZGVscyk7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcXG4rXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XFxuK1xcdFxcdGtmcmVlKG0pO1xcbitcXHR9XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJwZl9pb2Nvc3RfdW5yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcXG4re1xcbitcXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XFxuK1xcdHN0cnVjdCBpb2Nvc3RfYnBmX21vZGVsICptO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XFxuK1xcdG0gPSBpb2Nvc3RfYnBmX21vZGVsX2xvb2t1cChvcHMpO1xcbitcXHRpZiAobSkge1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2bS1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdGJwZl9zdHJ1Y3Rfb3BzX3B1dChvcHMpO1xcbitcXHRcXHRrZnJlZShtKTtcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2lvY29zdF92ZXJpZmllcl9vcHMgPSB7XFxuK1xcdC5nZXRfZnVuY19wcm90byA9IGJwZl9pb2Nvc3RfZ2V0X2Z1bmNfcHJvdG8sXFxuK1xcdC5pc192YWxpZF9hY2Nlc3MgPSBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcyxcXG4rfTtcXG4rXFxuK3N0YXRpYyB1NjQgYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1Yih1NjQgb3BmLCB1NjQgbmJ5dGVzLCB1NjQgc2VjdG9yLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzIF9fYnBmX29wc19pb2Nvc3RfbW9kZWxfb3BzID0ge1xcbitcXHQuY2FsY19jb3N0ID0gYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1YixcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2lvY29zdF9tb2RlbF9vcHMgPSB7XFxuK1xcdC52ZXJpZmllcl9vcHMgPSBcXHUwMDI2YnBmX2lvY29zdF92ZXJpZmllcl9vcHMsXFxuK1xcdC5pbml0ID0gYnBmX2lvY29zdF9tb2RlbF9pbml0LFxcbitcXHQuY2hlY2tfbWVtYmVyID0gYnBmX2lvY29zdF9jaGVja19tZW1iZXIsXFxuK1xcdC5pbml0X21lbWJlciA9IGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXIsXFxuK1xcdC52YWxpZGF0ZSA9IGJwZl9pb2Nvc3RfdmFsaWRhdGUsXFxuK1xcdC5yZWcgPSBicGZfaW9jb3N0X3JlZyxcXG4rXFx0LnVucmVnID0gYnBmX2lvY29zdF91bnJlZyxcXG4rXFx0Lm5hbWUgPSBcXFwiaW9jb3N0X21vZGVsX29wc1xcXCIsXFxuK1xcdC5jZmlfc3R1YnMgPSBcXHUwMDI2X19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMsXFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgYnBmX2lvY29zdF9pbml0KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKFxcdTAwMjZicGZfaW9jb3N0X21vZGVsX29wcywgaW9jb3N0X21vZGVsX29wcyk7XFxuK31cXG4rbGF0ZV9pbml0Y2FsbChicGZfaW9jb3N0X2luaXQpO1xcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jb3N0LmMgYi9ibG9jay9ibGstaW9jb3N0LmNcXG5pbmRleCAyNzQ1YmZmY2Q1ZWVmLi5iY2NkYmQyNDk2ZDgzIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay1pb2Nvc3QuY1xcbisrKyBiL2Jsb2NrL2Jsay1pb2Nvc3QuY1xcbkBAIC0xNzcsNiArMTc3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhcnNlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vbG9jYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9sb2NhbDY0LmhcXHUwMDNlXFxuQEAgLTQ0NSw2ICs0NDYsMTEgQEAgc3RydWN0IGlvYyB7XFxuIFxcdGludFxcdFxcdFxcdFxcdGF1dG9wX2lkeDtcXG4gXFx0Ym9vbFxcdFxcdFxcdFxcdHVzZXJfcW9zX3BhcmFtczoxO1xcbiBcXHRib29sXFx0XFx0XFx0XFx0dXNlcl9jb3N0X21vZGVsOjE7XFxuK1xcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxcbitcXHQvKiBib3VuZCBCUEYgY29zdCBtb2RlbCwgTlVMTCA9IGJ1aWx0aW4gbGluZWFyIG1vZGVsICovXFxuK1xcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzXFx0X19yY3UgKm1vZGVsO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCBpb2NnX3BjcHVfc3RhdCB7XFxuQEAgLTIyMzgsNiArMjI0NCw3IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXFxuIFxcdHN0cnVjdCBpb2Nfbm93IG5vdztcXG4gXFx0TElTVF9IRUFEKHN1cnBsdXNlcyk7XFxuIFxcdGludCBucl9kZWJ0b3JzLCBucl9zaG9ydGFnZXMgPSAwLCBucl9sYWdnaW5nID0gMDtcXG4rXFx0aW50IG5yX2FjdGl2ZSA9IDA7XFxuIFxcdHU2NCB1c2FnZV91c19zdW0gPSAwO1xcbiBcXHR1MzIgcHBtX3J0aHI7XFxuIFxcdHUzMiBwcG1fd3RocjtcXG5AQCAtMjI3NCw2ICsyMjgxLDggQEAgc3RhdGljIHZvaWQgaW9jX3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG4gXFx0XFx0dTY0IHZkb25lLCB2dGltZSwgdXNhZ2VfdXM7XFxuIFxcdFxcdHUzMiBod19hY3RpdmUsIGh3X2ludXNlO1xcbiBcXG4rXFx0XFx0bnJfYWN0aXZlKys7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBDb2xsZWN0IHVudXNlZCBhbmQgd2luZCB2dGltZSBjbG9zZXIgdG8gdm5vdyB0byBwcmV2ZW50XFxuIFxcdFxcdCAqIGlvY2dzIGZyb20gYWNjdW11bGF0aW5nIGEgbGFyZ2UgYW1vdW50IG9mIGJ1ZGdldC5cXG5AQCAtMjQ2MCw2ICsyNDY5LDggQEAgc3RhdGljIHZvaWQgaW9jX3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG4gXFx0XFx0aW9jX3JlZnJlc2hfdnJhdGUoaW9jLCBcXHUwMDI2bm93KTtcXG4gXFx0fVxcbiBcXG4rXFx0dHJhY2VfaW9jb3N0X2lvY190aWNrKGlvYywgbnJfYWN0aXZlLCB1c2FnZV91c19zdW0pO1xcbitcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZpb2MtXFx1MDAzZWxvY2spO1xcbiB9XFxuIFxcbkBAIC0yNTcxLDEwICsyNTgyLDI4IEBAIHN0YXRpYyB2b2lkIGNhbGNfdnRpbWVfY29zdF9idWlsdGluKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZyxcXG4gXFxuIHN0YXRpYyB1NjQgY2FsY192dGltZV9jb3N0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZywgYm9vbCBpc19tZXJnZSlcXG4ge1xcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxcbitcXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7XFxuIFxcdHU2NCBjb3N0O1xcbiBcXG4tXFx0Y2FsY192dGltZV9jb3N0X2J1aWx0aW4oYmlvLCBpb2NnLCBpc19tZXJnZSwgXFx1MDAyNmNvc3QpO1xcbi1cXHRyZXR1cm4gY29zdDtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRtb2RlbCA9IHJjdV9kZXJlZmVyZW5jZShpb2NnLVxcdTAwM2Vpb2MtXFx1MDAzZW1vZGVsKTtcXG4rXFx0aWYgKG1vZGVsKSB7XFxuK1xcdFxcdGNvc3QgPSBtb2RlbC1cXHUwMDNlY2FsY19jb3N0KGJpby1cXHUwMDNlYmlfb3BmLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvcixcXG4rXFx0XFx0XFx0XFx0XFx0aW9jZ190b19ibGtnKGlvY2cpLVxcdTAwM2VibGtjZyxcXG4rXFx0XFx0XFx0XFx0XFx0aXNfbWVyZ2UgPyBJT0NPU1RfQ09TVF9GX01FUkdFIDogMCk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbisjZW5kaWZcXG4rXFx0e1xcbitcXHRcXHR1NjQgY29zdDtcXG4rXFxuK1xcdFxcdGNhbGNfdnRpbWVfY29zdF9idWlsdGluKGJpbywgaW9jZywgaXNfbWVyZ2UsIFxcdTAwMjZjb3N0KTtcXG4rXFx0XFx0cmV0dXJuIGNvc3Q7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYyxcXG5AQCAtMjU5NiwxMCArMjYyNSwyOCBAQCBzdGF0aWMgdm9pZCBjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvYyAqaW9jLFxcbiBcXG4gc3RhdGljIHU2NCBjYWxjX3NpemVfdnRpbWVfY29zdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYylcXG4ge1xcbi1cXHR1NjQgY29zdDtcXG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcXG4rXFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xcbiBcXG4tXFx0Y2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihycSwgaW9jLCBcXHUwMDI2Y29zdCk7XFxuLVxcdHJldHVybiBjb3N0O1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG1vZGVsID0gcmN1X2RlcmVmZXJlbmNlKGlvYy1cXHUwMDNlbW9kZWwpO1xcbitcXHRpZiAobW9kZWwgXFx1MDAyNlxcdTAwMjYgcnEtXFx1MDAzZWJpbyBcXHUwMDI2XFx1MDAyNiBycS1cXHUwMDNlYmlvLVxcdTAwM2ViaV9ibGtnKSB7XFxuK1xcdFxcdHU2NCBjb3N0O1xcbitcXG4rXFx0XFx0Y29zdCA9IG1vZGVsLVxcdTAwM2VjYWxjX2Nvc3QocnEtXFx1MDAzZWNtZF9mbGFncywgYmxrX3JxX2J5dGVzKHJxKSxcXG4rXFx0XFx0XFx0XFx0XFx0YmxrX3JxX3BvcyhycSksXFxuK1xcdFxcdFxcdFxcdFxcdHJxLVxcdTAwM2ViaW8tXFx1MDAzZWJpX2Jsa2ctXFx1MDAzZWJsa2NnLCAwKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiBtaW4oY29zdCwgVlRJTUVfUEVSX1NFQyk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuKyNlbmRpZlxcbitcXHR7XFxuK1xcdFxcdHU2NCBjb3N0O1xcbitcXG4rXFx0XFx0Y2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihycSwgaW9jLCBcXHUwMDI2Y29zdCk7XFxuK1xcdFxcdHJldHVybiBjb3N0O1xcbitcXHR9XFxuIH1cXG4gXFxuIGVudW0gb3Zlcl9idWRnZXRfYWN0aW9uIHtcXG5AQCAtMjkwMCw2ICsyOTQ3LDE5IEBAIHN0YXRpYyB2b2lkIGlvY19ycW9zX2V4aXQoc3RydWN0IHJxX3FvcyAqcnFvcylcXG4gXFxuIFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNmlvYy1cXHUwMDNldGltZXIpO1xcbiBcXHRmcmVlX3BlcmNwdShpb2MtXFx1MDAzZXBjcHVfc3RhdCk7XFxuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXFxuK1xcdHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xcbitcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aW9jLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0bW9kZWwgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlvYy1cXHUwMDNlbW9kZWwsXFxuK1xcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2aW9jLVxcdTAwM2Vsb2NrKSk7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihpb2MtXFx1MDAzZW1vZGVsLCBOVUxMKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZpb2MtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRpZiAobW9kZWwpXFxuK1xcdFxcdFxcdGlvY29zdF9icGZfbW9kZWxfcHV0KG1vZGVsKTtcXG4rXFx0fVxcbisjZW5kaWZcXG4gXFx0a2ZyZWUoaW9jKTtcXG4gfVxcbiBcXG5AQCAtMzQzOCwxMiArMzQ5OCwzMCBAQCBzdGF0aWMgdTY0IGlvY19jb3N0X21vZGVsX3ByZmlsbChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXFxuK1xcdHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsID1cXG4rXFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpb2MtXFx1MDAzZW1vZGVsLFxcbitcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmlvYy1cXHUwMDNlbG9jaykpO1xcbitcXG4rXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIGN0cmw9JXMgbW9kZWw9JXMgXFxcIlxcbitcXHRcXHRcXHQgICBcXFwicmJwcz0lbGx1IHJzZXFpb3BzPSVsbHUgcnJhbmRpb3BzPSVsbHUgXFxcIlxcbitcXHRcXHRcXHQgICBcXFwid2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGRuYW1lLCBtb2RlbCA/IFxcXCJicGZcXFwiIDpcXG4rXFx0XFx0XFx0XFx0ICAgaW9jLVxcdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPyBcXFwidXNlclxcXCIgOiBcXFwiYXV0b1xcXCIsXFxuK1xcdFxcdFxcdCAgIG1vZGVsID8gbW9kZWwtXFx1MDAzZW5hbWUgOiBcXFwibGluZWFyXFxcIixcXG4rXFx0XFx0XFx0ICAgdVtJX0xDT0VGX1JCUFNdLCB1W0lfTENPRUZfUlNFUUlPUFNdLFxcbitcXHRcXHRcXHQgICB1W0lfTENPRUZfUlJBTkRJT1BTXSwgdVtJX0xDT0VGX1dCUFNdLFxcbitcXHRcXHRcXHQgICB1W0lfTENPRUZfV1NFUUlPUFNdLCB1W0lfTENPRUZfV1JBTkRJT1BTXSk7XFxuK1xcdH1cXG4rI2Vsc2VcXG4gXFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIGN0cmw9JXMgbW9kZWw9bGluZWFyIFxcXCJcXG4gXFx0XFx0ICAgXFxcInJicHM9JWxsdSByc2VxaW9wcz0lbGx1IHJyYW5kaW9wcz0lbGx1IFxcXCJcXG4gXFx0XFx0ICAgXFxcIndicHM9JWxsdSB3c2VxaW9wcz0lbGx1IHdyYW5kaW9wcz0lbGx1XFxcXG5cXFwiLFxcbiBcXHRcXHQgICBkbmFtZSwgaW9jLVxcdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPyBcXFwidXNlclxcXCIgOiBcXFwiYXV0b1xcXCIsXFxuIFxcdFxcdCAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSwgdVtJX0xDT0VGX1JSQU5ESU9QU10sXFxuIFxcdFxcdCAgIHVbSV9MQ09FRl9XQlBTXSwgdVtJX0xDT0VGX1dTRVFJT1BTXSwgdVtJX0xDT0VGX1dSQU5ESU9QU10pO1xcbisjZW5kaWZcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZpb2MtXFx1MDAzZWxvY2spO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zNDU3LDYgKzM1MzUsMzcgQEAgc3RhdGljIGludCBpb2NfY29zdF9tb2RlbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBCaW5kIEBuYW1lIChlbXB0eSA9IGJ1aWx0aW4gbGluZWFyIG1vZGVsKSBhcyB0aGUgYWN0aXZlIGNvc3QgbW9kZWwgb2ZcXG4rICogQGlvYy4gIFRoZSByZWdpc3RyeSBsb29rdXAgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGhhcHBlbiBvdXRzaWRlXFxuKyAqIGlvYy1cXHUwMDNlbG9jazsgdGhlIHBvaW50ZXIgc3dhcCBoYXBwZW5zIHVuZGVyIGl0LlxcbisgKi9cXG4rc3RhdGljIGludCBpb2NfYnBmX21vZGVsX2JpbmQoc3RydWN0IGlvYyAqaW9jLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXFxuK1xcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpuZXcgPSBOVUxMLCAqb2xkO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKG5hbWVbMF0pIHtcXG4rXFx0XFx0cmV0ID0gaW9jb3N0X2JwZl9tb2RlbF9nZXQobmFtZSwgXFx1MDAyNm5ldyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuK1xcdG9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLVxcdTAwM2Vtb2RlbCxcXG4rXFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZpb2MtXFx1MDAzZWxvY2spKTtcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGlvYy1cXHUwMDNlbW9kZWwsIG5ldyk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aW9jLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmIChvbGQpXFxuK1xcdFxcdGlvY29zdF9icGZfbW9kZWxfcHV0KG9sZCk7XFxuK1xcdHJldHVybiAwO1xcbisjZWxzZVxcbitcXHRyZXR1cm4gbmFtZVswXSA/IC1FTk9FTlQgOiAwO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgY29zdF9jdHJsX3Rva2VucyA9IHtcXG4gXFx0eyBDT1NUX0NUUkwsXFx0XFx0XFxcImN0cmw9JXNcXFwiXFx0fSxcXG4gXFx0eyBDT1NUX01PREVMLFxcdFxcdFxcXCJtb2RlbD0lc1xcXCJcXHR9LFxcbkBAIC0zNDgyLDYgKzM1OTEsNyBAQCBzdGF0aWMgc3NpemVfdCBpb2NfY29zdF9tb2RlbF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmlucHV0LFxcbiBcXHRzdHJ1Y3QgaW9jICppb2M7XFxuIFxcdHU2NCB1W05SX0lfTENPRUZTXTtcXG4gXFx0Ym9vbCB1c2VyO1xcbitcXHRjaGFyIGJwZl9tb2RlbFtJT0NPU1RfTU9ERUxfTkFNRV9MRU5dO1xcbiBcXHRjaGFyICpib2R5LCAqcDtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTM1MTIsNiArMzYyMiw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuIFxcdG1lbWNweSh1LCBpb2MtXFx1MDAzZXBhcmFtcy5pX2xjb2Vmcywgc2l6ZW9mKHUpKTtcXG4gXFx0dXNlciA9IGlvYy1cXHUwMDNldXNlcl9jb3N0X21vZGVsO1xcbitcXHRicGZfbW9kZWxbMF0gPSAnXFxcXDAnO1xcbiBcXG4gXFx0cmV0ID0gLUVJTlZBTDtcXG4gXFxuQEAgLTM1MzMsMTEgKzM2NDQsMTYgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcXG4gXFx0XFx0XFx0XFx0dXNlciA9IHRydWU7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdFxcdGJwZl9tb2RlbFswXSA9ICdcXFxcMCc7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRjYXNlIENPU1RfTU9ERUw6XFxuIFxcdFxcdFxcdG1hdGNoX3N0cmxjcHkoYnVmLCBcXHUwMDI2YXJnc1swXSwgc2l6ZW9mKGJ1ZikpO1xcbi1cXHRcXHRcXHRpZiAoc3RyY21wKGJ1ZiwgXFxcImxpbmVhclxcXCIpKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAoYnVmLCBcXFwibGluZWFyXFxcIikpIHtcXG4rXFx0XFx0XFx0XFx0LyogYmFjayB0byB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgKi9cXG4rXFx0XFx0XFx0XFx0YnBmX21vZGVsWzBdID0gJ1xcXFwwJztcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bWF0Y2hfc3RybGNweShicGZfbW9kZWwsIFxcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnBmX21vZGVsKSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0zNTYzLDYgKzM2NzksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcXG4gdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBCaW5kIHRoZSBCUEYgbW9kZWwgb3V0c2lkZSBpb2MtXFx1MDAzZWxvY2s6IHRoZSByZWdpc3RyeSBsb29rdXBcXG4rXFx0ICogdGFrZXMgdGhlIHJlZ2lzdHJhdGlvbiBtdXRleCBhbmQgdGhlIG9sZCBtb2RlbCdzIHJlZmVyZW5jZVxcbitcXHQgKiBpcyBkcm9wcGVkIGFmdGVyIHRoZSBzd2FwLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldCA9IGlvY19icGZfbW9kZWxfYmluZChpb2MsIGJwZl9tb2RlbCk7XFxuK1xcbiBcXHRibGtfbXFfdW5xdWllc2NlX3F1ZXVlKHEpO1xcbiBcXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmggYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2EwODU1ZWZiNjEwN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaFxcbkBAIC0wLDAgKzEsODIgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfTElOVVhfQkxLX0lPQ09TVF9IXFxuKyNkZWZpbmUgX0xJTlVYX0JMS19JT0NPU1RfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtfdHlwZXMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgSU9DT1NUX01PREVMX05BTUVfTEVOXFx0MTZcXG4rXFxuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXFxuK1xcbitzdHJ1Y3QgYmxrY2c7XFxuK1xcbisvKlxcbisgKiBQbHVnZ2FibGUgY29zdCBtb2RlbCBpbnRlcmZhY2UgZm9yIGJsay1pb2Nvc3QuXFxuKyAqXFxuKyAqIEEgQlBGIHN0cnVjdF9vcHMgaW1wbGVtZW50YXRpb24gcmVnaXN0ZXJlZCBhZ2FpbnN0IFxcXCJpb2Nvc3RfbW9kZWxfb3BzXFxcIlxcbisgKiBmdWxseSByZXBsYWNlcyB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgb24gdGhlIGRldmljZXMgaXQgaXMgYm91bmQgdG9cXG4rICogdGhyb3VnaCBpby5jb3N0Lm1vZGVsLiAgVGhlIG1vZGVsIG93bnMgcHJpY2luZyBmb3IgZXZlcnkgSU8gb24gYSBib3VuZFxcbisgKiBkZXZpY2U6IGl0IHByaWNlcyBhbGwgb3BlcmF0aW9ucywgaW5jbHVkaW5nIGZsdXNoZXMsIGFuZCBib3RoIHRoZSBiaW9cXG4rICogY2hhcmdpbmcgcGF0aCBhbmQgdGhlIHJlcXVlc3QtbGV2ZWwgc2l6aW5nIHBhdGggY29uc3VsdCBpdC5cXG4rICpcXG4rICogY2FsY19jb3N0KCkgaXMgY2FsbGVkIGZyb20gdGhlIElPIHN1Ym1pc3Npb24gcGF0aCB3aXRoIFJDVSByZWFkIGxvY2tcXG4rICogaGVsZCBhbmQgbXVzdCBub3Qgc2xlZXAuICBJdCByZXR1cm5zIHRoZSBjb3N0IG9mIHRoZSBJTyBpbiB2dGltZVxcbisgKiB1bml0cywgd2hlcmUgMSBzZWNvbmQgb2YgZGV2aWNlIHRpbWUgZXF1YWxzIFZUSU1FX1BFUl9TRUMgKDJeMzcsXFxuKyAqIGF2YWlsYWJsZSB0byBCUEYgcHJvZ3JhbXMgdGhyb3VnaCB2bWxpbnV4LmgpLiAgVGhlIHJldHVybmVkIHZhbHVlIGlzXFxuKyAqIGNsYW1wZWQgdG8gMSBzZWNvbmQgb2YgZGV2aWNlIHRpbWUgcGVyIElPLlxcbisgKlxcbisgKiBUaGUgbW9kZWwgaXMgcGFzc2VkIHRoZSBibGtjZyBvZiB0aGUgaXNzdWluZyBjZ3JvdXAgc28gaXQgY2FuIGtlZXBcXG4rICogcGVyLWNncm91cCBzdGF0ZS4gIGJsa2NnX29ubGluZSgpL2Jsa2NnX29mZmxpbmUoKSBhcmUgb3B0aW9uYWxcXG4rICogY2FsbGJhY2tzIG1pcnJvcmluZyB0aGUgYmxrY2cgY3NzIGxpZmVjeWNsZTogc3RhdGUgY3JlYXRlZCBvbiBvbmxpbmVcXG4rICogKG9yIGxhemlseSBvbiBmaXJzdCB1c2UpIG11c3QgYmUgcmVsZWFzZWQgb24gb2ZmbGluZS5cXG4rICpcXG4rICogVGhlIHJlZ2lzdHJhdGlvbiBhbmQgYmluZGluZyBtb2RlbCBmb2xsb3dzIHRoZSBUQ1AgY29uZ2VzdGlvblxcbisgKiBjb250cm9sIGZyYW1ld29yazogcmVnaXN0ZXJpbmcgYSBzdHJ1Y3Rfb3BzIG1ha2VzIHRoZSBtb2RlbCBhdmFpbGFibGVcXG4rICogYnkgaXRzIG5hbWUsIHdoaWxlIGlvLmNvc3QubW9kZWwgYmluZHMgb25lIHJlZ2lzdGVyZWQgbW9kZWwgdG8gYVxcbisgKiBkZXZpY2UuICBVbnJlZ2lzdGVyaW5nIHJlbW92ZXMgdGhlIG5hbWUgZnJvbSB0aGUgcmVnaXN0cnk7IGRldmljZXNcXG4rICogYWxyZWFkeSBib3VuZCBrZWVwIHVzaW5nIGl0IHVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW5cXG4rICogbW9kZWwuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBJT0NPU1RfTU9ERUxfTkFNRV9MRU5cXHQxNlxcbitcXG4rLypcXG4rICogaW9jb3N0LXNwZWNpZmljIGNhbGwgbWV0YWRhdGEgZm9yIGNhbGNfY29zdCgpJ3MgbW9kZWxfZmxhZ3NcXG4rICogYXJndW1lbnQ7IGV2ZXJ5dGhpbmcgZWxzZSwgaW5jbHVkaW5nIFJFUV9QUkVGTFVTSC9SRVFfRlVBLCBpc1xcbisgKiBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIG9wZiBhcmd1bWVudFxcbisgKi9cXG4rI2RlZmluZSBJT0NPU1RfQ09TVF9GX01FUkdFXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMClcXHQvKiBjYWxsZWQgZnJvbSBtZXJnZSBwYXRoICovXFxuK1xcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyB7XFxuK1xcdHU2NCAoKmNhbGNfY29zdCkodTY0IG9wZiwgdTY0IG5ieXRlcywgc2VjdG9yX3Qgc2VjdG9yLFxcbitcXHRcXHRcXHQgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKTtcXG4rXFx0dm9pZCAoKmJsa2NnX29ubGluZSkoc3RydWN0IGJsa2NnICpibGtjZyk7XFxuK1xcdHZvaWQgKCpibGtjZ19vZmZsaW5lKShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcXG4rXFxuK1xcdC8qIG1vZGVsIG5hbWUsIHVzZWQgdG8gc2VsZWN0IHRoZSBtb2RlbCB0aHJvdWdoIGlvLmNvc3QubW9kZWwgKi9cXG4rXFx0Y2hhciBuYW1lWzE2XTtcXG4rfTtcXG4rXFxuK2ludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKipvcHNwKTtcXG4rdm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKTtcXG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcXG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoc3RydWN0IGJsa2NnICpibGtjZyk7XFxuK1xcbisjZWxzZVxcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cXG4rXFxuK3N0cnVjdCBibGtjZztcXG4rc3RydWN0IGlvY29zdF9tb2RlbF9vcHM7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKipvcHNwKVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcykgeyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH1cXG4rXFxuKyNlbmRpZlxcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cXG4rI2VuZGlmXFx0LyogX0xJTlVYX0JMS19JT0NPU1RfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXFxuaW5kZXggZTc3MmIxYmM2MGQ2MC4uMmI5ZmYzNDhhNGY1MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXFxuQEAgLTE3OCw2ICsxNzgsNDYgQEAgVFJBQ0VfRVZFTlQoaW9jb3N0X2lvY192cmF0ZV9hZGosXFxuIFxcdClcXG4gKTtcXG4gXFxuKy8qXFxuKyAqIFBlcmlvZGljIHBlci1kZXZpY2Ugc3VtbWFyeSwgZW1pdHRlZCBvbmNlIHBlciBwZXJpb2QgZnJvbSB0aGUgdGFpbCBvZlxcbisgKiBpb2NfdGltZXJfZm4oKS4gIFVubGlrZSB0aGUgc3RhdGUtY2hhbmdlIGV2ZW50cyBhYm92ZSwgdGhpcyBmaXJlcyBldmVyeVxcbisgKiBwZXJpb2QgdGhlIGNvbnRyb2xsZXIgaXMgcnVubmluZywgaW5jbHVkaW5nIHN0ZWFkeSBzdGF0ZXMsIGFuZCBjYXJyaWVzXFxuKyAqIHRoZSBvdmVyYWxsIGNvbnRyb2xsZXIgc3RhdGUgc28gYmFzaWMgbW9uaXRvcmluZyBkb2Vzbid0IHJlcXVpcmUgZHJnbi5cXG4rICovXFxuK1RSQUNFX0VWRU5UKGlvY29zdF9pb2NfdGljayxcXG4rXFxuK1xcdFRQX1BST1RPKHN0cnVjdCBpb2MgKmlvYywgaW50IG5yX2FjdGl2ZSwgdTY0IHVzYWdlX3VzX3N1bSksXFxuK1xcbitcXHRUUF9BUkdTKGlvYywgbnJfYWN0aXZlLCB1c2FnZV91c19zdW0pLFxcbitcXG4rXFx0VFBfU1RSVUNUX19lbnRyeSAoXFxuK1xcdFxcdF9fc3RyaW5nKGRldm5hbWUsIGlvY19uYW1lKGlvYykpXFxuK1xcdFxcdF9fZmllbGQodTMyLCBwZXJpb2RfdXMpXFxuK1xcdFxcdF9fZmllbGQodTY0LCB2cmF0ZSlcXG4rXFx0XFx0X19maWVsZChpbnQsIGJ1c3lfbGV2ZWwpXFxuK1xcdFxcdF9fZmllbGQoaW50LCBucl9hY3RpdmUpXFxuK1xcdFxcdF9fZmllbGQodTMyLCB1c2FnZV9wY3QpXFxuK1xcdFxcdF9fZmllbGQoaW50LCBydW5uaW5nKVxcbitcXHQpLFxcbitcXG4rXFx0VFBfZmFzdF9hc3NpZ24oXFxuK1xcdFxcdF9fYXNzaWduX3N0cihkZXZuYW1lKTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlcGVyaW9kX3VzID0gaW9jLVxcdTAwM2VwZXJpb2RfdXM7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXZyYXRlID0gaW9jLVxcdTAwM2V2dGltZV9iYXNlX3JhdGU7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWJ1c3lfbGV2ZWwgPSBpb2MtXFx1MDAzZWJ1c3lfbGV2ZWw7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW5yX2FjdGl2ZSA9IG5yX2FjdGl2ZTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNldXNhZ2VfcGN0ID0gaW9jLVxcdTAwM2VwZXJpb2RfdXMgP1xcbitcXHRcXHRcXHRkaXZfdTY0KHVzYWdlX3VzX3N1bSAqIDEwMCwgaW9jLVxcdTAwM2VwZXJpb2RfdXMpIDogMDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlcnVubmluZyA9IGlvYy1cXHUwMDNlcnVubmluZztcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX3ByaW50ayhcXFwiWyVzXSBwZXJpb2Q9JXV1cyB2cmF0ZT0lbGx1IGJ1c3k9JWQgYWN0aXZlPSVkIHVzYWdlPSV1JSUgcnVubmluZz0lZFxcXCIsXFxuK1xcdFxcdF9fZ2V0X3N0cihkZXZuYW1lKSwgX19lbnRyeS1cXHUwMDNlcGVyaW9kX3VzLCBfX2VudHJ5LVxcdTAwM2V2cmF0ZSxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlYnVzeV9sZXZlbCwgX19lbnRyeS1cXHUwMDNlbnJfYWN0aXZlLCBfX2VudHJ5LVxcdTAwM2V1c2FnZV9wY3QsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXJ1bm5pbmdcXG4rXFx0KVxcbispO1xcbitcXG4gVFJBQ0VfRVZFTlQoaW9jb3N0X2lvY2dfZm9yZ2l2ZV9kZWJ0LFxcbiBcXG4gXFx0VFBfUFJPVE8oc3RydWN0IGlvY19ncSAqaW9jZywgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGlvY19ub3cgKm5vdyxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcXG5pbmRleCAyZjc5Njg4ZGNmN2NlLi42N2E2MzBjYjU2MTQ4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXFxuQEAgLTEzOCwzICsxMzgsNSBAQCBDT05GSUdfU01DX0hTX0NUUkxfQlBGPXlcXG4gQ09ORklHX0RJQlM9eVxcbiBDT05GSUdfRElCU19MTz15XFxuIENPTkZJR19QTV9XQUtFTE9DS1M9eVxcbitDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1Q9eVxcbitDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGPXlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaW9jb3N0X21vZGVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTkzNDRiMTNmYmE5OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuY1xcbkBAIC0wLDAgKzEsMTkzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJpb2Nvc3RfbW9kZWwuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaW9jb3N0X21zLnNrZWwuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFdyaXRlIGEgbGluZSB0byBpby5jb3N0Lm1vZGVsIHdpdGggd3JpdGUoMikgYW5kIHJldHVybiB0aGUgZXJybm8gb2ZcXG4rICogdGhlIGZhaWxlZCB3cml0ZSwgb3IgMCBvbiBzdWNjZXNzLiAgc3RkaW8gaXMgbm90IHVzZWQgaGVyZSBvblxcbisgKiBwdXJwb3NlOiB0aGUga2VybmVsJ3MgcmVqZWN0aW9uIGhhcHBlbnMgaW4gdGhlIHdyaXRlKCkgc3lzY2FsbCxcXG4rICogbm90IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIGNvcHksIGFuZCBldmVyeSB3cml0ZSwgaW5jbHVkaW5nXFxuKyAqIHRoZSBlcnJvciBwYXRocyBvZiB0aGUgY2FsbGVycyBiZWxvdywgaXMgY2hlY2tlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgd3JpdGVfY29zdF9tb2RlbChjb25zdCBjaGFyICpidWYpXFxuK3tcXG4rXFx0aW50IGZkLCBlcnIgPSAwO1xcbitcXHRzc2l6ZV90IG47XFxuK1xcbitcXHRmZCA9IG9wZW4oXFxcIi9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWxcXFwiLCBPX1dST05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBlcnJubztcXG4rXFx0biA9IHdyaXRlKGZkLCBidWYsIHN0cmxlbihidWYpKTtcXG4rXFx0aWYgKG4gXFx1MDAzYyAwKVxcbitcXHRcXHRlcnIgPSBlcnJubztcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZWFkIGJhY2sgdGhlIGlvLmNvc3QubW9kZWwgbGluZSBvZiBkZXYgYW5kIGNvcHkgdGhlIG1vZGVsPSB2YWx1ZVxcbisgKiBpbnRvIEBtb2RlbC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLlxcbisgKi9cXG4rc3RhdGljIGludCByZWFkYmFja19tb2RlbChjb25zdCBjaGFyICpkZXYsIGNoYXIgKm1vZGVsLCBzaXplX3QgbW9kZWxfc3opXFxuK3tcXG4rXFx0Y2hhciBsaW5lWzI1Nl0sIHdvcmRbMjU2XSwgKm0sICplbmQ7XFxuK1xcdEZJTEUgKmZwO1xcbitcXHRpbnQgZm91bmQgPSAwO1xcbitcXG4rXFx0ZnAgPSBmb3BlbihcXFwiL3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5tb2RlbFxcXCIsIFxcXCJyXFxcIik7XFxuK1xcdGlmICghZnApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XFxuK1xcdFxcdGlmIChzc2NhbmYobGluZSwgXFxcIiUyNTVzXFxcIiwgd29yZCkgPT0gMSBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKHdvcmQsIGRldikpIHtcXG4rXFx0XFx0XFx0Zm91bmQgPSAxO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGZjbG9zZShmcCk7XFxuK1xcdGlmICghZm91bmQpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdG0gPSBzdHJzdHIobGluZSwgXFxcIm1vZGVsPVxcXCIpO1xcbitcXHRpZiAoIW0pXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0bSArPSBzdHJsZW4oXFxcIm1vZGVsPVxcXCIpO1xcbitcXHRlbmQgPSBtO1xcbitcXHR3aGlsZSAoKmVuZCBcXHUwMDI2XFx1MDAyNiAhaXNzcGFjZSgqZW5kKSlcXG4rXFx0XFx0ZW5kKys7XFxuK1xcdHNucHJpbnRmKG1vZGVsLCBtb2RlbF9zeiwgXFxcIiUuKnNcXFwiLCAoaW50KShlbmQgLSBtKSwgbSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBCaW5kIHRoZSBuYW1lZCBtb2RlbCB0byBhIGRldmljZSB3aXRoIFxcXCJtb2RlbD1cXHUwMDNjbmFtZVxcdTAwM2VcXFwiLCB2ZXJpZnkgdGhlXFxuKyAqIHJlYWRiYWNrIGFuZCByZXN0b3JlIHRoZSBidWlsdGluIG1vZGVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXFxuKyAqL1xcbitzdGF0aWMgaW50IGJpbmRfbW9kZWwoY29uc3QgY2hhciAqZGV2LCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGNoYXIgYnVmWzMwMF0sIGdvdFs2NF07XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJXMgbW9kZWw9JXNcXFxcblxcXCIsIGRldiwgbmFtZSk7XFxuK1xcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRDSEVDSyhmYWxzZSwgXFxcIndyaXRlX21vZGVsXFxcIiwgXFxcIndyaXRlIG1vZGVsPSVzOiAlc1xcXFxuXFxcIiwgbmFtZSxcXG4rXFx0XFx0ICAgICAgc3RyZXJyb3IoZXJyKSk7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXHRlcnIgPSByZWFkYmFja19tb2RlbChkZXYsIGdvdCwgc2l6ZW9mKGdvdCkpO1xcbitcXHRpZiAoZXJyIHx8IHN0cmNtcChnb3QsIG5hbWUpKSB7XFxuK1xcdFxcdENIRUNLKGZhbHNlLCBcXFwicmVhZGJhY2tfbW9kZWxcXFwiLCBcXFwiZ290IG1vZGVsPSVzIHdhbnQgJXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgIGVyciA/IFxcXCIobm9uZSlcXFwiIDogZ290LCBuYW1lKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHQvKiByZXN0b3JlIHRoZSBidWlsdGluIGxpbmVhciBtb2RlbDsgdGhlIHdyaXRlIGlzIGNoZWNrZWQgdG9vICovXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIlcyBtb2RlbD1saW5lYXJcXFxcblxcXCIsIGRldik7XFxuK1xcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRDSEVDSyhmYWxzZSwgXFxcInJlc3RvcmVfbGluZWFyXFxcIiwgXFxcIndyaXRlIG1vZGVsPWxpbmVhcjogJXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgIHN0cmVycm9yKGVycikpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoZSBkZXYgYXJndW1lbnQgbXVzdCBiZSBwcmVzZW50IGluIGlvLmNvc3QucW9zIGFscmVhZHksIHdoaWNoXFxuKyAqIG1lYW5zIGlvY29zdCBpcyBlbmFibGVkIGZvciBpdC5cXG4rICovXFxuK3N0YXRpYyBpbnQgZGV2X2hhc19pb2Nvc3QoY29uc3QgY2hhciAqZGV2KVxcbit7XFxuK1xcdGNoYXIgbGluZVsyNTZdLCB3b3JkWzI1Nl07XFxuK1xcdEZJTEUgKmZwO1xcbitcXHRpbnQgZm91bmQgPSAwO1xcbitcXG4rXFx0ZnAgPSBmb3BlbihcXFwiL3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5xb3NcXFwiLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIWZwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XFxuK1xcdFxcdGlmIChzc2NhbmYobGluZSwgXFxcIiUyNTVzXFxcIiwgd29yZCkgPT0gMSBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKHdvcmQsIGRldikpIHtcXG4rXFx0XFx0XFx0Zm91bmQgPSAxO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGZjbG9zZShmcCk7XFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4rLypcXG4rICogQmluZCB0aGUgMnggZXhhbXBsZSBtb2RlbCBhbmQgdmVyaWZ5IHRoZSBpby5jb3N0Lm1vZGVsIHJlYWRiYWNrLlxcbisgKiBJTyBhY2NvdW50aW5nIGl0c2VsZiBpcyBub3QgY2hlY2tlZCBoZXJlOyBpdCBuZWVkcyBhIGRldmljZSBkb2luZ1xcbisgKiByZWFsIElPIHVuZGVyIGlvY29zdCBhbmQgaXMgY292ZXJlZCBieSB0aGUga2VybmVsLXNpZGUgdmFsaWRhdGlvblxcbisgKiBkZXNjcmliZWQgaW4gdGhlIGNvdmVyIGxldHRlci5cXG4rICpcXG4rICogUmVxdWlyZXMgcm9vdCwgY2dyb3VwIHYyIGFuZCBhIGRldmljZSB3aXRoIGlvY29zdCBzdXBwb3J0LiAgVGhlXFxuKyAqIGRldmljZSBtdXN0IGJlIGdpdmVuIGFzIG1ham9yOm1pbm9yIGluICRJT0NPU1RfVEVTVF9ERVYsIG90aGVyd2lzZVxcbisgKiB0aGUgdGVzdCBpcyBza2lwcGVkLlxcbisgKi9cXG4rdm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWwodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaW9jb3N0X21vZGVsICpza2VsO1xcbitcXHRjaGFyIGJ1ZlszMDBdLCAqZGV2O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZGV2ID0gZ2V0ZW52KFxcXCJJT0NPU1RfVEVTVF9ERVZcXFwiKTtcXG4rXFx0aWYgKCFkZXYgfHwgZ2V0ZXVpZCgpICE9IDApIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0aWYgKCFBU1NFUlRfVFJVRShkZXZfaGFzX2lvY29zdChkZXYpLCBcXFwiaW9jb3N0X21vdW50ZWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LypcXG4rXFx0ICogbmVnYXRpdmU6IGJpbmRpbmcgYW4gdW5rbm93biBtb2RlbCBuYW1lIG11c3QgYmUgcmVqZWN0ZWQsXFxuK1xcdCAqIHNvIGEgdHlwbyBjYW5ub3Qgc2lsZW50bHkgZGlzYWJsZSBjb3N0IG1vZGVsIHVwZGF0ZXNcXG4rXFx0ICovXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIlcyBtb2RlbD1ub19zdWNoX21vZGVsXFxcXG5cXFwiLCBkZXYpO1xcbitcXHRlcnIgPSB3cml0ZV9jb3N0X21vZGVsKGJ1Zik7XFxuK1xcdEFTU0VSVF9FUShlcnIsIEVOT0VOVCwgXFxcInVua25vd25fbW9kZWxfcmVqZWN0ZWRcXFwiKTtcXG4rXFxuK1xcdHNrZWwgPSBpb2Nvc3RfbW9kZWxfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5fbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBhdHRhY2hpbmcgdGhlIHN0cnVjdF9vcHMgcmVnaXN0ZXJzIHRoZSBtb2RlbCBieSBuYW1lICovXFxuK1xcdGVyciA9IGlvY29zdF9tb2RlbF9fYXR0YWNoKHNrZWwpO1xcbitcXHRpZiAoQVNTRVJUX09LKGVyciwgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsIFxcXCJpb2Nvc3RfMnhcXFwiKSwgXFxcImJpbmRfYW5kX3JlYWRiYWNrXFxcIik7XFxuK1xcbitcXHRpb2Nvc3RfbW9kZWxfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNhbWUgY2hlY2sgZm9yIHRoZSBtdWx0aS1zdHJlYW0gZXhhbXBsZSBtb2RlbC4gIE9ubHkgb25lIG1vZGVsIGNhblxcbisgKiBiZSBib3VuZCB0byBhIGRldmljZSBhdCBhIHRpbWU7IGJvdGggdGVzdHMgYmluZCBhbmQgcmVzdG9yZSwgc29cXG4rICogdGhleSBhcmUgc2VyaWFsIGFuZCBpbmRlcGVuZGVudC5cXG4rICovXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfaW9jb3N0X21vZGVsX3N0cmVhbXModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgaW9jb3N0X21zICpza2VsO1xcbitcXHRjaGFyICpkZXY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRkZXYgPSBnZXRlbnYoXFxcIklPQ09TVF9URVNUX0RFVlxcXCIpO1xcbitcXHRpZiAoIWRldiB8fCBnZXRldWlkKCkgIT0gMCkge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksIFxcXCJpb2Nvc3RfbW91bnRlZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsID0gaW9jb3N0X21zX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gaW9jb3N0X21zX19hdHRhY2goc2tlbCk7XFxuK1xcdGlmIChBU1NFUlRfT0soZXJyLCBcXFwiYXR0YWNoXFxcIikpXFxuK1xcdFxcdEFTU0VSVF9PSyhiaW5kX21vZGVsKGRldiwgXFxcImlvY29zdF9tc1xcXCIpLCBcXFwiYmluZF9hbmRfcmVhZGJhY2tcXFwiKTtcXG4rXFxuK1xcdGlvY29zdF9tc19fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21vZGVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaW9jb3N0X21vZGVsLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY4YWQ0MTdiMzU4NDhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXFxuQEAgLTAsMCArMSwxMTYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogRXhhbXBsZSBpb2Nvc3QgY29zdCBtb2RlbDogdGhlIGJ1aWx0aW4gbGluZWFyIEhERCBmb3JtdWxhIHdpdGggYWxsXFxuKyAqIGNvc3RzIGRvdWJsZWQuXFxuKyAqXFxuKyAqIFRoZSBjb25zdGFudHMgbWlycm9yIHdoYXQgY2FsY19sY29lZnMoKSBkZXJpdmVzIGZyb20gdGhlIEFVVE9QX0hERFxcbisgKiBkZWZhdWx0cyAocmJwcz0xNzQwMTkxNzYgcnNlcWlvcHM9NDE3MDggcnJhbmRpb3BzPTM3MCwgdy1zaWRlXFxuKyAqIGFuYWxvZykgaW4gdnRpbWUgdW5pdHMgd2hlcmUgMXMgPT0gMl4zNywgZXhwcmVzc2VkIHdpdGggdGhlIHNhbWVcXG4rICogcm91bmQtdXAgZGl2aXNpb25zIHNvIHRoZXkgY2Fubm90IGRyaWZ0IGZyb20gdGhlIGtlcm5lbC4gIEEgZGV2aWNlXFxuKyAqIGJvdW5kIHRvIHRoaXMgbW9kZWwgdGhyb3VnaCBpby5jb3N0Lm1vZGVsIGNoYXJnZXMgZXhhY3RseSB0d2ljZSB0aGVcXG4rICogYnVpbHRpbiBtb2RlbCB1bmRlciB0aGUgc2FtZSB3b3JrbG9hZCwgd2hpY2ggbWFrZXMgaXQgYSBjb252ZW5pZW50XFxuKyAqIHdheSB0byB2ZXJpZnkgdGhhdCBhY2NvdW50aW5nIGdvZXMgdGhyb3VnaCB0aGUgQlBGIHBhdGguXFxuKyAqXFxuKyAqIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nXFxuKyAqIGZsdXNoZXM6IHRoZXJlIGlzIG5vIGZhbGxiYWNrIHRvIHRoZSBidWlsdGluIG1vZGVsLCBhIGRhdGFsZXNzXFxuKyAqIFdSSVRFfFJFUV9QUkVGTFVTSCBpcyBwcmljZWQgYXMgYSBvbmUtcGFnZSB3cml0ZS5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuKy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovXFxuKyNkZWZpbmUgSU9DX1BBR0VfU0laRVxcdFxcdDQwOTZcXG4rI2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUXFx0M1xcdC8qIDUxMkIgc2VjdG9ycyB0byA0a0IgcGFnZXMgKi9cXG4rI2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVNcXHQ0MDk2XFx0LyogMTZNQiBzZWVrIHRocmVzaG9sZCAqL1xcbisjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0VcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcdC8qIG5vdCBpbiBCVEY6IGEgcGxhaW4gbWFjcm8gKi9cXG4rI2RlZmluZSBJT0NPU1RfUkVRX09QX01BU0tcXHQweGZmXFx0XFx0LyogUkVRX09QX01BU0ssIG5vdCBpbiBCVEYgKi9cXG4rXFxuKy8qXFxuKyAqIERJVjY0X1U2NF9ST1VORF9VUCAvIERJVl9ST1VORF9VUF9VTEwgZXF1aXZhbGVudHMsIGZvbGRlZCBhdFxcbisgKiBjb21waWxlIHRpbWVcXG4rICovXFxuKyNkZWZpbmUgUlUoeCwgeSlcXHRcXHQoKHgpIC8gKHkpICsgKCgoeCkgJSAoeSkpID8gMSA6IDApKVxcbitcXG4rI2RlZmluZSBSQlBTXFx0MTc0MDE5MTc2VUxMXFxuKyNkZWZpbmUgUlNFUUlPUFNcXHQ0MTcwOFVMTFxcbisjZGVmaW5lIFJSQU5ESU9QU1xcdDM3MFVMTFxcbisjZGVmaW5lIFdCUFNcXHQxNzgwNzU4NjZVTExcXG4rI2RlZmluZSBXU0VRSU9QU1xcdDQyNzA1VUxMXFxuKyNkZWZpbmUgV1JBTkRJT1BTXFx0Mzc4VUxMXFxuK1xcbisjZGVmaW5lIFJQQUdFXFx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSlcXG4rI2RlZmluZSBSU0VRSU9cXHQoUlUoVlRJTUVfUEVSX1NFQywgUlNFUUlPUFMpIC0gUlBBR0UpXFxuKyNkZWZpbmUgUlJBTkRJT1xcdChSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpXFxuKyNkZWZpbmUgV1BBR0VcXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKVxcbisjZGVmaW5lIFdTRVFJT1xcdChSVShWVElNRV9QRVJfU0VDLCBXU0VRSU9QUykgLSBXUEFHRSlcXG4rI2RlZmluZSBXUkFORElPXFx0KFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSlcXG4rXFxuKy8qXFxuKyAqIHBlci1jZ3JvdXAgY3Vyc29yIHN0b3JhZ2U6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXQsIHNvXFxuKyAqIHRoZSBtb2RlbCBuZXZlciBsZWFrcyBvciByZXVzZXMgc3RhbGUgcGVyLWNncm91cCBzdGF0ZVxcbisgKi9cXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9DR1JQX1NUT1JBR0UpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xcbit9IGN1cnNvcl9zdG9yZSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbit1NjQgQlBGX1BST0coaW9jb3N0XzJ4X2NhbGNfY29zdCwgdTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvcixcXG4rXFx0ICAgICBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgbW9kZWxfZmxhZ3MpXFxuK3tcXG4rXFx0dTY0IHBhZ2VzLCBzZWVrX3BhZ2VzID0gMCwgYmFzZSwgY29lZl9wYWdlLCByYW5kaW8sIGNvc3Q7XFxuK1xcbitcXHRpZiAoKG9wZiBcXHUwMDI2IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1JFQUQpIHtcXG4rXFx0XFx0YmFzZSA9IFJTRVFJTzsgY29lZl9wYWdlID0gUlBBR0U7IHJhbmRpbyA9IFJSQU5ESU87XFxuK1xcdH0gZWxzZSBpZiAoKG9wZiBcXHUwMDI2IElPQ09TVF9SRVFfT1BfTUFTSykgPT0gUkVRX09QX1dSSVRFKSB7XFxuK1xcdFxcdGJhc2UgPSBXU0VRSU87IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSBXUkFORElPO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBhIGZ1bGx5IG93bmluZyBtb2RlbCBtdXN0IHByaWNlIGV2ZXJ5IG9wOyB1bmtub3duXFxuK1xcdFxcdCAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGVcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGJhc2UgPSAwOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogbWlycm9yIHRoZSBidWlsdGluIHNpbmdsZSBwZXItY2dyb3VwIGN1cnNvcjogdGhlIG1vZGVsIGtlZXBzXFxuK1xcdCAqIGl0cyBvd24gY3Vyc29yIGtleWVkIGJ5IHRoZSBibGtjZyBhcmd1bWVudFxcbitcXHQgKi9cXG4rXFx0e1xcbitcXHRcXHRfX3U2NCAqY3Vyc29yLCBjdXI7XFxuK1xcbitcXHRcXHRjdXJzb3IgPSBicGZfY2dycF9zdG9yYWdlX2dldChcXHUwMDI2Y3Vyc29yX3N0b3JlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBibGtjZy1cXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTtcXG4rXFx0XFx0aWYgKCFjdXJzb3IpXFxuK1xcdFxcdFxcdHJldHVybiAyICogKGJhc2UgKyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlKTtcXG4rXFx0XFx0Y3VyID0gKmN1cnNvcjtcXG4rXFx0XFx0c2Vla19wYWdlcyA9IHNlY3RvciBcXHUwMDNlIGN1ciA/IHNlY3RvciAtIGN1ciA6IGN1ciAtIHNlY3RvcjtcXG4rXFx0XFx0c2Vla19wYWdlcyBcXHUwMDNlXFx1MDAzZT0gSU9DX1NFQ1RfVE9fUEFHRV9TSElGVDtcXG4rXFx0XFx0aWYgKHNlZWtfcGFnZXMgXFx1MDAzZSBMQ09FRl9SQU5ESU9fUEFHRVMpXFxuK1xcdFxcdFxcdGJhc2UgPSByYW5kaW87XFxuK1xcdFxcdGlmICghKG1vZGVsX2ZsYWdzIFxcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkpXFxuK1xcdFxcdFxcdCpjdXJzb3IgPSBzZWN0b3IgKyBSVShuYnl0ZXMsIDUxMik7XFxuK1xcdH1cXG4rXFxuK1xcdHBhZ2VzID0gUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKTtcXG4rXFx0aWYgKCFwYWdlcylcXG4rXFx0XFx0cGFnZXMgPSAxO1xcdC8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqL1xcbitcXHRpZiAobW9kZWxfZmxhZ3MgXFx1MDAyNiBJT0NPU1RfQ09TVF9GX01FUkdFKVxcbitcXHRcXHRiYXNlID0gMDtcXG4rXFxuK1xcdGNvc3QgPSAyICogKGJhc2UgKyBwYWdlcyAqIGNvZWZfcGFnZSk7XFxuK1xcdHJldHVybiBjb3N0O1xcbit9XFxuK1xcbitTRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG4rc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgaW9jb3N0XzJ4ID0ge1xcbitcXHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfMnhfY2FsY19jb3N0LFxcbitcXHQubmFtZSA9IFxcXCJpb2Nvc3RfMnhcXFwiLFxcbit9O1xcbitcXG4rY2hhciBMSUNFTlNFW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zY2M1N2MwM2QzYzg4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pb2Nvc3RfbXMuY1xcbkBAIC0wLDAgKzEsMTM2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIEV4YW1wbGUgbXVsdGktc3RyZWFtIHNlcXVlbnRpYWxpdHkgZGV0ZWN0aW9uIGNvc3QgbW9kZWwuXFxuKyAqXFxuKyAqIFRoZSBidWlsdGluIG1vZGVsIGtlZXBzIGEgc2luZ2xlIGN1cnNvciBwZXIgY2dyb3VwLCBzbyB0d29cXG4rICogaW50ZXJsZWF2ZWQgc2VxdWVudGlhbCByZWFkZXJzIGluIG9uZSBjZ3JvdXAgYXJlIGFsbCBwcmljZWQgcmFuZG9tXFxuKyAqIChtZWFzdXJlZCA4OXggb3ZlcmNoYXJnZSwgMTIuOXggdGhyb3VnaHB1dCBjb2xsYXBzZSksIHdoaWxlIHJhbmRvbVxcbisgKiBJTyBpbnNpZGUgYSBob3Qgd2luZG93IHNtYWxsZXIgdGhhbiB0aGUgMTZNQiBzZWVrIHRocmVzaG9sZCBpc1xcbisgKiBwcmljZWQgc2VxdWVudGlhbCAobWVhc3VyZWQgMTA3eCB1bmRlcmNoYXJnZSkuICBUaGlzIG1vZGVsIHJlcGxhY2VzXFxuKyAqIHRoZSBzaW5nbGUgY3Vyc29yIHdpdGggYSBwZXItY2dyb3VwIHRhYmxlIG9mIHN0cmVhbSBzbG90czogYW4gSU8gaXNcXG4rICogc2VxdWVudGlhbCBpZmYgaXRzIHNlY3RvciBtYXRjaGVzIHRoZSBleHBlY3RlZCBuZXh0IHNlY3RvciBvZiBhbnlcXG4rICogdHJhY2tlZCBzdHJlYW0uICBJbnRlcmxlYXZlZCBzdHJlYW1zIGtlZXAgdGhlaXIgb3duIHNsb3RzLCBhbmRcXG4rICogd2luZG93ZWQgcmFuZG9tIElPIHJhcmVseSBtYXRjaGVzIGEgbW92aW5nIGV4cGVjdGF0aW9uLlxcbisgKlxcbisgKiBTdHJlYW0gc3RhdGUgbGl2ZXMgaW4gYSBDR1JQX1NUT1JBR0UgbWFwLCBzbyBpdCBpcyBjcmVhdGVkIGFuZFxcbisgKiBmcmVlZCB3aXRoIHRoZSBjZ3JvdXAuICBUaGUgbW9kZWwgaW1wbGVtZW50cyB0aGUgZnVsbCBidWlsdGluXFxuKyAqIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nIGZsdXNoIHByaWNpbmcuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuKy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovXFxuKyNkZWZpbmUgSU9DX1BBR0VfU0laRVxcdFxcdDQwOTZcXG4rI2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUXFx0M1xcdC8qIDUxMkIgc2VjdG9ycyB0byA0a0IgcGFnZXMgKi9cXG4rI2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVNcXHQ0MDk2XFx0LyogMTZNQiBzZWVrIHRocmVzaG9sZCAqL1xcbisjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0VcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcdC8qIG5vdCBpbiBCVEY6IGEgcGxhaW4gbWFjcm8gKi9cXG4rI2RlZmluZSBJT0NPU1RfUkVRX09QX01BU0tcXHQweGZmXFx0XFx0LyogUkVRX09QX01BU0ssIG5vdCBpbiBCVEYgKi9cXG4rXFxuKy8qXFxuKyAqIERJVjY0X1U2NF9ST1VORF9VUCAvIERJVl9ST1VORF9VUF9VTEwgZXF1aXZhbGVudHMsIGZvbGRlZCBhdFxcbisgKiBjb21waWxlIHRpbWVcXG4rICovXFxuKyNkZWZpbmUgUlUoeCwgeSlcXHRcXHQoKHgpIC8gKHkpICsgKCgoeCkgJSAoeSkpID8gMSA6IDApKVxcbitcXG4rI2RlZmluZSBSQlBTXFx0MTc0MDE5MTc2VUxMXFxuKyNkZWZpbmUgUlNFUUlPUFNcXHQ0MTcwOFVMTFxcbisjZGVmaW5lIFJSQU5ESU9QU1xcdDM3MFVMTFxcbisjZGVmaW5lIFdCUFNcXHQxNzgwNzU4NjZVTExcXG4rI2RlZmluZSBXU0VRSU9QU1xcdDQyNzA1VUxMXFxuKyNkZWZpbmUgV1JBTkRJT1BTXFx0Mzc4VUxMXFxuK1xcbisjZGVmaW5lIFJQQUdFXFx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSlcXG4rI2RlZmluZSBSU0VRSU9cXHQoUlUoVlRJTUVfUEVSX1NFQywgUlNFUUlPUFMpIC0gUlBBR0UpXFxuKyNkZWZpbmUgUlJBTkRJT1xcdChSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpXFxuKyNkZWZpbmUgV1BBR0VcXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKVxcbisjZGVmaW5lIFdTRVFJT1xcdChSVShWVElNRV9QRVJfU0VDLCBXU0VRSU9QUykgLSBXUEFHRSlcXG4rI2RlZmluZSBXUkFORElPXFx0KFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSlcXG4rXFxuKyNkZWZpbmUgTlNMT1RTXFx0NFxcbitcXG4rc3RydWN0IHN0cmVhbXMge1xcbitcXHRfX3U2NCBleHBlY3RlZFtOU0xPVFNdO1xcdC8qIG5leHQgZXhwZWN0ZWQgc2VjdG9yLCBwZXIgc3RyZWFtICovXFxuK1xcdF9fdTY0IHN0YW1wW05TTE9UU107XFx0LyogTFJVIHN0YW1wLCAwID0gZW1wdHkgKi9cXG4rfTtcXG4rXFxuKy8qXFxuKyAqIHBlci1jZ3JvdXAgc3RyZWFtIHRhYmxlOiBrZXllZCBieSB0aGUgY2dyb3VwLCBmcmVlZCB3aXRoIGl0XFxuKyAqL1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0NHUlBfU1RPUkFHRSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3Qgc3RyZWFtcyk7XFxuK30gc3RyZWFtX3RhYiBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbit1NjQgQlBGX1BST0coaW9jb3N0X21zX2NhbGNfY29zdCwgdTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvcixcXG4rXFx0ICAgICBzdHJ1Y3QgYmxrY2cgKmJsa2NnLCB1NjQgbW9kZWxfZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHN0cmVhbXMgKnM7XFxuK1xcdHU2NCBwYWdlcywgYmFzZSwgY29lZl9wYWdlLCByYW5kaW8sIGFkdmFuY2UsIG5vdztcXG4rXFx0dTMyIGksIHZpY3RpbSA9IDAsIGZvdW5kID0gMHhGRkZGRkZGRjtcXG4rXFxuK1xcdGlmICgob3BmIFxcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfUkVBRCkge1xcbitcXHRcXHRiYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTztcXG4rXFx0fSBlbHNlIGlmICgob3BmIFxcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfV1JJVEUpIHtcXG4rXFx0XFx0YmFzZSA9IFdTRVFJTzsgY29lZl9wYWdlID0gV1BBR0U7IHJhbmRpbyA9IFdSQU5ESU87XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd25cXG4rXFx0XFx0ICogb3BzIGFyZSBwcmljZWQgYXMgYSBzaW5nbGUgcGFnZSB3cml0ZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwO1xcbitcXHR9XFxuK1xcdGFkdmFuY2UgPSBSVShuYnl0ZXMsIDUxMik7XFx0Lyogc2VjdG9ycyAqL1xcbitcXG4rXFx0cyA9IGJwZl9jZ3JwX3N0b3JhZ2VfZ2V0KFxcdTAwMjZzdHJlYW1fdGFiLCBibGtjZy1cXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0IEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7XFxuK1xcdGlmICghcylcXG4rXFx0XFx0cmV0dXJuIGJhc2UgKyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlO1xcbitcXG4rXFx0bm93ID0gYnBmX2t0aW1lX2dldF9ucygpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlNMT1RTOyBpKyspIHtcXG4rXFx0XFx0aWYgKHMtXFx1MDAzZWV4cGVjdGVkW2ldID09IHNlY3RvciBcXHUwMDI2XFx1MDAyNiBzLVxcdTAwM2VzdGFtcFtpXSkge1xcbitcXHRcXHRcXHRmb3VuZCA9IGk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKGZvdW5kICE9IDB4RkZGRkZGRkYpIHtcXG4rXFx0XFx0Lyogc2VxdWVudGlhbDoga2VlcCB0aGUgc2VxIGJhc2UgZnJvbSB0aGUgb3AgYnJhbmNoICovXFxuK1xcdFxcdHMtXFx1MDAzZWV4cGVjdGVkW2ZvdW5kXSA9IHNlY3RvciArIGFkdmFuY2U7XFxuK1xcdFxcdHMtXFx1MDAzZXN0YW1wW2ZvdW5kXSA9IG5vdztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0YmFzZSA9IHJhbmRpbztcXG4rXFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIE5TTE9UUzsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmIChzLVxcdTAwM2VzdGFtcFtpXSBcXHUwMDNjIHMtXFx1MDAzZXN0YW1wW3ZpY3RpbV0pXFxuK1xcdFxcdFxcdFxcdHZpY3RpbSA9IGk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cy1cXHUwMDNlZXhwZWN0ZWRbdmljdGltXSA9IHNlY3RvciArIGFkdmFuY2U7XFxuK1xcdFxcdHMtXFx1MDAzZXN0YW1wW3ZpY3RpbV0gPSBub3c7XFxuK1xcdH1cXG4rXFxuK1xcdHBhZ2VzID0gUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKTtcXG4rXFx0aWYgKCFwYWdlcylcXG4rXFx0XFx0cGFnZXMgPSAxO1xcdC8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqL1xcbitcXHRpZiAobW9kZWxfZmxhZ3MgXFx1MDAyNiBJT0NPU1RfQ09TVF9GX01FUkdFKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIG1lcmdlZCBiaW9zIHNraXAgdGhlIGJhc2UgY29zdCBidXQgc3RpbGwgYWR2YW5jZVxcbitcXHRcXHQgKiB0aGUgc3RyZWFtIHBvc2l0aW9uIGFib3ZlLCBzbyBhIG1lcmdlIGF0IHRoZVxcbitcXHRcXHQgKiBleHBlY3RlZCBzZWN0b3IgZG9lcyBub3QgbWFrZSB0aGUgZm9sbG93aW5nIG5ldyBJT1xcbitcXHRcXHQgKiBsb29rIHJhbmRvbVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YmFzZSA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBiYXNlICsgcGFnZXMgKiBjb2VmX3BhZ2U7XFxuK31cXG4rXFxuK1NFQyhcXFwiLnN0cnVjdF9vcHNcXFwiKVxcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfbXMgPSB7XFxuK1xcdC5jYWxjX2Nvc3QgPSAodm9pZCAqKWlvY29zdF9tc19jYWxjX2Nvc3QsXFxuK1xcdC5uYW1lID0gXFxcImlvY29zdF9tc1xcXCIsXFxuK307XFxuK1xcbitjaGFyIExJQ0VOU0VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMDo1Mi4zOTM4Nzk2MzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyNjM0MzIzNjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUX0JQRlwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvY19icGZfbW9kZWxfYmluZFwiLFxuICAgIFwiaW9jX2Nvc3RfbW9kZWxfd3JpdGVcIixcbiAgICBcImNhbGNfdnRpbWVfY29zdFwiLFxuICAgIFwiY2FsY19zaXplX3Z0aW1lX2Nvc3RcIixcbiAgICBcImJwZl9pb2Nvc3RfcmVnXCIsXG4gICAgXCJicGZfaW9jb3N0X3VucmVnXCIsXG4gICAgXCJicGZfaW9jb3N0X3ZhbGlkYXRlXCIsXG4gICAgXCJpb2Nvc3RfYnBmX21vZGVsX2dldFwiLFxuICAgIFwiaW9jb3N0X2JwZl9tb2RlbF9wdXRcIixcbiAgICBcImlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lXCIsXG4gICAgXCJpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEJQRiBzdHJ1Y3Rfb3BzIHN1cHBvcnQgKGlvY29zdF9tb2RlbF9vcHMpIGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdC4gSXQgaW50cm9kdWNlcyBuZXcga2VybmVsIGNvZGUgaW4gYmxvY2svYmxrLWlvY29zdC1icGYuYyBmb3IgcmVnaXN0ZXJpbmcsIHZhbGlkYXRpbmcsIGFuZCBtYW5hZ2luZyBCUEYgY29zdCBtb2RlbHMsIGFuZCB1cGRhdGVzIGJsb2NrL2Jsay1pb2Nvc3QuYyBhbmQgYmxvY2svYmxrLWNncm91cC5jIHRvIGludGVyZmFjZSB3aXRoIHRoZXNlIG1vZGVscyBkdXJpbmcgSU8gY29zdCBjYWxjdWxhdGlvbnMsIGNvbmZpZ3VyYXRpb24gd3JpdGVzLCBhbmQgY2dyb3VwIGxpZmVjeWNsZSBldmVudHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgQlBGIHN5c2NhbGxzIGFuZCBjZ3JvdXAgdjIgaW8uY29zdC5tb2RlbCBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjNTBkNDAzNDM4YjRiNGUxODhiMTQ4YTBhYjVjYzRhZjViNjdhMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNDoxMDo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuaW5kZXggOGQyNjAzNzUxYzUxYS4uYTY5MTBhZDdjMmQwMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5AQCAtMjEyNCw2ICsyMTI0LDE3IEBAIElPIEludGVyZmFjZSBGaWxlc1xuIFx0cGFyYW1ldGVycyBhcmUgd3JpdHRlbiB0bywgXCJjdHJsXCIgYmVjb21lIFwidXNlclwiIGFuZCB0aGVcbiBcdGF1dG9tYXRpYyBjaGFuZ2VzIGFyZSBkaXNhYmxlZC5cbiBcbitcdFdoZW4gQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiBpcyBlbmFibGVkLCBcIm1vZGVsXCIgYWxzbyBhY2NlcHRzXG4rXHR0aGUgbmFtZSBvZiBhIHJlZ2lzdGVyZWQgaW9jb3N0X21vZGVsX29wcyBCUEYgc3RydWN0X29wcyBtb2RlbDpcbitcdFwibW9kZWw9XHUwMDNjbmFtZVx1MDAzZVwiIGJpbmRzIHRoZSBtb2RlbCB0byB0aGUgZGV2aWNlIGFuZCB0aGUgbW9kZWwgZnVsbHlcbitcdHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBwcmljaW5nLCBmb3IgZXZlcnkgb3BlcmF0aW9uIGluY2x1ZGluZ1xuK1x0Zmx1c2hlczsgXCJtb2RlbD1saW5lYXJcIiAob3IgXCJjdHJsPWF1dG8vdXNlclwiKSByZXN0b3JlcyB0aGUgYnVpbHRpblxuK1x0bW9kZWwuICBXcml0aW5nIGFuIHVua25vd24gbmFtZSBmYWlscyB3aXRoIEVOT0VOVC4gIFVucmVnaXN0ZXJpbmdcbitcdGEgbW9kZWwgcmVtb3ZlcyBpdHMgbmFtZTsgZGV2aWNlcyBhbHJlYWR5IGJvdW5kIGtlZXAgdXNpbmcgaXRcbitcdHVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGZvbGxvd2luZyB0aGUgbGlmZXRpbWVcbitcdG1vZGVsIG9mIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuICBTZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmhcbitcdGZvciB0aGUgbW9kZWwgaW50ZXJmYWNlLlxuK1xuIFx0V2hlbiBcIm1vZGVsXCIgaXMgXCJsaW5lYXJcIiwgdGhlIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzIGFyZVxuIFx0ZGVmaW5lZC5cbiBcbmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZ1xuaW5kZXggNzBlNGE2NmQ5NDFmZi4uOTFlODA4Zjg2ZDI4ZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL0tjb25maWdcbisrKyBiL2Jsb2NrL0tjb25maWdcbkBAIC0yMzEsNCArMjMxLDEzIEBAIGNvbmZpZyBCTEtfRVJST1JfSU5KRUNUSU9OXG4gXG4gc291cmNlIFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkXCJcbiBcbitjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHRib29sIFwiRW5hYmxlIEJQRiBwbHVnZ2FibGUgY29zdCBtb2RlbCBzdXBwb3J0IGZvciB0aGUgY29zdCBJTyBjb250cm9sbGVyXCJcbitcdGRlcGVuZHMgb24gQkxLX0NHUk9VUF9JT0NPU1QgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuK1x0aGVscFxuK1x0IEVuYWJsaW5nIHRoaXMgb3B0aW9uIHJlZ2lzdGVycyB0aGUgXCJpb2Nvc3RfbW9kZWxfb3BzXCIgQlBGXG4rXHQgc3RydWN0X29wcyB0eXBlLCB3aGljaCBhbGxvd3MgYSBCUEYgcHJvZ3JhbSB0byBmdWxseSByZXBsYWNlXG4rXHQgdGhlIGJ1aWx0aW4gbGluZWFyIGNvc3QgbW9kZWwgb24gYSBkZXZpY2UgaXQgaXMgYm91bmQgdG9cbitcdCB0aHJvdWdoIGlvLmNvc3QubW9kZWwuXG4rXG4gZW5kaWYgIyBCTE9DS1xuZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGVcbmluZGV4IGU3YmQzMjBlM2Q2OTcuLmVlNWNlYmVlYTAwNmYgMTAwNjQ0XG4tLS0gYS9ibG9jay9NYWtlZmlsZVxuKysrIGIvYmxvY2svTWFrZWZpbGVcbkBAIC0zOSwzICszOSw0IEBAIG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT04pXHQrPSBibGstY3J5cHRvLm8gYmxrLWNyeXB0by1wcm9maWxlLm8gXFxcbiBcdFx0XHRcdFx0ICAgYmxrLWNyeXB0by1zeXNmcy5vXG4gb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcdCs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xuIG9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcdCs9IGhvbGRlci5vXG4rb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRilcdCs9IGJsay1pb2Nvc3QtYnBmLm9cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjg3Mjg3MTA0NTM1MWMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTMyLDYgKzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFwiYmxrLmhcIlxuICNpbmNsdWRlIFwiYmxrLWNncm91cC5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGstaW9jb3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcImJsay1pb3ByaW8uaFwiXG4gI2luY2x1ZGUgXCJibGstdGhyb3R0bGUuaFwiXG4gXG5AQCAtMTM0MSw2ICsxMzQyLDcgQEAgdm9pZCBibGtjZ191bnBpbl9vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2NnX2NzcylcbiAgKi9cbiBzdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIHtcbitcdGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShjc3NfdG9fYmxrY2coY3NzKSk7XG4gXHQvKiB0aGlzIHByZXZlbnRzIGFueW9uZSBmcm9tIGF0dGFjaGluZyBvciBtaWdyYXRpbmcgdG8gdGhpcyBibGtjZyAqL1xuIFx0d2JfYmxrY2dfb2ZmbGluZShjc3MpO1xuIFxuQEAgLTE0NDUsNiArMTQ0Nyw3IEBAIGJsa2NnX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiBcbiBzdGF0aWMgaW50IGJsa2NnX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiB7XG4rXHRpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShjc3NfdG9fYmxrY2coY3NzKSk7XG4gXHRzdHJ1Y3QgYmxrY2cgKnBhcmVudCA9IGJsa2NnX3BhcmVudChjc3NfdG9fYmxrY2coY3NzKSk7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgYi9ibG9jay9ibGstaW9jb3N0LWJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWVjNmRmMjc5NTk5MFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYmxvY2svYmxrLWlvY29zdC1icGYuY1xuQEAgLTAsMCArMSwyNTAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogYmxrLWlvY29zdDogQlBGIHN0cnVjdF9vcHMgcGx1bWJpbmcgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscy5cbisgKlxuKyAqIFJlZ2lzdGVycyB0aGUgXCJpb2Nvc3RfbW9kZWxfb3BzXCIgc3RydWN0X29wcyB0eXBlIGFuZCBtYWludGFpbnMgdGhlXG4rICogbmFtZSByZWdpc3RyeSBvZiByZWdpc3RlcmVkIG1vZGVscy4gIEEgcmVnaXN0ZXJlZCBtb2RlbCBpcyBib3VuZCB0b1xuKyAqIGEgZGV2aWNlIHRocm91Z2ggaW8uY29zdC5tb2RlbDsgc2VlIGluY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oLlxuKyAqL1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXHUwMDNlXG4rXG4rc3RhdGljIERFRklORV9NVVRFWChpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitzdGF0aWMgTElTVF9IRUFEKGlvY29zdF9icGZfbW9kZWxzKTtcbitcbisvKlxuKyAqIFRoZSByZWdpc3RyeSBob2xkcyBhIGJwZl9zdHJ1Y3Rfb3BzX2dldCgpIHJlZmVyZW5jZSBvYnRhaW5lZCBpbiAucmVnO1xuKyAqIC51bnJlZyBkcm9wcyBpdCwgc28gdGhlIGtkYXRhIG9mIGFuIHVucmVnaXN0ZXJlZCBtb2RlbCBzdGF5cyBhbGl2ZVxuKyAqIHdoaWxlIGFueSBkZXZpY2UgaXMgc3RpbGwgYm91bmQgdG8gaXQuXG4rICovXG4rc3RydWN0IGlvY29zdF9icGZfbW9kZWwge1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbitcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHM7XG4rfTtcbitcbisvKlxuKyAqIExvb2sgdXAgYSByZWdpc3RlcmVkIG1vZGVsIGJ5IG5hbWUgYW5kIGFjcXVpcmUgYSByZWZlcmVuY2Ugb24gaXQuXG4rICogVGhlIHJlZ2lzdHJ5IGxvY2sgaXMgaGVsZCBhY3Jvc3MgbG9va3VwIGFuZCBicGZfc3RydWN0X29wc19nZXQoKSBzb1xuKyAqIHRoZSBtb2RlbCBjYW5ub3QgYmUgdW5yZWdpc3RlcmVkIGluIGJldHdlZW4uXG4rICovXG4raW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0IGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcClcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcdGludCByZXQgPSAtRU5PRU5UO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKCFzdHJjbXAobS1cdTAwM2VvcHMtXHUwMDNlbmFtZSwgbmFtZSkpIHtcbitcdFx0XHRpZiAoYnBmX3N0cnVjdF9vcHNfZ2V0KG0tXHUwMDNlb3BzKSkge1xuK1x0XHRcdFx0Km9wc3AgPSBtLVx1MDAzZW9wcztcbitcdFx0XHRcdHJldCA9IDA7XG4rXHRcdFx0fVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbit2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpXG4re1xuK1x0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqXG4raW9jb3N0X2JwZl9tb2RlbF9sb29rdXAoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKG0tXHUwMDNlb3BzID09IG9wcylcbitcdFx0XHRyZXR1cm4gbTtcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpXG4re1xuK1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XG4rXHRcdGlmIChtLVx1MDAzZW9wcy1cdTAwM2VibGtjZ19vbmxpbmUpXG4rXHRcdFx0bS1cdTAwM2VvcHMtXHUwMDNlYmxrY2dfb25saW5lKGJsa2NnKTtcbitcdH1cbit9XG4rXG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoc3RydWN0IGJsa2NnICpibGtjZylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKG0tXHUwMDNlb3BzLVx1MDAzZWJsa2NnX29mZmxpbmUpXG4rXHRcdFx0bS1cdTAwM2VvcHMtXHUwMDNlYmxrY2dfb2ZmbGluZShibGtjZyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9tb2RlbF9pbml0KHN0cnVjdCBidGYgKmJ0Zilcbit7XG4rXHRzMzIgdHlwZV9pZDtcbitcbitcdHR5cGVfaWQgPSBidGZfZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBcImlvY29zdF9tb2RlbF9vcHNcIiwgQlRGX0tJTkRfU1RSVUNUKTtcbitcdGlmICh0eXBlX2lkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgYm9vbCBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcbitcdFx0XHRcdCAgICAgICBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYWNjZXNzX2F1eCAqaW5mbylcbit7XG4rXHRyZXR1cm4gYnBmX3RyYWNpbmdfYnRmX2N0eF9hY2Nlc3Mob2ZmLCBzaXplLCB0eXBlLCBwcm9nLCBpbmZvKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG4rYnBmX2lvY29zdF9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXG4rXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0c3dpdGNoIChmdW5jX2lkKSB7XG4rI2lmZGVmIENPTkZJR19DR1JPVVBTXG4rXHRjYXNlIEJQRl9GVU5DX2NncnBfc3RvcmFnZV9nZXQ6XG4rXHRcdHJldHVybiBcdTAwMjZicGZfY2dycF9zdG9yYWdlX2dldF9wcm90bztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBicGZfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0LyogY2FsY19jb3N0KCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkICovXG4rXHRpZiAocHJvZy1cdTAwM2VzbGVlcGFibGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4rXHRcdFx0XHQgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSlcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqdW9wcyA9IHVkYXRhO1xuK1x0dTMyIG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODtcbitcbitcdHN3aXRjaCAobW9mZikge1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcywgbmFtZSk6XG4rXHRcdGlmIChicGZfb2JqX25hbWVfY3B5KG9wcy1cdTAwM2VuYW1lLCB1b3BzLVx1MDAzZW5hbWUsXG4rXHRcdFx0XHQgICAgIHNpemVvZihvcHMtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBicGZfaW9jb3N0X3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxuK3tcbitcdHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTtcbitcbitcdHJldHVybiBvcHMtXHUwMDNlY2FsY19jb3N0ID8gMCA6IC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKCFicGZfc3RydWN0X29wc19nZXQob3BzKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRtID0ga3phbGxvYyhzaXplb2YoKm0pLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbSkge1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1x0e1xuK1x0XHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqb3RoZXI7XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob3RoZXIsIFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAob3RoZXItXHUwMDNlb3BzLVx1MDAzZW5hbWUsIG9wcy1cdTAwM2VuYW1lKSkge1xuK1x0XHRcdFx0cmV0ID0gLUVFWElTVDtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0aWYgKCFyZXQpIHtcbitcdFx0bS1cdTAwM2VvcHMgPSBvcHM7XG4rXHRcdGxpc3RfYWRkKFx1MDAyNm0tXHUwMDNlbGlzdCwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMpO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1xuK1x0aWYgKHJldCkge1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0a2ZyZWUobSk7XG4rXHR9XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBicGZfaW9jb3N0X3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4re1xuK1x0c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhO1xuK1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1x0bSA9IGlvY29zdF9icGZfbW9kZWxfbG9va3VwKG9wcyk7XG4rXHRpZiAobSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZtLVx1MDAzZWxpc3QpO1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0a2ZyZWUobSk7XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfaW9jb3N0X3ZlcmlmaWVyX29wcyA9IHtcbitcdC5nZXRfZnVuY19wcm90byA9IGJwZl9pb2Nvc3RfZ2V0X2Z1bmNfcHJvdG8sXG4rXHQuaXNfdmFsaWRfYWNjZXNzID0gYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MsXG4rfTtcbitcbitzdGF0aWMgdTY0IGJwZl9pb2Nvc3RfY2FsY19jb3N0X3N0dWIodTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvcixcbitcdFx0XHRcdCAgICAgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IGZsYWdzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgX19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMgPSB7XG4rXHQuY2FsY19jb3N0ID0gYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1Yixcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2lvY29zdF9tb2RlbF9vcHMgPSB7XG4rXHQudmVyaWZpZXJfb3BzID0gXHUwMDI2YnBmX2lvY29zdF92ZXJpZmllcl9vcHMsXG4rXHQuaW5pdCA9IGJwZl9pb2Nvc3RfbW9kZWxfaW5pdCxcbitcdC5jaGVja19tZW1iZXIgPSBicGZfaW9jb3N0X2NoZWNrX21lbWJlcixcbitcdC5pbml0X21lbWJlciA9IGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXIsXG4rXHQudmFsaWRhdGUgPSBicGZfaW9jb3N0X3ZhbGlkYXRlLFxuK1x0LnJlZyA9IGJwZl9pb2Nvc3RfcmVnLFxuK1x0LnVucmVnID0gYnBmX2lvY29zdF91bnJlZyxcbitcdC5uYW1lID0gXCJpb2Nvc3RfbW9kZWxfb3BzXCIsXG4rXHQuY2ZpX3N0dWJzID0gXHUwMDI2X19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMsXG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9pb2Nvc3RfaW5pdCh2b2lkKVxuK3tcbitcdHJldHVybiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcdTAwMjZicGZfaW9jb3N0X21vZGVsX29wcywgaW9jb3N0X21vZGVsX29wcyk7XG4rfVxuK2xhdGVfaW5pdGNhbGwoYnBmX2lvY29zdF9pbml0KTtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jb3N0LmMgYi9ibG9jay9ibGstaW9jb3N0LmNcbmluZGV4IDI3NDViZmZjZDVlZWYuLmJjY2RiZDI0OTZkODMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstaW9jb3N0LmNcbisrKyBiL2Jsb2NrL2Jsay1pb2Nvc3QuY1xuQEAgLTE3Nyw2ICsxNzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhcnNlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbG9jYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9sb2NhbDY0LmhcdTAwM2VcbkBAIC00NDUsNiArNDQ2LDExIEBAIHN0cnVjdCBpb2Mge1xuIFx0aW50XHRcdFx0XHRhdXRvcF9pZHg7XG4gXHRib29sXHRcdFx0XHR1c2VyX3Fvc19wYXJhbXM6MTtcbiBcdGJvb2xcdFx0XHRcdHVzZXJfY29zdF9tb2RlbDoxO1xuK1xuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHQvKiBib3VuZCBCUEYgY29zdCBtb2RlbCwgTlVMTCA9IGJ1aWx0aW4gbGluZWFyIG1vZGVsICovXG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wc1x0X19yY3UgKm1vZGVsO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IGlvY2dfcGNwdV9zdGF0IHtcbkBAIC0yMjM4LDYgKzIyNDQsNyBAQCBzdGF0aWMgdm9pZCBpb2NfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuIFx0c3RydWN0IGlvY19ub3cgbm93O1xuIFx0TElTVF9IRUFEKHN1cnBsdXNlcyk7XG4gXHRpbnQgbnJfZGVidG9ycywgbnJfc2hvcnRhZ2VzID0gMCwgbnJfbGFnZ2luZyA9IDA7XG4rXHRpbnQgbnJfYWN0aXZlID0gMDtcbiBcdHU2NCB1c2FnZV91c19zdW0gPSAwO1xuIFx0dTMyIHBwbV9ydGhyO1xuIFx0dTMyIHBwbV93dGhyO1xuQEAgLTIyNzQsNiArMjI4MSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRcdHU2NCB2ZG9uZSwgdnRpbWUsIHVzYWdlX3VzO1xuIFx0XHR1MzIgaHdfYWN0aXZlLCBod19pbnVzZTtcbiBcbitcdFx0bnJfYWN0aXZlKys7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIENvbGxlY3QgdW51c2VkIGFuZCB3aW5kIHZ0aW1lIGNsb3NlciB0byB2bm93IHRvIHByZXZlbnRcbiBcdFx0ICogaW9jZ3MgZnJvbSBhY2N1bXVsYXRpbmcgYSBsYXJnZSBhbW91bnQgb2YgYnVkZ2V0LlxuQEAgLTI0NjAsNiArMjQ2OSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRcdGlvY19yZWZyZXNoX3ZyYXRlKGlvYywgXHUwMDI2bm93KTtcbiBcdH1cbiBcbitcdHRyYWNlX2lvY29zdF9pb2NfdGljayhpb2MsIG5yX2FjdGl2ZSwgdXNhZ2VfdXNfc3VtKTtcbitcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gfVxuIFxuQEAgLTI1NzEsMTAgKzI1ODIsMjggQEAgc3RhdGljIHZvaWQgY2FsY192dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW9jX2dxICppb2NnLFxuIFxuIHN0YXRpYyB1NjQgY2FsY192dGltZV9jb3N0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZywgYm9vbCBpc19tZXJnZSlcbiB7XG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICptb2RlbDtcbiBcdHU2NCBjb3N0O1xuIFxuLVx0Y2FsY192dGltZV9jb3N0X2J1aWx0aW4oYmlvLCBpb2NnLCBpc19tZXJnZSwgXHUwMDI2Y29zdCk7XG4tXHRyZXR1cm4gY29zdDtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG1vZGVsID0gcmN1X2RlcmVmZXJlbmNlKGlvY2ctXHUwMDNlaW9jLVx1MDAzZW1vZGVsKTtcbitcdGlmIChtb2RlbCkge1xuK1x0XHRjb3N0ID0gbW9kZWwtXHUwMDNlY2FsY19jb3N0KGJpby1cdTAwM2ViaV9vcGYsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsXG4rXHRcdFx0XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvcixcbitcdFx0XHRcdFx0aW9jZ190b19ibGtnKGlvY2cpLVx1MDAzZWJsa2NnLFxuK1x0XHRcdFx0XHRpc19tZXJnZSA/IElPQ09TVF9DT1NUX0ZfTUVSR0UgOiAwKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiBtaW4oY29zdCwgVlRJTUVfUEVSX1NFQyk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbisjZW5kaWZcbitcdHtcbitcdFx0dTY0IGNvc3Q7XG4rXG4rXHRcdGNhbGNfdnRpbWVfY29zdF9idWlsdGluKGJpbywgaW9jZywgaXNfbWVyZ2UsIFx1MDAyNmNvc3QpO1xuK1x0XHRyZXR1cm4gY29zdDtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYyxcbkBAIC0yNTk2LDEwICsyNjI1LDI4IEBAIHN0YXRpYyB2b2lkIGNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW9jICppb2MsXG4gXG4gc3RhdGljIHU2NCBjYWxjX3NpemVfdnRpbWVfY29zdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYylcbiB7XG4tXHR1NjQgY29zdDtcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxuK1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xuIFxuLVx0Y2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihycSwgaW9jLCBcdTAwMjZjb3N0KTtcbi1cdHJldHVybiBjb3N0O1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bW9kZWwgPSByY3VfZGVyZWZlcmVuY2UoaW9jLVx1MDAzZW1vZGVsKTtcbitcdGlmIChtb2RlbCBcdTAwMjZcdTAwMjYgcnEtXHUwMDNlYmlvIFx1MDAyNlx1MDAyNiBycS1cdTAwM2ViaW8tXHUwMDNlYmlfYmxrZykge1xuK1x0XHR1NjQgY29zdDtcbitcbitcdFx0Y29zdCA9IG1vZGVsLVx1MDAzZWNhbGNfY29zdChycS1cdTAwM2VjbWRfZmxhZ3MsIGJsa19ycV9ieXRlcyhycSksXG4rXHRcdFx0XHRcdGJsa19ycV9wb3MocnEpLFxuK1x0XHRcdFx0XHRycS1cdTAwM2ViaW8tXHUwMDNlYmlfYmxrZy1cdTAwM2VibGtjZywgMCk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rI2VuZGlmXG4rXHR7XG4rXHRcdHU2NCBjb3N0O1xuK1xuK1x0XHRjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHJxLCBpb2MsIFx1MDAyNmNvc3QpO1xuK1x0XHRyZXR1cm4gY29zdDtcbitcdH1cbiB9XG4gXG4gZW51bSBvdmVyX2J1ZGdldF9hY3Rpb24ge1xuQEAgLTI5MDAsNiArMjk0NywxOSBAQCBzdGF0aWMgdm9pZCBpb2NfcnFvc19leGl0KHN0cnVjdCBycV9xb3MgKnJxb3MpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmlvYy1cdTAwM2V0aW1lcik7XG4gXHRmcmVlX3BlcmNwdShpb2MtXHUwMDNlcGNwdV9zdGF0KTtcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxuK1x0e1xuK1x0XHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7XG4rXG4rXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuK1x0XHRtb2RlbCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLVx1MDAzZW1vZGVsLFxuK1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGlvYy1cdTAwM2Vtb2RlbCwgTlVMTCk7XG4rXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4rXHRcdGlmIChtb2RlbClcbitcdFx0XHRpb2Nvc3RfYnBmX21vZGVsX3B1dChtb2RlbCk7XG4rXHR9XG4rI2VuZGlmXG4gXHRrZnJlZShpb2MpO1xuIH1cbiBcbkBAIC0zNDM4LDEyICszNDk4LDMwIEBAIHN0YXRpYyB1NjQgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsKHN0cnVjdCBzZXFfZmlsZSAqc2YsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcdHtcbitcdFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsID1cbitcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlvYy1cdTAwM2Vtb2RlbCxcbitcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKSk7XG4rXG4rXHRcdHNlcV9wcmludGYoc2YsIFwiJXMgY3RybD0lcyBtb2RlbD0lcyBcIlxuK1x0XHRcdCAgIFwicmJwcz0lbGx1IHJzZXFpb3BzPSVsbHUgcnJhbmRpb3BzPSVsbHUgXCJcbitcdFx0XHQgICBcIndicHM9JWxsdSB3c2VxaW9wcz0lbGx1IHdyYW5kaW9wcz0lbGx1XFxuXCIsXG4rXHRcdFx0ICAgZG5hbWUsIG1vZGVsID8gXCJicGZcIiA6XG4rXHRcdFx0XHQgICBpb2MtXHUwMDNldXNlcl9jb3N0X21vZGVsID8gXCJ1c2VyXCIgOiBcImF1dG9cIixcbitcdFx0XHQgICBtb2RlbCA/IG1vZGVsLVx1MDAzZW5hbWUgOiBcImxpbmVhclwiLFxuK1x0XHRcdCAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSxcbitcdFx0XHQgICB1W0lfTENPRUZfUlJBTkRJT1BTXSwgdVtJX0xDT0VGX1dCUFNdLFxuK1x0XHRcdCAgIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTtcbitcdH1cbisjZWxzZVxuIFx0c2VxX3ByaW50ZihzZiwgXCIlcyBjdHJsPSVzIG1vZGVsPWxpbmVhciBcIlxuIFx0XHQgICBcInJicHM9JWxsdSByc2VxaW9wcz0lbGx1IHJyYW5kaW9wcz0lbGx1IFwiXG4gXHRcdCAgIFwid2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcXG5cIixcbiBcdFx0ICAgZG5hbWUsIGlvYy1cdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPyBcInVzZXJcIiA6IFwiYXV0b1wiLFxuIFx0XHQgICB1W0lfTENPRUZfUkJQU10sIHVbSV9MQ09FRl9SU0VRSU9QU10sIHVbSV9MQ09FRl9SUkFORElPUFNdLFxuIFx0XHQgICB1W0lfTENPRUZfV0JQU10sIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTtcbisjZW5kaWZcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzQ1Nyw2ICszNTM1LDM3IEBAIHN0YXRpYyBpbnQgaW9jX2Nvc3RfbW9kZWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogQmluZCBAbmFtZSAoZW1wdHkgPSBidWlsdGluIGxpbmVhciBtb2RlbCkgYXMgdGhlIGFjdGl2ZSBjb3N0IG1vZGVsIG9mXG4rICogQGlvYy4gIFRoZSByZWdpc3RyeSBsb29rdXAgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGhhcHBlbiBvdXRzaWRlXG4rICogaW9jLVx1MDAzZWxvY2s7IHRoZSBwb2ludGVyIHN3YXAgaGFwcGVucyB1bmRlciBpdC5cbisgKi9cbitzdGF0aWMgaW50IGlvY19icGZfbW9kZWxfYmluZChzdHJ1Y3QgaW9jICppb2MsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbmV3ID0gTlVMTCwgKm9sZDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAobmFtZVswXSkge1xuK1x0XHRyZXQgPSBpb2Nvc3RfYnBmX21vZGVsX2dldChuYW1lLCBcdTAwMjZuZXcpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKTtcbitcdG9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLVx1MDAzZW1vZGVsLFxuK1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihpb2MtXHUwMDNlbW9kZWwsIG5ldyk7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKG9sZClcbitcdFx0aW9jb3N0X2JwZl9tb2RlbF9wdXQob2xkKTtcbitcdHJldHVybiAwO1xuKyNlbHNlXG4rXHRyZXR1cm4gbmFtZVswXSA/IC1FTk9FTlQgOiAwO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBjb3N0X2N0cmxfdG9rZW5zID0ge1xuIFx0eyBDT1NUX0NUUkwsXHRcdFwiY3RybD0lc1wiXHR9LFxuIFx0eyBDT1NUX01PREVMLFx0XHRcIm1vZGVsPSVzXCJcdH0sXG5AQCAtMzQ4Miw2ICszNTkxLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiBcdHN0cnVjdCBpb2MgKmlvYztcbiBcdHU2NCB1W05SX0lfTENPRUZTXTtcbiBcdGJvb2wgdXNlcjtcbitcdGNoYXIgYnBmX21vZGVsW0lPQ09TVF9NT0RFTF9OQU1FX0xFTl07XG4gXHRjaGFyICpib2R5LCAqcDtcbiBcdGludCByZXQ7XG4gXG5AQCAtMzUxMiw2ICszNjIyLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuIFx0bWVtY3B5KHUsIGlvYy1cdTAwM2VwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7XG4gXHR1c2VyID0gaW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbDtcbitcdGJwZl9tb2RlbFswXSA9ICdcXDAnO1xuIFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcbkBAIC0zNTMzLDExICszNjQ0LDE2IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXG4gXHRcdFx0XHR1c2VyID0gdHJ1ZTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0XHRicGZfbW9kZWxbMF0gPSAnXFwwJztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0Y2FzZSBDT1NUX01PREVMOlxuIFx0XHRcdG1hdGNoX3N0cmxjcHkoYnVmLCBcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnVmKSk7XG4tXHRcdFx0aWYgKHN0cmNtcChidWYsIFwibGluZWFyXCIpKVxuLVx0XHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmLCBcImxpbmVhclwiKSkge1xuK1x0XHRcdFx0LyogYmFjayB0byB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgKi9cbitcdFx0XHRcdGJwZl9tb2RlbFswXSA9ICdcXDAnO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuK1x0XHRcdG1hdGNoX3N0cmxjcHkoYnBmX21vZGVsLCBcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnBmX21vZGVsKSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0zNTYzLDYgKzM2NzksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuIFxuK1x0LypcbitcdCAqIEJpbmQgdGhlIEJQRiBtb2RlbCBvdXRzaWRlIGlvYy1cdTAwM2Vsb2NrOiB0aGUgcmVnaXN0cnkgbG9va3VwXG4rXHQgKiB0YWtlcyB0aGUgcmVnaXN0cmF0aW9uIG11dGV4IGFuZCB0aGUgb2xkIG1vZGVsJ3MgcmVmZXJlbmNlXG4rXHQgKiBpcyBkcm9wcGVkIGFmdGVyIHRoZSBzd2FwLlxuK1x0ICovXG4rXHRpZiAoIXJldClcbitcdFx0cmV0ID0gaW9jX2JwZl9tb2RlbF9iaW5kKGlvYywgYnBmX21vZGVsKTtcbitcbiBcdGJsa19tcV91bnF1aWVzY2VfcXVldWUocSk7XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oIGIvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zYTA4NTVlZmI2MTA3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaFxuQEAgLTAsMCArMSw4MiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfTElOVVhfQkxLX0lPQ09TVF9IXG4rI2RlZmluZSBfTElOVVhfQkxLX0lPQ09TVF9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa190eXBlcy5oXHUwMDNlXG4rXG4rI2RlZmluZSBJT0NPU1RfTU9ERUxfTkFNRV9MRU5cdDE2XG4rXG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcbitzdHJ1Y3QgYmxrY2c7XG4rXG4rLypcbisgKiBQbHVnZ2FibGUgY29zdCBtb2RlbCBpbnRlcmZhY2UgZm9yIGJsay1pb2Nvc3QuXG4rICpcbisgKiBBIEJQRiBzdHJ1Y3Rfb3BzIGltcGxlbWVudGF0aW9uIHJlZ2lzdGVyZWQgYWdhaW5zdCBcImlvY29zdF9tb2RlbF9vcHNcIlxuKyAqIGZ1bGx5IHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBtb2RlbCBvbiB0aGUgZGV2aWNlcyBpdCBpcyBib3VuZCB0b1xuKyAqIHRocm91Z2ggaW8uY29zdC5tb2RlbC4gIFRoZSBtb2RlbCBvd25zIHByaWNpbmcgZm9yIGV2ZXJ5IElPIG9uIGEgYm91bmRcbisgKiBkZXZpY2U6IGl0IHByaWNlcyBhbGwgb3BlcmF0aW9ucywgaW5jbHVkaW5nIGZsdXNoZXMsIGFuZCBib3RoIHRoZSBiaW9cbisgKiBjaGFyZ2luZyBwYXRoIGFuZCB0aGUgcmVxdWVzdC1sZXZlbCBzaXppbmcgcGF0aCBjb25zdWx0IGl0LlxuKyAqXG4rICogY2FsY19jb3N0KCkgaXMgY2FsbGVkIGZyb20gdGhlIElPIHN1Ym1pc3Npb24gcGF0aCB3aXRoIFJDVSByZWFkIGxvY2tcbisgKiBoZWxkIGFuZCBtdXN0IG5vdCBzbGVlcC4gIEl0IHJldHVybnMgdGhlIGNvc3Qgb2YgdGhlIElPIGluIHZ0aW1lXG4rICogdW5pdHMsIHdoZXJlIDEgc2Vjb25kIG9mIGRldmljZSB0aW1lIGVxdWFscyBWVElNRV9QRVJfU0VDICgyXjM3LFxuKyAqIGF2YWlsYWJsZSB0byBCUEYgcHJvZ3JhbXMgdGhyb3VnaCB2bWxpbnV4LmgpLiAgVGhlIHJldHVybmVkIHZhbHVlIGlzXG4rICogY2xhbXBlZCB0byAxIHNlY29uZCBvZiBkZXZpY2UgdGltZSBwZXIgSU8uXG4rICpcbisgKiBUaGUgbW9kZWwgaXMgcGFzc2VkIHRoZSBibGtjZyBvZiB0aGUgaXNzdWluZyBjZ3JvdXAgc28gaXQgY2FuIGtlZXBcbisgKiBwZXItY2dyb3VwIHN0YXRlLiAgYmxrY2dfb25saW5lKCkvYmxrY2dfb2ZmbGluZSgpIGFyZSBvcHRpb25hbFxuKyAqIGNhbGxiYWNrcyBtaXJyb3JpbmcgdGhlIGJsa2NnIGNzcyBsaWZlY3ljbGU6IHN0YXRlIGNyZWF0ZWQgb24gb25saW5lXG4rICogKG9yIGxhemlseSBvbiBmaXJzdCB1c2UpIG11c3QgYmUgcmVsZWFzZWQgb24gb2ZmbGluZS5cbisgKlxuKyAqIFRoZSByZWdpc3RyYXRpb24gYW5kIGJpbmRpbmcgbW9kZWwgZm9sbG93cyB0aGUgVENQIGNvbmdlc3Rpb25cbisgKiBjb250cm9sIGZyYW1ld29yazogcmVnaXN0ZXJpbmcgYSBzdHJ1Y3Rfb3BzIG1ha2VzIHRoZSBtb2RlbCBhdmFpbGFibGVcbisgKiBieSBpdHMgbmFtZSwgd2hpbGUgaW8uY29zdC5tb2RlbCBiaW5kcyBvbmUgcmVnaXN0ZXJlZCBtb2RlbCB0byBhXG4rICogZGV2aWNlLiAgVW5yZWdpc3RlcmluZyByZW1vdmVzIHRoZSBuYW1lIGZyb20gdGhlIHJlZ2lzdHJ5OyBkZXZpY2VzXG4rICogYWxyZWFkeSBib3VuZCBrZWVwIHVzaW5nIGl0IHVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW5cbisgKiBtb2RlbC5cbisgKi9cbitcbisjZGVmaW5lIElPQ09TVF9NT0RFTF9OQU1FX0xFTlx0MTZcbitcbisvKlxuKyAqIGlvY29zdC1zcGVjaWZpYyBjYWxsIG1ldGFkYXRhIGZvciBjYWxjX2Nvc3QoKSdzIG1vZGVsX2ZsYWdzXG4rICogYXJndW1lbnQ7IGV2ZXJ5dGhpbmcgZWxzZSwgaW5jbHVkaW5nIFJFUV9QUkVGTFVTSC9SRVFfRlVBLCBpc1xuKyAqIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgb3BmIGFyZ3VtZW50XG4rICovXG4rI2RlZmluZSBJT0NPU1RfQ09TVF9GX01FUkdFXHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcdC8qIGNhbGxlZCBmcm9tIG1lcmdlIHBhdGggKi9cbitcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyB7XG4rXHR1NjQgKCpjYWxjX2Nvc3QpKHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHNlY3Rvcl90IHNlY3RvcixcbitcdFx0XHQgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKTtcbitcdHZvaWQgKCpibGtjZ19vbmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuK1x0dm9pZCAoKmJsa2NnX29mZmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuK1xuK1x0LyogbW9kZWwgbmFtZSwgdXNlZCB0byBzZWxlY3QgdGhlIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCAqL1xuK1x0Y2hhciBuYW1lWzE2XTtcbit9O1xuK1xuK2ludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdCBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApO1xuK3ZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyk7XG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcbitcbisjZWxzZVx0LyogQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiAqL1xuK1xuK3N0cnVjdCBibGtjZztcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcztcbitcbitzdGF0aWMgaW5saW5lIGludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH1cbitcbisjZW5kaWZcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cbisjZW5kaWZcdC8qIF9MSU5VWF9CTEtfSU9DT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXG5pbmRleCBlNzcyYjFiYzYwZDYwLi4yYjlmZjM0OGE0ZjUxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXG5AQCAtMTc4LDYgKzE3OCw0NiBAQCBUUkFDRV9FVkVOVChpb2Nvc3RfaW9jX3ZyYXRlX2FkaixcbiBcdClcbiApO1xuIFxuKy8qXG4rICogUGVyaW9kaWMgcGVyLWRldmljZSBzdW1tYXJ5LCBlbWl0dGVkIG9uY2UgcGVyIHBlcmlvZCBmcm9tIHRoZSB0YWlsIG9mXG4rICogaW9jX3RpbWVyX2ZuKCkuICBVbmxpa2UgdGhlIHN0YXRlLWNoYW5nZSBldmVudHMgYWJvdmUsIHRoaXMgZmlyZXMgZXZlcnlcbisgKiBwZXJpb2QgdGhlIGNvbnRyb2xsZXIgaXMgcnVubmluZywgaW5jbHVkaW5nIHN0ZWFkeSBzdGF0ZXMsIGFuZCBjYXJyaWVzXG4rICogdGhlIG92ZXJhbGwgY29udHJvbGxlciBzdGF0ZSBzbyBiYXNpYyBtb25pdG9yaW5nIGRvZXNuJ3QgcmVxdWlyZSBkcmduLlxuKyAqL1xuK1RSQUNFX0VWRU5UKGlvY29zdF9pb2NfdGljayxcbitcbitcdFRQX1BST1RPKHN0cnVjdCBpb2MgKmlvYywgaW50IG5yX2FjdGl2ZSwgdTY0IHVzYWdlX3VzX3N1bSksXG4rXG4rXHRUUF9BUkdTKGlvYywgbnJfYWN0aXZlLCB1c2FnZV91c19zdW0pLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeSAoXG4rXHRcdF9fc3RyaW5nKGRldm5hbWUsIGlvY19uYW1lKGlvYykpXG4rXHRcdF9fZmllbGQodTMyLCBwZXJpb2RfdXMpXG4rXHRcdF9fZmllbGQodTY0LCB2cmF0ZSlcbitcdFx0X19maWVsZChpbnQsIGJ1c3lfbGV2ZWwpXG4rXHRcdF9fZmllbGQoaW50LCBucl9hY3RpdmUpXG4rXHRcdF9fZmllbGQodTMyLCB1c2FnZV9wY3QpXG4rXHRcdF9fZmllbGQoaW50LCBydW5uaW5nKVxuK1x0KSxcbitcbitcdFRQX2Zhc3RfYXNzaWduKFxuK1x0XHRfX2Fzc2lnbl9zdHIoZGV2bmFtZSk7XG4rXHRcdF9fZW50cnktXHUwMDNlcGVyaW9kX3VzID0gaW9jLVx1MDAzZXBlcmlvZF91cztcbitcdFx0X19lbnRyeS1cdTAwM2V2cmF0ZSA9IGlvYy1cdTAwM2V2dGltZV9iYXNlX3JhdGU7XG4rXHRcdF9fZW50cnktXHUwMDNlYnVzeV9sZXZlbCA9IGlvYy1cdTAwM2VidXN5X2xldmVsO1xuK1x0XHRfX2VudHJ5LVx1MDAzZW5yX2FjdGl2ZSA9IG5yX2FjdGl2ZTtcbitcdFx0X19lbnRyeS1cdTAwM2V1c2FnZV9wY3QgPSBpb2MtXHUwMDNlcGVyaW9kX3VzID9cbitcdFx0XHRkaXZfdTY0KHVzYWdlX3VzX3N1bSAqIDEwMCwgaW9jLVx1MDAzZXBlcmlvZF91cykgOiAwO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXJ1bm5pbmcgPSBpb2MtXHUwMDNlcnVubmluZztcbitcdCksXG4rXG4rXHRUUF9wcmludGsoXCJbJXNdIHBlcmlvZD0ldXVzIHZyYXRlPSVsbHUgYnVzeT0lZCBhY3RpdmU9JWQgdXNhZ2U9JXUlJSBydW5uaW5nPSVkXCIsXG4rXHRcdF9fZ2V0X3N0cihkZXZuYW1lKSwgX19lbnRyeS1cdTAwM2VwZXJpb2RfdXMsIF9fZW50cnktXHUwMDNldnJhdGUsXG4rXHRcdF9fZW50cnktXHUwMDNlYnVzeV9sZXZlbCwgX19lbnRyeS1cdTAwM2Vucl9hY3RpdmUsIF9fZW50cnktXHUwMDNldXNhZ2VfcGN0LFxuK1x0XHRfX2VudHJ5LVx1MDAzZXJ1bm5pbmdcbitcdClcbispO1xuK1xuIFRSQUNFX0VWRU5UKGlvY29zdF9pb2NnX2ZvcmdpdmVfZGVidCxcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBpb2NfZ3EgKmlvY2csIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBpb2Nfbm93ICpub3csXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbmluZGV4IDJmNzk2ODhkY2Y3Y2UuLjY3YTYzMGNiNTYxNDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5AQCAtMTM4LDMgKzEzOCw1IEBAIENPTkZJR19TTUNfSFNfQ1RSTF9CUEY9eVxuIENPTkZJR19ESUJTPXlcbiBDT05GSUdfRElCU19MTz15XG4gQ09ORklHX1BNX1dBS0VMT0NLUz15XG4rQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbitDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTkzNDRiMTNmYmE5OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaW9jb3N0X21vZGVsLmNcbkBAIC0wLDAgKzEsMTkzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcImlvY29zdF9tb2RlbC5za2VsLmhcIlxuKyNpbmNsdWRlIFwiaW9jb3N0X21zLnNrZWwuaFwiXG4rXG4rLypcbisgKiBXcml0ZSBhIGxpbmUgdG8gaW8uY29zdC5tb2RlbCB3aXRoIHdyaXRlKDIpIGFuZCByZXR1cm4gdGhlIGVycm5vIG9mXG4rICogdGhlIGZhaWxlZCB3cml0ZSwgb3IgMCBvbiBzdWNjZXNzLiAgc3RkaW8gaXMgbm90IHVzZWQgaGVyZSBvblxuKyAqIHB1cnBvc2U6IHRoZSBrZXJuZWwncyByZWplY3Rpb24gaGFwcGVucyBpbiB0aGUgd3JpdGUoKSBzeXNjYWxsLFxuKyAqIG5vdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBjb3B5LCBhbmQgZXZlcnkgd3JpdGUsIGluY2x1ZGluZ1xuKyAqIHRoZSBlcnJvciBwYXRocyBvZiB0aGUgY2FsbGVycyBiZWxvdywgaXMgY2hlY2tlZC5cbisgKi9cbitzdGF0aWMgaW50IHdyaXRlX2Nvc3RfbW9kZWwoY29uc3QgY2hhciAqYnVmKVxuK3tcbitcdGludCBmZCwgZXJyID0gMDtcbitcdHNzaXplX3QgbjtcbitcbitcdGZkID0gb3BlbihcIi9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWxcIiwgT19XUk9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJybm87XG4rXHRuID0gd3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpO1xuK1x0aWYgKG4gXHUwMDNjIDApXG4rXHRcdGVyciA9IGVycm5vO1xuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBSZWFkIGJhY2sgdGhlIGlvLmNvc3QubW9kZWwgbGluZSBvZiBkZXYgYW5kIGNvcHkgdGhlIG1vZGVsPSB2YWx1ZVxuKyAqIGludG8gQG1vZGVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4rICovXG4rc3RhdGljIGludCByZWFkYmFja19tb2RlbChjb25zdCBjaGFyICpkZXYsIGNoYXIgKm1vZGVsLCBzaXplX3QgbW9kZWxfc3opXG4re1xuK1x0Y2hhciBsaW5lWzI1Nl0sIHdvcmRbMjU2XSwgKm0sICplbmQ7XG4rXHRGSUxFICpmcDtcbitcdGludCBmb3VuZCA9IDA7XG4rXG4rXHRmcCA9IGZvcGVuKFwiL3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5tb2RlbFwiLCBcInJcIik7XG4rXHRpZiAoIWZwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHtcbitcdFx0aWYgKHNzY2FuZihsaW5lLCBcIiUyNTVzXCIsIHdvcmQpID09IDEgXHUwMDI2XHUwMDI2ICFzdHJjbXAod29yZCwgZGV2KSkge1xuK1x0XHRcdGZvdW5kID0gMTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0ZmNsb3NlKGZwKTtcbitcdGlmICghZm91bmQpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdG0gPSBzdHJzdHIobGluZSwgXCJtb2RlbD1cIik7XG4rXHRpZiAoIW0pXG4rXHRcdHJldHVybiAtMTtcbitcdG0gKz0gc3RybGVuKFwibW9kZWw9XCIpO1xuK1x0ZW5kID0gbTtcbitcdHdoaWxlICgqZW5kIFx1MDAyNlx1MDAyNiAhaXNzcGFjZSgqZW5kKSlcbitcdFx0ZW5kKys7XG4rXHRzbnByaW50Zihtb2RlbCwgbW9kZWxfc3osIFwiJS4qc1wiLCAoaW50KShlbmQgLSBtKSwgbSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBCaW5kIHRoZSBuYW1lZCBtb2RlbCB0byBhIGRldmljZSB3aXRoIFwibW9kZWw9XHUwMDNjbmFtZVx1MDAzZVwiLCB2ZXJpZnkgdGhlXG4rICogcmVhZGJhY2sgYW5kIHJlc3RvcmUgdGhlIGJ1aWx0aW4gbW9kZWwuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW50IGJpbmRfbW9kZWwoY29uc3QgY2hhciAqZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGNoYXIgYnVmWzMwMF0sIGdvdFs2NF07XG4rXHRpbnQgZXJyO1xuK1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlcyBtb2RlbD0lc1xcblwiLCBkZXYsIG5hbWUpO1xuK1x0ZXJyID0gd3JpdGVfY29zdF9tb2RlbChidWYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRDSEVDSyhmYWxzZSwgXCJ3cml0ZV9tb2RlbFwiLCBcIndyaXRlIG1vZGVsPSVzOiAlc1xcblwiLCBuYW1lLFxuK1x0XHQgICAgICBzdHJlcnJvcihlcnIpKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0ZXJyID0gcmVhZGJhY2tfbW9kZWwoZGV2LCBnb3QsIHNpemVvZihnb3QpKTtcbitcdGlmIChlcnIgfHwgc3RyY21wKGdvdCwgbmFtZSkpIHtcbitcdFx0Q0hFQ0soZmFsc2UsIFwicmVhZGJhY2tfbW9kZWxcIiwgXCJnb3QgbW9kZWw9JXMgd2FudCAlc1xcblwiLFxuK1x0XHQgICAgICBlcnIgPyBcIihub25lKVwiIDogZ290LCBuYW1lKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0LyogcmVzdG9yZSB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWw7IHRoZSB3cml0ZSBpcyBjaGVja2VkIHRvbyAqL1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlcyBtb2RlbD1saW5lYXJcXG5cIiwgZGV2KTtcbitcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcbitcdGlmIChlcnIpIHtcbitcdFx0Q0hFQ0soZmFsc2UsIFwicmVzdG9yZV9saW5lYXJcIiwgXCJ3cml0ZSBtb2RlbD1saW5lYXI6ICVzXFxuXCIsXG4rXHRcdCAgICAgIHN0cmVycm9yKGVycikpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBUaGUgZGV2IGFyZ3VtZW50IG11c3QgYmUgcHJlc2VudCBpbiBpby5jb3N0LnFvcyBhbHJlYWR5LCB3aGljaFxuKyAqIG1lYW5zIGlvY29zdCBpcyBlbmFibGVkIGZvciBpdC5cbisgKi9cbitzdGF0aWMgaW50IGRldl9oYXNfaW9jb3N0KGNvbnN0IGNoYXIgKmRldilcbit7XG4rXHRjaGFyIGxpbmVbMjU2XSwgd29yZFsyNTZdO1xuK1x0RklMRSAqZnA7XG4rXHRpbnQgZm91bmQgPSAwO1xuK1xuK1x0ZnAgPSBmb3BlbihcIi9zeXMvZnMvY2dyb3VwL2lvLmNvc3QucW9zXCIsIFwiclwiKTtcbitcdGlmICghZnApXG4rXHRcdHJldHVybiAwO1xuK1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XG4rXHRcdGlmIChzc2NhbmYobGluZSwgXCIlMjU1c1wiLCB3b3JkKSA9PSAxIFx1MDAyNlx1MDAyNiAhc3RyY21wKHdvcmQsIGRldikpIHtcbitcdFx0XHRmb3VuZCA9IDE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGZjbG9zZShmcCk7XG4rXHRyZXR1cm4gZm91bmQ7XG4rfVxuK1xuKy8qXG4rICogQmluZCB0aGUgMnggZXhhbXBsZSBtb2RlbCBhbmQgdmVyaWZ5IHRoZSBpby5jb3N0Lm1vZGVsIHJlYWRiYWNrLlxuKyAqIElPIGFjY291bnRpbmcgaXRzZWxmIGlzIG5vdCBjaGVja2VkIGhlcmU7IGl0IG5lZWRzIGEgZGV2aWNlIGRvaW5nXG4rICogcmVhbCBJTyB1bmRlciBpb2Nvc3QgYW5kIGlzIGNvdmVyZWQgYnkgdGhlIGtlcm5lbC1zaWRlIHZhbGlkYXRpb25cbisgKiBkZXNjcmliZWQgaW4gdGhlIGNvdmVyIGxldHRlci5cbisgKlxuKyAqIFJlcXVpcmVzIHJvb3QsIGNncm91cCB2MiBhbmQgYSBkZXZpY2Ugd2l0aCBpb2Nvc3Qgc3VwcG9ydC4gIFRoZVxuKyAqIGRldmljZSBtdXN0IGJlIGdpdmVuIGFzIG1ham9yOm1pbm9yIGluICRJT0NPU1RfVEVTVF9ERVYsIG90aGVyd2lzZVxuKyAqIHRoZSB0ZXN0IGlzIHNraXBwZWQuXG4rICovXG4rdm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWwodm9pZClcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsICpza2VsO1xuK1x0Y2hhciBidWZbMzAwXSwgKmRldjtcbitcdGludCBlcnI7XG4rXG4rXHRkZXYgPSBnZXRlbnYoXCJJT0NPU1RfVEVTVF9ERVZcIik7XG4rXHRpZiAoIWRldiB8fCBnZXRldWlkKCkgIT0gMCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdGlmICghQVNTRVJUX1RSVUUoZGV2X2hhc19pb2Nvc3QoZGV2KSwgXCJpb2Nvc3RfbW91bnRlZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIG5lZ2F0aXZlOiBiaW5kaW5nIGFuIHVua25vd24gbW9kZWwgbmFtZSBtdXN0IGJlIHJlamVjdGVkLFxuK1x0ICogc28gYSB0eXBvIGNhbm5vdCBzaWxlbnRseSBkaXNhYmxlIGNvc3QgbW9kZWwgdXBkYXRlc1xuK1x0ICovXG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVzIG1vZGVsPW5vX3N1Y2hfbW9kZWxcXG5cIiwgZGV2KTtcbitcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcbitcdEFTU0VSVF9FUShlcnIsIEVOT0VOVCwgXCJ1bmtub3duX21vZGVsX3JlamVjdGVkXCIpO1xuK1xuK1x0c2tlbCA9IGlvY29zdF9tb2RlbF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIGF0dGFjaGluZyB0aGUgc3RydWN0X29wcyByZWdpc3RlcnMgdGhlIG1vZGVsIGJ5IG5hbWUgKi9cbitcdGVyciA9IGlvY29zdF9tb2RlbF9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKEFTU0VSVF9PSyhlcnIsIFwiYXR0YWNoXCIpKVxuK1x0XHRBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsIFwiaW9jb3N0XzJ4XCIpLCBcImJpbmRfYW5kX3JlYWRiYWNrXCIpO1xuK1xuK1x0aW9jb3N0X21vZGVsX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIFNhbWUgY2hlY2sgZm9yIHRoZSBtdWx0aS1zdHJlYW0gZXhhbXBsZSBtb2RlbC4gIE9ubHkgb25lIG1vZGVsIGNhblxuKyAqIGJlIGJvdW5kIHRvIGEgZGV2aWNlIGF0IGEgdGltZTsgYm90aCB0ZXN0cyBiaW5kIGFuZCByZXN0b3JlLCBzb1xuKyAqIHRoZXkgYXJlIHNlcmlhbCBhbmQgaW5kZXBlbmRlbnQuXG4rICovXG4rdm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWxfc3RyZWFtcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBpb2Nvc3RfbXMgKnNrZWw7XG4rXHRjaGFyICpkZXY7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZGV2ID0gZ2V0ZW52KFwiSU9DT1NUX1RFU1RfREVWXCIpO1xuK1x0aWYgKCFkZXYgfHwgZ2V0ZXVpZCgpICE9IDApIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksIFwiaW9jb3N0X21vdW50ZWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHNrZWwgPSBpb2Nvc3RfbXNfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBpb2Nvc3RfbXNfX2F0dGFjaChza2VsKTtcbitcdGlmIChBU1NFUlRfT0soZXJyLCBcImF0dGFjaFwiKSlcbitcdFx0QVNTRVJUX09LKGJpbmRfbW9kZWwoZGV2LCBcImlvY29zdF9tc1wiKSwgXCJiaW5kX2FuZF9yZWFkYmFja1wiKTtcbitcbitcdGlvY29zdF9tc19fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjhhZDQxN2IzNTg0OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5AQCAtMCwwICsxLDExNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBFeGFtcGxlIGlvY29zdCBjb3N0IG1vZGVsOiB0aGUgYnVpbHRpbiBsaW5lYXIgSEREIGZvcm11bGEgd2l0aCBhbGxcbisgKiBjb3N0cyBkb3VibGVkLlxuKyAqXG4rICogVGhlIGNvbnN0YW50cyBtaXJyb3Igd2hhdCBjYWxjX2xjb2VmcygpIGRlcml2ZXMgZnJvbSB0aGUgQVVUT1BfSEREXG4rICogZGVmYXVsdHMgKHJicHM9MTc0MDE5MTc2IHJzZXFpb3BzPTQxNzA4IHJyYW5kaW9wcz0zNzAsIHctc2lkZVxuKyAqIGFuYWxvZykgaW4gdnRpbWUgdW5pdHMgd2hlcmUgMXMgPT0gMl4zNywgZXhwcmVzc2VkIHdpdGggdGhlIHNhbWVcbisgKiByb3VuZC11cCBkaXZpc2lvbnMgc28gdGhleSBjYW5ub3QgZHJpZnQgZnJvbSB0aGUga2VybmVsLiAgQSBkZXZpY2VcbisgKiBib3VuZCB0byB0aGlzIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCBjaGFyZ2VzIGV4YWN0bHkgdHdpY2UgdGhlXG4rICogYnVpbHRpbiBtb2RlbCB1bmRlciB0aGUgc2FtZSB3b3JrbG9hZCwgd2hpY2ggbWFrZXMgaXQgYSBjb252ZW5pZW50XG4rICogd2F5IHRvIHZlcmlmeSB0aGF0IGFjY291bnRpbmcgZ29lcyB0aHJvdWdoIHRoZSBCUEYgcGF0aC5cbisgKlxuKyAqIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nXG4rICogZmx1c2hlczogdGhlcmUgaXMgbm8gZmFsbGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGEgZGF0YWxlc3NcbisgKiBXUklURXxSRVFfUFJFRkxVU0ggaXMgcHJpY2VkIGFzIGEgb25lLXBhZ2Ugd3JpdGUuXG4rICovXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbisvKiBWVElNRV9QRVJfU0VDIGNvbWVzIGZyb20gdm1saW51eC5oIChhIEJURiBlbnVtIGNvbnN0YW50KSAqL1xuKyNkZWZpbmUgSU9DX1BBR0VfU0laRVx0XHQ0MDk2XG4rI2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUXHQzXHQvKiA1MTJCIHNlY3RvcnMgdG8gNGtCIHBhZ2VzICovXG4rI2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVNcdDQwOTZcdC8qIDE2TUIgc2VlayB0aHJlc2hvbGQgKi9cbisjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAwKVx0Lyogbm90IGluIEJURjogYSBwbGFpbiBtYWNybyAqL1xuKyNkZWZpbmUgSU9DT1NUX1JFUV9PUF9NQVNLXHQweGZmXHRcdC8qIFJFUV9PUF9NQVNLLCBub3QgaW4gQlRGICovXG4rXG4rLypcbisgKiBESVY2NF9VNjRfUk9VTkRfVVAgLyBESVZfUk9VTkRfVVBfVUxMIGVxdWl2YWxlbnRzLCBmb2xkZWQgYXRcbisgKiBjb21waWxlIHRpbWVcbisgKi9cbisjZGVmaW5lIFJVKHgsIHkpXHRcdCgoeCkgLyAoeSkgKyAoKCh4KSAlICh5KSkgPyAxIDogMCkpXG4rXG4rI2RlZmluZSBSQlBTXHQxNzQwMTkxNzZVTExcbisjZGVmaW5lIFJTRVFJT1BTXHQ0MTcwOFVMTFxuKyNkZWZpbmUgUlJBTkRJT1BTXHQzNzBVTExcbisjZGVmaW5lIFdCUFNcdDE3ODA3NTg2NlVMTFxuKyNkZWZpbmUgV1NFUUlPUFNcdDQyNzA1VUxMXG4rI2RlZmluZSBXUkFORElPUFNcdDM3OFVMTFxuK1xuKyNkZWZpbmUgUlBBR0VcdChSVShWVElNRV9QRVJfU0VDLCBSVShSQlBTLCBJT0NfUEFHRV9TSVpFKSkpXG4rI2RlZmluZSBSU0VRSU9cdChSVShWVElNRV9QRVJfU0VDLCBSU0VRSU9QUykgLSBSUEFHRSlcbisjZGVmaW5lIFJSQU5ESU9cdChSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpXG4rI2RlZmluZSBXUEFHRVx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFdCUFMsIElPQ19QQUdFX1NJWkUpKSlcbisjZGVmaW5lIFdTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdTRVFJT1BTKSAtIFdQQUdFKVxuKyNkZWZpbmUgV1JBTkRJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSlcbitcbisvKlxuKyAqIHBlci1jZ3JvdXAgY3Vyc29yIHN0b3JhZ2U6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXQsIHNvXG4rICogdGhlIG1vZGVsIG5ldmVyIGxlYWtzIG9yIHJldXNlcyBzdGFsZSBwZXItY2dyb3VwIHN0YXRlXG4rICovXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQ0dSUF9TVE9SQUdFKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbit9IGN1cnNvcl9zdG9yZSBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rdTY0IEJQRl9QUk9HKGlvY29zdF8yeF9jYWxjX2Nvc3QsIHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHU2NCBzZWN0b3IsXG4rXHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncylcbit7XG4rXHR1NjQgcGFnZXMsIHNlZWtfcGFnZXMgPSAwLCBiYXNlLCBjb2VmX3BhZ2UsIHJhbmRpbywgY29zdDtcbitcbitcdGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7XG4rXHRcdGJhc2UgPSBSU0VRSU87IGNvZWZfcGFnZSA9IFJQQUdFOyByYW5kaW8gPSBSUkFORElPO1xuK1x0fSBlbHNlIGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9XUklURSkge1xuK1x0XHRiYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTztcbitcdH0gZWxzZSB7XG4rXHRcdC8qXG4rXHRcdCAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd25cbitcdFx0ICogb3BzIGFyZSBwcmljZWQgYXMgYSBzaW5nbGUgcGFnZSB3cml0ZVxuK1x0XHQgKi9cbitcdFx0YmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIG1pcnJvciB0aGUgYnVpbHRpbiBzaW5nbGUgcGVyLWNncm91cCBjdXJzb3I6IHRoZSBtb2RlbCBrZWVwc1xuK1x0ICogaXRzIG93biBjdXJzb3Iga2V5ZWQgYnkgdGhlIGJsa2NnIGFyZ3VtZW50XG4rXHQgKi9cbitcdHtcbitcdFx0X191NjQgKmN1cnNvciwgY3VyO1xuK1xuK1x0XHRjdXJzb3IgPSBicGZfY2dycF9zdG9yYWdlX2dldChcdTAwMjZjdXJzb3Jfc3RvcmUsXG4rXHRcdFx0XHRcdCAgICAgIGJsa2NnLVx1MDAzZWNzcy5jZ3JvdXAsIE5VTEwsXG4rXHRcdFx0XHRcdCAgICAgIEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7XG4rXHRcdGlmICghY3Vyc29yKVxuK1x0XHRcdHJldHVybiAyICogKGJhc2UgKyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlKTtcbitcdFx0Y3VyID0gKmN1cnNvcjtcbitcdFx0c2Vla19wYWdlcyA9IHNlY3RvciBcdTAwM2UgY3VyID8gc2VjdG9yIC0gY3VyIDogY3VyIC0gc2VjdG9yO1xuK1x0XHRzZWVrX3BhZ2VzIFx1MDAzZVx1MDAzZT0gSU9DX1NFQ1RfVE9fUEFHRV9TSElGVDtcbitcdFx0aWYgKHNlZWtfcGFnZXMgXHUwMDNlIExDT0VGX1JBTkRJT19QQUdFUylcbitcdFx0XHRiYXNlID0gcmFuZGlvO1xuK1x0XHRpZiAoIShtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkpXG4rXHRcdFx0KmN1cnNvciA9IHNlY3RvciArIFJVKG5ieXRlcywgNTEyKTtcbitcdH1cbitcbitcdHBhZ2VzID0gUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKTtcbitcdGlmICghcGFnZXMpXG4rXHRcdHBhZ2VzID0gMTtcdC8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqL1xuK1x0aWYgKG1vZGVsX2ZsYWdzIFx1MDAyNiBJT0NPU1RfQ09TVF9GX01FUkdFKVxuK1x0XHRiYXNlID0gMDtcbitcbitcdGNvc3QgPSAyICogKGJhc2UgKyBwYWdlcyAqIGNvZWZfcGFnZSk7XG4rXHRyZXR1cm4gY29zdDtcbit9XG4rXG4rU0VDKFwiLnN0cnVjdF9vcHNcIilcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfMnggPSB7XG4rXHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfMnhfY2FsY19jb3N0LFxuK1x0Lm5hbWUgPSBcImlvY29zdF8yeFwiLFxuK307XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2NjNTdjMDNkM2M4OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5AQCAtMCwwICsxLDEzNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBFeGFtcGxlIG11bHRpLXN0cmVhbSBzZXF1ZW50aWFsaXR5IGRldGVjdGlvbiBjb3N0IG1vZGVsLlxuKyAqXG4rICogVGhlIGJ1aWx0aW4gbW9kZWwga2VlcHMgYSBzaW5nbGUgY3Vyc29yIHBlciBjZ3JvdXAsIHNvIHR3b1xuKyAqIGludGVybGVhdmVkIHNlcXVlbnRpYWwgcmVhZGVycyBpbiBvbmUgY2dyb3VwIGFyZSBhbGwgcHJpY2VkIHJhbmRvbVxuKyAqIChtZWFzdXJlZCA4OXggb3ZlcmNoYXJnZSwgMTIuOXggdGhyb3VnaHB1dCBjb2xsYXBzZSksIHdoaWxlIHJhbmRvbVxuKyAqIElPIGluc2lkZSBhIGhvdCB3aW5kb3cgc21hbGxlciB0aGFuIHRoZSAxNk1CIHNlZWsgdGhyZXNob2xkIGlzXG4rICogcHJpY2VkIHNlcXVlbnRpYWwgKG1lYXN1cmVkIDEwN3ggdW5kZXJjaGFyZ2UpLiAgVGhpcyBtb2RlbCByZXBsYWNlc1xuKyAqIHRoZSBzaW5nbGUgY3Vyc29yIHdpdGggYSBwZXItY2dyb3VwIHRhYmxlIG9mIHN0cmVhbSBzbG90czogYW4gSU8gaXNcbisgKiBzZXF1ZW50aWFsIGlmZiBpdHMgc2VjdG9yIG1hdGNoZXMgdGhlIGV4cGVjdGVkIG5leHQgc2VjdG9yIG9mIGFueVxuKyAqIHRyYWNrZWQgc3RyZWFtLiAgSW50ZXJsZWF2ZWQgc3RyZWFtcyBrZWVwIHRoZWlyIG93biBzbG90cywgYW5kXG4rICogd2luZG93ZWQgcmFuZG9tIElPIHJhcmVseSBtYXRjaGVzIGEgbW92aW5nIGV4cGVjdGF0aW9uLlxuKyAqXG4rICogU3RyZWFtIHN0YXRlIGxpdmVzIGluIGEgQ0dSUF9TVE9SQUdFIG1hcCwgc28gaXQgaXMgY3JlYXRlZCBhbmRcbisgKiBmcmVlZCB3aXRoIHRoZSBjZ3JvdXAuICBUaGUgbW9kZWwgaW1wbGVtZW50cyB0aGUgZnVsbCBidWlsdGluXG4rICogbGluZWFyIGZvcm11bGEgaXRzZWxmLCBpbmNsdWRpbmcgZmx1c2ggcHJpY2luZy5cbisgKi9cbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuKy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovXG4rI2RlZmluZSBJT0NfUEFHRV9TSVpFXHRcdDQwOTZcbisjZGVmaW5lIElPQ19TRUNUX1RPX1BBR0VfU0hJRlRcdDNcdC8qIDUxMkIgc2VjdG9ycyB0byA0a0IgcGFnZXMgKi9cbisjZGVmaW5lIExDT0VGX1JBTkRJT19QQUdFU1x0NDA5Nlx0LyogMTZNQiBzZWVrIHRocmVzaG9sZCAqL1xuKyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXHQvKiBub3QgaW4gQlRGOiBhIHBsYWluIG1hY3JvICovXG4rI2RlZmluZSBJT0NPU1RfUkVRX09QX01BU0tcdDB4ZmZcdFx0LyogUkVRX09QX01BU0ssIG5vdCBpbiBCVEYgKi9cbitcbisvKlxuKyAqIERJVjY0X1U2NF9ST1VORF9VUCAvIERJVl9ST1VORF9VUF9VTEwgZXF1aXZhbGVudHMsIGZvbGRlZCBhdFxuKyAqIGNvbXBpbGUgdGltZVxuKyAqL1xuKyNkZWZpbmUgUlUoeCwgeSlcdFx0KCh4KSAvICh5KSArICgoKHgpICUgKHkpKSA/IDEgOiAwKSlcbitcbisjZGVmaW5lIFJCUFNcdDE3NDAxOTE3NlVMTFxuKyNkZWZpbmUgUlNFUUlPUFNcdDQxNzA4VUxMXG4rI2RlZmluZSBSUkFORElPUFNcdDM3MFVMTFxuKyNkZWZpbmUgV0JQU1x0MTc4MDc1ODY2VUxMXG4rI2RlZmluZSBXU0VRSU9QU1x0NDI3MDVVTExcbisjZGVmaW5lIFdSQU5ESU9QU1x0Mzc4VUxMXG4rXG4rI2RlZmluZSBSUEFHRVx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSlcbisjZGVmaW5lIFJTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFJTRVFJT1BTKSAtIFJQQUdFKVxuKyNkZWZpbmUgUlJBTkRJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFJSQU5ESU9QUykgLSBSUEFHRSlcbisjZGVmaW5lIFdQQUdFXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKVxuKyNkZWZpbmUgV1NFUUlPXHQoUlUoVlRJTUVfUEVSX1NFQywgV1NFUUlPUFMpIC0gV1BBR0UpXG4rI2RlZmluZSBXUkFORElPXHQoUlUoVlRJTUVfUEVSX1NFQywgV1JBTkRJT1BTKSAtIFdQQUdFKVxuK1xuKyNkZWZpbmUgTlNMT1RTXHQ0XG4rXG4rc3RydWN0IHN0cmVhbXMge1xuK1x0X191NjQgZXhwZWN0ZWRbTlNMT1RTXTtcdC8qIG5leHQgZXhwZWN0ZWQgc2VjdG9yLCBwZXIgc3RyZWFtICovXG4rXHRfX3U2NCBzdGFtcFtOU0xPVFNdO1x0LyogTFJVIHN0YW1wLCAwID0gZW1wdHkgKi9cbit9O1xuK1xuKy8qXG4rICogcGVyLWNncm91cCBzdHJlYW0gdGFibGU6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXRcbisgKi9cbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9DR1JQX1NUT1JBR0UpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IHN0cmVhbXMpO1xuK30gc3RyZWFtX3RhYiBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rdTY0IEJQRl9QUk9HKGlvY29zdF9tc19jYWxjX2Nvc3QsIHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHU2NCBzZWN0b3IsXG4rXHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncylcbit7XG4rXHRzdHJ1Y3Qgc3RyZWFtcyAqcztcbitcdHU2NCBwYWdlcywgYmFzZSwgY29lZl9wYWdlLCByYW5kaW8sIGFkdmFuY2UsIG5vdztcbitcdHUzMiBpLCB2aWN0aW0gPSAwLCBmb3VuZCA9IDB4RkZGRkZGRkY7XG4rXG4rXHRpZiAoKG9wZiBcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfUkVBRCkge1xuK1x0XHRiYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTztcbitcdH0gZWxzZSBpZiAoKG9wZiBcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfV1JJVEUpIHtcbitcdFx0YmFzZSA9IFdTRVFJTzsgY29lZl9wYWdlID0gV1BBR0U7IHJhbmRpbyA9IFdSQU5ESU87XG4rXHR9IGVsc2Uge1xuK1x0XHQvKlxuK1x0XHQgKiBhIGZ1bGx5IG93bmluZyBtb2RlbCBtdXN0IHByaWNlIGV2ZXJ5IG9wOyB1bmtub3duXG4rXHRcdCAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGVcbitcdFx0ICovXG4rXHRcdGJhc2UgPSAwOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gMDtcbitcdH1cbitcdGFkdmFuY2UgPSBSVShuYnl0ZXMsIDUxMik7XHQvKiBzZWN0b3JzICovXG4rXG4rXHRzID0gYnBmX2NncnBfc3RvcmFnZV9nZXQoXHUwMDI2c3RyZWFtX3RhYiwgYmxrY2ctXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcbitcdFx0XHRcdCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xuK1x0aWYgKCFzKVxuK1x0XHRyZXR1cm4gYmFzZSArIFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSkgKiBjb2VmX3BhZ2U7XG4rXG4rXHRub3cgPSBicGZfa3RpbWVfZ2V0X25zKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOU0xPVFM7IGkrKykge1xuK1x0XHRpZiAocy1cdTAwM2VleHBlY3RlZFtpXSA9PSBzZWN0b3IgXHUwMDI2XHUwMDI2IHMtXHUwMDNlc3RhbXBbaV0pIHtcbitcdFx0XHRmb3VuZCA9IGk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmIChmb3VuZCAhPSAweEZGRkZGRkZGKSB7XG4rXHRcdC8qIHNlcXVlbnRpYWw6IGtlZXAgdGhlIHNlcSBiYXNlIGZyb20gdGhlIG9wIGJyYW5jaCAqL1xuK1x0XHRzLVx1MDAzZWV4cGVjdGVkW2ZvdW5kXSA9IHNlY3RvciArIGFkdmFuY2U7XG4rXHRcdHMtXHUwMDNlc3RhbXBbZm91bmRdID0gbm93O1xuK1x0fSBlbHNlIHtcbitcdFx0YmFzZSA9IHJhbmRpbztcbitcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgTlNMT1RTOyBpKyspIHtcbitcdFx0XHRpZiAocy1cdTAwM2VzdGFtcFtpXSBcdTAwM2Mgcy1cdTAwM2VzdGFtcFt2aWN0aW1dKVxuK1x0XHRcdFx0dmljdGltID0gaTtcbitcdFx0fVxuK1x0XHRzLVx1MDAzZWV4cGVjdGVkW3ZpY3RpbV0gPSBzZWN0b3IgKyBhZHZhbmNlO1xuK1x0XHRzLVx1MDAzZXN0YW1wW3ZpY3RpbV0gPSBub3c7XG4rXHR9XG4rXG4rXHRwYWdlcyA9IFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSk7XG4rXHRpZiAoIXBhZ2VzKVxuK1x0XHRwYWdlcyA9IDE7XHQvKiBkYXRhbGVzcyBmbHVzaDogb25lIHBhZ2UgKi9cbitcdGlmIChtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkge1xuK1x0XHQvKlxuK1x0XHQgKiBtZXJnZWQgYmlvcyBza2lwIHRoZSBiYXNlIGNvc3QgYnV0IHN0aWxsIGFkdmFuY2VcbitcdFx0ICogdGhlIHN0cmVhbSBwb3NpdGlvbiBhYm92ZSwgc28gYSBtZXJnZSBhdCB0aGVcbitcdFx0ICogZXhwZWN0ZWQgc2VjdG9yIGRvZXMgbm90IG1ha2UgdGhlIGZvbGxvd2luZyBuZXcgSU9cbitcdFx0ICogbG9vayByYW5kb21cbitcdFx0ICovXG4rXHRcdGJhc2UgPSAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGJhc2UgKyBwYWdlcyAqIGNvZWZfcGFnZTtcbit9XG4rXG4rU0VDKFwiLnN0cnVjdF9vcHNcIilcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfbXMgPSB7XG4rXHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfbXNfY2FsY19jb3N0LFxuK1x0Lm5hbWUgPSBcImlvY29zdF9tc1wiLFxuK307XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMDo1Mi4zOTM4ODE5MDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MzA2NjcyNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGLUJhc2VkIEJsb2NrIElPIENvc3QgTW9kZWwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHNlcmllcyBsb29rcyBpbnRlcmVzdGluZy4gSXQncyBpbnRyb2R1Y2luZyBCUEYgcGx1Z2dhYmxlIGNvc3QgbW9kZWwgc3VwcG9ydCBmb3IgdGhlIGJsb2NrIElPIGNvbnRyb2xsZXIgKGJsay1pb2Nvc3QpLCBsZXZlcmFnaW5nIEJQRiBzdHJ1Y3Rfb3BzIChgaW9jb3N0X21vZGVsX29wc2ApLiBMZXQncyBicmVhayBkb3duIHRoZSBjaGFuZ2VzIGFuZCBzZWUgaWYgdGhpcyBpcyBzb21ldGhpbmcgd2UgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvLlxuXG5GaXJzdCwgdGhlcmUncyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgaW4gYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdGAsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbi4gVGhlbiwgYSBuZXcgY29uZmlnIG9wdGlvbiwgYEJMS19DR1JPVVBfSU9DT1NUX0JQRmAsIGluIGBibG9jay9LY29uZmlnYC4gSXQgaGFzIHNvbWUgZGVwZW5kZW5jaWVzOiBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLiBBbHJpZ2h0LCBzbyBCUEYgYW5kIHRoZSBpbyBjb3N0IG1vZGVsIG5lZWQgdG8gYmUgc2V0IHVwIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIE1ha2VmaWxlIG5vdyBpbmNsdWRlcyBgYmxrLWlvY29zdC1icGYub2Agd2hlbiB0aGF0IGNvbmZpZyBpcyBlbmFibGVkLlxuXG5JbiBgYmxvY2svYmxrLWNncm91cC5jYCwgdGhleSd2ZSBhZGRlZCBob29rcyB0byB0aGUgY2dyb3VwIGxpZmVjeWNsZSBjYWxsYmFja3MsIGBibGtjZ19jc3Nfb2ZmbGluZWAgYW5kIGBibGtjZ19jc3Nfb25saW5lYCwgdG8gdHJpZ2dlciBzb21lIG5ldyBgaW9jb3N0X25vdGlmeWAgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgaW4gYGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmNgLCB3aGljaCBjb250YWlucyB0aGUgYWN0dWFsIEJQRiBzdHJ1Y3Rfb3BzLCBhbG9uZyB3aXRoIHJlZ2lzdHJhdGlvbiwgbG9va3VwLCBhbmQgbm90aWZpY2F0aW9uIGNhbGxiYWNrcy4gSXQgbG9va3MgbGlrZSB0aGUgZ2x1ZSBjb2RlIHRoYXQgbWFrZXMgZXZlcnl0aGluZyB3b3JrLlxuXG5gYmxvY2svYmxrLWlvY29zdC5jYCBoYXMgc2VlbiB0aGUgbW9zdCBjaGFuZ2VzLCB3aXRoIGhvb2tzIGludG8gdGhlIGNvc3QgY2FsY3VsYXRpb24gZnVuY3Rpb25zIChgY2FsY192dGltZV9jb3N0YCwgYGNhbGNfc2l6ZV92dGltZV9jb3N0YCksIHRoZSBJTyBRb1MgZXhpdCBmdW5jdGlvbiAoYGlvY19ycW9zX2V4aXRgKSwgYW5kIHNvbWUgb3RoZXIga2V5IHBvaW50cywgbGlrZSBgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsYCwgYGlvY19icGZfbW9kZWxfYmluZGAsIGBpb2NfY29zdF9tb2RlbF93cml0ZWAgYW5kIGFsc28gYSB0cmFjZXBvaW50IGBpb2Nvc3RfaW9jX3RpY2tgLiBgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmhgIGRlZmluZXMgdGhlIGBpb2Nvc3RfbW9kZWxfb3BzYCBzdHJ1Y3R1cmUgYW5kIHJlbGF0ZWQgZnVuY3Rpb24gaGVhZGVycywgd2hpbGUgYGluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oYCBpbnRyb2R1Y2VzIGEgbmV3IHRyYWNlIGV2ZW50LiBXZSBhbHNvIGhhdmUgc2VsZnRlc3RzIGZvciBCUEYuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZSwgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IExldCdzIHNlZS4uLiBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gUUVNVSBvciBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIGJsay1pb2Nvc3QsIGJsay1jZ3JvdXAsIEJQRiwgYW5kIGNncm91cCB2MiBpby5jb3N0Lm1vZGVsIHN5c2ZzL2Nncm91cCBpbnRlcmZhY2UsIHRoaXMgaXMgYWxsIHZlcnkgcmVhY2hhYmxlLiBBcmUgdGhlc2UgY29yZSBrZXJuZWwgY2hhbmdlcz8gWWVzLCB0aGlzIGhpdHMgdGhlIGNvcmUgYmxvY2sgbGF5ZXIsIEJQRiBzdWJzeXN0ZW0sIGFuZCBjZ3JvdXAgSU8gY29udHJvbGxlci4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIVxuXG5JIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN5bWJvbHMgYW5kIGNvbmZpZ3MuIEknbGwgcHJvYmFibHkgbmVlZCB0byB1c2UgZ3JlcCBvciBhIGNvZGUgc2VhcmNoIHRvb2wgdG8gY2hlY2sgZGVwZW5kZW5jaWVzIG1vcmUgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMTowMS43MDA1NTc0OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNjIxMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0xNDU9Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcXG4tLVxcbmJsb2NrL0tjb25maWctMTUzLVxcbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxcbmJsb2NrL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZz0yMzI9c291cmNlIFxcXCJibG9jay9LY29uZmlnLmlvc2NoZWRcXFwiXFxuYmxvY2svS2NvbmZpZy0yMzMtXFxuYmxvY2svS2NvbmZpZzoyMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUX0JQRlxcbmJsb2NrL0tjb25maWctMjM1LVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgcGx1Z2dhYmxlIGNvc3QgbW9kZWwgc3VwcG9ydCBmb3IgdGhlIGNvc3QgSU8gY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MDEuODQxMTgyODYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg0NDY4MjEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UsIGBibG9jay9LY29uZmlnYCBpcyB1c3VhbGx5IHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBJJ20gcHJldHR5IHN1cmUgSSd2ZSBiZWVuIGluIHRoZXJlIGJlZm9yZS4uLiBub3cgd2hlcmUgd2FzIHRoYXQgc2V0dGluZz8gUmlnaHQsIGl0J3MgdmFndWVseSBmYW1pbGlhci4uLiBIbW0sIGxpbmVzIDE1NCBhbmQgMjM0IGluIHRoYXQgZmlsZSBzb3VuZCBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBMZXQncyBzZWUgd2hhdCdzIGRlZmluZWQgYXJvdW5kIHRob3NlIGxpbmVzLiBJJ2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGNoZWNrIHRoZW0uIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmUsIG9yIGF0IGxlYXN0IHByb3ZpZGUgc29tZSBjbHVlcyB0byBmb2xsb3chXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MDQuNjg1ODY5NDg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcdCAgY2dyb3VwIGFwcGxpY2F0aW9ucy4gSXQgZW5hYmxlcyB0aGUgRmFicmljIGFuZCB0aGUgc3RvcmFnZSB0YXJnZXRzIHRvXFxuIDE1MTpcXHRcXHQgIGlkZW50aWZ5LCBtb25pdG9yLCBhbmQgaGFuZGxlIEZDIHRyYWZmaWMgYmFzZWQgb24gVk0gdGFncyBieSBpbnNlcnRpbmdcXG4gMTUyOlxcdFxcdCAgYXBwbGljYXRpb24gc3BlY2lmaWMgaWRlbnRpZmljYXRpb24gaW50byB0aGUgRkMgZnJhbWUuXFxuIDE1MzpcXHRcXG4gMTU0OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxcbiAxNTU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuIDE1NjpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTU3OlxcdFxcdHNlbGVjdCBCTEtfUlFfQUxMT0NfVElNRVxcbiAxNTg6XFx0XFx0aGVscFxcbiAxNTk6XFx0XFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLndlaWdodCBpbnRlcmZhY2UgZm9yIGNvc3RcXG4gMTYwOlxcdFxcdG1vZGVsIGJhc2VkIHByb3BvcnRpb25hbCBJTyBjb250cm9sLiAgVGhlIElPIGNvbnRyb2xsZXJcXG4gMTYxOlxcdFxcdGRpc3RyaWJ1dGVzIElPIGNhcGFjaXR5IGJldHdlZW4gZGlmZmVyZW50IGdyb3VwcyBiYXNlZCBvblxcbiAxNjI6XFx0XFx0dGhlaXIgc2hhcmUgb2YgdGhlIG92ZXJhbGwgd2VpZ2h0IGRpc3RyaWJ1dGlvbi5cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXFxuIDE2NTpcXHRcXHRib29sIFxcXCJDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcXFwiXFxuIDE2NjpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTY3OlxcdFxcdGhlbHBcXG4gMTY4OlxcdFxcdEVuYWJsZSB0aGUgLnByaW8gaW50ZXJmYWNlIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzIHRvXFxuIDE2OTpcXHRcXHRyZXF1ZXN0cy4gVGhlIEkvTyBwcmlvcml0eSBjbGFzcyBhZmZlY3RzIHRoZSBvcmRlciBpbiB3aGljaCBhbiBJL09cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MDQuNjg2MDAwMDI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxODc5MDI2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQkxLX0NHUk9VUF9JT0NPU1RfQlBGIERlcGVuZGVuY2llcyBhbmQgS2V5IEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19DR1JPVVBfSU9DT1NUX0JQRmAuIEkgc2VlIGl0IHJlbGllcyBvbiBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLiBGdXJ0aGVyLCBgQkxLX0NHUk9VUF9JT0NPU1RgIGl0c2VsZiBkZXBlbmRzIG9uIGBCTEtfQ0dST1VQYC4gU28sIEknbGwgbmVlZCB0byBlbmFibGUgdGhvc2UgY29uZmlndXJhdGlvbnM6IGBCTEtfQ0dST1VQX0lPQ09TVF9CUEZgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQkxLX0NHUk9VUGAuIEdvb2QsIGdvdCB0aGUgS2NvbmZpZyBzaWRlIGhhbmRsZWQuXG5cbk5vdywgSSdtIGRpZ2dpbmcgaW50byB0aGUgY29kZS4gSW4gYGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmNgLCBJIHNwb3QgdGhlIHVzZSBvZiBgQ09ORklHX0NHUk9VUFNgIGZvciBgQlBGX0ZVTkNfY2dycF9zdG9yYWdlX2dldGAsIGFuZCBgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmAgaXMgdXNlZCB0byBjb21waWxlIGBibG9jay9ibGstaW9jb3N0LWJwZi5vYC4gSW4gYGJsb2NrL2Jsay1pb2Nvc3QuY2AsIEkgc2VlIGAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmAsIHdoaWNoIG1lYW5zIHRoZSBCUEYgZmVhdHVyZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluLlxuXG5OZXh0LCB0aGUgY3JpdGljYWwgc3RlcDogaWRlbnRpZnlpbmcgdGhlIG1vZGlmaWVkIGFuZCBpbnRyb2R1Y2VkIGZ1bmN0aW9ucy4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBsaWVzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXhpc3Rpbmcgc3lzdGVtLiBGcm9tIGBibG9jay9ibGstaW9jb3N0LWJwZi5jYCwgdGhlc2UgbG9vayBpbXBvcnRhbnQ6IGBpb2Nvc3RfYnBmX21vZGVsX2dldGAsIGBpb2Nvc3RfYnBmX21vZGVsX3B1dGAsIGBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZWAsIGBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmVgLCBhbmQgdGhlIHN0cnVjdF9vcHMgbWV0aG9kcyBgYnBmX2lvY29zdF9yZWdgLCBgYnBmX2lvY29zdF91bnJlZ2AsIGBicGZfaW9jb3N0X3ZhbGlkYXRlYCwgYGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyYCwgYGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXJgLCBgYnBmX2lvY29zdF9nZXRfZnVuY19wcm90b2AsIGBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2Vzc2AsIGBicGZfaW9jb3N0X21vZGVsX2luaXRgLiBUaGVuLCBpbiBgYmxvY2svYmxrLWlvY29zdC5jYCwgSSd2ZSBnb3QgYGlvY19icGZfbW9kZWxfYmluZGAsIGBpb2NfY29zdF9tb2RlbF93cml0ZWAsIGBjYWxjX3Z0aW1lX2Nvc3RgLCBgY2FsY19zaXplX3Z0aW1lX2Nvc3RgLCBgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsYCwgYGlvY19ycW9zX2V4aXRgLiBGaW5hbGx5LCBJIHNlZSB0aGF0IGNncm91cCBvcGVyYXRpb25zIChgYmxrY2dfY3NzX29mZmxpbmVgLCBgYmxrY2dfY3NzX29ubGluZWApIGluIGBibG9jay9ibGstY2dyb3VwLmNgIGFyZSBhbHNvIHBvdGVudGlhbGx5IHJlbGV2YW50LlxuXG5Ob3csIEknbSBjcm9zcy1yZWZlcmVuY2luZyB0byBjb25maXJtIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYW5kIGluZGVlZCwgdGhvc2UgSSBpZGVudGlmaWVkIGFyZSBub24tc3RhdGljIGFuZCBleHBvc2VkLCB3aGljaCBjb25maXJtcyB0aG9zZSBhcmUgaW50ZXJlc3RpbmcuXG5cbkZpbmFsbHksIEknbSBjaGVja2luZyBteSBndWlkZWxpbmVzLiBJIHdhbnQgdG8gdGFyZ2V0IHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGF2b2lkIHRoZSBnZW5lcmljIHN0dWZmLiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBuZXcga2V5IGZ1bmN0aW9ucyBmcm9tIGJvdGggZmlsZXMgdG8gYnVpbGQgYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuIEknbSBjaG9vc2luZyB0aGUgZm9sbG93aW5nIGFzIHRoZSBgRm9jdXNTeW1ib2xzYDogYGlvY19icGZfbW9kZWxfYmluZGAsIGBpb2NfY29zdF9tb2RlbF93cml0ZWAsIGBjYWxjX3Z0aW1lX2Nvc3RgLCBgY2FsY19zaXplX3Z0aW1lX2Nvc3RgLCBgYnBmX2lvY29zdF9yZWdgLCBgYnBmX2lvY29zdF91bnJlZ2AsIGBicGZfaW9jb3N0X3ZhbGlkYXRlYCwgYGlvY29zdF9icGZfbW9kZWxfZ2V0YCwgYGlvY29zdF9icGZfbW9kZWxfcHV0YCwgYGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lYCwgYGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZWAuXG5cbk9rYXksIEkndmUgZ290IGV2ZXJ5dGhpbmcgbGluZWQgdXAuIEFsbCB0aGUgY2hlY2tzIHBhc3MuIEknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhlIHRvb2wgY2FsbCBub3csIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ3ZlIGNhcmVmdWxseSBpZGVudGlmaWVkIHRoZSBrZXkgY29tcG9uZW50cyByZWxhdGVkIHRvIHRoZSBCUEYtYmFzZWQgSS9PIGNvc3QgYWNjb3VudGluZyBhbmQgdGhlIGludGVncmF0aW9uIHdpdGggY2dyb3Vwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzOTgsIk91dHB1dFRva2VucyI6MzI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjExOjE0Ljg3MzkwNTU5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjkzNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVF9CUEZcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb2NfYnBmX21vZGVsX2JpbmRcIixcbiAgICBcImlvY19jb3N0X21vZGVsX3dyaXRlXCIsXG4gICAgXCJjYWxjX3Z0aW1lX2Nvc3RcIixcbiAgICBcImNhbGNfc2l6ZV92dGltZV9jb3N0XCIsXG4gICAgXCJicGZfaW9jb3N0X3JlZ1wiLFxuICAgIFwiYnBmX2lvY29zdF91bnJlZ1wiLFxuICAgIFwiYnBmX2lvY29zdF92YWxpZGF0ZVwiLFxuICAgIFwiaW9jb3N0X2JwZl9tb2RlbF9nZXRcIixcbiAgICBcImlvY29zdF9icGZfbW9kZWxfcHV0XCIsXG4gICAgXCJpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZVwiLFxuICAgIFwiaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IChpb2Nvc3RfbW9kZWxfb3BzKSBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzIGluIGJsay1pb2Nvc3QuIEl0IGludHJvZHVjZXMgbmV3IGtlcm5lbCBjb2RlIGluIGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgZm9yIHJlZ2lzdGVyaW5nLCB2YWxpZGF0aW5nLCBhbmQgbWFuYWdpbmcgQlBGIGNvc3QgbW9kZWxzLCBhbmQgdXBkYXRlcyBibG9jay9ibGstaW9jb3N0LmMgYW5kIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBtb2RlbHMgZHVyaW5nIElPIGNvc3QgY2FsY3VsYXRpb25zLCBjb25maWd1cmF0aW9uIHdyaXRlcywgYW5kIGNncm91cCBsaWZlY3ljbGUgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEJQRiBzeXNjYWxscyBhbmQgY2dyb3VwIHYyIGlvLmNvc3QubW9kZWwgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVF9CUEZcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb2NfYnBmX21vZGVsX2JpbmRcIixcbiAgICBcImlvY19jb3N0X21vZGVsX3dyaXRlXCIsXG4gICAgXCJjYWxjX3Z0aW1lX2Nvc3RcIixcbiAgICBcImNhbGNfc2l6ZV92dGltZV9jb3N0XCIsXG4gICAgXCJicGZfaW9jb3N0X3JlZ1wiLFxuICAgIFwiYnBmX2lvY29zdF91bnJlZ1wiLFxuICAgIFwiYnBmX2lvY29zdF92YWxpZGF0ZVwiLFxuICAgIFwiaW9jb3N0X2JwZl9tb2RlbF9nZXRcIixcbiAgICBcImlvY29zdF9icGZfbW9kZWxfcHV0XCIsXG4gICAgXCJpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZVwiLFxuICAgIFwiaW9jb3N0X25vdGlmeV9ibGtjZ19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IChpb2Nvc3RfbW9kZWxfb3BzKSBmb3IgcGx1Z2dhYmxlIGNvc3QgbW9kZWxzIGluIGJsay1pb2Nvc3QuIEl0IGludHJvZHVjZXMgbmV3IGtlcm5lbCBjb2RlIGluIGJsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgZm9yIHJlZ2lzdGVyaW5nLCB2YWxpZGF0aW5nLCBhbmQgbWFuYWdpbmcgQlBGIGNvc3QgbW9kZWxzLCBhbmQgdXBkYXRlcyBibG9jay9ibGstaW9jb3N0LmMgYW5kIGJsb2NrL2Jsay1jZ3JvdXAuYyB0byBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBtb2RlbHMgZHVyaW5nIElPIGNvc3QgY2FsY3VsYXRpb25zLCBjb25maWd1cmF0aW9uIHdyaXRlcywgYW5kIGNncm91cCBsaWZlY3ljbGUgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEJQRiBzeXNjYWxscyBhbmQgY2dyb3VwIHYyIGlvLmNvc3QubW9kZWwgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MTUuMDI4MjA4MDY2WiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1Njk3NjQ1MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MTUuMDI4NzAxMzE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzU2OTcxNDg3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIEJQRiBzdHJ1Y3Rfb3BzIHN1cHBvcnQgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscyBpbiBibGstaW9jb3N0IChgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRmApLCBhZGRpbmcgYGlvY29zdF9tb2RlbF9vcHNgLCBtb2RlbCByZWdpc3RyYXRpb24vbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHBhcnNpbmcgaW4gYGlvLmNvc3QubW9kZWxgLCBhbmQgYSBuZXcgdHJhY2Vwb2ludCBgaW9jb3N0X2lvY190aWNrYC5cXG5cXG5BbiBldmFsdWF0aW9uIG9mIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGFuZCBuZXcgY29kZSBzaG93czpcXG4tIEFsbCBzdGFjayB2YXJpYWJsZXMgKHN1Y2ggYXMgYGJwZl9tb2RlbGAgaW5pdGlhbGl6ZWQgd2l0aCBgYnBmX21vZGVsWzBdID0gJ1xcXFwwJ2AsIGBucl9hY3RpdmVgIGluaXRpYWxpemVkIHRvIDAsIGFuZCBgYnVmYCBidWZmZXJzIGZpbGxlZCB3aXRoIGBtYXRjaF9zdHJsY3B5YCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSByZWFkL3VzZS5cXG4tIER5bmFtaWMgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jYCAoZm9yIGBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbGApIGFuZCB0aGUgZXhpc3RpbmcgemVyb2VkIGFsbG9jYXRpb24gZm9yIGBzdHJ1Y3QgaW9jYC5cXG4tIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZTsgb3V0cHV0IHRvIHVzZXIgc3BhY2UgaXMgaGFuZGxlZCB2aWEgZm9ybWF0dGVkIHRleHQgaW4gYHNlcV9wcmludGZgLlxcbi0gVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gQlBGIGNhbGxiYWNrcyAoYGNhbGNfY29zdGAsIGBibGtjZ19vbmxpbmVgLCBgYmxrY2dfb2ZmbGluZWApIGFyZSBkZXJpdmVkIGRpcmVjdGx5IGZyb20gaW5pdGlhbGl6ZWQgYmlvL3JlcXVlc3Qgc3RydWN0dXJlcyBhbmQgYmxrY2cgcG9pbnRlcnMuXFxuXFxuVGhlIHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggc2VyaWVzIHBlcnRhaW4gdG8gUkNVIHN5bmNocm9uaXphdGlvbiwgb2JqZWN0IHJlZmNvdW50aW5nL2xpZmV0aW1lIChgYnBmX3N0cnVjdF9vcHNfZ2V0YC9gcHV0YCksIGFuZCBsb2NraW5nLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZGV0ZWN0b3JzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHNwZWNpZmljIHRvIEtNU0FOIGFyZSBwcmVzZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjNTBkNDAzNDM4YjRiNGUxODhiMTQ4YTBhYjVjYzRhZjViNjdhMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNDoxMDo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuaW5kZXggOGQyNjAzNzUxYzUxYS4uYTY5MTBhZDdjMmQwMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5AQCAtMjEyNCw2ICsyMTI0LDE3IEBAIElPIEludGVyZmFjZSBGaWxlc1xuIFx0cGFyYW1ldGVycyBhcmUgd3JpdHRlbiB0bywgXCJjdHJsXCIgYmVjb21lIFwidXNlclwiIGFuZCB0aGVcbiBcdGF1dG9tYXRpYyBjaGFuZ2VzIGFyZSBkaXNhYmxlZC5cbiBcbitcdFdoZW4gQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiBpcyBlbmFibGVkLCBcIm1vZGVsXCIgYWxzbyBhY2NlcHRzXG4rXHR0aGUgbmFtZSBvZiBhIHJlZ2lzdGVyZWQgaW9jb3N0X21vZGVsX29wcyBCUEYgc3RydWN0X29wcyBtb2RlbDpcbitcdFwibW9kZWw9XHUwMDNjbmFtZVx1MDAzZVwiIGJpbmRzIHRoZSBtb2RlbCB0byB0aGUgZGV2aWNlIGFuZCB0aGUgbW9kZWwgZnVsbHlcbitcdHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBwcmljaW5nLCBmb3IgZXZlcnkgb3BlcmF0aW9uIGluY2x1ZGluZ1xuK1x0Zmx1c2hlczsgXCJtb2RlbD1saW5lYXJcIiAob3IgXCJjdHJsPWF1dG8vdXNlclwiKSByZXN0b3JlcyB0aGUgYnVpbHRpblxuK1x0bW9kZWwuICBXcml0aW5nIGFuIHVua25vd24gbmFtZSBmYWlscyB3aXRoIEVOT0VOVC4gIFVucmVnaXN0ZXJpbmdcbitcdGEgbW9kZWwgcmVtb3ZlcyBpdHMgbmFtZTsgZGV2aWNlcyBhbHJlYWR5IGJvdW5kIGtlZXAgdXNpbmcgaXRcbitcdHVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGZvbGxvd2luZyB0aGUgbGlmZXRpbWVcbitcdG1vZGVsIG9mIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wuICBTZWUgaW5jbHVkZS9saW51eC9ibGstaW9jb3N0LmhcbitcdGZvciB0aGUgbW9kZWwgaW50ZXJmYWNlLlxuK1xuIFx0V2hlbiBcIm1vZGVsXCIgaXMgXCJsaW5lYXJcIiwgdGhlIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzIGFyZVxuIFx0ZGVmaW5lZC5cbiBcbmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZ1xuaW5kZXggNzBlNGE2NmQ5NDFmZi4uOTFlODA4Zjg2ZDI4ZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL0tjb25maWdcbisrKyBiL2Jsb2NrL0tjb25maWdcbkBAIC0yMzEsNCArMjMxLDEzIEBAIGNvbmZpZyBCTEtfRVJST1JfSU5KRUNUSU9OXG4gXG4gc291cmNlIFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkXCJcbiBcbitjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHRib29sIFwiRW5hYmxlIEJQRiBwbHVnZ2FibGUgY29zdCBtb2RlbCBzdXBwb3J0IGZvciB0aGUgY29zdCBJTyBjb250cm9sbGVyXCJcbitcdGRlcGVuZHMgb24gQkxLX0NHUk9VUF9JT0NPU1QgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuK1x0aGVscFxuK1x0IEVuYWJsaW5nIHRoaXMgb3B0aW9uIHJlZ2lzdGVycyB0aGUgXCJpb2Nvc3RfbW9kZWxfb3BzXCIgQlBGXG4rXHQgc3RydWN0X29wcyB0eXBlLCB3aGljaCBhbGxvd3MgYSBCUEYgcHJvZ3JhbSB0byBmdWxseSByZXBsYWNlXG4rXHQgdGhlIGJ1aWx0aW4gbGluZWFyIGNvc3QgbW9kZWwgb24gYSBkZXZpY2UgaXQgaXMgYm91bmQgdG9cbitcdCB0aHJvdWdoIGlvLmNvc3QubW9kZWwuXG4rXG4gZW5kaWYgIyBCTE9DS1xuZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGVcbmluZGV4IGU3YmQzMjBlM2Q2OTcuLmVlNWNlYmVlYTAwNmYgMTAwNjQ0XG4tLS0gYS9ibG9jay9NYWtlZmlsZVxuKysrIGIvYmxvY2svTWFrZWZpbGVcbkBAIC0zOSwzICszOSw0IEBAIG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT04pXHQrPSBibGstY3J5cHRvLm8gYmxrLWNyeXB0by1wcm9maWxlLm8gXFxcbiBcdFx0XHRcdFx0ICAgYmxrLWNyeXB0by1zeXNmcy5vXG4gb2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcdCs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xuIG9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcdCs9IGhvbGRlci5vXG4rb2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRilcdCs9IGJsay1pb2Nvc3QtYnBmLm9cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IDJiNWMyOTQzNGU0MjYuLjg3Mjg3MTA0NTM1MWMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY2dyb3VwLmNcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuQEAgLTMyLDYgKzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFwiYmxrLmhcIlxuICNpbmNsdWRlIFwiYmxrLWNncm91cC5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGstaW9jb3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcImJsay1pb3ByaW8uaFwiXG4gI2luY2x1ZGUgXCJibGstdGhyb3R0bGUuaFwiXG4gXG5AQCAtMTM0MSw2ICsxMzQyLDcgQEAgdm9pZCBibGtjZ191bnBpbl9vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2NnX2NzcylcbiAgKi9cbiBzdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIHtcbitcdGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShjc3NfdG9fYmxrY2coY3NzKSk7XG4gXHQvKiB0aGlzIHByZXZlbnRzIGFueW9uZSBmcm9tIGF0dGFjaGluZyBvciBtaWdyYXRpbmcgdG8gdGhpcyBibGtjZyAqL1xuIFx0d2JfYmxrY2dfb2ZmbGluZShjc3MpO1xuIFxuQEAgLTE0NDUsNiArMTQ0Nyw3IEBAIGJsa2NnX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiBcbiBzdGF0aWMgaW50IGJsa2NnX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiB7XG4rXHRpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShjc3NfdG9fYmxrY2coY3NzKSk7XG4gXHRzdHJ1Y3QgYmxrY2cgKnBhcmVudCA9IGJsa2NnX3BhcmVudChjc3NfdG9fYmxrY2coY3NzKSk7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2Nvc3QtYnBmLmMgYi9ibG9jay9ibGstaW9jb3N0LWJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWVjNmRmMjc5NTk5MFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYmxvY2svYmxrLWlvY29zdC1icGYuY1xuQEAgLTAsMCArMSwyNTAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogYmxrLWlvY29zdDogQlBGIHN0cnVjdF9vcHMgcGx1bWJpbmcgZm9yIHBsdWdnYWJsZSBjb3N0IG1vZGVscy5cbisgKlxuKyAqIFJlZ2lzdGVycyB0aGUgXCJpb2Nvc3RfbW9kZWxfb3BzXCIgc3RydWN0X29wcyB0eXBlIGFuZCBtYWludGFpbnMgdGhlXG4rICogbmFtZSByZWdpc3RyeSBvZiByZWdpc3RlcmVkIG1vZGVscy4gIEEgcmVnaXN0ZXJlZCBtb2RlbCBpcyBib3VuZCB0b1xuKyAqIGEgZGV2aWNlIHRocm91Z2ggaW8uY29zdC5tb2RlbDsgc2VlIGluY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oLlxuKyAqL1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXHUwMDNlXG4rXG4rc3RhdGljIERFRklORV9NVVRFWChpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitzdGF0aWMgTElTVF9IRUFEKGlvY29zdF9icGZfbW9kZWxzKTtcbitcbisvKlxuKyAqIFRoZSByZWdpc3RyeSBob2xkcyBhIGJwZl9zdHJ1Y3Rfb3BzX2dldCgpIHJlZmVyZW5jZSBvYnRhaW5lZCBpbiAucmVnO1xuKyAqIC51bnJlZyBkcm9wcyBpdCwgc28gdGhlIGtkYXRhIG9mIGFuIHVucmVnaXN0ZXJlZCBtb2RlbCBzdGF5cyBhbGl2ZVxuKyAqIHdoaWxlIGFueSBkZXZpY2UgaXMgc3RpbGwgYm91bmQgdG8gaXQuXG4rICovXG4rc3RydWN0IGlvY29zdF9icGZfbW9kZWwge1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbitcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHM7XG4rfTtcbitcbisvKlxuKyAqIExvb2sgdXAgYSByZWdpc3RlcmVkIG1vZGVsIGJ5IG5hbWUgYW5kIGFjcXVpcmUgYSByZWZlcmVuY2Ugb24gaXQuXG4rICogVGhlIHJlZ2lzdHJ5IGxvY2sgaXMgaGVsZCBhY3Jvc3MgbG9va3VwIGFuZCBicGZfc3RydWN0X29wc19nZXQoKSBzb1xuKyAqIHRoZSBtb2RlbCBjYW5ub3QgYmUgdW5yZWdpc3RlcmVkIGluIGJldHdlZW4uXG4rICovXG4raW50IGlvY29zdF9icGZfbW9kZWxfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0IGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcClcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcdGludCByZXQgPSAtRU5PRU5UO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKCFzdHJjbXAobS1cdTAwM2VvcHMtXHUwMDNlbmFtZSwgbmFtZSkpIHtcbitcdFx0XHRpZiAoYnBmX3N0cnVjdF9vcHNfZ2V0KG0tXHUwMDNlb3BzKSkge1xuK1x0XHRcdFx0Km9wc3AgPSBtLVx1MDAzZW9wcztcbitcdFx0XHRcdHJldCA9IDA7XG4rXHRcdFx0fVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbit2b2lkIGlvY29zdF9icGZfbW9kZWxfcHV0KGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMpXG4re1xuK1x0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqXG4raW9jb3N0X2JwZl9tb2RlbF9sb29rdXAoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKG0tXHUwMDNlb3BzID09IG9wcylcbitcdFx0XHRyZXR1cm4gbTtcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb25saW5lKHN0cnVjdCBibGtjZyAqYmxrY2cpXG4re1xuK1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XG4rXHRcdGlmIChtLVx1MDAzZW9wcy1cdTAwM2VibGtjZ19vbmxpbmUpXG4rXHRcdFx0bS1cdTAwM2VvcHMtXHUwMDNlYmxrY2dfb25saW5lKGJsa2NnKTtcbitcdH1cbit9XG4rXG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29mZmxpbmUoc3RydWN0IGJsa2NnICpibGtjZylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZpb2Nvc3RfYnBmX3JlZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMsIGxpc3QpIHtcbitcdFx0aWYgKG0tXHUwMDNlb3BzLVx1MDAzZWJsa2NnX29mZmxpbmUpXG4rXHRcdFx0bS1cdTAwM2VvcHMtXHUwMDNlYmxrY2dfb2ZmbGluZShibGtjZyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9tb2RlbF9pbml0KHN0cnVjdCBidGYgKmJ0Zilcbit7XG4rXHRzMzIgdHlwZV9pZDtcbitcbitcdHR5cGVfaWQgPSBidGZfZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBcImlvY29zdF9tb2RlbF9vcHNcIiwgQlRGX0tJTkRfU1RSVUNUKTtcbitcdGlmICh0eXBlX2lkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgYm9vbCBicGZfaW9jb3N0X2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcbitcdFx0XHRcdCAgICAgICBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYWNjZXNzX2F1eCAqaW5mbylcbit7XG4rXHRyZXR1cm4gYnBmX3RyYWNpbmdfYnRmX2N0eF9hY2Nlc3Mob2ZmLCBzaXplLCB0eXBlLCBwcm9nLCBpbmZvKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG4rYnBmX2lvY29zdF9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXG4rXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0c3dpdGNoIChmdW5jX2lkKSB7XG4rI2lmZGVmIENPTkZJR19DR1JPVVBTXG4rXHRjYXNlIEJQRl9GVU5DX2NncnBfc3RvcmFnZV9nZXQ6XG4rXHRcdHJldHVybiBcdTAwMjZicGZfY2dycF9zdG9yYWdlX2dldF9wcm90bztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBicGZfYmFzZV9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IGJwZl9pb2Nvc3RfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0LyogY2FsY19jb3N0KCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkICovXG4rXHRpZiAocHJvZy1cdTAwM2VzbGVlcGFibGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4rXHRcdFx0XHQgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSlcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqdW9wcyA9IHVkYXRhO1xuK1x0dTMyIG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODtcbitcbitcdHN3aXRjaCAobW9mZikge1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcywgbmFtZSk6XG4rXHRcdGlmIChicGZfb2JqX25hbWVfY3B5KG9wcy1cdTAwM2VuYW1lLCB1b3BzLVx1MDAzZW5hbWUsXG4rXHRcdFx0XHQgICAgIHNpemVvZihvcHMtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBicGZfaW9jb3N0X3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxuK3tcbitcdHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICpvcHMgPSBrZGF0YTtcbitcbitcdHJldHVybiBvcHMtXHUwMDNlY2FsY19jb3N0ID8gMCA6IC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX2lvY29zdF9yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzID0ga2RhdGE7XG4rXHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqbTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKCFicGZfc3RydWN0X29wc19nZXQob3BzKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRtID0ga3phbGxvYyhzaXplb2YoKm0pLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbSkge1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1x0e1xuK1x0XHRzdHJ1Y3QgaW9jb3N0X2JwZl9tb2RlbCAqb3RoZXI7XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob3RoZXIsIFx1MDAyNmlvY29zdF9icGZfbW9kZWxzLCBsaXN0KSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAob3RoZXItXHUwMDNlb3BzLVx1MDAzZW5hbWUsIG9wcy1cdTAwM2VuYW1lKSkge1xuK1x0XHRcdFx0cmV0ID0gLUVFWElTVDtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0aWYgKCFyZXQpIHtcbitcdFx0bS1cdTAwM2VvcHMgPSBvcHM7XG4rXHRcdGxpc3RfYWRkKFx1MDAyNm0tXHUwMDNlbGlzdCwgXHUwMDI2aW9jb3N0X2JwZl9tb2RlbHMpO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1xuK1x0aWYgKHJldCkge1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0a2ZyZWUobSk7XG4rXHR9XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBicGZfaW9jb3N0X3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4re1xuK1x0c3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyA9IGtkYXRhO1xuK1x0c3RydWN0IGlvY29zdF9icGZfbW9kZWwgKm07XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmlvY29zdF9icGZfcmVnX2xvY2spO1xuK1x0bSA9IGlvY29zdF9icGZfbW9kZWxfbG9va3VwKG9wcyk7XG4rXHRpZiAobSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZtLVx1MDAzZWxpc3QpO1xuK1x0XHRicGZfc3RydWN0X29wc19wdXQob3BzKTtcbitcdFx0a2ZyZWUobSk7XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW9jb3N0X2JwZl9yZWdfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfaW9jb3N0X3ZlcmlmaWVyX29wcyA9IHtcbitcdC5nZXRfZnVuY19wcm90byA9IGJwZl9pb2Nvc3RfZ2V0X2Z1bmNfcHJvdG8sXG4rXHQuaXNfdmFsaWRfYWNjZXNzID0gYnBmX2lvY29zdF9pc192YWxpZF9hY2Nlc3MsXG4rfTtcbitcbitzdGF0aWMgdTY0IGJwZl9pb2Nvc3RfY2FsY19jb3N0X3N0dWIodTY0IG9wZiwgdTY0IG5ieXRlcywgdTY0IHNlY3RvcixcbitcdFx0XHRcdCAgICAgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IGZsYWdzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgX19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMgPSB7XG4rXHQuY2FsY19jb3N0ID0gYnBmX2lvY29zdF9jYWxjX2Nvc3Rfc3R1Yixcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2lvY29zdF9tb2RlbF9vcHMgPSB7XG4rXHQudmVyaWZpZXJfb3BzID0gXHUwMDI2YnBmX2lvY29zdF92ZXJpZmllcl9vcHMsXG4rXHQuaW5pdCA9IGJwZl9pb2Nvc3RfbW9kZWxfaW5pdCxcbitcdC5jaGVja19tZW1iZXIgPSBicGZfaW9jb3N0X2NoZWNrX21lbWJlcixcbitcdC5pbml0X21lbWJlciA9IGJwZl9pb2Nvc3RfaW5pdF9tZW1iZXIsXG4rXHQudmFsaWRhdGUgPSBicGZfaW9jb3N0X3ZhbGlkYXRlLFxuK1x0LnJlZyA9IGJwZl9pb2Nvc3RfcmVnLFxuK1x0LnVucmVnID0gYnBmX2lvY29zdF91bnJlZyxcbitcdC5uYW1lID0gXCJpb2Nvc3RfbW9kZWxfb3BzXCIsXG4rXHQuY2ZpX3N0dWJzID0gXHUwMDI2X19icGZfb3BzX2lvY29zdF9tb2RlbF9vcHMsXG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9pb2Nvc3RfaW5pdCh2b2lkKVxuK3tcbitcdHJldHVybiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcdTAwMjZicGZfaW9jb3N0X21vZGVsX29wcywgaW9jb3N0X21vZGVsX29wcyk7XG4rfVxuK2xhdGVfaW5pdGNhbGwoYnBmX2lvY29zdF9pbml0KTtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jb3N0LmMgYi9ibG9jay9ibGstaW9jb3N0LmNcbmluZGV4IDI3NDViZmZjZDVlZWYuLmJjY2RiZDI0OTZkODMgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstaW9jb3N0LmNcbisrKyBiL2Jsb2NrL2Jsay1pb2Nvc3QuY1xuQEAgLTE3Nyw2ICsxNzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhcnNlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWlvY29zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbG9jYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9sb2NhbDY0LmhcdTAwM2VcbkBAIC00NDUsNiArNDQ2LDExIEBAIHN0cnVjdCBpb2Mge1xuIFx0aW50XHRcdFx0XHRhdXRvcF9pZHg7XG4gXHRib29sXHRcdFx0XHR1c2VyX3Fvc19wYXJhbXM6MTtcbiBcdGJvb2xcdFx0XHRcdHVzZXJfY29zdF9tb2RlbDoxO1xuK1xuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHQvKiBib3VuZCBCUEYgY29zdCBtb2RlbCwgTlVMTCA9IGJ1aWx0aW4gbGluZWFyIG1vZGVsICovXG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wc1x0X19yY3UgKm1vZGVsO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IGlvY2dfcGNwdV9zdGF0IHtcbkBAIC0yMjM4LDYgKzIyNDQsNyBAQCBzdGF0aWMgdm9pZCBpb2NfdGltZXJfZm4oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuIFx0c3RydWN0IGlvY19ub3cgbm93O1xuIFx0TElTVF9IRUFEKHN1cnBsdXNlcyk7XG4gXHRpbnQgbnJfZGVidG9ycywgbnJfc2hvcnRhZ2VzID0gMCwgbnJfbGFnZ2luZyA9IDA7XG4rXHRpbnQgbnJfYWN0aXZlID0gMDtcbiBcdHU2NCB1c2FnZV91c19zdW0gPSAwO1xuIFx0dTMyIHBwbV9ydGhyO1xuIFx0dTMyIHBwbV93dGhyO1xuQEAgLTIyNzQsNiArMjI4MSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRcdHU2NCB2ZG9uZSwgdnRpbWUsIHVzYWdlX3VzO1xuIFx0XHR1MzIgaHdfYWN0aXZlLCBod19pbnVzZTtcbiBcbitcdFx0bnJfYWN0aXZlKys7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIENvbGxlY3QgdW51c2VkIGFuZCB3aW5kIHZ0aW1lIGNsb3NlciB0byB2bm93IHRvIHByZXZlbnRcbiBcdFx0ICogaW9jZ3MgZnJvbSBhY2N1bXVsYXRpbmcgYSBsYXJnZSBhbW91bnQgb2YgYnVkZ2V0LlxuQEAgLTI0NjAsNiArMjQ2OSw4IEBAIHN0YXRpYyB2b2lkIGlvY190aW1lcl9mbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4gXHRcdGlvY19yZWZyZXNoX3ZyYXRlKGlvYywgXHUwMDI2bm93KTtcbiBcdH1cbiBcbitcdHRyYWNlX2lvY29zdF9pb2NfdGljayhpb2MsIG5yX2FjdGl2ZSwgdXNhZ2VfdXNfc3VtKTtcbitcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gfVxuIFxuQEAgLTI1NzEsMTAgKzI1ODIsMjggQEAgc3RhdGljIHZvaWQgY2FsY192dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW9jX2dxICppb2NnLFxuIFxuIHN0YXRpYyB1NjQgY2FsY192dGltZV9jb3N0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvY19ncSAqaW9jZywgYm9vbCBpc19tZXJnZSlcbiB7XG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcdGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICptb2RlbDtcbiBcdHU2NCBjb3N0O1xuIFxuLVx0Y2FsY192dGltZV9jb3N0X2J1aWx0aW4oYmlvLCBpb2NnLCBpc19tZXJnZSwgXHUwMDI2Y29zdCk7XG4tXHRyZXR1cm4gY29zdDtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG1vZGVsID0gcmN1X2RlcmVmZXJlbmNlKGlvY2ctXHUwMDNlaW9jLVx1MDAzZW1vZGVsKTtcbitcdGlmIChtb2RlbCkge1xuK1x0XHRjb3N0ID0gbW9kZWwtXHUwMDNlY2FsY19jb3N0KGJpby1cdTAwM2ViaV9vcGYsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsXG4rXHRcdFx0XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvcixcbitcdFx0XHRcdFx0aW9jZ190b19ibGtnKGlvY2cpLVx1MDAzZWJsa2NnLFxuK1x0XHRcdFx0XHRpc19tZXJnZSA/IElPQ09TVF9DT1NUX0ZfTUVSR0UgOiAwKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiBtaW4oY29zdCwgVlRJTUVfUEVSX1NFQyk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbisjZW5kaWZcbitcdHtcbitcdFx0dTY0IGNvc3Q7XG4rXG4rXHRcdGNhbGNfdnRpbWVfY29zdF9idWlsdGluKGJpbywgaW9jZywgaXNfbWVyZ2UsIFx1MDAyNmNvc3QpO1xuK1x0XHRyZXR1cm4gY29zdDtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYyxcbkBAIC0yNTk2LDEwICsyNjI1LDI4IEBAIHN0YXRpYyB2b2lkIGNhbGNfc2l6ZV92dGltZV9jb3N0X2J1aWx0aW4oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW9jICppb2MsXG4gXG4gc3RhdGljIHU2NCBjYWxjX3NpemVfdnRpbWVfY29zdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb2MgKmlvYylcbiB7XG4tXHR1NjQgY29zdDtcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxuK1x0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsO1xuIFxuLVx0Y2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbihycSwgaW9jLCBcdTAwMjZjb3N0KTtcbi1cdHJldHVybiBjb3N0O1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bW9kZWwgPSByY3VfZGVyZWZlcmVuY2UoaW9jLVx1MDAzZW1vZGVsKTtcbitcdGlmIChtb2RlbCBcdTAwMjZcdTAwMjYgcnEtXHUwMDNlYmlvIFx1MDAyNlx1MDAyNiBycS1cdTAwM2ViaW8tXHUwMDNlYmlfYmxrZykge1xuK1x0XHR1NjQgY29zdDtcbitcbitcdFx0Y29zdCA9IG1vZGVsLVx1MDAzZWNhbGNfY29zdChycS1cdTAwM2VjbWRfZmxhZ3MsIGJsa19ycV9ieXRlcyhycSksXG4rXHRcdFx0XHRcdGJsa19ycV9wb3MocnEpLFxuK1x0XHRcdFx0XHRycS1cdTAwM2ViaW8tXHUwMDNlYmlfYmxrZy1cdTAwM2VibGtjZywgMCk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gbWluKGNvc3QsIFZUSU1FX1BFUl9TRUMpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rI2VuZGlmXG4rXHR7XG4rXHRcdHU2NCBjb3N0O1xuK1xuK1x0XHRjYWxjX3NpemVfdnRpbWVfY29zdF9idWlsdGluKHJxLCBpb2MsIFx1MDAyNmNvc3QpO1xuK1x0XHRyZXR1cm4gY29zdDtcbitcdH1cbiB9XG4gXG4gZW51bSBvdmVyX2J1ZGdldF9hY3Rpb24ge1xuQEAgLTI5MDAsNiArMjk0NywxOSBAQCBzdGF0aWMgdm9pZCBpb2NfcnFvc19leGl0KHN0cnVjdCBycV9xb3MgKnJxb3MpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmlvYy1cdTAwM2V0aW1lcik7XG4gXHRmcmVlX3BlcmNwdShpb2MtXHUwMDNlcGNwdV9zdGF0KTtcbisjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRlxuK1x0e1xuK1x0XHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbW9kZWw7XG4rXG4rXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuK1x0XHRtb2RlbCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLVx1MDAzZW1vZGVsLFxuK1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGlvYy1cdTAwM2Vtb2RlbCwgTlVMTCk7XG4rXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4rXHRcdGlmIChtb2RlbClcbitcdFx0XHRpb2Nvc3RfYnBmX21vZGVsX3B1dChtb2RlbCk7XG4rXHR9XG4rI2VuZGlmXG4gXHRrZnJlZShpb2MpO1xuIH1cbiBcbkBAIC0zNDM4LDEyICszNDk4LDMwIEBAIHN0YXRpYyB1NjQgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsKHN0cnVjdCBzZXFfZmlsZSAqc2YsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcdHtcbitcdFx0Y29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm1vZGVsID1cbitcdFx0XHRyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGlvYy1cdTAwM2Vtb2RlbCxcbitcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKSk7XG4rXG4rXHRcdHNlcV9wcmludGYoc2YsIFwiJXMgY3RybD0lcyBtb2RlbD0lcyBcIlxuK1x0XHRcdCAgIFwicmJwcz0lbGx1IHJzZXFpb3BzPSVsbHUgcnJhbmRpb3BzPSVsbHUgXCJcbitcdFx0XHQgICBcIndicHM9JWxsdSB3c2VxaW9wcz0lbGx1IHdyYW5kaW9wcz0lbGx1XFxuXCIsXG4rXHRcdFx0ICAgZG5hbWUsIG1vZGVsID8gXCJicGZcIiA6XG4rXHRcdFx0XHQgICBpb2MtXHUwMDNldXNlcl9jb3N0X21vZGVsID8gXCJ1c2VyXCIgOiBcImF1dG9cIixcbitcdFx0XHQgICBtb2RlbCA/IG1vZGVsLVx1MDAzZW5hbWUgOiBcImxpbmVhclwiLFxuK1x0XHRcdCAgIHVbSV9MQ09FRl9SQlBTXSwgdVtJX0xDT0VGX1JTRVFJT1BTXSxcbitcdFx0XHQgICB1W0lfTENPRUZfUlJBTkRJT1BTXSwgdVtJX0xDT0VGX1dCUFNdLFxuK1x0XHRcdCAgIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTtcbitcdH1cbisjZWxzZVxuIFx0c2VxX3ByaW50ZihzZiwgXCIlcyBjdHJsPSVzIG1vZGVsPWxpbmVhciBcIlxuIFx0XHQgICBcInJicHM9JWxsdSByc2VxaW9wcz0lbGx1IHJyYW5kaW9wcz0lbGx1IFwiXG4gXHRcdCAgIFwid2Jwcz0lbGx1IHdzZXFpb3BzPSVsbHUgd3JhbmRpb3BzPSVsbHVcXG5cIixcbiBcdFx0ICAgZG5hbWUsIGlvYy1cdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPyBcInVzZXJcIiA6IFwiYXV0b1wiLFxuIFx0XHQgICB1W0lfTENPRUZfUkJQU10sIHVbSV9MQ09FRl9SU0VRSU9QU10sIHVbSV9MQ09FRl9SUkFORElPUFNdLFxuIFx0XHQgICB1W0lfTENPRUZfV0JQU10sIHVbSV9MQ09FRl9XU0VRSU9QU10sIHVbSV9MQ09FRl9XUkFORElPUFNdKTtcbisjZW5kaWZcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZpb2MtXHUwMDNlbG9jayk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzQ1Nyw2ICszNTM1LDM3IEBAIHN0YXRpYyBpbnQgaW9jX2Nvc3RfbW9kZWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogQmluZCBAbmFtZSAoZW1wdHkgPSBidWlsdGluIGxpbmVhciBtb2RlbCkgYXMgdGhlIGFjdGl2ZSBjb3N0IG1vZGVsIG9mXG4rICogQGlvYy4gIFRoZSByZWdpc3RyeSBsb29rdXAgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGhhcHBlbiBvdXRzaWRlXG4rICogaW9jLVx1MDAzZWxvY2s7IHRoZSBwb2ludGVyIHN3YXAgaGFwcGVucyB1bmRlciBpdC5cbisgKi9cbitzdGF0aWMgaW50IGlvY19icGZfbW9kZWxfYmluZChzdHJ1Y3QgaW9jICppb2MsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuKyNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGXG4rXHRjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqbmV3ID0gTlVMTCwgKm9sZDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAobmFtZVswXSkge1xuK1x0XHRyZXQgPSBpb2Nvc3RfYnBmX21vZGVsX2dldChuYW1lLCBcdTAwMjZuZXcpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmlvYy1cdTAwM2Vsb2NrKTtcbitcdG9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW9jLVx1MDAzZW1vZGVsLFxuK1x0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aW9jLVx1MDAzZWxvY2spKTtcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihpb2MtXHUwMDNlbW9kZWwsIG5ldyk7XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKG9sZClcbitcdFx0aW9jb3N0X2JwZl9tb2RlbF9wdXQob2xkKTtcbitcdHJldHVybiAwO1xuKyNlbHNlXG4rXHRyZXR1cm4gbmFtZVswXSA/IC1FTk9FTlQgOiAwO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBjb3N0X2N0cmxfdG9rZW5zID0ge1xuIFx0eyBDT1NUX0NUUkwsXHRcdFwiY3RybD0lc1wiXHR9LFxuIFx0eyBDT1NUX01PREVMLFx0XHRcIm1vZGVsPSVzXCJcdH0sXG5AQCAtMzQ4Miw2ICszNTkxLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiBcdHN0cnVjdCBpb2MgKmlvYztcbiBcdHU2NCB1W05SX0lfTENPRUZTXTtcbiBcdGJvb2wgdXNlcjtcbitcdGNoYXIgYnBmX21vZGVsW0lPQ09TVF9NT0RFTF9OQU1FX0xFTl07XG4gXHRjaGFyICpib2R5LCAqcDtcbiBcdGludCByZXQ7XG4gXG5AQCAtMzUxMiw2ICszNjIyLDcgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuIFx0bWVtY3B5KHUsIGlvYy1cdTAwM2VwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7XG4gXHR1c2VyID0gaW9jLVx1MDAzZXVzZXJfY29zdF9tb2RlbDtcbitcdGJwZl9tb2RlbFswXSA9ICdcXDAnO1xuIFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcbkBAIC0zNTMzLDExICszNjQ0LDE2IEBAIHN0YXRpYyBzc2l6ZV90IGlvY19jb3N0X21vZGVsX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqaW5wdXQsXG4gXHRcdFx0XHR1c2VyID0gdHJ1ZTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0XHRicGZfbW9kZWxbMF0gPSAnXFwwJztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0Y2FzZSBDT1NUX01PREVMOlxuIFx0XHRcdG1hdGNoX3N0cmxjcHkoYnVmLCBcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnVmKSk7XG4tXHRcdFx0aWYgKHN0cmNtcChidWYsIFwibGluZWFyXCIpKVxuLVx0XHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmLCBcImxpbmVhclwiKSkge1xuK1x0XHRcdFx0LyogYmFjayB0byB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWwgKi9cbitcdFx0XHRcdGJwZl9tb2RlbFswXSA9ICdcXDAnO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuK1x0XHRcdG1hdGNoX3N0cmxjcHkoYnBmX21vZGVsLCBcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnBmX21vZGVsKSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0zNTYzLDYgKzM2NzksMTQgQEAgc3RhdGljIHNzaXplX3QgaW9jX2Nvc3RfbW9kZWxfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICppbnB1dCxcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aW9jLVx1MDAzZWxvY2spO1xuIFxuK1x0LypcbitcdCAqIEJpbmQgdGhlIEJQRiBtb2RlbCBvdXRzaWRlIGlvYy1cdTAwM2Vsb2NrOiB0aGUgcmVnaXN0cnkgbG9va3VwXG4rXHQgKiB0YWtlcyB0aGUgcmVnaXN0cmF0aW9uIG11dGV4IGFuZCB0aGUgb2xkIG1vZGVsJ3MgcmVmZXJlbmNlXG4rXHQgKiBpcyBkcm9wcGVkIGFmdGVyIHRoZSBzd2FwLlxuK1x0ICovXG4rXHRpZiAoIXJldClcbitcdFx0cmV0ID0gaW9jX2JwZl9tb2RlbF9iaW5kKGlvYywgYnBmX21vZGVsKTtcbitcbiBcdGJsa19tcV91bnF1aWVzY2VfcXVldWUocSk7XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrLWlvY29zdC5oIGIvaW5jbHVkZS9saW51eC9ibGstaW9jb3N0Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zYTA4NTVlZmI2MTA3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1pb2Nvc3QuaFxuQEAgLTAsMCArMSw4MiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfTElOVVhfQkxLX0lPQ09TVF9IXG4rI2RlZmluZSBfTElOVVhfQkxLX0lPQ09TVF9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa190eXBlcy5oXHUwMDNlXG4rXG4rI2RlZmluZSBJT0NPU1RfTU9ERUxfTkFNRV9MRU5cdDE2XG4rXG4rI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZcbitcbitzdHJ1Y3QgYmxrY2c7XG4rXG4rLypcbisgKiBQbHVnZ2FibGUgY29zdCBtb2RlbCBpbnRlcmZhY2UgZm9yIGJsay1pb2Nvc3QuXG4rICpcbisgKiBBIEJQRiBzdHJ1Y3Rfb3BzIGltcGxlbWVudGF0aW9uIHJlZ2lzdGVyZWQgYWdhaW5zdCBcImlvY29zdF9tb2RlbF9vcHNcIlxuKyAqIGZ1bGx5IHJlcGxhY2VzIHRoZSBidWlsdGluIGxpbmVhciBtb2RlbCBvbiB0aGUgZGV2aWNlcyBpdCBpcyBib3VuZCB0b1xuKyAqIHRocm91Z2ggaW8uY29zdC5tb2RlbC4gIFRoZSBtb2RlbCBvd25zIHByaWNpbmcgZm9yIGV2ZXJ5IElPIG9uIGEgYm91bmRcbisgKiBkZXZpY2U6IGl0IHByaWNlcyBhbGwgb3BlcmF0aW9ucywgaW5jbHVkaW5nIGZsdXNoZXMsIGFuZCBib3RoIHRoZSBiaW9cbisgKiBjaGFyZ2luZyBwYXRoIGFuZCB0aGUgcmVxdWVzdC1sZXZlbCBzaXppbmcgcGF0aCBjb25zdWx0IGl0LlxuKyAqXG4rICogY2FsY19jb3N0KCkgaXMgY2FsbGVkIGZyb20gdGhlIElPIHN1Ym1pc3Npb24gcGF0aCB3aXRoIFJDVSByZWFkIGxvY2tcbisgKiBoZWxkIGFuZCBtdXN0IG5vdCBzbGVlcC4gIEl0IHJldHVybnMgdGhlIGNvc3Qgb2YgdGhlIElPIGluIHZ0aW1lXG4rICogdW5pdHMsIHdoZXJlIDEgc2Vjb25kIG9mIGRldmljZSB0aW1lIGVxdWFscyBWVElNRV9QRVJfU0VDICgyXjM3LFxuKyAqIGF2YWlsYWJsZSB0byBCUEYgcHJvZ3JhbXMgdGhyb3VnaCB2bWxpbnV4LmgpLiAgVGhlIHJldHVybmVkIHZhbHVlIGlzXG4rICogY2xhbXBlZCB0byAxIHNlY29uZCBvZiBkZXZpY2UgdGltZSBwZXIgSU8uXG4rICpcbisgKiBUaGUgbW9kZWwgaXMgcGFzc2VkIHRoZSBibGtjZyBvZiB0aGUgaXNzdWluZyBjZ3JvdXAgc28gaXQgY2FuIGtlZXBcbisgKiBwZXItY2dyb3VwIHN0YXRlLiAgYmxrY2dfb25saW5lKCkvYmxrY2dfb2ZmbGluZSgpIGFyZSBvcHRpb25hbFxuKyAqIGNhbGxiYWNrcyBtaXJyb3JpbmcgdGhlIGJsa2NnIGNzcyBsaWZlY3ljbGU6IHN0YXRlIGNyZWF0ZWQgb24gb25saW5lXG4rICogKG9yIGxhemlseSBvbiBmaXJzdCB1c2UpIG11c3QgYmUgcmVsZWFzZWQgb24gb2ZmbGluZS5cbisgKlxuKyAqIFRoZSByZWdpc3RyYXRpb24gYW5kIGJpbmRpbmcgbW9kZWwgZm9sbG93cyB0aGUgVENQIGNvbmdlc3Rpb25cbisgKiBjb250cm9sIGZyYW1ld29yazogcmVnaXN0ZXJpbmcgYSBzdHJ1Y3Rfb3BzIG1ha2VzIHRoZSBtb2RlbCBhdmFpbGFibGVcbisgKiBieSBpdHMgbmFtZSwgd2hpbGUgaW8uY29zdC5tb2RlbCBiaW5kcyBvbmUgcmVnaXN0ZXJlZCBtb2RlbCB0byBhXG4rICogZGV2aWNlLiAgVW5yZWdpc3RlcmluZyByZW1vdmVzIHRoZSBuYW1lIGZyb20gdGhlIHJlZ2lzdHJ5OyBkZXZpY2VzXG4rICogYWxyZWFkeSBib3VuZCBrZWVwIHVzaW5nIGl0IHVudGlsIHN3aXRjaGVkIGJhY2sgdG8gdGhlIGJ1aWx0aW5cbisgKiBtb2RlbC5cbisgKi9cbitcbisjZGVmaW5lIElPQ09TVF9NT0RFTF9OQU1FX0xFTlx0MTZcbitcbisvKlxuKyAqIGlvY29zdC1zcGVjaWZpYyBjYWxsIG1ldGFkYXRhIGZvciBjYWxjX2Nvc3QoKSdzIG1vZGVsX2ZsYWdzXG4rICogYXJndW1lbnQ7IGV2ZXJ5dGhpbmcgZWxzZSwgaW5jbHVkaW5nIFJFUV9QUkVGTFVTSC9SRVFfRlVBLCBpc1xuKyAqIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgb3BmIGFyZ3VtZW50XG4rICovXG4rI2RlZmluZSBJT0NPU1RfQ09TVF9GX01FUkdFXHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcdC8qIGNhbGxlZCBmcm9tIG1lcmdlIHBhdGggKi9cbitcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyB7XG4rXHR1NjQgKCpjYWxjX2Nvc3QpKHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHNlY3Rvcl90IHNlY3RvcixcbitcdFx0XHQgc3RydWN0IGJsa2NnICpibGtjZywgdTY0IG1vZGVsX2ZsYWdzKTtcbitcdHZvaWQgKCpibGtjZ19vbmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuK1x0dm9pZCAoKmJsa2NnX29mZmxpbmUpKHN0cnVjdCBibGtjZyAqYmxrY2cpO1xuK1xuK1x0LyogbW9kZWwgbmFtZSwgdXNlZCB0byBzZWxlY3QgdGhlIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCAqL1xuK1x0Y2hhciBuYW1lWzE2XTtcbit9O1xuK1xuK2ludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdCBjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqKm9wc3ApO1xuK3ZvaWQgaW9jb3N0X2JwZl9tb2RlbF9wdXQoY29uc3Qgc3RydWN0IGlvY29zdF9tb2RlbF9vcHMgKm9wcyk7XG4rdm9pZCBpb2Nvc3Rfbm90aWZ5X2Jsa2NnX29ubGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcbit2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKTtcbitcbisjZWxzZVx0LyogQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUX0JQRiAqL1xuK1xuK3N0cnVjdCBibGtjZztcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcztcbitcbitzdGF0aWMgaW5saW5lIGludCBpb2Nvc3RfYnBmX21vZGVsX2dldChjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzICoqb3BzcClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2Nvc3RfYnBmX21vZGVsX3B1dChjb25zdCBzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyAqb3BzKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgaW9jb3N0X25vdGlmeV9ibGtjZ19vbmxpbmUoc3RydWN0IGJsa2NnICpibGtjZykgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGlvY29zdF9ub3RpZnlfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgYmxrY2cgKmJsa2NnKSB7IH1cbitcbisjZW5kaWZcdC8qIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEYgKi9cbisjZW5kaWZcdC8qIF9MSU5VWF9CTEtfSU9DT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXG5pbmRleCBlNzcyYjFiYzYwZDYwLi4yYjlmZjM0OGE0ZjUxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oXG5AQCAtMTc4LDYgKzE3OCw0NiBAQCBUUkFDRV9FVkVOVChpb2Nvc3RfaW9jX3ZyYXRlX2FkaixcbiBcdClcbiApO1xuIFxuKy8qXG4rICogUGVyaW9kaWMgcGVyLWRldmljZSBzdW1tYXJ5LCBlbWl0dGVkIG9uY2UgcGVyIHBlcmlvZCBmcm9tIHRoZSB0YWlsIG9mXG4rICogaW9jX3RpbWVyX2ZuKCkuICBVbmxpa2UgdGhlIHN0YXRlLWNoYW5nZSBldmVudHMgYWJvdmUsIHRoaXMgZmlyZXMgZXZlcnlcbisgKiBwZXJpb2QgdGhlIGNvbnRyb2xsZXIgaXMgcnVubmluZywgaW5jbHVkaW5nIHN0ZWFkeSBzdGF0ZXMsIGFuZCBjYXJyaWVzXG4rICogdGhlIG92ZXJhbGwgY29udHJvbGxlciBzdGF0ZSBzbyBiYXNpYyBtb25pdG9yaW5nIGRvZXNuJ3QgcmVxdWlyZSBkcmduLlxuKyAqL1xuK1RSQUNFX0VWRU5UKGlvY29zdF9pb2NfdGljayxcbitcbitcdFRQX1BST1RPKHN0cnVjdCBpb2MgKmlvYywgaW50IG5yX2FjdGl2ZSwgdTY0IHVzYWdlX3VzX3N1bSksXG4rXG4rXHRUUF9BUkdTKGlvYywgbnJfYWN0aXZlLCB1c2FnZV91c19zdW0pLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeSAoXG4rXHRcdF9fc3RyaW5nKGRldm5hbWUsIGlvY19uYW1lKGlvYykpXG4rXHRcdF9fZmllbGQodTMyLCBwZXJpb2RfdXMpXG4rXHRcdF9fZmllbGQodTY0LCB2cmF0ZSlcbitcdFx0X19maWVsZChpbnQsIGJ1c3lfbGV2ZWwpXG4rXHRcdF9fZmllbGQoaW50LCBucl9hY3RpdmUpXG4rXHRcdF9fZmllbGQodTMyLCB1c2FnZV9wY3QpXG4rXHRcdF9fZmllbGQoaW50LCBydW5uaW5nKVxuK1x0KSxcbitcbitcdFRQX2Zhc3RfYXNzaWduKFxuK1x0XHRfX2Fzc2lnbl9zdHIoZGV2bmFtZSk7XG4rXHRcdF9fZW50cnktXHUwMDNlcGVyaW9kX3VzID0gaW9jLVx1MDAzZXBlcmlvZF91cztcbitcdFx0X19lbnRyeS1cdTAwM2V2cmF0ZSA9IGlvYy1cdTAwM2V2dGltZV9iYXNlX3JhdGU7XG4rXHRcdF9fZW50cnktXHUwMDNlYnVzeV9sZXZlbCA9IGlvYy1cdTAwM2VidXN5X2xldmVsO1xuK1x0XHRfX2VudHJ5LVx1MDAzZW5yX2FjdGl2ZSA9IG5yX2FjdGl2ZTtcbitcdFx0X19lbnRyeS1cdTAwM2V1c2FnZV9wY3QgPSBpb2MtXHUwMDNlcGVyaW9kX3VzID9cbitcdFx0XHRkaXZfdTY0KHVzYWdlX3VzX3N1bSAqIDEwMCwgaW9jLVx1MDAzZXBlcmlvZF91cykgOiAwO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXJ1bm5pbmcgPSBpb2MtXHUwMDNlcnVubmluZztcbitcdCksXG4rXG4rXHRUUF9wcmludGsoXCJbJXNdIHBlcmlvZD0ldXVzIHZyYXRlPSVsbHUgYnVzeT0lZCBhY3RpdmU9JWQgdXNhZ2U9JXUlJSBydW5uaW5nPSVkXCIsXG4rXHRcdF9fZ2V0X3N0cihkZXZuYW1lKSwgX19lbnRyeS1cdTAwM2VwZXJpb2RfdXMsIF9fZW50cnktXHUwMDNldnJhdGUsXG4rXHRcdF9fZW50cnktXHUwMDNlYnVzeV9sZXZlbCwgX19lbnRyeS1cdTAwM2Vucl9hY3RpdmUsIF9fZW50cnktXHUwMDNldXNhZ2VfcGN0LFxuK1x0XHRfX2VudHJ5LVx1MDAzZXJ1bm5pbmdcbitcdClcbispO1xuK1xuIFRSQUNFX0VWRU5UKGlvY29zdF9pb2NnX2ZvcmdpdmVfZGVidCxcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBpb2NfZ3EgKmlvY2csIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBpb2Nfbm93ICpub3csXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWdcbmluZGV4IDJmNzk2ODhkY2Y3Y2UuLjY3YTYzMGNiNTYxNDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5AQCAtMTM4LDMgKzEzOCw1IEBAIENPTkZJR19TTUNfSFNfQ1RSTF9CUEY9eVxuIENPTkZJR19ESUJTPXlcbiBDT05GSUdfRElCU19MTz15XG4gQ09ORklHX1BNX1dBS0VMT0NLUz15XG4rQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUPXlcbitDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1RfQlBGPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pb2Nvc3RfbW9kZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTkzNDRiMTNmYmE5OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaW9jb3N0X21vZGVsLmNcbkBAIC0wLDAgKzEsMTkzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcImlvY29zdF9tb2RlbC5za2VsLmhcIlxuKyNpbmNsdWRlIFwiaW9jb3N0X21zLnNrZWwuaFwiXG4rXG4rLypcbisgKiBXcml0ZSBhIGxpbmUgdG8gaW8uY29zdC5tb2RlbCB3aXRoIHdyaXRlKDIpIGFuZCByZXR1cm4gdGhlIGVycm5vIG9mXG4rICogdGhlIGZhaWxlZCB3cml0ZSwgb3IgMCBvbiBzdWNjZXNzLiAgc3RkaW8gaXMgbm90IHVzZWQgaGVyZSBvblxuKyAqIHB1cnBvc2U6IHRoZSBrZXJuZWwncyByZWplY3Rpb24gaGFwcGVucyBpbiB0aGUgd3JpdGUoKSBzeXNjYWxsLFxuKyAqIG5vdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBjb3B5LCBhbmQgZXZlcnkgd3JpdGUsIGluY2x1ZGluZ1xuKyAqIHRoZSBlcnJvciBwYXRocyBvZiB0aGUgY2FsbGVycyBiZWxvdywgaXMgY2hlY2tlZC5cbisgKi9cbitzdGF0aWMgaW50IHdyaXRlX2Nvc3RfbW9kZWwoY29uc3QgY2hhciAqYnVmKVxuK3tcbitcdGludCBmZCwgZXJyID0gMDtcbitcdHNzaXplX3QgbjtcbitcbitcdGZkID0gb3BlbihcIi9zeXMvZnMvY2dyb3VwL2lvLmNvc3QubW9kZWxcIiwgT19XUk9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJybm87XG4rXHRuID0gd3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpO1xuK1x0aWYgKG4gXHUwMDNjIDApXG4rXHRcdGVyciA9IGVycm5vO1xuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBSZWFkIGJhY2sgdGhlIGlvLmNvc3QubW9kZWwgbGluZSBvZiBkZXYgYW5kIGNvcHkgdGhlIG1vZGVsPSB2YWx1ZVxuKyAqIGludG8gQG1vZGVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4rICovXG4rc3RhdGljIGludCByZWFkYmFja19tb2RlbChjb25zdCBjaGFyICpkZXYsIGNoYXIgKm1vZGVsLCBzaXplX3QgbW9kZWxfc3opXG4re1xuK1x0Y2hhciBsaW5lWzI1Nl0sIHdvcmRbMjU2XSwgKm0sICplbmQ7XG4rXHRGSUxFICpmcDtcbitcdGludCBmb3VuZCA9IDA7XG4rXG4rXHRmcCA9IGZvcGVuKFwiL3N5cy9mcy9jZ3JvdXAvaW8uY29zdC5tb2RlbFwiLCBcInJcIik7XG4rXHRpZiAoIWZwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHtcbitcdFx0aWYgKHNzY2FuZihsaW5lLCBcIiUyNTVzXCIsIHdvcmQpID09IDEgXHUwMDI2XHUwMDI2ICFzdHJjbXAod29yZCwgZGV2KSkge1xuK1x0XHRcdGZvdW5kID0gMTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0ZmNsb3NlKGZwKTtcbitcdGlmICghZm91bmQpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdG0gPSBzdHJzdHIobGluZSwgXCJtb2RlbD1cIik7XG4rXHRpZiAoIW0pXG4rXHRcdHJldHVybiAtMTtcbitcdG0gKz0gc3RybGVuKFwibW9kZWw9XCIpO1xuK1x0ZW5kID0gbTtcbitcdHdoaWxlICgqZW5kIFx1MDAyNlx1MDAyNiAhaXNzcGFjZSgqZW5kKSlcbitcdFx0ZW5kKys7XG4rXHRzbnByaW50Zihtb2RlbCwgbW9kZWxfc3osIFwiJS4qc1wiLCAoaW50KShlbmQgLSBtKSwgbSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBCaW5kIHRoZSBuYW1lZCBtb2RlbCB0byBhIGRldmljZSB3aXRoIFwibW9kZWw9XHUwMDNjbmFtZVx1MDAzZVwiLCB2ZXJpZnkgdGhlXG4rICogcmVhZGJhY2sgYW5kIHJlc3RvcmUgdGhlIGJ1aWx0aW4gbW9kZWwuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW50IGJpbmRfbW9kZWwoY29uc3QgY2hhciAqZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGNoYXIgYnVmWzMwMF0sIGdvdFs2NF07XG4rXHRpbnQgZXJyO1xuK1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlcyBtb2RlbD0lc1xcblwiLCBkZXYsIG5hbWUpO1xuK1x0ZXJyID0gd3JpdGVfY29zdF9tb2RlbChidWYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRDSEVDSyhmYWxzZSwgXCJ3cml0ZV9tb2RlbFwiLCBcIndyaXRlIG1vZGVsPSVzOiAlc1xcblwiLCBuYW1lLFxuK1x0XHQgICAgICBzdHJlcnJvcihlcnIpKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0ZXJyID0gcmVhZGJhY2tfbW9kZWwoZGV2LCBnb3QsIHNpemVvZihnb3QpKTtcbitcdGlmIChlcnIgfHwgc3RyY21wKGdvdCwgbmFtZSkpIHtcbitcdFx0Q0hFQ0soZmFsc2UsIFwicmVhZGJhY2tfbW9kZWxcIiwgXCJnb3QgbW9kZWw9JXMgd2FudCAlc1xcblwiLFxuK1x0XHQgICAgICBlcnIgPyBcIihub25lKVwiIDogZ290LCBuYW1lKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0LyogcmVzdG9yZSB0aGUgYnVpbHRpbiBsaW5lYXIgbW9kZWw7IHRoZSB3cml0ZSBpcyBjaGVja2VkIHRvbyAqL1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlcyBtb2RlbD1saW5lYXJcXG5cIiwgZGV2KTtcbitcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcbitcdGlmIChlcnIpIHtcbitcdFx0Q0hFQ0soZmFsc2UsIFwicmVzdG9yZV9saW5lYXJcIiwgXCJ3cml0ZSBtb2RlbD1saW5lYXI6ICVzXFxuXCIsXG4rXHRcdCAgICAgIHN0cmVycm9yKGVycikpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBUaGUgZGV2IGFyZ3VtZW50IG11c3QgYmUgcHJlc2VudCBpbiBpby5jb3N0LnFvcyBhbHJlYWR5LCB3aGljaFxuKyAqIG1lYW5zIGlvY29zdCBpcyBlbmFibGVkIGZvciBpdC5cbisgKi9cbitzdGF0aWMgaW50IGRldl9oYXNfaW9jb3N0KGNvbnN0IGNoYXIgKmRldilcbit7XG4rXHRjaGFyIGxpbmVbMjU2XSwgd29yZFsyNTZdO1xuK1x0RklMRSAqZnA7XG4rXHRpbnQgZm91bmQgPSAwO1xuK1xuK1x0ZnAgPSBmb3BlbihcIi9zeXMvZnMvY2dyb3VwL2lvLmNvc3QucW9zXCIsIFwiclwiKTtcbitcdGlmICghZnApXG4rXHRcdHJldHVybiAwO1xuK1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XG4rXHRcdGlmIChzc2NhbmYobGluZSwgXCIlMjU1c1wiLCB3b3JkKSA9PSAxIFx1MDAyNlx1MDAyNiAhc3RyY21wKHdvcmQsIGRldikpIHtcbitcdFx0XHRmb3VuZCA9IDE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGZjbG9zZShmcCk7XG4rXHRyZXR1cm4gZm91bmQ7XG4rfVxuK1xuKy8qXG4rICogQmluZCB0aGUgMnggZXhhbXBsZSBtb2RlbCBhbmQgdmVyaWZ5IHRoZSBpby5jb3N0Lm1vZGVsIHJlYWRiYWNrLlxuKyAqIElPIGFjY291bnRpbmcgaXRzZWxmIGlzIG5vdCBjaGVja2VkIGhlcmU7IGl0IG5lZWRzIGEgZGV2aWNlIGRvaW5nXG4rICogcmVhbCBJTyB1bmRlciBpb2Nvc3QgYW5kIGlzIGNvdmVyZWQgYnkgdGhlIGtlcm5lbC1zaWRlIHZhbGlkYXRpb25cbisgKiBkZXNjcmliZWQgaW4gdGhlIGNvdmVyIGxldHRlci5cbisgKlxuKyAqIFJlcXVpcmVzIHJvb3QsIGNncm91cCB2MiBhbmQgYSBkZXZpY2Ugd2l0aCBpb2Nvc3Qgc3VwcG9ydC4gIFRoZVxuKyAqIGRldmljZSBtdXN0IGJlIGdpdmVuIGFzIG1ham9yOm1pbm9yIGluICRJT0NPU1RfVEVTVF9ERVYsIG90aGVyd2lzZVxuKyAqIHRoZSB0ZXN0IGlzIHNraXBwZWQuXG4rICovXG4rdm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWwodm9pZClcbit7XG4rXHRzdHJ1Y3QgaW9jb3N0X21vZGVsICpza2VsO1xuK1x0Y2hhciBidWZbMzAwXSwgKmRldjtcbitcdGludCBlcnI7XG4rXG4rXHRkZXYgPSBnZXRlbnYoXCJJT0NPU1RfVEVTVF9ERVZcIik7XG4rXHRpZiAoIWRldiB8fCBnZXRldWlkKCkgIT0gMCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdGlmICghQVNTRVJUX1RSVUUoZGV2X2hhc19pb2Nvc3QoZGV2KSwgXCJpb2Nvc3RfbW91bnRlZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIG5lZ2F0aXZlOiBiaW5kaW5nIGFuIHVua25vd24gbW9kZWwgbmFtZSBtdXN0IGJlIHJlamVjdGVkLFxuK1x0ICogc28gYSB0eXBvIGNhbm5vdCBzaWxlbnRseSBkaXNhYmxlIGNvc3QgbW9kZWwgdXBkYXRlc1xuK1x0ICovXG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVzIG1vZGVsPW5vX3N1Y2hfbW9kZWxcXG5cIiwgZGV2KTtcbitcdGVyciA9IHdyaXRlX2Nvc3RfbW9kZWwoYnVmKTtcbitcdEFTU0VSVF9FUShlcnIsIEVOT0VOVCwgXCJ1bmtub3duX21vZGVsX3JlamVjdGVkXCIpO1xuK1xuK1x0c2tlbCA9IGlvY29zdF9tb2RlbF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIGF0dGFjaGluZyB0aGUgc3RydWN0X29wcyByZWdpc3RlcnMgdGhlIG1vZGVsIGJ5IG5hbWUgKi9cbitcdGVyciA9IGlvY29zdF9tb2RlbF9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKEFTU0VSVF9PSyhlcnIsIFwiYXR0YWNoXCIpKVxuK1x0XHRBU1NFUlRfT0soYmluZF9tb2RlbChkZXYsIFwiaW9jb3N0XzJ4XCIpLCBcImJpbmRfYW5kX3JlYWRiYWNrXCIpO1xuK1xuK1x0aW9jb3N0X21vZGVsX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIFNhbWUgY2hlY2sgZm9yIHRoZSBtdWx0aS1zdHJlYW0gZXhhbXBsZSBtb2RlbC4gIE9ubHkgb25lIG1vZGVsIGNhblxuKyAqIGJlIGJvdW5kIHRvIGEgZGV2aWNlIGF0IGEgdGltZTsgYm90aCB0ZXN0cyBiaW5kIGFuZCByZXN0b3JlLCBzb1xuKyAqIHRoZXkgYXJlIHNlcmlhbCBhbmQgaW5kZXBlbmRlbnQuXG4rICovXG4rdm9pZCBzZXJpYWxfdGVzdF9pb2Nvc3RfbW9kZWxfc3RyZWFtcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBpb2Nvc3RfbXMgKnNrZWw7XG4rXHRjaGFyICpkZXY7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZGV2ID0gZ2V0ZW52KFwiSU9DT1NUX1RFU1RfREVWXCIpO1xuK1x0aWYgKCFkZXYgfHwgZ2V0ZXVpZCgpICE9IDApIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRpZiAoIUFTU0VSVF9UUlVFKGRldl9oYXNfaW9jb3N0KGRldiksIFwiaW9jb3N0X21vdW50ZWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHNrZWwgPSBpb2Nvc3RfbXNfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBpb2Nvc3RfbXNfX2F0dGFjaChza2VsKTtcbitcdGlmIChBU1NFUlRfT0soZXJyLCBcImF0dGFjaFwiKSlcbitcdFx0QVNTRVJUX09LKGJpbmRfbW9kZWwoZGV2LCBcImlvY29zdF9tc1wiKSwgXCJiaW5kX2FuZF9yZWFkYmFja1wiKTtcbitcbitcdGlvY29zdF9tc19fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjhhZDQxN2IzNTg0OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tb2RlbC5jXG5AQCAtMCwwICsxLDExNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBFeGFtcGxlIGlvY29zdCBjb3N0IG1vZGVsOiB0aGUgYnVpbHRpbiBsaW5lYXIgSEREIGZvcm11bGEgd2l0aCBhbGxcbisgKiBjb3N0cyBkb3VibGVkLlxuKyAqXG4rICogVGhlIGNvbnN0YW50cyBtaXJyb3Igd2hhdCBjYWxjX2xjb2VmcygpIGRlcml2ZXMgZnJvbSB0aGUgQVVUT1BfSEREXG4rICogZGVmYXVsdHMgKHJicHM9MTc0MDE5MTc2IHJzZXFpb3BzPTQxNzA4IHJyYW5kaW9wcz0zNzAsIHctc2lkZVxuKyAqIGFuYWxvZykgaW4gdnRpbWUgdW5pdHMgd2hlcmUgMXMgPT0gMl4zNywgZXhwcmVzc2VkIHdpdGggdGhlIHNhbWVcbisgKiByb3VuZC11cCBkaXZpc2lvbnMgc28gdGhleSBjYW5ub3QgZHJpZnQgZnJvbSB0aGUga2VybmVsLiAgQSBkZXZpY2VcbisgKiBib3VuZCB0byB0aGlzIG1vZGVsIHRocm91Z2ggaW8uY29zdC5tb2RlbCBjaGFyZ2VzIGV4YWN0bHkgdHdpY2UgdGhlXG4rICogYnVpbHRpbiBtb2RlbCB1bmRlciB0aGUgc2FtZSB3b3JrbG9hZCwgd2hpY2ggbWFrZXMgaXQgYSBjb252ZW5pZW50XG4rICogd2F5IHRvIHZlcmlmeSB0aGF0IGFjY291bnRpbmcgZ29lcyB0aHJvdWdoIHRoZSBCUEYgcGF0aC5cbisgKlxuKyAqIFRoZSBtb2RlbCBpbXBsZW1lbnRzIHRoZSBmdWxsIGxpbmVhciBmb3JtdWxhIGl0c2VsZiwgaW5jbHVkaW5nXG4rICogZmx1c2hlczogdGhlcmUgaXMgbm8gZmFsbGJhY2sgdG8gdGhlIGJ1aWx0aW4gbW9kZWwsIGEgZGF0YWxlc3NcbisgKiBXUklURXxSRVFfUFJFRkxVU0ggaXMgcHJpY2VkIGFzIGEgb25lLXBhZ2Ugd3JpdGUuXG4rICovXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbisvKiBWVElNRV9QRVJfU0VDIGNvbWVzIGZyb20gdm1saW51eC5oIChhIEJURiBlbnVtIGNvbnN0YW50KSAqL1xuKyNkZWZpbmUgSU9DX1BBR0VfU0laRVx0XHQ0MDk2XG4rI2RlZmluZSBJT0NfU0VDVF9UT19QQUdFX1NISUZUXHQzXHQvKiA1MTJCIHNlY3RvcnMgdG8gNGtCIHBhZ2VzICovXG4rI2RlZmluZSBMQ09FRl9SQU5ESU9fUEFHRVNcdDQwOTZcdC8qIDE2TUIgc2VlayB0aHJlc2hvbGQgKi9cbisjZGVmaW5lIElPQ09TVF9DT1NUX0ZfTUVSR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAwKVx0Lyogbm90IGluIEJURjogYSBwbGFpbiBtYWNybyAqL1xuKyNkZWZpbmUgSU9DT1NUX1JFUV9PUF9NQVNLXHQweGZmXHRcdC8qIFJFUV9PUF9NQVNLLCBub3QgaW4gQlRGICovXG4rXG4rLypcbisgKiBESVY2NF9VNjRfUk9VTkRfVVAgLyBESVZfUk9VTkRfVVBfVUxMIGVxdWl2YWxlbnRzLCBmb2xkZWQgYXRcbisgKiBjb21waWxlIHRpbWVcbisgKi9cbisjZGVmaW5lIFJVKHgsIHkpXHRcdCgoeCkgLyAoeSkgKyAoKCh4KSAlICh5KSkgPyAxIDogMCkpXG4rXG4rI2RlZmluZSBSQlBTXHQxNzQwMTkxNzZVTExcbisjZGVmaW5lIFJTRVFJT1BTXHQ0MTcwOFVMTFxuKyNkZWZpbmUgUlJBTkRJT1BTXHQzNzBVTExcbisjZGVmaW5lIFdCUFNcdDE3ODA3NTg2NlVMTFxuKyNkZWZpbmUgV1NFUUlPUFNcdDQyNzA1VUxMXG4rI2RlZmluZSBXUkFORElPUFNcdDM3OFVMTFxuK1xuKyNkZWZpbmUgUlBBR0VcdChSVShWVElNRV9QRVJfU0VDLCBSVShSQlBTLCBJT0NfUEFHRV9TSVpFKSkpXG4rI2RlZmluZSBSU0VRSU9cdChSVShWVElNRV9QRVJfU0VDLCBSU0VRSU9QUykgLSBSUEFHRSlcbisjZGVmaW5lIFJSQU5ESU9cdChSVShWVElNRV9QRVJfU0VDLCBSUkFORElPUFMpIC0gUlBBR0UpXG4rI2RlZmluZSBXUEFHRVx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFdCUFMsIElPQ19QQUdFX1NJWkUpKSlcbisjZGVmaW5lIFdTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdTRVFJT1BTKSAtIFdQQUdFKVxuKyNkZWZpbmUgV1JBTkRJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFdSQU5ESU9QUykgLSBXUEFHRSlcbitcbisvKlxuKyAqIHBlci1jZ3JvdXAgY3Vyc29yIHN0b3JhZ2U6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXQsIHNvXG4rICogdGhlIG1vZGVsIG5ldmVyIGxlYWtzIG9yIHJldXNlcyBzdGFsZSBwZXItY2dyb3VwIHN0YXRlXG4rICovXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQ0dSUF9TVE9SQUdFKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbit9IGN1cnNvcl9zdG9yZSBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rdTY0IEJQRl9QUk9HKGlvY29zdF8yeF9jYWxjX2Nvc3QsIHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHU2NCBzZWN0b3IsXG4rXHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncylcbit7XG4rXHR1NjQgcGFnZXMsIHNlZWtfcGFnZXMgPSAwLCBiYXNlLCBjb2VmX3BhZ2UsIHJhbmRpbywgY29zdDtcbitcbitcdGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9SRUFEKSB7XG4rXHRcdGJhc2UgPSBSU0VRSU87IGNvZWZfcGFnZSA9IFJQQUdFOyByYW5kaW8gPSBSUkFORElPO1xuK1x0fSBlbHNlIGlmICgob3BmIFx1MDAyNiBJT0NPU1RfUkVRX09QX01BU0spID09IFJFUV9PUF9XUklURSkge1xuK1x0XHRiYXNlID0gV1NFUUlPOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gV1JBTkRJTztcbitcdH0gZWxzZSB7XG4rXHRcdC8qXG4rXHRcdCAqIGEgZnVsbHkgb3duaW5nIG1vZGVsIG11c3QgcHJpY2UgZXZlcnkgb3A7IHVua25vd25cbitcdFx0ICogb3BzIGFyZSBwcmljZWQgYXMgYSBzaW5nbGUgcGFnZSB3cml0ZVxuK1x0XHQgKi9cbitcdFx0YmFzZSA9IDA7IGNvZWZfcGFnZSA9IFdQQUdFOyByYW5kaW8gPSAwO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIG1pcnJvciB0aGUgYnVpbHRpbiBzaW5nbGUgcGVyLWNncm91cCBjdXJzb3I6IHRoZSBtb2RlbCBrZWVwc1xuK1x0ICogaXRzIG93biBjdXJzb3Iga2V5ZWQgYnkgdGhlIGJsa2NnIGFyZ3VtZW50XG4rXHQgKi9cbitcdHtcbitcdFx0X191NjQgKmN1cnNvciwgY3VyO1xuK1xuK1x0XHRjdXJzb3IgPSBicGZfY2dycF9zdG9yYWdlX2dldChcdTAwMjZjdXJzb3Jfc3RvcmUsXG4rXHRcdFx0XHRcdCAgICAgIGJsa2NnLVx1MDAzZWNzcy5jZ3JvdXAsIE5VTEwsXG4rXHRcdFx0XHRcdCAgICAgIEJQRl9MT0NBTF9TVE9SQUdFX0dFVF9GX0NSRUFURSk7XG4rXHRcdGlmICghY3Vyc29yKVxuK1x0XHRcdHJldHVybiAyICogKGJhc2UgKyBSVShuYnl0ZXMsIElPQ19QQUdFX1NJWkUpICogY29lZl9wYWdlKTtcbitcdFx0Y3VyID0gKmN1cnNvcjtcbitcdFx0c2Vla19wYWdlcyA9IHNlY3RvciBcdTAwM2UgY3VyID8gc2VjdG9yIC0gY3VyIDogY3VyIC0gc2VjdG9yO1xuK1x0XHRzZWVrX3BhZ2VzIFx1MDAzZVx1MDAzZT0gSU9DX1NFQ1RfVE9fUEFHRV9TSElGVDtcbitcdFx0aWYgKHNlZWtfcGFnZXMgXHUwMDNlIExDT0VGX1JBTkRJT19QQUdFUylcbitcdFx0XHRiYXNlID0gcmFuZGlvO1xuK1x0XHRpZiAoIShtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkpXG4rXHRcdFx0KmN1cnNvciA9IHNlY3RvciArIFJVKG5ieXRlcywgNTEyKTtcbitcdH1cbitcbitcdHBhZ2VzID0gUlUobmJ5dGVzLCBJT0NfUEFHRV9TSVpFKTtcbitcdGlmICghcGFnZXMpXG4rXHRcdHBhZ2VzID0gMTtcdC8qIGRhdGFsZXNzIGZsdXNoOiBvbmUgcGFnZSAqL1xuK1x0aWYgKG1vZGVsX2ZsYWdzIFx1MDAyNiBJT0NPU1RfQ09TVF9GX01FUkdFKVxuK1x0XHRiYXNlID0gMDtcbitcbitcdGNvc3QgPSAyICogKGJhc2UgKyBwYWdlcyAqIGNvZWZfcGFnZSk7XG4rXHRyZXR1cm4gY29zdDtcbit9XG4rXG4rU0VDKFwiLnN0cnVjdF9vcHNcIilcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfMnggPSB7XG4rXHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfMnhfY2FsY19jb3N0LFxuK1x0Lm5hbWUgPSBcImlvY29zdF8yeFwiLFxuK307XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2NjNTdjMDNkM2M4OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2lvY29zdF9tcy5jXG5AQCAtMCwwICsxLDEzNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBFeGFtcGxlIG11bHRpLXN0cmVhbSBzZXF1ZW50aWFsaXR5IGRldGVjdGlvbiBjb3N0IG1vZGVsLlxuKyAqXG4rICogVGhlIGJ1aWx0aW4gbW9kZWwga2VlcHMgYSBzaW5nbGUgY3Vyc29yIHBlciBjZ3JvdXAsIHNvIHR3b1xuKyAqIGludGVybGVhdmVkIHNlcXVlbnRpYWwgcmVhZGVycyBpbiBvbmUgY2dyb3VwIGFyZSBhbGwgcHJpY2VkIHJhbmRvbVxuKyAqIChtZWFzdXJlZCA4OXggb3ZlcmNoYXJnZSwgMTIuOXggdGhyb3VnaHB1dCBjb2xsYXBzZSksIHdoaWxlIHJhbmRvbVxuKyAqIElPIGluc2lkZSBhIGhvdCB3aW5kb3cgc21hbGxlciB0aGFuIHRoZSAxNk1CIHNlZWsgdGhyZXNob2xkIGlzXG4rICogcHJpY2VkIHNlcXVlbnRpYWwgKG1lYXN1cmVkIDEwN3ggdW5kZXJjaGFyZ2UpLiAgVGhpcyBtb2RlbCByZXBsYWNlc1xuKyAqIHRoZSBzaW5nbGUgY3Vyc29yIHdpdGggYSBwZXItY2dyb3VwIHRhYmxlIG9mIHN0cmVhbSBzbG90czogYW4gSU8gaXNcbisgKiBzZXF1ZW50aWFsIGlmZiBpdHMgc2VjdG9yIG1hdGNoZXMgdGhlIGV4cGVjdGVkIG5leHQgc2VjdG9yIG9mIGFueVxuKyAqIHRyYWNrZWQgc3RyZWFtLiAgSW50ZXJsZWF2ZWQgc3RyZWFtcyBrZWVwIHRoZWlyIG93biBzbG90cywgYW5kXG4rICogd2luZG93ZWQgcmFuZG9tIElPIHJhcmVseSBtYXRjaGVzIGEgbW92aW5nIGV4cGVjdGF0aW9uLlxuKyAqXG4rICogU3RyZWFtIHN0YXRlIGxpdmVzIGluIGEgQ0dSUF9TVE9SQUdFIG1hcCwgc28gaXQgaXMgY3JlYXRlZCBhbmRcbisgKiBmcmVlZCB3aXRoIHRoZSBjZ3JvdXAuICBUaGUgbW9kZWwgaW1wbGVtZW50cyB0aGUgZnVsbCBidWlsdGluXG4rICogbGluZWFyIGZvcm11bGEgaXRzZWxmLCBpbmNsdWRpbmcgZmx1c2ggcHJpY2luZy5cbisgKi9cbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuKy8qIFZUSU1FX1BFUl9TRUMgY29tZXMgZnJvbSB2bWxpbnV4LmggKGEgQlRGIGVudW0gY29uc3RhbnQpICovXG4rI2RlZmluZSBJT0NfUEFHRV9TSVpFXHRcdDQwOTZcbisjZGVmaW5lIElPQ19TRUNUX1RPX1BBR0VfU0hJRlRcdDNcdC8qIDUxMkIgc2VjdG9ycyB0byA0a0IgcGFnZXMgKi9cbisjZGVmaW5lIExDT0VGX1JBTkRJT19QQUdFU1x0NDA5Nlx0LyogMTZNQiBzZWVrIHRocmVzaG9sZCAqL1xuKyNkZWZpbmUgSU9DT1NUX0NPU1RfRl9NRVJHRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXHQvKiBub3QgaW4gQlRGOiBhIHBsYWluIG1hY3JvICovXG4rI2RlZmluZSBJT0NPU1RfUkVRX09QX01BU0tcdDB4ZmZcdFx0LyogUkVRX09QX01BU0ssIG5vdCBpbiBCVEYgKi9cbitcbisvKlxuKyAqIERJVjY0X1U2NF9ST1VORF9VUCAvIERJVl9ST1VORF9VUF9VTEwgZXF1aXZhbGVudHMsIGZvbGRlZCBhdFxuKyAqIGNvbXBpbGUgdGltZVxuKyAqL1xuKyNkZWZpbmUgUlUoeCwgeSlcdFx0KCh4KSAvICh5KSArICgoKHgpICUgKHkpKSA/IDEgOiAwKSlcbitcbisjZGVmaW5lIFJCUFNcdDE3NDAxOTE3NlVMTFxuKyNkZWZpbmUgUlNFUUlPUFNcdDQxNzA4VUxMXG4rI2RlZmluZSBSUkFORElPUFNcdDM3MFVMTFxuKyNkZWZpbmUgV0JQU1x0MTc4MDc1ODY2VUxMXG4rI2RlZmluZSBXU0VRSU9QU1x0NDI3MDVVTExcbisjZGVmaW5lIFdSQU5ESU9QU1x0Mzc4VUxMXG4rXG4rI2RlZmluZSBSUEFHRVx0KFJVKFZUSU1FX1BFUl9TRUMsIFJVKFJCUFMsIElPQ19QQUdFX1NJWkUpKSlcbisjZGVmaW5lIFJTRVFJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFJTRVFJT1BTKSAtIFJQQUdFKVxuKyNkZWZpbmUgUlJBTkRJT1x0KFJVKFZUSU1FX1BFUl9TRUMsIFJSQU5ESU9QUykgLSBSUEFHRSlcbisjZGVmaW5lIFdQQUdFXHQoUlUoVlRJTUVfUEVSX1NFQywgUlUoV0JQUywgSU9DX1BBR0VfU0laRSkpKVxuKyNkZWZpbmUgV1NFUUlPXHQoUlUoVlRJTUVfUEVSX1NFQywgV1NFUUlPUFMpIC0gV1BBR0UpXG4rI2RlZmluZSBXUkFORElPXHQoUlUoVlRJTUVfUEVSX1NFQywgV1JBTkRJT1BTKSAtIFdQQUdFKVxuK1xuKyNkZWZpbmUgTlNMT1RTXHQ0XG4rXG4rc3RydWN0IHN0cmVhbXMge1xuK1x0X191NjQgZXhwZWN0ZWRbTlNMT1RTXTtcdC8qIG5leHQgZXhwZWN0ZWQgc2VjdG9yLCBwZXIgc3RyZWFtICovXG4rXHRfX3U2NCBzdGFtcFtOU0xPVFNdO1x0LyogTFJVIHN0YW1wLCAwID0gZW1wdHkgKi9cbit9O1xuK1xuKy8qXG4rICogcGVyLWNncm91cCBzdHJlYW0gdGFibGU6IGtleWVkIGJ5IHRoZSBjZ3JvdXAsIGZyZWVkIHdpdGggaXRcbisgKi9cbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9DR1JQX1NUT1JBR0UpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IHN0cmVhbXMpO1xuK30gc3RyZWFtX3RhYiBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rdTY0IEJQRl9QUk9HKGlvY29zdF9tc19jYWxjX2Nvc3QsIHU2NCBvcGYsIHU2NCBuYnl0ZXMsIHU2NCBzZWN0b3IsXG4rXHQgICAgIHN0cnVjdCBibGtjZyAqYmxrY2csIHU2NCBtb2RlbF9mbGFncylcbit7XG4rXHRzdHJ1Y3Qgc3RyZWFtcyAqcztcbitcdHU2NCBwYWdlcywgYmFzZSwgY29lZl9wYWdlLCByYW5kaW8sIGFkdmFuY2UsIG5vdztcbitcdHUzMiBpLCB2aWN0aW0gPSAwLCBmb3VuZCA9IDB4RkZGRkZGRkY7XG4rXG4rXHRpZiAoKG9wZiBcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfUkVBRCkge1xuK1x0XHRiYXNlID0gUlNFUUlPOyBjb2VmX3BhZ2UgPSBSUEFHRTsgcmFuZGlvID0gUlJBTkRJTztcbitcdH0gZWxzZSBpZiAoKG9wZiBcdTAwMjYgSU9DT1NUX1JFUV9PUF9NQVNLKSA9PSBSRVFfT1BfV1JJVEUpIHtcbitcdFx0YmFzZSA9IFdTRVFJTzsgY29lZl9wYWdlID0gV1BBR0U7IHJhbmRpbyA9IFdSQU5ESU87XG4rXHR9IGVsc2Uge1xuK1x0XHQvKlxuK1x0XHQgKiBhIGZ1bGx5IG93bmluZyBtb2RlbCBtdXN0IHByaWNlIGV2ZXJ5IG9wOyB1bmtub3duXG4rXHRcdCAqIG9wcyBhcmUgcHJpY2VkIGFzIGEgc2luZ2xlIHBhZ2Ugd3JpdGVcbitcdFx0ICovXG4rXHRcdGJhc2UgPSAwOyBjb2VmX3BhZ2UgPSBXUEFHRTsgcmFuZGlvID0gMDtcbitcdH1cbitcdGFkdmFuY2UgPSBSVShuYnl0ZXMsIDUxMik7XHQvKiBzZWN0b3JzICovXG4rXG4rXHRzID0gYnBmX2NncnBfc3RvcmFnZV9nZXQoXHUwMDI2c3RyZWFtX3RhYiwgYmxrY2ctXHUwMDNlY3NzLmNncm91cCwgTlVMTCxcbitcdFx0XHRcdCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xuK1x0aWYgKCFzKVxuK1x0XHRyZXR1cm4gYmFzZSArIFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSkgKiBjb2VmX3BhZ2U7XG4rXG4rXHRub3cgPSBicGZfa3RpbWVfZ2V0X25zKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOU0xPVFM7IGkrKykge1xuK1x0XHRpZiAocy1cdTAwM2VleHBlY3RlZFtpXSA9PSBzZWN0b3IgXHUwMDI2XHUwMDI2IHMtXHUwMDNlc3RhbXBbaV0pIHtcbitcdFx0XHRmb3VuZCA9IGk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGlmIChmb3VuZCAhPSAweEZGRkZGRkZGKSB7XG4rXHRcdC8qIHNlcXVlbnRpYWw6IGtlZXAgdGhlIHNlcSBiYXNlIGZyb20gdGhlIG9wIGJyYW5jaCAqL1xuK1x0XHRzLVx1MDAzZWV4cGVjdGVkW2ZvdW5kXSA9IHNlY3RvciArIGFkdmFuY2U7XG4rXHRcdHMtXHUwMDNlc3RhbXBbZm91bmRdID0gbm93O1xuK1x0fSBlbHNlIHtcbitcdFx0YmFzZSA9IHJhbmRpbztcbitcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgTlNMT1RTOyBpKyspIHtcbitcdFx0XHRpZiAocy1cdTAwM2VzdGFtcFtpXSBcdTAwM2Mgcy1cdTAwM2VzdGFtcFt2aWN0aW1dKVxuK1x0XHRcdFx0dmljdGltID0gaTtcbitcdFx0fVxuK1x0XHRzLVx1MDAzZWV4cGVjdGVkW3ZpY3RpbV0gPSBzZWN0b3IgKyBhZHZhbmNlO1xuK1x0XHRzLVx1MDAzZXN0YW1wW3ZpY3RpbV0gPSBub3c7XG4rXHR9XG4rXG4rXHRwYWdlcyA9IFJVKG5ieXRlcywgSU9DX1BBR0VfU0laRSk7XG4rXHRpZiAoIXBhZ2VzKVxuK1x0XHRwYWdlcyA9IDE7XHQvKiBkYXRhbGVzcyBmbHVzaDogb25lIHBhZ2UgKi9cbitcdGlmIChtb2RlbF9mbGFncyBcdTAwMjYgSU9DT1NUX0NPU1RfRl9NRVJHRSkge1xuK1x0XHQvKlxuK1x0XHQgKiBtZXJnZWQgYmlvcyBza2lwIHRoZSBiYXNlIGNvc3QgYnV0IHN0aWxsIGFkdmFuY2VcbitcdFx0ICogdGhlIHN0cmVhbSBwb3NpdGlvbiBhYm92ZSwgc28gYSBtZXJnZSBhdCB0aGVcbitcdFx0ICogZXhwZWN0ZWQgc2VjdG9yIGRvZXMgbm90IG1ha2UgdGhlIGZvbGxvd2luZyBuZXcgSU9cbitcdFx0ICogbG9vayByYW5kb21cbitcdFx0ICovXG4rXHRcdGJhc2UgPSAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGJhc2UgKyBwYWdlcyAqIGNvZWZfcGFnZTtcbit9XG4rXG4rU0VDKFwiLnN0cnVjdF9vcHNcIilcbitzdHJ1Y3QgaW9jb3N0X21vZGVsX29wcyBpb2Nvc3RfbXMgPSB7XG4rXHQuY2FsY19jb3N0ID0gKHZvaWQgKilpb2Nvc3RfbXNfY2FsY19jb3N0LFxuK1x0Lm5hbWUgPSBcImlvY29zdF9tc1wiLFxuK307XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMToxNS4wMjg3MDIxNjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxMTIzMTg0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBvZiBCbG9jay9JTyBDb3N0IEJQRiBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgKm9ubHkqIEtNU0FOIGNvdWxkIGNhdGNoLiBCYXNlZCBvbiB0aGUgZ3VpZGVsaW5lcywgaWYgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgY2F0Y2ggdGhlIGlzc3VlLCB3ZSBkb24ndCBuZWVkIEtNU0FOLiAgSXQncyBhbGwgYWJvdXQgZmluZGluZyB0aGF0ICpzcGVjaWZpYyogdW5pbml0aWFsaXplZCBtZW1vcnkgc2NlbmFyaW8gdGhhdCBLTVNBTiBhbG9uZSB3aWxsIGV4cG9zZS5cblxuRmlyc3QsIEkgc2VlIGRvY3VtZW50YXRpb24gdXBkYXRlcyAoZ29vZCBwcmFjdGljZSksIG5ldyBjb25maWcgb3B0aW9ucyBmb3IgQlBGLCBhbmQgc29tZSBjYWxscyByZWxhdGVkIHRvIGNncm91cCBvbmxpbmUvb2ZmbGluZSBldmVudHMuIFRoYXQncyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGJ1dCBpdCdzIG5vdCB3aGVyZSBJIGV4cGVjdCB0aGUgcmVhbCByaXNrIHRvIGJlLiBJJ2xsIGZvY3VzIG9uIHRoZSBCUEYtcmVsYXRlZCBjb2RlIHNpbmNlIHRoYXQncyB3aGVyZSBjb21wbGV4aXR5IGFuZCBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBvZnRlbiBhcmlzZS5cblxuVGhlIGBibGstaW9jb3N0LWJwZi5jYCBmaWxlIGhhcyBmdW5jdGlvbnMgZm9yIG1vZGVsIG1hbmFnZW1lbnQ6IGxvb2t1cHMsIHJlZ2lzdHJhdGlvbiAoYGJwZl9pb2Nvc3RfcmVnYCksIGFuZCB1bnJlZ2lzdHJhdGlvbiAoYGJwZl9pb2Nvc3RfdW5yZWdgKS4gIEknbSBub3RpbmcgdGhhdCBgYnBmX2lvY29zdF9yZWdgIHVzZXMgYGt6YWxsb2NgLCB3aGljaCBzaG91bGQgemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnksIGFuZCB0aGF0J3MgZ29vZC4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYGJwZl9pb2Nvc3RfdW5yZWdgLCBrZnJlZSdpbmcgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSBicGZfaW9jb3N0X3JlZy4gIFdpdGhpbiBgYnBmX2lvY29zdF9pbml0X21lbWJlcmAsIEkgc2VlIGEgY29weSBvcGVyYXRpb24gdXNpbmcgYGJwZl9vYmpfbmFtZV9jcHlgLCBidXQgdGhhdCBjb3B5IGlzIGNoZWNraW5nIGxlbmd0aC4gIEl0IGRvZXMgbm90IGxvb2sgcmlza3kuIFRoZSB2YWxpZGF0aW9uIGluIGBicGZfaW9jb3N0X3ZhbGlkYXRlYCBjb25maXJtcyB0aGF0IHRoZSBjb2RlIGlzIGNoZWNraW5nIHRoYXQgYG9wcy1cdTAwM2VjYWxjX2Nvc3RgIGlzIGEgdmFsaWQgZnVuY3Rpb24sIG5vdCB1bmluaXRpYWxpemVkLlxuXG5Ob3csIHRoZSBgYmxrLWlvY29zdC5jYCBmaWxlIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBBIG5ldyBgbW9kZWxgIGZpZWxkIGlzIGFkZGVkIHRvIHRoZSBgaW9jYCBzdHJ1Y3QsIGJ1dCBpdCdzIG9ubHkgY29uZGl0aW9uYWwgb24gYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgLCBidXQgbW9yZSBpbXBvcnRhbnRseSwgYGlvY2AgaXMga3phbGxvYydkIGluIHNvbWUgcGFydHMgb2YgdGhlIGNvZGUuIFRoYXQgbWVhbnMgdGhlIGBtb2RlbGAgcG9pbnRlciBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIChhbmQgdGh1cyBzYWZlIHRvIHJlYWQpLiAgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpb2NgIGlzIGFsbG9jYXRlZCBjb3JyZWN0bHkgdG8gYmUgc3VyZSB0aGF0IGBtb2RlbGAgaXMgemVyb2VkLiAgTG9va2luZyBhdCBgaW9jX3Jxb3NfaW5pdGAsIHllcywgYGlvY2AgKmlzKiBga3phbGxvY2AtZWQuIEknbGwgY2hlY2sgYGlvY19ycW9zX2V4aXRgIGFzIHdlbGwsIHRvIG1ha2Ugc3VyZSBpdCBpcyBmcmVlZCBjb3JyZWN0bHkuICBJdCBkb2VzLCBhbmQgYWxzbyBjbGVhbnMgdXAgYGlvYy1cdTAwM2Vtb2RlbGAgdmlhIGBpb2Nvc3RfYnBmX21vZGVsX3B1dChtb2RlbClgLlxuXG5JbiB0aGUgYGlvY190aW1lcl9mbmAgZnVuY3Rpb24sIGBucl9hY3RpdmVgIGlzIGluaXRpYWxpemVkIHRvIDAuICBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYGNhbGNfdnRpbWVfY29zdGAgYW5kIGBjYWxjX3NpemVfdnRpbWVfY29zdGAgZnVuY3Rpb25zIGJvdGggZGVyZWZlcmVuY2UgdGhlIGBtb2RlbGAgcG9pbnRlciwgYnV0IGlmIGBpb2NgIGlzIGFsbG9jYXRlZCBieSBga3phbGxvY2AgdGhlbiB0aGVzZSBwb2ludGVycyBzaG91bGQgYmUgc2FmZSB0byBkZXJlZmVyZW5jZSwgYWx0aG91Z2ggdGhleSBtYXkgYmUgYE5VTExgLiBgaW9jX2Nvc3RfbW9kZWxfcHJmaWxsYCByZWFkcyB0aGUgYGlvYy1cdTAwM2Vtb2RlbGAsIHByaW50aW5nIHRvIGEgc2VxX2ZpbGUsIGFnYWluLCBzaG91bGQgYmUgc2FmZSB3aXRoIHByb3BlciBpbml0aWFsaXphdGlvbi4gIFRoZSBgaW9jX2JwZl9tb2RlbF9iaW5kYCBmdW5jdGlvbiBsb29rcyBva2F5IHRvby4gSXQgYmluZHMgYSBuZXcgbW9kZWwgYW5kIHB1dHMgdGhlIG9sZCwgd2l0aCBjaGVja3MgaW4gYmV0d2Vlbi5cblxuVGhlIGBpb2NfY29zdF9tb2RlbF93cml0ZWAgZnVuY3Rpb24gaGFuZGxlcyB3cml0aW5nIHRoZSBjb3N0IG1vZGVsLCBhbmQgZG9lcyBzdHJsY3B5IG9wZXJhdGlvbnMuIFRoZSBgYnBmX21vZGVsYCBjaGFyYWN0ZXIgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9lcy5cblxuT3ZlcmFsbCwgcmV2aWV3aW5nIHRoaXMgY29kZSB3aXRoIHRoZSBLTVNBTiBndWlkZWxpbmVzIGluIG1pbmQsIEkgZG8gbm90IHNlZSBhbnkgb2J2aW91cyBjYXNlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3b3VsZCBiZSBleHBvc2VkICpvbmx5KiBieSBLTVNBTi4gIEFsbCB0aGUgc3RydWN0dXJlcyBJIGV4YW1pbmVkLCB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBwb3RlbnRpYWxseSBjb21wbGV4IGNvbmRpdGlvbmFsIGxvZ2ljLCBlaXRoZXIgZ2V0IHplcm9lZC9pbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uICh1c2luZyBremFsbG9jLCBtZW1zZXQsID0gezB9KSwgb3IgaGF2ZSBib3VuZHMvbGVuZ3RoIGNoZWNrcy4gVGhlIGZhY3QgdGhhdCB0aGUgY29yZSBgaW9jYCBzdHJ1Y3QgaXMgYGt6YWxsb2NgJ2QgaXMgYSBzaWduaWZpY2FudCBmYWN0b3IsIGFzIGl0IGhhbmRsZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgbW9kZWxgIHN0cnVjdC4gVGhlcmVmb3JlLCBJJ20gY29uY2x1ZGluZyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXMgKm5vdCogaW50cm9kdWNlIEtNU0FOLXNwZWNpZmljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY5NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMToyNS4xNDEwMjQwNzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjczNjcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2MgPSBremFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1pb2Nvc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstaW9jb3N0LmM9Mjk3NT1zdGF0aWMgaW50IGJsa19pb2Nvc3RfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTc5LVxcbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTgwOlxcdGlvYyA9IGt6YWxsb2Nfb2JqKCppb2MpO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTgxLVxcdGlmICghaW9jKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNDoxMToyNS41Mzc3NjcxOTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwMTA3NDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIE1vZGVsIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgYnBmX21vZGVsYCBpcyBhY3R1YWxseSBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIGBpb2NfY29zdF9tb2RlbF93cml0ZWAgZnVuY3Rpb24uIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgd2FudCB0byBzZWUgdGhlIG1lY2hhbmljcywgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3csIHNlZSB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzLCBhbmQgbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBwcmVjaXNlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM1NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjExOjI3LjYzODg0Mzc4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLWlvY29zdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1OTAsXG4gIFwiTGluZUNvdW50XCI6IDk1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1OTA6XFx0XFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbjM1OTE6XFx0XFx0c3RydWN0IGlvYyAqaW9jO1xcbjM1OTI6XFx0XFx0dTY0IHVbTlJfSV9MQ09FRlNdO1xcbjM1OTM6XFx0XFx0Ym9vbCB1c2VyO1xcbjM1OTQ6XFx0XFx0Y2hhciBicGZfbW9kZWxbSU9DT1NUX01PREVMX05BTUVfTEVOXTtcXG4zNTk1OlxcdFxcdGNoYXIgKmJvZHksICpwO1xcbjM1OTY6XFx0XFx0aW50IHJldDtcXG4zNTk3OlxcdFxcbjM1OTg6XFx0XFx0YmxrZ19jb25mX2luaXQoXFx1MDAyNmN0eCwgaW5wdXQpO1xcbjM1OTk6XFx0XFxuMzYwMDpcXHRcXHRyZXQgPSBibGtnX2NvbmZfb3Blbl9iZGV2KFxcdTAwMjZjdHgpO1xcbjM2MDE6XFx0XFx0aWYgKHJldClcXG4zNjAyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzYwMzpcXHRcXG4zNjA0OlxcdFxcdGJvZHkgPSBjdHguYm9keTtcXG4zNjA1OlxcdFxcdHEgPSBiZGV2X2dldF9xdWV1ZShjdHguYmRldik7XFxuMzYwNjpcXHRcXHRpZiAoIXF1ZXVlX2lzX21xKHEpKSB7XFxuMzYwNzpcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4zNjA4OlxcdFxcdFxcdGdvdG8gY2xvc2VfYmRldjtcXG4zNjA5OlxcdFxcdH1cXG4zNjEwOlxcdFxcbjM2MTE6XFx0XFx0aW9jID0gcV90b19pb2MocSk7XFxuMzYxMjpcXHRcXHRpZiAoIWlvYykge1xcbjM2MTM6XFx0XFx0XFx0cmV0ID0gYmxrX2lvY29zdF9pbml0KGN0eC5iZGV2LVxcdTAwM2ViZF9kaXNrKTtcXG4zNjE0OlxcdFxcdFxcdGlmIChyZXQpXFxuMzYxNTpcXHRcXHRcXHRcXHRnb3RvIGNsb3NlX2JkZXY7XFxuMzYxNjpcXHRcXHRcXHRpb2MgPSBxX3RvX2lvYyhxKTtcXG4zNjE3OlxcdFxcdH1cXG4zNjE4OlxcdFxcbjM2MTk6XFx0XFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbjM2MjA6XFx0XFx0YmxrX21xX3F1aWVzY2VfcXVldWUocSk7XFxuMzYyMTpcXHRcXG4zNjIyOlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuMzYyMzpcXHRcXHRtZW1jcHkodSwgaW9jLVxcdTAwM2VwYXJhbXMuaV9sY29lZnMsIHNpemVvZih1KSk7XFxuMzYyNDpcXHRcXHR1c2VyID0gaW9jLVxcdTAwM2V1c2VyX2Nvc3RfbW9kZWw7XFxuMzYyNTpcXHRcXHRicGZfbW9kZWxbMF0gPSAnXFxcXDAnO1xcbjM2MjY6XFx0XFxuMzYyNzpcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjM2Mjg6XFx0XFxuMzYyOTpcXHRcXHR3aGlsZSAoKHAgPSBzdHJzZXAoXFx1MDAyNmJvZHksIFxcXCIgXFxcXHRcXFxcblxcXCIpKSkge1xcbjM2MzA6XFx0XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjM2MzE6XFx0XFx0XFx0Y2hhciBidWZbMzJdO1xcbjM2MzI6XFx0XFx0XFx0aW50IHRvaztcXG4zNjMzOlxcdFxcdFxcdHU2NCB2O1xcbjM2MzQ6XFx0XFxuMzYzNTpcXHRcXHRcXHRpZiAoISpwKVxcbjM2MzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzYzNzpcXHRcXG4zNjM4OlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4ocCwgY29zdF9jdHJsX3Rva2VucywgYXJncykpIHtcXG4zNjM5OlxcdFxcdFxcdGNhc2UgQ09TVF9DVFJMOlxcbjM2NDA6XFx0XFx0XFx0XFx0bWF0Y2hfc3RybGNweShidWYsIFxcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnVmKSk7XFxuMzY0MTpcXHRcXHRcXHRcXHRpZiAoIXN0cmNtcChidWYsIFxcXCJhdXRvXFxcIikpXFxuMzY0MjpcXHRcXHRcXHRcXHRcXHR1c2VyID0gZmFsc2U7XFxuMzY0MzpcXHRcXHRcXHRcXHRlbHNlIGlmICghc3RyY21wKGJ1ZiwgXFxcInVzZXJcXFwiKSlcXG4zNjQ0OlxcdFxcdFxcdFxcdFxcdHVzZXIgPSB0cnVlO1xcbjM2NDU6XFx0XFx0XFx0XFx0ZWxzZVxcbjM2NDY6XFx0XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzY0NzpcXHRcXHRcXHRcXHRicGZfbW9kZWxbMF0gPSAnXFxcXDAnO1xcbjM2NDg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzY0OTpcXHRcXHRcXHRjYXNlIENPU1RfTU9ERUw6XFxuMzY1MDpcXHRcXHRcXHRcXHRtYXRjaF9zdHJsY3B5KGJ1ZiwgXFx1MDAyNmFyZ3NbMF0sIHNpemVvZihidWYpKTtcXG4zNjUxOlxcdFxcdFxcdFxcdGlmICghc3RyY21wKGJ1ZiwgXFxcImxpbmVhclxcXCIpKSB7XFxuMzY1MjpcXHRcXHRcXHRcXHRcXHQvKiBiYWNrIHRvIHRoZSBidWlsdGluIGxpbmVhciBtb2RlbCAqL1xcbjM2NTM6XFx0XFx0XFx0XFx0XFx0YnBmX21vZGVsWzBdID0gJ1xcXFwwJztcXG4zNjU0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM2NTU6XFx0XFx0XFx0XFx0fVxcbjM2NTY6XFx0XFx0XFx0XFx0bWF0Y2hfc3RybGNweShicGZfbW9kZWwsIFxcdTAwMjZhcmdzWzBdLCBzaXplb2YoYnBmX21vZGVsKSk7XFxuMzY1NzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNjU4OlxcdFxcdFxcdH1cXG4zNjU5OlxcdFxcbjM2NjA6XFx0XFx0XFx0dG9rID0gbWF0Y2hfdG9rZW4ocCwgaV9sY29lZl90b2tlbnMsIGFyZ3MpO1xcbjM2NjE6XFx0XFx0XFx0aWYgKHRvayA9PSBOUl9JX0xDT0VGUylcXG4zNjYyOlxcdFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjM2NjM6XFx0XFx0XFx0aWYgKG1hdGNoX3U2NChcXHUwMDI2YXJnc1swXSwgXFx1MDAyNnYpKVxcbjM2NjQ6XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuMzY2NTpcXHRcXHRcXHR1W3Rva10gPSB2O1xcbjM2NjY6XFx0XFx0XFx0dXNlciA9IHRydWU7XFxuMzY2NzpcXHRcXHR9XFxuMzY2ODpcXHRcXG4zNjY5OlxcdFxcdGlmICh1c2VyKSB7XFxuMzY3MDpcXHRcXHRcXHRtZW1jcHkoaW9jLVxcdTAwM2VwYXJhbXMuaV9sY29lZnMsIHUsIHNpemVvZih1KSk7XFxuMzY3MTpcXHRcXHRcXHRpb2MtXFx1MDAzZXVzZXJfY29zdF9tb2RlbCA9IHRydWU7XFxuMzY3MjpcXHRcXHR9IGVsc2Uge1xcbjM2NzM6XFx0XFx0XFx0aW9jLVxcdTAwM2V1c2VyX2Nvc3RfbW9kZWwgPSBmYWxzZTtcXG4zNjc0OlxcdFxcdH1cXG4zNjc1OlxcdFxcdGlvY19yZWZyZXNoX3BhcmFtcyhpb2MsIHRydWUpO1xcbjM2NzY6XFx0XFxuMzY3NzpcXHRcXHRyZXQgPSAwO1xcbjM2Nzg6XFx0XFxuMzY3OTpcXHR1bmxvY2s6XFxuMzY4MDpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmlvYy1cXHUwMDNlbG9jayk7XFxuMzY4MTpcXHRcXG4zNjgyOlxcdFxcdC8qXFxuMzY4MzpcXHRcXHQgKiBCaW5kIHRoZSBCUEYgbW9kZWwgb3V0c2lkZSBpb2MtXFx1MDAzZWxvY2s6IHRoZSByZWdpc3RyeSBsb29rdXBcXG4zNjg0OlxcdFxcdCAqIHRha2VzIHRoZSByZWdpc3RyYXRpb24gbXV0ZXggYW5kIHRoZSBvbGQgbW9kZWwncyByZWZlcmVuY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6MjcuNjM5MDY5NTI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NTU1NzE5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEJsb2NrIElPIENvc3QgQlBGIE9iamVjdCBIYW5kbGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBibGstaW9jb3N0LWJwZi5jYCBjb2RlLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgYXJvdW5kIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGBzdHJ1Y3Rfb3BzYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIG9iamVjdCBuYW1lIGNvcGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGRvbmUgY29ycmVjdGx5IGFuZCBzZWN1cmVseS4gTGV0IG1lIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyBgYnBmX29ial9uYW1lX2NweWAuIEZyb20gd2hhdCBJIGNhbiBzZWUgaGVyZSwgdGhleSdyZSB1c2luZyBgYnBmX29ial9uYW1lX2NweShvcHMtXHUwMDNlbmFtZSwgdW9wcy1cdTAwM2VuYW1lLCBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKWAuIFN0YW5kYXJkIGtlcm5lbCBmdW5jdGlvbiwgc28gdGhhdCdzIGEgZ29vZCBzdGFydC4gQnV0IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX29ial9uYW1lX2NweWAgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGxpa2Ugb2ZmLWJ5LW9uZSBlcnJvcnMgb3IgYnVmZmVyIG92ZXJmbG93cy4gTmVlZCB0byBtYWtlIGNlcnRhaW4gdGhlIG5hbWUgY29weSBpcyByb2J1c3Qgd2l0aGluIHRoZSBjb250ZXh0IG9mIEJQRiBvYmplY3QgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NjAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjExOjM0LjQ5NDY0NDc5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0Nzc3MTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfb2JqX25hbWVfY3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1pb2Nvc3QtYnBmLmM9MTM4PXN0YXRpYyBpbnQgYnBmX2lvY29zdF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LWJwZi5jLTE0Ny1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpb2Nvc3RfbW9kZWxfb3BzLCBuYW1lKTpcXG5ibG9jay9ibGstaW9jb3N0LWJwZi5jOjE0ODpcXHRcXHRpZiAoYnBmX29ial9uYW1lX2NweShvcHMtXFx1MDAzZW5hbWUsIHVvcHMtXFx1MDAzZW5hbWUsXFxuYmxvY2svYmxrLWlvY29zdC1icGYuYy0xNDktXFx0XFx0XFx0XFx0ICAgICBzaXplb2Yob3BzLVxcdTAwM2VuYW1lKSkgXFx1MDAzYz0gMClcXG4tLVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jPTM0ND1zdGF0aWMgaW50IGJtX2JwZl9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zNTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmluZm10X21pc2Nfb3BzLCBuYW1lKTpcXG5mcy9iaW5mbXRfbWlzY19icGYuYzozNTQ6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLVxcdTAwM2VuYW1lLCB1b3BzLVxcdTAwM2VuYW1lLFxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTM1NS1cXHRcXHRcXHRcXHQgICAgIHNpemVvZihvcHMtXFx1MDAzZW5hbWUpKSBcXHUwMDNjPSAwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD02NTU9c3RydWN0IGJwZl9tYXAgKmJwZl9wcm9nX2FyZW5hKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYuaDo2NTY6aW50IGJwZl9vYmpfbmFtZV9jcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGludCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY1Ny1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyMDM9aW50IGJwZl9nZXRfZmlsZV9mbGFnKGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyMjQtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTIyNTppbnQgYnBmX29ial9uYW1lX2NweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgaW50IHNpemUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIyNi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjQ0LX1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjQ1OkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9vYmpfbmFtZV9jcHkpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNDYtXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTQxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1NDI6XFx0ZXJyID0gYnBmX29ial9uYW1lX2NweShtYXAtXFx1MDAzZW5hbWUsIGF0dHItXFx1MDAzZW1hcF9uYW1lLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1NDMtXFx0XFx0XFx0ICAgICAgIHNpemVvZihhdHRyLVxcdTAwM2VtYXBfbmFtZSkpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMjYtXFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2Vsb2FkX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTI3OlxcdGVyciA9IGJwZl9vYmpfbmFtZV9jcHkocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VuYW1lLCBhdHRyLVxcdTAwM2Vwcm9nX25hbWUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEyOC1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGF0dHItXFx1MDAzZXByb2dfbmFtZSkpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDE1PXN0YXRpYyBpbnQgYnBmX3NjeF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwMzUtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgbmFtZSk6XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDM2OlxcdFxcdHJldCA9IGJwZl9vYmpfbmFtZV9jcHkob3BzLVxcdTAwM2VuYW1lLCB1b3BzLVxcdTAwM2VuYW1lLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODAzNy1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKG9wcy1cXHUwMDNlbmFtZSkpO1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTIxMT1zdGF0aWMgaW50IGJwZl90Y3BfY2FfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyOS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMsIG5hbWUpOlxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMzA6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkodGNwX2NhLVxcdTAwM2VuYW1lLCB1dGNwX2NhLVxcdTAwM2VuYW1lLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMzEtXFx0XFx0XFx0XFx0ICAgICBzaXplb2YodGNwX2NhLVxcdTAwM2VuYW1lKSkgXFx1MDAzYz0gMClcXG4tLVxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYz0zNjE9c3RhdGljIGludCBicGZfcWRpc2NfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTM4Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBRZGlzY19vcHMsIGlkKTpcXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM6MzgzOlxcdFxcdGlmIChicGZfb2JqX25hbWVfY3B5KHFkaXNjX29wcy1cXHUwMDNlaWQsIHVxZGlzY19vcHMtXFx1MDAzZWlkLFxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYy0zODQtXFx0XFx0XFx0XFx0ICAgICBzaXplb2YocWRpc2Nfb3BzLVxcdTAwM2VpZCkpIFxcdTAwM2M9IDApXFxuLS1cXG5uZXQvc21jL3NtY19oc19icGYuYz04NT1zdGF0aWMgaW50IHNtY19icGZfaHNfY3RybF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5uZXQvc21jL3NtY19oc19icGYuYy05OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzbWNfaHNfY3RybCwgbmFtZSk6XFxubmV0L3NtYy9zbWNfaHNfYnBmLmM6OTk6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkoa19jdHJsLVxcdTAwM2VuYW1lLCB1X2N0cmwtXFx1MDAzZW5hbWUsXFxubmV0L3NtYy9zbWNfaHNfYnBmLmMtMTAwLVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHVfY3RybC1cXHUwMDNlbmFtZSkpIFxcdTAwM2M9IDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE0OjExOjM2Ljg0MjQyMjkwOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzg4MzQwMzYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBibGstaW9jb3N0IEJQRiBDb3N0IE1vZGVsIEltcGxlbWVudGF0aW9uIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBuZXcgQlBGIGNvc3QgbW9kZWwgaW50ZWdyYXRpb24gd2l0aGluIGJsay1pb2Nvc3QgaW50cm9kdWNlcyBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggd291bGQgbmVjZXNzaXRhdGUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIEknbSBleGFtaW5pbmcgdGhlIGNvZGUgd2l0aCBhIGNyaXRpY2FsIGV5ZSwgZm9jdXNpbmcgb24gZGF0YSBmbG93cywgaW5pdGlhbGl6YXRpb24gcGF0dGVybnMsIGFuZCBwb3RlbnRpYWwgZGF0YSBsZWFrcy5cblxuRmlyc3QsIEknbSB2ZXJpZnlpbmcgdGhlIGBUUkFDRV9FVkVOVChpb2Nvc3RfaW9jX3RpY2spYCB0cmFjZXBvaW50LiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgdHJhY2Vwb2ludCBzdHJ1Y3QgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGluIGBUUF9mYXN0X2Fzc2lnbmAuIFRoaXMgaW5jbHVkZXMgYGRldm5hbWVgLCBgcGVyaW9kX3VzYCwgYHZyYXRlYCwgYGJ1c3lfbGV2ZWxgLCBgbnJfYWN0aXZlYCwgYHVzYWdlX3BjdGAsIGFuZCBgcnVubmluZ2AuIEkgc2VlIHRoYXQgdGhlIGBucl9hY3RpdmVgIHZhbHVlIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIGlzIGluY3JlbWVudGVkIHdpdGhpbiB0aGUgcmVsZXZhbnQgbG9vcCBhbmQgdGhlbiBwYXNzZWQgdG8gdGhlIHRyYWNlIGV2ZW50LCBzbyB0aGlzIGlzIHNvbGlkLiBObyB3b3JyaWVzIHRoZXJlLlxuXG5OZXh0LCBJJ3ZlIGNoZWNrZWQgdGhlIGBjYWxjX3Z0aW1lX2Nvc3RgIGFuZCBgY2FsY19zaXplX3Z0aW1lX2Nvc3RgIGZ1bmN0aW9ucy4gSSd2ZSBmb2N1c2VkIG9uIGhvdyBgY29zdGAgaXMgYXNzaWduZWQgd2l0aGluIHRoZSBCUEYgbW9kZWwgcGF0aCwgYW5kIGhvdyB0aGUgdmFsdWUgaXMgdXNlZC4gQm90aCBmdW5jdGlvbnMgd2lsbCB1c2UgYGNhbGNfdnRpbWVfY29zdF9idWlsdGluYCBvciBgY2FsY19zaXplX3Z0aW1lX2Nvc3RfYnVpbHRpbmAgaWYgQlBGIG1vZGVsIGlzIGRpc2FibGVkLiBUaGUgQlBGIG1vZGVsIGFzc2lnbnMgYGNvc3RgIHZpYSBgbW9kZWwtXHUwMDNlY2FsY19jb3N0KC4uLilgLiBJIGNhbiBzZWUgdGhlcmUgYXJlIGNoZWNrcyB0byB2ZXJpZnkgbW9kZWwgaXMgcHJlc2VudC4gSSd2ZSBjb25maXJtZWQgdGhpcyBjb3N0IGlzIHJldHVybmVkLCBhbmQgdGhhdCBgVlRJTUVfUEVSX1NFQ2AgaXMgdXNlZCBhcyBhIG1heGltdW0gdmFsdWUgc28gdGhpcyBpcyBzYWZlIGFzIHdlbGwuXG5cbkkndmUgYWxzbyBsb29rZWQgYXQgdGhlIGFsbG9jYXRpb24gcGF0dGVybnMuIEJvdGggYGt6YWxsb2NgIGFuZCBga3phbGxvY19vYmpgIGFyZSB1c2VkIGZvciBhbGxvY2F0aW9uIG9mIGBpb2Nvc3RfYnBmX21vZGVsYCBhbmQgYHN0cnVjdCBpb2NgIHJlc3BlY3RpdmVseSwgYW5kIHRoZXNlIGFyZSBpbml0aWFsaXplZCB3aXRoIHplcm8sIGFuZCBJJ3ZlIHZlcmlmaWVkIHRoYXQgbm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHVzZWQgaW4gYW55IG90aGVyIHN0cnVjdHVyZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBCUEYgbW9kZWwgaW50ZWdyYXRpb24gc2VlbXMgdG8gYmUgaGFuZGxlZCBieSBgaW9jb3N0X2JwZl9tb2RlbF9nZXRgLCBgaW9jX2JwZl9tb2RlbF9iaW5kYCwgYW5kIHRoZSBgaW9jX2Nvc3RfbW9kZWxfd3JpdGVgIGZ1bmN0aW9uLiBgaW9jb3N0X2JwZl9tb2RlbF9nZXRgIHJldHJpZXZlcyB0aGUgQlBGIG1vZGVsLiBgaW9jX2JwZl9tb2RlbF9iaW5kYCBoYW5kbGVzIHRoZSBiaW5kaW5nIGFuZCB1bmJpbmRpbmcgb2YgdGhlIGNvc3QgbW9kZWwgdG8gdGhlIGBpb2NgIHN0cnVjdCwgdXNpbmcgYHJjdV9hc3NpZ25fcG9pbnRlcmAgdG8gaGFuZGxlIGNvbmN1cnJlbmN5IHNhZmVseS4gSSB2ZXJpZmllZCB0aGF0IGEgYGJwZl9tb2RlbGAgc3RyaW5nIGlzIGJlaW5nIHByb3Blcmx5IG51bGwtdGVybWluYXRlZCB2aWEgYG1hdGNoX3N0cmxjcHlgLCBhbmQgcGFzc2VkIHRvIGBpb2NfYnBmX21vZGVsX2JpbmRgLiBJIGNhbiBjb25maXJtIHRoZXJlIGFyZSBubyBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5CYXNlZCBvbiBteSBhbmFseXNpcywgSSBhbSBjb25maWRlbnQgdGhhdCB0aGVyZSBhcmUgbm8gZGF0YSByYWNlcyBvciBtaXNzaW5nIGluaXRpYWxpemF0aW9uIHN0ZXBzIHRoYXQgd291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMuIFRoZXJlIGFyZSBubyBkaXJlY3QgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIEkndmUgY29uc2lkZXJlZCB0aGUgZm91ciBjcml0ZXJpYSByZWxhdGVkIHRvIHRoZSBkZXRlY3Rpb24gb2YgdW5pbml0aWFsaXplZCByZWFkcyBhbmQgbm9uZSBvZiB0aGVtIGFwcGx5OiBubyBrZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbm8gdW5pbml0aWFsaXplZCBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBubyBib3VuZHMgY2hlY2sgaXNzdWVzLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBzbyBJJ20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cbkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBCUEYgc3RydWN0X29wcy1iYXNlZCBjb3N0IG1vZGVscyB0byBgYmxrLWlvY29zdGAsIGluY2x1ZGluZyByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gaG9va3MsIGJsa2NnIG5vdGlmaWNhdGlvbnMsIGEgY2dyb3VwIHYyIGBpby5jb3N0Lm1vZGVsYCBjb25maWcsIGFuZCBhIG5ldyB0cmFjZXBvaW50LiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGFyZSBpbml0aWFsaXplZC4gVGhlcmUgYXJlIG5vIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UgdGhhdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBkYXRhLiBNZW1vcnkgc2FmZXR5IGNvbmNlcm5zIChSQ1UgbGlmZXRpbWUsIHN0cnVjdF9vcHMgcmVmY291bnRpbmcsIGxvY2tpbmcpIGFyZSBhbHJlYWR5IGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgdGhpcyBjb2RlIGFkZGl0aW9uIGRvZXMgbm90IHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjA1LCJPdXRwdXRUb2tlbnMiOjM0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTQ6MTE6NTAuNzI1ODMwMDIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdCAoYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgKSwgYWRkaW5nIGBpb2Nvc3RfbW9kZWxfb3BzYCwgbW9kZWwgcmVnaXN0cmF0aW9uL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJzaW5nIGluIGBpby5jb3N0Lm1vZGVsYCwgYW5kIGEgbmV3IHRyYWNlcG9pbnQgYGlvY29zdF9pb2NfdGlja2AuXFxuXFxuQW4gZXZhbHVhdGlvbiBvZiBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYWNyb3NzIHRoZSBtb2RpZmllZCBhbmQgbmV3IGNvZGUgc2hvd3M6XFxuLSBBbGwgc3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGBicGZfbW9kZWxgIGluaXRpYWxpemVkIHdpdGggYGJwZl9tb2RlbFswXSA9ICdcXFxcMCdgLCBgbnJfYWN0aXZlYCBpbml0aWFsaXplZCB0byAwLCBhbmQgYGJ1ZmAgYnVmZmVycyBmaWxsZWQgd2l0aCBgbWF0Y2hfc3RybGNweWApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZC91c2UuXFxuLSBEeW5hbWljIGFsbG9jYXRpb25zIHVzZSBga3phbGxvY2AgKGZvciBgc3RydWN0IGlvY29zdF9icGZfbW9kZWxgKSBhbmQgdGhlIGV4aXN0aW5nIHplcm9lZCBhbGxvY2F0aW9uIGZvciBgc3RydWN0IGlvY2AuXFxuLSBObyBrZXJuZWwgc3RydWN0dXJlcyBjb250YWluaW5nIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2U7IG91dHB1dCB0byB1c2VyIHNwYWNlIGlzIGhhbmRsZWQgdmlhIGZvcm1hdHRlZCB0ZXh0IGluIGBzZXFfcHJpbnRmYC5cXG4tIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBjYWxsYmFja3MgKGBjYWxjX2Nvc3RgLCBgYmxrY2dfb25saW5lYCwgYGJsa2NnX29mZmxpbmVgKSBhcmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIGluaXRpYWxpemVkIGJpby9yZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIGJsa2NnIHBvaW50ZXJzLlxcblxcblRoZSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHNlcmllcyBwZXJ0YWluIHRvIFJDVSBzeW5jaHJvbml6YXRpb24sIG9iamVjdCByZWZjb3VudGluZy9saWZldGltZSAoYGJwZl9zdHJ1Y3Rfb3BzX2dldGAvYHB1dGApLCBhbmQgbG9ja2luZywgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGRldGVjdG9ycy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBzcGVjaWZpYyB0byBLTVNBTiBhcmUgcHJlc2VudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBCUEYgc3RydWN0X29wcyBzdXBwb3J0IGZvciBwbHVnZ2FibGUgY29zdCBtb2RlbHMgaW4gYmxrLWlvY29zdCAoYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVF9CUEZgKSwgYWRkaW5nIGBpb2Nvc3RfbW9kZWxfb3BzYCwgbW9kZWwgcmVnaXN0cmF0aW9uL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJzaW5nIGluIGBpby5jb3N0Lm1vZGVsYCwgYW5kIGEgbmV3IHRyYWNlcG9pbnQgYGlvY29zdF9pb2NfdGlja2AuXFxuXFxuQW4gZXZhbHVhdGlvbiBvZiBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYWNyb3NzIHRoZSBtb2RpZmllZCBhbmQgbmV3IGNvZGUgc2hvd3M6XFxuLSBBbGwgc3RhY2sgdmFyaWFibGVzIChzdWNoIGFzIGBicGZfbW9kZWxgIGluaXRpYWxpemVkIHdpdGggYGJwZl9tb2RlbFswXSA9ICdcXFxcMCdgLCBgbnJfYWN0aXZlYCBpbml0aWFsaXplZCB0byAwLCBhbmQgYGJ1ZmAgYnVmZmVycyBmaWxsZWQgd2l0aCBgbWF0Y2hfc3RybGNweWApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZC91c2UuXFxuLSBEeW5hbWljIGFsbG9jYXRpb25zIHVzZSBga3phbGxvY2AgKGZvciBgc3RydWN0IGlvY29zdF9icGZfbW9kZWxgKSBhbmQgdGhlIGV4aXN0aW5nIHplcm9lZCBhbGxvY2F0aW9uIGZvciBgc3RydWN0IGlvY2AuXFxuLSBObyBrZXJuZWwgc3RydWN0dXJlcyBjb250YWluaW5nIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2U7IG91dHB1dCB0byB1c2VyIHNwYWNlIGlzIGhhbmRsZWQgdmlhIGZvcm1hdHRlZCB0ZXh0IGluIGBzZXFfcHJpbnRmYC5cXG4tIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBjYWxsYmFja3MgKGBjYWxjX2Nvc3RgLCBgYmxrY2dfb25saW5lYCwgYGJsa2NnX29mZmxpbmVgKSBhcmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIGluaXRpYWxpemVkIGJpby9yZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIGJsa2NnIHBvaW50ZXJzLlxcblxcblRoZSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHNlcmllcyBwZXJ0YWluIHRvIFJDVSBzeW5jaHJvbml6YXRpb24sIG9iamVjdCByZWZjb3VudGluZy9saWZldGltZSAoYGJwZl9zdHJ1Y3Rfb3BzX2dldGAvYHB1dGApLCBhbmQgbG9ja2luZywgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGRldGVjdG9ycy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBzcGVjaWZpYyB0byBLTVNBTiBhcmUgcHJlc2VudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2wsfq[1] Phase: Succeeded StartedAt: 2026-09-10 14:12:03 +0000 UTC FinishedAt: 2026-09-10 14:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 14:12:03 +0000 UTC FinishedAt: 2026-09-10 14:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2] Phase: Succeeded StartedAt: 2026-09-10 14:12:03 +0000 UTC FinishedAt: 2026-09-10 17:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 14:12:03 +0000 UTC FinishedAt: 2026-09-10 17:57:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 14:12:03 +0000 UTC FinishedAt: 2026-09-10 14:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 14:12:03 +0000 UTC FinishedAt: 2026-09-10 14:12:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow2wsfq/series-workflow2wsfq-convert-artifact-2213814338/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 14:12:13 +0000 UTC FinishedAt: 2026-09-10 14:32:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 14:12:13 +0000 UTC FinishedAt: 2026-09-10 14:32:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b815d59b-64ef-4af0-80ae-6d42c2914cc1,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-workflow2wsfq/series-workflow2wsfq-convert-artifact-2213814338/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": "b06b3477-487d-4088-9ea4-49befd85a6b2", "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-workflow2wsfq/series-workflow2wsfq-build-action-1869011712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 14:12:13 +0000 UTC FinishedAt: 2026-09-10 14:32:32 +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:*b815d59b-64ef-4af0-80ae-6d42c2914cc1,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-workflow2wsfq/series-workflow2wsfq-convert-artifact-2213814338/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": "b06b3477-487d-4088-9ea4-49befd85a6b2", "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-workflow2wsfq/series-workflow2wsfq-build-action-1869011712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 14:32:42 +0000 UTC FinishedAt: 2026-09-10 14:32:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 14:32:42 +0000 UTC FinishedAt: 2026-09-10 14:32:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 14:32:42 +0000 UTC FinishedAt: 2026-09-10 14:32:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 14:32:42 +0000 UTC FinishedAt: 2026-09-10 14:32:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow2wsfq/series-workflow2wsfq-convert-artifact-217600669/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 14:32:52 +0000 UTC FinishedAt: 2026-09-10 14:34:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 14:32:52 +0000 UTC FinishedAt: 2026-09-10 14:34:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b06b3477-487d-4088-9ea4-49befd85a6b2,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-workflow2wsfq/series-workflow2wsfq-build-action-1869011712/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-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 14:34:50 +0000 UTC FinishedAt: 2026-09-10 14:34:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 14:34:50 +0000 UTC FinishedAt: 2026-09-10 14:34:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 14:34:50 +0000 UTC FinishedAt: 2026-09-10 14:51:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 14:34:50 +0000 UTC FinishedAt: 2026-09-10 14:51:18 +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:*b815d59b-64ef-4af0-80ae-6d42c2914cc1,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-workflow2wsfq/series-workflow2wsfq-convert-artifact-217600669/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": "ab4bb3e4-b6ba-44a4-8ce9-7ad82c53094b", "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-workflow2wsfq/series-workflow2wsfq-build-action-1480138617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 14:34:50 +0000 UTC FinishedAt: 2026-09-10 14:51:08 +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:*b815d59b-64ef-4af0-80ae-6d42c2914cc1,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-workflow2wsfq/series-workflow2wsfq-convert-artifact-217600669/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": "ab4bb3e4-b6ba-44a4-8ce9-7ad82c53094b", "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-workflow2wsfq/series-workflow2wsfq-build-action-1480138617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 14:51:18 +0000 UTC FinishedAt: 2026-09-10 14:51:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 14:51:18 +0000 UTC FinishedAt: 2026-09-10 14:51:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 14:51:18 +0000 UTC FinishedAt: 2026-09-10 14:55:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 14:51:18 +0000 UTC FinishedAt: 2026-09-10 14:55:38 +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:*ab4bb3e4-b6ba-44a4-8ce9-7ad82c53094b,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-workflow2wsfq/series-workflow2wsfq-build-action-1480138617/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-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 14:55:48 +0000 UTC FinishedAt: 2026-09-10 17:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 14:55:48 +0000 UTC FinishedAt: 2026-09-10 17:57:38 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"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:*b06b3477-487d-4088-9ea4-49befd85a6b2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ab4bb3e4-b6ba-44a4-8ce9-7ad82c53094b,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-workflow2wsfq/series-workflow2wsfq-build-action-1869011712/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-workflow2wsfq/series-workflow2wsfq-build-action-1480138617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 14:55:48 +0000 UTC FinishedAt: 2026-09-10 14:55:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 14:55:48 +0000 UTC FinishedAt: 2026-09-10 14:55:53 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"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-workflow2wsfq/series-workflow2wsfq-convert-artifact-860475426/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 14:55:48 +0000 UTC FinishedAt: 2026-09-10 14:55:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 14:55:48 +0000 UTC FinishedAt: 2026-09-10 14:55:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 14:55:48 +0000 UTC FinishedAt: 2026-09-10 14:55:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 14:55:58 +0000 UTC FinishedAt: 2026-09-10 17:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wsfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["ioc_bpf_model_bind","ioc_cost_model_write","calc_vtime_cost","calc_size_vtime_cost","bpf_iocost_reg","bpf_iocost_unreg","bpf_iocost_validate","iocost_bpf_model_get","iocost_bpf_model_put","iocost_notify_blkcg_online","iocost_notify_blkcg_offline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP_IOCOST_BPF","BLK_CGROUP_IOCOST","BLK_CGROUP","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a2010ea6-5d95-4530-a1de-b18113c7c89a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 14:55:58 +0000 UTC FinishedAt: 2026-09-10 17:57:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b06b3477-487d-4088-9ea4-49befd85a6b2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ab4bb3e4-b6ba-44a4-8ce9-7ad82c53094b,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-workflow2wsfq/series-workflow2wsfq-build-action-1869011712/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-workflow2wsfq/series-workflow2wsfq-build-action-1480138617/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-workflow2wsfq/series-workflow2wsfq-convert-artifact-860475426/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,}