Name: series-workflowzpwgw Phase: Succeeded StartedAt: 2026-08-28 16:32:58 +0000 UTC FinishedAt: 2026-08-28 21:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[0] Phase: Succeeded StartedAt: 2026-08-28 16:32:58 +0000 UTC FinishedAt: 2026-08-28 17:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 16:32:58 +0000 UTC FinishedAt: 2026-08-28 17:37:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_HMAC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_HMAC" ], "series_id": "3daef668-b849-4df9-8594-c6ce872725c3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipv6_srh_rcv", "ipv6_rthdr_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MThtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfSE1BQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3J0aGRyX3JjdiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBwcm9jZXNzaW5nIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGJ5IHJlcGxhY2luZyBmaXhlZCBgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWAgYWRqdXN0bWVudHMgaW4gYHNrYl9wdXNoKClgIGFuZCBgc2tiX3B1bGwoKWAgd2l0aCBkeW5hbWljIG9mZnNldHMgKGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGFuZCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWApLiBUaGlzIGNvcnJlY3RseSBhZGp1c3RzIGBza2ItXHUwMDNlZGF0YWAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXR3b3JrIGhlYWRlciBhbmQgdHJhbnNwb3J0IGhlYWRlciB3aGVuIGV4dGVuc2lvbiBoZWFkZXJzIHByZWNlZGUgdGhlIFNSSC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGFjY2VzcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZmllbGRzLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgdmlhIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb3JyZWN0IGBza2JfcHVzaGAvYHNrYl9wdWxsYCBjYWxjdWxhdGlvbnMgcmVsYXRlIHRvIHNrYiBidWZmZXIgYm91bmRzIGFuZCBoZWFkZXIgYWxpZ25tZW50LCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBza19idWZmIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoZS5nLiwgYHNrYl91bmRlcl9wYW5pY2AvYHNrYl9vdmVyX3BhbmljYCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZDQ0MzU3MzVhMzgxNWNmYTVmZTgyNDI2NzJlMmFmMzMzZDM5NjI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMTc6MTg6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5pbmRleCA1MTk0MWFkNjU2YTM2Li4wOWE0NTUyZjdmMDhhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbkBAIC00NDUsNyAmIzQzOzQ0NSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIFx0YWRkciA9IGhkci1cdTAwM2VzZWdtZW50cyAmIzQzOyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiBcbi1cdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4mIzQzO1x0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIFxuIFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpXG4gXHRcdHNlZzZfdXBkYXRlX2NzdW0oc2tiKTtcbkBAIC00NjksNyAmIzQzOzQ2OSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbiBcbi1cdFx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbiYjNDM7XHRcdHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XG4gXHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDQ0MzU3MzVhMzgxNWNmYTVmZTgyNDI2NzJlMmFmMzMzZDM5NjI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMTc6MTg6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggNTE5NDFhZDY1NmEzNi4uMDlhNDU1MmY3ZjA4YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtNDQ1LDcgJiM0Mzs0NDUsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogCWhkci0mZ3Q7c2VnbWVudHNfbGVmdC0tOwogCWFkZHIgPSBoZHItJmd0O3NlZ21lbnRzICYjNDM7IGhkci0mZ3Q7c2VnbWVudHNfbGVmdDsKIAotCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiYjNDM7CXNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKIAogCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKIAkJc2VnNl91cGRhdGVfY3N1bShza2IpOwpAQCAtNDY5LDcgJiM0Mzs0NjksNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogCQl9CiAJCWlwdjZfaGRyKHNrYiktJmd0O2hvcF9saW1pdC0tOwogCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiYjNDM7CQlza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpOwogCQlnb3RvIGxvb3BlZF9iYWNrOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJUHY2IFNvdXJjZSBSb3V0aW5nIEhlYWRlciBIYW5kbGluZyoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGRpZ2dpbmcgaW50byBgbmV0L2lwdjYvZXh0aGRycy5jYCwgYW5kIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGlwdjZfc3JoX3JjdmAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZSBpbnRlcmVzdCDigJMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc291cmNlIHJvdXRpbmcgaGVhZGVycyBpbiBJUHY2LCB3aGljaCwgd2hpbGUgbm90IGFzIHByZXZhbGVudCBhcyB0aGV5IG9uY2Ugd2VyZSwgc3RpbGwgcmVwcmVzZW50IGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3IgYW5kIGEgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkIGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lIDQ0NSBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgU1JIIGhhbmRsaW5nIGxvZ2ljIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmcgd2l0aCB0aGUgc2VnbWVudCBsaXN0LCB0aGUgcG9pbnRlciBhcml0aG1ldGljLCBhbnkgaG9wLWJ5LWhvcCBvcHRpb25zIGFuZCBpZiB0aGV5IGFyZSB2YWxpZGF0aW5nIHRoZSBzb3VyY2Ugcm91dGVzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDIwOlx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSAoaGRyLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiA0MjE6XHRcdFx0b3B0LVx1MDAzZW5ob2ZmID0gKFx1MDAyNmhkci1cdTAwM2VuZXh0aGRyKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDQyMjpcdFxuIDQyMzpcdFx0XHRyZXR1cm4gMTtcbiA0MjQ6XHRcdH1cbiA0MjU6XHRcbiA0MjY6XHRcdGlmIChoZHItXHUwMDNlc2VnbWVudHNfbGVmdCBcdTAwM2U9IChoZHItXHUwMDNlaGRybGVuIFx1MDAzZVx1MDAzZSAxKSkge1xuIDQyNzpcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gNDI4Olx0XHRcdGljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCxcbiA0Mjk6XHRcdFx0XHRcdCAgKChcdTAwMjZoZHItXHUwMDNlc2VnbWVudHNfbGVmdCkgLVxuIDQzMDpcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcbiA0MzE6XHRcdFx0cmV0dXJuIC0xO1xuIDQzMjpcdFx0fVxuIDQzMzpcdFxuIDQzNDpcdFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xuIDQzNTpcdFx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XG4gNDM2Olx0XHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXG4gNDM3Olx0XHRcdFx0XHRcdElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTtcbiA0Mzg6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0Mzk6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDQwOlx0XHRcdH1cbiA0NDE6XHRcbiA0NDI6XHRcdFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gNDQzOlx0XHR9XG4gNDQ0Olx0XG4gNDQ1Olx0XHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIDQ0NjpcdFx0YWRkciA9IGhkci1cdTAwM2VzZWdtZW50cyAmIzQzOyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiA0NDc6XHRcbiA0NDg6XHRcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcbiA0NDk6XHRcbiA0NTA6XHRcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxuIDQ1MTpcdFx0XHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XG4gNDUyOlx0XG4gNDUzOlx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyID0gKmFkZHI7XG4gNDU0Olx0XG4gNDU1Olx0XHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcbiA0NTY6XHRcbiA0NTc6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA0NTg6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNDU5Olx0XHRcdHJldHVybiAtMTtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRcdGlmIChza2JfZHN0X2Rldihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcbiA0NjM6XHRcdFx0aWYgKGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDQ2NDpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA0NjU6XHRcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiA0NjY6XHRcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiA0Njc6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0Njg6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDY5Olx0XHRcdH1cbiA0NzA6XHRcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbiA0NzE6XHRcbiA0NzI6XHRcdFx0c2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcbiA0NzM6XHRcdFx0Z290byBsb29wZWRfYmFjaztcbiA0NzQ6XHRcdH1cbiA0NzU6XHRcbiA0NzY6XHRcdGRzdF9pbnB1dChza2IpO1xuIDQ3NzpcdFxuIDQ3ODpcdFx0cmV0dXJuIC0xO1xuIDQ3OTpcdH1cbiA0ODA6XHRcbiA0ODE6XHRzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiA0ODI6XHR7XG4gNDgzOlx0XHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcbiA0ODQ6XHRcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbiA0ODU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNDg2Olx0XHRzdHJ1Y3QgaXB2NmhkciAqb2xkaGRyO1xuIDQ4NzpcdFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xuIDQ4ODpcdFx0dW5zaWduZWQgY2hhciAqYnVmO1xuIDQ4OTpcdFx0aW50IGFjY2VwdF9ycGxfc2VnO1xuIDQ5MDpcdFx0aW50IGksIGVycjtcbiA0OTE6XHRcdHU2NCBuID0gMDtcbiA0OTI6XHRcdHUzMiByO1xuIDQ5MzpcdFxuIDQ5NDpcdFx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXG4gNDk1Olx0XHRcdFx0ICAgICBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkKSk7XG4gNDk2Olx0XHRpZiAoIWFjY2VwdF9ycGxfc2VnKSB7XG4gNDk3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQ5ODpcdFx0XHRyZXR1cm4gLTE7XG4gNDk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIFJlY2VwdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIGtlcm5lbD8gSSB3YW50IHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoLgoKQmV5b25kIHRoYXQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBXaGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb250cm9sIHRoaXMgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBpcHY2X3NyaF9yY3ZgIGFuZCB0aGUgb3ZlcmFsbCBzdXBwb3J0IGZvciBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpLCBhbmQgbW9yZSBnZW5lcmFsbHksIElQdjYgcm91dGluZyBoZWFkZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCB0ZWxsIG1lIGFib3V0IGl0cyBicm9hZGVyIGVjb3N5c3RlbSwgaS5lLiwgaG93IGl0JiMzOTtzIGVuYWJsZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIG90aGVyIGZlYXR1cmVzLiBBcmUgdGhlcmUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9uIHRoaW5ncyBsaWtlIFNSdjYgb3Igb3RoZXIgZXh0ZW5zaW9ucz8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSBzdXJyb3VuZGluZyB0aGlzIGZ1bmN0aW9uLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjQ1PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjgzLVx0XHRcdGdvdG8gZGlzYWJsZWQ7XG5uZXQvaXB2Ni9leHRoZHJzLmM6Njg0Olx0XHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNjg1LVx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gdGhlIElQdjYgQ29tcGlsYXRpb24gYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZXh0aGRycy5jYCBmaWxlIGdldHMgY29tcGlsZWQgYW5kIGhvdyB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgYGlwdjZfc3JoX3JjdmAsIGlzIGNvbmZpZ3VyZWQuIFRoaXMgdGVsbHMgbWUgYSBsb3QgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvcmUgbWFrZWZpbGVzIGFuZCBLY29uZmlnIGZpbGVzLiBGaXJzdCB1cCwgSSYjMzk7bGwgY2hlY2sgYG5ldC9pcHY2L01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgb3ZlcmFsbCBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciBJUHY2LiBUaGVuLCBJJiMzOTtsbCBkaXZlIGludG8gYG5ldC9pcHY2L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGl2ZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgU1J2NiBmZWF0dXJlcyBhbmQgaG93IHRoZXkgYXJlIGVuYWJsZWQvZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gYGlwdjZfc3JoX3JjdmAgYW5kIHdoYXQgdHJpZ2dlcnMgdGhlaXIgaW5jbHVzaW9uIChvciBleGNsdXNpb24pIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUgd2hlbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgdGhlIGJ1aWxkIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHRoZHJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9OD1pcHY2LXkgOj1cdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXG4tLVxubmV0L2lwdjYvTWFrZWZpbGUtMTEtXHRcdHJhdy5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIHBpbmcubyBcXFxubmV0L2lwdjYvTWFrZWZpbGU6MTI6XHRcdGV4dGhkcnMubyBkYXRhZ3JhbS5vIGlwNl9mbG93bGFiZWwubyBpbmV0Nl9jb25uZWN0aW9uX3NvY2subyBcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTMtXHRcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXG4tLVxubmV0L2lwdjYvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX0lQVjZfRk9VKSAmIzQzOz0gZm91Ni5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00NS1cbm5ldC9pcHY2L01ha2VmaWxlOjQ2Om9iai15ICYjNDM7PSBhZGRyY29uZl9jb3JlLm8gZXh0aGRyc19jb3JlLm8gaXA2X2NoZWNrc3VtLm8gaXA2X2ljbXAub1xubmV0L2lwdjYvTWFrZWZpbGUtNDctb2JqLSQoQ09ORklHX0lORVQpICYjNDM7PSBvdXRwdXRfY29yZS5vIHByb3RvY29sLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlOjQ4Olx0XHRcdGlwNl9vZmZsb2FkLm8gZXh0aGRyc19vZmZsb2FkLm9cbm5ldC9pcHY2L01ha2VmaWxlLTQ5LVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmM9OTk5PXN0YXRpYyBpbnQgX19pbml0IGluZXQ2X2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTEwOTYtXHQvKiBJbml0IHY2IGV4dGVuc2lvbiBoZWFkZXJzLiAqL1xubmV0L2lwdjYvYWZfaW5ldDYuYzoxMDk3Olx0ZXJyID0gaXB2Nl9leHRoZHJzX2luaXQoKTtcbm5ldC9pcHY2L2FmX2luZXQ2LmMtMTA5OC1cdGlmIChlcnIpXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjEwOTk6XHRcdGdvdG8gaXB2Nl9leHRoZHJzX2ZhaWw7XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTExMDAtXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy0xMTc5LWlwdjZfZnJhZ19mYWlsOlxubmV0L2lwdjYvYWZfaW5ldDYuYzoxMTgwOlx0aXB2Nl9leHRoZHJzX2V4aXQoKTtcbm5ldC9pcHY2L2FmX2luZXQ2LmM6MTE4MTppcHY2X2V4dGhkcnNfZmFpbDpcbm5ldC9pcHY2L2FmX2luZXQ2LmMtMTE4Mi1cdGFkZHJjb25mX2NsZWFudXAoKTtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTQtICpcdFx0XHRcdCAgdGx2IG9wdGlvbnMuXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTU6ICpcdE1pdHN1cnUgS0FOREEgQFVTQUdJIGFuZDogUmVtb3ZlIGlwdjZfcGFyc2VfZXh0aGRycygpLlxubmV0L2lwdjYvZXh0aGRycy5jLTE2LSAqXHRZT1NISUZVSkkgSGlkZWFraSBAVVNBR0kgIFJlZ2lzdGVyIGluYm91bmQgZXh0ZW5zaW9uIGhlYWRlclxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz04NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBub2RhdGFfcHJvdG9jb2wgPSB7XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTg1NC1cbm5ldC9pcHY2L2V4dGhkcnMuYzo4NTU6aW50IF9faW5pdCBpcHY2X2V4dGhkcnNfaW5pdCh2b2lkKVxubmV0L2lwdjYvZXh0aGRycy5jLTg1Ni17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTg3OS1cbm5ldC9pcHY2L2V4dGhkcnMuYzo4ODA6dm9pZCBpcHY2X2V4dGhkcnNfZXhpdCh2b2lkKVxubmV0L2lwdjYvZXh0aGRycy5jLTg4MS17XG4tLVxubmV0L2lwdjYvZXh0aGRyc19jb3JlLmM9MjU9RVhQT1JUX1NZTUJPTChpcHY2X2V4dF9oZHIpO1xuLS1cbm5ldC9pcHY2L2V4dGhkcnNfY29yZS5jLTUwLSAqXG5uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYzo1MTogKiBJdCBza2lwcyBhbGwgd2VsbC1rbm93biBleHRoZHJzLCBhbmQgcmV0dXJucyBwb2ludGVyIHRvIHRoZSBzdGFydFxubmV0L2lwdjYvZXh0aGRyc19jb3JlLmMtNTItICogb2YgdW5wYXJzYWJsZSBhcmVhIGkuZS4gdGhlIGZpcnN0IGhlYWRlciB3aXRoIHVua25vd24gdHlwZS5cbi0tXG5uZXQvaXB2Ni9leHRoZHJzX29mZmxvYWQuYz0xOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkIGhiaF9vZmZsb2FkID0ge1xuLS1cbm5ldC9pcHY2L2V4dGhkcnNfb2ZmbG9hZC5jLTIyLVxubmV0L2lwdjYvZXh0aGRyc19vZmZsb2FkLmM6MjM6aW50IF9faW5pdCBpcHY2X2V4dGhkcnNfb2ZmbG9hZF9pbml0KHZvaWQpXG5uZXQvaXB2Ni9leHRoZHJzX29mZmxvYWQuYy0yNC17XG4tLVxubmV0L2lwdjYvaWNtcC5jPTEwMzc9ZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy0xMDc3LVxubmV0L2lwdjYvaWNtcC5jOjEwNzg6XHQvKiBCVUdHR19GVVRVUkU6IHdlIHNob3VsZCB0cnkgdG8gcGFyc2UgZXh0aGRycyBpbiB0aGlzIHBhY2tldC5cbm5ldC9pcHY2L2ljbXAuYy0xMDc5LVx0ICAgV2l0aG91dCB0aGlzIHdlIHdpbGwgbm90IGFibGUgZi5lLiB0byBtYWtlIHNvdXJjZSByb3V0ZWRcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy0xNC0gKlx0TWl0c3VydSBLQU5EQSBAVVNBR0kgYW5kXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzoxNTogKlx0WU9TSElGVUpJIEhpZGVha2kgQFVTQUdJOiBSZW1vdmUgaXB2Nl9wYXJzZV9leHRoZHJzKCkuXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy0xNi0gKi9cbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTIzLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyNDpzdGF0aWMgaW50IGlwdjZfZ3JvX3B1bGxfZXh0aGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgcHJvdG8pXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTI1LXtcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTU3LVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzo1ODpzdGF0aWMgaW50IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTU5LXtcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTkxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB2Nl9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMTE5LVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoxMjA6XHRwcm90byA9IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhza2IsIGlwdjZoLVx1MDAzZW5leHRoZHIpO1xubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xMjEtXG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xNzgtLyogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgYWxsIHRoZSBleHRlbnNpb24gaGRycywgZm9sbG93aW5nIHRoZSBzYW1lXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjE3OTogKiBsb2dpYyBpbiBpcHY2X2dzb19wdWxsX2V4dGhkcnMoKSB3aGVuIHBhcnNpbmcgZXh0LWhkcnMuXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTE4MC0gKi9cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6MTgxOnN0YXRpYyBpbnQgaXB2Nl9leHRoZHJzX2xlbihzdHJ1Y3QgaXB2NmhkciAqaXBoLFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xODItXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqKm9wcHMpXG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYz0yMDM9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgc3RydWN0IHNrX2J1ZmYgKmlwdjZfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTIyOC1cdGlmICghb3BzIHx8ICFvcHMtXHUwMDNlY2FsbGJhY2tzLmdyb19yZWNlaXZlKSB7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjIyOTpcdFx0cHJvdG8gPSBpcHY2X2dyb19wdWxsX2V4dGhkcnMoc2tiLCBobGVuLCBwcm90byk7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTIzMC1cbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTI1OS1cdFx0ICogYWxyZWFkeSBzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byBjb21wYXJlIG5sZW5cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6MjYwOlx0XHQgKiAobmxlbiAhPSAoc2l6ZW9mKCppcGgyKSAmIzQzOyBpcHY2X2V4dGhkcnNfbGVuKGlwaDIsIFx1MDAyNm9wcykpKVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yNjEtXHRcdCAqIG1lbWNtcCgpIGFsb25lIGJlbG93IGlzIHN1ZmZpY2llbnQsIHJpZ2h0P1xuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9MzMyPUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCBpcHY2X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpXG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0zNDUtXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjM0NjpcdG5ob2ZmICYjNDM7PSBzaXplb2YoKmlwaCkgJiM0MzsgaXB2Nl9leHRoZHJzX2xlbihpcGgsIFx1MDAyNm9wcyk7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTM0Ny1cbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTQzNz1zdGF0aWMgaW50IF9faW5pdCBpcHY2X29mZmxvYWRfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtNDQxLVx0XHRwcl9jcml0KFwmIzM0OyVzOiBDYW5ub3QgYWRkIFRDUCBwcm90b2NvbCBvZmZsb2FkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjQ0MjpcdGlmIChpcHY2X2V4dGhkcnNfb2ZmbG9hZF9pbml0KCkgXHUwMDNjIDApXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTQ0My1cdFx0cHJfY3JpdChcJiMzNDslczogQ2Fubm90IGFkZCBFWFRIRFJTIHByb3RvY29sIG9mZmxvYWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oLTktXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oOjEwOmludCBpcHY2X2V4dGhkcnNfb2ZmbG9hZF9pbml0KHZvaWQpO1xubmV0L2lwdjYvaXA2X29mZmxvYWQuaC0xMS1pbnQgdWRwdjZfb2ZmbG9hZF9pbml0KHZvaWQpO1xuLS1cbm5ldC9pcHY2L21jYXN0X3Nub29wLmM9MTQ9c3RhdGljIGludCBpcHY2X21jX2NoZWNrX2lwNmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L21jYXN0X3Nub29wLmMtMzYtXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jOjM3OnN0YXRpYyBpbnQgaXB2Nl9tY19jaGVja19leHRoZHJzKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jLTM4LXtcbi0tXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jPTE3Mj1pbnQgaXB2Nl9tY19jaGVja19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jLTE3OS1cbm5ldC9pcHY2L21jYXN0X3Nub29wLmM6MTgwOlx0cmV0ID0gaXB2Nl9tY19jaGVja19leHRoZHJzKHNrYik7XG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jLTE4MS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI2MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBJUHY2IFJvdXRpbmcgSGVhZGVycyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IElQdjYgcm91dGluZyBoZWFkZXJzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHJldmlzaXQgYGlwdjZfcnRoZHJfcmN2YCB3aXRoaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBrZXJuZWwgcHJvY2Vzc2VzIGluY29taW5nIHBhY2tldHMgdGhhdCB1dGlsaXplIHJvdXRpbmcgaGVhZGVycywgc28gaXQmIzM5O3MgdGhlIHBlcmZlY3QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHZhcmlvdXMgdHlwZXMgb2Ygcm91dGluZyBoZWFkZXJzIGFuZCB0aGVpciBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgbmVjZXNzYXJ5IHNhbml0eSBjaGVja3MgYW5kIHByb2Nlc3NpbmcgdG8gcHJldmVudCByb3V0aW5nIGxvb3BzIGFuZCBhdHRhY2tzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NDU6XHRzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gNjQ2Olx0e1xuIDY0NzpcdFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG4gNjQ4Olx0XHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gNjQ5Olx0XHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHIgPSBOVUxMO1xuIDY1MDpcdFx0aW50IG4sIGk7XG4gNjUxOlx0XHRzdHJ1Y3QgaXB2Nl9ydF9oZHIgKmhkcjtcbiA2NTI6XHRcdHN0cnVjdCBydDBfaGRyICpydGhkcjtcbiA2NTM6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNjU0Olx0XHRpbnQgYWNjZXB0X3NvdXJjZV9yb3V0ZTtcbiA2NTU6XHRcbiA2NTY6XHRcdGFjY2VwdF9zb3VyY2Vfcm91dGUgPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlYWNjZXB0X3NvdXJjZV9yb3V0ZSk7XG4gNjU3Olx0XG4gNjU4Olx0XHRpZiAoaWRldilcbiA2NTk6XHRcdFx0YWNjZXB0X3NvdXJjZV9yb3V0ZSA9IG1pbihhY2NlcHRfc291cmNlX3JvdXRlLFxuIDY2MDpcdFx0XHRcdFx0XHQgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5hY2NlcHRfc291cmNlX3JvdXRlKSk7XG4gNjYxOlx0XG4gNjYyOlx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IDgpIHx8XG4gNjYzOlx0XHQgICAgIXBza2JfbWF5X3B1bGwoc2tiLCAoc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzO1xuIDY2NDpcdFx0XHRcdFx0ICgoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKVsxXSAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMykpKSkge1xuIDY2NTpcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gNjY2Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDY2NzpcdFx0XHRyZXR1cm4gLTE7XG4gNjY4Olx0XHR9XG4gNjY5Olx0XG4gNjcwOlx0XHRoZHIgPSAoc3RydWN0IGlwdjZfcnRfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiA2NzE6XHRcbiA2NzI6XHRcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIpIHx8XG4gNjczOlx0XHQgICAgc2tiLVx1MDAzZXBrdF90eXBlICE9IFBBQ0tFVF9IT1NUKSB7XG4gNjc0Olx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOQUREUkVSUk9SUyk7XG4gNjc1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDY3NjpcdFx0XHRyZXR1cm4gLTE7XG4gNjc3Olx0XHR9XG4gNjc4Olx0XG4gNjc5Olx0XHRzd2l0Y2ggKGhkci1cdTAwM2V0eXBlKSB7XG4gNjgwOlx0XHRjYXNlIElQVjZfU1JDUlRfVFlQRV80OlxuIDY4MTpcdFx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbiA2ODI6XHRcdFx0aWYgKCFpZGV2KVxuIDY4MzpcdFx0XHRcdGdvdG8gZGlzYWJsZWQ7XG4gNjg0Olx0XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiLCBpZGV2KTtcbiA2ODU6XHRcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzM6XG4gNjg2Olx0XHRcdC8qIHJwbCBzZWdtZW50IHJvdXRpbmcgKi9cbiA2ODc6XHRcdFx0aWYgKCFpZGV2KVxuIDY4ODpcdFx0XHRcdGdvdG8gZGlzYWJsZWQ7XG4gNjg5Olx0XHRcdHJldHVybiBpcHY2X3JwbF9zcmhfcmN2KHNrYiwgaWRldik7XG4gNjkwOlx0XHRkZWZhdWx0OlxuIDY5MTpcdFx0XHRicmVhaztcbiA2OTI6XHRcdH1cbiA2OTM6XHRcbiA2OTQ6XHRsb29wZWRfYmFjazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMzNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBJUHY2IFJvdXRpbmcgSGVhZGVyIFJlY2VwdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIElQdjYgcm91dGluZyBleHRlbnNpb24gaGVhZGVycy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGBpcHY2X3J0aGRyX3JjdmAsIHNpbmNlIHRoYXQmIzM5O3MgdGhlIGNvcmUgaGFuZGxlciBmb3IgYWxsIHJvdXRpbmcgaGVhZGVycywgYW5kIEkga25vdyB0aGF0IHRoZSBgSVBWNl9TUkNSVF9UWVBFXzRgIGNvZGUgcGF0aCBpcyB0aWVkIHRvIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpLiBNYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZSwgYXQgdGhlIHRvcCBsZXZlbCwgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIGRpdmluZyBkZWVwLiBOb3csIGxldCYjMzk7cyB0cmFjZSBgaXB2Nl9zcmhfcmN2YCBhbmQgc2VlIHdoYXQgaXQgaXMgcmVhbGx5IGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcwOlx0XG4gMzcxOlx0c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiAzNzI6XHR7XG4gMzczOlx0XHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gMzc0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuIDM3NTpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpoZHI7XG4gMzc2Olx0XHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XG4gMzc3Olx0XHRpbnQgYWNjZXB0X3NlZzY7XG4gMzc4Olx0XG4gMzc5Olx0XHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAzODA6XHRcbiAzODE6XHRcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VzZWc2X2VuYWJsZWQpLFxuIDM4MjpcdFx0XHRcdCAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xuIDM4MzpcdFxuIDM4NDpcdFx0aWYgKCFhY2NlcHRfc2VnNikge1xuIDM4NTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzODY6XHRcdFx0cmV0dXJuIC0xO1xuIDM4NzpcdFx0fVxuIDM4ODpcdFxuIDM4OTpcdCNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbiAzOTA6XHRcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XG4gMzkxOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM5MjpcdFx0XHRyZXR1cm4gLTE7XG4gMzkzOlx0XHR9XG4gMzk0Olx0I2VuZGlmXG4gMzk1Olx0XG4gMzk2Olx0bG9vcGVkX2JhY2s6XG4gMzk3Olx0XHRpZiAoaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xuIDM5ODpcdFx0XHRpZiAoaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY2IHx8IGhkci1cdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNCkge1xuIDM5OTpcdFx0XHRcdGludCBvZmZzZXQgPSAoaGRyLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiA0MDA6XHRcbiA0MDE6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcbiA0MDI6XHRcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcbiA0MDM6XHRcdFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gNDA0Olx0XHRcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcbiA0MDU6XHRcdFx0XHRcdFx0ICAgb2Zmc2V0KTtcbiA0MDY6XHRcbiA0MDc6XHRcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiA0MDg6XHRcdFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIDQwOTpcdFx0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbiA0MTA6XHRcdFx0XHRpZiAoaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KVxuIDQxMTpcdFx0XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuIDQxMjpcdFx0XHRcdF9fc2tiX3R1bm5lbF9yeChza2IsIHNrYi1cdTAwM2VkZXYsIG5ldCk7XG4gNDEzOlx0XG4gNDE0Olx0XHRcdFx0bmV0aWZfcngoc2tiKTtcbiA0MTU6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDE2Olx0XHRcdH1cbiA0MTc6XHRcbiA0MTg6XHRcdFx0b3B0LVx1MDAzZXNyY3J0ID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xuIDQxOTpcdFx0XHRvcHQtXHUwMDNlbGFzdG9wdCA9IG9wdC1cdTAwM2VzcmNydDtcbiA0MjA6XHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IChoZHItXHUwMDNlaGRybGVuICYjNDM7IDEpIFx1MDAzY1x1MDAzYyAzO1xuIDQyMTpcdFx0XHRvcHQtXHUwMDNlbmhvZmYgPSAoXHUwMDI2aGRyLVx1MDAzZW5leHRoZHIpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNDIyOlx0XG4gNDIzOlx0XHRcdHJldHVybiAxO1xuIDQyNDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDg3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUHY2IFNSSCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCB0byBgaXB2Nl9zcmhfcmN2YCBpbiB0aGUgSVB2NiBzdGFjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBgc2tiX3B1c2hgIGFuZCBgc2tiX3B1bGxgIGNhbGxzIGhlcmUuICBQcmV2aW91c2x5LCB0aGUgY29kZSBuYWl2ZWx5IGFzc3VtZWQgdGhlIElQdjYgaGVhZGVyIHdhcyBkaXJlY3RseSBhZGphY2VudCB0byB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciwgdXNpbmcgYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgIGZvciBwdXNoaW5nIGFuZCBwdWxsaW5nLiAgVGhhdCYjMzk7cyBhIGRlZmluaXRlIG92ZXJzaWdodCwgYW5kIGEgc3VidGxlIG9uZSBhdCB0aGF0LgoKVGhlIGtleSBpcyBpbiB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlcmUgY2FuIGJlICpvdGhlciogZXh0ZW5zaW9uIGhlYWRlcnMg4oCTIEhvcC1ieS1Ib3Agb3B0aW9ucywgRGVzdGluYXRpb24gT3B0aW9ucywgb3IgZXZlbiBlbmNhcHN1bGF0ZWQgcGFja2V0cyDigJMgc2l0dGluZyBiZXR3ZWVuIHRoZSBtYWluIElQdjYgaGVhZGVyIGFuZCB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlci4gVGhpcyBtZWFucyB0aGUgb2Zmc2V0IHRvIHRoZSBhY3R1YWwgSVB2NiBoZWFkZXIgKGBza2JfbmV0d29ya19vZmZzZXQoc2tiKWApIGlzbiYjMzk7dCBhbHdheXMgYSBmaXhlZCBzaXplLiBUaGUgb2xkIGNvZGUgd2FzIHZ1bG5lcmFibGUuCgpOb3cgSSBzZWUgaXQuIFRoZSB1cGRhdGVkIGNvZGUgY29ycmVjdGx5IHVzZXMgYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCB0byBkZXRlcm1pbmUgaG93IGZhciBpdCBuZWVkcyB0byAqcHVzaCogdG8gZ2V0IGJhY2sgdG8gdGhlIElQdjYgaGVhZGVyLCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgIHRvIHB1bGwgaXQgYmFjayB0byB0cmFuc3BvcnQgbGF5ZXIhIFdoZW4gd2UmIzM5O3JlIGxvb3BpbmcgYmFjayB0byBwcm9jZXNzIHRoZSBuZXh0IHNlZ21lbnQsIHRoZSBwYXRjaCBub3cgdXNlcyB0aGlzIHRvIGFjY291bnQgZm9yIHRoZSBwb3RlbnRpYWwgaW50ZXJ2ZW5pbmcgZXh0ZW5zaW9uIGhlYWRlcnMuIFRoaXMgaXMgc2lnbmlmaWNhbnRseSBtb3JlIHJvYnVzdC4KCkkmIzM5O20gY29uZmlkZW50IHRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpbiBoYW5kbGluZyB0aGUgb2Zmc2V0cywgZXNwZWNpYWxseSB3aXRoIHBvdGVudGlhbGx5IG5lc3RlZCBoZWFkZXJzLCBpcyBwcmVjaXNlbHkgd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4KCkFuZCB5ZXMsIHRoaXMgcGF0Y2ggaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGJlZW4gdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgd2l0aCByYXcgc29ja2V0cywgdHVuL3RhcCwgYW5kIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcyBjb25maXJtcyB0aGF0IHRoaXMgaXMgYSB2YWxpZCBhbmQgdGVzdGVkIGZpeC4KCkFic29sdXRlbHkuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIGNhbiBzZWUgc2V2ZXJhbCBwb3RlbnRpYWwgYXJlYXMgb2YgYXR0YWNrIHdpdGggdGhlIGNvbXBsZXggaGVhZGVyIG1hbmlwdWxhdGlvbnMuClRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGFuZCBGb2N1c1N5bWJvbHMuCkkmIzM5O2xsIGxvb2sgZm9yIGBJUFY2X1NFRzZgIGFuZCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGluIGBuZXQvaXB2Ni9LY29uZmlnYCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBlbmFibGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxubmV0L2lwdjYvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zOC1cbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbm5ldC9pcHY2L0tjb25maWctNDAtXHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBLY29uZmlnIE9wdGlvbnMgZm9yIGV4dGhkcnMuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBleHRoZHJzLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYCwgYW5kIHN1cmUgZW5vdWdoLCB0aGVyZSBpdCBpczogYGV4dGhkcnMub2AgaXMgZGlyZWN0bHkgbGlua2VkIGludG8gdGhlIGBpcHY2LXlgIGxpc3QuIFRoYXQgbWVhbnMgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGFsb25nIHdpdGggZXZlcnl0aGluZyBlbHNlIHVuZGVyIGBDT05GSUdfSVBWNmAuIE9rYXksIHNvIGBDT05GSUdfSVBWNmAgaXMgdGhlIHByaW1hcnkgZmFjdG9yLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgc2FtZSBNYWtlZmlsZSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBpbmNsdXNpb25zIHRpZWQgdG8gYHNlZzZgIG9yIHBvdGVudGlhbGx5IGFub3RoZXIgYElQVjZgIGNvbmZpZyB0aGF0IG1pZ2h0IGFsc28gYWZmZWN0IGl0LiBOZWVkIHRvIGNvdmVyIGFsbCB0aGUgYmFzZXMsIG5vIHN0b25lIHVudHVybmVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVENQL0lQIChJTkVUNikgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19JUFY2KSAmIzQzOz0gaXB2Ni5vXG4gICA3Olx0XG4gICA4Olx0aXB2Ni15IDo9XHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxuICAgOTpcdFx0XHRhZGRybGFiZWwubyBcXFxuICAxMDpcdFx0XHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxuICAxMTpcdFx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbiAgMTI6XHRcdFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXG4gIDEzOlx0XHRcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXG4gIDE0Olx0XG4gIDE1Olx0aXB2Ni0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjYub1xuICAxNjpcdGlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICYjNDM7PSBpcDZtci5vXG4gIDE3Olx0XG4gIDE4Olx0aXB2Ni0kKENPTkZJR19YRlJNKSAmIzQzOz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXG4gIDE5Olx0XHR4ZnJtNl9vdXRwdXQubyB4ZnJtNl9wcm90b2NvbC5vXG4gIDIwOlx0aXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIub1xuICAyMTpcdGlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWI2X3J1bGVzLm9cbiAgMjI6XHRpcHY2LSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbiAgMjM6XHRpcHY2LSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG4gIDI0Olx0aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgJiM0Mzs9IGNhbGlwc28ub1xuICAyNTpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSAmIzQzOz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xuICAyNjpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuICAyNzpcdGlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xuICAyODpcdGlwdjYtJChDT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTCkgJiM0Mzs9IGlvYW02X2lwdHVubmVsLm9cbiAgMjk6XHRcbiAgMzA6XHRvYmotJChDT05GSUdfSU5FVDZfQUgpICYjNDM7PSBhaDYub1xuICAzMTpcdG9iai0kKENPTkZJR19JTkVUNl9FU1ApICYjNDM7PSBlc3A2Lm9cbiAgMzI6XHRvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A2X29mZmxvYWQub1xuICAzMzpcdG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICYjNDM7PSBpcGNvbXA2Lm9cbiAgMzQ6XHRvYmotJChDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwpICYjNDM7PSB4ZnJtNl90dW5uZWwub1xuICAzNTpcdG9iai0kKENPTkZJR19JTkVUNl9UVU5ORUwpICYjNDM7PSB0dW5uZWw2Lm9cbiAgMzY6XHRvYmotJChDT05GSUdfSVBWNl9NSVA2KSAmIzQzOz0gbWlwNi5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0lQVjZfSUxBKSAmIzQzOz0gaWxhL1xuICAzODpcdG9iai0kKENPTkZJR19ORVRGSUxURVIpXHQmIzQzOz0gbmV0ZmlsdGVyL1xuICAzOTpcdFxuICA0MDpcdG9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xuICA0MTpcdG9iai0kKENPTkZJR19JUFY2X1NJVCkgJiM0Mzs9IHNpdC5vXG4gIDQyOlx0b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG4gIDQzOlx0b2JqLSQoQ09ORklHX0lQVjZfR1JFKSAmIzQzOz0gaXA2X2dyZS5vXG4gIDQ0Olx0b2JqLSQoQ09ORklHX0lQVjZfRk9VKSAmIzQzOz0gZm91Ni5vXG4gIDQ1Olx0XG4gIDQ2Olx0b2JqLXkgJiM0Mzs9IGFkZHJjb25mX2NvcmUubyBleHRoZHJzX2NvcmUubyBpcDZfY2hlY2tzdW0ubyBpcDZfaWNtcC5vXG4gIDQ3Olx0b2JqLSQoQ09ORklHX0lORVQpICYjNDM7PSBvdXRwdXRfY29yZS5vIHByb3RvY29sLm8gXFxcbiAgNDg6XHRcdFx0XHRpcDZfb2ZmbG9hZC5vIGV4dGhkcnNfb2ZmbG9hZC5vXG4gIDQ5Olx0XG4gIDUwOlx0b2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSAmIzQzOz0gaW5ldDZfaGFzaHRhYmxlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IElQdjYgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGVzZSBJUHY2IGNvbmZpZ3VyYXRpb25zLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBDT05GSUdfSVBWNmAsIG5hdHVyYWxseS4gSSBzZWUgdGhhdCB0aGVyZSYjMzk7cyBhbHNvIHRoZSBgaXB2Nl9zcmhfcmN2YCBmdW5jdGlvbiwgYW5kIHdpdGhpbiB0aGF0LCB0aGlzIGNoZWNrOgoKYGBgYwojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDCglpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkgewoJCWtmcmVlX3NrYihza2IpOwoJCXJldHVybiAtMTsKCX0KI2VuZGlmCmBgYAoKUmlnaHQsIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgaXQgdXNlcyBgQ09ORklHX0lQVjZfU0VHNl9ITUFDYCwgd2hpY2ggSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBhbmQgYnkgZXh0ZW5zaW9uLCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAuIFNvLCBib3RoIG9mIHRob3NlIGNsZWFybHkgdGllIGludG8gSVB2NiBzZWdtZW50IHJvdXRpbmcuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSB0aGUgbmF0dXJlIG9mIGBDT05GSUdfSVBWNmAuIElzIGl0IGJvb2xlYW4gb3IgdHJpc3RhdGU/IEkgbmVlZCB0byBjaGVjayBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gYmUgY2VydGFpbi4KCkxpbmUgNiwgaGVyZSB3ZSBnbzogYG1lbnVjb25maWcgSVBWNiBib29sICYjMzQ7VGhlIElQdjYgcHJvdG9jb2wmIzM0O2AuIEFoLCBhIGBib29sYCBvcHRpb24uIEl0IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBJTkVUYCwgYXMgZXhwZWN0ZWQuIFNvLCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBlbmFibGUvZGlzYWJsZSBjb25maWd1cmF0aW9uLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAgYW5kIGBDT05GSUdfSVBWNl9TRUc2X0hNQUNgIGFyZSBjb25maWd1cmVkLCBhbmQgaG93IHRoZXkgcmVsYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NTpcdFxuIDI4NjpcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbiAyODc6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiAyODg6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDI4OTpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMjkwOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMjkxOlx0XHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbiAyOTI6XHRcdGhlbHBcbiAyOTM6XHRcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XG4gMjk0Olx0XHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDI5NTpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcbiAyOTY6XHRcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXG4gMjk3Olx0XG4gMjk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjk5Olx0XG4gMzAwOlx0Y29uZmlnIElQVjZfU0VHNl9ITUFDXG4gMzAxOlx0XHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbiAzMDI6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDMwMzpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuIDMwNDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gMzA1Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDMwNjpcdFx0aGVscFxuIDMwNzpcdFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cbiAzMDg6XHRcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxuIDMwOTpcdFxuIDMxMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDMxMTpcdFxuIDMxMjpcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXG4gMzEzOlx0XHRkZWZfYm9vbCB5XG4gMzE0Olx0XHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxuIDMxNTpcdFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxuIDMxNjpcdFxuIDMxNzpcdGNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxuIDMxODpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbiAzMTk6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDMyMDpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMzIxOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMzIyOlx0XHRoZWxwXG4gMzIzOlx0XHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcbiAzMjQ6XHRcdCAgdHVubmVscyBtZWNoYW5pc20uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Njg1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXJzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBkaXZlIGludG8gdGhhdCBgaXB2Nl9ydGhkcl9yY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IGl0IGRvZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGVyZSBpdCYjMzk7cyByZWdpc3RlcmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGwgY2hhaW4uIEkmIzM5O20gaW1hZ2luaW5nIGl0JiMzOTtzIHNvbWUgc29ydCBvZiBlbnRyeSBwb2ludCBvciBoYW5kbGVyIGZvciBpbmNvbWluZyBJUHY2IHJvdXRpbmcgaGVhZGVyIHBhY2tldHMsIHJpZ2h0PyBLbm93aW5nIHRoZSByZWdpc3RyYXRpb24gcG9pbnQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGluIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cuIEVzc2VudGlhbGx5LCB3aG8gY2FsbHMgdGhpcyBmdW5jdGlvbiwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gR290dGEgZ2V0IHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIHJlZ2lzdHJhdGlvbiBwb2ludCBxdWlja2x5LiBJIGtub3cgSSYjMzk7dmUgd29ya2VkIHdpdGggdGhpcyBhcmVhIGJlZm9yZSwgYnV0IG15IGJyYWluIG5lZWRzIGEgcXVpY2sgcmVmcmVzaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzNTpcdGRpc2FibGVkOlxuIDgzNjpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRUQpO1xuIDgzNzpcdFx0cmV0dXJuIC0xO1xuIDgzODpcdH1cbiA4Mzk6XHRcbiA4NDA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIHJ0aGRyX3Byb3RvY29sID0ge1xuIDg0MTpcdFx0LmhhbmRsZXJcdD1cdGlwdjZfcnRoZHJfcmN2LFxuIDg0MjpcdFx0LmZsYWdzXHRcdD1cdElORVQ2X1BST1RPX05PUE9MSUNZLFxuIDg0MzpcdH07XG4gODQ0Olx0XG4gODQ1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBkZXN0b3B0X3Byb3RvY29sID0ge1xuIDg0NjpcdFx0LmhhbmRsZXJcdD1cdGlwdjZfZGVzdG9wdF9yY3YsXG4gODQ3Olx0XHQuZmxhZ3NcdFx0PVx0SU5FVDZfUFJPVE9fTk9QT0xJQ1ksXG4gODQ4Olx0fTtcbiA4NDk6XHRcbiA4NTA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIG5vZGF0YV9wcm90b2NvbCA9IHtcbiA4NTE6XHRcdC5oYW5kbGVyXHQ9XHRkc3RfZGlzY2FyZCxcbiA4NTI6XHRcdC5mbGFnc1x0XHQ9XHRJTkVUNl9QUk9UT19OT1BPTElDWSxcbiA4NTM6XHR9O1xuIDg1NDpcdFxuIDg1NTpcdGludCBfX2luaXQgaXB2Nl9leHRoZHJzX2luaXQodm9pZClcbiA4NTY6XHR7XG4gODU3Olx0XHRpbnQgcmV0O1xuIDg1ODpcdFxuIDg1OTpcdFx0cmV0ID0gaW5ldDZfYWRkX3Byb3RvY29sKFx1MDAyNnJ0aGRyX3Byb3RvY29sLCBJUFBST1RPX1JPVVRJTkcpO1xuIDg2MDpcdFx0aWYgKHJldClcbiA4NjE6XHRcdFx0Z290byBvdXQ7XG4gODYyOlx0XG4gODYzOlx0XHRyZXQgPSBpbmV0Nl9hZGRfcHJvdG9jb2woXHUwMDI2ZGVzdG9wdF9wcm90b2NvbCwgSVBQUk9UT19EU1RPUFRTKTtcbiA4NjQ6XHRcdGlmIChyZXQpXG4gODY1Olx0XHRcdGdvdG8gb3V0X3J0aGRyO1xuIDg2NjpcdFxuIDg2NzpcdFx0cmV0ID0gaW5ldDZfYWRkX3Byb3RvY29sKFx1MDAyNm5vZGF0YV9wcm90b2NvbCwgSVBQUk9UT19OT05FKTtcbiA4Njg6XHRcdGlmIChyZXQpXG4gODY5Olx0XHRcdGdvdG8gb3V0X2Rlc3RvcHQ7XG4gODcwOlx0XG4gODcxOlx0b3V0OlxuIDg3MjpcdFx0cmV0dXJuIHJldDtcbiA4NzM6XHRvdXRfZGVzdG9wdDpcbiA4NzQ6XHRcdGluZXQ2X2RlbF9wcm90b2NvbChcdTAwMjZkZXN0b3B0X3Byb3RvY29sLCBJUFBST1RPX0RTVE9QVFMpO1xuIDg3NTpcdG91dF9ydGhkcjpcbiA4NzY6XHRcdGluZXQ2X2RlbF9wcm90b2NvbChcdTAwMjZydGhkcl9wcm90b2NvbCwgSVBQUk9UT19ST1VUSU5HKTtcbiA4Nzc6XHRcdGdvdG8gb3V0O1xuIDg3ODpcdH07XG4gODc5Olx0XG4gODgwOlx0dm9pZCBpcHY2X2V4dGhkcnNfZXhpdCh2b2lkKVxuIDg4MTpcdHtcbiA4ODI6XHRcdGluZXQ2X2RlbF9wcm90b2NvbChcdTAwMjZub2RhdGFfcHJvdG9jb2wsIElQUFJPVE9fTk9ORSk7XG4gODgzOlx0XHRpbmV0Nl9kZWxfcHJvdG9jb2woXHUwMDI2ZGVzdG9wdF9wcm90b2NvbCwgSVBQUk9UT19EU1RPUFRTKTtcbiA4ODQ6XHRcdGluZXQ2X2RlbF9wcm90b2NvbChcdTAwMjZydGhkcl9wcm90b2NvbCwgSVBQUk9UT19ST1VUSU5HKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgUm91dGluZyBIZWFkZXIgUmVjZXB0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgSVB2NiByb3V0aW5nIGhlYWRlcnMgYXJlIGhhbmRsZWQuIGBpcHY2X3J0aGRyX3JjdmAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBpdCYjMzk7cyB0aGUgcHJvdG9jb2wgaGFuZGxlciBmb3IgYElQUFJPVE9fUk9VVElOR2AuIFdoZW4gYW4gSVB2NiBwYWNrZXQgd2l0aCBhIHJvdXRpbmcgaGVhZGVyIGNvbWVzIGluLCBgaXB2Nl9ydGhkcl9yY3ZgIGdldHMgdGhlIGNhbGwsIGFuZCBzcGVjaWZpY2FsbHkgZm9yIGBJUFY2X1NSQ1JUX1RZUEVfNGAsIGl0IGRlbGVnYXRlcyB0byBgaXB2Nl9zcmhfcmN2YC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGVpdGhlciBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLiBZdXAsIHRoZXkgYXJlOiBgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilgIGFuZCBgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIFRoYXQmIzM5O3MgdXNlZnVsIGluZm9ybWF0aW9uLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIGBpcHY2X3J0aGRyX3JjdmAgaXMgdXNlZC4gUmlnaHQsIGl0JiMzOTtzIHJlZ2lzdGVyZWQgaW4gYHJ0aGRyX3Byb3RvY29sYC4gSXQmIzM5O3MgcG9pbnRlZCB0byBieSB0aGUgYGhhbmRsZXJgIHBvaW50ZXIgd2l0aGluIHRoZSBgaW5ldDZfcHJvdG9jb2xgIHN0cnVjdCwgc28gdGhlIGNvbXBpbGVyIGlzIHVubGlrZWx5IHRvIGlubGluZSBpdC4gSWYgd2UmIzM5O3JlIGxvb2tpbmcgZm9yIHN5bWJvbHMgdG8gYW5hbHl6ZSBpbiBtb3JlIGRlcHRoLCB0aGlzIGlzIGltcG9ydGFudC4KClNvLCB3aGF0IGFib3V0IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhlIGNhbmRpZGF0ZXMgZm9yIGBGb2N1c1N5bWJvbHNgPyBMZXQmIzM5O3MgcXVpY2tseSBzY2FuIGBleHRoZHJzLmNgIGFuZCBlbHNld2hlcmUuIFllcCwgaW4gYGV4dGhkcnMuY2AsIHdlIGhhdmUgYGlwdjZfcnRoZHJfcmN2YCBhbmQgYGlwdjZfc3JoX3JjdmAuIE1ha2VzIHNlbnNlLgoKQWxyaWdodCwgc28gdGhlIGZhY3QgdGhhdCBgaXB2Nl9ydGhkcl9yY3ZgIGlzIHJlZmVyZW5jZWQgaW4gdGhhdCBgc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHsgLmhhbmRsZXIgPSBpcHY2X3J0aGRyX3JjdiwgLi4uIH07YCBkZWNsYXJhdGlvbiBtZWFucyB0aGUgY29tcGlsZXIgKmNhbiYjMzk7dCogaW5saW5lIGl0LCB0aGF0JiMzOTtzIGNydWNpYWwuIAoKTm93LCBgaXB2Nl9zcmhfcmN2YCwgb24gdGhlIG90aGVyIGhhbmQsICptaWdodCogYmUgaW5saW5lZCB3aXRoaW4gYGlwdjZfcnRoZHJfcmN2YCwgb3IgaXQgbWlnaHQgbm90IOKAkyBkZXBlbmRzIG9uIHRoZSBjb21waWxlciYjMzk7cyBvcHRpbWl6YXRpb24uIFNvLCBib3RoIGBpcHY2X3J0aGRyX3JjdmAgYW5kIGBpcHY2X3NyaF9yY3ZgIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gV2Ugc2hvdWxkIGNvbnNpZGVyIGJvdGguCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIHRoZSBlbnRpcmUgYG5ldC9pcHY2L2V4dGhkcnMuY2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gSnVzdCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYy02NC1cbm5ldC9pcHY2L2V4dGhkcnMuYzo2NTpzdGF0aWMgYm9vbCBpcDZfdGx2b3B0X3Vua25vd24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZixcbm5ldC9pcHY2L2V4dGhkcnMuYy02Ni1cdFx0XHQgICAgICAgYm9vbCBkaXNhbGxvd191bmtub3ducylcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTAzLVxubmV0L2lwdjYvZXh0aGRycy5jOjEwNDpzdGF0aWMgYm9vbCBpcHY2X2hvcF9yYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKTtcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMDU6c3RhdGljIGJvb2wgaXB2Nl9ob3BfaW9hbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKTtcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMDY6c3RhdGljIGJvb2wgaXB2Nl9ob3BfanVtYm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZik7XG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA3OnN0YXRpYyBib29sIGlwdjZfaG9wX2NhbGlwc28oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtMTA4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X01JUDYpXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA5OnN0YXRpYyBib29sIGlwdjZfZGVzdF9oYW8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtMTEwLSNlbmRpZlxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTMtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTE0OnN0YXRpYyBib29sIGlwNl9wYXJzZV90bHYoYm9vbCBob3BieWhvcCxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTUtXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0yMzEtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfTUlQNilcbm5ldC9pcHY2L2V4dGhkcnMuYzoyMzI6c3RhdGljIGJvb2wgaXB2Nl9kZXN0X2hhbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxubmV0L2lwdjYvZXh0aGRycy5jLTIzMy17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTI5NS1cbm5ldC9pcHY2L2V4dGhkcnMuYzoyOTY6c3RhdGljIGludCBpcHY2X2Rlc3RvcHRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMjk3LXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzQxLVxubmV0L2lwdjYvZXh0aGRycy5jOjM0MjpzdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzQzLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxubmV0L2lwdjYvZXh0aGRycy5jLTM3Mi17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTQ4MC1cbm5ldC9pcHY2L2V4dGhkcnMuYzo0ODE6c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDgyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ0LS8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqL1xubmV0L2lwdjYvZXh0aGRycy5jOjY0NTpzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ2LXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9ODUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgbm9kYXRhX3Byb3RvY29sID0ge1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy04NTQtXG5uZXQvaXB2Ni9leHRoZHJzLmM6ODU1OmludCBfX2luaXQgaXB2Nl9leHRoZHJzX2luaXQodm9pZClcbm5ldC9pcHY2L2V4dGhkcnMuYy04NTYte1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy04NzktXG5uZXQvaXB2Ni9leHRoZHJzLmM6ODgwOnZvaWQgaXB2Nl9leHRoZHJzX2V4aXQodm9pZClcbm5ldC9pcHY2L2V4dGhkcnMuYy04ODEte1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy04OTItXG5uZXQvaXB2Ni9leHRoZHJzLmM6ODkzOnN0YXRpYyBib29sIGlwdjZfaG9wX3JhKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtODk0LXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtOTA5LVxubmV0L2lwdjYvZXh0aGRycy5jOjkxMDpzdGF0aWMgYm9vbCBpcHY2X2hvcF9pb2FtKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtOTExLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtOTkwLVxubmV0L2lwdjYvZXh0aGRycy5jOjk5MTpzdGF0aWMgYm9vbCBpcHY2X2hvcF9qdW1ibyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxubmV0L2lwdjYvZXh0aGRycy5jLTk5Mi17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTEwMzMtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTAzNDpzdGF0aWMgYm9vbCBpcHY2X2hvcF9jYWxpcHNvKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTAzNS17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTEwNTMtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA1NDppbnQgaXB2Nl9wYXJzZV9ob3BvcHRzKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTA1NS17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTEwOTgtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA5OTpzdGF0aWMgdTggaXB2Nl9wdXNoX3J0aGRyMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwcm90byxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTAwLVx0XHRcdCAgIHN0cnVjdCBpcHY2X3J0X2hkciAqb3B0LFxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTIzLVxubmV0L2lwdjYvZXh0aGRycy5jOjExMjQ6c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTEyNS1cdFx0XHQgICBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKm9wdCxcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE3Mi1cbm5ldC9pcHY2L2V4dGhkcnMuYzoxMTczOnN0YXRpYyB1OCBpcHY2X3B1c2hfcnRoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE3NC1cdFx0XHQgIHN0cnVjdCBpcHY2X3J0X2hkciAqb3B0LFxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTkxLVxubmV0L2lwdjYvZXh0aGRycy5jOjExOTI6c3RhdGljIHU4IGlwdjZfcHVzaF9leHRoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sIHU4IHR5cGUsIHN0cnVjdCBpcHY2X29wdF9oZHIgKm9wdClcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTkzLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTIwMC1cbm5ldC9pcHY2L2V4dGhkcnMuYzoxMjAxOnU4IGlwdjZfcHVzaF9uZnJhZ19vcHRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LFxubmV0L2lwdjYvZXh0aGRycy5jLTEyMDItXHRcdFx0dTggcHJvdG8sXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTEyMTgtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTIxOTp1OCBpcHY2X3B1c2hfZnJhZ19vcHRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LCB1OCBwcm90bylcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjIwLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTIyNC19XG5uZXQvaXB2Ni9leHRoZHJzLmM6MTIyNTpFWFBPUlRfU1lNQk9MKGlwdjZfcHVzaF9mcmFnX29wdHMpO1xubmV0L2lwdjYvZXh0aGRycy5jLTEyMjYtXG5uZXQvaXB2Ni9leHRoZHJzLmM9MTIyNz1zdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKlxubmV0L2lwdjYvZXh0aGRycy5jOjEyMjg6aXB2Nl9kdXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0KVxubmV0L2lwdjYvZXh0aGRycy5jLTEyMjkte1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjQ2LX1cbm5ldC9pcHY2L2V4dGhkcnMuYzoxMjQ3OkVYUE9SVF9TWU1CT0xfR1BMKGlwdjZfZHVwX29wdGlvbnMpO1xubmV0L2lwdjYvZXh0aGRycy5jLTEyNDgtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTI0OTpzdGF0aWMgdm9pZCBpcHY2X3JlbmV3X29wdGlvbihpbnQgcmVuZXd0eXBlLFxubmV0L2lwdjYvZXh0aGRycy5jLTEyNTAtXHRcdFx0ICAgICAgc3RydWN0IGlwdjZfb3B0X2hkciAqKmRlc3QsXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTEyODY9c3RydWN0IGlwdjZfdHhvcHRpb25zICpcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMjg3OmlwdjZfcmVuZXdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LFxubmV0L2lwdjYvZXh0aGRycy5jLTEyODgtXHRcdCAgIGludCBuZXd0eXBlLCBzdHJ1Y3QgaXB2Nl9vcHRfaGRyICpuZXdvcHQpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTEzNDItXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTM0MzpzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKl9faXB2Nl9maXh1cF9vcHRpb25zKHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0X3NwYWNlLFxubmV0L2lwdjYvZXh0aGRycy5jLTEzNDQtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdClcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM2MC19XG5uZXQvaXB2Ni9leHRoZHJzLmM6MTM2MTpFWFBPUlRfU1lNQk9MX0dQTChfX2lwdjZfZml4dXBfb3B0aW9ucyk7XG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM2Mi1cbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM3My0gKi9cbm5ldC9pcHY2L2V4dGhkcnMuYzoxMzc0OnN0cnVjdCBpbjZfYWRkciAqX19mbDZfdXBkYXRlX2RzdChzdHJ1Y3QgZmxvd2k2ICpmbDYsXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM3NS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTE0MDEtfVxubmV0L2lwdjYvZXh0aGRycy5jOjE0MDI6RVhQT1JUX1NZTUJPTF9HUEwoX19mbDZfdXBkYXRlX2RzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Mzk5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgRXhhbWluYXRpb24gb2YgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIEhhbmRsaW5nKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXJzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHJlY2VpdmluZyBlbmQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGtleSBmdW5jdGlvbnM6IGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ydGhkcl9yY3ZgLiBgaXB2Nl9zcmhfcmN2YCwgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIEkgbmVlZCB0byBsb29rIGF0IGJlY2F1c2UgaXQmIzM5O3MgdGhlIGRpcmVjdGx5IG1vZGlmaWVkIG9uZS4gSSYjMzk7bGwgcmVtZW1iZXIgdGhhdCBgaXB2Nl9ydGhkcl9yY3ZgIGlzIGFjdGluZyBhcyB0aGUgb3V0ZXIgaGFuZGxlci4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIE9idmlvdXNseSwgYElQVjZgIGlzIGZ1bmRhbWVudGFsLCBlbmFibGluZyB0aGUgZW50aXJlIElQdjYgc3RhY2ssIGluY2x1ZGluZyBgbmV0L2lwdjYvYC4gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBgSVBWNl9TRUc2X0hNQUNgLCBzaW5jZSB0aGUgYHNlZzZfaG1hY192YWxpZGF0ZV9za2JgIGZ1bmN0aW9uIGlzIHRlc3RlZCB1bmRlciB0aGlzIGNvbmZpZy4gRmluYWxseSwgdGhlcmUmIzM5O3MgYElQVjZfU0VHNl9MV1RVTk5FTGAsIHdoaWNoIGhhbmRsZXMgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbi4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gU1JIIG9yLCBtb3JlIGJyb2FkbHksIGBzZWc2YC4gTGV0JiMzOTtzIHBlcmZvcm0gYSBxdWljayBgZ3JlcGAgc2VhcmNoIHdpdGhpbiB0aGUgYG5ldC9pcHY2L2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZGVwZW5kZW50IGFuZCByZWxhdGVkIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVBWNl9TRUc2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9MjQ9aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgJiM0Mzs9IGNhbGlwc28ub1xubmV0L2lwdjYvTWFrZWZpbGU6MjU6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUwpICYjNDM7PSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNjppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSAmIzQzOz0gc2VnNl9obWFjLm9cbm5ldC9pcHY2L01ha2VmaWxlLTI3LWlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjI5LVx0LnNlZzZfZW5hYmxlZFx0XHQ9IDAsXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIzMDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIzMS1cdC5zZWc2X3JlcXVpcmVfaG1hY1x0PSAwLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjQ2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZl9kZmx0IF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTQtXHQuc2VnNl9lbmFibGVkXHRcdD0gMCxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjk1OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk2LVx0LnNlZzZfcmVxdWlyZV9obWFjXHQ9IDAsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz01NjY0PXN0YXRpYyB2b2lkIGlwdjZfc3RvcmVfZGV2Y29uZihjb25zdCBzdHJ1Y3QgaXB2Nl9kZXZjb25mICpjbmYsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzM4LVx0YXJyYXlbREVWQ09ORl9TRUc2X0VOQUJMRURdID0gUkVBRF9PTkNFKGNuZi1cdTAwM2VzZWc2X2VuYWJsZWQpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzM5OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTc0MC1cdGFycmF5W0RFVkNPTkZfU0VHNl9SRVFVSVJFX0hNQUNdID0gUkVBRF9PTkNFKGNuZi1cdTAwM2VzZWc2X3JlcXVpcmVfaG1hYyk7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02ODQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGFkZHJjb25mX3N5c2N0bFtdID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIyNS1cdH0sXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMjY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvYWRkcmNvbmYuYy03MjI3LVx0e1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy00Ny0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNi5oXHUwMDNlXG5uZXQvaXB2Ni9leHRoZHJzLmM6NDg6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvZXh0aGRycy5jLTQ5LSNpbmNsdWRlIFx1MDAzY25ldC9zZWc2X2htYWMuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzg4LVxubmV0L2lwdjYvZXh0aGRycy5jOjM4OTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzkwLVx0aWYgKCFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpIHtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9MTEyND1zdGF0aWMgdTggaXB2Nl9wdXNoX3J0aGRyNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwcm90byxcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1Mi1cbm5ldC9pcHY2L2V4dGhkcnMuYzoxMTUzOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTU0LVx0aWYgKHNyX2hhc19obWFjKHNyX3BoZHIpKSB7XG4tLVxubmV0L2lwdjYvc2VnNi5jPTE0MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc2VnNl9nZW5sX3BvbGljeVtTRUc2X0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzYuYy0xNTAtXG5uZXQvaXB2Ni9zZWc2LmM6MTUxOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzYuYy0xNTItXG4tLVxubmV0L2lwdjYvc2VnNi5jPTI2Nj1zdGF0aWMgaW50IHNlZzZfZ2VubF9nZXRfdHVuc3JjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2lwdjYvc2VnNi5jLTI5OS1cbm5ldC9pcHY2L3NlZzYuYzozMDA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNi5jLTMwMS1cbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjUtI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9jYWNoZS5oXHUwMDNlXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MjY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTI3LSNpbmNsdWRlIFx1MDAzY25ldC9zZWc2X2htYWMuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0xNDE9c3RhdGljIGludCBfX3NlZzZfZG9fc3JoX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjAxLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjIwMjojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjAzLVx0aWYgKHNyX2hhc19obWFjKGlzcmgpKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTIyNT1zdGF0aWMgaW50IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zMjgtXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MzI5OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zMzAtXHRpZiAodW5saWtlbHkoIXNraXBfc3JoIFx1MDAyNlx1MDAyNiBzcl9oYXNfaG1hYyhpc3JoKSkpIHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM9MzQ1PXN0YXRpYyBpbnQgX19zZWc2X2RvX3NyaF9pbmxpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoLFxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zODAtXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MzgxOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zODItXHRpZiAoc3JfaGFzX2htYWMoaXNyaCkpIHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjctI2luY2x1ZGUgXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI4OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yOS0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNl9obWFjLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjE2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKmdldF9hbmRfdmFsaWRhdGVfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjQ6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyNS1cdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMzI9c3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQwLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyLVx0aWYgKHNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NzU4PXN0YXRpYyBpbnQgZW5kX2Zsdjg5ODZfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc2OS1cdHBpbmZvID0gc2VnNl9nZXRfc3JoX3BrdGluZm8oc3JoKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NzA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc3MS1cdGlmIChzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDkxCgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJUHY2IEZ1enppbmcgU2V0dXAqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0YXJnZXRpbmcgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3J0aGRyX3JjdmAgZm9yIHNwZWNpZmljIGZ1enppbmcgYXR0ZW50aW9uLiBUaG9zZSBhcmUgaW1wb3J0YW50LCBhbmQgcmlnaHQgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdXMgdG8gYmUgZm9jdXNpbmcgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aG9zZSBwcm90b2NvbHMuCgpOZXh0LCBJIHNlZSB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgZW5hYmxlZC4gV2UgaGF2ZSBgSVBWNmAsIGBJUFY2X1NFRzZfTFdUVU5ORUxgLCBhbmQgYElQVjZfU0VHNl9ITUFDYC4gVGhhdCBtYWtlcyBzZW5zZTsgd2Ugd2FudCB0byBlbnN1cmUgdGhlc2UgYXJlIGVuYWJsZWQsIGJlY2F1c2UgdGhleSBhcmUgY3J1Y2lhbCBmb3IgdGVzdGluZyB0aG9zZSBzcGVjaWZpYyBmZWF0dXJlcy4gSSBzZWUgdGhleSYjMzk7cmUgcHJvdmlkZWQgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIG92ZXJhbGwgaW5zdHJ1Y3Rpb25zIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGFsaWduZWQuIFllcywgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgZ29vZC4gSSBzZWUgdGhlIHNhbWUgZm9jdXMgc3ltYm9scyBhbmQgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLCBjb25maXJtZWQuIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgb24gcG9pbnQuIFBlcmZlY3QsIGl0IGFsbCBsb29rcyBzb3VuZC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBzZXR1cC4gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGV4ZWN1dGUgdGhlIGBzZXQtcmVzdWx0c2AgY29tbWFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBieSByZXBsYWNpbmcgZml4ZWQgYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgIGFkanVzdG1lbnRzIGluIGBza2JfcHVzaCgpYCBhbmQgYHNrYl9wdWxsKClgIHdpdGggZHluYW1pYyBvZmZzZXRzIChgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgKS4gVGhpcyBjb3JyZWN0bHkgYWRqdXN0cyBgc2tiLVx1MDAzZWRhdGFgIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV0d29yayBoZWFkZXIgYW5kIHRyYW5zcG9ydCBoZWFkZXIgd2hlbiBleHRlbnNpb24gaGVhZGVycyBwcmVjZWRlIHRoZSBTUkguXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhY2Nlc3MgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGZpZWxkcywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHZpYSBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIGluY29ycmVjdCBgc2tiX3B1c2hgL2Bza2JfcHVsbGAgY2FsY3VsYXRpb25zIHJlbGF0ZSB0byBza2IgYnVmZmVyIGJvdW5kcyBhbmQgaGVhZGVyIGFsaWdubWVudCwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc2tfYnVmZiBydW50aW1lIGFzc2VydGlvbnMgKGUuZy4sIGBza2JfdW5kZXJfcGFuaWNgL2Bza2Jfb3Zlcl9wYW5pY2ApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDQ0MzU3MzVhMzgxNWNmYTVmZTgyNDI2NzJlMmFmMzMzZDM5NjI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMTc6MTg6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggNTE5NDFhZDY1NmEzNi4uMDlhNDU1MmY3ZjA4YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtNDQ1LDcgJiM0Mzs0NDUsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogCWhkci0mZ3Q7c2VnbWVudHNfbGVmdC0tOwogCWFkZHIgPSBoZHItJmd0O3NlZ21lbnRzICYjNDM7IGhkci0mZ3Q7c2VnbWVudHNfbGVmdDsKIAotCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiYjNDM7CXNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKIAogCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKIAkJc2VnNl91cGRhdGVfY3N1bShza2IpOwpAQCAtNDY5LDcgJiM0Mzs0NjksNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogCQl9CiAJCWlwdjZfaGRyKHNrYiktJmd0O2hvcF9saW1pdC0tOwogCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiYjNDM7CQlza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpOwogCQlnb3RvIGxvb3BlZF9iYWNrOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcGF0Y2g6CgoqKkV2YWx1YXRpbmcgdGhlIEtNU0FOIEZ1enppbmcgTmVjZXNzaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBUaGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggdGhpcywgYXMgYWx3YXlzLCBpcyBtZXRob2RpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gQ29udGV4dCBpcyBldmVyeXRoaW5nLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgcmVsZXZhbnQgY29kZSwgb3IgcGVyaGFwcyBgZ3JlcHBlcmAgaWYgSSBqdXN0IHdhbnQgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgcmVmZXJlbmNlcy4gSSYjMzk7bSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGUgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBGb2N1c2luZyBvbiB0aGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJlYSB0aGlzIHBhdGNoIHRvdWNoZXMgYW5kIGhlbHAgbWUgZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiByaXNrIGFuZCwgc3Vic2VxdWVudGx5LCB3aGV0aGVyIGRlZGljYXRlZCBmdXp6aW5nIGlzIGEgd2lzZSBpbnZlc3RtZW50IG9mIHJlc291cmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzMDpcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcbiA0MzE6XHRcdFx0cmV0dXJuIC0xO1xuIDQzMjpcdFx0fVxuIDQzMzpcdFxuIDQzNDpcdFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xuIDQzNTpcdFx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XG4gNDM2Olx0XHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXG4gNDM3Olx0XHRcdFx0XHRcdElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTtcbiA0Mzg6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0Mzk6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDQwOlx0XHRcdH1cbiA0NDE6XHRcbiA0NDI6XHRcdFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gNDQzOlx0XHR9XG4gNDQ0Olx0XG4gNDQ1Olx0XHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIDQ0NjpcdFx0YWRkciA9IGhkci1cdTAwM2VzZWdtZW50cyAmIzQzOyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiA0NDc6XHRcbiA0NDg6XHRcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcbiA0NDk6XHRcbiA0NTA6XHRcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxuIDQ1MTpcdFx0XHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XG4gNDUyOlx0XG4gNDUzOlx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyID0gKmFkZHI7XG4gNDU0Olx0XG4gNDU1Olx0XHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcbiA0NTY6XHRcbiA0NTc6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA0NTg6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNDU5Olx0XHRcdHJldHVybiAtMTtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRcdGlmIChza2JfZHN0X2Rldihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcbiA0NjM6XHRcdFx0aWYgKGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDQ2NDpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA0NjU6XHRcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiA0NjY6XHRcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiA0Njc6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0Njg6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDY5Olx0XHRcdH1cbiA0NzA6XHRcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbiA0NzE6XHRcbiA0NzI6XHRcdFx0c2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcbiA0NzM6XHRcdFx0Z290byBsb29wZWRfYmFjaztcbiA0NzQ6XHRcdH1cbiA0NzU6XHRcbiA0NzY6XHRcdGRzdF9pbnB1dChza2IpO1xuIDQ3NzpcdFxuIDQ3ODpcdFx0cmV0dXJuIC0xO1xuIDQ3OTpcdH1cbiA0ODA6XHRcbiA0ODE6XHRzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiA0ODI6XHR7XG4gNDgzOlx0XHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcbiA0ODQ6XHRcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbiA0ODU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNDg2Olx0XHRzdHJ1Y3QgaXB2NmhkciAqb2xkaGRyO1xuIDQ4NzpcdFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xuIDQ4ODpcdFx0dW5zaWduZWQgY2hhciAqYnVmO1xuIDQ4OTpcdFx0aW50IGFjY2VwdF9ycGxfc2VnO1xuIDQ5MDpcdFx0aW50IGksIGVycjtcbiA0OTE6XHRcdHU2NCBuID0gMDtcbiA0OTI6XHRcdHUzMiByO1xuIDQ5MzpcdFxuIDQ5NDpcdFx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXG4gNDk1Olx0XHRcdFx0ICAgICBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkKSk7XG4gNDk2Olx0XHRpZiAoIWFjY2VwdF9ycGxfc2VnKSB7XG4gNDk3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQ5ODpcdFx0XHRyZXR1cm4gLTE7XG4gNDk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIFJlY2VpdmUgUGF0aCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgYWx0ZXJlZCBpbiByZWxhdGlvbiB0byBgaXB2Nl9zcmhfcmN2YC4gQ29udGV4dCBpcyBrZXkgaGVyZSwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvZGUgaXRzZWxmLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIDM4MCB0aHJvdWdoIDQ1MCBvZiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gVGhpcyBzZWN0aW9uIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBTb3VyY2UgUm91dGluZyBIZWFkZXIgZHVyaW5nIHRoZSByZWNlcHRpb24gcHJvY2Vzcy4gS25vd2luZyB0aGUgZXhhY3QgY2hhbmdlcyBpbiB0aGF0IHNlY3Rpb24gd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgbW9kaWZpY2F0aW9ucywgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF04oCZcyBjaGFuZ2luZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiB0byBwcm9wZXJseSBldmFsdWF0ZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFxuIDM4MTpcdFx0YWNjZXB0X3NlZzYgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXNlZzZfZW5hYmxlZCksXG4gMzgyOlx0XHRcdFx0ICBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuc2VnNl9lbmFibGVkKSk7XG4gMzgzOlx0XG4gMzg0Olx0XHRpZiAoIWFjY2VwdF9zZWc2KSB7XG4gMzg1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM4NjpcdFx0XHRyZXR1cm4gLTE7XG4gMzg3Olx0XHR9XG4gMzg4Olx0XG4gMzg5Olx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuIDM5MDpcdFx0aWYgKCFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpIHtcbiAzOTE6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMzkyOlx0XHRcdHJldHVybiAtMTtcbiAzOTM6XHRcdH1cbiAzOTQ6XHQjZW5kaWZcbiAzOTU6XHRcbiAzOTY6XHRsb29wZWRfYmFjazpcbiAzOTc6XHRcdGlmIChoZHItXHUwMDNlc2VnbWVudHNfbGVmdCA9PSAwKSB7XG4gMzk4Olx0XHRcdGlmIChoZHItXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjYgfHwgaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KSB7XG4gMzk5Olx0XHRcdFx0aW50IG9mZnNldCA9IChoZHItXHUwMDNlaGRybGVuICYjNDM7IDEpIFx1MDAzY1x1MDAzYyAzO1xuIDQwMDpcdFxuIDQwMTpcdFx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLFxuIDQwMjpcdFx0XHRcdFx0XHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xuIDQwMzpcdFx0XHRcdHNrYl9wdWxsKHNrYiwgb2Zmc2V0KTtcbiA0MDQ6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLFxuIDQwNTpcdFx0XHRcdFx0XHQgICBvZmZzZXQpO1xuIDQwNjpcdFxuIDQwNzpcdFx0XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDQwODpcdFx0XHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gNDA5Olx0XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuIDQxMDpcdFx0XHRcdGlmIChoZHItXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjQpXG4gNDExOlx0XHRcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4gNDEyOlx0XHRcdFx0X19za2JfdHVubmVsX3J4KHNrYiwgc2tiLVx1MDAzZWRldiwgbmV0KTtcbiA0MTM6XHRcbiA0MTQ6XHRcdFx0XHRuZXRpZl9yeChza2IpO1xuIDQxNTpcdFx0XHRcdHJldHVybiAtMTtcbiA0MTY6XHRcdFx0fVxuIDQxNzpcdFxuIDQxODpcdFx0XHRvcHQtXHUwMDNlc3JjcnQgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XG4gNDE5Olx0XHRcdG9wdC1cdTAwM2VsYXN0b3B0ID0gb3B0LVx1MDAzZXNyY3J0O1xuIDQyMDpcdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gKGhkci1cdTAwM2VoZHJsZW4gJiM0MzsgMSkgXHUwMDNjXHUwMDNjIDM7XG4gNDIxOlx0XHRcdG9wdC1cdTAwM2VuaG9mZiA9IChcdTAwMjZoZHItXHUwMDNlbmV4dGhkcikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiA0MjI6XHRcbiA0MjM6XHRcdFx0cmV0dXJuIDE7XG4gNDI0Olx0XHR9XG4gNDI1Olx0XG4gNDI2Olx0XHRpZiAoaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQgXHUwMDNlPSAoaGRyLVx1MDAzZWhkcmxlbiBcdTAwM2VcdTAwM2UgMSkpIHtcbiA0Mjc6XHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIDQyODpcdFx0XHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXG4gNDI5Olx0XHRcdFx0XHQgICgoXHUwMDI2aGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQpIC1cbiA0MzA6XHRcdFx0XHRcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpKSk7XG4gNDMxOlx0XHRcdHJldHVybiAtMTtcbiA0MzI6XHRcdH1cbiA0MzM6XHRcbiA0MzQ6XHRcdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbiA0MzU6XHRcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xuIDQzNjpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpLFxuIDQzNzpcdFx0XHRcdFx0XHRJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7XG4gNDM4Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDM5Olx0XHRcdFx0cmV0dXJuIC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ1CgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDg1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgU1JIIFJlY2VpdmUgUGF0aCBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjb21taXQgaW4gYGlwdjZfc3JoX3JjdmAgY2F1Z2h0IG15IGV5ZS4gVGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIGZpeGVkIGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCB3aXRoIGBza2JfbmV0d29ya19vZmZzZXQoc2tiKWAgYW5kIGBza2JfdHJhbnNwb3J0X29mZnNldChza2IpYCBpbiB0aGUgYHNrYl9wdXNoYCBhbmQgYHNrYl9wdWxsYCBjYWxscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeSB0aGUgY2hhbmdlPyBJdCBzZWVtcyB0aGV5JiMzOTtyZSBoYW5kbGluZyBjYXNlcyB3aXRoIGV4dGVuc2lvbiBoZWFkZXJzIHByZWNlZGluZyB0aGUgU1JILCBhbmQgcG90ZW50aWFsbHkgd2hlcmUgdGhlIGBza2ItJmd0O2RhdGFgIHBvaW50ZXIgaXMgYWxyZWFkeSBwYXN0IHRoZSBJUHY2IGhlYWRlciBhbmQgYXQgdGhlIFNSSCBoZWFkZXIgb3IgdHJhbnNwb3J0IGhlYWRlci4KCmBza2JfbmV0d29ya19vZmZzZXQoc2tiKWAgZ2l2ZXMgYSBuZWdhdGl2ZSBvZmZzZXQgaW4gdGhlc2Ugc2NlbmFyaW9zIChiZWNhdXNlIGBza2ItJmd0O2RhdGFgIGlzIGFoZWFkIG9mIGBza2ItJmd0O25ldHdvcmtfaGVhZGVyYCkuIFRodXMsIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGVmZmVjdGl2ZWx5IG1vdmVzIHRoZSBkYXRhIHBvaW50ZXIgYmFjayB0byB0aGUgKmFjdHVhbCogc3RhcnQgb2YgdGhlIElQdjYgaGVhZGVyLCBub3QganVzdCBhc3N1bWluZyBpdCYjMzk7cyBhIGZpeGVkIHNpemUgYXdheS4gU2ltaWxhcmx5LCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWAgY29ycmVjdGx5IHBvc2l0aW9ucyB0aGUgcG9pbnRlciB0byB0aGUgdHJhbnNwb3J0IGhlYWRlciwgYXMgdGhlIGRhdGEgaXMgYWxyZWFkeSBhaGVhZCBvZiB0aGUgbmV0d29yayBoZWFkZXIuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byB0aGUgS01TQU4gYW5nbGUuIEZpcnN0LCBkb2VzIHRoaXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYW55IHdheT8gTm8sIGl0JiMzOTtzIG9wZXJhdGluZyBvbiByZWNlaXZlZCBTS0JzIHdpdGhpbiB0aGUga2VybmVsIG5ldHdvcmsgc3RhY2suIFdlJiMzOTtyZSBub3QgY29weWluZyB0byB1c2Vyc3BhY2UsIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGRpcmVjdGx5IChpdCYjMzk7cyBwb2ludGVyIGFyaXRobWV0aWMgd2l0aGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlKSwgb3IgY3JlYXRpbmcgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgaGFyYm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIGFyZSBoYXBwZW5pbmcgaGVyZS4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93IG9yIHVuZGVyZmxvdz8gVGhpcyBjaGFuZ2UgaXMgZGVzaWduZWQgdG8gKmZpeCogcG90ZW50aWFsIGlzc3VlcyB3aXRoIGJ1ZmZlciBtYW5hZ2VtZW50IHdoZW4gZXh0ZW5zaW9uIGhlYWRlcnMgYXJlIGludm9sdmVkLCBieSBjb3JyZWN0bHkgYWRqdXN0aW5nIGBza2ItJmd0O2RhdGFgIGFuZCBlbnN1cmluZyB0aGUgc2tiIGhlYWQvdGFpbCBzdGF5IGluIHN5bmMuIEluYWNjdXJhdGUgYHNrYl9wdXNoYCAvIGBza2JfcHVsbGAgY291bGQgY2F1c2UgbWlzYWxpZ25tZW50LCBidXQgZXhpc3Rpbmcga2VybmVsIGNoZWNrcyBhbmQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNBTml0aXplcikgYXJlIGRlc2lnbmVkIHRvIGNhdGNoIHByZWNpc2VseSB0aGVzZSB0eXBlcyBvZiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUgZXJyb3JzLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoICoqZG9lcyBub3QqKiBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gaXMgdGhlIGNvcnJlY3QgdG9vbCBoZXJlLCBjb3ZlcmluZyB0aGUgYnVmZmVyIG1hbmlwdWxhdGlvbiBzaWRlIG9mIHRoaW5ncywgYW5kIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNBTml0aXplcikgaXMgbm90IG5lY2Vzc2FyeS4gV2UgaGF2ZSBwcm9wZXIgYm91bmRzIGNoZWNraW5nLCBhbmQgYW55IGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBza2IgY2hlY2tzLgoKU28sIHRvIHN1bW1hcml6ZTogdGhlIHBhdGNoIGNvcnJlY3RzIHRoZSBTS0IgZGF0YSBwb2ludGVyIGFkanVzdG1lbnQgaW4gYGlwdjZfc3JoX3JjdigpYCBieSB1c2luZyBkeW5hbWljIG9mZnNldHMgKGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGFuZCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWApIGluc3RlYWQgb2YgZml4ZWQgc2l6ZXMsIHdoaWNoIGVuc3VyZXMgdGhlIFNLQiBwb2ludGVycyBhcmUgcHJvcGVybHkgYWxpZ25lZCB3aXRoIG5ldHdvcmsvdHJhbnNwb3J0IGhlYWRlcnMgd2hlbiBleHRlbnNpb24gaGVhZGVycyBhcmUgcHJlc2VudC4gVGhpcyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGFueSB3YXkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIG1hbmFnZW1lbnQgYXJlIGNhdWdodCBieSBLQVNBTi4gU28sIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBwcm9jZXNzaW5nIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGJ5IHJlcGxhY2luZyBmaXhlZCBgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWAgYWRqdXN0bWVudHMgaW4gYHNrYl9wdXNoKClgIGFuZCBgc2tiX3B1bGwoKWAgd2l0aCBkeW5hbWljIG9mZnNldHMgKGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGFuZCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWApLiBUaGlzIGNvcnJlY3RseSBhZGp1c3RzIGBza2ItXHUwMDNlZGF0YWAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXR3b3JrIGhlYWRlciBhbmQgdHJhbnNwb3J0IGhlYWRlciB3aGVuIGV4dGVuc2lvbiBoZWFkZXJzIHByZWNlZGUgdGhlIFNSSC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGFjY2VzcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZmllbGRzLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgdmlhIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb3JyZWN0IGBza2JfcHVzaGAvYHNrYl9wdWxsYCBjYWxjdWxhdGlvbnMgcmVsYXRlIHRvIHNrYiBidWZmZXIgYm91bmRzIGFuZCBoZWFkZXIgYWxpZ25tZW50LCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBza19idWZmIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoZS5nLiwgYHNrYl91bmRlcl9wYW5pY2AvYHNrYl9vdmVyX3BhbmljYCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBieSByZXBsYWNpbmcgZml4ZWQgYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgIGFkanVzdG1lbnRzIGluIGBza2JfcHVzaCgpYCBhbmQgYHNrYl9wdWxsKClgIHdpdGggZHluYW1pYyBvZmZzZXRzIChgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgKS4gVGhpcyBjb3JyZWN0bHkgYWRqdXN0cyBgc2tiLVx1MDAzZWRhdGFgIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV0d29yayBoZWFkZXIgYW5kIHRyYW5zcG9ydCBoZWFkZXIgd2hlbiBleHRlbnNpb24gaGVhZGVycyBwcmVjZWRlIHRoZSBTUkguXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhY2Nlc3MgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGZpZWxkcywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHZpYSBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIGluY29ycmVjdCBgc2tiX3B1c2hgL2Bza2JfcHVsbGAgY2FsY3VsYXRpb25zIHJlbGF0ZSB0byBza2IgYnVmZmVyIGJvdW5kcyBhbmQgaGVhZGVyIGFsaWdubWVudCwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc2tfYnVmZiBydW50aW1lIGFzc2VydGlvbnMgKGUuZy4sIGBza2JfdW5kZXJfcGFuaWNgL2Bza2Jfb3Zlcl9wYW5pY2ApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxODozOS42NjYzODUxODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM4MzY0MDA3NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0hNQUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3NyaF9yY3ZcIixcbiAgICBcImlwdjZfcnRoZHJfcmN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBieSByZXBsYWNpbmcgZml4ZWQgYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgIGFkanVzdG1lbnRzIGluIGBza2JfcHVzaCgpYCBhbmQgYHNrYl9wdWxsKClgIHdpdGggZHluYW1pYyBvZmZzZXRzIChgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgKS4gVGhpcyBjb3JyZWN0bHkgYWRqdXN0cyBgc2tiLVxcdTAwM2VkYXRhYCB0byB0aGUgc3RhcnQgb2YgdGhlIG5ldHdvcmsgaGVhZGVyIGFuZCB0cmFuc3BvcnQgaGVhZGVyIHdoZW4gZXh0ZW5zaW9uIGhlYWRlcnMgcHJlY2VkZSB0aGUgU1JILlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhY2Nlc3MgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGZpZWxkcywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHZpYSBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIGluY29ycmVjdCBgc2tiX3B1c2hgL2Bza2JfcHVsbGAgY2FsY3VsYXRpb25zIHJlbGF0ZSB0byBza2IgYnVmZmVyIGJvdW5kcyBhbmQgaGVhZGVyIGFsaWdubWVudCwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc2tfYnVmZiBydW50aW1lIGFzc2VydGlvbnMgKGUuZy4sIGBza2JfdW5kZXJfcGFuaWNgL2Bza2Jfb3Zlcl9wYW5pY2ApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE4OjM5LjY2NjM4OTI1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTc0NTk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFkNDQzNTczNWEzODE1Y2ZhNWZlODI0MjY3MmUyYWYzMzNkMzk2MjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjggMTc6MTg6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXFxuaW5kZXggNTE5NDFhZDY1NmEzNi4uMDlhNDU1MmY3ZjA4YSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcXG4rKysgYi9uZXQvaXB2Ni9leHRoZHJzLmNcXG5AQCAtNDQ1LDcgKzQ0NSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIFxcdGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xcbiBcXHRhZGRyID0gaGRyLVxcdTAwM2VzZWdtZW50cyArIGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdDtcXG4gXFxuLVxcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuK1xcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcXG4gXFxuIFxcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcXG4gXFx0XFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xcbkBAIC00NjksNyArNDY5LDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4gXFx0XFx0fVxcbiBcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4gXFxuLVxcdFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuK1xcdFxcdHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XFxuIFxcdFxcdGdvdG8gbG9vcGVkX2JhY2s7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE4OjQxLjEwNjczOTMzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTAzMTk3MTcwNDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9ITUFDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFkNDQzNTczNWEzODE1Y2ZhNWZlODI0MjY3MmUyYWYzMzNkMzk2MjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAxNzoxODozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuaW5kZXggNTE5NDFhZDY1NmEzNi4uMDlhNDU1MmY3ZjA4YSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2V4dGhkcnMuY1xuKysrIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5AQCAtNDQ1LDcgKzQ0NSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIFx0YWRkciA9IGhkci1cdTAwM2VzZWdtZW50cyArIGhkci1cdTAwM2VzZWdtZW50c19sZWZ0O1xuIFxuLVx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbitcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcbiBcbiBcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxuIFx0XHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XG5AQCAtNDY5LDcgKzQ2OSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbiBcbi1cdFx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbitcdFx0c2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcbiBcdFx0Z290byBsb29wZWRfYmFjaztcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE4OjQxLjEwNjc0MDU5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1NTAyODYyMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBkaWdnaW5nIGludG8gYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGFuZCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBpcHY2X3NyaF9yY3ZgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgaW50ZXJlc3Qg4oCTIHdlJ3JlIHRhbGtpbmcgYWJvdXQgc291cmNlIHJvdXRpbmcgaGVhZGVycyBpbiBJUHY2LCB3aGljaCwgd2hpbGUgbm90IGFzIHByZXZhbGVudCBhcyB0aGV5IG9uY2Ugd2VyZSwgc3RpbGwgcmVwcmVzZW50IGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3IgYW5kIGEgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNoYW5nZWQgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIExldCdzIHplcm8gaW4gb24gbGluZSA0NDUgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIFNSSCBoYW5kbGluZyBsb2dpYyB0aGVyZS4gSSdsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmcgd2l0aCB0aGUgc2VnbWVudCBsaXN0LCB0aGUgcG9pbnRlciBhcml0aG1ldGljLCBhbnkgaG9wLWJ5LWhvcCBvcHRpb25zIGFuZCBpZiB0aGV5IGFyZSB2YWxpZGF0aW5nIHRoZSBzb3VyY2Ugcm91dGVzIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MTk6MzYuNjA5NjA1MDEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMDpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNDIxOlxcdFxcdFxcdG9wdC1cXHUwMDNlbmhvZmYgPSAoXFx1MDAyNmhkci1cXHUwMDNlbmV4dGhkcikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDQyNDpcXHRcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgXFx1MDAzZT0gKGhkci1cXHUwMDNlaGRybGVuIFxcdTAwM2VcXHUwMDNlIDEpKSB7XFxuIDQyNzpcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDQyODpcXHRcXHRcXHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXFxuIDQyOTpcXHRcXHRcXHRcXHRcXHQgICgoXFx1MDAyNmhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCkgLVxcbiA0MzA6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcXG4gNDMxOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbiA0MzU6XFx0XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xcbiA0MzY6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHRcXHRJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7XFxuIDQzODpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDM5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDQ0MzpcXHRcXHR9XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xcbiA0NDY6XFx0XFx0YWRkciA9IGhkci1cXHUwMDNlc2VnbWVudHMgKyBoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQ7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbiA0NTE6XFx0XFx0XFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkciA9ICphZGRyO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcXG4gNDU2OlxcdFxcbiA0NTc6XFx0XFx0aWYgKHNrYl9kc3Qoc2tiKS1cXHUwMDNlZXJyb3IpIHtcXG4gNDU4OlxcdFxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiA0NTk6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0NjA6XFx0XFx0fVxcbiA0NjE6XFx0XFxuIDQ2MjpcXHRcXHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcXG4gNDYzOlxcdFxcdFxcdGlmIChpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQgXFx1MDAzYz0gMSkge1xcbiA0NjQ6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiA0NjU6XFx0XFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXFxuIDQ2NjpcXHRcXHRcXHRcXHRcXHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XFxuIDQ2NzpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDY4OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDY5OlxcdFxcdFxcdH1cXG4gNDcwOlxcdFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRcXHRza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpO1xcbiA0NzM6XFx0XFx0XFx0Z290byBsb29wZWRfYmFjaztcXG4gNDc0OlxcdFxcdH1cXG4gNDc1OlxcdFxcbiA0NzY6XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdHJldHVybiAtMTtcXG4gNDc5OlxcdH1cXG4gNDgwOlxcdFxcbiA0ODE6XFx0c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIDQ4MjpcXHR7XFxuIDQ4MzpcXHRcXHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcXG4gNDg0OlxcdFxcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcXG4gNDg1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiA0ODY6XFx0XFx0c3RydWN0IGlwdjZoZHIgKm9sZGhkcjtcXG4gNDg3OlxcdFxcdHVuc2lnbmVkIGludCBjaGRyX2xlbjtcXG4gNDg4OlxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZjtcXG4gNDg5OlxcdFxcdGludCBhY2NlcHRfcnBsX3NlZztcXG4gNDkwOlxcdFxcdGludCBpLCBlcnI7XFxuIDQ5MTpcXHRcXHR1NjQgbiA9IDA7XFxuIDQ5MjpcXHRcXHR1MzIgcjtcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0XFx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cXHUwMDNlcnBsX3NlZ19lbmFibGVkKSxcXG4gNDk1OlxcdFxcdFxcdFxcdCAgICAgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcXG4gNDk2OlxcdFxcdGlmICghYWNjZXB0X3JwbF9zZWcpIHtcXG4gNDk3OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0OTg6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0OTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxOTozNi42MDk3MDQ5OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjY0NjE1ODk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBTb3VyY2UgUm91dGluZyBIZWFkZXIgUmVjZXB0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIGtlcm5lbD8gSSB3YW50IHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoLlxuXG5CZXlvbmQgdGhhdCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gV2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgY29udHJvbCB0aGlzIGZlYXR1cmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBpcHY2X3NyaF9yY3ZgIGFuZCB0aGUgb3ZlcmFsbCBzdXBwb3J0IGZvciBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpLCBhbmQgbW9yZSBnZW5lcmFsbHksIElQdjYgcm91dGluZyBoZWFkZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCB0ZWxsIG1lIGFib3V0IGl0cyBicm9hZGVyIGVjb3N5c3RlbSwgaS5lLiwgaG93IGl0J3MgZW5hYmxlZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgZmVhdHVyZXMuIEFyZSB0aGVyZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgU1J2NiBvciBvdGhlciBleHRlbnNpb25zPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIHN1cnJvdW5kaW5nIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjIwOjM5LjI1NTg2NzE0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk2MzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3NyaF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jPTM0Mj1zdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzozNzE6c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY4My1cXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2ODQ6XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy02ODUtXFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MjA6MzkuMzAxODM0MzE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgyNzQwMDY3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBJUHY2IENvbXBpbGF0aW9uIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZXh0aGRycy5jYCBmaWxlIGdldHMgY29tcGlsZWQgYW5kIGhvdyB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgYGlwdjZfc3JoX3JjdmAsIGlzIGNvbmZpZ3VyZWQuIFRoaXMgdGVsbHMgbWUgYSBsb3QgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvcmUgbWFrZWZpbGVzIGFuZCBLY29uZmlnIGZpbGVzLiBGaXJzdCB1cCwgSSdsbCBjaGVjayBgbmV0L2lwdjYvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBvdmVyYWxsIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIElQdjYuIFRoZW4sIEknbGwgZGl2ZSBpbnRvIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpdmUuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgU1J2NiBmZWF0dXJlcyBhbmQgaG93IHRoZXkgYXJlIGVuYWJsZWQvZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gYGlwdjZfc3JoX3JjdmAgYW5kIHdoYXQgdHJpZ2dlcnMgdGhlaXIgaW5jbHVzaW9uIChvciBleGNsdXNpb24pIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUgd2hlbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgdGhlIGJ1aWxkIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjIxOjA3LjU3NTg0MzY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzQxODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dGhkcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9OD1pcHY2LXkgOj1cXHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxcXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEyOlxcdFxcdGV4dGhkcnMubyBkYXRhZ3JhbS5vIGlwNl9mbG93bGFiZWwubyBpbmV0Nl9jb25uZWN0aW9uX3NvY2subyBcXFxcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTMtXFx0XFx0dWRwX29mZmxvYWQubyBzZWc2Lm8gZmliNl9ub3RpZmllci5vIHJwbC5vIGlvYW02Lm9cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19JUFY2X0ZPVSkgKz0gZm91Ni5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNDUtXFxubmV0L2lwdjYvTWFrZWZpbGU6NDY6b2JqLXkgKz0gYWRkcmNvbmZfY29yZS5vIGV4dGhkcnNfY29yZS5vIGlwNl9jaGVja3N1bS5vIGlwNl9pY21wLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00Ny1vYmotJChDT05GSUdfSU5FVCkgKz0gb3V0cHV0X2NvcmUubyBwcm90b2NvbC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZTo0ODpcXHRcXHRcXHRpcDZfb2ZmbG9hZC5vIGV4dGhkcnNfb2ZmbG9hZC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNDktXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTk5OT1zdGF0aWMgaW50IF9faW5pdCBpbmV0Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTEwOTYtXFx0LyogSW5pdCB2NiBleHRlbnNpb24gaGVhZGVycy4gKi9cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjEwOTc6XFx0ZXJyID0gaXB2Nl9leHRoZHJzX2luaXQoKTtcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTEwOTgtXFx0aWYgKGVycilcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjEwOTk6XFx0XFx0Z290byBpcHY2X2V4dGhkcnNfZmFpbDtcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTExMDAtXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTExNzktaXB2Nl9mcmFnX2ZhaWw6XFxubmV0L2lwdjYvYWZfaW5ldDYuYzoxMTgwOlxcdGlwdjZfZXh0aGRyc19leGl0KCk7XFxubmV0L2lwdjYvYWZfaW5ldDYuYzoxMTgxOmlwdjZfZXh0aGRyc19mYWlsOlxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtMTE4Mi1cXHRhZGRyY29uZl9jbGVhbnVwKCk7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTQtICpcXHRcXHRcXHRcXHQgIHRsdiBvcHRpb25zLlxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxNTogKlxcdE1pdHN1cnUgS0FOREEgQFVTQUdJIGFuZDogUmVtb3ZlIGlwdjZfcGFyc2VfZXh0aGRycygpLlxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xNi0gKlxcdFlPU0hJRlVKSSBIaWRlYWtpIEBVU0FHSSAgUmVnaXN0ZXIgaW5ib3VuZCBleHRlbnNpb24gaGVhZGVyXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9ODUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgbm9kYXRhX3Byb3RvY29sID0ge1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTg1NC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6ODU1OmludCBfX2luaXQgaXB2Nl9leHRoZHJzX2luaXQodm9pZClcXG5uZXQvaXB2Ni9leHRoZHJzLmMtODU2LXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy04NzktXFxubmV0L2lwdjYvZXh0aGRycy5jOjg4MDp2b2lkIGlwdjZfZXh0aGRyc19leGl0KHZvaWQpXFxubmV0L2lwdjYvZXh0aGRycy5jLTg4MS17XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYz0yNT1FWFBPUlRfU1lNQk9MKGlwdjZfZXh0X2hkcik7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYy01MC0gKlxcbm5ldC9pcHY2L2V4dGhkcnNfY29yZS5jOjUxOiAqIEl0IHNraXBzIGFsbCB3ZWxsLWtub3duIGV4dGhkcnMsIGFuZCByZXR1cm5zIHBvaW50ZXIgdG8gdGhlIHN0YXJ0XFxubmV0L2lwdjYvZXh0aGRyc19jb3JlLmMtNTItICogb2YgdW5wYXJzYWJsZSBhcmVhIGkuZS4gdGhlIGZpcnN0IGhlYWRlciB3aXRoIHVua25vd24gdHlwZS5cXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnNfb2ZmbG9hZC5jPTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgaGJoX29mZmxvYWQgPSB7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzX29mZmxvYWQuYy0yMi1cXG5uZXQvaXB2Ni9leHRoZHJzX29mZmxvYWQuYzoyMzppbnQgX19pbml0IGlwdjZfZXh0aGRyc19vZmZsb2FkX2luaXQodm9pZClcXG5uZXQvaXB2Ni9leHRoZHJzX29mZmxvYWQuYy0yNC17XFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9MTAzNz1lbnVtIHNrYl9kcm9wX3JlYXNvbiBpY21wdjZfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtMTA3Ny1cXG5uZXQvaXB2Ni9pY21wLmM6MTA3ODpcXHQvKiBCVUdHR19GVVRVUkU6IHdlIHNob3VsZCB0cnkgdG8gcGFyc2UgZXh0aGRycyBpbiB0aGlzIHBhY2tldC5cXG5uZXQvaXB2Ni9pY21wLmMtMTA3OS1cXHQgICBXaXRob3V0IHRoaXMgd2Ugd2lsbCBub3QgYWJsZSBmLmUuIHRvIG1ha2Ugc291cmNlIHJvdXRlZFxcbi0tXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtMTQtICpcXHRNaXRzdXJ1IEtBTkRBIEBVU0FHSSBhbmRcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzoxNTogKlxcdFlPU0hJRlVKSSBIaWRlYWtpIEBVU0FHSTogUmVtb3ZlIGlwdjZfcGFyc2VfZXh0aGRycygpLlxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTE2LSAqL1xcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMy1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjI0OnN0YXRpYyBpbnQgaXB2Nl9ncm9fcHVsbF9leHRoZHJzKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYsIGludCBwcm90bylcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTI1LXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtNTctXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzo1ODpzdGF0aWMgaW50IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy01OS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTkxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB2Nl9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xMTktXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoxMjA6XFx0cHJvdG8gPSBpcHY2X2dzb19wdWxsX2V4dGhkcnMoc2tiLCBpcHY2aC1cXHUwMDNlbmV4dGhkcik7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xMjEtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTE3OC0vKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiBhbGwgdGhlIGV4dGVuc2lvbiBoZHJzLCBmb2xsb3dpbmcgdGhlIHNhbWVcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjE3OTogKiBsb2dpYyBpbiBpcHY2X2dzb19wdWxsX2V4dGhkcnMoKSB3aGVuIHBhcnNpbmcgZXh0LWhkcnMuXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xODAtICovXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoxODE6c3RhdGljIGludCBpcHY2X2V4dGhkcnNfbGVuKHN0cnVjdCBpcHY2aGRyICppcGgsXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xODItXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqKm9wcHMpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTIwMz1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBzdHJ1Y3Qgc2tfYnVmZiAqaXB2Nl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMjgtXFx0aWYgKCFvcHMgfHwgIW9wcy1cXHUwMDNlY2FsbGJhY2tzLmdyb19yZWNlaXZlKSB7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyMjk6XFx0XFx0cHJvdG8gPSBpcHY2X2dyb19wdWxsX2V4dGhkcnMoc2tiLCBobGVuLCBwcm90byk7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMzAtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTI1OS1cXHRcXHQgKiBhbHJlYWR5IHNvIHdlIGRvbid0IG5lZWQgdG8gY29tcGFyZSBubGVuXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyNjA6XFx0XFx0ICogKG5sZW4gIT0gKHNpemVvZigqaXBoMikgKyBpcHY2X2V4dGhkcnNfbGVuKGlwaDIsIFxcdTAwMjZvcHMpKSlcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTI2MS1cXHRcXHQgKiBtZW1jbXAoKSBhbG9uZSBiZWxvdyBpcyBzdWZmaWNpZW50LCByaWdodD9cXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9MzMyPUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCBpcHY2X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTM0NS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjM0NjpcXHRuaG9mZiArPSBzaXplb2YoKmlwaCkgKyBpcHY2X2V4dGhkcnNfbGVuKGlwaCwgXFx1MDAyNm9wcyk7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0zNDctXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTQzNz1zdGF0aWMgaW50IF9faW5pdCBpcHY2X29mZmxvYWRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy00NDEtXFx0XFx0cHJfY3JpdChcXFwiJXM6IENhbm5vdCBhZGQgVENQIHByb3RvY29sIG9mZmxvYWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjQ0MjpcXHRpZiAoaXB2Nl9leHRoZHJzX29mZmxvYWRfaW5pdCgpIFxcdTAwM2MgMClcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTQ0My1cXHRcXHRwcl9jcml0KFxcXCIlczogQ2Fubm90IGFkZCBFWFRIRFJTIHByb3RvY29sIG9mZmxvYWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmgtOS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oOjEwOmludCBpcHY2X2V4dGhkcnNfb2ZmbG9hZF9pbml0KHZvaWQpO1xcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmgtMTEtaW50IHVkcHY2X29mZmxvYWRfaW5pdCh2b2lkKTtcXG4tLVxcbm5ldC9pcHY2L21jYXN0X3Nub29wLmM9MTQ9c3RhdGljIGludCBpcHY2X21jX2NoZWNrX2lwNmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbWNhc3Rfc25vb3AuYy0zNi1cXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jOjM3OnN0YXRpYyBpbnQgaXB2Nl9tY19jaGVja19leHRoZHJzKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbWNhc3Rfc25vb3AuYy0zOC17XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jPTE3Mj1pbnQgaXB2Nl9tY19jaGVja19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L21jYXN0X3Nub29wLmMtMTc5LVxcbm5ldC9pcHY2L21jYXN0X3Nub29wLmM6MTgwOlxcdHJldCA9IGlwdjZfbWNfY2hlY2tfZXh0aGRycyhza2IpO1xcbm5ldC9pcHY2L21jYXN0X3Nub29wLmMtMTgxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoyMTowNy42MjQxODgwODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODkzNzYxMzYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXJzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IElQdjYgcm91dGluZyBoZWFkZXJzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHJldmlzaXQgYGlwdjZfcnRoZHJfcmN2YCB3aXRoaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBrZXJuZWwgcHJvY2Vzc2VzIGluY29taW5nIHBhY2tldHMgdGhhdCB1dGlsaXplIHJvdXRpbmcgaGVhZGVycywgc28gaXQncyB0aGUgcGVyZmVjdCBwbGFjZSB0byBzdGFydC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSB2YXJpb3VzIHR5cGVzIG9mIHJvdXRpbmcgaGVhZGVycyBhbmQgdGhlaXIgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIG5lY2Vzc2FyeSBzYW5pdHkgY2hlY2tzIGFuZCBwcm9jZXNzaW5nIHRvIHByZXZlbnQgcm91dGluZyBsb29wcyBhbmQgYXR0YWNrcy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoyMTo1Ni41NjE4MDQwMjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0NTpcXHRzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIDY0NjpcXHR7XFxuIDY0NzpcXHRcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxuIDY0ODpcXHRcXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuIDY0OTpcXHRcXHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHIgPSBOVUxMO1xcbiA2NTA6XFx0XFx0aW50IG4sIGk7XFxuIDY1MTpcXHRcXHRzdHJ1Y3QgaXB2Nl9ydF9oZHIgKmhkcjtcXG4gNjUyOlxcdFxcdHN0cnVjdCBydDBfaGRyICpydGhkcjtcXG4gNjUzOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiA2NTQ6XFx0XFx0aW50IGFjY2VwdF9zb3VyY2Vfcm91dGU7XFxuIDY1NTpcXHRcXG4gNjU2OlxcdFxcdGFjY2VwdF9zb3VyY2Vfcm91dGUgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VhY2NlcHRfc291cmNlX3JvdXRlKTtcXG4gNjU3OlxcdFxcbiA2NTg6XFx0XFx0aWYgKGlkZXYpXFxuIDY1OTpcXHRcXHRcXHRhY2NlcHRfc291cmNlX3JvdXRlID0gbWluKGFjY2VwdF9zb3VyY2Vfcm91dGUsXFxuIDY2MDpcXHRcXHRcXHRcXHRcXHRcXHQgIFJFQURfT05DRShpZGV2LVxcdTAwM2VjbmYuYWNjZXB0X3NvdXJjZV9yb3V0ZSkpO1xcbiA2NjE6XFx0XFxuIDY2MjpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgOCkgfHxcXG4gNjYzOlxcdFxcdCAgICAhcHNrYl9tYXlfcHVsbChza2IsIChza2JfdHJhbnNwb3J0X29mZnNldChza2IpICtcXG4gNjY0OlxcdFxcdFxcdFxcdFxcdCAoKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilbMV0gKyAxKSBcXHUwMDNjXFx1MDAzYyAzKSkpKSB7XFxuIDY2NTpcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDY2NjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNjY3OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNjY4OlxcdFxcdH1cXG4gNjY5OlxcdFxcbiA2NzA6XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3J0X2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDY3MTpcXHRcXG4gNjcyOlxcdFxcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkcikgfHxcXG4gNjczOlxcdFxcdCAgICBza2ItXFx1MDAzZXBrdF90eXBlICE9IFBBQ0tFVF9IT1NUKSB7XFxuIDY3NDpcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpO1xcbiA2NzU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDY3NjpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDY3NzpcXHRcXHR9XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdHN3aXRjaCAoaGRyLVxcdTAwM2V0eXBlKSB7XFxuIDY4MDpcXHRcXHRjYXNlIElQVjZfU1JDUlRfVFlQRV80OlxcbiA2ODE6XFx0XFx0XFx0Lyogc2VnbWVudCByb3V0aW5nICovXFxuIDY4MjpcXHRcXHRcXHRpZiAoIWlkZXYpXFxuIDY4MzpcXHRcXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbiA2ODQ6XFx0XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbiA2ODU6XFx0XFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG4gNjg2OlxcdFxcdFxcdC8qIHJwbCBzZWdtZW50IHJvdXRpbmcgKi9cXG4gNjg3OlxcdFxcdFxcdGlmICghaWRldilcXG4gNjg4OlxcdFxcdFxcdFxcdGdvdG8gZGlzYWJsZWQ7XFxuIDY4OTpcXHRcXHRcXHRyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IsIGlkZXYpO1xcbiA2OTA6XFx0XFx0ZGVmYXVsdDpcXG4gNjkxOlxcdFxcdFxcdGJyZWFrO1xcbiA2OTI6XFx0XFx0fVxcbiA2OTM6XFx0XFxuIDY5NDpcXHRsb29wZWRfYmFjazpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MjE6NTYuNTYxODk4Njg1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNTQ0NTU1NjA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIElQdjYgUm91dGluZyBIZWFkZXIgUmVjZXB0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIElQdjYgcm91dGluZyBleHRlbnNpb24gaGVhZGVycy4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gYGlwdjZfcnRoZHJfcmN2YCwgc2luY2UgdGhhdCdzIHRoZSBjb3JlIGhhbmRsZXIgZm9yIGFsbCByb3V0aW5nIGhlYWRlcnMsIGFuZCBJIGtub3cgdGhhdCB0aGUgYElQVjZfU1JDUlRfVFlQRV80YCBjb2RlIHBhdGggaXMgdGllZCB0byB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKS4gTWFrZXMgc2Vuc2UgdG8gc3RhcnQgdGhlcmUsIGF0IHRoZSB0b3AgbGV2ZWwsIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBkaXZpbmcgZGVlcC4gTm93LCBsZXQncyB0cmFjZSBgaXB2Nl9zcmhfcmN2YCBhbmQgc2VlIHdoYXQgaXQgaXMgcmVhbGx5IGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzM2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoyNDowMi4wMDc0NTc4OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHRcXG4gMzcxOlxcdHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIDM3MjpcXHR7XFxuIDM3MzpcXHRcXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuIDM3NDpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gMzc1OlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqaGRyO1xcbiAzNzY6XFx0XFx0c3RydWN0IGluNl9hZGRyICphZGRyO1xcbiAzNzc6XFx0XFx0aW50IGFjY2VwdF9zZWc2O1xcbiAzNzg6XFx0XFxuIDM3OTpcXHRcXHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gMzgwOlxcdFxcbiAzODE6XFx0XFx0YWNjZXB0X3NlZzYgPSBtaW4oUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cXHUwMDNlc2VnNl9lbmFibGVkKSxcXG4gMzgyOlxcdFxcdFxcdFxcdCAgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5zZWc2X2VuYWJsZWQpKTtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0aWYgKCFhY2NlcHRfc2VnNikge1xcbiAzODU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM4NjpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDM4NzpcXHRcXHR9XFxuIDM4ODpcXHRcXG4gMzg5OlxcdCNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG4gMzkwOlxcdFxcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XFxuIDM5MTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzkyOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMzkzOlxcdFxcdH1cXG4gMzk0OlxcdCNlbmRpZlxcbiAzOTU6XFx0XFxuIDM5NjpcXHRsb29wZWRfYmFjazpcXG4gMzk3OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xcbiAzOTg6XFx0XFx0XFx0aWYgKGhkci1cXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjYgfHwgaGRyLVxcdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNCkge1xcbiAzOTk6XFx0XFx0XFx0XFx0aW50IG9mZnNldCA9IChoZHItXFx1MDAzZWhkcmxlbiArIDEpIFxcdTAwM2NcXHUwMDNjIDM7XFxuIDQwMDpcXHRcXG4gNDAxOlxcdFxcdFxcdFxcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLFxcbiA0MDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcXG4gNDAzOlxcdFxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgb2Zmc2V0KTtcXG4gNDA0OlxcdFxcdFxcdFxcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksXFxuIDQwNTpcXHRcXHRcXHRcXHRcXHRcXHQgICBvZmZzZXQpO1xcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gNDA4OlxcdFxcdFxcdFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDQwOTpcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbiA0MTA6XFx0XFx0XFx0XFx0aWYgKGhkci1cXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjQpXFxuIDQxMTpcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xcbiA0MTI6XFx0XFx0XFx0XFx0X19za2JfdHVubmVsX3J4KHNrYiwgc2tiLVxcdTAwM2VkZXYsIG5ldCk7XFxuIDQxMzpcXHRcXG4gNDE0OlxcdFxcdFxcdFxcdG5ldGlmX3J4KHNrYik7XFxuIDQxNTpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDQxNjpcXHRcXHRcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdFxcdG9wdC1cXHUwMDNlc3JjcnQgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XFxuIDQxOTpcXHRcXHRcXHRvcHQtXFx1MDAzZWxhc3RvcHQgPSBvcHQtXFx1MDAzZXNyY3J0O1xcbiA0MjA6XFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IChoZHItXFx1MDAzZWhkcmxlbiArIDEpIFxcdTAwM2NcXHUwMDNjIDM7XFxuIDQyMTpcXHRcXHRcXHRvcHQtXFx1MDAzZW5ob2ZmID0gKFxcdTAwMjZoZHItXFx1MDAzZW5leHRoZHIpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDQyMjpcXHRcXG4gNDIzOlxcdFxcdFxcdHJldHVybiAxO1xcbiA0MjQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoyNDowMi4wMDc1NTMyNDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI1NjYyODQ1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElQdjYgU1JIIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHRvIGBpcHY2X3NyaF9yY3ZgIGluIHRoZSBJUHY2IHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSdyZSBjaGFuZ2luZyB0aGUgYHNrYl9wdXNoYCBhbmQgYHNrYl9wdWxsYCBjYWxscyBoZXJlLiAgUHJldmlvdXNseSwgdGhlIGNvZGUgbmFpdmVseSBhc3N1bWVkIHRoZSBJUHY2IGhlYWRlciB3YXMgZGlyZWN0bHkgYWRqYWNlbnQgdG8gdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIsIHVzaW5nIGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCBmb3IgcHVzaGluZyBhbmQgcHVsbGluZy4gIFRoYXQncyBhIGRlZmluaXRlIG92ZXJzaWdodCwgYW5kIGEgc3VidGxlIG9uZSBhdCB0aGF0LlxuXG5UaGUga2V5IGlzIGluIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGVyZSBjYW4gYmUgKm90aGVyKiBleHRlbnNpb24gaGVhZGVycyDigJMgSG9wLWJ5LUhvcCBvcHRpb25zLCBEZXN0aW5hdGlvbiBPcHRpb25zLCBvciBldmVuIGVuY2Fwc3VsYXRlZCBwYWNrZXRzIOKAkyBzaXR0aW5nIGJldHdlZW4gdGhlIG1haW4gSVB2NiBoZWFkZXIgYW5kIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyLiBUaGlzIG1lYW5zIHRoZSBvZmZzZXQgdG8gdGhlIGFjdHVhbCBJUHY2IGhlYWRlciAoYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCkgaXNuJ3QgYWx3YXlzIGEgZml4ZWQgc2l6ZS4gVGhlIG9sZCBjb2RlIHdhcyB2dWxuZXJhYmxlLlxuXG5Ob3cgSSBzZWUgaXQuIFRoZSB1cGRhdGVkIGNvZGUgY29ycmVjdGx5IHVzZXMgYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCB0byBkZXRlcm1pbmUgaG93IGZhciBpdCBuZWVkcyB0byAqcHVzaCogdG8gZ2V0IGJhY2sgdG8gdGhlIElQdjYgaGVhZGVyLCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgIHRvIHB1bGwgaXQgYmFjayB0byB0cmFuc3BvcnQgbGF5ZXIhIFdoZW4gd2UncmUgbG9vcGluZyBiYWNrIHRvIHByb2Nlc3MgdGhlIG5leHQgc2VnbWVudCwgdGhlIHBhdGNoIG5vdyB1c2VzIHRoaXMgdG8gYWNjb3VudCBmb3IgdGhlIHBvdGVudGlhbCBpbnRlcnZlbmluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBpcyBzaWduaWZpY2FudGx5IG1vcmUgcm9idXN0LlxuXG5JJ20gY29uZmlkZW50IHRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpbiBoYW5kbGluZyB0aGUgb2Zmc2V0cywgZXNwZWNpYWxseSB3aXRoIHBvdGVudGlhbGx5IG5lc3RlZCBoZWFkZXJzLCBpcyBwcmVjaXNlbHkgd2hhdCdzIHJlcXVpcmVkIGZvciBjb3JyZWN0IHBhY2tldCBwcm9jZXNzaW5nLlxuXG5BbmQgeWVzLCB0aGlzIHBhdGNoIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gVGhlIGZhY3QgdGhhdCBpdCdzIGJlZW4gdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgd2l0aCByYXcgc29ja2V0cywgdHVuL3RhcCwgYW5kIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcyBjb25maXJtcyB0aGF0IHRoaXMgaXMgYSB2YWxpZCBhbmQgdGVzdGVkIGZpeC5cblxuQWJzb2x1dGVseS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgY2FuIHNlZSBzZXZlcmFsIHBvdGVudGlhbCBhcmVhcyBvZiBhdHRhY2sgd2l0aCB0aGUgY29tcGxleCBoZWFkZXIgbWFuaXB1bGF0aW9ucy5cblRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGFuZCBGb2N1c1N5bWJvbHMuXG5JJ2xsIGxvb2sgZm9yIGBJUFY2X1NFRzZgIGFuZCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGluIGBuZXQvaXB2Ni9LY29uZmlnYCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGVuYWJsZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDg3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MjU6MDQuNTczODQwODgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY1NTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnLTUtXFxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctNy1cXHRib29sIFxcXCJUaGUgSVB2NiBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctMjAtXFxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbm5ldC9pcHY2L0tjb25maWctMjItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzgtXFxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxcbm5ldC9pcHY2L0tjb25maWctNDAtXFx0Ym9vbCBcXFwiSVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXFxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxcbm5ldC9pcHY2L0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBNb2JpbGl0eVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTE5LVxcbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxcbm5ldC9pcHY2L0tjb25maWctMTIxLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTQ5LVxcbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxcbm5ldC9pcHY2L0tjb25maWctMTUxLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTYxLVxcbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxcbm5ldC9pcHY2L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTc2LVxcbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxcbm5ldC9pcHY2L0tjb25maWctMTk3LVxcdGJvb2xcXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMDktXFxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXFxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEdSRSB0dW5uZWxcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1VcXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjMzLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cXHRib29sIFxcXCJJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjQyLVxcbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNDQtXFx0Ym9vbCBcXFwiSVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjU2LVxcbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxcbm5ldC9pcHY2L0tjb25maWctMjU4LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXFxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjY2LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjc4LVxcbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXFxubmV0L2lwdjYvS2NvbmZpZy0yODAtXFx0Ym9vbCBcXFwiSVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yODUtXFxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjg3LVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yOTktXFxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvS2NvbmZpZy0zMDEtXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzExLVxcbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXFxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXFxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXFx0Ym9vbCBcXFwiSVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMjctXFxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cXHRib29sIFxcXCJJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjI1OjA0LjYzMzUwMDczMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTY4NzQ4NzExNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEtjb25maWcgT3B0aW9ucyBmb3IgZXh0aGRycy5jKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbiBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQncyBjb250cm9sbGluZyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYGV4dGhkcnMuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgLCBhbmQgc3VyZSBlbm91Z2gsIHRoZXJlIGl0IGlzOiBgZXh0aGRycy5vYCBpcyBkaXJlY3RseSBsaW5rZWQgaW50byB0aGUgYGlwdjYteWAgbGlzdC4gVGhhdCBtZWFucyBpdCdzIHVuY29uZGl0aW9uYWxseSBidWlsdCBhbG9uZyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSB1bmRlciBgQ09ORklHX0lQVjZgLiBPa2F5LCBzbyBgQ09ORklHX0lQVjZgIGlzIHRoZSBwcmltYXJ5IGZhY3Rvci4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgc2FtZSBNYWtlZmlsZSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGluY2x1c2lvbnMgdGllZCB0byBgc2VnNmAgb3IgcG90ZW50aWFsbHkgYW5vdGhlciBgSVBWNmAgY29uZmlnIHRoYXQgbWlnaHQgYWxzbyBhZmZlY3QgaXQuIE5lZWQgdG8gY292ZXIgYWxsIHRoZSBiYXNlcywgbm8gc3RvbmUgdW50dXJuZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDg3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjI5OjIxLjUwODM3NDQ3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBUQ1AvSVAgKElORVQ2KSBsYXllci5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0lQVjYpICs9IGlwdjYub1xcbiAgIDc6XFx0XFxuICAgODpcXHRpcHY2LXkgOj1cXHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRhZGRybGFiZWwubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxcXFxuICAxMTpcXHRcXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXFxcXG4gIDEzOlxcdFxcdFxcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXFxuICAxNDpcXHRcXG4gIDE1OlxcdGlwdjYtJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjYub1xcbiAgMTY6XFx0aXB2Ni0kKENPTkZJR19JUFY2X01ST1VURSkgKz0gaXA2bXIub1xcbiAgMTc6XFx0XFxuICAxODpcXHRpcHY2LSQoQ09ORklHX1hGUk0pICs9IHhmcm02X3BvbGljeS5vIHhmcm02X3N0YXRlLm8geGZybTZfaW5wdXQubyBcXFxcXFxuICAxOTpcXHRcXHR4ZnJtNl9vdXRwdXQubyB4ZnJtNl9wcm90b2NvbC5vXFxuICAyMDpcXHRpcHY2LSQoQ09ORklHX05FVEZJTFRFUikgKz0gbmV0ZmlsdGVyLm9cXG4gIDIxOlxcdGlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYjZfcnVsZXMub1xcbiAgMjI6XFx0aXB2Ni0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDIzOlxcdGlwdjYtJChDT05GSUdfU1lOX0NPT0tJRVMpICs9IHN5bmNvb2tpZXMub1xcbiAgMjQ6XFx0aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgKz0gY2FsaXBzby5vXFxuICAyNTpcXHRpcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgKz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xcbiAgMjY6XFx0aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgKz0gc2VnNl9obWFjLm9cXG4gIDI3OlxcdGlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICs9IHJwbF9pcHR1bm5lbC5vXFxuICAyODpcXHRpcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICs9IGlvYW02X2lwdHVubmVsLm9cXG4gIDI5OlxcdFxcbiAgMzA6XFx0b2JqLSQoQ09ORklHX0lORVQ2X0FIKSArPSBhaDYub1xcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0lORVQ2X0VTUCkgKz0gZXNwNi5vXFxuICAzMjpcXHRvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICs9IGVzcDZfb2ZmbG9hZC5vXFxuICAzMzpcXHRvYmotJChDT05GSUdfSU5FVDZfSVBDT01QKSArPSBpcGNvbXA2Lm9cXG4gIDM0OlxcdG9iai0kKENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCkgKz0geGZybTZfdHVubmVsLm9cXG4gIDM1OlxcdG9iai0kKENPTkZJR19JTkVUNl9UVU5ORUwpICs9IHR1bm5lbDYub1xcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0lQVjZfTUlQNikgKz0gbWlwNi5vXFxuICAzNzpcXHRvYmotJChDT05GSUdfSVBWNl9JTEEpICs9IGlsYS9cXG4gIDM4OlxcdG9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0Kz0gbmV0ZmlsdGVyL1xcbiAgMzk6XFx0XFxuICA0MDpcXHRvYmotJChDT05GSUdfSVBWNl9WVEkpICs9IGlwNl92dGkub1xcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0lQVjZfU0lUKSArPSBzaXQub1xcbiAgNDI6XFx0b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG4gIDQzOlxcdG9iai0kKENPTkZJR19JUFY2X0dSRSkgKz0gaXA2X2dyZS5vXFxuICA0NDpcXHRvYmotJChDT05GSUdfSVBWNl9GT1UpICs9IGZvdTYub1xcbiAgNDU6XFx0XFxuICA0NjpcXHRvYmoteSArPSBhZGRyY29uZl9jb3JlLm8gZXh0aGRyc19jb3JlLm8gaXA2X2NoZWNrc3VtLm8gaXA2X2ljbXAub1xcbiAgNDc6XFx0b2JqLSQoQ09ORklHX0lORVQpICs9IG91dHB1dF9jb3JlLm8gcHJvdG9jb2wubyBcXFxcXFxuICA0ODpcXHRcXHRcXHRcXHRpcDZfb2ZmbG9hZC5vIGV4dGhkcnNfb2ZmbG9hZC5vXFxuICA0OTpcXHRcXG4gIDUwOlxcdG9iai0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkgKz0gaW5ldDZfaGFzaHRhYmxlcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjI5OjIxLjUwODQ0NDQwNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDYzMjc1ODQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJUHY2IENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZXNlIElQdjYgY29uZmlndXJhdGlvbnMuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gYENPTkZJR19JUFY2YCwgbmF0dXJhbGx5LiBJIHNlZSB0aGF0IHRoZXJlJ3MgYWxzbyB0aGUgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24sIGFuZCB3aXRoaW4gdGhhdCwgdGhpcyBjaGVjazpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkge1xuXHRcdGtmcmVlX3NrYihza2IpO1xuXHRcdHJldHVybiAtMTtcblx0fVxuI2VuZGlmXG5gYGBcblxuUmlnaHQsIHRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCB1c2VzIGBDT05GSUdfSVBWNl9TRUc2X0hNQUNgLCB3aGljaCBJJ20gZmFtaWxpYXIgd2l0aCwgYW5kIGJ5IGV4dGVuc2lvbiwgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgLiBTbywgYm90aCBvZiB0aG9zZSBjbGVhcmx5IHRpZSBpbnRvIElQdjYgc2VnbWVudCByb3V0aW5nLiBOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIG5hdHVyZSBvZiBgQ09ORklHX0lQVjZgLiBJcyBpdCBib29sZWFuIG9yIHRyaXN0YXRlPyBJIG5lZWQgdG8gY2hlY2sgYG5ldC9pcHY2L0tjb25maWdgIHRvIGJlIGNlcnRhaW4uXG5cbkxpbmUgNiwgaGVyZSB3ZSBnbzogYG1lbnVjb25maWcgSVBWNiBib29sIFwiVGhlIElQdjYgcHJvdG9jb2xcImAuIEFoLCBhIGBib29sYCBvcHRpb24uIEl0IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBJTkVUYCwgYXMgZXhwZWN0ZWQuIFNvLCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGVuYWJsZS9kaXNhYmxlIGNvbmZpZ3VyYXRpb24uIE5vdyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMYCBhbmQgYENPTkZJR19JUFY2X1NFRzZfSE1BQ2AgYXJlIGNvbmZpZ3VyZWQsIGFuZCBob3cgdGhleSByZWxhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6Mjk6MzIuMTQxMjA1MzYzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg1OlxcdFxcbiAyODY6XFx0Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAyODc6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDI4ODpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMjg5OlxcdFxcdHNlbGVjdCBMV1RVTk5FTFxcbiAyOTA6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAyOTE6XFx0XFx0c2VsZWN0IElQVjZfTVVMVElQTEVfVEFCTEVTXFxuIDI5MjpcXHRcXHRoZWxwXFxuIDI5MzpcXHRcXHQgIFN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpb24gb2YgcGFja2V0cyB3aXRoaW4gYW4gb3V0ZXIgSVB2NlxcbiAyOTQ6XFx0XFx0ICBoZWFkZXIgYW5kIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMjk1OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uIEFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGFkdmFuY2VkIGxvY2FsXFxuIDI5NjpcXHRcXHQgIHByb2Nlc3Npbmcgb2YgU1J2NiBwYWNrZXRzIGJhc2VkIG9uIHRoZWlyIGFjdGl2ZSBzZWdtZW50LlxcbiAyOTc6XFx0XFxuIDI5ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI5OTpcXHRcXG4gMzAwOlxcdGNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbiAzMDE6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4gMzAyOlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMDM6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAzMDQ6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuIDMwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cXG4gMzA4OlxcdFxcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMxMTpcXHRcXG4gMzEyOlxcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXFxuIDMxMzpcXHRcXHRkZWZfYm9vbCB5XFxuIDMxNDpcXHRcXHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAzMTU6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG4gMzE4OlxcdFxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4gMzE5OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMjA6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDMyMTpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDMyMjpcXHRcXHRoZWxwXFxuIDMyMzpcXHRcXHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMzI0OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjI5OjMyLjE0MTI3NjQxM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjAxNjg4OTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXJzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyBkaXZlIGludG8gdGhhdCBgaXB2Nl9ydGhkcl9yY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IGl0IGRvZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGVyZSBpdCdzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBzeXN0ZW0uIEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbCBjaGFpbi4gSSdtIGltYWdpbmluZyBpdCdzIHNvbWUgc29ydCBvZiBlbnRyeSBwb2ludCBvciBoYW5kbGVyIGZvciBpbmNvbWluZyBJUHY2IHJvdXRpbmcgaGVhZGVyIHBhY2tldHMsIHJpZ2h0PyBLbm93aW5nIHRoZSByZWdpc3RyYXRpb24gcG9pbnQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGluIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cuIEVzc2VudGlhbGx5LCB3aG8gY2FsbHMgdGhpcyBmdW5jdGlvbiwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gR290dGEgZ2V0IHRoZSBjb250ZXh0LiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCB0aGUgcmVnaXN0cmF0aW9uIHBvaW50IHF1aWNrbHkuIEkga25vdyBJJ3ZlIHdvcmtlZCB3aXRoIHRoaXMgYXJlYSBiZWZvcmUsIGJ1dCBteSBicmFpbiBuZWVkcyBhIHF1aWNrIHJlZnJlc2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Njg1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoyOTo1OC4xNTgxNjkyMzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzU6XFx0ZGlzYWJsZWQ6XFxuIDgzNjpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQVjZESVNBQkxFRCk7XFxuIDgzNzpcXHRcXHRyZXR1cm4gLTE7XFxuIDgzODpcXHR9XFxuIDgzOTpcXHRcXG4gODQwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgcnRoZHJfcHJvdG9jb2wgPSB7XFxuIDg0MTpcXHRcXHQuaGFuZGxlclxcdD1cXHRpcHY2X3J0aGRyX3JjdixcXG4gODQyOlxcdFxcdC5mbGFnc1xcdFxcdD1cXHRJTkVUNl9QUk9UT19OT1BPTElDWSxcXG4gODQzOlxcdH07XFxuIDg0NDpcXHRcXG4gODQ1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgZGVzdG9wdF9wcm90b2NvbCA9IHtcXG4gODQ2OlxcdFxcdC5oYW5kbGVyXFx0PVxcdGlwdjZfZGVzdG9wdF9yY3YsXFxuIDg0NzpcXHRcXHQuZmxhZ3NcXHRcXHQ9XFx0SU5FVDZfUFJPVE9fTk9QT0xJQ1ksXFxuIDg0ODpcXHR9O1xcbiA4NDk6XFx0XFxuIDg1MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIG5vZGF0YV9wcm90b2NvbCA9IHtcXG4gODUxOlxcdFxcdC5oYW5kbGVyXFx0PVxcdGRzdF9kaXNjYXJkLFxcbiA4NTI6XFx0XFx0LmZsYWdzXFx0XFx0PVxcdElORVQ2X1BST1RPX05PUE9MSUNZLFxcbiA4NTM6XFx0fTtcXG4gODU0OlxcdFxcbiA4NTU6XFx0aW50IF9faW5pdCBpcHY2X2V4dGhkcnNfaW5pdCh2b2lkKVxcbiA4NTY6XFx0e1xcbiA4NTc6XFx0XFx0aW50IHJldDtcXG4gODU4OlxcdFxcbiA4NTk6XFx0XFx0cmV0ID0gaW5ldDZfYWRkX3Byb3RvY29sKFxcdTAwMjZydGhkcl9wcm90b2NvbCwgSVBQUk9UT19ST1VUSU5HKTtcXG4gODYwOlxcdFxcdGlmIChyZXQpXFxuIDg2MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0cmV0ID0gaW5ldDZfYWRkX3Byb3RvY29sKFxcdTAwMjZkZXN0b3B0X3Byb3RvY29sLCBJUFBST1RPX0RTVE9QVFMpO1xcbiA4NjQ6XFx0XFx0aWYgKHJldClcXG4gODY1OlxcdFxcdFxcdGdvdG8gb3V0X3J0aGRyO1xcbiA4NjY6XFx0XFxuIDg2NzpcXHRcXHRyZXQgPSBpbmV0Nl9hZGRfcHJvdG9jb2woXFx1MDAyNm5vZGF0YV9wcm90b2NvbCwgSVBQUk9UT19OT05FKTtcXG4gODY4OlxcdFxcdGlmIChyZXQpXFxuIDg2OTpcXHRcXHRcXHRnb3RvIG91dF9kZXN0b3B0O1xcbiA4NzA6XFx0XFxuIDg3MTpcXHRvdXQ6XFxuIDg3MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NzM6XFx0b3V0X2Rlc3RvcHQ6XFxuIDg3NDpcXHRcXHRpbmV0Nl9kZWxfcHJvdG9jb2woXFx1MDAyNmRlc3RvcHRfcHJvdG9jb2wsIElQUFJPVE9fRFNUT1BUUyk7XFxuIDg3NTpcXHRvdXRfcnRoZHI6XFxuIDg3NjpcXHRcXHRpbmV0Nl9kZWxfcHJvdG9jb2woXFx1MDAyNnJ0aGRyX3Byb3RvY29sLCBJUFBST1RPX1JPVVRJTkcpO1xcbiA4Nzc6XFx0XFx0Z290byBvdXQ7XFxuIDg3ODpcXHR9O1xcbiA4Nzk6XFx0XFxuIDg4MDpcXHR2b2lkIGlwdjZfZXh0aGRyc19leGl0KHZvaWQpXFxuIDg4MTpcXHR7XFxuIDg4MjpcXHRcXHRpbmV0Nl9kZWxfcHJvdG9jb2woXFx1MDAyNm5vZGF0YV9wcm90b2NvbCwgSVBQUk9UT19OT05FKTtcXG4gODgzOlxcdFxcdGluZXQ2X2RlbF9wcm90b2NvbChcXHUwMDI2ZGVzdG9wdF9wcm90b2NvbCwgSVBQUk9UT19EU1RPUFRTKTtcXG4gODg0OlxcdFxcdGluZXQ2X2RlbF9wcm90b2NvbChcXHUwMDI2cnRoZHJfcHJvdG9jb2wsIElQUFJPVE9fUk9VVElORyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjI5OjU4LjE1ODI4OTQxOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjAwMzk0NDUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBSb3V0aW5nIEhlYWRlciBSZWNlcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgSVB2NiByb3V0aW5nIGhlYWRlcnMgYXJlIGhhbmRsZWQuIGBpcHY2X3J0aGRyX3JjdmAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBpdCdzIHRoZSBwcm90b2NvbCBoYW5kbGVyIGZvciBgSVBQUk9UT19ST1VUSU5HYC4gV2hlbiBhbiBJUHY2IHBhY2tldCB3aXRoIGEgcm91dGluZyBoZWFkZXIgY29tZXMgaW4sIGBpcHY2X3J0aGRyX3JjdmAgZ2V0cyB0aGUgY2FsbCwgYW5kIHNwZWNpZmljYWxseSBmb3IgYElQVjZfU1JDUlRfVFlQRV80YCwgaXQgZGVsZWdhdGVzIHRvIGBpcHY2X3NyaF9yY3ZgLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciBlaXRoZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBgc3RhdGljYC4gWXVwLCB0aGV5IGFyZTogYHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpYCBhbmQgYHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilgLiBUaGF0J3MgdXNlZnVsIGluZm9ybWF0aW9uLlxuXG5Ob3csIGxldCdzIHNlZSB3aGVyZSBgaXB2Nl9ydGhkcl9yY3ZgIGlzIHVzZWQuIFJpZ2h0LCBpdCdzIHJlZ2lzdGVyZWQgaW4gYHJ0aGRyX3Byb3RvY29sYC4gSXQncyBwb2ludGVkIHRvIGJ5IHRoZSBgaGFuZGxlcmAgcG9pbnRlciB3aXRoaW4gdGhlIGBpbmV0Nl9wcm90b2NvbGAgc3RydWN0LCBzbyB0aGUgY29tcGlsZXIgaXMgdW5saWtlbHkgdG8gaW5saW5lIGl0LiBJZiB3ZSdyZSBsb29raW5nIGZvciBzeW1ib2xzIHRvIGFuYWx5emUgaW4gbW9yZSBkZXB0aCwgdGhpcyBpcyBpbXBvcnRhbnQuXG5cblNvLCB3aGF0IGFib3V0IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhlIGNhbmRpZGF0ZXMgZm9yIGBGb2N1c1N5bWJvbHNgPyBMZXQncyBxdWlja2x5IHNjYW4gYGV4dGhkcnMuY2AgYW5kIGVsc2V3aGVyZS4gWWVwLCBpbiBgZXh0aGRycy5jYCwgd2UgaGF2ZSBgaXB2Nl9ydGhkcl9yY3ZgIGFuZCBgaXB2Nl9zcmhfcmN2YC4gTWFrZXMgc2Vuc2UuXG5cbkFscmlnaHQsIHNvIHRoZSBmYWN0IHRoYXQgYGlwdjZfcnRoZHJfcmN2YCBpcyByZWZlcmVuY2VkIGluIHRoYXQgYHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgcnRoZHJfcHJvdG9jb2wgPSB7IC5oYW5kbGVyID0gaXB2Nl9ydGhkcl9yY3YsIC4uLiB9O2AgZGVjbGFyYXRpb24gbWVhbnMgdGhlIGNvbXBpbGVyICpjYW4ndCogaW5saW5lIGl0LCB0aGF0J3MgY3J1Y2lhbC4gXG5cbk5vdywgYGlwdjZfc3JoX3JjdmAsIG9uIHRoZSBvdGhlciBoYW5kLCAqbWlnaHQqIGJlIGlubGluZWQgd2l0aGluIGBpcHY2X3J0aGRyX3JjdmAsIG9yIGl0IG1pZ2h0IG5vdCDigJMgZGVwZW5kcyBvbiB0aGUgY29tcGlsZXIncyBvcHRpbWl6YXRpb24uIFNvLCBib3RoIGBpcHY2X3J0aGRyX3JjdmAgYW5kIGBpcHY2X3NyaF9yY3ZgIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gV2Ugc2hvdWxkIGNvbnNpZGVyIGJvdGguXG5cbkZpbmFsbHksIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHNjYW4gdGhlIGVudGlyZSBgbmV0L2lwdjYvZXh0aGRycy5jYCBmaWxlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBKdXN0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjMwOjIwLjE2MjIzNzE2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDQ0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuYy02NC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NjU6c3RhdGljIGJvb2wgaXA2X3Rsdm9wdF91bmtub3duKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYsXFxubmV0L2lwdjYvZXh0aGRycy5jLTY2LVxcdFxcdFxcdCAgICAgICBib29sIGRpc2FsbG93X3Vua25vd25zKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTEwMy1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA0OnN0YXRpYyBib29sIGlwdjZfaG9wX3JhKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMDU6c3RhdGljIGJvb2wgaXB2Nl9ob3BfaW9hbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKTtcXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA2OnN0YXRpYyBib29sIGlwdjZfaG9wX2p1bWJvKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMDc6c3RhdGljIGJvb2wgaXB2Nl9ob3BfY2FsaXBzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTA4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X01JUDYpXFxubmV0L2lwdjYvZXh0aGRycy5jOjEwOTpzdGF0aWMgYm9vbCBpcHY2X2Rlc3RfaGFvKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTAtI2VuZGlmXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTEzLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMTQ6c3RhdGljIGJvb2wgaXA2X3BhcnNlX3Rsdihib29sIGhvcGJ5aG9wLFxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTUtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTIzMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9NSVA2KVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoyMzI6c3RhdGljIGJvb2wgaXB2Nl9kZXN0X2hhbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0yMzMte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTI5NS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6Mjk2OnN0YXRpYyBpbnQgaXB2Nl9kZXN0b3B0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0yOTcte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTM0MS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzQyOnN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzQzLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTQ4MC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NDgxOnN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbm5ldC9pcHY2L2V4dGhkcnMuYy00ODIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY0NC0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NjQ1OnN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ2LXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz04NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBub2RhdGFfcHJvdG9jb2wgPSB7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtODU0LVxcbm5ldC9pcHY2L2V4dGhkcnMuYzo4NTU6aW50IF9faW5pdCBpcHY2X2V4dGhkcnNfaW5pdCh2b2lkKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy04NTYte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTg3OS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6ODgwOnZvaWQgaXB2Nl9leHRoZHJzX2V4aXQodm9pZClcXG5uZXQvaXB2Ni9leHRoZHJzLmMtODgxLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy04OTItXFxubmV0L2lwdjYvZXh0aGRycy5jOjg5MzpzdGF0aWMgYm9vbCBpcHY2X2hvcF9yYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy04OTQte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTkwOS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6OTEwOnN0YXRpYyBib29sIGlwdjZfaG9wX2lvYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtOTExLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy05OTAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjk5MTpzdGF0aWMgYm9vbCBpcHY2X2hvcF9qdW1ibyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy05OTIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTEwMzMtXFxubmV0L2lwdjYvZXh0aGRycy5jOjEwMzQ6c3RhdGljIGJvb2wgaXB2Nl9ob3BfY2FsaXBzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMDM1LXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMDUzLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMDU0OmludCBpcHY2X3BhcnNlX2hvcG9wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTA1NS17XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTA5OC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA5OTpzdGF0aWMgdTggaXB2Nl9wdXNoX3J0aGRyMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwcm90byxcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTEwMC1cXHRcXHRcXHQgICBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKm9wdCxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTIzLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMTI0OnN0YXRpYyB1OCBpcHY2X3B1c2hfcnRoZHI0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHByb3RvLFxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTI1LVxcdFxcdFxcdCAgIHN0cnVjdCBpcHY2X3J0X2hkciAqb3B0LFxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTExNzItXFxubmV0L2lwdjYvZXh0aGRycy5jOjExNzM6c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwcm90byxcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE3NC1cXHRcXHRcXHQgIHN0cnVjdCBpcHY2X3J0X2hkciAqb3B0LFxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTExOTEtXFxubmV0L2lwdjYvZXh0aGRycy5jOjExOTI6c3RhdGljIHU4IGlwdjZfcHVzaF9leHRoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sIHU4IHR5cGUsIHN0cnVjdCBpcHY2X29wdF9oZHIgKm9wdClcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE5My17XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTIwMC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTIwMTp1OCBpcHY2X3B1c2hfbmZyYWdfb3B0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCxcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTIwMi1cXHRcXHRcXHR1OCBwcm90byxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjE4LVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMjE5OnU4IGlwdjZfcHVzaF9mcmFnX29wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsIHU4IHByb3RvKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjIwLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjI0LX1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTIyNTpFWFBPUlRfU1lNQk9MKGlwdjZfcHVzaF9mcmFnX29wdHMpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjI2LVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0xMjI3PXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqXFxubmV0L2lwdjYvZXh0aGRycy5jOjEyMjg6aXB2Nl9kdXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0KVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjI5LXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjQ2LX1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcHY2X2R1cF9vcHRpb25zKTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTI0OC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTI0OTpzdGF0aWMgdm9pZCBpcHY2X3JlbmV3X29wdGlvbihpbnQgcmVuZXd0eXBlLFxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjUwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpcHY2X29wdF9oZHIgKipkZXN0LFxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTEyODY9c3RydWN0IGlwdjZfdHhvcHRpb25zICpcXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTI4NzppcHY2X3JlbmV3X29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCxcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTI4OC1cXHRcXHQgICBpbnQgbmV3dHlwZSwgc3RydWN0IGlwdjZfb3B0X2hkciAqbmV3b3B0KVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTEzNDItXFxubmV0L2lwdjYvZXh0aGRycy5jOjEzNDM6c3RydWN0IGlwdjZfdHhvcHRpb25zICpfX2lwdjZfZml4dXBfb3B0aW9ucyhzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdF9zcGFjZSxcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM0NC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM2MC19XFxubmV0L2lwdjYvZXh0aGRycy5jOjEzNjE6RVhQT1JUX1NZTUJPTF9HUEwoX19pcHY2X2ZpeHVwX29wdGlvbnMpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMzYyLVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTEzNzMtICovXFxubmV0L2lwdjYvZXh0aGRycy5jOjEzNzQ6c3RydWN0IGluNl9hZGRyICpfX2ZsNl91cGRhdGVfZHN0KHN0cnVjdCBmbG93aTYgKmZsNixcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM3NS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LFxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTE0MDEtfVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxNDAyOkVYUE9SVF9TWU1CT0xfR1BMKF9fZmw2X3VwZGF0ZV9kc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozMDoyMC4yMTExNTE2M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzUyNzg3MTM3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgSGFuZGxpbmcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVycywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSByZWNlaXZpbmcgZW5kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBrZXkgZnVuY3Rpb25zOiBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnRoZHJfcmN2YC4gYGlwdjZfc3JoX3JjdmAsIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBpcyB0aGUgY29yZSBmdW5jdGlvbiBJIG5lZWQgdG8gbG9vayBhdCBiZWNhdXNlIGl0J3MgdGhlIGRpcmVjdGx5IG1vZGlmaWVkIG9uZS4gSSdsbCByZW1lbWJlciB0aGF0IGBpcHY2X3J0aGRyX3JjdmAgaXMgYWN0aW5nIGFzIHRoZSBvdXRlciBoYW5kbGVyLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBPYnZpb3VzbHksIGBJUFY2YCBpcyBmdW5kYW1lbnRhbCwgZW5hYmxpbmcgdGhlIGVudGlyZSBJUHY2IHN0YWNrLCBpbmNsdWRpbmcgYG5ldC9pcHY2L2AuIEknbGwgYWxzbyBiZSBsb29raW5nIGZvciBgSVBWNl9TRUc2X0hNQUNgLCBzaW5jZSB0aGUgYHNlZzZfaG1hY192YWxpZGF0ZV9za2JgIGZ1bmN0aW9uIGlzIHRlc3RlZCB1bmRlciB0aGlzIGNvbmZpZy4gRmluYWxseSwgdGhlcmUncyBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgd2hpY2ggaGFuZGxlcyB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIFNSSCBvciwgbW9yZSBicm9hZGx5LCBgc2VnNmAuIExldCdzIHBlcmZvcm0gYSBxdWljayBgZ3JlcGAgc2VhcmNoIHdpdGhpbiB0aGUgYG5ldC9pcHY2L2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZGVwZW5kZW50IGFuZCByZWxhdGVkIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM5OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozMzoxNS40ODk4NjgzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwOTY5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQVjZfU0VHNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgKz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI2OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMjctaXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMjktXFx0LnNlZzZfZW5hYmxlZFxcdFxcdD0gMCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIzMDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMzEtXFx0LnNlZzZfcmVxdWlyZV9obWFjXFx0PSAwLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNDY9c3RhdGljIHN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mX2RmbHQgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0LVxcdC5zZWc2X2VuYWJsZWRcXHRcXHQ9IDAsXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyOTU6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk2LVxcdC5zZWc2X3JlcXVpcmVfaG1hY1xcdD0gMCxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzM4LVxcdGFycmF5W0RFVkNPTkZfU0VHNl9FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZXNlZzZfZW5hYmxlZCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzM5OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3NDAtXFx0YXJyYXlbREVWQ09ORl9TRUc2X1JFUVVJUkVfSE1BQ10gPSBSRUFEX09OQ0UoY25mLVxcdTAwM2VzZWc2X3JlcXVpcmVfaG1hYyk7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY4NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYWRkcmNvbmZfc3lzY3RsW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcyMjUtXFx0fSxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMjY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIyNy1cXHR7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDctI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2LmhcXHUwMDNlXFxubmV0L2lwdjYvZXh0aGRycy5jOjQ4OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDktI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2X2htYWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODgtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM4OTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvZXh0aGRycy5jLTM5MC1cXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkge1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTExMjQ9c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1Mi1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTE1MzojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvZXh0aGRycy5jLTExNTQtXFx0aWYgKHNyX2hhc19obWFjKHNyX3BoZHIpKSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmM9MTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzZWc2X2dlbmxfcG9saWN5W1NFRzZfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYy0xNTAtXFxubmV0L2lwdjYvc2VnNi5jOjE1MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNi5jLTE1Mi1cXG4tLVxcbm5ldC9pcHY2L3NlZzYuYz0yNjY9c3RhdGljIGludCBzZWc2X2dlbmxfZ2V0X3R1bnNyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjYvc2VnNi5jLTI5OS1cXG5uZXQvaXB2Ni9zZWc2LmM6MzAwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2LmMtMzAxLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvZHN0X2NhY2hlLmhcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjI2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjctI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2X2htYWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0xNDE9c3RhdGljIGludCBfX3NlZzZfZG9fc3JoX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yMDEtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjIwMjojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIwMy1cXHRpZiAoc3JfaGFzX2htYWMoaXNyaCkpIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMjU9c3RhdGljIGludCBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zMjgtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjMyOTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTMzMC1cXHRpZiAodW5saWtlbHkoIXNraXBfc3JoIFxcdTAwMjZcXHUwMDI2IHNyX2hhc19obWFjKGlzcmgpKSkge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM0NT1zdGF0aWMgaW50IF9fc2VnNl9kb19zcmhfaW5saW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zODAtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjM4MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTM4Mi1cXHRpZiAoc3JfaGFzX2htYWMoaXNyaCkpIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNy0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFxcdTAwM2VcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6Mjg6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzZfaG1hYy5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI1LVxcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIzMj1zdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQxOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyLVxcdGlmIChzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz03NTg9c3RhdGljIGludCBlbmRfZmx2ODk4Nl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NjktXFx0cGluZm8gPSBzZWc2X2dldF9zcmhfcGt0aW5mbyhzcmgpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NzA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NzEtXFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozMzoxNS41MzQ5Njg3MjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU3MzgzNzA2NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQdjYgRnV6emluZyBTZXR1cCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHdoYXQgd2UndmUgZ290IGhlcmUuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBmb2N1cyBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgdGFyZ2V0aW5nIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ydGhkcl9yY3ZgIGZvciBzcGVjaWZpYyBmdXp6aW5nIGF0dGVudGlvbi4gVGhvc2UgYXJlIGltcG9ydGFudCwgYW5kIHJpZ2h0IHdoZXJlIEknZCBleHBlY3QgdXMgdG8gYmUgZm9jdXNpbmcgaWYgd2UncmUgZGVhbGluZyB3aXRoIHRob3NlIHByb3RvY29scy5cblxuTmV4dCwgSSBzZWUgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGVuYWJsZWQuIFdlIGhhdmUgYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYW5kIGBJUFY2X1NFRzZfSE1BQ2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkLCBiZWNhdXNlIHRoZXkgYXJlIGNydWNpYWwgZm9yIHRlc3RpbmcgdGhvc2Ugc3BlY2lmaWMgZmVhdHVyZXMuIEkgc2VlIHRoZXkncmUgcHJvdmlkZWQgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgb3ZlcmFsbCBpbnN0cnVjdGlvbnMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYWxpZ25lZC4gWWVzLCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCBnb29kLiBJIHNlZSB0aGUgc2FtZSBmb2N1cyBzeW1ib2xzIGFuZCBlbmFibGUgY29uZmlndXJhdGlvbnMsIGNvbmZpcm1lZC4gVGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCBvbiBwb2ludC4gUGVyZmVjdCwgaXQgYWxsIGxvb2tzIHNvdW5kLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoZSBzZXR1cC4gSSdsbCBnbyBhaGVhZCBhbmQgZXhlY3V0ZSB0aGUgYHNldC1yZXN1bHRzYCBjb21tYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA5MSwiT3V0cHV0VG9rZW5zIjoxMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MzU6NTIuOTE4Njc3NTc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NzYxNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9ITUFDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NFRzZfSE1BQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdjZfc3JoX3JjdlwiLFxuICAgIFwiaXB2Nl9ydGhkcl9yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBza2IgcG9pbnRlciBhcml0aG1ldGljIChwdXNoIGFuZCBwdWxsIG9mZnNldHMpIGR1cmluZyBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcmVjZWl2ZSBwcm9jZXNzaW5nIHdoZW4gbG9vcGluZyBiYWNrIHBhY2tldHMgd2l0aCBtdWx0aXBsZSBzZWdtZW50cyBvciBwcmVjZWRpbmcgZXh0ZW5zaW9uIGhlYWRlcnMuIFRoaXMgY2hhbmdlcyBjb3JlIElQdjYgbmV0d29ya2luZyBiZWhhdmlvciBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozNTo1My4wNzg0NDg3NjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDk1MTkyNTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjM1OjUzLjA3OTI4OTA4MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNDk1MTA2NjEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHByb2Nlc3NpbmcgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AgYnkgcmVwbGFjaW5nIGZpeGVkIGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCBhZGp1c3RtZW50cyBpbiBgc2tiX3B1c2goKWAgYW5kIGBza2JfcHVsbCgpYCB3aXRoIGR5bmFtaWMgb2Zmc2V0cyAoYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAgYW5kIGBza2JfdHJhbnNwb3J0X29mZnNldChza2IpYCkuIFRoaXMgY29ycmVjdGx5IGFkanVzdHMgYHNrYi1cXHUwMDNlZGF0YWAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXR3b3JrIGhlYWRlciBhbmQgdHJhbnNwb3J0IGhlYWRlciB3aGVuIGV4dGVuc2lvbiBoZWFkZXJzIHByZWNlZGUgdGhlIFNSSC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBmaWVsZHMsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvcnJlY3QgYHNrYl9wdXNoYC9gc2tiX3B1bGxgIGNhbGN1bGF0aW9ucyByZWxhdGUgdG8gc2tiIGJ1ZmZlciBib3VuZHMgYW5kIGhlYWRlciBhbGlnbm1lbnQsIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHNrX2J1ZmYgcnVudGltZSBhc3NlcnRpb25zIChlLmcuLCBgc2tiX3VuZGVyX3BhbmljYC9gc2tiX292ZXJfcGFuaWNgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZDQ0MzU3MzVhMzgxNWNmYTVmZTgyNDI2NzJlMmFmMzMzZDM5NjI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMTc6MTg6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbmluZGV4IDUxOTQxYWQ2NTZhMzYuLjA5YTQ1NTJmN2YwOGEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcbisrKyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuQEAgLTQ0NSw3ICs0NDUsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuIFx0aGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQtLTtcbiBcdGFkZHIgPSBoZHItXHUwMDNlc2VnbWVudHMgKyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiBcbi1cdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4rXHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gXG4gXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbiBcdFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xuQEAgLTQ2OSw3ICs0NjksNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4rXHRcdHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XG4gXHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozNTo1My4wNzkyOTM3MTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE4Mzk2MjI2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHBhdGNoOlxuXG4qKkV2YWx1YXRpbmcgdGhlIEtNU0FOIEZ1enppbmcgTmVjZXNzaXR5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGl0cyBvd24gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLiBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gVGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIHRoaXMsIGFzIGFsd2F5cywgaXMgbWV0aG9kaWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIENvbnRleHQgaXMgZXZlcnl0aGluZywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXG5cbkknbSB0aGlua2luZyBJJ2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIHJlbGV2YW50IGNvZGUsIG9yIHBlcmhhcHMgYGdyZXBwZXJgIGlmIEkganVzdCB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgYW5kIHJlZmVyZW5jZXMuIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGUgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBGb2N1c2luZyBvbiB0aGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJlYSB0aGlzIHBhdGNoIHRvdWNoZXMgYW5kIGhlbHAgbWUgZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiByaXNrIGFuZCwgc3Vic2VxdWVudGx5LCB3aGV0aGVyIGRlZGljYXRlZCBmdXp6aW5nIGlzIGEgd2lzZSBpbnZlc3RtZW50IG9mIHJlc291cmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MzY6NDQuOTE4OTIwNDk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzA6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcXG4gNDMxOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbiA0MzU6XFx0XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xcbiA0MzY6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHRcXHRJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7XFxuIDQzODpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDM5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDQ0MzpcXHRcXHR9XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xcbiA0NDY6XFx0XFx0YWRkciA9IGhkci1cXHUwMDNlc2VnbWVudHMgKyBoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQ7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbiA0NTE6XFx0XFx0XFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkciA9ICphZGRyO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcXG4gNDU2OlxcdFxcbiA0NTc6XFx0XFx0aWYgKHNrYl9kc3Qoc2tiKS1cXHUwMDNlZXJyb3IpIHtcXG4gNDU4OlxcdFxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiA0NTk6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0NjA6XFx0XFx0fVxcbiA0NjE6XFx0XFxuIDQ2MjpcXHRcXHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcXG4gNDYzOlxcdFxcdFxcdGlmIChpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQgXFx1MDAzYz0gMSkge1xcbiA0NjQ6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiA0NjU6XFx0XFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXFxuIDQ2NjpcXHRcXHRcXHRcXHRcXHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XFxuIDQ2NzpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDY4OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDY5OlxcdFxcdFxcdH1cXG4gNDcwOlxcdFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRcXHRza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpO1xcbiA0NzM6XFx0XFx0XFx0Z290byBsb29wZWRfYmFjaztcXG4gNDc0OlxcdFxcdH1cXG4gNDc1OlxcdFxcbiA0NzY6XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdHJldHVybiAtMTtcXG4gNDc5OlxcdH1cXG4gNDgwOlxcdFxcbiA0ODE6XFx0c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIDQ4MjpcXHR7XFxuIDQ4MzpcXHRcXHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcXG4gNDg0OlxcdFxcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcXG4gNDg1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiA0ODY6XFx0XFx0c3RydWN0IGlwdjZoZHIgKm9sZGhkcjtcXG4gNDg3OlxcdFxcdHVuc2lnbmVkIGludCBjaGRyX2xlbjtcXG4gNDg4OlxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZjtcXG4gNDg5OlxcdFxcdGludCBhY2NlcHRfcnBsX3NlZztcXG4gNDkwOlxcdFxcdGludCBpLCBlcnI7XFxuIDQ5MTpcXHRcXHR1NjQgbiA9IDA7XFxuIDQ5MjpcXHRcXHR1MzIgcjtcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0XFx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cXHUwMDNlcnBsX3NlZ19lbmFibGVkKSxcXG4gNDk1OlxcdFxcdFxcdFxcdCAgICAgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcXG4gNDk2OlxcdFxcdGlmICghYWNjZXB0X3JwbF9zZWcpIHtcXG4gNDk3OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0OTg6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0OTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozNjo0NC45MTkwMjA5MThaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMzMjM5ODcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgYWx0ZXJlZCBpbiByZWxhdGlvbiB0byBgaXB2Nl9zcmhfcmN2YC4gQ29udGV4dCBpcyBrZXkgaGVyZSwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY29kZSBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMzgwIHRocm91Z2ggNDUwIG9mIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBUaGlzIHNlY3Rpb24gc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBkdXJpbmcgdGhlIHJlY2VwdGlvbiBwcm9jZXNzLiBLbm93aW5nIHRoZSBleGFjdCBjaGFuZ2VzIGluIHRoYXQgc2VjdGlvbiB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2gsIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBtb2RpZmljYXRpb25zLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBzaWRlLWVmZmVjdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXTigJlzIGNoYW5naW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHRvIHByb3Blcmx5IGV2YWx1YXRlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjgwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozNjo0OS4yNTE0MjIwMTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFxuIDM4MTpcXHRcXHRhY2NlcHRfc2VnNiA9IG1pbihSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VzZWc2X2VuYWJsZWQpLFxcbiAzODI6XFx0XFx0XFx0XFx0ICBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRpZiAoIWFjY2VwdF9zZWc2KSB7XFxuIDM4NTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzg2OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMzg3OlxcdFxcdH1cXG4gMzg4OlxcdFxcbiAzODk6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbiAzOTA6XFx0XFx0aWYgKCFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpIHtcXG4gMzkxOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzOTI6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAzOTM6XFx0XFx0fVxcbiAzOTQ6XFx0I2VuZGlmXFxuIDM5NTpcXHRcXG4gMzk2OlxcdGxvb3BlZF9iYWNrOlxcbiAzOTc6XFx0XFx0aWYgKGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCA9PSAwKSB7XFxuIDM5ODpcXHRcXHRcXHRpZiAoaGRyLVxcdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNiB8fCBoZHItXFx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KSB7XFxuIDM5OTpcXHRcXHRcXHRcXHRpbnQgb2Zmc2V0ID0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksXFxuIDQwMjpcXHRcXHRcXHRcXHRcXHRcXHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xcbiA0MDM6XFx0XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xcbiA0MDQ6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcXG4gNDA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCk7XFxuIDQwNjpcXHRcXG4gNDA3OlxcdFxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA0MDg6XFx0XFx0XFx0XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gNDA5OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XFxuIDQxMDpcXHRcXHRcXHRcXHRpZiAoaGRyLVxcdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNClcXG4gNDExOlxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuIDQxMjpcXHRcXHRcXHRcXHRfX3NrYl90dW5uZWxfcngoc2tiLCBza2ItXFx1MDAzZWRldiwgbmV0KTtcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0XFx0XFx0XFx0bmV0aWZfcngoc2tiKTtcXG4gNDE1OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDE2OlxcdFxcdFxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0XFx0XFx0b3B0LVxcdTAwM2VzcmNydCA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcXG4gNDE5OlxcdFxcdFxcdG9wdC1cXHUwMDNlbGFzdG9wdCA9IG9wdC1cXHUwMDNlc3JjcnQ7XFxuIDQyMDpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNDIxOlxcdFxcdFxcdG9wdC1cXHUwMDNlbmhvZmYgPSAoXFx1MDAyNmhkci1cXHUwMDNlbmV4dGhkcikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDQyNDpcXHRcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgXFx1MDAzZT0gKGhkci1cXHUwMDNlaGRybGVuIFxcdTAwM2VcXHUwMDNlIDEpKSB7XFxuIDQyNzpcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDQyODpcXHRcXHRcXHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXFxuIDQyOTpcXHRcXHRcXHRcXHRcXHQgICgoXFx1MDAyNmhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCkgLVxcbiA0MzA6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcXG4gNDMxOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbiA0MzU6XFx0XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xcbiA0MzY6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHRcXHRJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7XFxuIDQzODpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDM5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MzY6NDkuMjUxNTcxMjI3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4Nzc4NzU0NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVB2NiBTUkggUmVjZWl2ZSBQYXRoIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjb21taXQgaW4gYGlwdjZfc3JoX3JjdmAgY2F1Z2h0IG15IGV5ZS4gVGhleSd2ZSByZXBsYWNlZCB0aGUgZml4ZWQgYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgIHdpdGggYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgIGluIHRoZSBgc2tiX3B1c2hgIGFuZCBgc2tiX3B1bGxgIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IHRoZSBjaGFuZ2U/IEl0IHNlZW1zIHRoZXkncmUgaGFuZGxpbmcgY2FzZXMgd2l0aCBleHRlbnNpb24gaGVhZGVycyBwcmVjZWRpbmcgdGhlIFNSSCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIHRoZSBgc2tiLVx1MDAzZWRhdGFgIHBvaW50ZXIgaXMgYWxyZWFkeSBwYXN0IHRoZSBJUHY2IGhlYWRlciBhbmQgYXQgdGhlIFNSSCBoZWFkZXIgb3IgdHJhbnNwb3J0IGhlYWRlci5cblxuYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCBnaXZlcyBhIG5lZ2F0aXZlIG9mZnNldCBpbiB0aGVzZSBzY2VuYXJpb3MgKGJlY2F1c2UgYHNrYi1cdTAwM2VkYXRhYCBpcyBhaGVhZCBvZiBgc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyYCkuIFRodXMsIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGVmZmVjdGl2ZWx5IG1vdmVzIHRoZSBkYXRhIHBvaW50ZXIgYmFjayB0byB0aGUgKmFjdHVhbCogc3RhcnQgb2YgdGhlIElQdjYgaGVhZGVyLCBub3QganVzdCBhc3N1bWluZyBpdCdzIGEgZml4ZWQgc2l6ZSBhd2F5LiBTaW1pbGFybHksIGBza2JfdHJhbnNwb3J0X29mZnNldChza2IpYCBjb3JyZWN0bHkgcG9zaXRpb25zIHRoZSBwb2ludGVyIHRvIHRoZSB0cmFuc3BvcnQgaGVhZGVyLCBhcyB0aGUgZGF0YSBpcyBhbHJlYWR5IGFoZWFkIG9mIHRoZSBuZXR3b3JrIGhlYWRlci5cblxuTm93LCBsZXQncyBwaXZvdCB0byB0aGUgS01TQU4gYW5nbGUuIEZpcnN0LCBkb2VzIHRoaXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYW55IHdheT8gTm8sIGl0J3Mgb3BlcmF0aW5nIG9uIHJlY2VpdmVkIFNLQnMgd2l0aGluIHRoZSBrZXJuZWwgbmV0d29yayBzdGFjay4gV2UncmUgbm90IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBkaXJlY3RseSAoaXQncyBwb2ludGVyIGFyaXRobWV0aWMgd2l0aGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlKSwgb3IgY3JlYXRpbmcgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgaGFyYm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIGFyZSBoYXBwZW5pbmcgaGVyZS4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93IG9yIHVuZGVyZmxvdz8gVGhpcyBjaGFuZ2UgaXMgZGVzaWduZWQgdG8gKmZpeCogcG90ZW50aWFsIGlzc3VlcyB3aXRoIGJ1ZmZlciBtYW5hZ2VtZW50IHdoZW4gZXh0ZW5zaW9uIGhlYWRlcnMgYXJlIGludm9sdmVkLCBieSBjb3JyZWN0bHkgYWRqdXN0aW5nIGBza2ItXHUwMDNlZGF0YWAgYW5kIGVuc3VyaW5nIHRoZSBza2IgaGVhZC90YWlsIHN0YXkgaW4gc3luYy4gSW5hY2N1cmF0ZSBgc2tiX3B1c2hgIC8gYHNrYl9wdWxsYCBjb3VsZCBjYXVzZSBtaXNhbGlnbm1lbnQsIGJ1dCBleGlzdGluZyBrZXJuZWwgY2hlY2tzIGFuZCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKSBhcmUgZGVzaWduZWQgdG8gY2F0Y2ggcHJlY2lzZWx5IHRoZXNlIHR5cGVzIG9mIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZSBlcnJvcnMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCAqKmRvZXMgbm90KiogaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGlzIHRoZSBjb3JyZWN0IHRvb2wgaGVyZSwgY292ZXJpbmcgdGhlIGJ1ZmZlciBtYW5pcHVsYXRpb24gc2lkZSBvZiB0aGluZ3MsIGFuZCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTQU5pdGl6ZXIpIGlzIG5vdCBuZWNlc3NhcnkuIFdlIGhhdmUgcHJvcGVyIGJvdW5kcyBjaGVja2luZywgYW5kIGFueSBidWZmZXIgbWFuaXB1bGF0aW9uIGlzc3VlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2tiIGNoZWNrcy5cblxuU28sIHRvIHN1bW1hcml6ZTogdGhlIHBhdGNoIGNvcnJlY3RzIHRoZSBTS0IgZGF0YSBwb2ludGVyIGFkanVzdG1lbnQgaW4gYGlwdjZfc3JoX3JjdigpYCBieSB1c2luZyBkeW5hbWljIG9mZnNldHMgKGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGFuZCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWApIGluc3RlYWQgb2YgZml4ZWQgc2l6ZXMsIHdoaWNoIGVuc3VyZXMgdGhlIFNLQiBwb2ludGVycyBhcmUgcHJvcGVybHkgYWxpZ25lZCB3aXRoIG5ldHdvcmsvdHJhbnNwb3J0IGhlYWRlcnMgd2hlbiBleHRlbnNpb24gaGVhZGVycyBhcmUgcHJlc2VudC4gVGhpcyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGFueSB3YXkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIG1hbmFnZW1lbnQgYXJlIGNhdWdodCBieSBLQVNBTi4gU28sIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NSwiT3V0cHV0VG9rZW5zIjoyNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozNzozOC4wMzAzMjg3MTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBwcm9jZXNzaW5nIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGJ5IHJlcGxhY2luZyBmaXhlZCBgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWAgYWRqdXN0bWVudHMgaW4gYHNrYl9wdXNoKClgIGFuZCBgc2tiX3B1bGwoKWAgd2l0aCBkeW5hbWljIG9mZnNldHMgKGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGFuZCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWApLiBUaGlzIGNvcnJlY3RseSBhZGp1c3RzIGBza2ItXFx1MDAzZWRhdGFgIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV0d29yayBoZWFkZXIgYW5kIHRyYW5zcG9ydCBoZWFkZXIgd2hlbiBleHRlbnNpb24gaGVhZGVycyBwcmVjZWRlIHRoZSBTUkguXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGFjY2VzcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZmllbGRzLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgdmlhIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb3JyZWN0IGBza2JfcHVzaGAvYHNrYl9wdWxsYCBjYWxjdWxhdGlvbnMgcmVsYXRlIHRvIHNrYiBidWZmZXIgYm91bmRzIGFuZCBoZWFkZXIgYWxpZ25tZW50LCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBza19idWZmIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoZS5nLiwgYHNrYl91bmRlcl9wYW5pY2AvYHNrYl9vdmVyX3BhbmljYCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHByb2Nlc3NpbmcgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AgYnkgcmVwbGFjaW5nIGZpeGVkIGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCBhZGp1c3RtZW50cyBpbiBgc2tiX3B1c2goKWAgYW5kIGBza2JfcHVsbCgpYCB3aXRoIGR5bmFtaWMgb2Zmc2V0cyAoYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAgYW5kIGBza2JfdHJhbnNwb3J0X29mZnNldChza2IpYCkuIFRoaXMgY29ycmVjdGx5IGFkanVzdHMgYHNrYi1cXHUwMDNlZGF0YWAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXR3b3JrIGhlYWRlciBhbmQgdHJhbnNwb3J0IGhlYWRlciB3aGVuIGV4dGVuc2lvbiBoZWFkZXJzIHByZWNlZGUgdGhlIFNSSC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBmaWVsZHMsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvcnJlY3QgYHNrYl9wdXNoYC9gc2tiX3B1bGxgIGNhbGN1bGF0aW9ucyByZWxhdGUgdG8gc2tiIGJ1ZmZlciBib3VuZHMgYW5kIGhlYWRlciBhbGlnbm1lbnQsIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHNrX2J1ZmYgcnVudGltZSBhc3NlcnRpb25zIChlLmcuLCBgc2tiX3VuZGVyX3BhbmljYC9gc2tiX292ZXJfcGFuaWNgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzpwgw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 16:32:58 +0000 UTC FinishedAt: 2026-08-28 17:37:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_HMAC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_HMAC" ], "series_id": "3daef668-b849-4df9-8594-c6ce872725c3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipv6_srh_rcv", "ipv6_rthdr_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MThtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfSE1BQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3J0aGRyX3JjdiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBwcm9jZXNzaW5nIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGJ5IHJlcGxhY2luZyBmaXhlZCBgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWAgYWRqdXN0bWVudHMgaW4gYHNrYl9wdXNoKClgIGFuZCBgc2tiX3B1bGwoKWAgd2l0aCBkeW5hbWljIG9mZnNldHMgKGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGFuZCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWApLiBUaGlzIGNvcnJlY3RseSBhZGp1c3RzIGBza2ItXHUwMDNlZGF0YWAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXR3b3JrIGhlYWRlciBhbmQgdHJhbnNwb3J0IGhlYWRlciB3aGVuIGV4dGVuc2lvbiBoZWFkZXJzIHByZWNlZGUgdGhlIFNSSC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGFjY2VzcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZmllbGRzLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgdmlhIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb3JyZWN0IGBza2JfcHVzaGAvYHNrYl9wdWxsYCBjYWxjdWxhdGlvbnMgcmVsYXRlIHRvIHNrYiBidWZmZXIgYm91bmRzIGFuZCBoZWFkZXIgYWxpZ25tZW50LCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBza19idWZmIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoZS5nLiwgYHNrYl91bmRlcl9wYW5pY2AvYHNrYl9vdmVyX3BhbmljYCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZDQ0MzU3MzVhMzgxNWNmYTVmZTgyNDI2NzJlMmFmMzMzZDM5NjI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMTc6MTg6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5pbmRleCA1MTk0MWFkNjU2YTM2Li4wOWE0NTUyZjdmMDhhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbkBAIC00NDUsNyAmIzQzOzQ0NSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIFx0YWRkciA9IGhkci1cdTAwM2VzZWdtZW50cyAmIzQzOyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiBcbi1cdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4mIzQzO1x0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIFxuIFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpXG4gXHRcdHNlZzZfdXBkYXRlX2NzdW0oc2tiKTtcbkBAIC00NjksNyAmIzQzOzQ2OSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbiBcbi1cdFx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbiYjNDM7XHRcdHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XG4gXHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDQ0MzU3MzVhMzgxNWNmYTVmZTgyNDI2NzJlMmFmMzMzZDM5NjI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMTc6MTg6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggNTE5NDFhZDY1NmEzNi4uMDlhNDU1MmY3ZjA4YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtNDQ1LDcgJiM0Mzs0NDUsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogCWhkci0mZ3Q7c2VnbWVudHNfbGVmdC0tOwogCWFkZHIgPSBoZHItJmd0O3NlZ21lbnRzICYjNDM7IGhkci0mZ3Q7c2VnbWVudHNfbGVmdDsKIAotCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiYjNDM7CXNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKIAogCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKIAkJc2VnNl91cGRhdGVfY3N1bShza2IpOwpAQCAtNDY5LDcgJiM0Mzs0NjksNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogCQl9CiAJCWlwdjZfaGRyKHNrYiktJmd0O2hvcF9saW1pdC0tOwogCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiYjNDM7CQlza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpOwogCQlnb3RvIGxvb3BlZF9iYWNrOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJUHY2IFNvdXJjZSBSb3V0aW5nIEhlYWRlciBIYW5kbGluZyoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGRpZ2dpbmcgaW50byBgbmV0L2lwdjYvZXh0aGRycy5jYCwgYW5kIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGlwdjZfc3JoX3JjdmAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZSBpbnRlcmVzdCDigJMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc291cmNlIHJvdXRpbmcgaGVhZGVycyBpbiBJUHY2LCB3aGljaCwgd2hpbGUgbm90IGFzIHByZXZhbGVudCBhcyB0aGV5IG9uY2Ugd2VyZSwgc3RpbGwgcmVwcmVzZW50IGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3IgYW5kIGEgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkIGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lIDQ0NSBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgU1JIIGhhbmRsaW5nIGxvZ2ljIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmcgd2l0aCB0aGUgc2VnbWVudCBsaXN0LCB0aGUgcG9pbnRlciBhcml0aG1ldGljLCBhbnkgaG9wLWJ5LWhvcCBvcHRpb25zIGFuZCBpZiB0aGV5IGFyZSB2YWxpZGF0aW5nIHRoZSBzb3VyY2Ugcm91dGVzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDIwOlx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSAoaGRyLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiA0MjE6XHRcdFx0b3B0LVx1MDAzZW5ob2ZmID0gKFx1MDAyNmhkci1cdTAwM2VuZXh0aGRyKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDQyMjpcdFxuIDQyMzpcdFx0XHRyZXR1cm4gMTtcbiA0MjQ6XHRcdH1cbiA0MjU6XHRcbiA0MjY6XHRcdGlmIChoZHItXHUwMDNlc2VnbWVudHNfbGVmdCBcdTAwM2U9IChoZHItXHUwMDNlaGRybGVuIFx1MDAzZVx1MDAzZSAxKSkge1xuIDQyNzpcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gNDI4Olx0XHRcdGljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCxcbiA0Mjk6XHRcdFx0XHRcdCAgKChcdTAwMjZoZHItXHUwMDNlc2VnbWVudHNfbGVmdCkgLVxuIDQzMDpcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcbiA0MzE6XHRcdFx0cmV0dXJuIC0xO1xuIDQzMjpcdFx0fVxuIDQzMzpcdFxuIDQzNDpcdFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xuIDQzNTpcdFx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XG4gNDM2Olx0XHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXG4gNDM3Olx0XHRcdFx0XHRcdElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTtcbiA0Mzg6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0Mzk6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDQwOlx0XHRcdH1cbiA0NDE6XHRcbiA0NDI6XHRcdFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gNDQzOlx0XHR9XG4gNDQ0Olx0XG4gNDQ1Olx0XHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIDQ0NjpcdFx0YWRkciA9IGhkci1cdTAwM2VzZWdtZW50cyAmIzQzOyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiA0NDc6XHRcbiA0NDg6XHRcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcbiA0NDk6XHRcbiA0NTA6XHRcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxuIDQ1MTpcdFx0XHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XG4gNDUyOlx0XG4gNDUzOlx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyID0gKmFkZHI7XG4gNDU0Olx0XG4gNDU1Olx0XHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcbiA0NTY6XHRcbiA0NTc6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA0NTg6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNDU5Olx0XHRcdHJldHVybiAtMTtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRcdGlmIChza2JfZHN0X2Rldihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcbiA0NjM6XHRcdFx0aWYgKGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDQ2NDpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA0NjU6XHRcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiA0NjY6XHRcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiA0Njc6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0Njg6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDY5Olx0XHRcdH1cbiA0NzA6XHRcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbiA0NzE6XHRcbiA0NzI6XHRcdFx0c2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcbiA0NzM6XHRcdFx0Z290byBsb29wZWRfYmFjaztcbiA0NzQ6XHRcdH1cbiA0NzU6XHRcbiA0NzY6XHRcdGRzdF9pbnB1dChza2IpO1xuIDQ3NzpcdFxuIDQ3ODpcdFx0cmV0dXJuIC0xO1xuIDQ3OTpcdH1cbiA0ODA6XHRcbiA0ODE6XHRzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiA0ODI6XHR7XG4gNDgzOlx0XHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcbiA0ODQ6XHRcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbiA0ODU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNDg2Olx0XHRzdHJ1Y3QgaXB2NmhkciAqb2xkaGRyO1xuIDQ4NzpcdFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xuIDQ4ODpcdFx0dW5zaWduZWQgY2hhciAqYnVmO1xuIDQ4OTpcdFx0aW50IGFjY2VwdF9ycGxfc2VnO1xuIDQ5MDpcdFx0aW50IGksIGVycjtcbiA0OTE6XHRcdHU2NCBuID0gMDtcbiA0OTI6XHRcdHUzMiByO1xuIDQ5MzpcdFxuIDQ5NDpcdFx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXG4gNDk1Olx0XHRcdFx0ICAgICBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkKSk7XG4gNDk2Olx0XHRpZiAoIWFjY2VwdF9ycGxfc2VnKSB7XG4gNDk3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQ5ODpcdFx0XHRyZXR1cm4gLTE7XG4gNDk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIFJlY2VwdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIGtlcm5lbD8gSSB3YW50IHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoLgoKQmV5b25kIHRoYXQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBXaGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb250cm9sIHRoaXMgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBpcHY2X3NyaF9yY3ZgIGFuZCB0aGUgb3ZlcmFsbCBzdXBwb3J0IGZvciBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpLCBhbmQgbW9yZSBnZW5lcmFsbHksIElQdjYgcm91dGluZyBoZWFkZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCB0ZWxsIG1lIGFib3V0IGl0cyBicm9hZGVyIGVjb3N5c3RlbSwgaS5lLiwgaG93IGl0JiMzOTtzIGVuYWJsZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIG90aGVyIGZlYXR1cmVzLiBBcmUgdGhlcmUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9uIHRoaW5ncyBsaWtlIFNSdjYgb3Igb3RoZXIgZXh0ZW5zaW9ucz8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSBzdXJyb3VuZGluZyB0aGlzIGZ1bmN0aW9uLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjQ1PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjgzLVx0XHRcdGdvdG8gZGlzYWJsZWQ7XG5uZXQvaXB2Ni9leHRoZHJzLmM6Njg0Olx0XHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNjg1LVx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gdGhlIElQdjYgQ29tcGlsYXRpb24gYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZXh0aGRycy5jYCBmaWxlIGdldHMgY29tcGlsZWQgYW5kIGhvdyB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgYGlwdjZfc3JoX3JjdmAsIGlzIGNvbmZpZ3VyZWQuIFRoaXMgdGVsbHMgbWUgYSBsb3QgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvcmUgbWFrZWZpbGVzIGFuZCBLY29uZmlnIGZpbGVzLiBGaXJzdCB1cCwgSSYjMzk7bGwgY2hlY2sgYG5ldC9pcHY2L01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgb3ZlcmFsbCBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciBJUHY2LiBUaGVuLCBJJiMzOTtsbCBkaXZlIGludG8gYG5ldC9pcHY2L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGl2ZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgU1J2NiBmZWF0dXJlcyBhbmQgaG93IHRoZXkgYXJlIGVuYWJsZWQvZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gYGlwdjZfc3JoX3JjdmAgYW5kIHdoYXQgdHJpZ2dlcnMgdGhlaXIgaW5jbHVzaW9uIChvciBleGNsdXNpb24pIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUgd2hlbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgdGhlIGJ1aWxkIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHRoZHJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9OD1pcHY2LXkgOj1cdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXG4tLVxubmV0L2lwdjYvTWFrZWZpbGUtMTEtXHRcdHJhdy5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIHBpbmcubyBcXFxubmV0L2lwdjYvTWFrZWZpbGU6MTI6XHRcdGV4dGhkcnMubyBkYXRhZ3JhbS5vIGlwNl9mbG93bGFiZWwubyBpbmV0Nl9jb25uZWN0aW9uX3NvY2subyBcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTMtXHRcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXG4tLVxubmV0L2lwdjYvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX0lQVjZfRk9VKSAmIzQzOz0gZm91Ni5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00NS1cbm5ldC9pcHY2L01ha2VmaWxlOjQ2Om9iai15ICYjNDM7PSBhZGRyY29uZl9jb3JlLm8gZXh0aGRyc19jb3JlLm8gaXA2X2NoZWNrc3VtLm8gaXA2X2ljbXAub1xubmV0L2lwdjYvTWFrZWZpbGUtNDctb2JqLSQoQ09ORklHX0lORVQpICYjNDM7PSBvdXRwdXRfY29yZS5vIHByb3RvY29sLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlOjQ4Olx0XHRcdGlwNl9vZmZsb2FkLm8gZXh0aGRyc19vZmZsb2FkLm9cbm5ldC9pcHY2L01ha2VmaWxlLTQ5LVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmM9OTk5PXN0YXRpYyBpbnQgX19pbml0IGluZXQ2X2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTEwOTYtXHQvKiBJbml0IHY2IGV4dGVuc2lvbiBoZWFkZXJzLiAqL1xubmV0L2lwdjYvYWZfaW5ldDYuYzoxMDk3Olx0ZXJyID0gaXB2Nl9leHRoZHJzX2luaXQoKTtcbm5ldC9pcHY2L2FmX2luZXQ2LmMtMTA5OC1cdGlmIChlcnIpXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjEwOTk6XHRcdGdvdG8gaXB2Nl9leHRoZHJzX2ZhaWw7XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTExMDAtXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy0xMTc5LWlwdjZfZnJhZ19mYWlsOlxubmV0L2lwdjYvYWZfaW5ldDYuYzoxMTgwOlx0aXB2Nl9leHRoZHJzX2V4aXQoKTtcbm5ldC9pcHY2L2FmX2luZXQ2LmM6MTE4MTppcHY2X2V4dGhkcnNfZmFpbDpcbm5ldC9pcHY2L2FmX2luZXQ2LmMtMTE4Mi1cdGFkZHJjb25mX2NsZWFudXAoKTtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTQtICpcdFx0XHRcdCAgdGx2IG9wdGlvbnMuXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTU6ICpcdE1pdHN1cnUgS0FOREEgQFVTQUdJIGFuZDogUmVtb3ZlIGlwdjZfcGFyc2VfZXh0aGRycygpLlxubmV0L2lwdjYvZXh0aGRycy5jLTE2LSAqXHRZT1NISUZVSkkgSGlkZWFraSBAVVNBR0kgIFJlZ2lzdGVyIGluYm91bmQgZXh0ZW5zaW9uIGhlYWRlclxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz04NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBub2RhdGFfcHJvdG9jb2wgPSB7XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTg1NC1cbm5ldC9pcHY2L2V4dGhkcnMuYzo4NTU6aW50IF9faW5pdCBpcHY2X2V4dGhkcnNfaW5pdCh2b2lkKVxubmV0L2lwdjYvZXh0aGRycy5jLTg1Ni17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTg3OS1cbm5ldC9pcHY2L2V4dGhkcnMuYzo4ODA6dm9pZCBpcHY2X2V4dGhkcnNfZXhpdCh2b2lkKVxubmV0L2lwdjYvZXh0aGRycy5jLTg4MS17XG4tLVxubmV0L2lwdjYvZXh0aGRyc19jb3JlLmM9MjU9RVhQT1JUX1NZTUJPTChpcHY2X2V4dF9oZHIpO1xuLS1cbm5ldC9pcHY2L2V4dGhkcnNfY29yZS5jLTUwLSAqXG5uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYzo1MTogKiBJdCBza2lwcyBhbGwgd2VsbC1rbm93biBleHRoZHJzLCBhbmQgcmV0dXJucyBwb2ludGVyIHRvIHRoZSBzdGFydFxubmV0L2lwdjYvZXh0aGRyc19jb3JlLmMtNTItICogb2YgdW5wYXJzYWJsZSBhcmVhIGkuZS4gdGhlIGZpcnN0IGhlYWRlciB3aXRoIHVua25vd24gdHlwZS5cbi0tXG5uZXQvaXB2Ni9leHRoZHJzX29mZmxvYWQuYz0xOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkIGhiaF9vZmZsb2FkID0ge1xuLS1cbm5ldC9pcHY2L2V4dGhkcnNfb2ZmbG9hZC5jLTIyLVxubmV0L2lwdjYvZXh0aGRyc19vZmZsb2FkLmM6MjM6aW50IF9faW5pdCBpcHY2X2V4dGhkcnNfb2ZmbG9hZF9pbml0KHZvaWQpXG5uZXQvaXB2Ni9leHRoZHJzX29mZmxvYWQuYy0yNC17XG4tLVxubmV0L2lwdjYvaWNtcC5jPTEwMzc9ZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy0xMDc3LVxubmV0L2lwdjYvaWNtcC5jOjEwNzg6XHQvKiBCVUdHR19GVVRVUkU6IHdlIHNob3VsZCB0cnkgdG8gcGFyc2UgZXh0aGRycyBpbiB0aGlzIHBhY2tldC5cbm5ldC9pcHY2L2ljbXAuYy0xMDc5LVx0ICAgV2l0aG91dCB0aGlzIHdlIHdpbGwgbm90IGFibGUgZi5lLiB0byBtYWtlIHNvdXJjZSByb3V0ZWRcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy0xNC0gKlx0TWl0c3VydSBLQU5EQSBAVVNBR0kgYW5kXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzoxNTogKlx0WU9TSElGVUpJIEhpZGVha2kgQFVTQUdJOiBSZW1vdmUgaXB2Nl9wYXJzZV9leHRoZHJzKCkuXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy0xNi0gKi9cbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTIzLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyNDpzdGF0aWMgaW50IGlwdjZfZ3JvX3B1bGxfZXh0aGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgcHJvdG8pXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTI1LXtcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTU3LVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzo1ODpzdGF0aWMgaW50IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTU5LXtcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTkxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB2Nl9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMTE5LVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoxMjA6XHRwcm90byA9IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhza2IsIGlwdjZoLVx1MDAzZW5leHRoZHIpO1xubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xMjEtXG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xNzgtLyogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgYWxsIHRoZSBleHRlbnNpb24gaGRycywgZm9sbG93aW5nIHRoZSBzYW1lXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjE3OTogKiBsb2dpYyBpbiBpcHY2X2dzb19wdWxsX2V4dGhkcnMoKSB3aGVuIHBhcnNpbmcgZXh0LWhkcnMuXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTE4MC0gKi9cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6MTgxOnN0YXRpYyBpbnQgaXB2Nl9leHRoZHJzX2xlbihzdHJ1Y3QgaXB2NmhkciAqaXBoLFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xODItXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqKm9wcHMpXG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYz0yMDM9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgc3RydWN0IHNrX2J1ZmYgKmlwdjZfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTIyOC1cdGlmICghb3BzIHx8ICFvcHMtXHUwMDNlY2FsbGJhY2tzLmdyb19yZWNlaXZlKSB7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjIyOTpcdFx0cHJvdG8gPSBpcHY2X2dyb19wdWxsX2V4dGhkcnMoc2tiLCBobGVuLCBwcm90byk7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTIzMC1cbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTI1OS1cdFx0ICogYWxyZWFkeSBzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byBjb21wYXJlIG5sZW5cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6MjYwOlx0XHQgKiAobmxlbiAhPSAoc2l6ZW9mKCppcGgyKSAmIzQzOyBpcHY2X2V4dGhkcnNfbGVuKGlwaDIsIFx1MDAyNm9wcykpKVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yNjEtXHRcdCAqIG1lbWNtcCgpIGFsb25lIGJlbG93IGlzIHN1ZmZpY2llbnQsIHJpZ2h0P1xuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9MzMyPUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCBpcHY2X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpXG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0zNDUtXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjM0NjpcdG5ob2ZmICYjNDM7PSBzaXplb2YoKmlwaCkgJiM0MzsgaXB2Nl9leHRoZHJzX2xlbihpcGgsIFx1MDAyNm9wcyk7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTM0Ny1cbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTQzNz1zdGF0aWMgaW50IF9faW5pdCBpcHY2X29mZmxvYWRfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtNDQxLVx0XHRwcl9jcml0KFwmIzM0OyVzOiBDYW5ub3QgYWRkIFRDUCBwcm90b2NvbCBvZmZsb2FkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjQ0MjpcdGlmIChpcHY2X2V4dGhkcnNfb2ZmbG9hZF9pbml0KCkgXHUwMDNjIDApXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTQ0My1cdFx0cHJfY3JpdChcJiMzNDslczogQ2Fubm90IGFkZCBFWFRIRFJTIHByb3RvY29sIG9mZmxvYWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oLTktXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oOjEwOmludCBpcHY2X2V4dGhkcnNfb2ZmbG9hZF9pbml0KHZvaWQpO1xubmV0L2lwdjYvaXA2X29mZmxvYWQuaC0xMS1pbnQgdWRwdjZfb2ZmbG9hZF9pbml0KHZvaWQpO1xuLS1cbm5ldC9pcHY2L21jYXN0X3Nub29wLmM9MTQ9c3RhdGljIGludCBpcHY2X21jX2NoZWNrX2lwNmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L21jYXN0X3Nub29wLmMtMzYtXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jOjM3OnN0YXRpYyBpbnQgaXB2Nl9tY19jaGVja19leHRoZHJzKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jLTM4LXtcbi0tXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jPTE3Mj1pbnQgaXB2Nl9tY19jaGVja19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jLTE3OS1cbm5ldC9pcHY2L21jYXN0X3Nub29wLmM6MTgwOlx0cmV0ID0gaXB2Nl9tY19jaGVja19leHRoZHJzKHNrYik7XG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jLTE4MS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI2MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBJUHY2IFJvdXRpbmcgSGVhZGVycyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IElQdjYgcm91dGluZyBoZWFkZXJzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHJldmlzaXQgYGlwdjZfcnRoZHJfcmN2YCB3aXRoaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBrZXJuZWwgcHJvY2Vzc2VzIGluY29taW5nIHBhY2tldHMgdGhhdCB1dGlsaXplIHJvdXRpbmcgaGVhZGVycywgc28gaXQmIzM5O3MgdGhlIHBlcmZlY3QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHZhcmlvdXMgdHlwZXMgb2Ygcm91dGluZyBoZWFkZXJzIGFuZCB0aGVpciBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgbmVjZXNzYXJ5IHNhbml0eSBjaGVja3MgYW5kIHByb2Nlc3NpbmcgdG8gcHJldmVudCByb3V0aW5nIGxvb3BzIGFuZCBhdHRhY2tzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NDU6XHRzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gNjQ2Olx0e1xuIDY0NzpcdFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG4gNjQ4Olx0XHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gNjQ5Olx0XHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHIgPSBOVUxMO1xuIDY1MDpcdFx0aW50IG4sIGk7XG4gNjUxOlx0XHRzdHJ1Y3QgaXB2Nl9ydF9oZHIgKmhkcjtcbiA2NTI6XHRcdHN0cnVjdCBydDBfaGRyICpydGhkcjtcbiA2NTM6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNjU0Olx0XHRpbnQgYWNjZXB0X3NvdXJjZV9yb3V0ZTtcbiA2NTU6XHRcbiA2NTY6XHRcdGFjY2VwdF9zb3VyY2Vfcm91dGUgPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlYWNjZXB0X3NvdXJjZV9yb3V0ZSk7XG4gNjU3Olx0XG4gNjU4Olx0XHRpZiAoaWRldilcbiA2NTk6XHRcdFx0YWNjZXB0X3NvdXJjZV9yb3V0ZSA9IG1pbihhY2NlcHRfc291cmNlX3JvdXRlLFxuIDY2MDpcdFx0XHRcdFx0XHQgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5hY2NlcHRfc291cmNlX3JvdXRlKSk7XG4gNjYxOlx0XG4gNjYyOlx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICYjNDM7IDgpIHx8XG4gNjYzOlx0XHQgICAgIXBza2JfbWF5X3B1bGwoc2tiLCAoc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzO1xuIDY2NDpcdFx0XHRcdFx0ICgoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKVsxXSAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMykpKSkge1xuIDY2NTpcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gNjY2Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDY2NzpcdFx0XHRyZXR1cm4gLTE7XG4gNjY4Olx0XHR9XG4gNjY5Olx0XG4gNjcwOlx0XHRoZHIgPSAoc3RydWN0IGlwdjZfcnRfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiA2NzE6XHRcbiA2NzI6XHRcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIpIHx8XG4gNjczOlx0XHQgICAgc2tiLVx1MDAzZXBrdF90eXBlICE9IFBBQ0tFVF9IT1NUKSB7XG4gNjc0Olx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOQUREUkVSUk9SUyk7XG4gNjc1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDY3NjpcdFx0XHRyZXR1cm4gLTE7XG4gNjc3Olx0XHR9XG4gNjc4Olx0XG4gNjc5Olx0XHRzd2l0Y2ggKGhkci1cdTAwM2V0eXBlKSB7XG4gNjgwOlx0XHRjYXNlIElQVjZfU1JDUlRfVFlQRV80OlxuIDY4MTpcdFx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbiA2ODI6XHRcdFx0aWYgKCFpZGV2KVxuIDY4MzpcdFx0XHRcdGdvdG8gZGlzYWJsZWQ7XG4gNjg0Olx0XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiLCBpZGV2KTtcbiA2ODU6XHRcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzM6XG4gNjg2Olx0XHRcdC8qIHJwbCBzZWdtZW50IHJvdXRpbmcgKi9cbiA2ODc6XHRcdFx0aWYgKCFpZGV2KVxuIDY4ODpcdFx0XHRcdGdvdG8gZGlzYWJsZWQ7XG4gNjg5Olx0XHRcdHJldHVybiBpcHY2X3JwbF9zcmhfcmN2KHNrYiwgaWRldik7XG4gNjkwOlx0XHRkZWZhdWx0OlxuIDY5MTpcdFx0XHRicmVhaztcbiA2OTI6XHRcdH1cbiA2OTM6XHRcbiA2OTQ6XHRsb29wZWRfYmFjazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMzNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBJUHY2IFJvdXRpbmcgSGVhZGVyIFJlY2VwdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIElQdjYgcm91dGluZyBleHRlbnNpb24gaGVhZGVycy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGBpcHY2X3J0aGRyX3JjdmAsIHNpbmNlIHRoYXQmIzM5O3MgdGhlIGNvcmUgaGFuZGxlciBmb3IgYWxsIHJvdXRpbmcgaGVhZGVycywgYW5kIEkga25vdyB0aGF0IHRoZSBgSVBWNl9TUkNSVF9UWVBFXzRgIGNvZGUgcGF0aCBpcyB0aWVkIHRvIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpLiBNYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZSwgYXQgdGhlIHRvcCBsZXZlbCwgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIGRpdmluZyBkZWVwLiBOb3csIGxldCYjMzk7cyB0cmFjZSBgaXB2Nl9zcmhfcmN2YCBhbmQgc2VlIHdoYXQgaXQgaXMgcmVhbGx5IGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcwOlx0XG4gMzcxOlx0c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiAzNzI6XHR7XG4gMzczOlx0XHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gMzc0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuIDM3NTpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpoZHI7XG4gMzc2Olx0XHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XG4gMzc3Olx0XHRpbnQgYWNjZXB0X3NlZzY7XG4gMzc4Olx0XG4gMzc5Olx0XHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAzODA6XHRcbiAzODE6XHRcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VzZWc2X2VuYWJsZWQpLFxuIDM4MjpcdFx0XHRcdCAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xuIDM4MzpcdFxuIDM4NDpcdFx0aWYgKCFhY2NlcHRfc2VnNikge1xuIDM4NTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzODY6XHRcdFx0cmV0dXJuIC0xO1xuIDM4NzpcdFx0fVxuIDM4ODpcdFxuIDM4OTpcdCNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbiAzOTA6XHRcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XG4gMzkxOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM5MjpcdFx0XHRyZXR1cm4gLTE7XG4gMzkzOlx0XHR9XG4gMzk0Olx0I2VuZGlmXG4gMzk1Olx0XG4gMzk2Olx0bG9vcGVkX2JhY2s6XG4gMzk3Olx0XHRpZiAoaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xuIDM5ODpcdFx0XHRpZiAoaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY2IHx8IGhkci1cdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNCkge1xuIDM5OTpcdFx0XHRcdGludCBvZmZzZXQgPSAoaGRyLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiA0MDA6XHRcbiA0MDE6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcbiA0MDI6XHRcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcbiA0MDM6XHRcdFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gNDA0Olx0XHRcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcbiA0MDU6XHRcdFx0XHRcdFx0ICAgb2Zmc2V0KTtcbiA0MDY6XHRcbiA0MDc6XHRcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiA0MDg6XHRcdFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIDQwOTpcdFx0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbiA0MTA6XHRcdFx0XHRpZiAoaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KVxuIDQxMTpcdFx0XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuIDQxMjpcdFx0XHRcdF9fc2tiX3R1bm5lbF9yeChza2IsIHNrYi1cdTAwM2VkZXYsIG5ldCk7XG4gNDEzOlx0XG4gNDE0Olx0XHRcdFx0bmV0aWZfcngoc2tiKTtcbiA0MTU6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDE2Olx0XHRcdH1cbiA0MTc6XHRcbiA0MTg6XHRcdFx0b3B0LVx1MDAzZXNyY3J0ID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xuIDQxOTpcdFx0XHRvcHQtXHUwMDNlbGFzdG9wdCA9IG9wdC1cdTAwM2VzcmNydDtcbiA0MjA6XHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IChoZHItXHUwMDNlaGRybGVuICYjNDM7IDEpIFx1MDAzY1x1MDAzYyAzO1xuIDQyMTpcdFx0XHRvcHQtXHUwMDNlbmhvZmYgPSAoXHUwMDI2aGRyLVx1MDAzZW5leHRoZHIpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNDIyOlx0XG4gNDIzOlx0XHRcdHJldHVybiAxO1xuIDQyNDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDg3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUHY2IFNSSCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCB0byBgaXB2Nl9zcmhfcmN2YCBpbiB0aGUgSVB2NiBzdGFjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBgc2tiX3B1c2hgIGFuZCBgc2tiX3B1bGxgIGNhbGxzIGhlcmUuICBQcmV2aW91c2x5LCB0aGUgY29kZSBuYWl2ZWx5IGFzc3VtZWQgdGhlIElQdjYgaGVhZGVyIHdhcyBkaXJlY3RseSBhZGphY2VudCB0byB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciwgdXNpbmcgYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgIGZvciBwdXNoaW5nIGFuZCBwdWxsaW5nLiAgVGhhdCYjMzk7cyBhIGRlZmluaXRlIG92ZXJzaWdodCwgYW5kIGEgc3VidGxlIG9uZSBhdCB0aGF0LgoKVGhlIGtleSBpcyBpbiB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlcmUgY2FuIGJlICpvdGhlciogZXh0ZW5zaW9uIGhlYWRlcnMg4oCTIEhvcC1ieS1Ib3Agb3B0aW9ucywgRGVzdGluYXRpb24gT3B0aW9ucywgb3IgZXZlbiBlbmNhcHN1bGF0ZWQgcGFja2V0cyDigJMgc2l0dGluZyBiZXR3ZWVuIHRoZSBtYWluIElQdjYgaGVhZGVyIGFuZCB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlci4gVGhpcyBtZWFucyB0aGUgb2Zmc2V0IHRvIHRoZSBhY3R1YWwgSVB2NiBoZWFkZXIgKGBza2JfbmV0d29ya19vZmZzZXQoc2tiKWApIGlzbiYjMzk7dCBhbHdheXMgYSBmaXhlZCBzaXplLiBUaGUgb2xkIGNvZGUgd2FzIHZ1bG5lcmFibGUuCgpOb3cgSSBzZWUgaXQuIFRoZSB1cGRhdGVkIGNvZGUgY29ycmVjdGx5IHVzZXMgYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCB0byBkZXRlcm1pbmUgaG93IGZhciBpdCBuZWVkcyB0byAqcHVzaCogdG8gZ2V0IGJhY2sgdG8gdGhlIElQdjYgaGVhZGVyLCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgIHRvIHB1bGwgaXQgYmFjayB0byB0cmFuc3BvcnQgbGF5ZXIhIFdoZW4gd2UmIzM5O3JlIGxvb3BpbmcgYmFjayB0byBwcm9jZXNzIHRoZSBuZXh0IHNlZ21lbnQsIHRoZSBwYXRjaCBub3cgdXNlcyB0aGlzIHRvIGFjY291bnQgZm9yIHRoZSBwb3RlbnRpYWwgaW50ZXJ2ZW5pbmcgZXh0ZW5zaW9uIGhlYWRlcnMuIFRoaXMgaXMgc2lnbmlmaWNhbnRseSBtb3JlIHJvYnVzdC4KCkkmIzM5O20gY29uZmlkZW50IHRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpbiBoYW5kbGluZyB0aGUgb2Zmc2V0cywgZXNwZWNpYWxseSB3aXRoIHBvdGVudGlhbGx5IG5lc3RlZCBoZWFkZXJzLCBpcyBwcmVjaXNlbHkgd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4KCkFuZCB5ZXMsIHRoaXMgcGF0Y2ggaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGJlZW4gdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgd2l0aCByYXcgc29ja2V0cywgdHVuL3RhcCwgYW5kIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcyBjb25maXJtcyB0aGF0IHRoaXMgaXMgYSB2YWxpZCBhbmQgdGVzdGVkIGZpeC4KCkFic29sdXRlbHkuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIGNhbiBzZWUgc2V2ZXJhbCBwb3RlbnRpYWwgYXJlYXMgb2YgYXR0YWNrIHdpdGggdGhlIGNvbXBsZXggaGVhZGVyIG1hbmlwdWxhdGlvbnMuClRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGFuZCBGb2N1c1N5bWJvbHMuCkkmIzM5O2xsIGxvb2sgZm9yIGBJUFY2X1NFRzZgIGFuZCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGluIGBuZXQvaXB2Ni9LY29uZmlnYCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBlbmFibGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxubmV0L2lwdjYvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zOC1cbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbm5ldC9pcHY2L0tjb25maWctNDAtXHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBLY29uZmlnIE9wdGlvbnMgZm9yIGV4dGhkcnMuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBleHRoZHJzLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYCwgYW5kIHN1cmUgZW5vdWdoLCB0aGVyZSBpdCBpczogYGV4dGhkcnMub2AgaXMgZGlyZWN0bHkgbGlua2VkIGludG8gdGhlIGBpcHY2LXlgIGxpc3QuIFRoYXQgbWVhbnMgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGFsb25nIHdpdGggZXZlcnl0aGluZyBlbHNlIHVuZGVyIGBDT05GSUdfSVBWNmAuIE9rYXksIHNvIGBDT05GSUdfSVBWNmAgaXMgdGhlIHByaW1hcnkgZmFjdG9yLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgc2FtZSBNYWtlZmlsZSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBpbmNsdXNpb25zIHRpZWQgdG8gYHNlZzZgIG9yIHBvdGVudGlhbGx5IGFub3RoZXIgYElQVjZgIGNvbmZpZyB0aGF0IG1pZ2h0IGFsc28gYWZmZWN0IGl0LiBOZWVkIHRvIGNvdmVyIGFsbCB0aGUgYmFzZXMsIG5vIHN0b25lIHVudHVybmVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVENQL0lQIChJTkVUNikgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19JUFY2KSAmIzQzOz0gaXB2Ni5vXG4gICA3Olx0XG4gICA4Olx0aXB2Ni15IDo9XHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxuICAgOTpcdFx0XHRhZGRybGFiZWwubyBcXFxuICAxMDpcdFx0XHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxuICAxMTpcdFx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbiAgMTI6XHRcdFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXG4gIDEzOlx0XHRcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXG4gIDE0Olx0XG4gIDE1Olx0aXB2Ni0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjYub1xuICAxNjpcdGlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICYjNDM7PSBpcDZtci5vXG4gIDE3Olx0XG4gIDE4Olx0aXB2Ni0kKENPTkZJR19YRlJNKSAmIzQzOz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXG4gIDE5Olx0XHR4ZnJtNl9vdXRwdXQubyB4ZnJtNl9wcm90b2NvbC5vXG4gIDIwOlx0aXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIub1xuICAyMTpcdGlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWI2X3J1bGVzLm9cbiAgMjI6XHRpcHY2LSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbiAgMjM6XHRpcHY2LSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG4gIDI0Olx0aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgJiM0Mzs9IGNhbGlwc28ub1xuICAyNTpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSAmIzQzOz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xuICAyNjpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuICAyNzpcdGlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xuICAyODpcdGlwdjYtJChDT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTCkgJiM0Mzs9IGlvYW02X2lwdHVubmVsLm9cbiAgMjk6XHRcbiAgMzA6XHRvYmotJChDT05GSUdfSU5FVDZfQUgpICYjNDM7PSBhaDYub1xuICAzMTpcdG9iai0kKENPTkZJR19JTkVUNl9FU1ApICYjNDM7PSBlc3A2Lm9cbiAgMzI6XHRvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A2X29mZmxvYWQub1xuICAzMzpcdG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICYjNDM7PSBpcGNvbXA2Lm9cbiAgMzQ6XHRvYmotJChDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwpICYjNDM7PSB4ZnJtNl90dW5uZWwub1xuICAzNTpcdG9iai0kKENPTkZJR19JTkVUNl9UVU5ORUwpICYjNDM7PSB0dW5uZWw2Lm9cbiAgMzY6XHRvYmotJChDT05GSUdfSVBWNl9NSVA2KSAmIzQzOz0gbWlwNi5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0lQVjZfSUxBKSAmIzQzOz0gaWxhL1xuICAzODpcdG9iai0kKENPTkZJR19ORVRGSUxURVIpXHQmIzQzOz0gbmV0ZmlsdGVyL1xuICAzOTpcdFxuICA0MDpcdG9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xuICA0MTpcdG9iai0kKENPTkZJR19JUFY2X1NJVCkgJiM0Mzs9IHNpdC5vXG4gIDQyOlx0b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG4gIDQzOlx0b2JqLSQoQ09ORklHX0lQVjZfR1JFKSAmIzQzOz0gaXA2X2dyZS5vXG4gIDQ0Olx0b2JqLSQoQ09ORklHX0lQVjZfRk9VKSAmIzQzOz0gZm91Ni5vXG4gIDQ1Olx0XG4gIDQ2Olx0b2JqLXkgJiM0Mzs9IGFkZHJjb25mX2NvcmUubyBleHRoZHJzX2NvcmUubyBpcDZfY2hlY2tzdW0ubyBpcDZfaWNtcC5vXG4gIDQ3Olx0b2JqLSQoQ09ORklHX0lORVQpICYjNDM7PSBvdXRwdXRfY29yZS5vIHByb3RvY29sLm8gXFxcbiAgNDg6XHRcdFx0XHRpcDZfb2ZmbG9hZC5vIGV4dGhkcnNfb2ZmbG9hZC5vXG4gIDQ5Olx0XG4gIDUwOlx0b2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSAmIzQzOz0gaW5ldDZfaGFzaHRhYmxlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IElQdjYgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGVzZSBJUHY2IGNvbmZpZ3VyYXRpb25zLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBDT05GSUdfSVBWNmAsIG5hdHVyYWxseS4gSSBzZWUgdGhhdCB0aGVyZSYjMzk7cyBhbHNvIHRoZSBgaXB2Nl9zcmhfcmN2YCBmdW5jdGlvbiwgYW5kIHdpdGhpbiB0aGF0LCB0aGlzIGNoZWNrOgoKYGBgYwojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDCglpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkgewoJCWtmcmVlX3NrYihza2IpOwoJCXJldHVybiAtMTsKCX0KI2VuZGlmCmBgYAoKUmlnaHQsIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgaXQgdXNlcyBgQ09ORklHX0lQVjZfU0VHNl9ITUFDYCwgd2hpY2ggSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBhbmQgYnkgZXh0ZW5zaW9uLCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAuIFNvLCBib3RoIG9mIHRob3NlIGNsZWFybHkgdGllIGludG8gSVB2NiBzZWdtZW50IHJvdXRpbmcuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSB0aGUgbmF0dXJlIG9mIGBDT05GSUdfSVBWNmAuIElzIGl0IGJvb2xlYW4gb3IgdHJpc3RhdGU/IEkgbmVlZCB0byBjaGVjayBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gYmUgY2VydGFpbi4KCkxpbmUgNiwgaGVyZSB3ZSBnbzogYG1lbnVjb25maWcgSVBWNiBib29sICYjMzQ7VGhlIElQdjYgcHJvdG9jb2wmIzM0O2AuIEFoLCBhIGBib29sYCBvcHRpb24uIEl0IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBJTkVUYCwgYXMgZXhwZWN0ZWQuIFNvLCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBlbmFibGUvZGlzYWJsZSBjb25maWd1cmF0aW9uLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAgYW5kIGBDT05GSUdfSVBWNl9TRUc2X0hNQUNgIGFyZSBjb25maWd1cmVkLCBhbmQgaG93IHRoZXkgcmVsYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NTpcdFxuIDI4NjpcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbiAyODc6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiAyODg6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDI4OTpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMjkwOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMjkxOlx0XHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbiAyOTI6XHRcdGhlbHBcbiAyOTM6XHRcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XG4gMjk0Olx0XHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDI5NTpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcbiAyOTY6XHRcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXG4gMjk3Olx0XG4gMjk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjk5Olx0XG4gMzAwOlx0Y29uZmlnIElQVjZfU0VHNl9ITUFDXG4gMzAxOlx0XHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbiAzMDI6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDMwMzpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuIDMwNDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gMzA1Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDMwNjpcdFx0aGVscFxuIDMwNzpcdFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cbiAzMDg6XHRcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxuIDMwOTpcdFxuIDMxMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDMxMTpcdFxuIDMxMjpcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXG4gMzEzOlx0XHRkZWZfYm9vbCB5XG4gMzE0Olx0XHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxuIDMxNTpcdFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxuIDMxNjpcdFxuIDMxNzpcdGNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxuIDMxODpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbiAzMTk6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDMyMDpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMzIxOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMzIyOlx0XHRoZWxwXG4gMzIzOlx0XHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcbiAzMjQ6XHRcdCAgdHVubmVscyBtZWNoYW5pc20uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Njg1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXJzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBkaXZlIGludG8gdGhhdCBgaXB2Nl9ydGhkcl9yY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IGl0IGRvZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGVyZSBpdCYjMzk7cyByZWdpc3RlcmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGwgY2hhaW4uIEkmIzM5O20gaW1hZ2luaW5nIGl0JiMzOTtzIHNvbWUgc29ydCBvZiBlbnRyeSBwb2ludCBvciBoYW5kbGVyIGZvciBpbmNvbWluZyBJUHY2IHJvdXRpbmcgaGVhZGVyIHBhY2tldHMsIHJpZ2h0PyBLbm93aW5nIHRoZSByZWdpc3RyYXRpb24gcG9pbnQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGluIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cuIEVzc2VudGlhbGx5LCB3aG8gY2FsbHMgdGhpcyBmdW5jdGlvbiwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gR290dGEgZ2V0IHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIHJlZ2lzdHJhdGlvbiBwb2ludCBxdWlja2x5LiBJIGtub3cgSSYjMzk7dmUgd29ya2VkIHdpdGggdGhpcyBhcmVhIGJlZm9yZSwgYnV0IG15IGJyYWluIG5lZWRzIGEgcXVpY2sgcmVmcmVzaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzNTpcdGRpc2FibGVkOlxuIDgzNjpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRUQpO1xuIDgzNzpcdFx0cmV0dXJuIC0xO1xuIDgzODpcdH1cbiA4Mzk6XHRcbiA4NDA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIHJ0aGRyX3Byb3RvY29sID0ge1xuIDg0MTpcdFx0LmhhbmRsZXJcdD1cdGlwdjZfcnRoZHJfcmN2LFxuIDg0MjpcdFx0LmZsYWdzXHRcdD1cdElORVQ2X1BST1RPX05PUE9MSUNZLFxuIDg0MzpcdH07XG4gODQ0Olx0XG4gODQ1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBkZXN0b3B0X3Byb3RvY29sID0ge1xuIDg0NjpcdFx0LmhhbmRsZXJcdD1cdGlwdjZfZGVzdG9wdF9yY3YsXG4gODQ3Olx0XHQuZmxhZ3NcdFx0PVx0SU5FVDZfUFJPVE9fTk9QT0xJQ1ksXG4gODQ4Olx0fTtcbiA4NDk6XHRcbiA4NTA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIG5vZGF0YV9wcm90b2NvbCA9IHtcbiA4NTE6XHRcdC5oYW5kbGVyXHQ9XHRkc3RfZGlzY2FyZCxcbiA4NTI6XHRcdC5mbGFnc1x0XHQ9XHRJTkVUNl9QUk9UT19OT1BPTElDWSxcbiA4NTM6XHR9O1xuIDg1NDpcdFxuIDg1NTpcdGludCBfX2luaXQgaXB2Nl9leHRoZHJzX2luaXQodm9pZClcbiA4NTY6XHR7XG4gODU3Olx0XHRpbnQgcmV0O1xuIDg1ODpcdFxuIDg1OTpcdFx0cmV0ID0gaW5ldDZfYWRkX3Byb3RvY29sKFx1MDAyNnJ0aGRyX3Byb3RvY29sLCBJUFBST1RPX1JPVVRJTkcpO1xuIDg2MDpcdFx0aWYgKHJldClcbiA4NjE6XHRcdFx0Z290byBvdXQ7XG4gODYyOlx0XG4gODYzOlx0XHRyZXQgPSBpbmV0Nl9hZGRfcHJvdG9jb2woXHUwMDI2ZGVzdG9wdF9wcm90b2NvbCwgSVBQUk9UT19EU1RPUFRTKTtcbiA4NjQ6XHRcdGlmIChyZXQpXG4gODY1Olx0XHRcdGdvdG8gb3V0X3J0aGRyO1xuIDg2NjpcdFxuIDg2NzpcdFx0cmV0ID0gaW5ldDZfYWRkX3Byb3RvY29sKFx1MDAyNm5vZGF0YV9wcm90b2NvbCwgSVBQUk9UT19OT05FKTtcbiA4Njg6XHRcdGlmIChyZXQpXG4gODY5Olx0XHRcdGdvdG8gb3V0X2Rlc3RvcHQ7XG4gODcwOlx0XG4gODcxOlx0b3V0OlxuIDg3MjpcdFx0cmV0dXJuIHJldDtcbiA4NzM6XHRvdXRfZGVzdG9wdDpcbiA4NzQ6XHRcdGluZXQ2X2RlbF9wcm90b2NvbChcdTAwMjZkZXN0b3B0X3Byb3RvY29sLCBJUFBST1RPX0RTVE9QVFMpO1xuIDg3NTpcdG91dF9ydGhkcjpcbiA4NzY6XHRcdGluZXQ2X2RlbF9wcm90b2NvbChcdTAwMjZydGhkcl9wcm90b2NvbCwgSVBQUk9UT19ST1VUSU5HKTtcbiA4Nzc6XHRcdGdvdG8gb3V0O1xuIDg3ODpcdH07XG4gODc5Olx0XG4gODgwOlx0dm9pZCBpcHY2X2V4dGhkcnNfZXhpdCh2b2lkKVxuIDg4MTpcdHtcbiA4ODI6XHRcdGluZXQ2X2RlbF9wcm90b2NvbChcdTAwMjZub2RhdGFfcHJvdG9jb2wsIElQUFJPVE9fTk9ORSk7XG4gODgzOlx0XHRpbmV0Nl9kZWxfcHJvdG9jb2woXHUwMDI2ZGVzdG9wdF9wcm90b2NvbCwgSVBQUk9UT19EU1RPUFRTKTtcbiA4ODQ6XHRcdGluZXQ2X2RlbF9wcm90b2NvbChcdTAwMjZydGhkcl9wcm90b2NvbCwgSVBQUk9UT19ST1VUSU5HKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgUm91dGluZyBIZWFkZXIgUmVjZXB0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgSVB2NiByb3V0aW5nIGhlYWRlcnMgYXJlIGhhbmRsZWQuIGBpcHY2X3J0aGRyX3JjdmAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBpdCYjMzk7cyB0aGUgcHJvdG9jb2wgaGFuZGxlciBmb3IgYElQUFJPVE9fUk9VVElOR2AuIFdoZW4gYW4gSVB2NiBwYWNrZXQgd2l0aCBhIHJvdXRpbmcgaGVhZGVyIGNvbWVzIGluLCBgaXB2Nl9ydGhkcl9yY3ZgIGdldHMgdGhlIGNhbGwsIGFuZCBzcGVjaWZpY2FsbHkgZm9yIGBJUFY2X1NSQ1JUX1RZUEVfNGAsIGl0IGRlbGVnYXRlcyB0byBgaXB2Nl9zcmhfcmN2YC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGVpdGhlciBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLiBZdXAsIHRoZXkgYXJlOiBgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilgIGFuZCBgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIFRoYXQmIzM5O3MgdXNlZnVsIGluZm9ybWF0aW9uLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIGBpcHY2X3J0aGRyX3JjdmAgaXMgdXNlZC4gUmlnaHQsIGl0JiMzOTtzIHJlZ2lzdGVyZWQgaW4gYHJ0aGRyX3Byb3RvY29sYC4gSXQmIzM5O3MgcG9pbnRlZCB0byBieSB0aGUgYGhhbmRsZXJgIHBvaW50ZXIgd2l0aGluIHRoZSBgaW5ldDZfcHJvdG9jb2xgIHN0cnVjdCwgc28gdGhlIGNvbXBpbGVyIGlzIHVubGlrZWx5IHRvIGlubGluZSBpdC4gSWYgd2UmIzM5O3JlIGxvb2tpbmcgZm9yIHN5bWJvbHMgdG8gYW5hbHl6ZSBpbiBtb3JlIGRlcHRoLCB0aGlzIGlzIGltcG9ydGFudC4KClNvLCB3aGF0IGFib3V0IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhlIGNhbmRpZGF0ZXMgZm9yIGBGb2N1c1N5bWJvbHNgPyBMZXQmIzM5O3MgcXVpY2tseSBzY2FuIGBleHRoZHJzLmNgIGFuZCBlbHNld2hlcmUuIFllcCwgaW4gYGV4dGhkcnMuY2AsIHdlIGhhdmUgYGlwdjZfcnRoZHJfcmN2YCBhbmQgYGlwdjZfc3JoX3JjdmAuIE1ha2VzIHNlbnNlLgoKQWxyaWdodCwgc28gdGhlIGZhY3QgdGhhdCBgaXB2Nl9ydGhkcl9yY3ZgIGlzIHJlZmVyZW5jZWQgaW4gdGhhdCBgc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHsgLmhhbmRsZXIgPSBpcHY2X3J0aGRyX3JjdiwgLi4uIH07YCBkZWNsYXJhdGlvbiBtZWFucyB0aGUgY29tcGlsZXIgKmNhbiYjMzk7dCogaW5saW5lIGl0LCB0aGF0JiMzOTtzIGNydWNpYWwuIAoKTm93LCBgaXB2Nl9zcmhfcmN2YCwgb24gdGhlIG90aGVyIGhhbmQsICptaWdodCogYmUgaW5saW5lZCB3aXRoaW4gYGlwdjZfcnRoZHJfcmN2YCwgb3IgaXQgbWlnaHQgbm90IOKAkyBkZXBlbmRzIG9uIHRoZSBjb21waWxlciYjMzk7cyBvcHRpbWl6YXRpb24uIFNvLCBib3RoIGBpcHY2X3J0aGRyX3JjdmAgYW5kIGBpcHY2X3NyaF9yY3ZgIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gV2Ugc2hvdWxkIGNvbnNpZGVyIGJvdGguCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIHRoZSBlbnRpcmUgYG5ldC9pcHY2L2V4dGhkcnMuY2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gSnVzdCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYy02NC1cbm5ldC9pcHY2L2V4dGhkcnMuYzo2NTpzdGF0aWMgYm9vbCBpcDZfdGx2b3B0X3Vua25vd24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZixcbm5ldC9pcHY2L2V4dGhkcnMuYy02Ni1cdFx0XHQgICAgICAgYm9vbCBkaXNhbGxvd191bmtub3ducylcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTAzLVxubmV0L2lwdjYvZXh0aGRycy5jOjEwNDpzdGF0aWMgYm9vbCBpcHY2X2hvcF9yYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKTtcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMDU6c3RhdGljIGJvb2wgaXB2Nl9ob3BfaW9hbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKTtcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMDY6c3RhdGljIGJvb2wgaXB2Nl9ob3BfanVtYm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZik7XG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA3OnN0YXRpYyBib29sIGlwdjZfaG9wX2NhbGlwc28oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtMTA4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X01JUDYpXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA5OnN0YXRpYyBib29sIGlwdjZfZGVzdF9oYW8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtMTEwLSNlbmRpZlxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTMtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTE0OnN0YXRpYyBib29sIGlwNl9wYXJzZV90bHYoYm9vbCBob3BieWhvcCxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTUtXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0yMzEtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfTUlQNilcbm5ldC9pcHY2L2V4dGhkcnMuYzoyMzI6c3RhdGljIGJvb2wgaXB2Nl9kZXN0X2hhbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxubmV0L2lwdjYvZXh0aGRycy5jLTIzMy17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTI5NS1cbm5ldC9pcHY2L2V4dGhkcnMuYzoyOTY6c3RhdGljIGludCBpcHY2X2Rlc3RvcHRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMjk3LXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzQxLVxubmV0L2lwdjYvZXh0aGRycy5jOjM0MjpzdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzQzLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxubmV0L2lwdjYvZXh0aGRycy5jLTM3Mi17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTQ4MC1cbm5ldC9pcHY2L2V4dGhkcnMuYzo0ODE6c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDgyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ0LS8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqL1xubmV0L2lwdjYvZXh0aGRycy5jOjY0NTpzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ2LXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9ODUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgbm9kYXRhX3Byb3RvY29sID0ge1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy04NTQtXG5uZXQvaXB2Ni9leHRoZHJzLmM6ODU1OmludCBfX2luaXQgaXB2Nl9leHRoZHJzX2luaXQodm9pZClcbm5ldC9pcHY2L2V4dGhkcnMuYy04NTYte1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy04NzktXG5uZXQvaXB2Ni9leHRoZHJzLmM6ODgwOnZvaWQgaXB2Nl9leHRoZHJzX2V4aXQodm9pZClcbm5ldC9pcHY2L2V4dGhkcnMuYy04ODEte1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy04OTItXG5uZXQvaXB2Ni9leHRoZHJzLmM6ODkzOnN0YXRpYyBib29sIGlwdjZfaG9wX3JhKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtODk0LXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtOTA5LVxubmV0L2lwdjYvZXh0aGRycy5jOjkxMDpzdGF0aWMgYm9vbCBpcHY2X2hvcF9pb2FtKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtOTExLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtOTkwLVxubmV0L2lwdjYvZXh0aGRycy5jOjk5MTpzdGF0aWMgYm9vbCBpcHY2X2hvcF9qdW1ibyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxubmV0L2lwdjYvZXh0aGRycy5jLTk5Mi17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTEwMzMtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTAzNDpzdGF0aWMgYm9vbCBpcHY2X2hvcF9jYWxpcHNvKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTAzNS17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTEwNTMtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA1NDppbnQgaXB2Nl9wYXJzZV9ob3BvcHRzKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTA1NS17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTEwOTgtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA5OTpzdGF0aWMgdTggaXB2Nl9wdXNoX3J0aGRyMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwcm90byxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTAwLVx0XHRcdCAgIHN0cnVjdCBpcHY2X3J0X2hkciAqb3B0LFxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTIzLVxubmV0L2lwdjYvZXh0aGRycy5jOjExMjQ6c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTEyNS1cdFx0XHQgICBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKm9wdCxcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE3Mi1cbm5ldC9pcHY2L2V4dGhkcnMuYzoxMTczOnN0YXRpYyB1OCBpcHY2X3B1c2hfcnRoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE3NC1cdFx0XHQgIHN0cnVjdCBpcHY2X3J0X2hkciAqb3B0LFxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTkxLVxubmV0L2lwdjYvZXh0aGRycy5jOjExOTI6c3RhdGljIHU4IGlwdjZfcHVzaF9leHRoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sIHU4IHR5cGUsIHN0cnVjdCBpcHY2X29wdF9oZHIgKm9wdClcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTkzLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTIwMC1cbm5ldC9pcHY2L2V4dGhkcnMuYzoxMjAxOnU4IGlwdjZfcHVzaF9uZnJhZ19vcHRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LFxubmV0L2lwdjYvZXh0aGRycy5jLTEyMDItXHRcdFx0dTggcHJvdG8sXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTEyMTgtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTIxOTp1OCBpcHY2X3B1c2hfZnJhZ19vcHRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LCB1OCBwcm90bylcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjIwLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTIyNC19XG5uZXQvaXB2Ni9leHRoZHJzLmM6MTIyNTpFWFBPUlRfU1lNQk9MKGlwdjZfcHVzaF9mcmFnX29wdHMpO1xubmV0L2lwdjYvZXh0aGRycy5jLTEyMjYtXG5uZXQvaXB2Ni9leHRoZHJzLmM9MTIyNz1zdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKlxubmV0L2lwdjYvZXh0aGRycy5jOjEyMjg6aXB2Nl9kdXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0KVxubmV0L2lwdjYvZXh0aGRycy5jLTEyMjkte1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjQ2LX1cbm5ldC9pcHY2L2V4dGhkcnMuYzoxMjQ3OkVYUE9SVF9TWU1CT0xfR1BMKGlwdjZfZHVwX29wdGlvbnMpO1xubmV0L2lwdjYvZXh0aGRycy5jLTEyNDgtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTI0OTpzdGF0aWMgdm9pZCBpcHY2X3JlbmV3X29wdGlvbihpbnQgcmVuZXd0eXBlLFxubmV0L2lwdjYvZXh0aGRycy5jLTEyNTAtXHRcdFx0ICAgICAgc3RydWN0IGlwdjZfb3B0X2hkciAqKmRlc3QsXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTEyODY9c3RydWN0IGlwdjZfdHhvcHRpb25zICpcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMjg3OmlwdjZfcmVuZXdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LFxubmV0L2lwdjYvZXh0aGRycy5jLTEyODgtXHRcdCAgIGludCBuZXd0eXBlLCBzdHJ1Y3QgaXB2Nl9vcHRfaGRyICpuZXdvcHQpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTEzNDItXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTM0MzpzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKl9faXB2Nl9maXh1cF9vcHRpb25zKHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0X3NwYWNlLFxubmV0L2lwdjYvZXh0aGRycy5jLTEzNDQtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdClcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM2MC19XG5uZXQvaXB2Ni9leHRoZHJzLmM6MTM2MTpFWFBPUlRfU1lNQk9MX0dQTChfX2lwdjZfZml4dXBfb3B0aW9ucyk7XG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM2Mi1cbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM3My0gKi9cbm5ldC9pcHY2L2V4dGhkcnMuYzoxMzc0OnN0cnVjdCBpbjZfYWRkciAqX19mbDZfdXBkYXRlX2RzdChzdHJ1Y3QgZmxvd2k2ICpmbDYsXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM3NS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTE0MDEtfVxubmV0L2lwdjYvZXh0aGRycy5jOjE0MDI6RVhQT1JUX1NZTUJPTF9HUEwoX19mbDZfdXBkYXRlX2RzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Mzk5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgRXhhbWluYXRpb24gb2YgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIEhhbmRsaW5nKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXJzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHJlY2VpdmluZyBlbmQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGtleSBmdW5jdGlvbnM6IGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ydGhkcl9yY3ZgLiBgaXB2Nl9zcmhfcmN2YCwgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIEkgbmVlZCB0byBsb29rIGF0IGJlY2F1c2UgaXQmIzM5O3MgdGhlIGRpcmVjdGx5IG1vZGlmaWVkIG9uZS4gSSYjMzk7bGwgcmVtZW1iZXIgdGhhdCBgaXB2Nl9ydGhkcl9yY3ZgIGlzIGFjdGluZyBhcyB0aGUgb3V0ZXIgaGFuZGxlci4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIE9idmlvdXNseSwgYElQVjZgIGlzIGZ1bmRhbWVudGFsLCBlbmFibGluZyB0aGUgZW50aXJlIElQdjYgc3RhY2ssIGluY2x1ZGluZyBgbmV0L2lwdjYvYC4gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBgSVBWNl9TRUc2X0hNQUNgLCBzaW5jZSB0aGUgYHNlZzZfaG1hY192YWxpZGF0ZV9za2JgIGZ1bmN0aW9uIGlzIHRlc3RlZCB1bmRlciB0aGlzIGNvbmZpZy4gRmluYWxseSwgdGhlcmUmIzM5O3MgYElQVjZfU0VHNl9MV1RVTk5FTGAsIHdoaWNoIGhhbmRsZXMgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbi4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gU1JIIG9yLCBtb3JlIGJyb2FkbHksIGBzZWc2YC4gTGV0JiMzOTtzIHBlcmZvcm0gYSBxdWljayBgZ3JlcGAgc2VhcmNoIHdpdGhpbiB0aGUgYG5ldC9pcHY2L2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZGVwZW5kZW50IGFuZCByZWxhdGVkIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVBWNl9TRUc2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9MjQ9aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgJiM0Mzs9IGNhbGlwc28ub1xubmV0L2lwdjYvTWFrZWZpbGU6MjU6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUwpICYjNDM7PSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNjppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSAmIzQzOz0gc2VnNl9obWFjLm9cbm5ldC9pcHY2L01ha2VmaWxlLTI3LWlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjI5LVx0LnNlZzZfZW5hYmxlZFx0XHQ9IDAsXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIzMDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIzMS1cdC5zZWc2X3JlcXVpcmVfaG1hY1x0PSAwLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjQ2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZl9kZmx0IF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTQtXHQuc2VnNl9lbmFibGVkXHRcdD0gMCxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjk1OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk2LVx0LnNlZzZfcmVxdWlyZV9obWFjXHQ9IDAsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz01NjY0PXN0YXRpYyB2b2lkIGlwdjZfc3RvcmVfZGV2Y29uZihjb25zdCBzdHJ1Y3QgaXB2Nl9kZXZjb25mICpjbmYsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzM4LVx0YXJyYXlbREVWQ09ORl9TRUc2X0VOQUJMRURdID0gUkVBRF9PTkNFKGNuZi1cdTAwM2VzZWc2X2VuYWJsZWQpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzM5OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTc0MC1cdGFycmF5W0RFVkNPTkZfU0VHNl9SRVFVSVJFX0hNQUNdID0gUkVBRF9PTkNFKGNuZi1cdTAwM2VzZWc2X3JlcXVpcmVfaG1hYyk7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02ODQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGFkZHJjb25mX3N5c2N0bFtdID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIyNS1cdH0sXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMjY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvYWRkcmNvbmYuYy03MjI3LVx0e1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy00Ny0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNi5oXHUwMDNlXG5uZXQvaXB2Ni9leHRoZHJzLmM6NDg6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvZXh0aGRycy5jLTQ5LSNpbmNsdWRlIFx1MDAzY25ldC9zZWc2X2htYWMuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzg4LVxubmV0L2lwdjYvZXh0aGRycy5jOjM4OTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzkwLVx0aWYgKCFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpIHtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9MTEyND1zdGF0aWMgdTggaXB2Nl9wdXNoX3J0aGRyNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwcm90byxcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1Mi1cbm5ldC9pcHY2L2V4dGhkcnMuYzoxMTUzOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTU0LVx0aWYgKHNyX2hhc19obWFjKHNyX3BoZHIpKSB7XG4tLVxubmV0L2lwdjYvc2VnNi5jPTE0MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc2VnNl9nZW5sX3BvbGljeVtTRUc2X0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzYuYy0xNTAtXG5uZXQvaXB2Ni9zZWc2LmM6MTUxOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzYuYy0xNTItXG4tLVxubmV0L2lwdjYvc2VnNi5jPTI2Nj1zdGF0aWMgaW50IHNlZzZfZ2VubF9nZXRfdHVuc3JjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2lwdjYvc2VnNi5jLTI5OS1cbm5ldC9pcHY2L3NlZzYuYzozMDA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNi5jLTMwMS1cbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjUtI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9jYWNoZS5oXHUwMDNlXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MjY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTI3LSNpbmNsdWRlIFx1MDAzY25ldC9zZWc2X2htYWMuaFx1MDAzZVxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0xNDE9c3RhdGljIGludCBfX3NlZzZfZG9fc3JoX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjAxLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjIwMjojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjAzLVx0aWYgKHNyX2hhc19obWFjKGlzcmgpKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTIyNT1zdGF0aWMgaW50IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zMjgtXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MzI5OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zMzAtXHRpZiAodW5saWtlbHkoIXNraXBfc3JoIFx1MDAyNlx1MDAyNiBzcl9oYXNfaG1hYyhpc3JoKSkpIHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM9MzQ1PXN0YXRpYyBpbnQgX19zZWc2X2RvX3NyaF9pbmxpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoLFxuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zODAtXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MzgxOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zODItXHRpZiAoc3JfaGFzX2htYWMoaXNyaCkpIHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjctI2luY2x1ZGUgXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI4OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yOS0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNl9obWFjLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjE2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKmdldF9hbmRfdmFsaWRhdGVfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjQ6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyNS1cdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yMzI9c3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQwLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyLVx0aWYgKHNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9NzU4PXN0YXRpYyBpbnQgZW5kX2Zsdjg5ODZfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc2OS1cdHBpbmZvID0gc2VnNl9nZXRfc3JoX3BrdGluZm8oc3JoKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NzA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc3MS1cdGlmIChzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDkxCgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJUHY2IEZ1enppbmcgU2V0dXAqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0YXJnZXRpbmcgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3J0aGRyX3JjdmAgZm9yIHNwZWNpZmljIGZ1enppbmcgYXR0ZW50aW9uLiBUaG9zZSBhcmUgaW1wb3J0YW50LCBhbmQgcmlnaHQgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdXMgdG8gYmUgZm9jdXNpbmcgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aG9zZSBwcm90b2NvbHMuCgpOZXh0LCBJIHNlZSB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgZW5hYmxlZC4gV2UgaGF2ZSBgSVBWNmAsIGBJUFY2X1NFRzZfTFdUVU5ORUxgLCBhbmQgYElQVjZfU0VHNl9ITUFDYC4gVGhhdCBtYWtlcyBzZW5zZTsgd2Ugd2FudCB0byBlbnN1cmUgdGhlc2UgYXJlIGVuYWJsZWQsIGJlY2F1c2UgdGhleSBhcmUgY3J1Y2lhbCBmb3IgdGVzdGluZyB0aG9zZSBzcGVjaWZpYyBmZWF0dXJlcy4gSSBzZWUgdGhleSYjMzk7cmUgcHJvdmlkZWQgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIG92ZXJhbGwgaW5zdHJ1Y3Rpb25zIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGFsaWduZWQuIFllcywgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgZ29vZC4gSSBzZWUgdGhlIHNhbWUgZm9jdXMgc3ltYm9scyBhbmQgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLCBjb25maXJtZWQuIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgb24gcG9pbnQuIFBlcmZlY3QsIGl0IGFsbCBsb29rcyBzb3VuZC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBzZXR1cC4gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGV4ZWN1dGUgdGhlIGBzZXQtcmVzdWx0c2AgY29tbWFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBieSByZXBsYWNpbmcgZml4ZWQgYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgIGFkanVzdG1lbnRzIGluIGBza2JfcHVzaCgpYCBhbmQgYHNrYl9wdWxsKClgIHdpdGggZHluYW1pYyBvZmZzZXRzIChgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgKS4gVGhpcyBjb3JyZWN0bHkgYWRqdXN0cyBgc2tiLVx1MDAzZWRhdGFgIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV0d29yayBoZWFkZXIgYW5kIHRyYW5zcG9ydCBoZWFkZXIgd2hlbiBleHRlbnNpb24gaGVhZGVycyBwcmVjZWRlIHRoZSBTUkguXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhY2Nlc3MgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGZpZWxkcywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHZpYSBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIGluY29ycmVjdCBgc2tiX3B1c2hgL2Bza2JfcHVsbGAgY2FsY3VsYXRpb25zIHJlbGF0ZSB0byBza2IgYnVmZmVyIGJvdW5kcyBhbmQgaGVhZGVyIGFsaWdubWVudCwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc2tfYnVmZiBydW50aW1lIGFzc2VydGlvbnMgKGUuZy4sIGBza2JfdW5kZXJfcGFuaWNgL2Bza2Jfb3Zlcl9wYW5pY2ApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDQ0MzU3MzVhMzgxNWNmYTVmZTgyNDI2NzJlMmFmMzMzZDM5NjI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMTc6MTg6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggNTE5NDFhZDY1NmEzNi4uMDlhNDU1MmY3ZjA4YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtNDQ1LDcgJiM0Mzs0NDUsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogCWhkci0mZ3Q7c2VnbWVudHNfbGVmdC0tOwogCWFkZHIgPSBoZHItJmd0O3NlZ21lbnRzICYjNDM7IGhkci0mZ3Q7c2VnbWVudHNfbGVmdDsKIAotCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiYjNDM7CXNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKIAogCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKIAkJc2VnNl91cGRhdGVfY3N1bShza2IpOwpAQCAtNDY5LDcgJiM0Mzs0NjksNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogCQl9CiAJCWlwdjZfaGRyKHNrYiktJmd0O2hvcF9saW1pdC0tOwogCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiYjNDM7CQlza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpOwogCQlnb3RvIGxvb3BlZF9iYWNrOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcGF0Y2g6CgoqKkV2YWx1YXRpbmcgdGhlIEtNU0FOIEZ1enppbmcgTmVjZXNzaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBUaGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggdGhpcywgYXMgYWx3YXlzLCBpcyBtZXRob2RpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gQ29udGV4dCBpcyBldmVyeXRoaW5nLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgcmVsZXZhbnQgY29kZSwgb3IgcGVyaGFwcyBgZ3JlcHBlcmAgaWYgSSBqdXN0IHdhbnQgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgcmVmZXJlbmNlcy4gSSYjMzk7bSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGUgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBGb2N1c2luZyBvbiB0aGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJlYSB0aGlzIHBhdGNoIHRvdWNoZXMgYW5kIGhlbHAgbWUgZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiByaXNrIGFuZCwgc3Vic2VxdWVudGx5LCB3aGV0aGVyIGRlZGljYXRlZCBmdXp6aW5nIGlzIGEgd2lzZSBpbnZlc3RtZW50IG9mIHJlc291cmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzMDpcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcbiA0MzE6XHRcdFx0cmV0dXJuIC0xO1xuIDQzMjpcdFx0fVxuIDQzMzpcdFxuIDQzNDpcdFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xuIDQzNTpcdFx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XG4gNDM2Olx0XHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXG4gNDM3Olx0XHRcdFx0XHRcdElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTtcbiA0Mzg6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0Mzk6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDQwOlx0XHRcdH1cbiA0NDE6XHRcbiA0NDI6XHRcdFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gNDQzOlx0XHR9XG4gNDQ0Olx0XG4gNDQ1Olx0XHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIDQ0NjpcdFx0YWRkciA9IGhkci1cdTAwM2VzZWdtZW50cyAmIzQzOyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiA0NDc6XHRcbiA0NDg6XHRcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcbiA0NDk6XHRcbiA0NTA6XHRcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxuIDQ1MTpcdFx0XHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XG4gNDUyOlx0XG4gNDUzOlx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyID0gKmFkZHI7XG4gNDU0Olx0XG4gNDU1Olx0XHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcbiA0NTY6XHRcbiA0NTc6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA0NTg6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNDU5Olx0XHRcdHJldHVybiAtMTtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRcdGlmIChza2JfZHN0X2Rldihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcbiA0NjM6XHRcdFx0aWYgKGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDQ2NDpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA0NjU6XHRcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiA0NjY6XHRcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiA0Njc6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0Njg6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDY5Olx0XHRcdH1cbiA0NzA6XHRcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbiA0NzE6XHRcbiA0NzI6XHRcdFx0c2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcbiA0NzM6XHRcdFx0Z290byBsb29wZWRfYmFjaztcbiA0NzQ6XHRcdH1cbiA0NzU6XHRcbiA0NzY6XHRcdGRzdF9pbnB1dChza2IpO1xuIDQ3NzpcdFxuIDQ3ODpcdFx0cmV0dXJuIC0xO1xuIDQ3OTpcdH1cbiA0ODA6XHRcbiA0ODE6XHRzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiA0ODI6XHR7XG4gNDgzOlx0XHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcbiA0ODQ6XHRcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbiA0ODU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNDg2Olx0XHRzdHJ1Y3QgaXB2NmhkciAqb2xkaGRyO1xuIDQ4NzpcdFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xuIDQ4ODpcdFx0dW5zaWduZWQgY2hhciAqYnVmO1xuIDQ4OTpcdFx0aW50IGFjY2VwdF9ycGxfc2VnO1xuIDQ5MDpcdFx0aW50IGksIGVycjtcbiA0OTE6XHRcdHU2NCBuID0gMDtcbiA0OTI6XHRcdHUzMiByO1xuIDQ5MzpcdFxuIDQ5NDpcdFx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXG4gNDk1Olx0XHRcdFx0ICAgICBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkKSk7XG4gNDk2Olx0XHRpZiAoIWFjY2VwdF9ycGxfc2VnKSB7XG4gNDk3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQ5ODpcdFx0XHRyZXR1cm4gLTE7XG4gNDk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIFJlY2VpdmUgUGF0aCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgYWx0ZXJlZCBpbiByZWxhdGlvbiB0byBgaXB2Nl9zcmhfcmN2YC4gQ29udGV4dCBpcyBrZXkgaGVyZSwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvZGUgaXRzZWxmLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIDM4MCB0aHJvdWdoIDQ1MCBvZiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gVGhpcyBzZWN0aW9uIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBTb3VyY2UgUm91dGluZyBIZWFkZXIgZHVyaW5nIHRoZSByZWNlcHRpb24gcHJvY2Vzcy4gS25vd2luZyB0aGUgZXhhY3QgY2hhbmdlcyBpbiB0aGF0IHNlY3Rpb24gd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgbW9kaWZpY2F0aW9ucywgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF04oCZcyBjaGFuZ2luZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiB0byBwcm9wZXJseSBldmFsdWF0ZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFxuIDM4MTpcdFx0YWNjZXB0X3NlZzYgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXNlZzZfZW5hYmxlZCksXG4gMzgyOlx0XHRcdFx0ICBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuc2VnNl9lbmFibGVkKSk7XG4gMzgzOlx0XG4gMzg0Olx0XHRpZiAoIWFjY2VwdF9zZWc2KSB7XG4gMzg1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM4NjpcdFx0XHRyZXR1cm4gLTE7XG4gMzg3Olx0XHR9XG4gMzg4Olx0XG4gMzg5Olx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuIDM5MDpcdFx0aWYgKCFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpIHtcbiAzOTE6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMzkyOlx0XHRcdHJldHVybiAtMTtcbiAzOTM6XHRcdH1cbiAzOTQ6XHQjZW5kaWZcbiAzOTU6XHRcbiAzOTY6XHRsb29wZWRfYmFjazpcbiAzOTc6XHRcdGlmIChoZHItXHUwMDNlc2VnbWVudHNfbGVmdCA9PSAwKSB7XG4gMzk4Olx0XHRcdGlmIChoZHItXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjYgfHwgaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KSB7XG4gMzk5Olx0XHRcdFx0aW50IG9mZnNldCA9IChoZHItXHUwMDNlaGRybGVuICYjNDM7IDEpIFx1MDAzY1x1MDAzYyAzO1xuIDQwMDpcdFxuIDQwMTpcdFx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLFxuIDQwMjpcdFx0XHRcdFx0XHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xuIDQwMzpcdFx0XHRcdHNrYl9wdWxsKHNrYiwgb2Zmc2V0KTtcbiA0MDQ6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLFxuIDQwNTpcdFx0XHRcdFx0XHQgICBvZmZzZXQpO1xuIDQwNjpcdFxuIDQwNzpcdFx0XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDQwODpcdFx0XHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gNDA5Olx0XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuIDQxMDpcdFx0XHRcdGlmIChoZHItXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjQpXG4gNDExOlx0XHRcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4gNDEyOlx0XHRcdFx0X19za2JfdHVubmVsX3J4KHNrYiwgc2tiLVx1MDAzZWRldiwgbmV0KTtcbiA0MTM6XHRcbiA0MTQ6XHRcdFx0XHRuZXRpZl9yeChza2IpO1xuIDQxNTpcdFx0XHRcdHJldHVybiAtMTtcbiA0MTY6XHRcdFx0fVxuIDQxNzpcdFxuIDQxODpcdFx0XHRvcHQtXHUwMDNlc3JjcnQgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XG4gNDE5Olx0XHRcdG9wdC1cdTAwM2VsYXN0b3B0ID0gb3B0LVx1MDAzZXNyY3J0O1xuIDQyMDpcdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gKGhkci1cdTAwM2VoZHJsZW4gJiM0MzsgMSkgXHUwMDNjXHUwMDNjIDM7XG4gNDIxOlx0XHRcdG9wdC1cdTAwM2VuaG9mZiA9IChcdTAwMjZoZHItXHUwMDNlbmV4dGhkcikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiA0MjI6XHRcbiA0MjM6XHRcdFx0cmV0dXJuIDE7XG4gNDI0Olx0XHR9XG4gNDI1Olx0XG4gNDI2Olx0XHRpZiAoaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQgXHUwMDNlPSAoaGRyLVx1MDAzZWhkcmxlbiBcdTAwM2VcdTAwM2UgMSkpIHtcbiA0Mjc6XHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIDQyODpcdFx0XHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXG4gNDI5Olx0XHRcdFx0XHQgICgoXHUwMDI2aGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQpIC1cbiA0MzA6XHRcdFx0XHRcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpKSk7XG4gNDMxOlx0XHRcdHJldHVybiAtMTtcbiA0MzI6XHRcdH1cbiA0MzM6XHRcbiA0MzQ6XHRcdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbiA0MzU6XHRcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xuIDQzNjpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpLFxuIDQzNzpcdFx0XHRcdFx0XHRJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7XG4gNDM4Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDM5Olx0XHRcdFx0cmV0dXJuIC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ1CgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDg1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgU1JIIFJlY2VpdmUgUGF0aCBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjb21taXQgaW4gYGlwdjZfc3JoX3JjdmAgY2F1Z2h0IG15IGV5ZS4gVGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIGZpeGVkIGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCB3aXRoIGBza2JfbmV0d29ya19vZmZzZXQoc2tiKWAgYW5kIGBza2JfdHJhbnNwb3J0X29mZnNldChza2IpYCBpbiB0aGUgYHNrYl9wdXNoYCBhbmQgYHNrYl9wdWxsYCBjYWxscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeSB0aGUgY2hhbmdlPyBJdCBzZWVtcyB0aGV5JiMzOTtyZSBoYW5kbGluZyBjYXNlcyB3aXRoIGV4dGVuc2lvbiBoZWFkZXJzIHByZWNlZGluZyB0aGUgU1JILCBhbmQgcG90ZW50aWFsbHkgd2hlcmUgdGhlIGBza2ItJmd0O2RhdGFgIHBvaW50ZXIgaXMgYWxyZWFkeSBwYXN0IHRoZSBJUHY2IGhlYWRlciBhbmQgYXQgdGhlIFNSSCBoZWFkZXIgb3IgdHJhbnNwb3J0IGhlYWRlci4KCmBza2JfbmV0d29ya19vZmZzZXQoc2tiKWAgZ2l2ZXMgYSBuZWdhdGl2ZSBvZmZzZXQgaW4gdGhlc2Ugc2NlbmFyaW9zIChiZWNhdXNlIGBza2ItJmd0O2RhdGFgIGlzIGFoZWFkIG9mIGBza2ItJmd0O25ldHdvcmtfaGVhZGVyYCkuIFRodXMsIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGVmZmVjdGl2ZWx5IG1vdmVzIHRoZSBkYXRhIHBvaW50ZXIgYmFjayB0byB0aGUgKmFjdHVhbCogc3RhcnQgb2YgdGhlIElQdjYgaGVhZGVyLCBub3QganVzdCBhc3N1bWluZyBpdCYjMzk7cyBhIGZpeGVkIHNpemUgYXdheS4gU2ltaWxhcmx5LCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWAgY29ycmVjdGx5IHBvc2l0aW9ucyB0aGUgcG9pbnRlciB0byB0aGUgdHJhbnNwb3J0IGhlYWRlciwgYXMgdGhlIGRhdGEgaXMgYWxyZWFkeSBhaGVhZCBvZiB0aGUgbmV0d29yayBoZWFkZXIuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byB0aGUgS01TQU4gYW5nbGUuIEZpcnN0LCBkb2VzIHRoaXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYW55IHdheT8gTm8sIGl0JiMzOTtzIG9wZXJhdGluZyBvbiByZWNlaXZlZCBTS0JzIHdpdGhpbiB0aGUga2VybmVsIG5ldHdvcmsgc3RhY2suIFdlJiMzOTtyZSBub3QgY29weWluZyB0byB1c2Vyc3BhY2UsIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGRpcmVjdGx5IChpdCYjMzk7cyBwb2ludGVyIGFyaXRobWV0aWMgd2l0aGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlKSwgb3IgY3JlYXRpbmcgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgaGFyYm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIGFyZSBoYXBwZW5pbmcgaGVyZS4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93IG9yIHVuZGVyZmxvdz8gVGhpcyBjaGFuZ2UgaXMgZGVzaWduZWQgdG8gKmZpeCogcG90ZW50aWFsIGlzc3VlcyB3aXRoIGJ1ZmZlciBtYW5hZ2VtZW50IHdoZW4gZXh0ZW5zaW9uIGhlYWRlcnMgYXJlIGludm9sdmVkLCBieSBjb3JyZWN0bHkgYWRqdXN0aW5nIGBza2ItJmd0O2RhdGFgIGFuZCBlbnN1cmluZyB0aGUgc2tiIGhlYWQvdGFpbCBzdGF5IGluIHN5bmMuIEluYWNjdXJhdGUgYHNrYl9wdXNoYCAvIGBza2JfcHVsbGAgY291bGQgY2F1c2UgbWlzYWxpZ25tZW50LCBidXQgZXhpc3Rpbmcga2VybmVsIGNoZWNrcyBhbmQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNBTml0aXplcikgYXJlIGRlc2lnbmVkIHRvIGNhdGNoIHByZWNpc2VseSB0aGVzZSB0eXBlcyBvZiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUgZXJyb3JzLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoICoqZG9lcyBub3QqKiBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gaXMgdGhlIGNvcnJlY3QgdG9vbCBoZXJlLCBjb3ZlcmluZyB0aGUgYnVmZmVyIG1hbmlwdWxhdGlvbiBzaWRlIG9mIHRoaW5ncywgYW5kIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNBTml0aXplcikgaXMgbm90IG5lY2Vzc2FyeS4gV2UgaGF2ZSBwcm9wZXIgYm91bmRzIGNoZWNraW5nLCBhbmQgYW55IGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBza2IgY2hlY2tzLgoKU28sIHRvIHN1bW1hcml6ZTogdGhlIHBhdGNoIGNvcnJlY3RzIHRoZSBTS0IgZGF0YSBwb2ludGVyIGFkanVzdG1lbnQgaW4gYGlwdjZfc3JoX3JjdigpYCBieSB1c2luZyBkeW5hbWljIG9mZnNldHMgKGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGFuZCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWApIGluc3RlYWQgb2YgZml4ZWQgc2l6ZXMsIHdoaWNoIGVuc3VyZXMgdGhlIFNLQiBwb2ludGVycyBhcmUgcHJvcGVybHkgYWxpZ25lZCB3aXRoIG5ldHdvcmsvdHJhbnNwb3J0IGhlYWRlcnMgd2hlbiBleHRlbnNpb24gaGVhZGVycyBhcmUgcHJlc2VudC4gVGhpcyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGFueSB3YXkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIG1hbmFnZW1lbnQgYXJlIGNhdWdodCBieSBLQVNBTi4gU28sIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBwcm9jZXNzaW5nIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGJ5IHJlcGxhY2luZyBmaXhlZCBgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWAgYWRqdXN0bWVudHMgaW4gYHNrYl9wdXNoKClgIGFuZCBgc2tiX3B1bGwoKWAgd2l0aCBkeW5hbWljIG9mZnNldHMgKGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGFuZCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWApLiBUaGlzIGNvcnJlY3RseSBhZGp1c3RzIGBza2ItXHUwMDNlZGF0YWAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXR3b3JrIGhlYWRlciBhbmQgdHJhbnNwb3J0IGhlYWRlciB3aGVuIGV4dGVuc2lvbiBoZWFkZXJzIHByZWNlZGUgdGhlIFNSSC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGFjY2VzcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZmllbGRzLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgdmlhIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb3JyZWN0IGBza2JfcHVzaGAvYHNrYl9wdWxsYCBjYWxjdWxhdGlvbnMgcmVsYXRlIHRvIHNrYiBidWZmZXIgYm91bmRzIGFuZCBoZWFkZXIgYWxpZ25tZW50LCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBza19idWZmIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoZS5nLiwgYHNrYl91bmRlcl9wYW5pY2AvYHNrYl9vdmVyX3BhbmljYCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBieSByZXBsYWNpbmcgZml4ZWQgYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgIGFkanVzdG1lbnRzIGluIGBza2JfcHVzaCgpYCBhbmQgYHNrYl9wdWxsKClgIHdpdGggZHluYW1pYyBvZmZzZXRzIChgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgKS4gVGhpcyBjb3JyZWN0bHkgYWRqdXN0cyBgc2tiLVx1MDAzZWRhdGFgIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV0d29yayBoZWFkZXIgYW5kIHRyYW5zcG9ydCBoZWFkZXIgd2hlbiBleHRlbnNpb24gaGVhZGVycyBwcmVjZWRlIHRoZSBTUkguXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhY2Nlc3MgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGZpZWxkcywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHZpYSBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIGluY29ycmVjdCBgc2tiX3B1c2hgL2Bza2JfcHVsbGAgY2FsY3VsYXRpb25zIHJlbGF0ZSB0byBza2IgYnVmZmVyIGJvdW5kcyBhbmQgaGVhZGVyIGFsaWdubWVudCwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc2tfYnVmZiBydW50aW1lIGFzc2VydGlvbnMgKGUuZy4sIGBza2JfdW5kZXJfcGFuaWNgL2Bza2Jfb3Zlcl9wYW5pY2ApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxODozOS42NjYzODUxODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM4MzY0MDA3NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0hNQUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3NyaF9yY3ZcIixcbiAgICBcImlwdjZfcnRoZHJfcmN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBieSByZXBsYWNpbmcgZml4ZWQgYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgIGFkanVzdG1lbnRzIGluIGBza2JfcHVzaCgpYCBhbmQgYHNrYl9wdWxsKClgIHdpdGggZHluYW1pYyBvZmZzZXRzIChgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgKS4gVGhpcyBjb3JyZWN0bHkgYWRqdXN0cyBgc2tiLVxcdTAwM2VkYXRhYCB0byB0aGUgc3RhcnQgb2YgdGhlIG5ldHdvcmsgaGVhZGVyIGFuZCB0cmFuc3BvcnQgaGVhZGVyIHdoZW4gZXh0ZW5zaW9uIGhlYWRlcnMgcHJlY2VkZSB0aGUgU1JILlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhY2Nlc3MgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGZpZWxkcywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHZpYSBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIGluY29ycmVjdCBgc2tiX3B1c2hgL2Bza2JfcHVsbGAgY2FsY3VsYXRpb25zIHJlbGF0ZSB0byBza2IgYnVmZmVyIGJvdW5kcyBhbmQgaGVhZGVyIGFsaWdubWVudCwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc2tfYnVmZiBydW50aW1lIGFzc2VydGlvbnMgKGUuZy4sIGBza2JfdW5kZXJfcGFuaWNgL2Bza2Jfb3Zlcl9wYW5pY2ApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE4OjM5LjY2NjM4OTI1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTc0NTk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFkNDQzNTczNWEzODE1Y2ZhNWZlODI0MjY3MmUyYWYzMzNkMzk2MjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjggMTc6MTg6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXFxuaW5kZXggNTE5NDFhZDY1NmEzNi4uMDlhNDU1MmY3ZjA4YSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcXG4rKysgYi9uZXQvaXB2Ni9leHRoZHJzLmNcXG5AQCAtNDQ1LDcgKzQ0NSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIFxcdGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xcbiBcXHRhZGRyID0gaGRyLVxcdTAwM2VzZWdtZW50cyArIGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdDtcXG4gXFxuLVxcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuK1xcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcXG4gXFxuIFxcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcXG4gXFx0XFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xcbkBAIC00NjksNyArNDY5LDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4gXFx0XFx0fVxcbiBcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4gXFxuLVxcdFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuK1xcdFxcdHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XFxuIFxcdFxcdGdvdG8gbG9vcGVkX2JhY2s7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE4OjQxLjEwNjczOTMzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTAzMTk3MTcwNDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9ITUFDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFkNDQzNTczNWEzODE1Y2ZhNWZlODI0MjY3MmUyYWYzMzNkMzk2MjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAxNzoxODozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuaW5kZXggNTE5NDFhZDY1NmEzNi4uMDlhNDU1MmY3ZjA4YSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2V4dGhkcnMuY1xuKysrIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5AQCAtNDQ1LDcgKzQ0NSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIFx0YWRkciA9IGhkci1cdTAwM2VzZWdtZW50cyArIGhkci1cdTAwM2VzZWdtZW50c19sZWZ0O1xuIFxuLVx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbitcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcbiBcbiBcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxuIFx0XHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XG5AQCAtNDY5LDcgKzQ2OSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbiBcbi1cdFx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbitcdFx0c2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcbiBcdFx0Z290byBsb29wZWRfYmFjaztcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE4OjQxLjEwNjc0MDU5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1NTAyODYyMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBkaWdnaW5nIGludG8gYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGFuZCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBpcHY2X3NyaF9yY3ZgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgaW50ZXJlc3Qg4oCTIHdlJ3JlIHRhbGtpbmcgYWJvdXQgc291cmNlIHJvdXRpbmcgaGVhZGVycyBpbiBJUHY2LCB3aGljaCwgd2hpbGUgbm90IGFzIHByZXZhbGVudCBhcyB0aGV5IG9uY2Ugd2VyZSwgc3RpbGwgcmVwcmVzZW50IGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3IgYW5kIGEgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNoYW5nZWQgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIExldCdzIHplcm8gaW4gb24gbGluZSA0NDUgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIFNSSCBoYW5kbGluZyBsb2dpYyB0aGVyZS4gSSdsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmcgd2l0aCB0aGUgc2VnbWVudCBsaXN0LCB0aGUgcG9pbnRlciBhcml0aG1ldGljLCBhbnkgaG9wLWJ5LWhvcCBvcHRpb25zIGFuZCBpZiB0aGV5IGFyZSB2YWxpZGF0aW5nIHRoZSBzb3VyY2Ugcm91dGVzIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MTk6MzYuNjA5NjA1MDEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMDpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNDIxOlxcdFxcdFxcdG9wdC1cXHUwMDNlbmhvZmYgPSAoXFx1MDAyNmhkci1cXHUwMDNlbmV4dGhkcikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDQyNDpcXHRcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgXFx1MDAzZT0gKGhkci1cXHUwMDNlaGRybGVuIFxcdTAwM2VcXHUwMDNlIDEpKSB7XFxuIDQyNzpcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDQyODpcXHRcXHRcXHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXFxuIDQyOTpcXHRcXHRcXHRcXHRcXHQgICgoXFx1MDAyNmhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCkgLVxcbiA0MzA6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcXG4gNDMxOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbiA0MzU6XFx0XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xcbiA0MzY6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHRcXHRJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7XFxuIDQzODpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDM5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDQ0MzpcXHRcXHR9XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xcbiA0NDY6XFx0XFx0YWRkciA9IGhkci1cXHUwMDNlc2VnbWVudHMgKyBoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQ7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbiA0NTE6XFx0XFx0XFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkciA9ICphZGRyO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcXG4gNDU2OlxcdFxcbiA0NTc6XFx0XFx0aWYgKHNrYl9kc3Qoc2tiKS1cXHUwMDNlZXJyb3IpIHtcXG4gNDU4OlxcdFxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiA0NTk6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0NjA6XFx0XFx0fVxcbiA0NjE6XFx0XFxuIDQ2MjpcXHRcXHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcXG4gNDYzOlxcdFxcdFxcdGlmIChpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQgXFx1MDAzYz0gMSkge1xcbiA0NjQ6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiA0NjU6XFx0XFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXFxuIDQ2NjpcXHRcXHRcXHRcXHRcXHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XFxuIDQ2NzpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDY4OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDY5OlxcdFxcdFxcdH1cXG4gNDcwOlxcdFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRcXHRza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpO1xcbiA0NzM6XFx0XFx0XFx0Z290byBsb29wZWRfYmFjaztcXG4gNDc0OlxcdFxcdH1cXG4gNDc1OlxcdFxcbiA0NzY6XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdHJldHVybiAtMTtcXG4gNDc5OlxcdH1cXG4gNDgwOlxcdFxcbiA0ODE6XFx0c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIDQ4MjpcXHR7XFxuIDQ4MzpcXHRcXHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcXG4gNDg0OlxcdFxcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcXG4gNDg1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiA0ODY6XFx0XFx0c3RydWN0IGlwdjZoZHIgKm9sZGhkcjtcXG4gNDg3OlxcdFxcdHVuc2lnbmVkIGludCBjaGRyX2xlbjtcXG4gNDg4OlxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZjtcXG4gNDg5OlxcdFxcdGludCBhY2NlcHRfcnBsX3NlZztcXG4gNDkwOlxcdFxcdGludCBpLCBlcnI7XFxuIDQ5MTpcXHRcXHR1NjQgbiA9IDA7XFxuIDQ5MjpcXHRcXHR1MzIgcjtcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0XFx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cXHUwMDNlcnBsX3NlZ19lbmFibGVkKSxcXG4gNDk1OlxcdFxcdFxcdFxcdCAgICAgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcXG4gNDk2OlxcdFxcdGlmICghYWNjZXB0X3JwbF9zZWcpIHtcXG4gNDk3OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0OTg6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0OTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxOTozNi42MDk3MDQ5OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjY0NjE1ODk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBTb3VyY2UgUm91dGluZyBIZWFkZXIgUmVjZXB0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzOiB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIGtlcm5lbD8gSSB3YW50IHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoLlxuXG5CZXlvbmQgdGhhdCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gV2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgY29udHJvbCB0aGlzIGZlYXR1cmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBpcHY2X3NyaF9yY3ZgIGFuZCB0aGUgb3ZlcmFsbCBzdXBwb3J0IGZvciBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpLCBhbmQgbW9yZSBnZW5lcmFsbHksIElQdjYgcm91dGluZyBoZWFkZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCB0ZWxsIG1lIGFib3V0IGl0cyBicm9hZGVyIGVjb3N5c3RlbSwgaS5lLiwgaG93IGl0J3MgZW5hYmxlZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgZmVhdHVyZXMuIEFyZSB0aGVyZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgU1J2NiBvciBvdGhlciBleHRlbnNpb25zPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIHN1cnJvdW5kaW5nIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjIwOjM5LjI1NTg2NzE0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk2MzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3NyaF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jPTM0Mj1zdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzozNzE6c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY4My1cXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2ODQ6XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy02ODUtXFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MjA6MzkuMzAxODM0MzE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgyNzQwMDY3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBJUHY2IENvbXBpbGF0aW9uIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZXh0aGRycy5jYCBmaWxlIGdldHMgY29tcGlsZWQgYW5kIGhvdyB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgYGlwdjZfc3JoX3JjdmAsIGlzIGNvbmZpZ3VyZWQuIFRoaXMgdGVsbHMgbWUgYSBsb3QgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvcmUgbWFrZWZpbGVzIGFuZCBLY29uZmlnIGZpbGVzLiBGaXJzdCB1cCwgSSdsbCBjaGVjayBgbmV0L2lwdjYvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBvdmVyYWxsIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIElQdjYuIFRoZW4sIEknbGwgZGl2ZSBpbnRvIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpdmUuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgU1J2NiBmZWF0dXJlcyBhbmQgaG93IHRoZXkgYXJlIGVuYWJsZWQvZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gYGlwdjZfc3JoX3JjdmAgYW5kIHdoYXQgdHJpZ2dlcnMgdGhlaXIgaW5jbHVzaW9uIChvciBleGNsdXNpb24pIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUgd2hlbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgdGhlIGJ1aWxkIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjIxOjA3LjU3NTg0MzY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzQxODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dGhkcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9OD1pcHY2LXkgOj1cXHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxcXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEyOlxcdFxcdGV4dGhkcnMubyBkYXRhZ3JhbS5vIGlwNl9mbG93bGFiZWwubyBpbmV0Nl9jb25uZWN0aW9uX3NvY2subyBcXFxcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTMtXFx0XFx0dWRwX29mZmxvYWQubyBzZWc2Lm8gZmliNl9ub3RpZmllci5vIHJwbC5vIGlvYW02Lm9cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19JUFY2X0ZPVSkgKz0gZm91Ni5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNDUtXFxubmV0L2lwdjYvTWFrZWZpbGU6NDY6b2JqLXkgKz0gYWRkcmNvbmZfY29yZS5vIGV4dGhkcnNfY29yZS5vIGlwNl9jaGVja3N1bS5vIGlwNl9pY21wLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00Ny1vYmotJChDT05GSUdfSU5FVCkgKz0gb3V0cHV0X2NvcmUubyBwcm90b2NvbC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZTo0ODpcXHRcXHRcXHRpcDZfb2ZmbG9hZC5vIGV4dGhkcnNfb2ZmbG9hZC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNDktXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTk5OT1zdGF0aWMgaW50IF9faW5pdCBpbmV0Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTEwOTYtXFx0LyogSW5pdCB2NiBleHRlbnNpb24gaGVhZGVycy4gKi9cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjEwOTc6XFx0ZXJyID0gaXB2Nl9leHRoZHJzX2luaXQoKTtcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTEwOTgtXFx0aWYgKGVycilcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjEwOTk6XFx0XFx0Z290byBpcHY2X2V4dGhkcnNfZmFpbDtcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTExMDAtXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTExNzktaXB2Nl9mcmFnX2ZhaWw6XFxubmV0L2lwdjYvYWZfaW5ldDYuYzoxMTgwOlxcdGlwdjZfZXh0aGRyc19leGl0KCk7XFxubmV0L2lwdjYvYWZfaW5ldDYuYzoxMTgxOmlwdjZfZXh0aGRyc19mYWlsOlxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtMTE4Mi1cXHRhZGRyY29uZl9jbGVhbnVwKCk7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTQtICpcXHRcXHRcXHRcXHQgIHRsdiBvcHRpb25zLlxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxNTogKlxcdE1pdHN1cnUgS0FOREEgQFVTQUdJIGFuZDogUmVtb3ZlIGlwdjZfcGFyc2VfZXh0aGRycygpLlxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xNi0gKlxcdFlPU0hJRlVKSSBIaWRlYWtpIEBVU0FHSSAgUmVnaXN0ZXIgaW5ib3VuZCBleHRlbnNpb24gaGVhZGVyXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9ODUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgbm9kYXRhX3Byb3RvY29sID0ge1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTg1NC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6ODU1OmludCBfX2luaXQgaXB2Nl9leHRoZHJzX2luaXQodm9pZClcXG5uZXQvaXB2Ni9leHRoZHJzLmMtODU2LXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy04NzktXFxubmV0L2lwdjYvZXh0aGRycy5jOjg4MDp2b2lkIGlwdjZfZXh0aGRyc19leGl0KHZvaWQpXFxubmV0L2lwdjYvZXh0aGRycy5jLTg4MS17XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYz0yNT1FWFBPUlRfU1lNQk9MKGlwdjZfZXh0X2hkcik7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYy01MC0gKlxcbm5ldC9pcHY2L2V4dGhkcnNfY29yZS5jOjUxOiAqIEl0IHNraXBzIGFsbCB3ZWxsLWtub3duIGV4dGhkcnMsIGFuZCByZXR1cm5zIHBvaW50ZXIgdG8gdGhlIHN0YXJ0XFxubmV0L2lwdjYvZXh0aGRyc19jb3JlLmMtNTItICogb2YgdW5wYXJzYWJsZSBhcmVhIGkuZS4gdGhlIGZpcnN0IGhlYWRlciB3aXRoIHVua25vd24gdHlwZS5cXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnNfb2ZmbG9hZC5jPTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgaGJoX29mZmxvYWQgPSB7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzX29mZmxvYWQuYy0yMi1cXG5uZXQvaXB2Ni9leHRoZHJzX29mZmxvYWQuYzoyMzppbnQgX19pbml0IGlwdjZfZXh0aGRyc19vZmZsb2FkX2luaXQodm9pZClcXG5uZXQvaXB2Ni9leHRoZHJzX29mZmxvYWQuYy0yNC17XFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9MTAzNz1lbnVtIHNrYl9kcm9wX3JlYXNvbiBpY21wdjZfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtMTA3Ny1cXG5uZXQvaXB2Ni9pY21wLmM6MTA3ODpcXHQvKiBCVUdHR19GVVRVUkU6IHdlIHNob3VsZCB0cnkgdG8gcGFyc2UgZXh0aGRycyBpbiB0aGlzIHBhY2tldC5cXG5uZXQvaXB2Ni9pY21wLmMtMTA3OS1cXHQgICBXaXRob3V0IHRoaXMgd2Ugd2lsbCBub3QgYWJsZSBmLmUuIHRvIG1ha2Ugc291cmNlIHJvdXRlZFxcbi0tXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtMTQtICpcXHRNaXRzdXJ1IEtBTkRBIEBVU0FHSSBhbmRcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzoxNTogKlxcdFlPU0hJRlVKSSBIaWRlYWtpIEBVU0FHSTogUmVtb3ZlIGlwdjZfcGFyc2VfZXh0aGRycygpLlxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTE2LSAqL1xcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMy1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjI0OnN0YXRpYyBpbnQgaXB2Nl9ncm9fcHVsbF9leHRoZHJzKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYsIGludCBwcm90bylcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTI1LXtcXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtNTctXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzo1ODpzdGF0aWMgaW50IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy01OS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTkxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB2Nl9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xMTktXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoxMjA6XFx0cHJvdG8gPSBpcHY2X2dzb19wdWxsX2V4dGhkcnMoc2tiLCBpcHY2aC1cXHUwMDNlbmV4dGhkcik7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xMjEtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTE3OC0vKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiBhbGwgdGhlIGV4dGVuc2lvbiBoZHJzLCBmb2xsb3dpbmcgdGhlIHNhbWVcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjE3OTogKiBsb2dpYyBpbiBpcHY2X2dzb19wdWxsX2V4dGhkcnMoKSB3aGVuIHBhcnNpbmcgZXh0LWhkcnMuXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xODAtICovXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoxODE6c3RhdGljIGludCBpcHY2X2V4dGhkcnNfbGVuKHN0cnVjdCBpcHY2aGRyICppcGgsXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xODItXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqKm9wcHMpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTIwMz1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBzdHJ1Y3Qgc2tfYnVmZiAqaXB2Nl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMjgtXFx0aWYgKCFvcHMgfHwgIW9wcy1cXHUwMDNlY2FsbGJhY2tzLmdyb19yZWNlaXZlKSB7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyMjk6XFx0XFx0cHJvdG8gPSBpcHY2X2dyb19wdWxsX2V4dGhkcnMoc2tiLCBobGVuLCBwcm90byk7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMzAtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTI1OS1cXHRcXHQgKiBhbHJlYWR5IHNvIHdlIGRvbid0IG5lZWQgdG8gY29tcGFyZSBubGVuXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyNjA6XFx0XFx0ICogKG5sZW4gIT0gKHNpemVvZigqaXBoMikgKyBpcHY2X2V4dGhkcnNfbGVuKGlwaDIsIFxcdTAwMjZvcHMpKSlcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTI2MS1cXHRcXHQgKiBtZW1jbXAoKSBhbG9uZSBiZWxvdyBpcyBzdWZmaWNpZW50LCByaWdodD9cXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9MzMyPUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCBpcHY2X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTM0NS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjM0NjpcXHRuaG9mZiArPSBzaXplb2YoKmlwaCkgKyBpcHY2X2V4dGhkcnNfbGVuKGlwaCwgXFx1MDAyNm9wcyk7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0zNDctXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTQzNz1zdGF0aWMgaW50IF9faW5pdCBpcHY2X29mZmxvYWRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy00NDEtXFx0XFx0cHJfY3JpdChcXFwiJXM6IENhbm5vdCBhZGQgVENQIHByb3RvY29sIG9mZmxvYWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjQ0MjpcXHRpZiAoaXB2Nl9leHRoZHJzX29mZmxvYWRfaW5pdCgpIFxcdTAwM2MgMClcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTQ0My1cXHRcXHRwcl9jcml0KFxcXCIlczogQ2Fubm90IGFkZCBFWFRIRFJTIHByb3RvY29sIG9mZmxvYWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmgtOS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oOjEwOmludCBpcHY2X2V4dGhkcnNfb2ZmbG9hZF9pbml0KHZvaWQpO1xcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmgtMTEtaW50IHVkcHY2X29mZmxvYWRfaW5pdCh2b2lkKTtcXG4tLVxcbm5ldC9pcHY2L21jYXN0X3Nub29wLmM9MTQ9c3RhdGljIGludCBpcHY2X21jX2NoZWNrX2lwNmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbWNhc3Rfc25vb3AuYy0zNi1cXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jOjM3OnN0YXRpYyBpbnQgaXB2Nl9tY19jaGVja19leHRoZHJzKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbWNhc3Rfc25vb3AuYy0zOC17XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdF9zbm9vcC5jPTE3Mj1pbnQgaXB2Nl9tY19jaGVja19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L21jYXN0X3Nub29wLmMtMTc5LVxcbm5ldC9pcHY2L21jYXN0X3Nub29wLmM6MTgwOlxcdHJldCA9IGlwdjZfbWNfY2hlY2tfZXh0aGRycyhza2IpO1xcbm5ldC9pcHY2L21jYXN0X3Nub29wLmMtMTgxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoyMTowNy42MjQxODgwODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODkzNzYxMzYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXJzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IElQdjYgcm91dGluZyBoZWFkZXJzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHJldmlzaXQgYGlwdjZfcnRoZHJfcmN2YCB3aXRoaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBrZXJuZWwgcHJvY2Vzc2VzIGluY29taW5nIHBhY2tldHMgdGhhdCB1dGlsaXplIHJvdXRpbmcgaGVhZGVycywgc28gaXQncyB0aGUgcGVyZmVjdCBwbGFjZSB0byBzdGFydC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSB2YXJpb3VzIHR5cGVzIG9mIHJvdXRpbmcgaGVhZGVycyBhbmQgdGhlaXIgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIG5lY2Vzc2FyeSBzYW5pdHkgY2hlY2tzIGFuZCBwcm9jZXNzaW5nIHRvIHByZXZlbnQgcm91dGluZyBsb29wcyBhbmQgYXR0YWNrcy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoyMTo1Ni41NjE4MDQwMjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0NTpcXHRzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIDY0NjpcXHR7XFxuIDY0NzpcXHRcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxuIDY0ODpcXHRcXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuIDY0OTpcXHRcXHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHIgPSBOVUxMO1xcbiA2NTA6XFx0XFx0aW50IG4sIGk7XFxuIDY1MTpcXHRcXHRzdHJ1Y3QgaXB2Nl9ydF9oZHIgKmhkcjtcXG4gNjUyOlxcdFxcdHN0cnVjdCBydDBfaGRyICpydGhkcjtcXG4gNjUzOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiA2NTQ6XFx0XFx0aW50IGFjY2VwdF9zb3VyY2Vfcm91dGU7XFxuIDY1NTpcXHRcXG4gNjU2OlxcdFxcdGFjY2VwdF9zb3VyY2Vfcm91dGUgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VhY2NlcHRfc291cmNlX3JvdXRlKTtcXG4gNjU3OlxcdFxcbiA2NTg6XFx0XFx0aWYgKGlkZXYpXFxuIDY1OTpcXHRcXHRcXHRhY2NlcHRfc291cmNlX3JvdXRlID0gbWluKGFjY2VwdF9zb3VyY2Vfcm91dGUsXFxuIDY2MDpcXHRcXHRcXHRcXHRcXHRcXHQgIFJFQURfT05DRShpZGV2LVxcdTAwM2VjbmYuYWNjZXB0X3NvdXJjZV9yb3V0ZSkpO1xcbiA2NjE6XFx0XFxuIDY2MjpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgOCkgfHxcXG4gNjYzOlxcdFxcdCAgICAhcHNrYl9tYXlfcHVsbChza2IsIChza2JfdHJhbnNwb3J0X29mZnNldChza2IpICtcXG4gNjY0OlxcdFxcdFxcdFxcdFxcdCAoKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilbMV0gKyAxKSBcXHUwMDNjXFx1MDAzYyAzKSkpKSB7XFxuIDY2NTpcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDY2NjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNjY3OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNjY4OlxcdFxcdH1cXG4gNjY5OlxcdFxcbiA2NzA6XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3J0X2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDY3MTpcXHRcXG4gNjcyOlxcdFxcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkcikgfHxcXG4gNjczOlxcdFxcdCAgICBza2ItXFx1MDAzZXBrdF90eXBlICE9IFBBQ0tFVF9IT1NUKSB7XFxuIDY3NDpcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpO1xcbiA2NzU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDY3NjpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDY3NzpcXHRcXHR9XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdHN3aXRjaCAoaGRyLVxcdTAwM2V0eXBlKSB7XFxuIDY4MDpcXHRcXHRjYXNlIElQVjZfU1JDUlRfVFlQRV80OlxcbiA2ODE6XFx0XFx0XFx0Lyogc2VnbWVudCByb3V0aW5nICovXFxuIDY4MjpcXHRcXHRcXHRpZiAoIWlkZXYpXFxuIDY4MzpcXHRcXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbiA2ODQ6XFx0XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbiA2ODU6XFx0XFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG4gNjg2OlxcdFxcdFxcdC8qIHJwbCBzZWdtZW50IHJvdXRpbmcgKi9cXG4gNjg3OlxcdFxcdFxcdGlmICghaWRldilcXG4gNjg4OlxcdFxcdFxcdFxcdGdvdG8gZGlzYWJsZWQ7XFxuIDY4OTpcXHRcXHRcXHRyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IsIGlkZXYpO1xcbiA2OTA6XFx0XFx0ZGVmYXVsdDpcXG4gNjkxOlxcdFxcdFxcdGJyZWFrO1xcbiA2OTI6XFx0XFx0fVxcbiA2OTM6XFx0XFxuIDY5NDpcXHRsb29wZWRfYmFjazpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MjE6NTYuNTYxODk4Njg1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNTQ0NTU1NjA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIElQdjYgUm91dGluZyBIZWFkZXIgUmVjZXB0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIElQdjYgcm91dGluZyBleHRlbnNpb24gaGVhZGVycy4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gYGlwdjZfcnRoZHJfcmN2YCwgc2luY2UgdGhhdCdzIHRoZSBjb3JlIGhhbmRsZXIgZm9yIGFsbCByb3V0aW5nIGhlYWRlcnMsIGFuZCBJIGtub3cgdGhhdCB0aGUgYElQVjZfU1JDUlRfVFlQRV80YCBjb2RlIHBhdGggaXMgdGllZCB0byB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKS4gTWFrZXMgc2Vuc2UgdG8gc3RhcnQgdGhlcmUsIGF0IHRoZSB0b3AgbGV2ZWwsIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBkaXZpbmcgZGVlcC4gTm93LCBsZXQncyB0cmFjZSBgaXB2Nl9zcmhfcmN2YCBhbmQgc2VlIHdoYXQgaXQgaXMgcmVhbGx5IGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzM2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoyNDowMi4wMDc0NTc4OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHRcXG4gMzcxOlxcdHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIDM3MjpcXHR7XFxuIDM3MzpcXHRcXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuIDM3NDpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gMzc1OlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqaGRyO1xcbiAzNzY6XFx0XFx0c3RydWN0IGluNl9hZGRyICphZGRyO1xcbiAzNzc6XFx0XFx0aW50IGFjY2VwdF9zZWc2O1xcbiAzNzg6XFx0XFxuIDM3OTpcXHRcXHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gMzgwOlxcdFxcbiAzODE6XFx0XFx0YWNjZXB0X3NlZzYgPSBtaW4oUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cXHUwMDNlc2VnNl9lbmFibGVkKSxcXG4gMzgyOlxcdFxcdFxcdFxcdCAgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5zZWc2X2VuYWJsZWQpKTtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0aWYgKCFhY2NlcHRfc2VnNikge1xcbiAzODU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM4NjpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDM4NzpcXHRcXHR9XFxuIDM4ODpcXHRcXG4gMzg5OlxcdCNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG4gMzkwOlxcdFxcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XFxuIDM5MTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzkyOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMzkzOlxcdFxcdH1cXG4gMzk0OlxcdCNlbmRpZlxcbiAzOTU6XFx0XFxuIDM5NjpcXHRsb29wZWRfYmFjazpcXG4gMzk3OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xcbiAzOTg6XFx0XFx0XFx0aWYgKGhkci1cXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjYgfHwgaGRyLVxcdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNCkge1xcbiAzOTk6XFx0XFx0XFx0XFx0aW50IG9mZnNldCA9IChoZHItXFx1MDAzZWhkcmxlbiArIDEpIFxcdTAwM2NcXHUwMDNjIDM7XFxuIDQwMDpcXHRcXG4gNDAxOlxcdFxcdFxcdFxcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLFxcbiA0MDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcXG4gNDAzOlxcdFxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgb2Zmc2V0KTtcXG4gNDA0OlxcdFxcdFxcdFxcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksXFxuIDQwNTpcXHRcXHRcXHRcXHRcXHRcXHQgICBvZmZzZXQpO1xcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gNDA4OlxcdFxcdFxcdFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDQwOTpcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbiA0MTA6XFx0XFx0XFx0XFx0aWYgKGhkci1cXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjQpXFxuIDQxMTpcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xcbiA0MTI6XFx0XFx0XFx0XFx0X19za2JfdHVubmVsX3J4KHNrYiwgc2tiLVxcdTAwM2VkZXYsIG5ldCk7XFxuIDQxMzpcXHRcXG4gNDE0OlxcdFxcdFxcdFxcdG5ldGlmX3J4KHNrYik7XFxuIDQxNTpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDQxNjpcXHRcXHRcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdFxcdG9wdC1cXHUwMDNlc3JjcnQgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XFxuIDQxOTpcXHRcXHRcXHRvcHQtXFx1MDAzZWxhc3RvcHQgPSBvcHQtXFx1MDAzZXNyY3J0O1xcbiA0MjA6XFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IChoZHItXFx1MDAzZWhkcmxlbiArIDEpIFxcdTAwM2NcXHUwMDNjIDM7XFxuIDQyMTpcXHRcXHRcXHRvcHQtXFx1MDAzZW5ob2ZmID0gKFxcdTAwMjZoZHItXFx1MDAzZW5leHRoZHIpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDQyMjpcXHRcXG4gNDIzOlxcdFxcdFxcdHJldHVybiAxO1xcbiA0MjQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoyNDowMi4wMDc1NTMyNDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI1NjYyODQ1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElQdjYgU1JIIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHRvIGBpcHY2X3NyaF9yY3ZgIGluIHRoZSBJUHY2IHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSdyZSBjaGFuZ2luZyB0aGUgYHNrYl9wdXNoYCBhbmQgYHNrYl9wdWxsYCBjYWxscyBoZXJlLiAgUHJldmlvdXNseSwgdGhlIGNvZGUgbmFpdmVseSBhc3N1bWVkIHRoZSBJUHY2IGhlYWRlciB3YXMgZGlyZWN0bHkgYWRqYWNlbnQgdG8gdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIsIHVzaW5nIGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCBmb3IgcHVzaGluZyBhbmQgcHVsbGluZy4gIFRoYXQncyBhIGRlZmluaXRlIG92ZXJzaWdodCwgYW5kIGEgc3VidGxlIG9uZSBhdCB0aGF0LlxuXG5UaGUga2V5IGlzIGluIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGVyZSBjYW4gYmUgKm90aGVyKiBleHRlbnNpb24gaGVhZGVycyDigJMgSG9wLWJ5LUhvcCBvcHRpb25zLCBEZXN0aW5hdGlvbiBPcHRpb25zLCBvciBldmVuIGVuY2Fwc3VsYXRlZCBwYWNrZXRzIOKAkyBzaXR0aW5nIGJldHdlZW4gdGhlIG1haW4gSVB2NiBoZWFkZXIgYW5kIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyLiBUaGlzIG1lYW5zIHRoZSBvZmZzZXQgdG8gdGhlIGFjdHVhbCBJUHY2IGhlYWRlciAoYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCkgaXNuJ3QgYWx3YXlzIGEgZml4ZWQgc2l6ZS4gVGhlIG9sZCBjb2RlIHdhcyB2dWxuZXJhYmxlLlxuXG5Ob3cgSSBzZWUgaXQuIFRoZSB1cGRhdGVkIGNvZGUgY29ycmVjdGx5IHVzZXMgYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCB0byBkZXRlcm1pbmUgaG93IGZhciBpdCBuZWVkcyB0byAqcHVzaCogdG8gZ2V0IGJhY2sgdG8gdGhlIElQdjYgaGVhZGVyLCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgIHRvIHB1bGwgaXQgYmFjayB0byB0cmFuc3BvcnQgbGF5ZXIhIFdoZW4gd2UncmUgbG9vcGluZyBiYWNrIHRvIHByb2Nlc3MgdGhlIG5leHQgc2VnbWVudCwgdGhlIHBhdGNoIG5vdyB1c2VzIHRoaXMgdG8gYWNjb3VudCBmb3IgdGhlIHBvdGVudGlhbCBpbnRlcnZlbmluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBpcyBzaWduaWZpY2FudGx5IG1vcmUgcm9idXN0LlxuXG5JJ20gY29uZmlkZW50IHRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpbiBoYW5kbGluZyB0aGUgb2Zmc2V0cywgZXNwZWNpYWxseSB3aXRoIHBvdGVudGlhbGx5IG5lc3RlZCBoZWFkZXJzLCBpcyBwcmVjaXNlbHkgd2hhdCdzIHJlcXVpcmVkIGZvciBjb3JyZWN0IHBhY2tldCBwcm9jZXNzaW5nLlxuXG5BbmQgeWVzLCB0aGlzIHBhdGNoIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gVGhlIGZhY3QgdGhhdCBpdCdzIGJlZW4gdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgd2l0aCByYXcgc29ja2V0cywgdHVuL3RhcCwgYW5kIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcyBjb25maXJtcyB0aGF0IHRoaXMgaXMgYSB2YWxpZCBhbmQgdGVzdGVkIGZpeC5cblxuQWJzb2x1dGVseS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgY2FuIHNlZSBzZXZlcmFsIHBvdGVudGlhbCBhcmVhcyBvZiBhdHRhY2sgd2l0aCB0aGUgY29tcGxleCBoZWFkZXIgbWFuaXB1bGF0aW9ucy5cblRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGFuZCBGb2N1c1N5bWJvbHMuXG5JJ2xsIGxvb2sgZm9yIGBJUFY2X1NFRzZgIGFuZCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGluIGBuZXQvaXB2Ni9LY29uZmlnYCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGVuYWJsZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDg3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MjU6MDQuNTczODQwODgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY1NTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnLTUtXFxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctNy1cXHRib29sIFxcXCJUaGUgSVB2NiBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctMjAtXFxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbm5ldC9pcHY2L0tjb25maWctMjItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzgtXFxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxcbm5ldC9pcHY2L0tjb25maWctNDAtXFx0Ym9vbCBcXFwiSVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXFxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxcbm5ldC9pcHY2L0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBNb2JpbGl0eVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTE5LVxcbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxcbm5ldC9pcHY2L0tjb25maWctMTIxLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTQ5LVxcbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxcbm5ldC9pcHY2L0tjb25maWctMTUxLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTYxLVxcbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxcbm5ldC9pcHY2L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTc2LVxcbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxcbm5ldC9pcHY2L0tjb25maWctMTk3LVxcdGJvb2xcXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMDktXFxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXFxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEdSRSB0dW5uZWxcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1VcXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjMzLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cXHRib29sIFxcXCJJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjQyLVxcbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNDQtXFx0Ym9vbCBcXFwiSVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjU2LVxcbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxcbm5ldC9pcHY2L0tjb25maWctMjU4LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXFxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjY2LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjc4LVxcbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXFxubmV0L2lwdjYvS2NvbmZpZy0yODAtXFx0Ym9vbCBcXFwiSVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yODUtXFxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjg3LVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yOTktXFxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvS2NvbmZpZy0zMDEtXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzExLVxcbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXFxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXFxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXFx0Ym9vbCBcXFwiSVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMjctXFxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cXHRib29sIFxcXCJJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjI1OjA0LjYzMzUwMDczMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTY4NzQ4NzExNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEtjb25maWcgT3B0aW9ucyBmb3IgZXh0aGRycy5jKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbiBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQncyBjb250cm9sbGluZyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYGV4dGhkcnMuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgLCBhbmQgc3VyZSBlbm91Z2gsIHRoZXJlIGl0IGlzOiBgZXh0aGRycy5vYCBpcyBkaXJlY3RseSBsaW5rZWQgaW50byB0aGUgYGlwdjYteWAgbGlzdC4gVGhhdCBtZWFucyBpdCdzIHVuY29uZGl0aW9uYWxseSBidWlsdCBhbG9uZyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSB1bmRlciBgQ09ORklHX0lQVjZgLiBPa2F5LCBzbyBgQ09ORklHX0lQVjZgIGlzIHRoZSBwcmltYXJ5IGZhY3Rvci4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgc2FtZSBNYWtlZmlsZSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGluY2x1c2lvbnMgdGllZCB0byBgc2VnNmAgb3IgcG90ZW50aWFsbHkgYW5vdGhlciBgSVBWNmAgY29uZmlnIHRoYXQgbWlnaHQgYWxzbyBhZmZlY3QgaXQuIE5lZWQgdG8gY292ZXIgYWxsIHRoZSBiYXNlcywgbm8gc3RvbmUgdW50dXJuZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDg3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjI5OjIxLjUwODM3NDQ3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBUQ1AvSVAgKElORVQ2KSBsYXllci5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0lQVjYpICs9IGlwdjYub1xcbiAgIDc6XFx0XFxuICAgODpcXHRpcHY2LXkgOj1cXHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRhZGRybGFiZWwubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxcXFxuICAxMTpcXHRcXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXFxcXG4gIDEzOlxcdFxcdFxcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXFxuICAxNDpcXHRcXG4gIDE1OlxcdGlwdjYtJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjYub1xcbiAgMTY6XFx0aXB2Ni0kKENPTkZJR19JUFY2X01ST1VURSkgKz0gaXA2bXIub1xcbiAgMTc6XFx0XFxuICAxODpcXHRpcHY2LSQoQ09ORklHX1hGUk0pICs9IHhmcm02X3BvbGljeS5vIHhmcm02X3N0YXRlLm8geGZybTZfaW5wdXQubyBcXFxcXFxuICAxOTpcXHRcXHR4ZnJtNl9vdXRwdXQubyB4ZnJtNl9wcm90b2NvbC5vXFxuICAyMDpcXHRpcHY2LSQoQ09ORklHX05FVEZJTFRFUikgKz0gbmV0ZmlsdGVyLm9cXG4gIDIxOlxcdGlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYjZfcnVsZXMub1xcbiAgMjI6XFx0aXB2Ni0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDIzOlxcdGlwdjYtJChDT05GSUdfU1lOX0NPT0tJRVMpICs9IHN5bmNvb2tpZXMub1xcbiAgMjQ6XFx0aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgKz0gY2FsaXBzby5vXFxuICAyNTpcXHRpcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgKz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xcbiAgMjY6XFx0aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgKz0gc2VnNl9obWFjLm9cXG4gIDI3OlxcdGlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICs9IHJwbF9pcHR1bm5lbC5vXFxuICAyODpcXHRpcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICs9IGlvYW02X2lwdHVubmVsLm9cXG4gIDI5OlxcdFxcbiAgMzA6XFx0b2JqLSQoQ09ORklHX0lORVQ2X0FIKSArPSBhaDYub1xcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0lORVQ2X0VTUCkgKz0gZXNwNi5vXFxuICAzMjpcXHRvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICs9IGVzcDZfb2ZmbG9hZC5vXFxuICAzMzpcXHRvYmotJChDT05GSUdfSU5FVDZfSVBDT01QKSArPSBpcGNvbXA2Lm9cXG4gIDM0OlxcdG9iai0kKENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCkgKz0geGZybTZfdHVubmVsLm9cXG4gIDM1OlxcdG9iai0kKENPTkZJR19JTkVUNl9UVU5ORUwpICs9IHR1bm5lbDYub1xcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0lQVjZfTUlQNikgKz0gbWlwNi5vXFxuICAzNzpcXHRvYmotJChDT05GSUdfSVBWNl9JTEEpICs9IGlsYS9cXG4gIDM4OlxcdG9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0Kz0gbmV0ZmlsdGVyL1xcbiAgMzk6XFx0XFxuICA0MDpcXHRvYmotJChDT05GSUdfSVBWNl9WVEkpICs9IGlwNl92dGkub1xcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0lQVjZfU0lUKSArPSBzaXQub1xcbiAgNDI6XFx0b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG4gIDQzOlxcdG9iai0kKENPTkZJR19JUFY2X0dSRSkgKz0gaXA2X2dyZS5vXFxuICA0NDpcXHRvYmotJChDT05GSUdfSVBWNl9GT1UpICs9IGZvdTYub1xcbiAgNDU6XFx0XFxuICA0NjpcXHRvYmoteSArPSBhZGRyY29uZl9jb3JlLm8gZXh0aGRyc19jb3JlLm8gaXA2X2NoZWNrc3VtLm8gaXA2X2ljbXAub1xcbiAgNDc6XFx0b2JqLSQoQ09ORklHX0lORVQpICs9IG91dHB1dF9jb3JlLm8gcHJvdG9jb2wubyBcXFxcXFxuICA0ODpcXHRcXHRcXHRcXHRpcDZfb2ZmbG9hZC5vIGV4dGhkcnNfb2ZmbG9hZC5vXFxuICA0OTpcXHRcXG4gIDUwOlxcdG9iai0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkgKz0gaW5ldDZfaGFzaHRhYmxlcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjI5OjIxLjUwODQ0NDQwNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDYzMjc1ODQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJUHY2IENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZXNlIElQdjYgY29uZmlndXJhdGlvbnMuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gYENPTkZJR19JUFY2YCwgbmF0dXJhbGx5LiBJIHNlZSB0aGF0IHRoZXJlJ3MgYWxzbyB0aGUgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24sIGFuZCB3aXRoaW4gdGhhdCwgdGhpcyBjaGVjazpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkge1xuXHRcdGtmcmVlX3NrYihza2IpO1xuXHRcdHJldHVybiAtMTtcblx0fVxuI2VuZGlmXG5gYGBcblxuUmlnaHQsIHRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCB1c2VzIGBDT05GSUdfSVBWNl9TRUc2X0hNQUNgLCB3aGljaCBJJ20gZmFtaWxpYXIgd2l0aCwgYW5kIGJ5IGV4dGVuc2lvbiwgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgLiBTbywgYm90aCBvZiB0aG9zZSBjbGVhcmx5IHRpZSBpbnRvIElQdjYgc2VnbWVudCByb3V0aW5nLiBOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIG5hdHVyZSBvZiBgQ09ORklHX0lQVjZgLiBJcyBpdCBib29sZWFuIG9yIHRyaXN0YXRlPyBJIG5lZWQgdG8gY2hlY2sgYG5ldC9pcHY2L0tjb25maWdgIHRvIGJlIGNlcnRhaW4uXG5cbkxpbmUgNiwgaGVyZSB3ZSBnbzogYG1lbnVjb25maWcgSVBWNiBib29sIFwiVGhlIElQdjYgcHJvdG9jb2xcImAuIEFoLCBhIGBib29sYCBvcHRpb24uIEl0IGRlcGVuZHMgb24gYE5FVGAgYW5kIGBJTkVUYCwgYXMgZXhwZWN0ZWQuIFNvLCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGVuYWJsZS9kaXNhYmxlIGNvbmZpZ3VyYXRpb24uIE5vdyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMYCBhbmQgYENPTkZJR19JUFY2X1NFRzZfSE1BQ2AgYXJlIGNvbmZpZ3VyZWQsIGFuZCBob3cgdGhleSByZWxhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6Mjk6MzIuMTQxMjA1MzYzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg1OlxcdFxcbiAyODY6XFx0Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAyODc6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDI4ODpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMjg5OlxcdFxcdHNlbGVjdCBMV1RVTk5FTFxcbiAyOTA6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAyOTE6XFx0XFx0c2VsZWN0IElQVjZfTVVMVElQTEVfVEFCTEVTXFxuIDI5MjpcXHRcXHRoZWxwXFxuIDI5MzpcXHRcXHQgIFN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRpb24gb2YgcGFja2V0cyB3aXRoaW4gYW4gb3V0ZXIgSVB2NlxcbiAyOTQ6XFx0XFx0ICBoZWFkZXIgYW5kIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMjk1OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uIEFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGFkdmFuY2VkIGxvY2FsXFxuIDI5NjpcXHRcXHQgIHByb2Nlc3Npbmcgb2YgU1J2NiBwYWNrZXRzIGJhc2VkIG9uIHRoZWlyIGFjdGl2ZSBzZWdtZW50LlxcbiAyOTc6XFx0XFxuIDI5ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI5OTpcXHRcXG4gMzAwOlxcdGNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbiAzMDE6XFx0XFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4gMzAyOlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMDM6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAzMDQ6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuIDMwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cXG4gMzA4OlxcdFxcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMxMTpcXHRcXG4gMzEyOlxcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXFxuIDMxMzpcXHRcXHRkZWZfYm9vbCB5XFxuIDMxNDpcXHRcXHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAzMTU6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG4gMzE4OlxcdFxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4gMzE5OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMjA6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDMyMTpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDMyMjpcXHRcXHRoZWxwXFxuIDMyMzpcXHRcXHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMzI0OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjI5OjMyLjE0MTI3NjQxM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjAxNjg4OTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXJzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyBkaXZlIGludG8gdGhhdCBgaXB2Nl9ydGhkcl9yY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IGl0IGRvZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGVyZSBpdCdzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBzeXN0ZW0uIEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbCBjaGFpbi4gSSdtIGltYWdpbmluZyBpdCdzIHNvbWUgc29ydCBvZiBlbnRyeSBwb2ludCBvciBoYW5kbGVyIGZvciBpbmNvbWluZyBJUHY2IHJvdXRpbmcgaGVhZGVyIHBhY2tldHMsIHJpZ2h0PyBLbm93aW5nIHRoZSByZWdpc3RyYXRpb24gcG9pbnQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGluIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cuIEVzc2VudGlhbGx5LCB3aG8gY2FsbHMgdGhpcyBmdW5jdGlvbiwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gR290dGEgZ2V0IHRoZSBjb250ZXh0LiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCB0aGUgcmVnaXN0cmF0aW9uIHBvaW50IHF1aWNrbHkuIEkga25vdyBJJ3ZlIHdvcmtlZCB3aXRoIHRoaXMgYXJlYSBiZWZvcmUsIGJ1dCBteSBicmFpbiBuZWVkcyBhIHF1aWNrIHJlZnJlc2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Njg1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoyOTo1OC4xNTgxNjkyMzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzU6XFx0ZGlzYWJsZWQ6XFxuIDgzNjpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQVjZESVNBQkxFRCk7XFxuIDgzNzpcXHRcXHRyZXR1cm4gLTE7XFxuIDgzODpcXHR9XFxuIDgzOTpcXHRcXG4gODQwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgcnRoZHJfcHJvdG9jb2wgPSB7XFxuIDg0MTpcXHRcXHQuaGFuZGxlclxcdD1cXHRpcHY2X3J0aGRyX3JjdixcXG4gODQyOlxcdFxcdC5mbGFnc1xcdFxcdD1cXHRJTkVUNl9QUk9UT19OT1BPTElDWSxcXG4gODQzOlxcdH07XFxuIDg0NDpcXHRcXG4gODQ1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgZGVzdG9wdF9wcm90b2NvbCA9IHtcXG4gODQ2OlxcdFxcdC5oYW5kbGVyXFx0PVxcdGlwdjZfZGVzdG9wdF9yY3YsXFxuIDg0NzpcXHRcXHQuZmxhZ3NcXHRcXHQ9XFx0SU5FVDZfUFJPVE9fTk9QT0xJQ1ksXFxuIDg0ODpcXHR9O1xcbiA4NDk6XFx0XFxuIDg1MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIG5vZGF0YV9wcm90b2NvbCA9IHtcXG4gODUxOlxcdFxcdC5oYW5kbGVyXFx0PVxcdGRzdF9kaXNjYXJkLFxcbiA4NTI6XFx0XFx0LmZsYWdzXFx0XFx0PVxcdElORVQ2X1BST1RPX05PUE9MSUNZLFxcbiA4NTM6XFx0fTtcXG4gODU0OlxcdFxcbiA4NTU6XFx0aW50IF9faW5pdCBpcHY2X2V4dGhkcnNfaW5pdCh2b2lkKVxcbiA4NTY6XFx0e1xcbiA4NTc6XFx0XFx0aW50IHJldDtcXG4gODU4OlxcdFxcbiA4NTk6XFx0XFx0cmV0ID0gaW5ldDZfYWRkX3Byb3RvY29sKFxcdTAwMjZydGhkcl9wcm90b2NvbCwgSVBQUk9UT19ST1VUSU5HKTtcXG4gODYwOlxcdFxcdGlmIChyZXQpXFxuIDg2MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0cmV0ID0gaW5ldDZfYWRkX3Byb3RvY29sKFxcdTAwMjZkZXN0b3B0X3Byb3RvY29sLCBJUFBST1RPX0RTVE9QVFMpO1xcbiA4NjQ6XFx0XFx0aWYgKHJldClcXG4gODY1OlxcdFxcdFxcdGdvdG8gb3V0X3J0aGRyO1xcbiA4NjY6XFx0XFxuIDg2NzpcXHRcXHRyZXQgPSBpbmV0Nl9hZGRfcHJvdG9jb2woXFx1MDAyNm5vZGF0YV9wcm90b2NvbCwgSVBQUk9UT19OT05FKTtcXG4gODY4OlxcdFxcdGlmIChyZXQpXFxuIDg2OTpcXHRcXHRcXHRnb3RvIG91dF9kZXN0b3B0O1xcbiA4NzA6XFx0XFxuIDg3MTpcXHRvdXQ6XFxuIDg3MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NzM6XFx0b3V0X2Rlc3RvcHQ6XFxuIDg3NDpcXHRcXHRpbmV0Nl9kZWxfcHJvdG9jb2woXFx1MDAyNmRlc3RvcHRfcHJvdG9jb2wsIElQUFJPVE9fRFNUT1BUUyk7XFxuIDg3NTpcXHRvdXRfcnRoZHI6XFxuIDg3NjpcXHRcXHRpbmV0Nl9kZWxfcHJvdG9jb2woXFx1MDAyNnJ0aGRyX3Byb3RvY29sLCBJUFBST1RPX1JPVVRJTkcpO1xcbiA4Nzc6XFx0XFx0Z290byBvdXQ7XFxuIDg3ODpcXHR9O1xcbiA4Nzk6XFx0XFxuIDg4MDpcXHR2b2lkIGlwdjZfZXh0aGRyc19leGl0KHZvaWQpXFxuIDg4MTpcXHR7XFxuIDg4MjpcXHRcXHRpbmV0Nl9kZWxfcHJvdG9jb2woXFx1MDAyNm5vZGF0YV9wcm90b2NvbCwgSVBQUk9UT19OT05FKTtcXG4gODgzOlxcdFxcdGluZXQ2X2RlbF9wcm90b2NvbChcXHUwMDI2ZGVzdG9wdF9wcm90b2NvbCwgSVBQUk9UT19EU1RPUFRTKTtcXG4gODg0OlxcdFxcdGluZXQ2X2RlbF9wcm90b2NvbChcXHUwMDI2cnRoZHJfcHJvdG9jb2wsIElQUFJPVE9fUk9VVElORyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjI5OjU4LjE1ODI4OTQxOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjAwMzk0NDUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBSb3V0aW5nIEhlYWRlciBSZWNlcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgSVB2NiByb3V0aW5nIGhlYWRlcnMgYXJlIGhhbmRsZWQuIGBpcHY2X3J0aGRyX3JjdmAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBpdCdzIHRoZSBwcm90b2NvbCBoYW5kbGVyIGZvciBgSVBQUk9UT19ST1VUSU5HYC4gV2hlbiBhbiBJUHY2IHBhY2tldCB3aXRoIGEgcm91dGluZyBoZWFkZXIgY29tZXMgaW4sIGBpcHY2X3J0aGRyX3JjdmAgZ2V0cyB0aGUgY2FsbCwgYW5kIHNwZWNpZmljYWxseSBmb3IgYElQVjZfU1JDUlRfVFlQRV80YCwgaXQgZGVsZWdhdGVzIHRvIGBpcHY2X3NyaF9yY3ZgLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciBlaXRoZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBgc3RhdGljYC4gWXVwLCB0aGV5IGFyZTogYHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpYCBhbmQgYHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilgLiBUaGF0J3MgdXNlZnVsIGluZm9ybWF0aW9uLlxuXG5Ob3csIGxldCdzIHNlZSB3aGVyZSBgaXB2Nl9ydGhkcl9yY3ZgIGlzIHVzZWQuIFJpZ2h0LCBpdCdzIHJlZ2lzdGVyZWQgaW4gYHJ0aGRyX3Byb3RvY29sYC4gSXQncyBwb2ludGVkIHRvIGJ5IHRoZSBgaGFuZGxlcmAgcG9pbnRlciB3aXRoaW4gdGhlIGBpbmV0Nl9wcm90b2NvbGAgc3RydWN0LCBzbyB0aGUgY29tcGlsZXIgaXMgdW5saWtlbHkgdG8gaW5saW5lIGl0LiBJZiB3ZSdyZSBsb29raW5nIGZvciBzeW1ib2xzIHRvIGFuYWx5emUgaW4gbW9yZSBkZXB0aCwgdGhpcyBpcyBpbXBvcnRhbnQuXG5cblNvLCB3aGF0IGFib3V0IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhlIGNhbmRpZGF0ZXMgZm9yIGBGb2N1c1N5bWJvbHNgPyBMZXQncyBxdWlja2x5IHNjYW4gYGV4dGhkcnMuY2AgYW5kIGVsc2V3aGVyZS4gWWVwLCBpbiBgZXh0aGRycy5jYCwgd2UgaGF2ZSBgaXB2Nl9ydGhkcl9yY3ZgIGFuZCBgaXB2Nl9zcmhfcmN2YC4gTWFrZXMgc2Vuc2UuXG5cbkFscmlnaHQsIHNvIHRoZSBmYWN0IHRoYXQgYGlwdjZfcnRoZHJfcmN2YCBpcyByZWZlcmVuY2VkIGluIHRoYXQgYHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgcnRoZHJfcHJvdG9jb2wgPSB7IC5oYW5kbGVyID0gaXB2Nl9ydGhkcl9yY3YsIC4uLiB9O2AgZGVjbGFyYXRpb24gbWVhbnMgdGhlIGNvbXBpbGVyICpjYW4ndCogaW5saW5lIGl0LCB0aGF0J3MgY3J1Y2lhbC4gXG5cbk5vdywgYGlwdjZfc3JoX3JjdmAsIG9uIHRoZSBvdGhlciBoYW5kLCAqbWlnaHQqIGJlIGlubGluZWQgd2l0aGluIGBpcHY2X3J0aGRyX3JjdmAsIG9yIGl0IG1pZ2h0IG5vdCDigJMgZGVwZW5kcyBvbiB0aGUgY29tcGlsZXIncyBvcHRpbWl6YXRpb24uIFNvLCBib3RoIGBpcHY2X3J0aGRyX3JjdmAgYW5kIGBpcHY2X3NyaF9yY3ZgIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gV2Ugc2hvdWxkIGNvbnNpZGVyIGJvdGguXG5cbkZpbmFsbHksIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHNjYW4gdGhlIGVudGlyZSBgbmV0L2lwdjYvZXh0aGRycy5jYCBmaWxlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBKdXN0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjMwOjIwLjE2MjIzNzE2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDQ0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuYy02NC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NjU6c3RhdGljIGJvb2wgaXA2X3Rsdm9wdF91bmtub3duKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYsXFxubmV0L2lwdjYvZXh0aGRycy5jLTY2LVxcdFxcdFxcdCAgICAgICBib29sIGRpc2FsbG93X3Vua25vd25zKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTEwMy1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA0OnN0YXRpYyBib29sIGlwdjZfaG9wX3JhKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMDU6c3RhdGljIGJvb2wgaXB2Nl9ob3BfaW9hbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKTtcXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA2OnN0YXRpYyBib29sIGlwdjZfaG9wX2p1bWJvKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMDc6c3RhdGljIGJvb2wgaXB2Nl9ob3BfY2FsaXBzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTA4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X01JUDYpXFxubmV0L2lwdjYvZXh0aGRycy5jOjEwOTpzdGF0aWMgYm9vbCBpcHY2X2Rlc3RfaGFvKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTAtI2VuZGlmXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTEzLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMTQ6c3RhdGljIGJvb2wgaXA2X3BhcnNlX3Rsdihib29sIGhvcGJ5aG9wLFxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTUtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTIzMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9NSVA2KVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoyMzI6c3RhdGljIGJvb2wgaXB2Nl9kZXN0X2hhbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0yMzMte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTI5NS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6Mjk2OnN0YXRpYyBpbnQgaXB2Nl9kZXN0b3B0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0yOTcte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTM0MS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzQyOnN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzQzLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTQ4MC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NDgxOnN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbm5ldC9pcHY2L2V4dGhkcnMuYy00ODIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY0NC0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NjQ1OnN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ2LXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz04NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBub2RhdGFfcHJvdG9jb2wgPSB7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtODU0LVxcbm5ldC9pcHY2L2V4dGhkcnMuYzo4NTU6aW50IF9faW5pdCBpcHY2X2V4dGhkcnNfaW5pdCh2b2lkKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy04NTYte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTg3OS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6ODgwOnZvaWQgaXB2Nl9leHRoZHJzX2V4aXQodm9pZClcXG5uZXQvaXB2Ni9leHRoZHJzLmMtODgxLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy04OTItXFxubmV0L2lwdjYvZXh0aGRycy5jOjg5MzpzdGF0aWMgYm9vbCBpcHY2X2hvcF9yYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy04OTQte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTkwOS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6OTEwOnN0YXRpYyBib29sIGlwdjZfaG9wX2lvYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtOTExLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy05OTAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjk5MTpzdGF0aWMgYm9vbCBpcHY2X2hvcF9qdW1ibyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy05OTIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTEwMzMtXFxubmV0L2lwdjYvZXh0aGRycy5jOjEwMzQ6c3RhdGljIGJvb2wgaXB2Nl9ob3BfY2FsaXBzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMDM1LXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMDUzLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMDU0OmludCBpcHY2X3BhcnNlX2hvcG9wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTA1NS17XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTA5OC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTA5OTpzdGF0aWMgdTggaXB2Nl9wdXNoX3J0aGRyMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwcm90byxcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTEwMC1cXHRcXHRcXHQgICBzdHJ1Y3QgaXB2Nl9ydF9oZHIgKm9wdCxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTIzLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMTI0OnN0YXRpYyB1OCBpcHY2X3B1c2hfcnRoZHI0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHByb3RvLFxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTI1LVxcdFxcdFxcdCAgIHN0cnVjdCBpcHY2X3J0X2hkciAqb3B0LFxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTExNzItXFxubmV0L2lwdjYvZXh0aGRycy5jOjExNzM6c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwcm90byxcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE3NC1cXHRcXHRcXHQgIHN0cnVjdCBpcHY2X3J0X2hkciAqb3B0LFxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTExOTEtXFxubmV0L2lwdjYvZXh0aGRycy5jOjExOTI6c3RhdGljIHU4IGlwdjZfcHVzaF9leHRoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sIHU4IHR5cGUsIHN0cnVjdCBpcHY2X29wdF9oZHIgKm9wdClcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE5My17XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTIwMC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTIwMTp1OCBpcHY2X3B1c2hfbmZyYWdfb3B0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCxcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTIwMi1cXHRcXHRcXHR1OCBwcm90byxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjE4LVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMjE5OnU4IGlwdjZfcHVzaF9mcmFnX29wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsIHU4IHByb3RvKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjIwLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjI0LX1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTIyNTpFWFBPUlRfU1lNQk9MKGlwdjZfcHVzaF9mcmFnX29wdHMpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjI2LVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0xMjI3PXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqXFxubmV0L2lwdjYvZXh0aGRycy5jOjEyMjg6aXB2Nl9kdXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0KVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjI5LXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjQ2LX1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTI0NzpFWFBPUlRfU1lNQk9MX0dQTChpcHY2X2R1cF9vcHRpb25zKTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTI0OC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTI0OTpzdGF0aWMgdm9pZCBpcHY2X3JlbmV3X29wdGlvbihpbnQgcmVuZXd0eXBlLFxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMjUwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpcHY2X29wdF9oZHIgKipkZXN0LFxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTEyODY9c3RydWN0IGlwdjZfdHhvcHRpb25zICpcXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTI4NzppcHY2X3JlbmV3X29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCxcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTI4OC1cXHRcXHQgICBpbnQgbmV3dHlwZSwgc3RydWN0IGlwdjZfb3B0X2hkciAqbmV3b3B0KVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTEzNDItXFxubmV0L2lwdjYvZXh0aGRycy5jOjEzNDM6c3RydWN0IGlwdjZfdHhvcHRpb25zICpfX2lwdjZfZml4dXBfb3B0aW9ucyhzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdF9zcGFjZSxcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM0NC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM2MC19XFxubmV0L2lwdjYvZXh0aGRycy5jOjEzNjE6RVhQT1JUX1NZTUJPTF9HUEwoX19pcHY2X2ZpeHVwX29wdGlvbnMpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMzYyLVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTEzNzMtICovXFxubmV0L2lwdjYvZXh0aGRycy5jOjEzNzQ6c3RydWN0IGluNl9hZGRyICpfX2ZsNl91cGRhdGVfZHN0KHN0cnVjdCBmbG93aTYgKmZsNixcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTM3NS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LFxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTE0MDEtfVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxNDAyOkVYUE9SVF9TWU1CT0xfR1BMKF9fZmw2X3VwZGF0ZV9kc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozMDoyMC4yMTExNTE2M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzUyNzg3MTM3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgSGFuZGxpbmcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVycywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSByZWNlaXZpbmcgZW5kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBrZXkgZnVuY3Rpb25zOiBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnRoZHJfcmN2YC4gYGlwdjZfc3JoX3JjdmAsIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBpcyB0aGUgY29yZSBmdW5jdGlvbiBJIG5lZWQgdG8gbG9vayBhdCBiZWNhdXNlIGl0J3MgdGhlIGRpcmVjdGx5IG1vZGlmaWVkIG9uZS4gSSdsbCByZW1lbWJlciB0aGF0IGBpcHY2X3J0aGRyX3JjdmAgaXMgYWN0aW5nIGFzIHRoZSBvdXRlciBoYW5kbGVyLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBPYnZpb3VzbHksIGBJUFY2YCBpcyBmdW5kYW1lbnRhbCwgZW5hYmxpbmcgdGhlIGVudGlyZSBJUHY2IHN0YWNrLCBpbmNsdWRpbmcgYG5ldC9pcHY2L2AuIEknbGwgYWxzbyBiZSBsb29raW5nIGZvciBgSVBWNl9TRUc2X0hNQUNgLCBzaW5jZSB0aGUgYHNlZzZfaG1hY192YWxpZGF0ZV9za2JgIGZ1bmN0aW9uIGlzIHRlc3RlZCB1bmRlciB0aGlzIGNvbmZpZy4gRmluYWxseSwgdGhlcmUncyBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgd2hpY2ggaGFuZGxlcyB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIFNSSCBvciwgbW9yZSBicm9hZGx5LCBgc2VnNmAuIExldCdzIHBlcmZvcm0gYSBxdWljayBgZ3JlcGAgc2VhcmNoIHdpdGhpbiB0aGUgYG5ldC9pcHY2L2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZGVwZW5kZW50IGFuZCByZWxhdGVkIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM5OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozMzoxNS40ODk4NjgzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwOTY5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQVjZfU0VHNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgKz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI2OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMjctaXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMjktXFx0LnNlZzZfZW5hYmxlZFxcdFxcdD0gMCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIzMDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMzEtXFx0LnNlZzZfcmVxdWlyZV9obWFjXFx0PSAwLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNDY9c3RhdGljIHN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mX2RmbHQgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0LVxcdC5zZWc2X2VuYWJsZWRcXHRcXHQ9IDAsXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyOTU6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk2LVxcdC5zZWc2X3JlcXVpcmVfaG1hY1xcdD0gMCxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzM4LVxcdGFycmF5W0RFVkNPTkZfU0VHNl9FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZXNlZzZfZW5hYmxlZCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzM5OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3NDAtXFx0YXJyYXlbREVWQ09ORl9TRUc2X1JFUVVJUkVfSE1BQ10gPSBSRUFEX09OQ0UoY25mLVxcdTAwM2VzZWc2X3JlcXVpcmVfaG1hYyk7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY4NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYWRkcmNvbmZfc3lzY3RsW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcyMjUtXFx0fSxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMjY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIyNy1cXHR7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDctI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2LmhcXHUwMDNlXFxubmV0L2lwdjYvZXh0aGRycy5jOjQ4OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDktI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2X2htYWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODgtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM4OTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvZXh0aGRycy5jLTM5MC1cXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkge1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTExMjQ9c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1Mi1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTE1MzojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvZXh0aGRycy5jLTExNTQtXFx0aWYgKHNyX2hhc19obWFjKHNyX3BoZHIpKSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmM9MTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzZWc2X2dlbmxfcG9saWN5W1NFRzZfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYy0xNTAtXFxubmV0L2lwdjYvc2VnNi5jOjE1MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNi5jLTE1Mi1cXG4tLVxcbm5ldC9pcHY2L3NlZzYuYz0yNjY9c3RhdGljIGludCBzZWc2X2dlbmxfZ2V0X3R1bnNyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2lwdjYvc2VnNi5jLTI5OS1cXG5uZXQvaXB2Ni9zZWc2LmM6MzAwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2LmMtMzAxLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTI1LSNpbmNsdWRlIFxcdTAwM2NuZXQvZHN0X2NhY2hlLmhcXHUwMDNlXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjI2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjctI2luY2x1ZGUgXFx1MDAzY25ldC9zZWc2X2htYWMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0xNDE9c3RhdGljIGludCBfX3NlZzZfZG9fc3JoX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yMDEtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjIwMjojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIwMy1cXHRpZiAoc3JfaGFzX2htYWMoaXNyaCkpIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMjU9c3RhdGljIGludCBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zMjgtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjMyOTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTMzMC1cXHRpZiAodW5saWtlbHkoIXNraXBfc3JoIFxcdTAwMjZcXHUwMDI2IHNyX2hhc19obWFjKGlzcmgpKSkge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM0NT1zdGF0aWMgaW50IF9fc2VnNl9kb19zcmhfaW5saW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0zODAtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjM4MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTM4Mi1cXHRpZiAoc3JfaGFzX2htYWMoaXNyaCkpIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNy0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFxcdTAwM2VcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6Mjg6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzZfaG1hYy5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTIyMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjI1LVxcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIzMj1zdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MC1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjQxOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQyLVxcdGlmIChzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz03NTg9c3RhdGljIGludCBlbmRfZmx2ODk4Nl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NjktXFx0cGluZm8gPSBzZWc2X2dldF9zcmhfcGt0aW5mbyhzcmgpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo3NzA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NzEtXFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozMzoxNS41MzQ5Njg3MjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU3MzgzNzA2NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQdjYgRnV6emluZyBTZXR1cCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHdoYXQgd2UndmUgZ290IGhlcmUuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBmb2N1cyBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgdGFyZ2V0aW5nIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ydGhkcl9yY3ZgIGZvciBzcGVjaWZpYyBmdXp6aW5nIGF0dGVudGlvbi4gVGhvc2UgYXJlIGltcG9ydGFudCwgYW5kIHJpZ2h0IHdoZXJlIEknZCBleHBlY3QgdXMgdG8gYmUgZm9jdXNpbmcgaWYgd2UncmUgZGVhbGluZyB3aXRoIHRob3NlIHByb3RvY29scy5cblxuTmV4dCwgSSBzZWUgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGVuYWJsZWQuIFdlIGhhdmUgYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYW5kIGBJUFY2X1NFRzZfSE1BQ2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkLCBiZWNhdXNlIHRoZXkgYXJlIGNydWNpYWwgZm9yIHRlc3RpbmcgdGhvc2Ugc3BlY2lmaWMgZmVhdHVyZXMuIEkgc2VlIHRoZXkncmUgcHJvdmlkZWQgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgb3ZlcmFsbCBpbnN0cnVjdGlvbnMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYWxpZ25lZC4gWWVzLCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCBnb29kLiBJIHNlZSB0aGUgc2FtZSBmb2N1cyBzeW1ib2xzIGFuZCBlbmFibGUgY29uZmlndXJhdGlvbnMsIGNvbmZpcm1lZC4gVGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCBvbiBwb2ludC4gUGVyZmVjdCwgaXQgYWxsIGxvb2tzIHNvdW5kLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoZSBzZXR1cC4gSSdsbCBnbyBhaGVhZCBhbmQgZXhlY3V0ZSB0aGUgYHNldC1yZXN1bHRzYCBjb21tYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA5MSwiT3V0cHV0VG9rZW5zIjoxMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MzU6NTIuOTE4Njc3NTc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NzYxNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9ITUFDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHNrYiBwb2ludGVyIGFyaXRobWV0aWMgKHB1c2ggYW5kIHB1bGwgb2Zmc2V0cykgZHVyaW5nIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHByb2Nlc3Npbmcgd2hlbiBsb29waW5nIGJhY2sgcGFja2V0cyB3aXRoIG11bHRpcGxlIHNlZ21lbnRzIG9yIHByZWNlZGluZyBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjaGFuZ2VzIGNvcmUgSVB2NiBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NFRzZfSE1BQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdjZfc3JoX3JjdlwiLFxuICAgIFwiaXB2Nl9ydGhkcl9yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBza2IgcG9pbnRlciBhcml0aG1ldGljIChwdXNoIGFuZCBwdWxsIG9mZnNldHMpIGR1cmluZyBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcmVjZWl2ZSBwcm9jZXNzaW5nIHdoZW4gbG9vcGluZyBiYWNrIHBhY2tldHMgd2l0aCBtdWx0aXBsZSBzZWdtZW50cyBvciBwcmVjZWRpbmcgZXh0ZW5zaW9uIGhlYWRlcnMuIFRoaXMgY2hhbmdlcyBjb3JlIElQdjYgbmV0d29ya2luZyBiZWhhdmlvciBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozNTo1My4wNzg0NDg3NjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDk1MTkyNTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjM1OjUzLjA3OTI4OTA4MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNDk1MTA2NjEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHByb2Nlc3NpbmcgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AgYnkgcmVwbGFjaW5nIGZpeGVkIGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCBhZGp1c3RtZW50cyBpbiBgc2tiX3B1c2goKWAgYW5kIGBza2JfcHVsbCgpYCB3aXRoIGR5bmFtaWMgb2Zmc2V0cyAoYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAgYW5kIGBza2JfdHJhbnNwb3J0X29mZnNldChza2IpYCkuIFRoaXMgY29ycmVjdGx5IGFkanVzdHMgYHNrYi1cXHUwMDNlZGF0YWAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXR3b3JrIGhlYWRlciBhbmQgdHJhbnNwb3J0IGhlYWRlciB3aGVuIGV4dGVuc2lvbiBoZWFkZXJzIHByZWNlZGUgdGhlIFNSSC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBmaWVsZHMsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvcnJlY3QgYHNrYl9wdXNoYC9gc2tiX3B1bGxgIGNhbGN1bGF0aW9ucyByZWxhdGUgdG8gc2tiIGJ1ZmZlciBib3VuZHMgYW5kIGhlYWRlciBhbGlnbm1lbnQsIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHNrX2J1ZmYgcnVudGltZSBhc3NlcnRpb25zIChlLmcuLCBgc2tiX3VuZGVyX3BhbmljYC9gc2tiX292ZXJfcGFuaWNgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZDQ0MzU3MzVhMzgxNWNmYTVmZTgyNDI2NzJlMmFmMzMzZDM5NjI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMTc6MTg6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbmluZGV4IDUxOTQxYWQ2NTZhMzYuLjA5YTQ1NTJmN2YwOGEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcbisrKyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuQEAgLTQ0NSw3ICs0NDUsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuIFx0aGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQtLTtcbiBcdGFkZHIgPSBoZHItXHUwMDNlc2VnbWVudHMgKyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiBcbi1cdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4rXHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gXG4gXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbiBcdFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xuQEAgLTQ2OSw3ICs0NjksNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4rXHRcdHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XG4gXHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozNTo1My4wNzkyOTM3MTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE4Mzk2MjI2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHBhdGNoOlxuXG4qKkV2YWx1YXRpbmcgdGhlIEtNU0FOIEZ1enppbmcgTmVjZXNzaXR5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGl0cyBvd24gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLiBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gVGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIHRoaXMsIGFzIGFsd2F5cywgaXMgbWV0aG9kaWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIENvbnRleHQgaXMgZXZlcnl0aGluZywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXG5cbkknbSB0aGlua2luZyBJJ2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIHJlbGV2YW50IGNvZGUsIG9yIHBlcmhhcHMgYGdyZXBwZXJgIGlmIEkganVzdCB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgYW5kIHJlZmVyZW5jZXMuIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGUgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBGb2N1c2luZyBvbiB0aGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJlYSB0aGlzIHBhdGNoIHRvdWNoZXMgYW5kIGhlbHAgbWUgZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiByaXNrIGFuZCwgc3Vic2VxdWVudGx5LCB3aGV0aGVyIGRlZGljYXRlZCBmdXp6aW5nIGlzIGEgd2lzZSBpbnZlc3RtZW50IG9mIHJlc291cmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MzY6NDQuOTE4OTIwNDk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzA6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcXG4gNDMxOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbiA0MzU6XFx0XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xcbiA0MzY6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHRcXHRJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7XFxuIDQzODpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDM5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDQ0MzpcXHRcXHR9XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xcbiA0NDY6XFx0XFx0YWRkciA9IGhkci1cXHUwMDNlc2VnbWVudHMgKyBoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQ7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbiA0NTE6XFx0XFx0XFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkciA9ICphZGRyO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcXG4gNDU2OlxcdFxcbiA0NTc6XFx0XFx0aWYgKHNrYl9kc3Qoc2tiKS1cXHUwMDNlZXJyb3IpIHtcXG4gNDU4OlxcdFxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiA0NTk6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0NjA6XFx0XFx0fVxcbiA0NjE6XFx0XFxuIDQ2MjpcXHRcXHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcXG4gNDYzOlxcdFxcdFxcdGlmIChpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQgXFx1MDAzYz0gMSkge1xcbiA0NjQ6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiA0NjU6XFx0XFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXFxuIDQ2NjpcXHRcXHRcXHRcXHRcXHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XFxuIDQ2NzpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDY4OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDY5OlxcdFxcdFxcdH1cXG4gNDcwOlxcdFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRcXHRza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpO1xcbiA0NzM6XFx0XFx0XFx0Z290byBsb29wZWRfYmFjaztcXG4gNDc0OlxcdFxcdH1cXG4gNDc1OlxcdFxcbiA0NzY6XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdHJldHVybiAtMTtcXG4gNDc5OlxcdH1cXG4gNDgwOlxcdFxcbiA0ODE6XFx0c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIDQ4MjpcXHR7XFxuIDQ4MzpcXHRcXHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcXG4gNDg0OlxcdFxcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcXG4gNDg1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiA0ODY6XFx0XFx0c3RydWN0IGlwdjZoZHIgKm9sZGhkcjtcXG4gNDg3OlxcdFxcdHVuc2lnbmVkIGludCBjaGRyX2xlbjtcXG4gNDg4OlxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZjtcXG4gNDg5OlxcdFxcdGludCBhY2NlcHRfcnBsX3NlZztcXG4gNDkwOlxcdFxcdGludCBpLCBlcnI7XFxuIDQ5MTpcXHRcXHR1NjQgbiA9IDA7XFxuIDQ5MjpcXHRcXHR1MzIgcjtcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0XFx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cXHUwMDNlcnBsX3NlZ19lbmFibGVkKSxcXG4gNDk1OlxcdFxcdFxcdFxcdCAgICAgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcXG4gNDk2OlxcdFxcdGlmICghYWNjZXB0X3JwbF9zZWcpIHtcXG4gNDk3OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0OTg6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0OTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozNjo0NC45MTkwMjA5MThaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMzMjM5ODcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgYWx0ZXJlZCBpbiByZWxhdGlvbiB0byBgaXB2Nl9zcmhfcmN2YC4gQ29udGV4dCBpcyBrZXkgaGVyZSwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY29kZSBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMzgwIHRocm91Z2ggNDUwIG9mIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBUaGlzIHNlY3Rpb24gc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBkdXJpbmcgdGhlIHJlY2VwdGlvbiBwcm9jZXNzLiBLbm93aW5nIHRoZSBleGFjdCBjaGFuZ2VzIGluIHRoYXQgc2VjdGlvbiB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2gsIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBtb2RpZmljYXRpb25zLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBzaWRlLWVmZmVjdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXTigJlzIGNoYW5naW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHRvIHByb3Blcmx5IGV2YWx1YXRlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjgwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozNjo0OS4yNTE0MjIwMTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFxuIDM4MTpcXHRcXHRhY2NlcHRfc2VnNiA9IG1pbihSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VzZWc2X2VuYWJsZWQpLFxcbiAzODI6XFx0XFx0XFx0XFx0ICBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRpZiAoIWFjY2VwdF9zZWc2KSB7XFxuIDM4NTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzg2OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMzg3OlxcdFxcdH1cXG4gMzg4OlxcdFxcbiAzODk6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbiAzOTA6XFx0XFx0aWYgKCFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpIHtcXG4gMzkxOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzOTI6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAzOTM6XFx0XFx0fVxcbiAzOTQ6XFx0I2VuZGlmXFxuIDM5NTpcXHRcXG4gMzk2OlxcdGxvb3BlZF9iYWNrOlxcbiAzOTc6XFx0XFx0aWYgKGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCA9PSAwKSB7XFxuIDM5ODpcXHRcXHRcXHRpZiAoaGRyLVxcdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNiB8fCBoZHItXFx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KSB7XFxuIDM5OTpcXHRcXHRcXHRcXHRpbnQgb2Zmc2V0ID0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksXFxuIDQwMjpcXHRcXHRcXHRcXHRcXHRcXHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xcbiA0MDM6XFx0XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xcbiA0MDQ6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcXG4gNDA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCk7XFxuIDQwNjpcXHRcXG4gNDA3OlxcdFxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA0MDg6XFx0XFx0XFx0XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gNDA5OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XFxuIDQxMDpcXHRcXHRcXHRcXHRpZiAoaGRyLVxcdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNClcXG4gNDExOlxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuIDQxMjpcXHRcXHRcXHRcXHRfX3NrYl90dW5uZWxfcngoc2tiLCBza2ItXFx1MDAzZWRldiwgbmV0KTtcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0XFx0XFx0XFx0bmV0aWZfcngoc2tiKTtcXG4gNDE1OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDE2OlxcdFxcdFxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0XFx0XFx0b3B0LVxcdTAwM2VzcmNydCA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcXG4gNDE5OlxcdFxcdFxcdG9wdC1cXHUwMDNlbGFzdG9wdCA9IG9wdC1cXHUwMDNlc3JjcnQ7XFxuIDQyMDpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNDIxOlxcdFxcdFxcdG9wdC1cXHUwMDNlbmhvZmYgPSAoXFx1MDAyNmhkci1cXHUwMDNlbmV4dGhkcikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDQyNDpcXHRcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgXFx1MDAzZT0gKGhkci1cXHUwMDNlaGRybGVuIFxcdTAwM2VcXHUwMDNlIDEpKSB7XFxuIDQyNzpcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDQyODpcXHRcXHRcXHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXFxuIDQyOTpcXHRcXHRcXHRcXHRcXHQgICgoXFx1MDAyNmhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCkgLVxcbiA0MzA6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcXG4gNDMxOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbiA0MzU6XFx0XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xcbiA0MzY6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHRcXHRJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7XFxuIDQzODpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDM5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MzY6NDkuMjUxNTcxMjI3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4Nzc4NzU0NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVB2NiBTUkggUmVjZWl2ZSBQYXRoIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjb21taXQgaW4gYGlwdjZfc3JoX3JjdmAgY2F1Z2h0IG15IGV5ZS4gVGhleSd2ZSByZXBsYWNlZCB0aGUgZml4ZWQgYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgIHdpdGggYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCBhbmQgYHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYilgIGluIHRoZSBgc2tiX3B1c2hgIGFuZCBgc2tiX3B1bGxgIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IHRoZSBjaGFuZ2U/IEl0IHNlZW1zIHRoZXkncmUgaGFuZGxpbmcgY2FzZXMgd2l0aCBleHRlbnNpb24gaGVhZGVycyBwcmVjZWRpbmcgdGhlIFNSSCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIHRoZSBgc2tiLVx1MDAzZWRhdGFgIHBvaW50ZXIgaXMgYWxyZWFkeSBwYXN0IHRoZSBJUHY2IGhlYWRlciBhbmQgYXQgdGhlIFNSSCBoZWFkZXIgb3IgdHJhbnNwb3J0IGhlYWRlci5cblxuYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCBnaXZlcyBhIG5lZ2F0aXZlIG9mZnNldCBpbiB0aGVzZSBzY2VuYXJpb3MgKGJlY2F1c2UgYHNrYi1cdTAwM2VkYXRhYCBpcyBhaGVhZCBvZiBgc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyYCkuIFRodXMsIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGVmZmVjdGl2ZWx5IG1vdmVzIHRoZSBkYXRhIHBvaW50ZXIgYmFjayB0byB0aGUgKmFjdHVhbCogc3RhcnQgb2YgdGhlIElQdjYgaGVhZGVyLCBub3QganVzdCBhc3N1bWluZyBpdCdzIGEgZml4ZWQgc2l6ZSBhd2F5LiBTaW1pbGFybHksIGBza2JfdHJhbnNwb3J0X29mZnNldChza2IpYCBjb3JyZWN0bHkgcG9zaXRpb25zIHRoZSBwb2ludGVyIHRvIHRoZSB0cmFuc3BvcnQgaGVhZGVyLCBhcyB0aGUgZGF0YSBpcyBhbHJlYWR5IGFoZWFkIG9mIHRoZSBuZXR3b3JrIGhlYWRlci5cblxuTm93LCBsZXQncyBwaXZvdCB0byB0aGUgS01TQU4gYW5nbGUuIEZpcnN0LCBkb2VzIHRoaXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYW55IHdheT8gTm8sIGl0J3Mgb3BlcmF0aW5nIG9uIHJlY2VpdmVkIFNLQnMgd2l0aGluIHRoZSBrZXJuZWwgbmV0d29yayBzdGFjay4gV2UncmUgbm90IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBkaXJlY3RseSAoaXQncyBwb2ludGVyIGFyaXRobWV0aWMgd2l0aGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlKSwgb3IgY3JlYXRpbmcgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgaGFyYm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIGFyZSBoYXBwZW5pbmcgaGVyZS4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93IG9yIHVuZGVyZmxvdz8gVGhpcyBjaGFuZ2UgaXMgZGVzaWduZWQgdG8gKmZpeCogcG90ZW50aWFsIGlzc3VlcyB3aXRoIGJ1ZmZlciBtYW5hZ2VtZW50IHdoZW4gZXh0ZW5zaW9uIGhlYWRlcnMgYXJlIGludm9sdmVkLCBieSBjb3JyZWN0bHkgYWRqdXN0aW5nIGBza2ItXHUwMDNlZGF0YWAgYW5kIGVuc3VyaW5nIHRoZSBza2IgaGVhZC90YWlsIHN0YXkgaW4gc3luYy4gSW5hY2N1cmF0ZSBgc2tiX3B1c2hgIC8gYHNrYl9wdWxsYCBjb3VsZCBjYXVzZSBtaXNhbGlnbm1lbnQsIGJ1dCBleGlzdGluZyBrZXJuZWwgY2hlY2tzIGFuZCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKSBhcmUgZGVzaWduZWQgdG8gY2F0Y2ggcHJlY2lzZWx5IHRoZXNlIHR5cGVzIG9mIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZSBlcnJvcnMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCAqKmRvZXMgbm90KiogaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOIGlzIHRoZSBjb3JyZWN0IHRvb2wgaGVyZSwgY292ZXJpbmcgdGhlIGJ1ZmZlciBtYW5pcHVsYXRpb24gc2lkZSBvZiB0aGluZ3MsIGFuZCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTQU5pdGl6ZXIpIGlzIG5vdCBuZWNlc3NhcnkuIFdlIGhhdmUgcHJvcGVyIGJvdW5kcyBjaGVja2luZywgYW5kIGFueSBidWZmZXIgbWFuaXB1bGF0aW9uIGlzc3VlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2tiIGNoZWNrcy5cblxuU28sIHRvIHN1bW1hcml6ZTogdGhlIHBhdGNoIGNvcnJlY3RzIHRoZSBTS0IgZGF0YSBwb2ludGVyIGFkanVzdG1lbnQgaW4gYGlwdjZfc3JoX3JjdigpYCBieSB1c2luZyBkeW5hbWljIG9mZnNldHMgKGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGFuZCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWApIGluc3RlYWQgb2YgZml4ZWQgc2l6ZXMsIHdoaWNoIGVuc3VyZXMgdGhlIFNLQiBwb2ludGVycyBhcmUgcHJvcGVybHkgYWxpZ25lZCB3aXRoIG5ldHdvcmsvdHJhbnNwb3J0IGhlYWRlcnMgd2hlbiBleHRlbnNpb24gaGVhZGVycyBhcmUgcHJlc2VudC4gVGhpcyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGFueSB3YXkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIG1hbmFnZW1lbnQgYXJlIGNhdWdodCBieSBLQVNBTi4gU28sIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NSwiT3V0cHV0VG9rZW5zIjoyNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzozNzozOC4wMzAzMjg3MTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBwcm9jZXNzaW5nIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGJ5IHJlcGxhY2luZyBmaXhlZCBgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWAgYWRqdXN0bWVudHMgaW4gYHNrYl9wdXNoKClgIGFuZCBgc2tiX3B1bGwoKWAgd2l0aCBkeW5hbWljIG9mZnNldHMgKGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGFuZCBgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKWApLiBUaGlzIGNvcnJlY3RseSBhZGp1c3RzIGBza2ItXFx1MDAzZWRhdGFgIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV0d29yayBoZWFkZXIgYW5kIHRyYW5zcG9ydCBoZWFkZXIgd2hlbiBleHRlbnNpb24gaGVhZGVycyBwcmVjZWRlIHRoZSBTUkguXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGFjY2VzcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZmllbGRzLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgdmlhIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb3JyZWN0IGBza2JfcHVzaGAvYHNrYl9wdWxsYCBjYWxjdWxhdGlvbnMgcmVsYXRlIHRvIHNrYiBidWZmZXIgYm91bmRzIGFuZCBoZWFkZXIgYWxpZ25tZW50LCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBza19idWZmIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoZS5nLiwgYHNrYl91bmRlcl9wYW5pY2AvYHNrYl9vdmVyX3BhbmljYCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHByb2Nlc3NpbmcgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AgYnkgcmVwbGFjaW5nIGZpeGVkIGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCBhZGp1c3RtZW50cyBpbiBgc2tiX3B1c2goKWAgYW5kIGBza2JfcHVsbCgpYCB3aXRoIGR5bmFtaWMgb2Zmc2V0cyAoYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAgYW5kIGBza2JfdHJhbnNwb3J0X29mZnNldChza2IpYCkuIFRoaXMgY29ycmVjdGx5IGFkanVzdHMgYHNrYi1cXHUwMDNlZGF0YWAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXR3b3JrIGhlYWRlciBhbmQgdHJhbnNwb3J0IGhlYWRlciB3aGVuIGV4dGVuc2lvbiBoZWFkZXJzIHByZWNlZGUgdGhlIFNSSC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBmaWVsZHMsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB2aWEgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvcnJlY3QgYHNrYl9wdXNoYC9gc2tiX3B1bGxgIGNhbGN1bGF0aW9ucyByZWxhdGUgdG8gc2tiIGJ1ZmZlciBib3VuZHMgYW5kIGhlYWRlciBhbGlnbm1lbnQsIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHNrX2J1ZmYgcnVudGltZSBhc3NlcnRpb25zIChlLmcuLCBgc2tiX3VuZGVyX3BhbmljYC9gc2tiX292ZXJfcGFuaWNgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzpwgw[1] Phase: Succeeded StartedAt: 2026-08-28 17:37:49 +0000 UTC FinishedAt: 2026-08-28 17:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-28 17:37:49 +0000 UTC FinishedAt: 2026-08-28 17:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2] Phase: Succeeded StartedAt: 2026-08-28 17:37:49 +0000 UTC FinishedAt: 2026-08-28 21:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-28 17:37:49 +0000 UTC FinishedAt: 2026-08-28 21:21:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-28 17:37:49 +0000 UTC FinishedAt: 2026-08-28 17:37:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-28 17:37:49 +0000 UTC FinishedAt: 2026-08-28 17:37:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzpwgw/series-workflowzpwgw-convert-artifact-2402122704/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-28 17:37:59 +0000 UTC FinishedAt: 2026-08-28 17:54:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-28 17:37:59 +0000 UTC FinishedAt: 2026-08-28 17:54:05 +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:*177ff8fc-2643-4611-8f00-95d0df5f41db,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-workflowzpwgw/series-workflowzpwgw-convert-artifact-2402122704/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": "9f0ecbc2-0a0e-47b0-9c64-5ff193d41a64", "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-workflowzpwgw/series-workflowzpwgw-build-action-3516951126/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-28 17:37:59 +0000 UTC FinishedAt: 2026-08-28 17:53:55 +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:*177ff8fc-2643-4611-8f00-95d0df5f41db,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-workflowzpwgw/series-workflowzpwgw-convert-artifact-2402122704/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": "9f0ecbc2-0a0e-47b0-9c64-5ff193d41a64", "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-workflowzpwgw/series-workflowzpwgw-build-action-3516951126/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-28 17:54:05 +0000 UTC FinishedAt: 2026-08-28 17:54:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-28 17:54:05 +0000 UTC FinishedAt: 2026-08-28 17:54:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-28 17:54:05 +0000 UTC FinishedAt: 2026-08-28 17:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-28 17:54:05 +0000 UTC FinishedAt: 2026-08-28 17:54:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzpwgw/series-workflowzpwgw-convert-artifact-272271415/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-28 17:54:15 +0000 UTC FinishedAt: 2026-08-28 17:56:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-28 17:54:15 +0000 UTC FinishedAt: 2026-08-28 17:56:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f0ecbc2-0a0e-47b0-9c64-5ff193d41a64,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-workflowzpwgw/series-workflowzpwgw-build-action-3516951126/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-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-28 17:56:32 +0000 UTC FinishedAt: 2026-08-28 17:56:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-28 17:56:32 +0000 UTC FinishedAt: 2026-08-28 17:56:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-28 17:56:32 +0000 UTC FinishedAt: 2026-08-28 18:14:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-28 17:56:32 +0000 UTC FinishedAt: 2026-08-28 18:14:37 +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:*177ff8fc-2643-4611-8f00-95d0df5f41db,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-workflowzpwgw/series-workflowzpwgw-convert-artifact-272271415/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": "a9ba7290-f24b-48ce-b886-7731a7322b31", "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-workflowzpwgw/series-workflowzpwgw-build-action-2041440251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-28 17:56:32 +0000 UTC FinishedAt: 2026-08-28 18:14:27 +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:*177ff8fc-2643-4611-8f00-95d0df5f41db,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-workflowzpwgw/series-workflowzpwgw-convert-artifact-272271415/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": "a9ba7290-f24b-48ce-b886-7731a7322b31", "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-workflowzpwgw/series-workflowzpwgw-build-action-2041440251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-28 18:14:37 +0000 UTC FinishedAt: 2026-08-28 18:14:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-28 18:14:37 +0000 UTC FinishedAt: 2026-08-28 18:14:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-28 18:14:37 +0000 UTC FinishedAt: 2026-08-28 18:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-28 18:14:37 +0000 UTC FinishedAt: 2026-08-28 18:16:32 +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:*a9ba7290-f24b-48ce-b886-7731a7322b31,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-workflowzpwgw/series-workflowzpwgw-build-action-2041440251/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-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-28 18:16:42 +0000 UTC FinishedAt: 2026-08-28 21:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-28 18:16:42 +0000 UTC FinishedAt: 2026-08-28 21:21:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"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:*9f0ecbc2-0a0e-47b0-9c64-5ff193d41a64,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a9ba7290-f24b-48ce-b886-7731a7322b31,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-workflowzpwgw/series-workflowzpwgw-build-action-3516951126/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-workflowzpwgw/series-workflowzpwgw-build-action-2041440251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-28 18:16:42 +0000 UTC FinishedAt: 2026-08-28 18:16:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-28 18:16:42 +0000 UTC FinishedAt: 2026-08-28 18:16:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"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-workflowzpwgw/series-workflowzpwgw-convert-artifact-158492528/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-28 18:16:42 +0000 UTC FinishedAt: 2026-08-28 18:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-28 18:16:42 +0000 UTC FinishedAt: 2026-08-28 18:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-28 18:16:42 +0000 UTC FinishedAt: 2026-08-28 18:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-28 18:16:52 +0000 UTC FinishedAt: 2026-08-28 21:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzpwgw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"3daef668-b849-4df9-8594-c6ce872725c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-28 18:16:52 +0000 UTC FinishedAt: 2026-08-28 21:21:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f0ecbc2-0a0e-47b0-9c64-5ff193d41a64,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a9ba7290-f24b-48ce-b886-7731a7322b31,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-workflowzpwgw/series-workflowzpwgw-build-action-3516951126/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-workflowzpwgw/series-workflowzpwgw-build-action-2041440251/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-workflowzpwgw/series-workflowzpwgw-convert-artifact-158492528/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,}