Name: series-workflowqb55s Phase: Succeeded StartedAt: 2026-09-03 14:06:19 +0000 UTC FinishedAt: 2026-09-03 15:40:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[0] Phase: Succeeded StartedAt: 2026-09-03 14:06:19 +0000 UTC FinishedAt: 2026-09-03 14:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 14:06:19 +0000 UTC FinishedAt: 2026-09-03 14:10:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "3bf08b66-cf4f-4b47-a71f-cf672709d3b3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "svc_addsock", "__write_ports_addfd" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OywKICAgICYjMzQ7X193cml0ZV9wb3J0c19hZGRmZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHN2Y19hZGRzb2NrKCkgdG8gZW5zdXJlIHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHN2Y19hZGRzb2NrKClgIHRvIHByZXZlbnQgc29ja2V0cyB3aXRoIGV4aXN0aW5nIGBza191c2VyX2RhdGFgIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBhcyBSUEMgc2VydmljZSBsaXN0ZW5lciBzb2NrZXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nL1JQQyBzZXJ2ZXIgY29kZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgTkZTRCBjb250cm9sIGludGVyZmFjZSAod3JpdGluZyBhbiBGRCB0byAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBiZDNkY2JhZjQwODUxNmMwMWEwYzYyMDBmMTViNDQ1N2I3Y2FkOTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjA4OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbkBAIC0xNTQxLDYgJiM0MzsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXG4gXHRlcnIgPSAtRUlTQ09OTjtcbiBcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdGVyciA9IC1FQlVTWTtcbiYjNDM7XHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXHRlcnIgPSAtRU5PRU5UO1xuIFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4gXHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OywKICAgICYjMzQ7X193cml0ZV9wb3J0c19hZGRmZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcHJldmVudCBzb2NrZXRzIHdpdGggZXhpc3RpbmcgYHNrX3VzZXJfZGF0YWAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGFzIFJQQyBzZXJ2aWNlIGxpc3RlbmVyIHNvY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcvUlBDIHNlcnZlciBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBORlNEIGNvbnRyb2wgaW50ZXJmYWNlICh3cml0aW5nIGFuIEZEIHRvIC9wcm9jL2ZzL25mc2QvcG9ydGxpc3QpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGJkM2RjYmFmNDA4NTE2YzAxYTBjNjIwMGYxNWI0NDU3YjdjYWQ5MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTQ6MDg6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xNTQxLDYgJiM0MzsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsCiAJZXJyID0gLUVJU0NPTk47CiAJaWYgKHNvLSZndDtzdGF0ZSAmZ3Q7IFNTX1VOQ09OTkVDVEVEKQogCQlnb3RvIG91dDsKJiM0MzsJZXJyID0gLUVCVVNZOwomIzQzOwlpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpCiYjNDM7CQlnb3RvIG91dDsKIAllcnIgPSAtRU5PRU5UOwogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQogCQlnb3RvIG91dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzdmNfYWRkc29ja2AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRpZmYgdGFyZ2V0aW5nIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIGBzdmNfYWRkc29ja2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBpbnRyb2R1Y2VkLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBjaGVjazogYGlmIChzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YSkgZ290byBvdXQ7YCByaWdodCBhZnRlciB0aGUgZXhpc3RpbmcgYHNvLSZndDtzdGF0ZWAgYW5kIHJpZ2h0IGJlZm9yZSB0aGUgYHRyeV9tb2R1bGVfZ2V0YCBjYWxsLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBzaG9ydC1jaXJjdWl0aW5nIHRoZSBhZGQgb3BlcmF0aW9uIGlmIGBza191c2VyX2RhdGFgIGlzIHNldC4gVGhlIHByZXZpb3VzIGNoZWNrcyBjb3ZlcmVkIGNvbm5lY3Rpb24gc3RhdGUgYW5kIG1vZHVsZSBhdmFpbGFiaWxpdHksIHRoaXMgaXMgbmV3LCBhbmQgY2xlYXJseSByZWxhdGVkIHRvIHJlc291cmNlIGNvbnRlbnRpb24gb3IgcGVyaGFwcyBwcmV2ZW50aW5nIGRvdWJsZS1yZWdpc3RyYXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGludGVuZGVkIHRvIHByZXZlbnQgYSBzb2NrZXQgZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgc2VydmljZSBpZiBpdCYjMzk7cyBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBzb21lIG90aGVyIGNvbnRleHQuIFdlIGtub3cgdGhhdCBgc2tfdXNlcl9kYXRhYCBpcyBvZnRlbiB1c2VkIHRvIGhvbGQgcHJpdmF0ZSBkYXRhIHNwZWNpZmljIHRvIGEgc29ja2V0LCBzbyBhIG5vbi1udWxsIGBza191c2VyX2RhdGFgIGxpa2VseSBpbmRpY2F0ZXMgdGhlIHNvY2tldCBpcyBhbHJlYWR5ICYjMzk7aW4gdXNlJiMzOTsuIE1ha2VzIHNlbnNlLiBQcmV2ZW50aW5nIHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBhdm9pZGluZyByYWNlIGNvbmRpdGlvbnMsIHJlc291cmNlIGxlYWtzLCBvciBwcmV2ZW50aW5nIGRvdWJsZSBhY2NvdW50aW5nIG9mIHJlc291cmNlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLgoKVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBzdmNfYWRkc29ja2AgYW5kIHdoYXQgY2FsbHMgaXQuIEkmIzM5O2xsIGZpcmUgdXAgbXkgdHJ1c3R5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IGFyZWEsIGFuZCB3aGVyZSBgc3ZjX2FkZHNvY2tgIGdldHMgY2FsbGVkIGZyb20uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MjA6XHRcdFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuMTUyMTpcdHtcbjE1MjI6XHRcdGludCBlcnIgPSAwO1xuMTUyMzpcdFx0c3RydWN0IHNvY2tldCAqc28gPSBzb2NrZmRfbG9va3VwKGZkLCBcdTAwMjZlcnIpO1xuMTUyNDpcdFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID0gTlVMTDtcbjE1MjU6XHRcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XG4xNTI2Olx0XHRzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyO1xuMTUyNzpcdFx0aW50IHNhbGVuO1xuMTUyODpcdFxuMTUyOTpcdFx0aWYgKCFzbylcbjE1MzA6XHRcdFx0cmV0dXJuIGVycjtcbjE1MzE6XHRcdGVyciA9IC1FSU5WQUw7XG4xNTMyOlx0XHRpZiAoc29ja19uZXQoc28tXHUwMDNlc2spICE9IG5ldClcbjE1MzM6XHRcdFx0Z290byBvdXQ7XG4xNTM0Olx0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuMTUzNTpcdFx0aWYgKChzby1cdTAwM2Vzay1cdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVCkgXHUwMDI2XHUwMDI2IChzby1cdTAwM2Vzay1cdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYpKVxuMTUzNjpcdFx0XHRnb3RvIG91dDtcbjE1Mzc6XHRcdGVyciA9ICAtRVBST1RPTk9TVVBQT1JUO1xuMTUzODpcdFx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuMTUzOTpcdFx0ICAgIHNvLVx1MDAzZXNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuMTU0MDpcdFx0XHRnb3RvIG91dDtcbjE1NDE6XHRcdGVyciA9IC1FSVNDT05OO1xuMTU0MjpcdFx0aWYgKHNvLVx1MDAzZXN0YXRlIFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcbjE1NDM6XHRcdFx0Z290byBvdXQ7XG4xNTQ0Olx0XHRlcnIgPSAtRUJVU1k7XG4xNTQ1Olx0XHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuMTU0NjpcdFx0XHRnb3RvIG91dDtcbjE1NDc6XHRcdGVyciA9IC1FTk9FTlQ7XG4xNTQ4Olx0XHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbjE1NDk6XHRcdFx0Z290byBvdXQ7XG4xNTUwOlx0XHRzdnNrID0gc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO1xuMTU1MTpcdFx0aWYgKElTX0VSUihzdnNrKSkge1xuMTU1MjpcdFx0XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbjE1NTM6XHRcdFx0ZXJyID0gUFRSX0VSUihzdnNrKTtcbjE1NTQ6XHRcdFx0Z290byBvdXQ7XG4xNTU1Olx0XHR9XG4xNTU2Olx0XHRzYWxlbiA9IGtlcm5lbF9nZXRzb2NrbmFtZShzdnNrLVx1MDAzZXNrX3NvY2ssIHNpbik7XG4xNTU3Olx0XHRpZiAoc2FsZW4gXHUwMDNlPSAwKVxuMTU1ODpcdFx0XHRzdmNfeHBydF9zZXRfbG9jYWwoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBzaW4sIHNhbGVuKTtcbjE1NTk6XHRcdHN2c2stXHUwMDNlc2tfeHBydC54cHRfY3JlZCA9IGdldF9jcmVkKGNyZWQpO1xuMTU2MDpcdFx0c3ZjX2FkZF9uZXdfcGVybV94cHJ0KHNlcnYsIFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCk7XG4xNTYxOlx0XHRyZXR1cm4gc3ZjX29uZV9zb2NrX25hbWUoc3ZzaywgbmFtZV9yZXR1cm4sIGxlbik7XG4xNTYyOlx0b3V0OlxuMTU2MzpcdFx0c29ja2ZkX3B1dChzbyk7XG4xNTY0Olx0XHRyZXR1cm4gZXJyO1xuMTU2NTpcdH1cbjE1NjY6XHRFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XG4xNTY3Olx0XG4xNTY4Olx0LypcbjE1Njk6XHQgKiBDcmVhdGUgc29ja2V0IGZvciBSUEMgc2VydmljZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjY4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBzdmNfYWRkc29ja2AgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGBzdmNfYWRkc29ja2AuIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhpcyBpcyBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlIGZvciBkaWdnaW5nIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBhIHNwZWNpZmljIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20gd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCB0byBmaWd1cmluZyBvdXQgaXRzIHJvbGUgYW5kIGFueSBwb3RlbnRpYWwgaW1wYWN0IG9mIG1vZGlmeWluZyBpdCwgb3IgZm9yIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfYWRkc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnNkL25mc2N0bC5jPTczMj1zdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZGZkKGNoYXIgKmJ1Ziwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbi0tXG5mcy9uZnNkL25mc2N0bC5jLTc0OC1cdHNlcnYgPSBubi1cdTAwM2VuZnNkX3NlcnY7XG5mcy9uZnNkL25mc2N0bC5jOjc0OTpcdGVyciA9IHN2Y19hZGRzb2NrKHNlcnYsIG5ldCwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCBjcmVkKTtcbmZzL25mc2QvbmZzY3RsLmMtNzUwLVxuLS1cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaD02NT12b2lkXHRcdHN2Y19zZW5kKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApO1xuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oOjY2OmludFx0XHRzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaC02Ny1cdFx0XHQgICAgY29uc3QgaW50IGZkLCBjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbixcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xNDM5PXN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDYtLyoqXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTA3OiAqIHN2Y19hZGRzb2NrIC0gYWRkIGEgbGlzdGVuZXIgc29ja2V0IHRvIGFuIFJQQyBzZXJ2aWNlXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTA4LSAqIEBzZXJ2OiBwb2ludGVyIHRvIFJQQyBzZXJ2aWNlIHRvIHdoaWNoIHRvIGFkZCBhIG5ldyBsaXN0ZW5lclxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MTgtICovXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTE5OmludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUyMC1cdFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjUtfVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTU2NjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTY3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBgc3ZjX2FkZHNvY2tgIFVzYWdlKioKCk9rYXksIHNvIGBzdmNfYWRkc29ja2AgaXMgZXhwb3J0ZWQsIGFuZCBpdCBsb29rcyBsaWtlIGBmcy9uZnNkL25mc2N0bC5jYCBpcyB1c2luZyBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqaG93Ki4gVGhlIGNsdWUgaXMgdGhpcyBpbnRlcmFjdGlvbiB3aXRoIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCBvciBzb21ldGhpbmcgYW5hbG9nb3VzIHdpdGhpbiB0aGUgYHN5c2ZzL25mc2N0bGAgaW50ZXJmYWNlLiBSaWdodCwgc28gdGhhdCBwb2ludHMgbWUgZGlyZWN0bHkgdG8gdGhhdCBgbmZzY3RsLmNgIGZpbGUuIFRpbWUgdG8gZGlnIGluLi4uIEkmIzM5O2xsIGp1bXAgcmlnaHQgdG8gbGluZSA3MzIsIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhlcmUuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWxldmFudCBgbmZzY3RsYCBsb2dpYyBvciB0aGUgcG9ydGxpc3QgaW50ZXJhY3Rpb24gb2NjdXJzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gYHN2Y19hZGRzb2NrYCBiYXNlZCBvbiB0aGF0IGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmZzZC9uZnNjdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzI1Olx0fVxuIDcyNjpcdFxuIDcyNzpcdC8qXG4gNzI4Olx0ICogQSBzaW5nbGUgJiMzOTtmZCYjMzk7IG51bWJlciB3YXMgd3JpdHRlbiwgaW4gd2hpY2ggY2FzZSBpdCBtdXN0IGJlIGZvclxuIDcyOTpcdCAqIGEgc29ja2V0IG9mIGEgc3VwcG9ydGVkIGZhbWlseS9wcm90b2NvbCwgYW5kIHdlIHVzZSBpdCBhcyBhblxuIDczMDpcdCAqIG5mc2QgbGlzdGVuZXIuXG4gNzMxOlx0ICovXG4gNzMyOlx0c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19hZGRmZChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4gNzMzOlx0e1xuIDczNDpcdFx0Y2hhciAqbWVzZyA9IGJ1ZjtcbiA3MzU6XHRcdGludCBmZCwgZXJyO1xuIDczNjpcdFx0c3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzZF9uZXRfaWQpO1xuIDczNzpcdFx0c3RydWN0IHN2Y19zZXJ2ICpzZXJ2O1xuIDczODpcdFxuIDczOTpcdFx0ZXJyID0gZ2V0X2ludChcdTAwMjZtZXNnLCBcdTAwMjZmZCk7XG4gNzQwOlx0XHRpZiAoZXJyICE9IDAgfHwgZmQgXHUwMDNjIDApXG4gNzQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc0MjpcdFx0dHJhY2VfbmZzZF9jdGxfcG9ydHNfYWRkZmQobmV0LCBmZCk7XG4gNzQzOlx0XG4gNzQ0Olx0XHRlcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KG5ldCk7XG4gNzQ1Olx0XHRpZiAoZXJyICE9IDApXG4gNzQ2Olx0XHRcdHJldHVybiBlcnI7XG4gNzQ3Olx0XG4gNzQ4Olx0XHRzZXJ2ID0gbm4tXHUwMDNlbmZzZF9zZXJ2O1xuIDc0OTpcdFx0ZXJyID0gc3ZjX2FkZHNvY2soc2VydiwgbmV0LCBmZCwgYnVmLCBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQsIGNyZWQpO1xuIDc1MDpcdFxuIDc1MTpcdFx0aWYgKCFzZXJ2LVx1MDAzZXN2X25ydGhyZWFkcyBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZubi1cdTAwM2VuZnNkX3NlcnYtXHUwMDNlc3ZfcGVybXNvY2tzKSlcbiA3NTI6XHRcdFx0bmZzZF9kZXN0cm95X3NlcnYobmV0KTtcbiA3NTM6XHRcbiA3NTQ6XHRcdHJldHVybiBlcnI7XG4gNzU1Olx0fVxuIDc1NjpcdFxuIDc1NzpcdC8qXG4gNzU4Olx0ICogQSB0cmFuc3BvcnQgbGlzdGVuZXIgaXMgYWRkZWQgYnkgd3JpdGluZyBpdHMgdHJhbnNwb3J0IG5hbWUgYW5kXG4gNzU5Olx0ICogYSBwb3J0IG51bWJlci5cbiA3NjA6XHQgKi9cbiA3NjE6XHRzdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZHhwcnQoY2hhciAqYnVmLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuIDc2MjpcdHtcbiA3NjM6XHRcdGNoYXIgdHJhbnNwb3J0WzE2XTtcbiA3NjQ6XHRcdHN0cnVjdCBzdmNfeHBydCAqeHBydDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBVc2VyLVNwYWNlIEVudHJ5IFBvaW50IGZvciBgX193cml0ZV9wb3J0c19hZGRmZGAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBpcyBiZWluZyBpbnZva2VkIGZyb20gdXNlciBzcGFjZS4gTGV0JiMzOTtzIGRpZyBpbi4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gd3JpdGluZy4gVGhlIGBfX2AgcHJlZml4IHVzdWFsbHkgaW5kaWNhdGVzIGFuIGludGVybmFsIGtlcm5lbCBmdW5jdGlvbiwgc28gaXQgd29uJiMzOTt0IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQmIzM5O3MgbGlrZWx5IGEgbG93ZXItbGV2ZWwgaGVscGVyIGZvciBhIG1vcmUgdXNlci1mYWNpbmcgc3lzdGVtIGNhbGwuCgpNeSBpbW1lZGlhdGUgcGxhbiBpcyB0byB1c2UgYSBjb21iaW5hdGlvbiBvZiB0ZWNobmlxdWVzLiBJJiMzOTtsbCBzdGFydCB3aXRoIHNvdXJjZSBjb2RlIGFuYWx5c2lzLCBncmVwcGluZyBmb3IgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiwga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgaXQgbWlnaHQgYmUgbGlua2VkIHRvIG90aGVyIGZ1bmN0aW9ucyBhbmQgcG90ZW50aWFsbHkgdHJhY2UgaXQgd2l0aCBhIGRlYnVnZ2VyIHRvIGNoZWNrIHRoYXQgd2hhdCBJIHRob3VnaHQgd2FzIGhhcHBlbmluZywgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGUgYXJndW1lbnRzIHBhc3NlZCwgYW5kIHdoYXQgY29udGV4dCB0cmlnZ2VycyBpdHMgZXhlY3V0aW9uLiBJIGtub3cgSSBoYXZlIHRvIGNvbnNpZGVyIGRpZmZlcmVudCBzeXN0ZW0gY2FsbHMgdGhhdCBjb3VsZCBoYW5kbGUgdGhlIGZ1bmN0aW9uIGFzIGEgaGVscGVyLgoKSSYjMzk7bGwga2VlcCBhIHNoYXJwIGV5ZSBvdXQgZm9yIGxpa2VseSBzdXNwZWN0cyBsaWtlIGBlcG9sbF9jdGxgIChnaXZlbiBpdHMgRkQgbWFuYWdlbWVudCBuYXR1cmUpIG9yIGV2ZW4gY3VzdG9tIGRyaXZlcnMgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgc3BlY2lmaWMgdG8gaGFyZHdhcmUgb3IgYSBub24tc3RhbmRhcmQgZGV2aWNlLiBJIGtub3cgdGhhdCBsb29raW5nIGF0IHRoZSBmdW5jdGlvbiBjYWxscyB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIGlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYWxsIHBvc3NpYmxlIGVudHJ5IHBvaW50cyB0byBzZWUgaWYgdGhlIGNhbGxzIGFyZSBtYWRlIGZyb20gdGhlcmUuIEkgbWlnaHQgZXZlbiBjb25zaWRlciBsb29raW5nIGF0IHRoZSBrZXJuZWwgaGVhZGVycywgbG9va2luZyBmb3Igc3RydWN0dXJlcyBhbmQgbWFjcm9zIHRoYXQgYXJlIGRlZmluZWQgYXMgd2VsbC4KCkkgbmVlZCB0byBxdWlja2x5IGZvcm11bGF0ZSBhIHBsYW4gdGhhdCBpZGVudGlmaWVzIHN5c3RlbSBjYWxscyBpbnZvbHZlZCBpbiB3cml0ZSBvcGVyYXRpb25zIGFuZCB0aGVuIGlkZW50aWZ5IHRoZSBwb3NzaWJsZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgdGhlIG9wZXJhdGlvbnMgY2FsbC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBpZGVudGlmeSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X193cml0ZV9wb3J0c19hZGRmZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mc2QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9uZnNjdGwuYz03MTg9c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19uYW1lcyhjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5mcy9uZnNkL25mc2N0bC5jLTczMS0gKi9cbmZzL25mc2QvbmZzY3RsLmM6NzMyOnN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkZmQoY2hhciAqYnVmLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuZnMvbmZzZC9uZnNjdGwuYy03MzMte1xuLS1cbmZzL25mc2QvbmZzY3RsLmM9ODA1PXN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsXG4tLVxuZnMvbmZzZC9uZnNjdGwuYy04MTEtXHRpZiAoaXNkaWdpdChidWZbMF0pKVxuZnMvbmZzZC9uZnNjdGwuYzo4MTI6XHRcdHJldHVybiBfX3dyaXRlX3BvcnRzX2FkZGZkKGJ1ZiwgbmV0LCBmaWxlLVx1MDAzZWZfY3JlZCk7XG5mcy9uZnNkL25mc2N0bC5jLTgxMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkZTRCBQb3J0bGlzdCBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgX193cml0ZV9wb3J0c2AsIHdoaWNoIEkgc2VlIGlzIGEgaGVscGVyIHdpdGhpbiB0aGUgYHdyaXRlX3BvcnRzYCBoYW5kbGVyIHNwZWNpZmljYWxseSBmb3IgdGhlIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCBmaWxlIOKAkyB0aGF0IE5GUyBkYWVtb24gcG9ydGxpc3QgZW50cnkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgTkZTRCBhbmQgU1VOUlBDLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBleHBlY3RlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHNldCwgb3IgSSB3b24mIzM5O3QgdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBpcyBzdXBwb3NlZCB0byBkby4gQSBzb2xpZCBncmFzcCBvZiB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgdGVsbCBtZSBpZiB0aGUgTkZTIGRhZW1vbiBpcyBidWlsdCBhbmQgY29uZmlndXJlZCBhcyBJIHdvdWxkIGV4cGVjdCwgc28gSSBoYXZlIGEgZm91bmRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBgX193cml0ZV9wb3J0c2AgaGFuZGxlci4gSSBuZWVkIHRvIGtub3cgdGhlIHByZXJlcXVpc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GU0QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnNkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MzAzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5mcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXG5mcy9uZnNkL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy03LVx0c2VsZWN0IENSQzMyXG5mcy9uZnNkL0tjb25maWc6ODpcdHNlbGVjdCBDUllQVE9fTElCX01ENSBpZiBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbmZzL25mc2QvS2NvbmZpZzo5Olx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2IGlmIE5GU0RfVjRcbmZzL25mc2QvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE8gIyByZXF1aXJlZCBieSBSUENTRUNfR1NTX0tSQjUgYW5kIHNpZ25lZCBmaWxlaGFuZGxlc1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNC1cdHNlbGVjdCBORlNfQ09NTU9OXG5mcy9uZnNkL0tjb25maWc6MTU6XHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjJfQUNMXG5mcy9uZnNkL0tjb25maWc6MTY6XHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjNfQUNMXG5mcy9uZnNkL0tjb25maWctMTctXHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuLS1cbmZzL25mc2QvS2NvbmZpZy0zNS1cdCAgU3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMyAoUkZDIDE4MTMpIGlzIGFsd2F5cyBhdmFpbGFibGUgd2hlblxuZnMvbmZzZC9LY29uZmlnOjM2Olx0ICBDT05GSUdfTkZTRCBpcyBzZWxlY3RlZC5cbmZzL25mc2QvS2NvbmZpZy0zNy1cbi0tXG5mcy9uZnNkL0tjb25maWctMzktXG5mcy9uZnNkL0tjb25maWc6NDA6Y29uZmlnIE5GU0RfVjJcbmZzL25mc2QvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiAyIChERVBSRUNBVEVEKVwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjQyOlx0ZGVwZW5kcyBvbiBORlNEXG5mcy9uZnNkL0tjb25maWctNDMtXHRkZWZhdWx0IG5cbi0tXG5mcy9uZnNkL0tjb25maWctNTAtXG5mcy9uZnNkL0tjb25maWc6NTE6Y29uZmlnIE5GU0RfVjJfQUNMXG5mcy9uZnNkL0tjb25maWctNTItXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cJiMzNDtcbmZzL25mc2QvS2NvbmZpZzo1MzpcdGRlcGVuZHMgb24gTkZTRF9WMlxuZnMvbmZzZC9LY29uZmlnLTU0LVxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxuZnMvbmZzZC9LY29uZmlnLTU2LVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6NTc6XHRkZXBlbmRzIG9uIE5GU0RcbmZzL25mc2QvS2NvbmZpZy01OC1cdGhlbHBcbi0tXG5mcy9uZnNkL0tjb25maWctNzYtXG5mcy9uZnNkL0tjb25maWc6Nzc6Y29uZmlnIE5GU0RfVjRcbmZzL25mc2QvS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiA0XCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6Nzk6XHRkZXBlbmRzIG9uIE5GU0QgXHUwMDI2XHUwMDI2IFBST0NfRlNcbmZzL25mc2QvS2NvbmZpZy04MC1cdHNlbGVjdCBGU19QT1NJWF9BQ0xcbi0tXG5mcy9uZnNkL0tjb25maWctOTMtXG5mcy9uZnNkL0tjb25maWc6OTQ6Y29uZmlnIE5GU0RfUE5GU1xuZnMvbmZzZC9LY29uZmlnLTk1LVx0Ym9vbFxuZnMvbmZzZC9LY29uZmlnLTk2LVxuZnMvbmZzZC9LY29uZmlnOjk3OmNvbmZpZyBORlNEX0JMT0NLTEFZT1VUXG5mcy9uZnNkL0tjb25maWctOTgtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgYmxvY2sgbGF5b3V0c1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjk5Olx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBCTE9DS1xuZnMvbmZzZC9LY29uZmlnOjEwMDpcdHNlbGVjdCBORlNEX1BORlNcbmZzL25mc2QvS2NvbmZpZy0xMDEtXHRzZWxlY3QgRVhQT1JURlNfQkxPQ0tfT1BTXG4tLVxuZnMvbmZzZC9LY29uZmlnLTEwOS1cbmZzL25mc2QvS2NvbmZpZzoxMTA6Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzoxMTI6XHRkZXBlbmRzIG9uIE5GU0RfVjQgXHUwMDI2XHUwMDI2IEJMT0NLXG5mcy9uZnNkL0tjb25maWc6MTEzOlx0c2VsZWN0IE5GU0RfUE5GU1xuZnMvbmZzZC9LY29uZmlnLTExNC1cdHNlbGVjdCBFWFBPUlRGU19CTE9DS19PUFNcbi0tXG5mcy9uZnNkL0tjb25maWctMTIzLVxuZnMvbmZzZC9LY29uZmlnOjEyNDpjb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjEyNjpcdGRlcGVuZHMgb24gTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnOjEyNzpcdHNlbGVjdCBORlNEX1BORlNcbmZzL25mc2QvS2NvbmZpZy0xMjgtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnLTE0MC1cbmZzL25mc2QvS2NvbmZpZzoxNDE6Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcbmZzL25mc2QvS2NvbmZpZy0xNDItXHRib29sIFwmIzM0O05GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTQzOlx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBORlNfVjRfMlxuZnMvbmZzZC9LY29uZmlnLTE0NC1cdGhlbHBcbi0tXG5mcy9uZnNkL0tjb25maWctMTUwLVxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxuZnMvbmZzZC9LY29uZmlnLTE1Mi1cdGJvb2wgXCYjMzQ7UHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzoxNTM6XHRkZXBlbmRzIG9uIE5GU0RfVjQgXHUwMDI2XHUwMDI2IFNFQ1VSSVRZXG5mcy9uZnNkL0tjb25maWctMTU0LVx0aGVscFxuLS1cbmZzL25mc2QvS2NvbmZpZy0xNjMtXG5mcy9uZnNkL0tjb25maWc6MTY0OmNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbmZzL25mc2QvS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE2NjpcdGRlcGVuZHMgb24gTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnLTE2Ny1cdGRlZmF1bHQgblxuLS1cbmZzL25mc2QvS2NvbmZpZy0xNzktXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE4MjpcdGRlcGVuZHMgb24gTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnLTE4My1cdGRlZmF1bHQgblxuLS1cbmZzL25mc2QvTWFrZWZpbGU9Nj1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXHRcdFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xuZnMvbmZzZC9NYWtlZmlsZS03LVxuZnMvbmZzZC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19ORlNEKVx0JiM0Mzs9IG5mc2Qub1xuZnMvbmZzZC9NYWtlZmlsZS05LVxuLS1cbmZzL25mc2QvTWFrZWZpbGU9MTM9bmZzZC15IFx0XHRcdCYjNDM7PSBuZnNzdmMubyBuZnNjdGwubyBuZnNmaC5vIHZmcy5vIFxcXG4tLVxuZnMvbmZzZC9NYWtlZmlsZS0xNi1cdFx0XHQgICBuZXRsaW5rLm9cbmZzL25mc2QvTWFrZWZpbGU6MTc6bmZzZC0kKENPTkZJR19ORlNEX1YyKSAmIzQzOz0gbmZzcHJvYy5vIG5mc3hkci5vXG5mcy9uZnNkL01ha2VmaWxlOjE4Om5mc2QtJChDT05GSUdfTkZTRF9WMl9BQ0wpICYjNDM7PSBuZnMyYWNsLm9cbmZzL25mc2QvTWFrZWZpbGU6MTk6bmZzZC0kKENPTkZJR19ORlNEX1YzX0FDTCkgJiM0Mzs9IG5mczNhY2wub1xuZnMvbmZzZC9NYWtlZmlsZToyMDpuZnNkLSQoQ09ORklHX05GU0RfVjQpXHQmIzQzOz0gbmZzNHByb2MubyBuZnM0eGRyLm8gbmZzNHN0YXRlLm8gbmZzNGlkbWFwLm8gXFxcbmZzL25mc2QvTWFrZWZpbGUtMjEtXHRcdFx0ICAgbmZzNGFjbC5vIG5mczRjYWxsYmFjay5vIG5mczRyZWNvdmVyLm8gbmZzNHhkcl9nZW4ub1xuZnMvbmZzZC9NYWtlZmlsZToyMjpuZnNkLSQoQ09ORklHX05GU0RfUE5GUykgJiM0Mzs9IG5mczRsYXlvdXRzLm9cbmZzL25mc2QvTWFrZWZpbGU6MjM6bmZzZC0kKENPTkZJR19ORlNEX0JMT0NLTEFZT1VUKSAmIzQzOz0gYmxvY2tsYXlvdXQubyBibG9ja2xheW91dHhkci5vXG5mcy9uZnNkL01ha2VmaWxlOjI0Om5mc2QtJChDT05GSUdfTkZTRF9TQ1NJTEFZT1VUKSAmIzQzOz0gYmxvY2tsYXlvdXQubyBibG9ja2xheW91dHhkci5vXG5mcy9uZnNkL01ha2VmaWxlOjI1Om5mc2QtJChDT05GSUdfTkZTRF9GTEVYRklMRUxBWU9VVCkgJiM0Mzs9IGZsZXhmaWxlbGF5b3V0Lm8gZmxleGZpbGVsYXlvdXR4ZHIub1xuZnMvbmZzZC9NYWtlZmlsZS0yNi1uZnNkLSQoQ09ORklHX05GU19MT0NBTElPKSAmIzQzOz0gbG9jYWxpby5vXG4tLVxuZnMvbmZzZC9hdHRyNC5oLTUtXG5mcy9uZnNkL2F0dHI0Lmg6NjojaWZuZGVmIF9MSU5VWF9ORlNEX0FUVFI0X0hcbmZzL25mc2QvYXR0cjQuaDo3OiNkZWZpbmUgX0xJTlVYX05GU0RfQVRUUjRfSFxuZnMvbmZzZC9hdHRyNC5oLTgtXG4tLVxuZnMvbmZzZC9hdHRyNC5oLTEyLS8qXG5mcy9uZnNkL2F0dHI0Lmg6MTM6ICogVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBub3QgaW1wbGVtZW50ZWQgYnkgTkZTRDpcbmZzL25mc2QvYXR0cjQuaC0xNC0gKiAgICBBUkNISVZFICAgICAgIChkZXByZWNhdGVkIGFueXdheSlcbi0tXG5mcy9uZnNkL2F0dHI0LmgtMjAtICovXG5mcy9uZnNkL2F0dHI0Lmg6MjE6I2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuZnMvbmZzZC9hdHRyNC5oLTIyLShGQVRUUjRfV09SRDBfU1VQUE9SVEVEX0FUVFJTICAgfCBGQVRUUjRfV09SRDBfVFlQRSAgICAgICAgIHwgRkFUVFI0X1dPUkQwX0ZIX0VYUElSRV9UWVBFICAgXFxcbi0tXG5mcy9uZnNkL2F0dHI0LmgtMzItXG5mcy9uZnNkL2F0dHI0Lmg6MzM6I2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuZnMvbmZzZC9hdHRyNC5oLTM0LShGQVRUUjRfV09SRDFfTU9ERSAgICAgICAgICAgICAgfCBGQVRUUjRfV09SRDFfTk9fVFJVTkMgICAgIHwgRkFUVFI0X1dPUkQxX05VTUxJTktTICAgICAgICAgXFxcbi0tXG5mcy9uZnNkL2F0dHI0LmgtNDAtXG5mcy9uZnNkL2F0dHI0Lmg6NDE6I2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDIgMFxuZnMvbmZzZC9hdHRyNC5oLTQyLVxuZnMvbmZzZC9hdHRyNC5oLTQzLS8qIDQuMSAqL1xuZnMvbmZzZC9hdHRyNC5oOjQ0OiNpZmRlZiBDT05GSUdfTkZTRF9QTkZTXG5mcy9uZnNkL2F0dHI0Lmg6NDU6I2RlZmluZSBQTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDFcdEZBVFRSNF9XT1JEMV9GU19MQVlPVVRfVFlQRVNcbmZzL25mc2QvYXR0cjQuaDo0NjojZGVmaW5lIFBORlNEX1NVUFBPUlRFRF9BVFRSU19XT1JEMiBcXFxuZnMvbmZzZC9hdHRyNC5oLTQ3LShGQVRUUjRfV09SRDJfTEFZT1VUX0JMS1NJWkVcdHwgRkFUVFI0X1dPUkQyX0xBWU9VVF9UWVBFUylcbmZzL25mc2QvYXR0cjQuaC00OC0jZWxzZVxuZnMvbmZzZC9hdHRyNC5oOjQ5OiNkZWZpbmUgUE5GU0RfU1VQUE9SVEVEX0FUVFJTX1dPUkQxXHQwXG5mcy9uZnNkL2F0dHI0Lmg6NTA6I2RlZmluZSBQTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDJcdDBcbmZzL25mc2QvYXR0cjQuaDo1MTojZW5kaWYgLyogQ09ORklHX05GU0RfUE5GUyAqL1xuZnMvbmZzZC9hdHRyNC5oLTUyLVxuZnMvbmZzZC9hdHRyNC5oOjUzOiNkZWZpbmUgTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDAgXFxcbmZzL25mc2QvYXR0cjQuaDo1NDpcdE5GU0Q0X1NVUFBPUlRFRF9BVFRSU19XT1JEMFxuZnMvbmZzZC9hdHRyNC5oLTU1LVxuZnMvbmZzZC9hdHRyNC5oOjU2OiNkZWZpbmUgTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDEgXFxcbmZzL25mc2QvYXR0cjQuaDo1NzpcdChORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDFcdHwgUE5GU0RfU1VQUE9SVEVEX0FUVFJTX1dPUkQxKVxuZnMvbmZzZC9hdHRyNC5oLTU4LVxuZnMvbmZzZC9hdHRyNC5oOjU5OiNkZWZpbmUgTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDIgXFxcbmZzL25mc2QvYXR0cjQuaDo2MDpcdChORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDJcdHwgUE5GU0RfU1VQUE9SVEVEX0FUVFJTX1dPUkQyIHwgXFxcbmZzL25mc2QvYXR0cjQuaC02MS1cdCBGQVRUUjRfV09SRDJfU1VQUEFUVFJfRVhDTENSRUFUKVxuLS1cbmZzL25mc2QvYXR0cjQuaC02My0vKiA0LjIgKi9cbmZzL25mc2QvYXR0cjQuaDo2NDojaWZkZWYgQ09ORklHX05GU0RfVjRfU0VDVVJJVFlfTEFCRUxcbmZzL25mc2QvYXR0cjQuaDo2NTojZGVmaW5lIE5GU0Q0XzJfU0VDVVJJVFlfQVRUUlNcdFx0RkFUVFI0X1dPUkQyX1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL2F0dHI0LmgtNjYtI2Vsc2VcbmZzL25mc2QvYXR0cjQuaDo2NzojZGVmaW5lIE5GU0Q0XzJfU0VDVVJJVFlfQVRUUlNcdFx0MFxuZnMvbmZzZC9hdHRyNC5oLTY4LSNlbmRpZlxuZnMvbmZzZC9hdHRyNC5oLTY5LVxuZnMvbmZzZC9hdHRyNC5oOjcwOiNpZmRlZiBDT05GSUdfTkZTRF9WNF9QT1NJWF9BQ0xTXG5mcy9uZnNkL2F0dHI0Lmg6NzE6I2RlZmluZSBORlNENF8yX1BPU0lYX0FDTF9BVFRSUyBcXFxuZnMvbmZzZC9hdHRyNC5oLTcyLVx0KEZBVFRSNF9XT1JEMl9BQ0xfVFJVRUZPUk0gfCBcXFxuLS1cbmZzL25mc2QvYXR0cjQuaC03Ni0jZWxzZVxuZnMvbmZzZC9hdHRyNC5oOjc3OiNkZWZpbmUgTkZTRDRfMl9QT1NJWF9BQ0xfQVRUUlNcdFx0MFxuZnMvbmZzZC9hdHRyNC5oLTc4LSNlbmRpZlxuZnMvbmZzZC9hdHRyNC5oLTc5LVxuZnMvbmZzZC9hdHRyNC5oOjgwOiNkZWZpbmUgTkZTRDRfMl9TVVBQT1JURURfQVRUUlNfV09SRDIgXFxcbmZzL25mc2QvYXR0cjQuaDo4MTpcdChORlNENF8xX1NVUFBPUlRFRF9BVFRSU19XT1JEMiB8IFxcXG5mcy9uZnNkL2F0dHI0LmgtODItXHRGQVRUUjRfV09SRDJfTU9ERV9VTUFTSyB8IFxcXG5mcy9uZnNkL2F0dHI0LmgtODMtXHRGQVRUUjRfV09SRDJfQ0xPTkVfQkxLU0laRSB8IFxcXG5mcy9uZnNkL2F0dHI0Lmg6ODQ6XHRORlNENF8yX1NFQ1VSSVRZX0FUVFJTIHwgXFxcbmZzL25mc2QvYXR0cjQuaC04NS1cdEZBVFRSNF9XT1JEMl9YQVRUUl9TVVBQT1JUIHwgXFxcbi0tXG5mcy9uZnNkL2F0dHI0LmgtODgtXHRGQVRUUjRfV09SRDJfT1BFTl9BUkdVTUVOVFMgfCBcXFxuZnMvbmZzZC9hdHRyNC5oOjg5Olx0TkZTRDRfMl9QT1NJWF9BQ0xfQVRUUlMpXG5mcy9uZnNkL2F0dHI0LmgtOTAtXG5mcy9uZnNkL2F0dHI0LmgtOTEtLyogVGhlc2Ugd2lsbCByZXR1cm4gRVJSX0lOVkFMIGlmIHNwZWNpZmllZCBpbiBHRVRBVFRSIG9yIFJFQURESVIuICovXG5mcy9uZnNkL2F0dHI0Lmg6OTI6I2RlZmluZSBORlNEX1dSSVRFT05MWV9BVFRSU19XT1JEMSBcXFxuZnMvbmZzZC9hdHRyNC5oLTkzLVx0KEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgICB8IEZBVFRSNF9XT1JEMV9USU1FX01PRElGWV9TRVQpXG4tLVxuZnMvbmZzZC9hdHRyNC5oLTk5LSAqL1xuZnMvbmZzZC9hdHRyNC5oOjEwMDojZGVmaW5lIE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQwIFxcXG5mcy9uZnNkL2F0dHI0LmgtMTAxLVx0KEZBVFRSNF9XT1JEMF9TSVpFIHwgRkFUVFI0X1dPUkQwX0FDTClcbmZzL25mc2QvYXR0cjQuaDoxMDI6I2RlZmluZSBORlNEX1dSSVRFQUJMRV9BVFRSU19XT1JEMSBcXFxuZnMvbmZzZC9hdHRyNC5oLTEwMy1cdChGQVRUUjRfV09SRDFfTU9ERSB8IEZBVFRSNF9XT1JEMV9PV05FUiB8IEZBVFRSNF9XT1JEMV9PV05FUl9HUk9VUCBcXFxuLS1cbmZzL25mc2QvYXR0cjQuaC0xMDUtXHR8IEZBVFRSNF9XT1JEMV9USU1FX01PRElGWV9TRVQpXG5mcy9uZnNkL2F0dHI0Lmg6MTA2OiNpZmRlZiBDT05GSUdfTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxuZnMvbmZzZC9hdHRyNC5oLTEwNy0jZGVmaW5lIE1BWUJFX0ZBVFRSNF9XT1JEMl9TRUNVUklUWV9MQUJFTCBcXFxuLS1cbmZzL25mc2QvYXR0cjQuaC0xMTEtI2VuZGlmXG5mcy9uZnNkL2F0dHI0Lmg6MTEyOiNpZmRlZiBDT05GSUdfTkZTRF9WNF9QT1NJWF9BQ0xTXG5mcy9uZnNkL2F0dHI0LmgtMTEzLSNkZWZpbmUgTUFZQkVfRkFUVFI0X1dPUkQyX1BPU0lYX0FDTF9BVFRSUyBcXFxuLS1cbmZzL25mc2QvYXR0cjQuaC0xMTctI2VuZGlmXG5mcy9uZnNkL2F0dHI0Lmg6MTE4OiNkZWZpbmUgTkZTRF9XUklURUFCTEVfQVRUUlNfV09SRDIgXFxcbmZzL25mc2QvYXR0cjQuaC0xMTktXHQoRkFUVFI0X1dPUkQyX01PREVfVU1BU0sgXFxcbi0tXG5mcy9uZnNkL2F0dHI0LmgtMTI1LVxuZnMvbmZzZC9hdHRyNC5oOjEyNjojZGVmaW5lIE5GU0RfU1VQUEFUVFJfRVhDTENSRUFUX1dPUkQwIFxcXG5mcy9uZnNkL2F0dHI0Lmg6MTI3Olx0TkZTRF9XUklURUFCTEVfQVRUUlNfV09SRDBcbmZzL25mc2QvYXR0cjQuaC0xMjgtLypcbi0tXG5mcy9uZnNkL2F0dHI0LmgtMTMxLSAqL1xuZnMvbmZzZC9hdHRyNC5oOjEzMjojZGVmaW5lIE5GU0RfU1VQUEFUVFJfRVhDTENSRUFUX1dPUkQxIFxcXG5mcy9uZnNkL2F0dHI0Lmg6MTMzOlx0KE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQxIFx1MDAyNiBcXFxuZnMvbmZzZC9hdHRyNC5oLTEzNC1cdCB+KEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRllfU0VUKSlcbi0tXG5mcy9uZnNkL2F0dHI0LmgtMTQzLSAqL1xuZnMvbmZzZC9hdHRyNC5oOjE0NDojZGVmaW5lIE5GU0RfU1VQUEFUVFJfRVhDTENSRUFUX1dPUkQyIFxcXG5mcy9uZnNkL2F0dHI0Lmg6MTQ1Olx0KE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQyIFx1MDAyNiBcXFxuZnMvbmZzZC9hdHRyNC5oLTE0Ni1cdH4oRkFUVFI0X1dPUkQyX1RJTUVfREVMRUdfQUNDRVNTIHwgRkFUVFI0X1dPUkQyX1RJTUVfREVMRUdfTU9ESUZZKSlcbi0tXG5mcy9uZnNkL2F0dHI0Lmg9MTU3PXN0YXRpYyBpbmxpbmUgYm9vbCBuZnNkX2F0dHJzX3N1cHBvcnRlZCh1MzIgbWlub3J2ZXJzaW9uLCBjb25zdCB1MzIgKmJtdmFsKVxuLS1cbmZzL25mc2QvYXR0cjQuaC0xNjEtXG5mcy9uZnNkL2F0dHI0Lmg6MTYyOiNlbmRpZiAvKiBfTElOVVhfTkZTRF9BVFRSNF9IICovXG4tLVxuZnMvbmZzZC9hdXRoLmgtNy1cbmZzL25mc2QvYXV0aC5oOjg6I2lmbmRlZiBMSU5VWF9ORlNEX0FVVEhfSFxuZnMvbmZzZC9hdXRoLmg6OTojZGVmaW5lIExJTlVYX05GU0RfQVVUSF9IXG5mcy9uZnNkL2F1dGguaC0xMC1cbi0tXG5mcy9uZnNkL2F1dGguaD0yMT1zdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5mc2RfdXNlcl9uYW1lc3BhY2UoY29uc3Qgc3RydWN0IHN2Y19ycXN0ICpycXN0cCk7XG5mcy9uZnNkL2F1dGguaC0yMi1cbmZzL25mc2QvYXV0aC5oOjIzOiNlbmRpZiAvKiBMSU5VWF9ORlNEX0FVVEhfSCAqL1xuLS1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0xNy1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYzoxODojZGVmaW5lIE5GU0REQkdfRkFDSUxJVFlcdE5GU0REQkdfUE5GU1xuZnMvbmZzZC9ibG9ja2xheW91dC5jLTE5LVxuLS1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYz0xNzk9bmZzZDRfYmxvY2tfY29tbWl0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzZDRfbGF5b3V0Y29tbWl0ICpsY3AsXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTE5OS1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYzoyMDA6I2lmZGVmIENPTkZJR19ORlNEX0JMT0NLTEFZT1VUXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMjAxLXN0YXRpYyBpbnRcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9MjUyPWNvbnN0IHN0cnVjdCBuZnNkNF9sYXlvdXRfb3BzIGJsX2xheW91dF9vcHMgPSB7XG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTI2OS19O1xuZnMvbmZzZC9ibG9ja2xheW91dC5jOjI3MDojZW5kaWYgLyogQ09ORklHX05GU0RfQkxPQ0tMQVlPVVQgKi9cbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yNzEtXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MjcyOiNpZmRlZiBDT05GSUdfTkZTRF9TQ1NJTEFZT1VUXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMjczLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjI3NDojZGVmaW5lIE5GU0RfTURTX1BSX0ZFTkNFRFx0WEFfTUFSS18wXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMjc1LVxuLS1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYz0yODQ9c3RhdGljIGlubGluZSBpbnQgbmZzZDRfc2NzaV9mZW5jZV9pbnNlcnQoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTI5Mi1cdGlmIChyZXQgPT0gLUVCVVNZKSB7XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MjkzOlx0XHRfX3hhX2NsZWFyX21hcmsoeGEsIGRldmljZSwgTkZTRF9NRFNfUFJfRkVOQ0VEKTtcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yOTQtXHRcdHJldCA9IDA7XG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTMwMT1zdGF0aWMgaW5saW5lIGJvb2wgbmZzZDRfc2NzaV9mZW5jZV9zZXQoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIGRldl90IGRldmljZSlcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzA2LVx0eGFfbG9jayh4YSk7XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MzA3Olx0c2tpcCA9IHhhX2dldF9tYXJrKHhhLCBkZXZpY2UsIE5GU0RfTURTX1BSX0ZFTkNFRCk7XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzA4LVx0aWYgKCFza2lwKVxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjMwOTpcdFx0X194YV9zZXRfbWFyayh4YSwgZGV2aWNlLCBORlNEX01EU19QUl9GRU5DRUQpO1xuZnMvbmZzZC9ibG9ja2xheW91dC5jLTMxMC1cdHhhX3VubG9jayh4YSk7XG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgbmZzZDRfc2NzaV9mZW5jZV9jbGVhcihzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgZGV2X3QgZGV2aWNlKVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTMxNS17XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MzE2Olx0eGFfY2xlYXJfbWFyayhcdTAwMjZjbHAtXHUwMDNlY2xfZGV2X2ZlbmNlcywgZGV2aWNlLCBORlNEX01EU19QUl9GRU5DRUQpO1xuZnMvbmZzZC9ibG9ja2xheW91dC5jLTMxNy19XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzE4LVxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjMxOTojZGVmaW5lIE5GU0RfTURTX1BSX0tFWVx0XHQweDAxMDAwMDAwMDAwMDAwMDBVTExcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0zMjAtXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTM1Nj1uZnNkNF9ibG9ja19nZXRfZGV2aWNlX2luZm9fc2NzaShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0zOTEtXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MzkyOlx0cmV0ID0gb3BzLVx1MDAzZXByX3JlZ2lzdGVyKHNiLVx1MDAzZXNfYmRldiwgMCwgTkZTRF9NRFNfUFJfS0VZLCB0cnVlKTtcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0zOTMtXHRpZiAocmV0KSB7XG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTM5OC1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYzozOTk6XHRyZXQgPSBvcHMtXHUwMDNlcHJfcmVzZXJ2ZShzYi1cdTAwM2VzX2JkZXYsIE5GU0RfTURTX1BSX0tFWSxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00MDAtXHRcdFx0UFJfRVhDTFVTSVZFX0FDQ0VTU19SRUdfT05MWSwgMCk7XG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTQyNj1uZnNkNF9zY3NpX3Byb2NfbGF5b3V0Y29tbWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTQ0Ni0gKiBibG9jayBkZXZpY2UuIElmIGEgZmVuY2Ugb3BlcmF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6NDQ3OiAqIGl0IHRvIGNvbXBsZXRlIGJlZm9yZSBjaGVja2luZyB0aGUgTkZTRF9NRFNfUFJfRkVOQ0VEIGZsYWcuIE9uY2UgdGhlXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6NDQ4OiAqIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSwgY2hlY2sgdGhlIGZsYWcuIElmIE5GU0RfTURTX1BSX0ZFTkNFRCBpcyBzZXQsXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtNDQ5LSAqIHVwZGF0ZSB0aGUgbGF5b3V0IHN0YXRlaWQgYnkgc2V0dGluZyB0aGUgbHNfZmVuY2VkIGZsYWcgdG8gaW5kaWNhdGVcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9NDU5PW5mc2Q0X3Njc2lfZmVuY2VfY2xpZW50KHN0cnVjdCBuZnM0X2xheW91dF9zdGF0ZWlkICpscywgc3RydWN0IG5mc2RfZmlsZSAqZmlsZSlcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtNDcxLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjQ3MjpcdHN0YXR1cyA9IGJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2Vmb3BzLVx1MDAzZXByX29wcy1cdTAwM2Vwcl9wcmVlbXB0KGJkZXYsIE5GU0RfTURTX1BSX0tFWSxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00NzMtXHRcdFx0bmZzZDRfc2NzaV9wcl9rZXkoY2xwKSxcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9NTA3PWNvbnN0IHN0cnVjdCBuZnNkNF9sYXlvdXRfb3BzIHNjc2lfbGF5b3V0X29wcyA9IHtcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtNTI1LX07XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6NTI2OiNlbmRpZiAvKiBDT05GSUdfTkZTRF9TQ1NJTEFZT1VUICovXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5jLTEzLVxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5jOjE0OiNkZWZpbmUgTkZTRERCR19GQUNJTElUWVx0TkZTRERCR19QTkZTXG5mcy9uZnNkL2Jsb2NrbGF5b3V0eGRyLmMtMTUtXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuaDoyOiNpZm5kZWYgX05GU0RfQkxPQ0tMQVlPVVRYRFJfSFxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oOjM6I2RlZmluZSBfTkZTRF9CTE9DS0xBWU9VVFhEUl9IIDFcbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuaC00LVxuLS1cbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuaD03Mz1fX2JlMzIgbmZzZDRfc2NzaV9kZWNvZGVfbGF5b3V0dXBkYXRlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oLTc1LVxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oOjc2OiNlbmRpZiAvKiBfTkZTRF9CTE9DS0xBWU9VVFhEUl9IICovXG4tLVxuZnMvbmZzZC9jdXJyZW50X3N0YXRlaWQuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oOjI6I2lmbmRlZiBfTkZTRDRfQ1VSUkVOVF9TVEFURV9IXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oOjM6I2RlZmluZSBfTkZTRDRfQ1VSUkVOVF9TVEFURV9IXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oLTQtXG4tLVxuZnMvbmZzZC9jdXJyZW50X3N0YXRlaWQuaD0zOD1leHRlcm4gdm9pZCBuZnNkNF9nZXRfd3JpdGVzdGF0ZWlkKHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLFxuLS1cbmZzL25mc2QvY3VycmVudF9zdGF0ZWlkLmgtNDAtXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oOjQxOiNlbmRpZiAgIC8qIF9ORlNENF9DVVJSRU5UX1NUQVRFX0ggKi9cbi0tXG5mcy9uZnNkL2RlYnVnZnMuYz03PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuZnNkX3RvcF9kaXIgX19yZWFkX21vc3RseTtcbi0tXG5mcy9uZnNkL2RlYnVnZnMuYy0xNy0gKiBhbGxvd2VkKS4gVGhpcyBzZXR0aW5nIHRha2VzIGltbWVkaWF0ZSBlZmZlY3QgZm9yIGFsbCBORlNcbmZzL25mc2QvZGVidWdmcy5jOjE4OiAqIHZlcnNpb25zLCBhbGwgZXhwb3J0cywgYW5kIGluIGFsbCBORlNEIG5ldCBuYW1lc3BhY2VzLlxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTktICovXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmM9Mjc9c3RhdGljIGludCBuZnNkX2Rzcl9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbi0tXG5mcy9uZnNkL2RlYnVnZnMuYy0zMy1cdFx0ICovXG5mcy9uZnNkL2RlYnVnZnMuYzozNDpcdFx0bmZzZF9pb19jYWNoZV9yZWFkID0gTkZTRF9JT19CVUZGRVJFRDtcbmZzL25mc2QvZGVidWdmcy5jLTM1LVx0fVxuLS1cbmZzL25mc2QvZGVidWdmcy5jPTM5PURFRklORV9ERUJVR0ZTX0FUVFJJQlVURShuZnNkX2Rzcl9mb3BzLCBuZnNkX2Rzcl9nZXQsIG5mc2RfZHNyX3NldCwgXCYjMzQ7JWxsdVxcblwmIzM0Oyk7XG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNDktICogVGhpcyBzZXR0aW5nIHRha2VzIGltbWVkaWF0ZSBlZmZlY3QgZm9yIGFsbCBORlMgdmVyc2lvbnMsXG5mcy9uZnNkL2RlYnVnZnMuYzo1MDogKiBhbGwgZXhwb3J0cywgYW5kIGluIGFsbCBORlNEIG5ldCBuYW1lc3BhY2VzLlxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNTEtICovXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmM9NTk9c3RhdGljIGludCBuZnNkX2lvX2NhY2hlX3JlYWRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNjMtXHRzd2l0Y2ggKHZhbCkge1xuZnMvbmZzZC9kZWJ1Z2ZzLmM6NjQ6XHRjYXNlIE5GU0RfSU9fQlVGRkVSRUQ6XG5mcy9uZnNkL2RlYnVnZnMuYzo2NTpcdFx0bmZzZF9pb19jYWNoZV9yZWFkID0gTkZTRF9JT19CVUZGRVJFRDtcbmZzL25mc2QvZGVidWdmcy5jLTY2LVx0XHRicmVhaztcbmZzL25mc2QvZGVidWdmcy5jOjY3Olx0Y2FzZSBORlNEX0lPX0RPTlRDQUNIRTpcbmZzL25mc2QvZGVidWdmcy5jOjY4Olx0Y2FzZSBORlNEX0lPX0RJUkVDVDpcbmZzL25mc2QvZGVidWdmcy5jLTY5LVx0XHQvKlxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNzAtXHRcdCAqIE11c3QgZGlzYWJsZSBzcGxpY2VfcmVhZCB3aGVuIGVuYWJsaW5nXG5mcy9uZnNkL2RlYnVnZnMuYzo3MTpcdFx0ICogTkZTRF9JT19ET05UQ0FDSEUuXG5mcy9uZnNkL2RlYnVnZnMuYy03Mi1cdFx0ICovXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmM9ODQ9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKG5mc2RfaW9fY2FjaGVfcmVhZF9mb3BzLCBuZnNkX2lvX2NhY2hlX3JlYWRfZ2V0LFxuLS1cbmZzL25mc2QvZGVidWdmcy5jLTk0LSAqIFRoaXMgc2V0dGluZyB0YWtlcyBpbW1lZGlhdGUgZWZmZWN0IGZvciBhbGwgTkZTIHZlcnNpb25zLFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6OTU6ICogYWxsIGV4cG9ydHMsIGFuZCBpbiBhbGwgTkZTRCBuZXQgbmFtZXNwYWNlcy5cbmZzL25mc2QvZGVidWdmcy5jLTk2LSAqL1xuLS1cbmZzL25mc2QvZGVidWdmcy5jPTEwND1zdGF0aWMgaW50IG5mc2RfaW9fY2FjaGVfd3JpdGVfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTA4LVx0c3dpdGNoICh2YWwpIHtcbmZzL25mc2QvZGVidWdmcy5jOjEwOTpcdGNhc2UgTkZTRF9JT19CVUZGRVJFRDpcbmZzL25mc2QvZGVidWdmcy5jOjExMDpcdGNhc2UgTkZTRF9JT19ET05UQ0FDSEU6XG5mcy9uZnNkL2RlYnVnZnMuYzoxMTE6XHRjYXNlIE5GU0RfSU9fRElSRUNUOlxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTEyLVx0XHRuZnNkX2lvX2NhY2hlX3dyaXRlID0gdmFsO1xuLS1cbmZzL25mc2QvZGVidWdmcy5jPTEzMT12b2lkIG5mc2RfZGVidWdmc19pbml0KHZvaWQpXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTQyLVx0XHRcdCAgICBcdTAwMjZuZnNkX2lvX2NhY2hlX3dyaXRlX2ZvcHMpO1xuZnMvbmZzZC9kZWJ1Z2ZzLmM6MTQzOiNpZmRlZiBDT05GSUdfTkZTRF9WNFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTQ0LVx0ZGVidWdmc19jcmVhdGVfYm9vbChcJiMzNDtkZWxlZ2F0ZWRfdGltZXN0YW1wc1wmIzM0OywgMDY0NCwgbmZzZF90b3BfZGlyLFxuLS1cbmZzL25mc2QvZXhwb3J0LmMtMzAtXG5mcy9uZnNkL2V4cG9ydC5jOjMxOiNkZWZpbmUgTkZTRERCR19GQUNJTElUWVx0TkZTRERCR19FWFBPUlRcbmZzL25mc2QvZXhwb3J0LmMtMzItXG4tLVxuZnMvbmZzZC9leHBvcnQuYz0yNTg9c3RhdGljIGludCBleHBrZXlfbm90aWZ5KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaClcbmZzL25mc2QvZXhwb3J0LmMtMjU5LXtcbmZzL25mc2QvZXhwb3J0LmM6MjYwOlx0cmV0dXJuIG5mc2RfY2FjaGVfbm90aWZ5KGNkLCBoLCBORlNEX0NBQ0hFX1RZUEVfRVhQS0VZKTtcbmZzL25mc2QvZXhwb3J0LmMtMjYxLX1cbi0tXG5mcy9uZnNkL2V4cG9ydC5jPTMzND1pbnQgbmZzZF9ubF9leHBrZXlfZ2V0X3JlcXNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZnMvbmZzZC9leHBvcnQuYy0zNzYtXHRcdFx0ICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBcdTAwMjZuZnNkX25sX2ZhbWlseSxcbmZzL25mc2QvZXhwb3J0LmM6Mzc3Olx0XHRcdCAgTkxNX0ZfTVVMVEksIE5GU0RfQ01EX0VYUEtFWV9HRVRfUkVRUyk7XG5mcy9uZnNkL2V4cG9ydC5jLTM3OC1cdGlmICghaGRyKSB7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy0zODktXG5mcy9uZnNkL2V4cG9ydC5jOjM5MDpcdFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgTkZTRF9BX0VYUEtFWV9SRVFTX1JFUVVFU1RTKTtcbmZzL25mc2QvZXhwb3J0LmMtMzkxLVx0XHRpZiAoIW5lc3QpXG4tLVxuZnMvbmZzZC9leHBvcnQuYy0zOTMtXG5mcy9uZnNkL2V4cG9ydC5jOjM5NDpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkZTRF9BX0VYUEtFWV9TRVFOTyxcbmZzL25mc2QvZXhwb3J0LmMtMzk1LVx0XHRcdFx0ICAgICAgc2Vxbm9zW2ldLCAwKSB8fFxuZnMvbmZzZC9leHBvcnQuYzozOTY6XHRcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIE5GU0RfQV9FWFBLRVlfQ0xJRU5ULFxuZnMvbmZzZC9leHBvcnQuYy0zOTctXHRcdFx0XHQgICBlay1cdTAwM2Vla19jbGllbnQtXHUwMDNlbmFtZSkgfHxcbmZzL25mc2QvZXhwb3J0LmM6Mzk4Olx0XHQgICAgbmxhX3B1dF91OChza2IsIE5GU0RfQV9FWFBLRVlfRlNJRFRZUEUsXG5mcy9uZnNkL2V4cG9ydC5jLTM5OS1cdFx0XHQgICAgICAgZWstXHUwMDNlZWtfZnNpZHR5cGUpIHx8XG5mcy9uZnNkL2V4cG9ydC5jOjQwMDpcdFx0ICAgIG5sYV9wdXQoc2tiLCBORlNEX0FfRVhQS0VZX0ZTSUQsXG5mcy9uZnNkL2V4cG9ydC5jLTQwMS1cdFx0XHQgICAga2V5X2xlbihlay1cdTAwM2Vla19mc2lkdHlwZSksIGVrLVx1MDAzZWVrX2ZzaWQpKSB7XG4tLVxuZnMvbmZzZC9leHBvcnQuYz00NDA9c3RhdGljIGludCBuZnNkX25sX3BhcnNlX29uZV9leHBrZXkoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsXG4tLVxuZnMvbmZzZC9leHBvcnQuYy00NDIte1xuZnMvbmZzZC9leHBvcnQuYzo0NDM6XHRzdHJ1Y3QgbmxhdHRyICp0YltORlNEX0FfRVhQS0VZX1BBVEggJiM0MzsgMV07XG5mcy9uZnNkL2V4cG9ydC5jLTQ0NC1cdHN0cnVjdCBhdXRoX2RvbWFpbiAqZG9tID0gTlVMTDtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTQ1MS1cbmZzL25mc2QvZXhwb3J0LmM6NDUyOlx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkZTRF9BX0VYUEtFWV9QQVRILCBhdHRyLFxuZnMvbmZzZC9leHBvcnQuYy00NTMtXHRcdFx0ICAgICAgIG5mc2RfZXhwa2V5X25sX3BvbGljeSwgTlVMTCk7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy00NTctXHQvKiBjbGllbnQgKHJlcXVpcmVkKSAqL1xuZnMvbmZzZC9leHBvcnQuYzo0NTg6XHRpZiAoIXRiW05GU0RfQV9FWFBLRVlfQ0xJRU5UXSlcbmZzL25mc2QvZXhwb3J0LmMtNDU5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbmZzL25mc2QvZXhwb3J0LmMtNDYwLVxuZnMvbmZzZC9leHBvcnQuYzo0NjE6XHRkb20gPSBhdXRoX2RvbWFpbl9maW5kKG5sYV9kYXRhKHRiW05GU0RfQV9FWFBLRVlfQ0xJRU5UXSkpO1xuZnMvbmZzZC9leHBvcnQuYy00NjItXHRpZiAoIWRvbSlcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTQ2NS1cdC8qIGZzaWR0eXBlIChyZXF1aXJlZCkgKi9cbmZzL25mc2QvZXhwb3J0LmM6NDY2Olx0aWYgKCF0YltORlNEX0FfRVhQS0VZX0ZTSURUWVBFXSkge1xuZnMvbmZzZC9leHBvcnQuYy00NjctXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy00NjktXHR9XG5mcy9uZnNkL2V4cG9ydC5jOjQ3MDpcdGZzaWR0eXBlID0gbmxhX2dldF91OCh0YltORlNEX0FfRVhQS0VZX0ZTSURUWVBFXSk7XG5mcy9uZnNkL2V4cG9ydC5jLTQ3MS1cdGlmIChrZXlfbGVuKGZzaWR0eXBlKSA9PSAwKSB7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy00NzYtXHQvKiBmc2lkIChyZXF1aXJlZCkgKi9cbmZzL25mc2QvZXhwb3J0LmM6NDc3Olx0aWYgKCF0YltORlNEX0FfRVhQS0VZX0ZTSURdKSB7XG5mcy9uZnNkL2V4cG9ydC5jLTQ3OC1cdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTQ4MC1cdH1cbmZzL25mc2QvZXhwb3J0LmM6NDgxOlx0ZnNpZF9sZW4gPSBubGFfbGVuKHRiW05GU0RfQV9FWFBLRVlfRlNJRF0pO1xuZnMvbmZzZC9leHBvcnQuYy00ODItXHRpZiAoZnNpZF9sZW4gIT0ga2V5X2xlbihmc2lkdHlwZSkpIHtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTQ4Ny1cdC8qIGV4cGlyeSAocmVxdWlyZWQsIHdhbGxjbG9jayBzZWNvbmRzKSAqL1xuZnMvbmZzZC9leHBvcnQuYzo0ODg6XHRpZiAoIXRiW05GU0RfQV9FWFBLRVlfRVhQSVJZXSkge1xuZnMvbmZzZC9leHBvcnQuYy00ODktXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy00OTQtXHRnZXRib290dGltZTY0KFx1MDAyNmJvb3QpO1xuZnMvbmZzZC9leHBvcnQuYzo0OTU6XHRrZXkuaC5leHBpcnlfdGltZSA9IG5sYV9nZXRfdTY0KHRiW05GU0RfQV9FWFBLRVlfRVhQSVJZXSkgLVxuZnMvbmZzZC9leHBvcnQuYy00OTYtXHRcdFx0ICAgIGJvb3QudHZfc2VjO1xuLS1cbmZzL25mc2QvZXhwb3J0LmMtNDk4LVx0a2V5LmVrX2ZzaWR0eXBlID0gZnNpZHR5cGU7XG5mcy9uZnNkL2V4cG9ydC5jOjQ5OTpcdG1lbWNweShrZXkuZWtfZnNpZCwgbmxhX2RhdGEodGJbTkZTRF9BX0VYUEtFWV9GU0lEXSksIGZzaWRfbGVuKTtcbmZzL25mc2QvZXhwb3J0LmMtNTAwLVxuLS1cbmZzL25mc2QvZXhwb3J0LmMtNTA2LVxuZnMvbmZzZC9leHBvcnQuYzo1MDc6XHRpZiAodGJbTkZTRF9BX0VYUEtFWV9ORUdBVElWRV0pIHtcbmZzL25mc2QvZXhwb3J0LmMtNTA4LVx0XHRzZXRfYml0KENBQ0hFX05FR0FUSVZFLCBcdTAwMjZrZXkuaC5mbGFncyk7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy01MTMtXHRcdFx0ZXJyID0gLUVOT01FTTtcbmZzL25mc2QvZXhwb3J0LmM6NTE0Olx0fSBlbHNlIGlmICh0YltORlNEX0FfRVhQS0VZX1BBVEhdKSB7XG5mcy9uZnNkL2V4cG9ydC5jOjUxNTpcdFx0ZXJyID0ga2Vybl9wYXRoKG5sYV9kYXRhKHRiW05GU0RfQV9FWFBLRVlfUEFUSF0pLCAwLFxuZnMvbmZzZC9leHBvcnQuYy01MTYtXHRcdFx0XHRcdTAwMjZrZXkuZWtfcGF0aCk7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy01MjEtXHRcdFx0dHJhY2VfbmZzZF9leHBrZXlfdXBkYXRlKGVrLFxuZnMvbmZzZC9leHBvcnQuYzo1MjI6XHRcdFx0XHRcdG5sYV9kYXRhKHRiW05GU0RfQV9FWFBLRVlfUEFUSF0pKTtcbmZzL25mc2QvZXhwb3J0LmMtNTIzLVx0XHRlbHNlXG4tLVxuZnMvbmZzZC9leHBvcnQuYz01NTE9aW50IG5mc2RfbmxfZXhwa2V5X3NldF9yZXFzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTU2OC1cbmZzL25mc2QvZXhwb3J0LmM6NTY5Olx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGF0dHIsIE5GU0RfQV9FWFBLRVlfUkVRU19SRVFVRVNUUyxcbmZzL25mc2QvZXhwb3J0LmMtNTcwLVx0XHRcdFx0IGluZm8tXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pIHtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jPTY2MD1pbnQgbmZzZF9ubF9zdmNfZXhwb3J0X2dldF9yZXFzX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmZzL25mc2QvZXhwb3J0LmMtNzA0LVx0XHRcdCAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgXHUwMDI2bmZzZF9ubF9mYW1pbHksXG5mcy9uZnNkL2V4cG9ydC5jOjcwNTpcdFx0XHQgIE5MTV9GX01VTFRJLCBORlNEX0NNRF9TVkNfRVhQT1JUX0dFVF9SRVFTKTtcbmZzL25mc2QvZXhwb3J0LmMtNzA2LVx0aWYgKCFoZHIpIHtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTcyMy1cdFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYixcbmZzL25mc2QvZXhwb3J0LmM6NzI0Olx0XHRcdFx0ICAgICAgTkZTRF9BX1NWQ19FWFBPUlRfUkVRU19SRVFVRVNUUyk7XG5mcy9uZnNkL2V4cG9ydC5jLTcyNS1cdFx0aWYgKCFuZXN0KVxuLS1cbmZzL25mc2QvZXhwb3J0LmMtNzI3LVxuZnMvbmZzZC9leHBvcnQuYzo3Mjg6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE5GU0RfQV9TVkNfRVhQT1JUX1NFUU5PLFxuZnMvbmZzZC9leHBvcnQuYy03MjktXHRcdFx0XHQgICAgICBzZXFub3NbaV0sIDApIHx8XG5mcy9uZnNkL2V4cG9ydC5jOjczMDpcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgTkZTRF9BX1NWQ19FWFBPUlRfQ0xJRU5ULFxuZnMvbmZzZC9leHBvcnQuYy03MzEtXHRcdFx0XHQgICBleHAtXHUwMDNlZXhfY2xpZW50LVx1MDAzZW5hbWUpIHx8XG5mcy9uZnNkL2V4cG9ydC5jOjczMjpcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgTkZTRF9BX1NWQ19FWFBPUlRfUEFUSCwgcHRoKSkge1xuZnMvbmZzZC9leHBvcnQuYy03MzMtXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy03NjMtICogbmZzZF9ubF9wYXJzZV9mc2xvY2F0aW9ucyAtIHBhcnNlIGZzbG9jYXRpb25zIGZyb20gbmV0bGlua1xuZnMvbmZzZC9leHBvcnQuYzo3NjQ6ICogQGF0dHI6IE5GU0RfQV9TVkNfRVhQT1JUX0ZTTE9DQVRJT05TIG5lc3RlZCBhdHRyaWJ1dGVcbmZzL25mc2QvZXhwb3J0LmMtNzY1LSAqIEBmc2xvYzogZnNsb2NhdGlvbnMgc3RydWN0IHRvIGZpbGwgaW5cbi0tXG5mcy9uZnNkL2V4cG9ydC5jPTc2OT1zdGF0aWMgaW50IG5mc2RfbmxfcGFyc2VfZnNsb2NhdGlvbnMoc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTc3OS1cdC8qIENvdW50IGxvY2F0aW9ucyBmaXJzdCAqL1xuZnMvbmZzZC9leHBvcnQuYzo3ODA6XHRubGFfZm9yX2VhY2hfbmVzdGVkX3R5cGUobG9jX2F0dHIsIE5GU0RfQV9GU0xPQ0FUSU9OU19MT0NBVElPTixcbmZzL25mc2QvZXhwb3J0LmMtNzgxLVx0XHRcdFx0IGF0dHIsIHJlbSlcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTc5My1cbmZzL25mc2QvZXhwb3J0LmM6Nzk0Olx0bmxhX2Zvcl9lYWNoX25lc3RlZF90eXBlKGxvY19hdHRyLCBORlNEX0FfRlNMT0NBVElPTlNfTE9DQVRJT04sXG5mcy9uZnNkL2V4cG9ydC5jLTc5NS1cdFx0XHRcdCBhdHRyLCByZW0pIHtcbmZzL25mc2QvZXhwb3J0LmM6Nzk2Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltORlNEX0FfRlNMT0NBVElPTl9QQVRIICYjNDM7IDFdO1xuZnMvbmZzZC9leHBvcnQuYy03OTctXHRcdHN0cnVjdCBuZnNkNF9mc19sb2NhdGlvbiAqbG9jO1xuZnMvbmZzZC9leHBvcnQuYy03OTgtXG5mcy9uZnNkL2V4cG9ydC5jOjc5OTpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkZTRF9BX0ZTTE9DQVRJT05fUEFUSCwgbG9jX2F0dHIsXG5mcy9uZnNkL2V4cG9ydC5jLTgwMC1cdFx0XHRcdCAgICAgICBuZnNkX2ZzbG9jYXRpb25fbmxfcG9saWN5LCBOVUxMKTtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTgwMy1cbmZzL25mc2QvZXhwb3J0LmM6ODA0Olx0XHRpZiAoIXRiW05GU0RfQV9GU0xPQ0FUSU9OX0hPU1RdIHx8XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDoKCioqSW52ZXN0aWdhdGluZyBTVU5SUEMgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB0cmFjayBkb3duIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgU1VOUlBDYC4gSSBrbm93IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHVzZXMgS2NvbmZpZyBmaWxlcyB0byBtYW5hZ2UgdGhlc2UsIHNvIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEFuZCBpZiBJIHdhbnQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGhvdyBgU1VOUlBDYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLCB0aGUgbW9zdCBsb2dpY2FsIGZpcnN0IHN0b3AgaXMgcHJvYmFibHkgdGhlIGBuZXQvc3VucnBjL0tjb25maWdgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBtYWluIGRlY2xhcmF0aW9uIG9yIHBlcmhhcHMgYSB0b3AtbGV2ZWwgYWdncmVnYXRpb24gb2YgYWxsIHRoZSBgU1VOUlBDYC1yZWxhdGVkIGNvbmZpZyBzeW1ib2xzLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNVTlJQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc3VucnBjL0tjb25maWc6Mjpjb25maWcgU1VOUlBDXG5uZXQvc3VucnBjL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTUtXG5uZXQvc3VucnBjL0tjb25maWc6Njpjb25maWcgU1VOUlBDX0dTU1xubmV0L3N1bnJwYy9LY29uZmlnLTctXHR0cmlzdGF0ZVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0xMC1cbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXG5uZXQvc3VucnBjL0tjb25maWctMTItXHRib29sXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxubmV0L3N1bnJwYy9LY29uZmlnOjE1OmNvbmZpZyBTVU5SUENfU1dBUFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVx0Ym9vbFxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTM1LVxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7UlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNDktXG5uZXQvc3VucnBjL0tjb25maWc6NTA6Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxubmV0L3N1bnJwYy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclwmIzM0O1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy02My1cbm5ldC9zdW5ycGMvS2NvbmZpZzo2NDpjb25maWcgU1VOUlBDX1hQUlRfUkRNQVxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVx0dHJpc3RhdGUgXCYjMzQ7UlBDLW92ZXItUkRNQSB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyODcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIE5GU2QgYW5kIFNVTlJQQyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gYENPTkZJR19ORlNEYCBhbmQgYENPTkZJR19TVU5SUENgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgbGlrZSBlbmFibGluZyB0aGUgTkZTIGRhZW1vbiAoYENPTkZJR19ORlNEYCkgbWlnaHQgYXV0b21hdGljYWxseSBwdWxsIGluIFNVTlJQQywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoZSBxdWVzdGlvbiBpcywgaXMgYENPTkZJR19TVU5SUENgIGEgZGVwZW5kZW5jeSBvZiBgQ09ORklHX05GU0RgLCBvciBpcyBpdCBlbmFibGVkIHNvbWUgb3RoZXIgd2F5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gYmUgc3VyZS4gVGltZSB0byBkaWcgaW50byBgZnMvbmZzZC9LY29uZmlnYCBhbmQgYG5ldC9zdW5ycGMvS2NvbmZpZ2AgdG8gc2VlIGhvdyB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIHN0cnVjdHVyZWQgYW5kIGhvdyBgQ09ORklHX1NVTlJQQ2AgaXMgYWN0dWFsbHkgZW5hYmxlZC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgY2xhcmlmeSB0aGUgY29udHJvbCBmbG93IGFuZCBkZXBlbmRlbmNpZXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QuKlNVTlJQQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTM4MD1jb25maWcgTkZTX0NPTU1PTl9MT0NBTElPX1NVUFBPUlRcbi0tXG5mcy9LY29uZmlnLTM4NC1cdGRlZmF1bHQgbSBpZiBORlNEPW0gXHUwMDI2XHUwMDI2IE5GU19GUz1tXG5mcy9LY29uZmlnOjM4NTpcdHNlbGVjdCBTVU5SUENcbmZzL0tjb25maWctMzg2LVxuLS1cbmZzL25mcy9LY29uZmlnPTI9Y29uZmlnIE5GU19GU1xuLS1cbmZzL25mcy9LY29uZmlnLTYtXHRzZWxlY3QgTE9DS0RcbmZzL25mcy9LY29uZmlnOjc6XHRzZWxlY3QgU1VOUlBDXG5mcy9uZnMvS2NvbmZpZy04LVx0c2VsZWN0IE5GU19DT01NT05cbi0tXG5mcy9uZnMvS2NvbmZpZz03Nz1jb25maWcgTkZTX1Y0XG4tLVxuZnMvbmZzL0tjb25maWctODAtXHRzZWxlY3QgS0VZU1xuZnMvbmZzL0tjb25maWc6ODE6XHRzZWxlY3QgU1VOUlBDX0JBQ0tDSEFOTkVMXG5mcy9uZnMvS2NvbmZpZy04Mi1cdGhlbHBcbi0tXG5mcy9uZnMvS2NvbmZpZz05Mj1jb25maWcgTkZTX1NXQVBcbi0tXG5mcy9uZnMvS2NvbmZpZy05NS1cdGRlcGVuZHMgb24gTkZTX0ZTIFx1MDAyNlx1MDAyNiBTV0FQXG5mcy9uZnMvS2NvbmZpZzo5NjpcdHNlbGVjdCBTVU5SUENfU1dBUFxuZnMvbmZzL0tjb25maWctOTctXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0Rcbi0tXG5mcy9uZnNkL0tjb25maWctMTEtXHRzZWxlY3QgTE9DS0RcbmZzL25mc2QvS2NvbmZpZzoxMjpcdHNlbGVjdCBTVU5SUENcbmZzL25mc2QvS2NvbmZpZy0xMy1cdHNlbGVjdCBFWFBPUlRGU1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTIyLVx0ZGVmYXVsdCB5XG5uZXQvc3VucnBjL0tjb25maWc6MjM6XHRzZWxlY3QgU1VOUlBDX0dTU1xubmV0L3N1bnJwYy9LY29uZmlnLTI0LVx0c2VsZWN0IENSWVBUT19LUkI1XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTc3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIE5GUyBTZXJ2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gYENPTkZJR19ORlNEYCBiZWluZyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGJyaW5ncyBpbiBgQ09ORklHX1NVTlJQQ2AuIEkga25vdyB0aGlzIG1lYW5zIHRoZSBOZXR3b3JrIEZpbGUgU3lzdGVtIERhZW1vbiBpcyByZWxpYW50IG9uIHRoZSBTdW4gUmVtb3RlIFByb2NlZHVyZSBDYWxsIHN5c3RlbS4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTkZTIHNlcnZlciBpcyBidWlsdCBhbmQgaG93IHRob3NlIFJQQyBjb21wb25lbnRzIGFyZSBsaW5rZWQuIFRvIGRvIHRoYXQsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIGBuZXQvc3VucnBjL01ha2VmaWxlYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBidWlsZCBydWxlcyBmb3IgY29yZSBvYmplY3RzLCBzcGVjaWZpY2FsbHkgdGhlIGNyZWF0aW9uIG9mIGBzdmNzb2NrLm9gLCB3aGljaCBJIGV4cGVjdCB3aWxsIGJlIGNydWNpYWwgZm9yIHRoZSBuZXR3b3JrIHNvY2tldCBtYW5hZ2VtZW50IHVzZWQgYnkgdGhlIHNlcnZlci4gVGltZSB0byBkaWcgaW50byB0aGUgbWFrZWZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2Y3NvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvTWFrZWZpbGU9MTE9c3VucnBjLXkgOj0gY2xudC5vIHhwcnQubyBzb2NrbGliLm8geHBydHNvY2subyBzY2hlZC5vIFxcXG5uZXQvc3VucnBjL01ha2VmaWxlLTEyLVx0ICAgIGF1dGgubyBhdXRoX251bGwubyBhdXRoX3Rscy5vIGF1dGhfdW5peC5vIFxcXG5uZXQvc3VucnBjL01ha2VmaWxlOjEzOlx0ICAgIHN2Yy5vIHN2Y3NvY2subyBzdmNhdXRoLm8gc3ZjYXV0aF91bml4Lm8gXFxcbm5ldC9zdW5ycGMvTWFrZWZpbGUtMTQtXHQgICAgYWRkci5vIHJwY2JfY2xudC5vIHRpbWVyLm8geGRyLm8gXFxcbi0tXG5uZXQvc3VucnBjL3N0YXRzLmMtMjMtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL2NsbnQuaFx1MDAzZVxubmV0L3N1bnJwYy9zdGF0cy5jOjI0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcdTAwM2Vcbm5ldC9zdW5ycGMvc3RhdHMuYy0yNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvbWV0cmljcy5oXHUwMDNlXG4tLVxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy9zdmMuaFx1MDAzZVxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jOjIwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcdTAwM2Vcbm5ldC9zdW5ycGMvc3VucnBjX3N5bXMuYy0yMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvYXV0aC5oXHUwMDNlXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvc3RhdHMuaFx1MDAzZVxubmV0L3N1bnJwYy9zdmMuYzoyODojaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXHUwMDNlXG5uZXQvc3VucnBjL3N2Yy5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy9jbG50LmhcdTAwM2Vcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N2Y194cHJ0LmhcdTAwM2Vcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYzoxNzojaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXHUwMDNlXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtMTgtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3hwcnQuaFx1MDAzZVxuLS1cbm5ldC9zdW5ycGMvc3ZjYXV0aC5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy94ZHIuaFx1MDAzZVxubmV0L3N1bnJwYy9zdmNhdXRoLmM6MTc6I2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N2Y3NvY2suaFx1MDAzZVxubmV0L3N1bnJwYy9zdmNhdXRoLmMtMTgtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N2Y2F1dGguaFx1MDAzZVxuLS1cbm5ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMveGRyLmhcdTAwM2Vcbm5ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXHUwMDNlXG5uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N2Y2F1dGguaFx1MDAzZVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTItLypcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjM6ICogbGludXgvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTQtICpcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy01OC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvbXNnX3Byb3QuaFx1MDAzZVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NTk6I2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N2Y3NvY2suaFx1MDAzZVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNjAtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N0YXRzLmhcdTAwM2Vcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz00MDE9c3RhdGljIHZvaWQgc3ZjX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTQxMC1cdFx0c3Zzay1cdTAwM2Vza19vZGF0YShzayk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYzo0MTE6XHRcdHRyYWNlX3N2Y3NvY2tfZGF0YV9yZWFkeShcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIDApO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDEyLVx0XHRpZiAodGVzdF9iaXQoWFBUX0hBTkRTSEFLRSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncykpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9NDIyPXN0YXRpYyB2b2lkIHN2Y193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDI4LVx0XHRybWIoKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjQyOTpcdFx0dHJhY2Vfc3Zjc29ja193cml0ZV9zcGFjZShcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIDApO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDMwLVx0XHRzdnNrLVx1MDAzZXNrX293c3BhY2Uoc2spO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTYwOD1zdGF0aWMgaW50IHN2Y191ZHBfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy02NTktXHRycXN0cC1cdTAwM2VycV9hcmcubGVuID0gbGVuO1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6NjYwOlx0dHJhY2Vfc3Zjc29ja191ZHBfcmVjdihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIGxlbik7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy02NjEtXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNzAzLVx0fVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NzA0Olx0dHJhY2Vfc3Zjc29ja191ZHBfcmVjdl9lcnIoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBlcnIpO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtNzA1LVx0Z290byBvdXRfY2xlYXJfYnVzeTtcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz03Mjg9c3RhdGljIGludCBzdmNfdWRwX3NlbmR0byhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTc3NC1vdXRfdHJhY2U6XG5uZXQvc3VucnBjL3N2Y3NvY2suYzo3NzU6XHR0cmFjZV9zdmNzb2NrX3VkcF9zZW5kKHhwcnQsIGVycik7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy03NzYtXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9OTEwPXN0YXRpYyB2b2lkIHN2Y190Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05MTctXHRcdHN2c2stXHUwMDNlc2tfb3N0YXRlKHNrKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjkxODpcdFx0dHJhY2Vfc3Zjc29ja190Y3Bfc3RhdGUoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBzdnNrLVx1MDAzZXNrX3NvY2spO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTE5LVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTkyNz1zdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfdGNwX2FjY2VwdChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTQ0LVx0XHRpZiAoZXJyICE9IC1FQUdBSU4pXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo5NDU6XHRcdFx0dHJhY2Vfc3Zjc29ja19hY2NlcHRfZXJyKHhwcnQsIHNlcnYtXHUwMDNlc3ZfbmFtZSwgZXJyKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk0Ni1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTU0LVx0aWYgKGVyciBcdTAwM2MgMCkge1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTU1Olx0XHR0cmFjZV9zdmNzb2NrX2dldHBlZXJuYW1lX2Vycih4cHJ0LCBzZXJ2LVx1MDAzZXN2X25hbWUsIGVycik7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy05NTYtXHRcdGdvdG8gZmFpbGVkO1x0XHQvKiBhYm9ydGVkIGNvbm5lY3Rpb24gb3Igd2hhdGV2ZXIgKi9cbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xMDU0PXN0YXRpYyBzc2l6ZV90IHN2Y190Y3BfcmVhZF9tYXJrZXIoc3RydWN0IHN2Y19zb2NrICpzdnNrLFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEwNzctXHRcdH1cbm5ldC9zdW5ycGMvc3Zjc29jay5jOjEwNzg6XHRcdHRyYWNlX3N2Y3NvY2tfbWFya2VyKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc3Zzay1cdTAwM2Vza19tYXJrZXIpO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTA3OS1cdFx0aWYgKHN2Y19zb2NrX3JlY2xlbihzdnNrKSAmIzQzOyBzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDNlXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTE1NT1zdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMTczLVx0aWYgKGxlbiBcdTAwM2U9IDApIHtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjExNzQ6XHRcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3YoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBsZW4pO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTE3NS1cdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4gJiM0Mzs9IGxlbjtcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMjI0LVx0ZWxzZVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTIyNTpcdFx0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdl9zaG9ydChcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMjI2LVx0XHRcdFx0c3ZjX3NvY2tfcmVjbGVuKHN2c2spLFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzEtXHRcdGdvdG8gZXJyX2RlbGV0ZTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjEyMzI6XHR0cmFjZV9zdmNzb2NrX3RjcF9yZWN2X2VhZ2FpbihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIDApO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTIzMy1cdGdvdG8gZXJyX25vY2xvc2U7XG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTIzNi1lcnJfZGVsZXRlOlxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTIzNzpcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3ZfZXJyKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgbGVuKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzgtXHRzdmNfeHBydF9kZWZlcnJlZF9jbG9zZShcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTEyOTM9c3RhdGljIGludCBzdmNfdGNwX3NlbmR0byhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEzMDgtXHRzZW50ID0gc3ZjX3RjcF9zZW5kbXNnKHN2c2ssIHJxc3RwLCBtYXJrZXIpO1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTMwOTpcdHRyYWNlX3N2Y3NvY2tfdGNwX3NlbmQoeHBydCwgc2VudCk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMzEwLVx0aWYgKHNlbnQgXHUwMDNjIDAgfHwgc2VudCAhPSAoeGRyLVx1MDAzZWxlbiAmIzQzOyBzaXplb2YobWFya2VyKSkpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTQzOT1zdGF0aWMgc3RydWN0IHN2Y19zb2NrICpzdmNfc2V0dXBfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqc2Vydixcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTAxLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTUwMjpcdHRyYWNlX3N2Y3NvY2tfbmV3KHN2c2ssIHNvY2spO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwMy1cdHJldHVybiBzdnNrO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTE2ODQ9c3RhdGljIHZvaWQgc3ZjX3NvY2tfZnJlZShzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTY4OC1cbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE2ODk6XHR0cmFjZV9zdmNzb2NrX2ZyZWUoc3Zzaywgc29jayk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNjkwLVxuLS1cbm5ldC9zdW5ycGMveHBydHNvY2suYy0zOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvc2NoZWQuaFx1MDAzZVxubmV0L3N1bnJwYy94cHJ0c29jay5jOjM5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcdTAwM2Vcbm5ldC9zdW5ycGMveHBydHNvY2suYy00MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMveHBydHNvY2suaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBzdmNfc2V0dXBfc29ja2V0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGxpbmUgb2YgY29kZTogYHN2Y19zZXR1cF9zb2NrZXRgIHNldHMgYHNrLSZndDtza191c2VyX2RhdGEgPSBzdnNrO2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBzdGFydHMgd29ya2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIGBzay0mZ3Q7c2tfdXNlcl9kYXRhYCDigJMgdGhhdCYjMzk7cyBhIGNsYXNzaWMgbG9jYXRpb24gZm9yIGF0dGFjaGluZyBwcml2YXRlLCBtb2R1bGUtc3BlY2lmaWMgZGF0YSB0byBhIHNvY2tldCBzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgYmVpbmcgc2V0IHRvIGBzdnNrYCB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24sIGBzdmNfc2V0dXBfc29ja2V0YCwgaXMgY2xlYXJseSBhc3NvY2lhdGluZyBhIHNlcnZpY2Utc3BlY2lmaWMgc29ja2V0IHN0cnVjdHVyZSAoYHN2c2tgKSB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQgKGBza2ApLiBUaGlzIGFzc29jaWF0aW9uIGlzIGNyaXRpY2FsIGZvciBhbG1vc3QgYW55IG5ldHdvcmsgc2VydmljZS4gTm93IEkgbmVlZCB0byBrbm93IGV4YWN0bHkgd2hhdCB0aGUgYHN2c2tgIHN0cnVjdHVyZSBjb250YWlucy4KClRvIGJlIHN1cmUgYWJvdXQgdGhlIGZ1bmN0aW9uIGFuZCBgc3Zza2AsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIHNvdXJjZS4gTGV0IG1lIGNoZWNrIHRoZSBgc3ZjX3NldHVwX3NvY2tldGAgZnVuY3Rpb24gaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIHdob2xlIHBpY3R1cmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW50ZW50IG9mIHRoaXMgYXNzb2NpYXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBSUEMgc3RhY2sgaXMgbWFuYWdpbmcgc29ja2V0cyBhbmQgcG90ZW50aWFsbHkgaG93IGl0JiMzOTtzIG1hbmFnaW5nIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0Mzk6XHRzdGF0aWMgc3RydWN0IHN2Y19zb2NrICpzdmNfc2V0dXBfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqc2VydixcbjE0NDA6XHRcdFx0XHRcdFx0XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuMTQ0MTpcdFx0XHRcdFx0XHRcdGludCBmbGFncylcbjE0NDI6XHR7XG4xNDQzOlx0XHRzdHJ1Y3Qgc3ZjX3NvY2tcdCpzdnNrO1xuMTQ0NDpcdFx0c3RydWN0IHNvY2tcdCppbmV0O1xuMTQ0NTpcdFx0aW50XHRcdHBtYXBfcmVnaXN0ZXIgPSAhKGZsYWdzIFx1MDAyNiBTVkNfU09DS19BTk9OWU1PVVMpO1xuMTQ0NjpcdFx0aW50XHRcdHNlbmRwYWdlcztcbjE0NDc6XHRcdHVuc2lnbmVkIGxvbmdcdHBhZ2VzO1xuMTQ0ODpcdFxuMTQ0OTpcdFx0c2VuZHBhZ2VzID0gc3ZjX3NvY2tfc2VuZHBhZ2VzKHNlcnYsIHNvY2ssIGZsYWdzKTtcbjE0NTA6XHRcdGlmIChzZW5kcGFnZXMgXHUwMDNjIDApXG4xNDUxOlx0XHRcdHJldHVybiBFUlJfUFRSKHNlbmRwYWdlcyk7XG4xNDUyOlx0XG4xNDUzOlx0XHRwYWdlcyA9IHN2Y19zZXJ2X21heHBhZ2VzKHNlcnYpO1xuMTQ1NDpcdFx0c3ZzayA9IGt6YWxsb2NfZmxleCgqc3Zzaywgc2tfcGFnZXMsIHBhZ2VzKTtcbjE0NTU6XHRcdGlmICghc3ZzaylcbjE0NTY6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4xNDU3Olx0XG4xNDU4Olx0XHRpZiAoc2VuZHBhZ2VzKSB7XG4xNDU5Olx0XHRcdHN2c2stXHUwMDNlc2tfYnZlYyA9IGt6YWxsb2Nfb2Jqcygqc3Zzay1cdTAwM2Vza19idmVjLCBzZW5kcGFnZXMpO1xuMTQ2MDpcdFx0XHRpZiAoIXN2c2stXHUwMDNlc2tfYnZlYykge1xuMTQ2MTpcdFx0XHRcdGtmcmVlKHN2c2spO1xuMTQ2MjpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTQ2MzpcdFx0XHR9XG4xNDY0Olx0XHR9XG4xNDY1Olx0XG4xNDY2Olx0XHRzdnNrLVx1MDAzZXNrX21heHBhZ2VzID0gcGFnZXM7XG4xNDY3Olx0XG4xNDY4Olx0XHRpbmV0ID0gc29jay1cdTAwM2VzaztcbjE0Njk6XHRcbjE0NzA6XHRcdGlmIChwbWFwX3JlZ2lzdGVyKSB7XG4xNDcxOlx0XHRcdGludCBlcnI7XG4xNDcyOlx0XG4xNDczOlx0XHRcdGVyciA9IHN2Y19yZWdpc3RlcihzZXJ2LCBzb2NrX25ldChzb2NrLVx1MDAzZXNrKSwgaW5ldC1cdTAwM2Vza19mYW1pbHksXG4xNDc0Olx0XHRcdFx0XHQgICAgIGluZXQtXHUwMDNlc2tfcHJvdG9jb2wsXG4xNDc1Olx0XHRcdFx0XHQgICAgIG50b2hzKGluZXRfc2soaW5ldCktXHUwMDNlaW5ldF9zcG9ydCkpO1xuMTQ3NjpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4xNDc3Olx0XHRcdFx0a2ZyZWUoc3Zzay1cdTAwM2Vza19idmVjKTtcbjE0Nzg6XHRcdFx0XHRrZnJlZShzdnNrKTtcbjE0Nzk6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMTQ4MDpcdFx0XHR9XG4xNDgxOlx0XHR9XG4xNDgyOlx0XG4xNDgzOlx0XHRzdnNrLVx1MDAzZXNrX3NvY2sgPSBzb2NrO1xuMTQ4NDpcdFx0c3Zzay1cdTAwM2Vza19zayA9IGluZXQ7XG4xNDg1Olx0XHRzdnNrLVx1MDAzZXNrX29zdGF0ZSA9IGluZXQtXHUwMDNlc2tfc3RhdGVfY2hhbmdlO1xuMTQ4NjpcdFx0c3Zzay1cdTAwM2Vza19vZGF0YSA9IGluZXQtXHUwMDNlc2tfZGF0YV9yZWFkeTtcbjE0ODc6XHRcdHN2c2stXHUwMDNlc2tfb3dzcGFjZSA9IGluZXQtXHUwMDNlc2tfd3JpdGVfc3BhY2U7XG4xNDg4Olx0XHQvKlxuMTQ4OTpcdFx0ICogVGhpcyBiYXJyaWVyIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uXG4xNDkwOlx0XHQgKiB3aXRoIHN2Y19kYXRhX3JlYWR5KCksIHN2Y190Y3BfbGlzdGVuX2RhdGFfcmVhZHkoKSwgYW5kIG90aGVyc1xuMTQ5MTpcdFx0ICogd2hlbiBjYWxsaW5nIGNhbGxiYWNrcyBhYm92ZS5cbjE0OTI6XHRcdCAqL1xuMTQ5MzpcdFx0d21iKCk7XG4xNDk0Olx0XHRpbmV0LVx1MDAzZXNrX3VzZXJfZGF0YSA9IHN2c2s7XG4xNDk1Olx0XG4xNDk2Olx0XHQvKiBJbml0aWFsaXplIHRoZSBzb2NrZXQgKi9cbjE0OTc6XHRcdGlmIChzb2NrLVx1MDAzZXR5cGUgPT0gU09DS19ER1JBTSlcbjE0OTg6XHRcdFx0c3ZjX3VkcF9pbml0KHN2c2ssIHNlcnYpO1xuMTQ5OTpcdFx0ZWxzZVxuMTUwMDpcdFx0XHRzdmNfdGNwX2luaXQoc3Zzaywgc2Vydik7XG4xNTAxOlx0XG4xNTAyOlx0XHR0cmFjZV9zdmNzb2NrX25ldyhzdnNrLCBzb2NrKTtcbjE1MDM6XHRcdHJldHVybiBzdnNrO1xuMTUwNDpcdH1cbjE1MDU6XHRcbjE1MDY6XHQvKipcbjE1MDc6XHQgKiBzdmNfYWRkc29jayAtIGFkZCBhIGxpc3RlbmVyIHNvY2tldCB0byBhbiBSUEMgc2VydmljZVxuMTUwODpcdCAqIEBzZXJ2OiBwb2ludGVyIHRvIFJQQyBzZXJ2aWNlIHRvIHdoaWNoIHRvIGFkZCBhIG5ldyBsaXN0ZW5lclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMxNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgS2VybmVsIFZ1bG5lcmFiaWxpdHkgaW4gTkZTIFNlcnZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHNvY2tldCBvd25lcnNoaXAgd2l0aGluIHRoZSBORlMgc2VydmVyLCBzcGVjaWZpY2FsbHkgd2hlbiBhZGRpbmcgc29ja2V0cy4gVGhlIGNvZGUgaW4gcXVlc3Rpb24sIGBpbmV0LSZndDtza191c2VyX2RhdGEgPSBzdnNrO2AsIGhpZ2hsaWdodHMgYSBwb3RlbnRpYWwgb3ZlcndyaXRlIGlzc3VlLiBJZiBhIHNvY2tldCBhbHJlYWR5IGhhcyBgc2tfdXNlcl9kYXRhYCBhc3NpZ25lZCAocGVyaGFwcyBmcm9tIGFub3RoZXIgUlBDIHNlcnZpY2UsIEtDTSwgVExTLCBTQ1RQLCBCUEYsIG9yIGEgZHVwbGljYXRlIGFkZGl0aW9uKSwgYHN2Y19zZXR1cF9zb2NrZXRgIGNvdWxkIGNvcnJ1cHQgdGhhdCBvd25lcnNoaXAgb3Igc3RhdGUuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIGluIGBzdmNfYWRkc29ja2A6CmBgYGMKCWVyciA9IC1FQlVTWTsKCWlmIChzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YSkKCQlnb3RvIG91dDsKYGBgCnRvIHByZXZlbnQgdGhlIG92ZXJ3cml0ZS4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGlzIHJlYWNoYWJsZSBhbmQgZXhwbG9pdGFibGUuCgpGaXJzdCwgaXMgdGhpcyBjb2RlIHBhdGggYWNjZXNzaWJsZT8gWWVzLCBgc3ZjX2FkZHNvY2tgIGNhbiBiZSBjYWxsZWQgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyBhIGZpbGUgZGVzY3JpcHRvciB0byBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAgKG5mc2N0bCkuIFRoaXMgaXMgc3RhbmRhcmQgTkZTIHNlcnZlciBmdW5jdGlvbmFsaXR5LCBhbmQgdGh1cyByZWFjaGFibGUuCgpTZWNvbmQsIGlzIHRoaXMgY29kZSBpbiBhIGNvcmUgc3Vic3lzdGVtIG9yIGEgY29tbW9ubHkgcmVhY2hhYmxlIHByb3RvY29sPyBBYnNvbHV0ZWx5LiBTdW5SUEMgYW5kIE5GU2QgYXJlIGZ1bmRhbWVudGFsIHBhcnRzIG9mIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgTkZTIGltcGxlbWVudGF0aW9uLgoKVGhpcmQsIGlzIHRoaXMgcGF0Y2ggJiMzNDtXb3J0aEZ1enppbmcmIzM0Oz8gRGVmaW5pdGVseS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmFsaWRhdGlvbiBjaGVjayB3aXRoaW4gcmVhY2hhYmxlIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCwgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGFuZCBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBzdmNfYWRkc29ja2AgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjaGFuZ2UgaXMuIE5vdywgZm9yIHRoZSBjYWxsZXIsIGlzIGl0IGBfX3dyaXRlX3BvcnRzX2FkZGZkYD8gWWVzLCBpdCBhcHBlYXJzIHRvIGJlIGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBpbiBgZnMvbmZzZC9uZnNjdGwuY2AsIHdoaWNoIGNhbGxzIGBzdmNfYWRkc29ja2AuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNhbGxlcnMgb2YgYHN2Y19hZGRzb2NrYC4gQSBxdWljayBncmVwIGNvbmZpcm1zIHRoaXMuCgpMZXQmIzM5O3MgbW92ZSBvbnRvIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIGBzdmNfYWRkc29ja2AgYW5kIG5mc2QgdG8gZnVuY3Rpb24/IEJ5IGV4YW1pbmluZyBgbmV0L3N1bnJwYy9LY29uZmlnYCBhbmQgYGZzL25mc2QvS2NvbmZpZ2AsIEkgc2VlOgotICAgYFNVTlJQQ2AgKGVpdGhlciBjb21waWxlZCBpbiB0aGUga2VybmVsIG9yIGFzIGEgbW9kdWxlLCBzZWxlY3RlZCBieSBgTkZTRGApCi0gICBgTkZTRGAgKHJlcXVpcmVkIHRvIHJlYWNoIGBzdmNfYWRkc29ja2AgdGhyb3VnaCBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAgb3Igd3JpdGVfcG9ydHMpCgpGdXJ0aGVybW9yZSwgYE5GU0RgIGRlcGVuZHMgb24gYE1VTFRJVVNFUmAsIHdoaWNoIGlzIGRlZmF1bHQgJiMzOTt5JiMzOTssIGluIGFkZGl0aW9uIHRvIGBTVU5SUENgIGFuZCBvdGhlciBzZWxlY3Qgb3B0aW9ucy4KClRvIGJlIGV4dHJhIGNsZWFyOiBteSBrZXkgZm9jdXMgc3ltYm9scyBhcmU6CiogICBgc3ZjX2FkZHNvY2tgCiogICBgX193cml0ZV9wb3J0c19hZGRmZGAKCkZpbmFsbHksIEkmIzM5O2xsIGNvbmZpcm0gdGhhdCBgX193cml0ZV9wb3J0c19hZGRmZGAgaXNuJiMzOTt0IHN0YXRpYyBpbiBgZnMvbmZzZC9uZnNjdGwuY2AuIEkmIzM5O2xsIGFsc28gZG91YmxlIGNoZWNrIHRoZSBuYW1lIG9mIHRoZSB3cml0ZSBmdW5jdGlvbiBpbiB0aGUgY29kZSBhcm91bmQgbGluZXMgODAwLTgzMC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uZnNkL25mc2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcdFx0bmZzZF9kZXN0cm95X3NlcnYobmV0KTtcbiA4MDE6XHRcbiA4MDI6XHRcdHJldHVybiBlcnI7XG4gODAzOlx0fVxuIDgwNDpcdFxuIDgwNTpcdHN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsXG4gODA2Olx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0ICpuZXQpXG4gODA3Olx0e1xuIDgwODpcdFx0aWYgKHNpemUgPT0gMClcbiA4MDk6XHRcdFx0cmV0dXJuIF9fd3JpdGVfcG9ydHNfbmFtZXMoYnVmLCBuZXQpO1xuIDgxMDpcdFxuIDgxMTpcdFx0aWYgKGlzZGlnaXQoYnVmWzBdKSlcbiA4MTI6XHRcdFx0cmV0dXJuIF9fd3JpdGVfcG9ydHNfYWRkZmQoYnVmLCBuZXQsIGZpbGUtXHUwMDNlZl9jcmVkKTtcbiA4MTM6XHRcbiA4MTQ6XHRcdGlmIChpc2FscGhhKGJ1ZlswXSkpXG4gODE1Olx0XHRcdHJldHVybiBfX3dyaXRlX3BvcnRzX2FkZHhwcnQoYnVmLCBuZXQsIGZpbGUtXHUwMDNlZl9jcmVkKTtcbiA4MTY6XHRcbiA4MTc6XHRcdHJldHVybiAtRUlOVkFMO1xuIDgxODpcdH1cbiA4MTk6XHRcbiA4MjA6XHQvKlxuIDgyMTpcdCAqIHdyaXRlX3BvcnRzIC0gUGFzcyBhIHNvY2tldCBmaWxlIGRlc2NyaXB0b3Igb3IgdHJhbnNwb3J0IG5hbWUgdG8gbGlzdGVuIG9uXG4gODIyOlx0ICpcbiA4MjM6XHQgKiBJbnB1dDpcbiA4MjQ6XHQgKlx0XHRcdGJ1ZjpcdFx0aWdub3JlZFxuIDgyNTpcdCAqXHRcdFx0c2l6ZTpcdFx0emVyb1xuIDgyNjpcdCAqIE91dHB1dDpcbiA4Mjc6XHQgKlx0T24gc3VjY2VzczpcdHBhc3NlZC1pbiBidWZmZXIgZmlsbGVkIHdpdGggYSAmIzM5O1xcbiYjMzk7LXRlcm1pbmF0ZWQgQ1xuIDgyODpcdCAqXHRcdFx0c3RyaW5nIGNvbnRhaW5pbmcgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mXG4gODI5Olx0ICpcdFx0XHRuYW1lZCBORlNEIGxpc3RlbmVycztcbiA4MzA6XHQgKlx0XHRcdHJldHVybiBjb2RlIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzdHJpbmdcbiA4MzE6XHQgKlx0T24gZXJyb3I6XHRyZXR1cm4gY29kZSBpcyB6ZXJvIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWVcbiA4MzI6XHQgKlxuIDgzMzpcdCAqIE9SXG4gODM0Olx0ICpcbiA4MzU6XHQgKiBJbnB1dDpcbiA4MzY6XHQgKlx0XHRcdGJ1ZjpcdFx0QyBzdHJpbmcgY29udGFpbmluZyBhbiB1bnNpZ25lZFxuIDgzNzpcdCAqXHRcdFx0XHRcdGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIGEgYm91bmRcbiA4Mzg6XHQgKlx0XHRcdFx0XHRidXQgdW5jb25uZWN0ZWQgc29ja2V0IHRoYXQgaXMgdG8gYmVcbiA4Mzk6XHQgKlx0XHRcdFx0XHR1c2VkIGFzIGFuIE5GU0QgbGlzdGVuZXI7IGxpc3RlbigzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3MwoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBtb2RpZmljYXRpb246CgoqKkFuYWx5emluZyB0aGUgYHN2Y19hZGRzb2NrYCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggd2hlcmUgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIGFsdGVyZWQgaXMgYHN2Y19hZGRzb2NrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGFjdCBvZiB0aGlzLiBCYXNlZCBvbiB0aGUgZmlsZSBjb250ZXh0LCB0aGUgZW50cnkgcG9pbnQgZm9yIG5mc2N0bCBvcGVyYXRpb25zIGhlcmUgc2VlbXMgdG8gYmUgZWl0aGVyIGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBvciBwb3RlbnRpYWxseSBgd3JpdGVfcG9ydHNgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRob3NlIGZ1bmN0aW9ucyBpbiBtaW5kIGFzIHRoZSBsaWtlbHkgcGxhY2VzIHdoZXJlIHRoaXMgY2hhbmdlIHdpbGwgbWFuaWZlc3QuCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcGx5IGludG8gdGhlIGNvZGUgaXRzZWxmLCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoZSBzY29wZS4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiB0aGUgcGF0Y2ggdG91Y2hlcyBhbnkgb3RoZXIgZmlsZXMuIE9mdGVuIHRoZXNlIHBhdGNoZXMgd2lsbCBhZmZlY3QgYSBzdWl0ZSBvZiBmaWxlcyB0byBhY2hpZXZlIHRoZSBlbmQgcmVzdWx0LiBBaCwgZ29vZCwgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGp1c3QgYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4KCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCB0aGUgY29udGV4dCwgSSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCwgYW5kIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGltZSB0byBydW4gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgc3RhcnQgY29sbGF0aW5nIG15IGZpbmRpbmdzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzcGl0cyBvdXQsIGFuZCB0aGVuIEkgY2FuIGRpdmUgaW50byB0aGUgY29kZSBtb3JlIG1ldGhvZGljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OywKICAgICYjMzQ7X193cml0ZV9wb3J0c19hZGRmZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcHJldmVudCBzb2NrZXRzIHdpdGggZXhpc3RpbmcgYHNrX3VzZXJfZGF0YWAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGFzIFJQQyBzZXJ2aWNlIGxpc3RlbmVyIHNvY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcvUlBDIHNlcnZlciBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBORlNEIGNvbnRyb2wgaW50ZXJmYWNlICh3cml0aW5nIGFuIEZEIHRvIC9wcm9jL2ZzL25mc2QvcG9ydGxpc3QpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVU5SUEMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19hZGRzb2NrJiMzNDssCiAgICAmIzM0O19fd3JpdGVfcG9ydHNfYWRkZmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHN2Y19hZGRzb2NrKClgIHRvIHByZXZlbnQgc29ja2V0cyB3aXRoIGV4aXN0aW5nIGBza191c2VyX2RhdGFgIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBhcyBSUEMgc2VydmljZSBsaXN0ZW5lciBzb2NrZXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nL1JQQyBzZXJ2ZXIgY29kZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgTkZTRCBjb250cm9sIGludGVyZmFjZSAod3JpdGluZyBhbiBGRCB0byAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHN2Y19hZGRzb2NrKCkgdG8gZW5zdXJlIHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiZDNkY2JhZjQwODUxNmMwMWEwYzYyMDBmMTViNDQ1N2I3Y2FkOTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjA4OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA1MGU1ZTdmNWI3NjJkLi5lOGNjNDMyOWYxMjgyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtMTU0MSw2ICYjNDM7MTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLAogCWVyciA9IC1FSVNDT05OOwogCWlmIChzby0mZ3Q7c3RhdGUgJmd0OyBTU19VTkNPTk5FQ1RFRCkKIAkJZ290byBvdXQ7CiYjNDM7CWVyciA9IC1FQlVTWTsKJiM0MzsJaWYgKHNvLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhKQomIzQzOwkJZ290byBvdXQ7CiAJZXJyID0gLUVOT0VOVDsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJZ290byBvdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gc3Zjc29jay5jIGZvciBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIGFuYWx5emUgdGhpcyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGFjdGlvbiBzdGFydHMgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgdXNlIG15IHRydXN0eSBgcmVhZC1maWxlYCBjb21tYW5kIHRvIGltbWVkaWF0ZWx5IHB1bGwgdXAgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMTU0MSBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGxpbmUgdG8gc2VlIGhvdyB0aGlzIGNoYW5nZSBmaXRzIGluIGFuZCB0byBhc3Nlc3MgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBkaWdnaW5nIGludG8gbmV0d29yayBjb2RlISBPbmNlIEkgaGF2ZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSBjYW4gbWFrZSBhIHByb3BlciBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbjE1MjE6XHR7XG4xNTIyOlx0XHRpbnQgZXJyID0gMDtcbjE1MjM6XHRcdHN0cnVjdCBzb2NrZXQgKnNvID0gc29ja2ZkX2xvb2t1cChmZCwgXHUwMDI2ZXJyKTtcbjE1MjQ6XHRcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9IE5VTEw7XG4xNTI1Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuMTUyNjpcdFx0c3RydWN0IHNvY2thZGRyICpzaW4gPSAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkcjtcbjE1Mjc6XHRcdGludCBzYWxlbjtcbjE1Mjg6XHRcbjE1Mjk6XHRcdGlmICghc28pXG4xNTMwOlx0XHRcdHJldHVybiBlcnI7XG4xNTMxOlx0XHRlcnIgPSAtRUlOVkFMO1xuMTUzMjpcdFx0aWYgKHNvY2tfbmV0KHNvLVx1MDAzZXNrKSAhPSBuZXQpXG4xNTMzOlx0XHRcdGdvdG8gb3V0O1xuMTUzNDpcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbjE1MzU6XHRcdGlmICgoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQpIFx1MDAyNlx1MDAyNiAoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcbjE1MzY6XHRcdFx0Z290byBvdXQ7XG4xNTM3Olx0XHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcbjE1Mzg6XHRcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbjE1Mzk6XHRcdCAgICBzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjE1NDA6XHRcdFx0Z290byBvdXQ7XG4xNTQxOlx0XHRlcnIgPSAtRUlTQ09OTjtcbjE1NDI6XHRcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4xNTQzOlx0XHRcdGdvdG8gb3V0O1xuMTU0NDpcdFx0ZXJyID0gLUVCVVNZO1xuMTU0NTpcdFx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbjE1NDY6XHRcdFx0Z290byBvdXQ7XG4xNTQ3Olx0XHRlcnIgPSAtRU5PRU5UO1xuMTU0ODpcdFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4xNTQ5Olx0XHRcdGdvdG8gb3V0O1xuMTU1MDpcdFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcbjE1NTE6XHRcdGlmIChJU19FUlIoc3ZzaykpIHtcbjE1NTI6XHRcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4xNTUzOlx0XHRcdGVyciA9IFBUUl9FUlIoc3Zzayk7XG4xNTU0Olx0XHRcdGdvdG8gb3V0O1xuMTU1NTpcdFx0fVxuMTU1NjpcdFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cdTAwM2Vza19zb2NrLCBzaW4pO1xuMTU1NzpcdFx0aWYgKHNhbGVuIFx1MDAzZT0gMClcbjE1NTg6XHRcdFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc2luLCBzYWxlbik7XG4xNTU5Olx0XHRzdnNrLVx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcbjE1NjA6XHRcdHN2Y19hZGRfbmV3X3Blcm1feHBydChzZXJ2LCBcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuMTU2MTpcdFx0cmV0dXJuIHN2Y19vbmVfc29ja19uYW1lKHN2c2ssIG5hbWVfcmV0dXJuLCBsZW4pO1xuMTU2MjpcdG91dDpcbjE1NjM6XHRcdHNvY2tmZF9wdXQoc28pO1xuMTU2NDpcdFx0cmV0dXJuIGVycjtcbjE1NjU6XHR9XG4xNTY2Olx0RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spO1xuMTU2NzpcdFxuMTU2ODpcdC8qXG4xNTY5Olx0ICogQ3JlYXRlIHNvY2tldCBmb3IgUlBDIHNlcnZpY2UuXG4xNTcwOlx0ICovXG4xNTcxOlx0c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX2NyZWF0ZV9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxuMTU3MjpcdFx0XHRcdFx0XHQgIGludCBwcm90b2NvbCxcbjE1NzM6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsXG4xNTc0Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNvY2thZGRyICpzaW4sIGludCBsZW4sXG4xNTc1Olx0XHRcdFx0XHRcdCAgaW50IGZsYWdzKVxuMTU3NjpcdHtcbjE1Nzc6XHRcdHN0cnVjdCBzdmNfc29ja1x0KnN2c2s7XG4xNTc4Olx0XHRzdHJ1Y3Qgc29ja2V0XHQqc29jaztcbjE1Nzk6XHRcdGludFx0XHRlcnJvcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbmV3IGBzdmNfYWRkc29ja2AgZnVuY3Rpb24gYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgcGFydGljdWxhciBjaGVjay4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24uCgoqKkRpdmluZyBpbnRvIGBzdmNfYWRkc29ja2AgYW5kIEl0cyBDb250ZXh0KioKCkZpcnN0LCBJIHNlZSBgc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO2AuIFRoaXMgaXMgd2hlcmUgdGhlIHNvY2tldCBjb25maWd1cmF0aW9uIGFwcGVhcnMgdG8gYmUgaGFwcGVuaW5nLiBJIHJlY29nbml6ZSB0aGlzOyBJJiMzOTt2ZSB1c2VkIHRoaXMgc2ltaWxhciBjYWxsIG9mdGVuLiBHaXZlbiBpdHMgY2VudHJhbCByb2xlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYHN2Y19zZXR1cF9zb2NrZXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgc2V0cyB1cCBzb2NrZXRzLiBIb3BlZnVsbHksIHRoZSBzb3VyY2UgY29kZSBpcyB3ZWxsIGRvY3VtZW50ZWQuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgc2lkZSBlZmZlY3RzIG9yIHBvdGVudGlhbCBnb3RjaGFzIHRoYXQgdGhpcyBuZXcgY2hlY2sgaW4gYHN2Y19hZGRzb2NrYCBpcyBhdHRlbXB0aW5nIHRvIG1pdGlnYXRlLiBSaWdodCBub3csIHRoaXMgYWxsIHNlZW1zIGEgbGl0dGxlIHZhZ3VlIHVudGlsIEkgY2hlY2sgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIGBzdmNfc2V0dXBfc29ja2V0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZjX3NldHVwX3NvY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jPTg1PWVudW0ge1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTg4LVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6ODk6c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKiwgc3RydWN0IHNvY2tldCAqLFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTAtXHRcdFx0XHRcdCBpbnQgZmxhZ3MpO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTQwMT1zdGF0aWMgdm9pZCBzdmNfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDA3LVx0aWYgKHN2c2spIHtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjQwODpcdFx0LyogUmVmZXIgdG8gc3ZjX3NldHVwX3NvY2tldCgpIGZvciBkZXRhaWxzLiAqL1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDA5LVx0XHRybWIoKTtcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz00MjI9c3RhdGljIHZvaWQgc3ZjX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00MjYtXHRpZiAoc3Zzaykge1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6NDI3Olx0XHQvKiBSZWZlciB0byBzdmNfc2V0dXBfc29ja2V0KCkgZm9yIGRldGFpbHMuICovXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00MjgtXHRcdHJtYigpO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTg3OD1zdGF0aWMgdm9pZCBzdmNfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy04OTgtXHRpZiAoc3Zzaykge1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6ODk5Olx0XHQvKiBSZWZlciB0byBzdmNfc2V0dXBfc29ja2V0KCkgZm9yIGRldGFpbHMuICovXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05MDAtXHRcdHJtYigpO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTkxMD1zdGF0aWMgdm9pZCBzdmNfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTE0LVx0aWYgKHN2c2spIHtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjkxNTpcdFx0LyogUmVmZXIgdG8gc3ZjX3NldHVwX3NvY2tldCgpIGZvciBkZXRhaWxzLiAqL1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTE2LVx0XHRybWIoKTtcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz05Mjc9c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX3RjcF9hY2NlcHQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk1OS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jOjk2MDpcdC8qIFJlc2V0IHRoZSBpbmhlcml0ZWQgY2FsbGJhY2tzIGJlZm9yZSBjYWxsaW5nIHN2Y19zZXR1cF9zb2NrZXQgKi9cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk2MS1cdG5ld3NvY2stXHUwMDNlc2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlID0gc3Zzay1cdTAwM2Vza19vc3RhdGU7XG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTY5LVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTcwOlx0bmV3c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2VydiwgbmV3c29jayxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk3MS1cdFx0XHRcdCAoU1ZDX1NPQ0tfQU5PTllNT1VTIHwgU1ZDX1NPQ0tfVEVNUE9SQVJZKSk7XG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTQyMj1zdGF0aWMgaW50IHN2Y19zb2NrX3NlbmRwYWdlcyhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncylcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNDM4LSAqL1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTQzOTpzdGF0aWMgc3RydWN0IHN2Y19zb2NrICpzdmNfc2V0dXBfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqc2Vydixcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE0NDAtXHRcdFx0XHRcdFx0c3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xNTE5PWludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NDktXHRcdGdvdG8gb3V0O1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTU1MDpcdHN2c2sgPSBzdmNfc2V0dXBfc29ja2V0KHNlcnYsIHNvLCBTVkNfU09DS19ERUZBVUxUUyk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTUxLVx0aWYgKElTX0VSUihzdnNrKSkge1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTE1NzE9c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX2NyZWF0ZV9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE2MzMtXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNjM0Olx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc29jaywgZmxhZ3MpO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTYzNS1cdGlmIChJU19FUlIoc3ZzaykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgYW5hbHlzaXM6CgoqKkRpdmluZyBpbnRvIGBzdmNfc2V0dXBfc29ja2V0YCBhbmQgYHNrX3VzZXJfZGF0YWAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgc3ZjX3NldHVwX3NvY2tldGAgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBoYW5kbGVzIGBza191c2VyX2RhdGFgLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgZm9yIGFueSBjdXN0b20gUlBDIGltcGxlbWVudGF0aW9uIGFuZCBob3cgd2UgaW50ZXJmYWNlIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0LiBHcmFiYmluZyBsaW5lcyAxNDM5LTE1MTAgd2lsbCBiZSB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXQgYW5kIHNlZSBob3cgaXQmIzM5O3MgdXNlZCBpbiBwcmFjdGljZS4gSSBuZWVkIHRvIGtub3c6IHdoYXQmIzM5O3MgYmVpbmcgc3RvcmVkIHRoZXJlLCB3aGF0IGNvbnRleHQgaXQgcmVwcmVzZW50cyAoY2xpZW50LCBzZXJ2ZXIsIGluZGl2aWR1YWwgcmVxdWVzdCwgc2Vzc2lvbiBldGMuKSwgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCBhbmQgc3Vic2VxdWVudGx5IGFjY2Vzc2VkL21hbmlwdWxhdGVkIHdpdGhpbiB0aGUgUlBDIGZyYW1ld29yay4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgbG9naWMuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgaG9sZGluZyBwZXItc29ja2V0LXNwZWNpZmljIFJQQyBjb250ZXh0IG9yIHNvbWUgbW9yZSBnZW5lcmFsIG5ldHdvcmtpbmcgbWV0YWRhdGEuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDM4Olx0ICovXG4xNDM5Olx0c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXG4xNDQwOlx0XHRcdFx0XHRcdFx0c3RydWN0IHNvY2tldCAqc29jayxcbjE0NDE6XHRcdFx0XHRcdFx0XHRpbnQgZmxhZ3MpXG4xNDQyOlx0e1xuMTQ0MzpcdFx0c3RydWN0IHN2Y19zb2NrXHQqc3ZzaztcbjE0NDQ6XHRcdHN0cnVjdCBzb2NrXHQqaW5ldDtcbjE0NDU6XHRcdGludFx0XHRwbWFwX3JlZ2lzdGVyID0gIShmbGFncyBcdTAwMjYgU1ZDX1NPQ0tfQU5PTllNT1VTKTtcbjE0NDY6XHRcdGludFx0XHRzZW5kcGFnZXM7XG4xNDQ3Olx0XHR1bnNpZ25lZCBsb25nXHRwYWdlcztcbjE0NDg6XHRcbjE0NDk6XHRcdHNlbmRwYWdlcyA9IHN2Y19zb2NrX3NlbmRwYWdlcyhzZXJ2LCBzb2NrLCBmbGFncyk7XG4xNDUwOlx0XHRpZiAoc2VuZHBhZ2VzIFx1MDAzYyAwKVxuMTQ1MTpcdFx0XHRyZXR1cm4gRVJSX1BUUihzZW5kcGFnZXMpO1xuMTQ1MjpcdFxuMTQ1MzpcdFx0cGFnZXMgPSBzdmNfc2Vydl9tYXhwYWdlcyhzZXJ2KTtcbjE0NTQ6XHRcdHN2c2sgPSBremFsbG9jX2ZsZXgoKnN2c2ssIHNrX3BhZ2VzLCBwYWdlcyk7XG4xNDU1Olx0XHRpZiAoIXN2c2spXG4xNDU2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTQ1NzpcdFxuMTQ1ODpcdFx0aWYgKHNlbmRwYWdlcykge1xuMTQ1OTpcdFx0XHRzdnNrLVx1MDAzZXNrX2J2ZWMgPSBremFsbG9jX29ianMoKnN2c2stXHUwMDNlc2tfYnZlYywgc2VuZHBhZ2VzKTtcbjE0NjA6XHRcdFx0aWYgKCFzdnNrLVx1MDAzZXNrX2J2ZWMpIHtcbjE0NjE6XHRcdFx0XHRrZnJlZShzdnNrKTtcbjE0NjI6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjE0NjM6XHRcdFx0fVxuMTQ2NDpcdFx0fVxuMTQ2NTpcdFxuMTQ2NjpcdFx0c3Zzay1cdTAwM2Vza19tYXhwYWdlcyA9IHBhZ2VzO1xuMTQ2NzpcdFxuMTQ2ODpcdFx0aW5ldCA9IHNvY2stXHUwMDNlc2s7XG4xNDY5Olx0XG4xNDcwOlx0XHRpZiAocG1hcF9yZWdpc3Rlcikge1xuMTQ3MTpcdFx0XHRpbnQgZXJyO1xuMTQ3MjpcdFxuMTQ3MzpcdFx0XHRlcnIgPSBzdmNfcmVnaXN0ZXIoc2Vydiwgc29ja19uZXQoc29jay1cdTAwM2VzayksIGluZXQtXHUwMDNlc2tfZmFtaWx5LFxuMTQ3NDpcdFx0XHRcdFx0ICAgICBpbmV0LVx1MDAzZXNrX3Byb3RvY29sLFxuMTQ3NTpcdFx0XHRcdFx0ICAgICBudG9ocyhpbmV0X3NrKGluZXQpLVx1MDAzZWluZXRfc3BvcnQpKTtcbjE0NzY6XHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMTQ3NzpcdFx0XHRcdGtmcmVlKHN2c2stXHUwMDNlc2tfYnZlYyk7XG4xNDc4Olx0XHRcdFx0a2ZyZWUoc3Zzayk7XG4xNDc5Olx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjE0ODA6XHRcdFx0fVxuMTQ4MTpcdFx0fVxuMTQ4MjpcdFxuMTQ4MzpcdFx0c3Zzay1cdTAwM2Vza19zb2NrID0gc29jaztcbjE0ODQ6XHRcdHN2c2stXHUwMDNlc2tfc2sgPSBpbmV0O1xuMTQ4NTpcdFx0c3Zzay1cdTAwM2Vza19vc3RhdGUgPSBpbmV0LVx1MDAzZXNrX3N0YXRlX2NoYW5nZTtcbjE0ODY6XHRcdHN2c2stXHUwMDNlc2tfb2RhdGEgPSBpbmV0LVx1MDAzZXNrX2RhdGFfcmVhZHk7XG4xNDg3Olx0XHRzdnNrLVx1MDAzZXNrX293c3BhY2UgPSBpbmV0LVx1MDAzZXNrX3dyaXRlX3NwYWNlO1xuMTQ4ODpcdFx0LypcbjE0ODk6XHRcdCAqIFRoaXMgYmFycmllciBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvblxuMTQ5MDpcdFx0ICogd2l0aCBzdmNfZGF0YV9yZWFkeSgpLCBzdmNfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KCksIGFuZCBvdGhlcnNcbjE0OTE6XHRcdCAqIHdoZW4gY2FsbGluZyBjYWxsYmFja3MgYWJvdmUuXG4xNDkyOlx0XHQgKi9cbjE0OTM6XHRcdHdtYigpO1xuMTQ5NDpcdFx0aW5ldC1cdTAwM2Vza191c2VyX2RhdGEgPSBzdnNrO1xuMTQ5NTpcdFxuMTQ5NjpcdFx0LyogSW5pdGlhbGl6ZSB0aGUgc29ja2V0ICovXG4xNDk3Olx0XHRpZiAoc29jay1cdTAwM2V0eXBlID09IFNPQ0tfREdSQU0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjMKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgaXMgS0FTQU4gdGVycml0b3J5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoYXQgYHN2Y19hZGRzb2NrYCBmdW5jdGlvbi4uLiBpdCYjMzk7cyBkb2luZyBhIGNoZWNrLCBhbmQgaXQmIzM5O3MgYSBjcml0aWNhbCBvbmUuIElmIGBzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQsIGl0IGJhaWxzIG91dCB3aXRoIGAtRUJVU1lgLiBUaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGlzIHRoYXQgYHN2Y19zZXR1cF9zb2NrZXRgIHdhcyBvdmVyd3JpdGluZyB0aGlzLCB3aGljaCB3b3VsZCBhYnNvbHV0ZWx5IHN0b21wIG9uIHdoYXRldmVyIGRhdGEgb3Igc3Vic3lzdGVtIHdhcyAqYWxyZWFkeSogdXNpbmcgdGhhdCBgc2tfdXNlcl9kYXRhYCBmaWVsZCwgbGVhZGluZyB0byBhIGNsYXNzaWMgVUFGIG9yLCB3b3JzZSwgYXJiaXRyYXJ5IHBvaW50ZXIgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIE5hc3R5LiBUaGF0IGAtRUJVU1lgIGNoZWNrIGlzIGEgY3J1Y2lhbCBzYWZlZ3VhcmQuCgpTbywgd2hlcmUgZG9lcyB0aGlzIGJ1ZyBzaXQgb24gdGhlIHNwZWN0cnVtIG9mIG1lbW9yeSBzYWZldHkgdG9vbHM/IExldCYjMzk7cyB0aWNrIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLiBEb2VzIGl0IGNyZWF0ZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBicmFuY2hpbmcgaW50cm9kdWNlZD8gQWxzbyBuby4gQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTmVnYXRpdmUuIEFyZSBhbnkgYm91bmRzIGNoZWNrcyBhbHRlcmVkIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vdCBpbiB0aGlzIGNhc2UuCgpXaGF0JiMzOTtzIGhhcHBlbmluZyBoZXJlIGlzIHRoZSBwcmV2ZW50aW9uIG9mIGEgc29ja2V0IGZyb20gYmVpbmcgcmV1c2VkLCBvciBhIHVzZS1hZnRlci1mcmVlLCBvciBgc2tfdXNlcl9kYXRhYCBiZWluZyBvdmVyd3JpdHRlbiAtIGl0JiMzOTtzIGRpcmVjdGx5IGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24sIFVBRiwgYW5kIGRhdGEgY29ycnVwdGlvbi4gVGhhdCYjMzk7cyAqdGV4dGJvb2sqIEtBU0FOIHRlcnJpdG9yeS4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiBtZW1vcnkgc2FmZXR5IGlzc3VlcyBLQVNBTiBpcyBidWlsdCB0byBmaW5kLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBubyBuZXcgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIGFib3V0IGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIG1pc3VzZS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGNsZWFybHkgYGZhbHNlYC4KCkhlcmUmIzM5O3MgbXkgcmF0aW9uYWxlIGZvciB0aGUgY2hhbmdlOgpUaGUgcGF0Y2ggaW5zZXJ0cyBhIGNoZWNrIHdpdGhpbiBgc3ZjX2FkZHNvY2soKWAuICBUaGlzIHJldHVybnMgYC1FQlVTWWAgaWYgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIHBhcnQgb2YgdGhlIHN5c3RlbSBvciBhbiBSUEMgc2VydmljZSwgYW5kIHRoaXMgcHJldmVudHMgb3ZlcndyaXRpbmcgYHNrX3VzZXJfZGF0YWAuIFByZXZlbnRpbmcgdGhpcyBpcyB0aGUgKmtleSogaGVyZS4gIE92ZXJ3cml0aW5nIGBza191c2VyX2RhdGFgIGNvdWxkIGxlYWQgdG8gdHlwZSBjb25mdXNpb24sIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIG91dHJpZ2h0IG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBpcyBhdm9pZGVkIGhlcmUuCgpDcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgb3IgdXNlci1zcGFjZSBpbmZvIGxlYWtzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgKnRoaXMqIGNoYW5nZS4gVGhlIHBvdGVudGlhbCBwcm9ibGVtcyBoZXJlLCBhcmUgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9ucyBvciBtaXN1c2Ugb2YgdGhlIHNvY2tldCBzdGF0ZSwgYW5kIHRoYXQgc29ydCBvZiBzdHVmZiBpcyB2ZXJ5IHdlbGwgaGFuZGxlZCBieSBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuICBObyBuZWVkIGZvciBhbnkgc3BlY2lhbCBLTVNBTiBmdXp6aW5nLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgaXMgTlVMTCBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIHN2Y19zZXR1cF9zb2NrZXQoKSwgcmV0dXJuaW5nIC1FQlVTWSBpZiBpdCBpcyBhbHJlYWR5IGluIHVzZS4gVGhpcyBwcmV2ZW50cyBvdmVyd3JpdGluZyBza191c2VyX2RhdGEgYW5kIHNvY2tldCBjYWxsYmFja3Mgd2hlbiBhIHNvY2tldCBpcyBhbHJlYWR5IG93bmVkLCBwcmV2ZW50aW5nIHR5cGUgY29uZnVzaW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcvc3RydWN0IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxvZ2ljLiBBbnkgbWVtb3J5IGJ1Z3MgaW4gdGhpcyBwYXRoIGFyZSB1c2UtYWZ0ZXItZnJlZSBvciBzdGF0ZSBjb3JydXB0aW9uIGlzc3VlcyBjYXVnaHQgYnkgS0FTQU4sIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgaXMgTlVMTCBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIHN2Y19zZXR1cF9zb2NrZXQoKSwgcmV0dXJuaW5nIC1FQlVTWSBpZiBpdCBpcyBhbHJlYWR5IGluIHVzZS4gVGhpcyBwcmV2ZW50cyBvdmVyd3JpdGluZyBza191c2VyX2RhdGEgYW5kIHNvY2tldCBjYWxsYmFja3Mgd2hlbiBhIHNvY2tldCBpcyBhbHJlYWR5IG93bmVkLCBwcmV2ZW50aW5nIHR5cGUgY29uZnVzaW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcvc3RydWN0IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxvZ2ljLiBBbnkgbWVtb3J5IGJ1Z3MgaW4gdGhpcyBwYXRoIGFyZSB1c2UtYWZ0ZXItZnJlZSBvciBzdGF0ZSBjb3JydXB0aW9uIGlzc3VlcyBjYXVnaHQgYnkgS0FTQU4sIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA4OjQ2LjQyNzExMjA3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzYxNDc5Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCIsXG4gICAgXCJfX3dyaXRlX3BvcnRzX2FkZGZkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcHJldmVudCBzb2NrZXRzIHdpdGggZXhpc3RpbmcgYHNrX3VzZXJfZGF0YWAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGFzIFJQQyBzZXJ2aWNlIGxpc3RlbmVyIHNvY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcvUlBDIHNlcnZlciBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBORlNEIGNvbnRyb2wgaW50ZXJmYWNlICh3cml0aW5nIGFuIEZEIHRvIC9wcm9jL2ZzL25mc2QvcG9ydGxpc3QpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowODo0Ni40MjcxMTgyOTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDk5MDM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBiZDNkY2JhZjQwODUxNmMwMWEwYzYyMDBmMTViNDQ1N2I3Y2FkOTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxNDowODo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXFxuaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXFxuQEAgLTE1NDEsNiArMTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxcbiBcXHRlcnIgPSAtRUlTQ09OTjtcXG4gXFx0aWYgKHNvLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4rXFx0ZXJyID0gLUVCVVNZO1xcbitcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHRlcnIgPSAtRU5PRU5UO1xcbiBcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA4OjQ2Ljk2ODg3NzMwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDY5MDMwODkzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1VOUlBDXCIsXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZjX2FkZHNvY2tcIixcbiAgICBcIl9fd3JpdGVfcG9ydHNfYWRkZmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcHJldmVudCBzb2NrZXRzIHdpdGggZXhpc3RpbmcgYHNrX3VzZXJfZGF0YWAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGFzIFJQQyBzZXJ2aWNlIGxpc3RlbmVyIHNvY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcvUlBDIHNlcnZlciBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBORlNEIGNvbnRyb2wgaW50ZXJmYWNlICh3cml0aW5nIGFuIEZEIHRvIC9wcm9jL2ZzL25mc2QvcG9ydGxpc3QpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiZDNkY2JhZjQwODUxNmMwMWEwYzYyMDBmMTViNDQ1N2I3Y2FkOTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjA4OjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jXG4rKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuQEAgLTE1NDEsNiArMTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxuIFx0ZXJyID0gLUVJU0NPTk47XG4gXHRpZiAoc28tXHUwMDNlc3RhdGUgXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxuIFx0XHRnb3RvIG91dDtcbitcdGVyciA9IC1FQlVTWTtcbitcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpXG4rXHRcdGdvdG8gb3V0O1xuIFx0ZXJyID0gLUVOT0VOVDtcbiBcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuIFx0XHRnb3RvIG91dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA4OjQ2Ljk2ODg3OTM0M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDIwODQ2NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHN2Y19hZGRzb2NrYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGRpZmYgdGFyZ2V0aW5nIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIGBzdmNfYWRkc29ja2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBpbnRyb2R1Y2VkLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBjaGVjazogYGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpIGdvdG8gb3V0O2AgcmlnaHQgYWZ0ZXIgdGhlIGV4aXN0aW5nIGBzby1cdTAwM2VzdGF0ZWAgYW5kIHJpZ2h0IGJlZm9yZSB0aGUgYHRyeV9tb2R1bGVfZ2V0YCBjYWxsLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0J3Mgc2hvcnQtY2lyY3VpdGluZyB0aGUgYWRkIG9wZXJhdGlvbiBpZiBgc2tfdXNlcl9kYXRhYCBpcyBzZXQuIFRoZSBwcmV2aW91cyBjaGVja3MgY292ZXJlZCBjb25uZWN0aW9uIHN0YXRlIGFuZCBtb2R1bGUgYXZhaWxhYmlsaXR5LCB0aGlzIGlzIG5ldywgYW5kIGNsZWFybHkgcmVsYXRlZCB0byByZXNvdXJjZSBjb250ZW50aW9uIG9yIHBlcmhhcHMgcHJldmVudGluZyBkb3VibGUtcmVnaXN0cmF0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGludGVuZGVkIHRvIHByZXZlbnQgYSBzb2NrZXQgZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgc2VydmljZSBpZiBpdCdzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIHNvbWUgb3RoZXIgY29udGV4dC4gV2Uga25vdyB0aGF0IGBza191c2VyX2RhdGFgIGlzIG9mdGVuIHVzZWQgdG8gaG9sZCBwcml2YXRlIGRhdGEgc3BlY2lmaWMgdG8gYSBzb2NrZXQsIHNvIGEgbm9uLW51bGwgYHNrX3VzZXJfZGF0YWAgbGlrZWx5IGluZGljYXRlcyB0aGUgc29ja2V0IGlzIGFscmVhZHkgJ2luIHVzZScuIE1ha2VzIHNlbnNlLiBQcmV2ZW50aW5nIHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBhdm9pZGluZyByYWNlIGNvbmRpdGlvbnMsIHJlc291cmNlIGxlYWtzLCBvciBwcmV2ZW50aW5nIGRvdWJsZSBhY2NvdW50aW5nIG9mIHJlc291cmNlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucywgSSdtIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgc3ZjX2FkZHNvY2tgIGFuZCB3aGF0IGNhbGxzIGl0LiBJJ2xsIGZpcmUgdXAgbXkgdHJ1c3R5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IGFyZWEsIGFuZCB3aGVyZSBgc3ZjX2FkZHNvY2tgIGdldHMgY2FsbGVkIGZyb20uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDg6NTcuMzg5NzI4NjY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zdW5ycGMvc3Zjc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MjA6XFx0XFx0XFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbjE1MjE6XFx0e1xcbjE1MjI6XFx0XFx0aW50IGVyciA9IDA7XFxuMTUyMzpcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzbyA9IHNvY2tmZF9sb29rdXAoZmQsIFxcdTAwMjZlcnIpO1xcbjE1MjQ6XFx0XFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID0gTlVMTDtcXG4xNTI1OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuMTUyNjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkcjtcXG4xNTI3OlxcdFxcdGludCBzYWxlbjtcXG4xNTI4OlxcdFxcbjE1Mjk6XFx0XFx0aWYgKCFzbylcXG4xNTMwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTUzMTpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE1MzI6XFx0XFx0aWYgKHNvY2tfbmV0KHNvLVxcdTAwM2VzaykgIT0gbmV0KVxcbjE1MzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNDpcXHRcXHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xcbjE1MzU6XFx0XFx0aWYgKChzby1cXHUwMDNlc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBQRl9JTkVUKSBcXHUwMDI2XFx1MDAyNiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYpKVxcbjE1MzY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNzpcXHRcXHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcXG4xNTM4OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2XFxuMTUzOTpcXHRcXHQgICAgc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcXG4xNTQwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDE6XFx0XFx0ZXJyID0gLUVJU0NPTk47XFxuMTU0MjpcXHRcXHRpZiAoc28tXFx1MDAzZXN0YXRlIFxcdTAwM2UgU1NfVU5DT05ORUNURUQpXFxuMTU0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ0OlxcdFxcdGVyciA9IC1FQlVTWTtcXG4xNTQ1OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSlcXG4xNTQ2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDc6XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xNTQ4OlxcdFxcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxcbjE1NDk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1MDpcXHRcXHRzdnNrID0gc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO1xcbjE1NTE6XFx0XFx0aWYgKElTX0VSUihzdnNrKSkge1xcbjE1NTI6XFx0XFx0XFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuMTU1MzpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHN2c2spO1xcbjE1NTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1NTpcXHRcXHR9XFxuMTU1NjpcXHRcXHRzYWxlbiA9IGtlcm5lbF9nZXRzb2NrbmFtZShzdnNrLVxcdTAwM2Vza19zb2NrLCBzaW4pO1xcbjE1NTc6XFx0XFx0aWYgKHNhbGVuIFxcdTAwM2U9IDApXFxuMTU1ODpcXHRcXHRcXHRzdmNfeHBydF9zZXRfbG9jYWwoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIHNpbiwgc2FsZW4pO1xcbjE1NTk6XFx0XFx0c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfY3JlZCA9IGdldF9jcmVkKGNyZWQpO1xcbjE1NjA6XFx0XFx0c3ZjX2FkZF9uZXdfcGVybV94cHJ0KHNlcnYsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0KTtcXG4xNTYxOlxcdFxcdHJldHVybiBzdmNfb25lX3NvY2tfbmFtZShzdnNrLCBuYW1lX3JldHVybiwgbGVuKTtcXG4xNTYyOlxcdG91dDpcXG4xNTYzOlxcdFxcdHNvY2tmZF9wdXQoc28pO1xcbjE1NjQ6XFx0XFx0cmV0dXJuIGVycjtcXG4xNTY1OlxcdH1cXG4xNTY2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcXG4xNTY3OlxcdFxcbjE1Njg6XFx0LypcXG4xNTY5OlxcdCAqIENyZWF0ZSBzb2NrZXQgZm9yIFJQQyBzZXJ2aWNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowODo1Ny4zOTAxNjE3MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjMzNzc4ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHN2Y19hZGRzb2NrYCBVc2FnZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgc3ZjX2FkZHNvY2tgLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhpcyBpcyBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlIGZvciBkaWdnaW5nIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBhIHNwZWNpZmljIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgd2hlcmUgaXQncyBjYWxsZWQgZnJvbSB3aWxsIGJlIHRoZSBmaXJzdCBzdGVwIHRvIGZpZ3VyaW5nIG91dCBpdHMgcm9sZSBhbmQgYW55IHBvdGVudGlhbCBpbXBhY3Qgb2YgbW9kaWZ5aW5nIGl0LCBvciBmb3IgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowODo1OS4wMjM5NDM5MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3ODA4NTUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdmNfYWRkc29ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnNkL25mc2N0bC5jPTczMj1zdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZGZkKGNoYXIgKmJ1Ziwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4tLVxcbmZzL25mc2QvbmZzY3RsLmMtNzQ4LVxcdHNlcnYgPSBubi1cXHUwMDNlbmZzZF9zZXJ2O1xcbmZzL25mc2QvbmZzY3RsLmM6NzQ5OlxcdGVyciA9IHN2Y19hZGRzb2NrKHNlcnYsIG5ldCwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCBjcmVkKTtcXG5mcy9uZnNkL25mc2N0bC5jLTc1MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaD02NT12b2lkXFx0XFx0c3ZjX3NlbmQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCk7XFxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oOjY2OmludFxcdFxcdHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LFxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaC02Ny1cXHRcXHRcXHQgICAgY29uc3QgaW50IGZkLCBjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTE0Mzk9c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTA2LS8qKlxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MDc6ICogc3ZjX2FkZHNvY2sgLSBhZGQgYSBsaXN0ZW5lciBzb2NrZXQgdG8gYW4gUlBDIHNlcnZpY2VcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTA4LSAqIEBzZXJ2OiBwb2ludGVyIHRvIFJQQyBzZXJ2aWNlIHRvIHdoaWNoIHRvIGFkZCBhIG5ldyBsaXN0ZW5lclxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUxOC0gKi9cXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTE5OmludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MjAtXFx0XFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTU2NS19XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTU2NjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTU2Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MDAuODAyMDM5NDI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwNDY2NzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBgc3ZjX2FkZHNvY2tgIFVzYWdlKipcblxuT2theSwgc28gYHN2Y19hZGRzb2NrYCBpcyBleHBvcnRlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYGZzL25mc2QvbmZzY3RsLmNgIGlzIHVzaW5nIGl0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5ICpob3cqLiBUaGUgY2x1ZSBpcyB0aGlzIGludGVyYWN0aW9uIHdpdGggYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMgd2l0aGluIHRoZSBgc3lzZnMvbmZzY3RsYCBpbnRlcmZhY2UuIFJpZ2h0LCBzbyB0aGF0IHBvaW50cyBtZSBkaXJlY3RseSB0byB0aGF0IGBuZnNjdGwuY2AgZmlsZS4gVGltZSB0byBkaWcgaW4uLi4gSSdsbCBqdW1wIHJpZ2h0IHRvIGxpbmUgNzMyLCBzZWUgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhlcmUuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWxldmFudCBgbmZzY3RsYCBsb2dpYyBvciB0aGUgcG9ydGxpc3QgaW50ZXJhY3Rpb24gb2NjdXJzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBgc3ZjX2FkZHNvY2tgIGJhc2VkIG9uIHRoYXQgY29udGV4dC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjAzLjEwNjcxMDE4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZnNkL25mc2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyNTpcXHR9XFxuIDcyNjpcXHRcXG4gNzI3OlxcdC8qXFxuIDcyODpcXHQgKiBBIHNpbmdsZSAnZmQnIG51bWJlciB3YXMgd3JpdHRlbiwgaW4gd2hpY2ggY2FzZSBpdCBtdXN0IGJlIGZvclxcbiA3Mjk6XFx0ICogYSBzb2NrZXQgb2YgYSBzdXBwb3J0ZWQgZmFtaWx5L3Byb3RvY29sLCBhbmQgd2UgdXNlIGl0IGFzIGFuXFxuIDczMDpcXHQgKiBuZnNkIGxpc3RlbmVyLlxcbiA3MzE6XFx0ICovXFxuIDczMjpcXHRzdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZGZkKGNoYXIgKmJ1Ziwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4gNzMzOlxcdHtcXG4gNzM0OlxcdFxcdGNoYXIgKm1lc2cgPSBidWY7XFxuIDczNTpcXHRcXHRpbnQgZmQsIGVycjtcXG4gNzM2OlxcdFxcdHN0cnVjdCBuZnNkX25ldCAqbm4gPSBuZXRfZ2VuZXJpYyhuZXQsIG5mc2RfbmV0X2lkKTtcXG4gNzM3OlxcdFxcdHN0cnVjdCBzdmNfc2VydiAqc2VydjtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0ZXJyID0gZ2V0X2ludChcXHUwMDI2bWVzZywgXFx1MDAyNmZkKTtcXG4gNzQwOlxcdFxcdGlmIChlcnIgIT0gMCB8fCBmZCBcXHUwMDNjIDApXFxuIDc0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzQyOlxcdFxcdHRyYWNlX25mc2RfY3RsX3BvcnRzX2FkZGZkKG5ldCwgZmQpO1xcbiA3NDM6XFx0XFxuIDc0NDpcXHRcXHRlcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KG5ldCk7XFxuIDc0NTpcXHRcXHRpZiAoZXJyICE9IDApXFxuIDc0NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRzZXJ2ID0gbm4tXFx1MDAzZW5mc2Rfc2VydjtcXG4gNzQ5OlxcdFxcdGVyciA9IHN2Y19hZGRzb2NrKHNlcnYsIG5ldCwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCBjcmVkKTtcXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0aWYgKCFzZXJ2LVxcdTAwM2Vzdl9ucnRocmVhZHMgXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2bm4tXFx1MDAzZW5mc2Rfc2Vydi1cXHUwMDNlc3ZfcGVybXNvY2tzKSlcXG4gNzUyOlxcdFxcdFxcdG5mc2RfZGVzdHJveV9zZXJ2KG5ldCk7XFxuIDc1MzpcXHRcXG4gNzU0OlxcdFxcdHJldHVybiBlcnI7XFxuIDc1NTpcXHR9XFxuIDc1NjpcXHRcXG4gNzU3OlxcdC8qXFxuIDc1ODpcXHQgKiBBIHRyYW5zcG9ydCBsaXN0ZW5lciBpcyBhZGRlZCBieSB3cml0aW5nIGl0cyB0cmFuc3BvcnQgbmFtZSBhbmRcXG4gNzU5OlxcdCAqIGEgcG9ydCBudW1iZXIuXFxuIDc2MDpcXHQgKi9cXG4gNzYxOlxcdHN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkeHBydChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuIDc2MjpcXHR7XFxuIDc2MzpcXHRcXHRjaGFyIHRyYW5zcG9ydFsxNl07XFxuIDc2NDpcXHRcXHRzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjAzLjEwNjg1MjQyN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDg4MzE2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgVXNlci1TcGFjZSBFbnRyeSBQb2ludCBmb3IgYF9fd3JpdGVfcG9ydHNfYWRkZmRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBpcyBiZWluZyBpbnZva2VkIGZyb20gdXNlciBzcGFjZS4gTGV0J3MgZGlnIGluLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCBpdCdzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gd3JpdGluZy4gVGhlIGBfX2AgcHJlZml4IHVzdWFsbHkgaW5kaWNhdGVzIGFuIGludGVybmFsIGtlcm5lbCBmdW5jdGlvbiwgc28gaXQgd29uJ3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCdzIGxpa2VseSBhIGxvd2VyLWxldmVsIGhlbHBlciBmb3IgYSBtb3JlIHVzZXItZmFjaW5nIHN5c3RlbSBjYWxsLlxuXG5NeSBpbW1lZGlhdGUgcGxhbiBpcyB0byB1c2UgYSBjb21iaW5hdGlvbiBvZiB0ZWNobmlxdWVzLiBJJ2xsIHN0YXJ0IHdpdGggc291cmNlIGNvZGUgYW5hbHlzaXMsIGdyZXBwaW5nIGZvciBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLCBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyBpdCBtaWdodCBiZSBsaW5rZWQgdG8gb3RoZXIgZnVuY3Rpb25zIGFuZCBwb3RlbnRpYWxseSB0cmFjZSBpdCB3aXRoIGEgZGVidWdnZXIgdG8gY2hlY2sgdGhhdCB3aGF0IEkgdGhvdWdodCB3YXMgaGFwcGVuaW5nLCBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHRoZSBhcmd1bWVudHMgcGFzc2VkLCBhbmQgd2hhdCBjb250ZXh0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24uIEkga25vdyBJIGhhdmUgdG8gY29uc2lkZXIgZGlmZmVyZW50IHN5c3RlbSBjYWxscyB0aGF0IGNvdWxkIGhhbmRsZSB0aGUgZnVuY3Rpb24gYXMgYSBoZWxwZXIuXG5cbkknbGwga2VlcCBhIHNoYXJwIGV5ZSBvdXQgZm9yIGxpa2VseSBzdXNwZWN0cyBsaWtlIGBlcG9sbF9jdGxgIChnaXZlbiBpdHMgRkQgbWFuYWdlbWVudCBuYXR1cmUpIG9yIGV2ZW4gY3VzdG9tIGRyaXZlcnMgaWYgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBzcGVjaWZpYyB0byBoYXJkd2FyZSBvciBhIG5vbi1zdGFuZGFyZCBkZXZpY2UuIEkga25vdyB0aGF0IGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIGNhbGxzIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBsb29rIGF0IGFsbCBwb3NzaWJsZSBlbnRyeSBwb2ludHMgdG8gc2VlIGlmIHRoZSBjYWxscyBhcmUgbWFkZSBmcm9tIHRoZXJlLiBJIG1pZ2h0IGV2ZW4gY29uc2lkZXIgbG9va2luZyBhdCB0aGUga2VybmVsIGhlYWRlcnMsIGxvb2tpbmcgZm9yIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyB0aGF0IGFyZSBkZWZpbmVkIGFzIHdlbGwuXG5cbkkgbmVlZCB0byBxdWlja2x5IGZvcm11bGF0ZSBhIHBsYW4gdGhhdCBpZGVudGlmaWVzIHN5c3RlbSBjYWxscyBpbnZvbHZlZCBpbiB3cml0ZSBvcGVyYXRpb25zIGFuZCB0aGVuIGlkZW50aWZ5IHRoZSBwb3NzaWJsZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgdGhlIG9wZXJhdGlvbnMgY2FsbC4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIGlkZW50aWZ5IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0J3MgYmVpbmcgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MDYuMjU1Njg3NTcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQyMjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3dyaXRlX3BvcnRzX2FkZGZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mc2RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9uZnNjdGwuYz03MTg9c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19uYW1lcyhjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbmZzL25mc2QvbmZzY3RsLmMtNzMxLSAqL1xcbmZzL25mc2QvbmZzY3RsLmM6NzMyOnN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkZmQoY2hhciAqYnVmLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbmZzL25mc2QvbmZzY3RsLmMtNzMzLXtcXG4tLVxcbmZzL25mc2QvbmZzY3RsLmM9ODA1PXN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsXFxuLS1cXG5mcy9uZnNkL25mc2N0bC5jLTgxMS1cXHRpZiAoaXNkaWdpdChidWZbMF0pKVxcbmZzL25mc2QvbmZzY3RsLmM6ODEyOlxcdFxcdHJldHVybiBfX3dyaXRlX3BvcnRzX2FkZGZkKGJ1ZiwgbmV0LCBmaWxlLVxcdTAwM2VmX2NyZWQpO1xcbmZzL25mc2QvbmZzY3RsLmMtODEzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTowNi4zMDYxMTg1MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY2NDI0MDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GU0QgUG9ydGxpc3QgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBfX3dyaXRlX3BvcnRzYCwgd2hpY2ggSSBzZWUgaXMgYSBoZWxwZXIgd2l0aGluIHRoZSBgd3JpdGVfcG9ydHNgIGhhbmRsZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgIGZpbGUg4oCTIHRoYXQgTkZTIGRhZW1vbiBwb3J0bGlzdCBlbnRyeS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBORlNEIGFuZCBTVU5SUEMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2V0LCBvciBJIHdvbid0IHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgc3VwcG9zZWQgdG8gZG8uIEEgc29saWQgZ3Jhc3Agb2YgdGhlIEtjb25maWcgb3B0aW9ucyB3aWxsIHRlbGwgbWUgaWYgdGhlIE5GUyBkYWVtb24gaXMgYnVpbHQgYW5kIGNvbmZpZ3VyZWQgYXMgSSB3b3VsZCBleHBlY3QsIHNvIEkgaGF2ZSBhIGZvdW5kYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgYF9fd3JpdGVfcG9ydHNgIGhhbmRsZXIuIEkgbmVlZCB0byBrbm93IHRoZSBwcmVyZXF1aXNpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MDguOTcwMzYyMDM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTAxMDUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORlNEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mc2RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MzAzIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5mcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9uZnNkL0tjb25maWc6Mjpjb25maWcgTkZTRFxcbmZzL25mc2QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJORlMgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNy1cXHRzZWxlY3QgQ1JDMzJcXG5mcy9uZnNkL0tjb25maWc6ODpcXHRzZWxlY3QgQ1JZUFRPX0xJQl9NRDUgaWYgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuZnMvbmZzZC9LY29uZmlnOjk6XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2IGlmIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUTyAjIHJlcXVpcmVkIGJ5IFJQQ1NFQ19HU1NfS1JCNSBhbmQgc2lnbmVkIGZpbGVoYW5kbGVzXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTQtXFx0c2VsZWN0IE5GU19DT01NT05cXG5mcy9uZnNkL0tjb25maWc6MTU6XFx0c2VsZWN0IE5GU19BQ0xfU1VQUE9SVCBpZiBORlNEX1YyX0FDTFxcbmZzL25mc2QvS2NvbmZpZzoxNjpcXHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjNfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMzUtXFx0ICBTdXBwb3J0IGZvciBORlMgdmVyc2lvbiAzIChSRkMgMTgxMykgaXMgYWx3YXlzIGF2YWlsYWJsZSB3aGVuXFxuZnMvbmZzZC9LY29uZmlnOjM2OlxcdCAgQ09ORklHX05GU0QgaXMgc2VsZWN0ZWQuXFxuZnMvbmZzZC9LY29uZmlnLTM3LVxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTM5LVxcbmZzL25mc2QvS2NvbmZpZzo0MDpjb25maWcgTkZTRF9WMlxcbmZzL25mc2QvS2NvbmZpZy00MS1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXFxcIlxcbmZzL25mc2QvS2NvbmZpZzo0MjpcXHRkZXBlbmRzIG9uIE5GU0RcXG5mcy9uZnNkL0tjb25maWctNDMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNTAtXFxuZnMvbmZzZC9LY29uZmlnOjUxOmNvbmZpZyBORlNEX1YyX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Mi1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbmZzL25mc2QvS2NvbmZpZzo1MzpcXHRkZXBlbmRzIG9uIE5GU0RfVjJcXG5mcy9uZnNkL0tjb25maWctNTQtXFxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Ni1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbmZzL25mc2QvS2NvbmZpZzo1NzpcXHRkZXBlbmRzIG9uIE5GU0RcXG5mcy9uZnNkL0tjb25maWctNTgtXFx0aGVscFxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTc2LVxcbmZzL25mc2QvS2NvbmZpZzo3Nzpjb25maWcgTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy03OC1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjc5OlxcdGRlcGVuZHMgb24gTkZTRCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuZnMvbmZzZC9LY29uZmlnLTgwLVxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy05My1cXG5mcy9uZnNkL0tjb25maWc6OTQ6Y29uZmlnIE5GU0RfUE5GU1xcbmZzL25mc2QvS2NvbmZpZy05NS1cXHRib29sXFxuZnMvbmZzZC9LY29uZmlnLTk2LVxcbmZzL25mc2QvS2NvbmZpZzo5Nzpjb25maWcgTkZTRF9CTE9DS0xBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy05OC1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIGJsb2NrIGxheW91dHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjk5OlxcdGRlcGVuZHMgb24gTkZTRF9WNCBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmZzL25mc2QvS2NvbmZpZzoxMDA6XFx0c2VsZWN0IE5GU0RfUE5GU1xcbmZzL25mc2QvS2NvbmZpZy0xMDEtXFx0c2VsZWN0IEVYUE9SVEZTX0JMT0NLX09QU1xcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEwOS1cXG5mcy9uZnNkL0tjb25maWc6MTEwOmNvbmZpZyBORlNEX1NDU0lMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTExLVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXFxcIlxcbmZzL25mc2QvS2NvbmZpZzoxMTI6XFx0ZGVwZW5kcyBvbiBORlNEX1Y0IFxcdTAwMjZcXHUwMDI2IEJMT0NLXFxuZnMvbmZzZC9LY29uZmlnOjExMzpcXHRzZWxlY3QgTkZTRF9QTkZTXFxuZnMvbmZzZC9LY29uZmlnLTExNC1cXHRzZWxlY3QgRVhQT1JURlNfQkxPQ0tfT1BTXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTIzLVxcbmZzL25mc2QvS2NvbmZpZzoxMjQ6Y29uZmlnIE5GU0RfRkxFWEZJTEVMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTI1LVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgRmxleCBGaWxlIGxheW91dHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjEyNjpcXHRkZXBlbmRzIG9uIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWc6MTI3OlxcdHNlbGVjdCBORlNEX1BORlNcXG5mcy9uZnNkL0tjb25maWctMTI4LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNDAtXFxuZnMvbmZzZC9LY29uZmlnOjE0MTpjb25maWcgTkZTRF9WNF8yX0lOVEVSX1NTQ1xcbmZzL25mc2QvS2NvbmZpZy0xNDItXFx0Ym9vbCBcXFwiTkZTdjQuMiBpbnRlciBzZXJ2ZXIgdG8gc2VydmVyIENPUFlcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE0MzpcXHRkZXBlbmRzIG9uIE5GU0RfVjQgXFx1MDAyNlxcdTAwMjYgTkZTX1Y0XzJcXG5mcy9uZnNkL0tjb25maWctMTQ0LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNTAtXFxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvS2NvbmZpZy0xNTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE1MzpcXHRkZXBlbmRzIG9uIE5GU0RfVjQgXFx1MDAyNlxcdTAwMjYgU0VDVVJJVFlcXG5mcy9uZnNkL0tjb25maWctMTU0LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNjMtXFxuZnMvbmZzZC9LY29uZmlnOjE2NDpjb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuZnMvbmZzZC9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE2NjpcXHRkZXBlbmRzIG9uIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctMTY3LVxcdGRlZmF1bHQgblxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE3OS1cXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcXG5mcy9uZnNkL0tjb25maWctMTgxLVxcdGJvb2wgXFxcIlN1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1xcXCJcXG5mcy9uZnNkL0tjb25maWc6MTgyOlxcdGRlcGVuZHMgb24gTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy0xODMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5mcy9uZnNkL01ha2VmaWxlPTY9Y2NmbGFncy15ICs9IC1JJChzcmMpXFx0XFx0XFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xcbmZzL25mc2QvTWFrZWZpbGUtNy1cXG5mcy9uZnNkL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX05GU0QpXFx0Kz0gbmZzZC5vXFxuZnMvbmZzZC9NYWtlZmlsZS05LVxcbi0tXFxuZnMvbmZzZC9NYWtlZmlsZT0xMz1uZnNkLXkgXFx0XFx0XFx0Kz0gbmZzc3ZjLm8gbmZzY3RsLm8gbmZzZmgubyB2ZnMubyBcXFxcXFxuLS1cXG5mcy9uZnNkL01ha2VmaWxlLTE2LVxcdFxcdFxcdCAgIG5ldGxpbmsub1xcbmZzL25mc2QvTWFrZWZpbGU6MTc6bmZzZC0kKENPTkZJR19ORlNEX1YyKSArPSBuZnNwcm9jLm8gbmZzeGRyLm9cXG5mcy9uZnNkL01ha2VmaWxlOjE4Om5mc2QtJChDT05GSUdfTkZTRF9WMl9BQ0wpICs9IG5mczJhY2wub1xcbmZzL25mc2QvTWFrZWZpbGU6MTk6bmZzZC0kKENPTkZJR19ORlNEX1YzX0FDTCkgKz0gbmZzM2FjbC5vXFxuZnMvbmZzZC9NYWtlZmlsZToyMDpuZnNkLSQoQ09ORklHX05GU0RfVjQpXFx0Kz0gbmZzNHByb2MubyBuZnM0eGRyLm8gbmZzNHN0YXRlLm8gbmZzNGlkbWFwLm8gXFxcXFxcbmZzL25mc2QvTWFrZWZpbGUtMjEtXFx0XFx0XFx0ICAgbmZzNGFjbC5vIG5mczRjYWxsYmFjay5vIG5mczRyZWNvdmVyLm8gbmZzNHhkcl9nZW4ub1xcbmZzL25mc2QvTWFrZWZpbGU6MjI6bmZzZC0kKENPTkZJR19ORlNEX1BORlMpICs9IG5mczRsYXlvdXRzLm9cXG5mcy9uZnNkL01ha2VmaWxlOjIzOm5mc2QtJChDT05GSUdfTkZTRF9CTE9DS0xBWU9VVCkgKz0gYmxvY2tsYXlvdXQubyBibG9ja2xheW91dHhkci5vXFxuZnMvbmZzZC9NYWtlZmlsZToyNDpuZnNkLSQoQ09ORklHX05GU0RfU0NTSUxBWU9VVCkgKz0gYmxvY2tsYXlvdXQubyBibG9ja2xheW91dHhkci5vXFxuZnMvbmZzZC9NYWtlZmlsZToyNTpuZnNkLSQoQ09ORklHX05GU0RfRkxFWEZJTEVMQVlPVVQpICs9IGZsZXhmaWxlbGF5b3V0Lm8gZmxleGZpbGVsYXlvdXR4ZHIub1xcbmZzL25mc2QvTWFrZWZpbGUtMjYtbmZzZC0kKENPTkZJR19ORlNfTE9DQUxJTykgKz0gbG9jYWxpby5vXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtNS1cXG5mcy9uZnNkL2F0dHI0Lmg6NjojaWZuZGVmIF9MSU5VWF9ORlNEX0FUVFI0X0hcXG5mcy9uZnNkL2F0dHI0Lmg6NzojZGVmaW5lIF9MSU5VWF9ORlNEX0FUVFI0X0hcXG5mcy9uZnNkL2F0dHI0LmgtOC1cXG4tLVxcbmZzL25mc2QvYXR0cjQuaC0xMi0vKlxcbmZzL25mc2QvYXR0cjQuaDoxMzogKiBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIG5vdCBpbXBsZW1lbnRlZCBieSBORlNEOlxcbmZzL25mc2QvYXR0cjQuaC0xNC0gKiAgICBBUkNISVZFICAgICAgIChkZXByZWNhdGVkIGFueXdheSlcXG4tLVxcbmZzL25mc2QvYXR0cjQuaC0yMC0gKi9cXG5mcy9uZnNkL2F0dHI0Lmg6MjE6I2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuZnMvbmZzZC9hdHRyNC5oLTIyLShGQVRUUjRfV09SRDBfU1VQUE9SVEVEX0FUVFJTICAgfCBGQVRUUjRfV09SRDBfVFlQRSAgICAgICAgIHwgRkFUVFI0X1dPUkQwX0ZIX0VYUElSRV9UWVBFICAgXFxcXFxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oLTMyLVxcbmZzL25mc2QvYXR0cjQuaDozMzojZGVmaW5lIE5GU0Q0X1NVUFBPUlRFRF9BVFRSU19XT1JEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtMzQtKEZBVFRSNF9XT1JEMV9NT0RFICAgICAgICAgICAgICB8IEZBVFRSNF9XT1JEMV9OT19UUlVOQyAgICAgfCBGQVRUUjRfV09SRDFfTlVNTElOS1MgICAgICAgICBcXFxcXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtNDAtXFxuZnMvbmZzZC9hdHRyNC5oOjQxOiNkZWZpbmUgTkZTRDRfU1VQUE9SVEVEX0FUVFJTX1dPUkQyIDBcXG5mcy9uZnNkL2F0dHI0LmgtNDItXFxuZnMvbmZzZC9hdHRyNC5oLTQzLS8qIDQuMSAqL1xcbmZzL25mc2QvYXR0cjQuaDo0NDojaWZkZWYgQ09ORklHX05GU0RfUE5GU1xcbmZzL25mc2QvYXR0cjQuaDo0NTojZGVmaW5lIFBORlNEX1NVUFBPUlRFRF9BVFRSU19XT1JEMVxcdEZBVFRSNF9XT1JEMV9GU19MQVlPVVRfVFlQRVNcXG5mcy9uZnNkL2F0dHI0Lmg6NDY6I2RlZmluZSBQTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDIgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC00Ny0oRkFUVFI0X1dPUkQyX0xBWU9VVF9CTEtTSVpFXFx0fCBGQVRUUjRfV09SRDJfTEFZT1VUX1RZUEVTKVxcbmZzL25mc2QvYXR0cjQuaC00OC0jZWxzZVxcbmZzL25mc2QvYXR0cjQuaDo0OTojZGVmaW5lIFBORlNEX1NVUFBPUlRFRF9BVFRSU19XT1JEMVxcdDBcXG5mcy9uZnNkL2F0dHI0Lmg6NTA6I2RlZmluZSBQTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDJcXHQwXFxuZnMvbmZzZC9hdHRyNC5oOjUxOiNlbmRpZiAvKiBDT05GSUdfTkZTRF9QTkZTICovXFxuZnMvbmZzZC9hdHRyNC5oLTUyLVxcbmZzL25mc2QvYXR0cjQuaDo1MzojZGVmaW5lIE5GU0Q0XzFfU1VQUE9SVEVEX0FUVFJTX1dPUkQwIFxcXFxcXG5mcy9uZnNkL2F0dHI0Lmg6NTQ6XFx0TkZTRDRfU1VQUE9SVEVEX0FUVFJTX1dPUkQwXFxuZnMvbmZzZC9hdHRyNC5oLTU1LVxcbmZzL25mc2QvYXR0cjQuaDo1NjojZGVmaW5lIE5GU0Q0XzFfU1VQUE9SVEVEX0FUVFJTX1dPUkQxIFxcXFxcXG5mcy9uZnNkL2F0dHI0Lmg6NTc6XFx0KE5GU0Q0X1NVUFBPUlRFRF9BVFRSU19XT1JEMVxcdHwgUE5GU0RfU1VQUE9SVEVEX0FUVFJTX1dPUkQxKVxcbmZzL25mc2QvYXR0cjQuaC01OC1cXG5mcy9uZnNkL2F0dHI0Lmg6NTk6I2RlZmluZSBORlNENF8xX1NVUFBPUlRFRF9BVFRSU19XT1JEMiBcXFxcXFxuZnMvbmZzZC9hdHRyNC5oOjYwOlxcdChORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDJcXHR8IFBORlNEX1NVUFBPUlRFRF9BVFRSU19XT1JEMiB8IFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtNjEtXFx0IEZBVFRSNF9XT1JEMl9TVVBQQVRUUl9FWENMQ1JFQVQpXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtNjMtLyogNC4yICovXFxuZnMvbmZzZC9hdHRyNC5oOjY0OiNpZmRlZiBDT05GSUdfTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvYXR0cjQuaDo2NTojZGVmaW5lIE5GU0Q0XzJfU0VDVVJJVFlfQVRUUlNcXHRcXHRGQVRUUjRfV09SRDJfU0VDVVJJVFlfTEFCRUxcXG5mcy9uZnNkL2F0dHI0LmgtNjYtI2Vsc2VcXG5mcy9uZnNkL2F0dHI0Lmg6Njc6I2RlZmluZSBORlNENF8yX1NFQ1VSSVRZX0FUVFJTXFx0XFx0MFxcbmZzL25mc2QvYXR0cjQuaC02OC0jZW5kaWZcXG5mcy9uZnNkL2F0dHI0LmgtNjktXFxuZnMvbmZzZC9hdHRyNC5oOjcwOiNpZmRlZiBDT05GSUdfTkZTRF9WNF9QT1NJWF9BQ0xTXFxuZnMvbmZzZC9hdHRyNC5oOjcxOiNkZWZpbmUgTkZTRDRfMl9QT1NJWF9BQ0xfQVRUUlMgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC03Mi1cXHQoRkFUVFI0X1dPUkQyX0FDTF9UUlVFRk9STSB8IFxcXFxcXG4tLVxcbmZzL25mc2QvYXR0cjQuaC03Ni0jZWxzZVxcbmZzL25mc2QvYXR0cjQuaDo3NzojZGVmaW5lIE5GU0Q0XzJfUE9TSVhfQUNMX0FUVFJTXFx0XFx0MFxcbmZzL25mc2QvYXR0cjQuaC03OC0jZW5kaWZcXG5mcy9uZnNkL2F0dHI0LmgtNzktXFxuZnMvbmZzZC9hdHRyNC5oOjgwOiNkZWZpbmUgTkZTRDRfMl9TVVBQT1JURURfQVRUUlNfV09SRDIgXFxcXFxcbmZzL25mc2QvYXR0cjQuaDo4MTpcXHQoTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDIgfCBcXFxcXFxuZnMvbmZzZC9hdHRyNC5oLTgyLVxcdEZBVFRSNF9XT1JEMl9NT0RFX1VNQVNLIHwgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC04My1cXHRGQVRUUjRfV09SRDJfQ0xPTkVfQkxLU0laRSB8IFxcXFxcXG5mcy9uZnNkL2F0dHI0Lmg6ODQ6XFx0TkZTRDRfMl9TRUNVUklUWV9BVFRSUyB8IFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtODUtXFx0RkFUVFI0X1dPUkQyX1hBVFRSX1NVUFBPUlQgfCBcXFxcXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtODgtXFx0RkFUVFI0X1dPUkQyX09QRU5fQVJHVU1FTlRTIHwgXFxcXFxcbmZzL25mc2QvYXR0cjQuaDo4OTpcXHRORlNENF8yX1BPU0lYX0FDTF9BVFRSUylcXG5mcy9uZnNkL2F0dHI0LmgtOTAtXFxuZnMvbmZzZC9hdHRyNC5oLTkxLS8qIFRoZXNlIHdpbGwgcmV0dXJuIEVSUl9JTlZBTCBpZiBzcGVjaWZpZWQgaW4gR0VUQVRUUiBvciBSRUFERElSLiAqL1xcbmZzL25mc2QvYXR0cjQuaDo5MjojZGVmaW5lIE5GU0RfV1JJVEVPTkxZX0FUVFJTX1dPUkQxIFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtOTMtXFx0KEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgICB8IEZBVFRSNF9XT1JEMV9USU1FX01PRElGWV9TRVQpXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtOTktICovXFxuZnMvbmZzZC9hdHRyNC5oOjEwMDojZGVmaW5lIE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQwIFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtMTAxLVxcdChGQVRUUjRfV09SRDBfU0laRSB8IEZBVFRSNF9XT1JEMF9BQ0wpXFxuZnMvbmZzZC9hdHRyNC5oOjEwMjojZGVmaW5lIE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQxIFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtMTAzLVxcdChGQVRUUjRfV09SRDFfTU9ERSB8IEZBVFRSNF9XT1JEMV9PV05FUiB8IEZBVFRSNF9XT1JEMV9PV05FUl9HUk9VUCBcXFxcXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtMTA1LVxcdHwgRkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZX1NFVClcXG5mcy9uZnNkL2F0dHI0Lmg6MTA2OiNpZmRlZiBDT05GSUdfTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvYXR0cjQuaC0xMDctI2RlZmluZSBNQVlCRV9GQVRUUjRfV09SRDJfU0VDVVJJVFlfTEFCRUwgXFxcXFxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oLTExMS0jZW5kaWZcXG5mcy9uZnNkL2F0dHI0Lmg6MTEyOiNpZmRlZiBDT05GSUdfTkZTRF9WNF9QT1NJWF9BQ0xTXFxuZnMvbmZzZC9hdHRyNC5oLTExMy0jZGVmaW5lIE1BWUJFX0ZBVFRSNF9XT1JEMl9QT1NJWF9BQ0xfQVRUUlMgXFxcXFxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oLTExNy0jZW5kaWZcXG5mcy9uZnNkL2F0dHI0Lmg6MTE4OiNkZWZpbmUgTkZTRF9XUklURUFCTEVfQVRUUlNfV09SRDIgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC0xMTktXFx0KEZBVFRSNF9XT1JEMl9NT0RFX1VNQVNLIFxcXFxcXG4tLVxcbmZzL25mc2QvYXR0cjQuaC0xMjUtXFxuZnMvbmZzZC9hdHRyNC5oOjEyNjojZGVmaW5lIE5GU0RfU1VQUEFUVFJfRVhDTENSRUFUX1dPUkQwIFxcXFxcXG5mcy9uZnNkL2F0dHI0Lmg6MTI3OlxcdE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQwXFxuZnMvbmZzZC9hdHRyNC5oLTEyOC0vKlxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oLTEzMS0gKi9cXG5mcy9uZnNkL2F0dHI0Lmg6MTMyOiNkZWZpbmUgTkZTRF9TVVBQQVRUUl9FWENMQ1JFQVRfV09SRDEgXFxcXFxcbmZzL25mc2QvYXR0cjQuaDoxMzM6XFx0KE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQxIFxcdTAwMjYgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC0xMzQtXFx0IH4oRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTX1NFVCB8IEZBVFRSNF9XT1JEMV9USU1FX01PRElGWV9TRVQpKVxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oLTE0My0gKi9cXG5mcy9uZnNkL2F0dHI0Lmg6MTQ0OiNkZWZpbmUgTkZTRF9TVVBQQVRUUl9FWENMQ1JFQVRfV09SRDIgXFxcXFxcbmZzL25mc2QvYXR0cjQuaDoxNDU6XFx0KE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQyIFxcdTAwMjYgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC0xNDYtXFx0fihGQVRUUjRfV09SRDJfVElNRV9ERUxFR19BQ0NFU1MgfCBGQVRUUjRfV09SRDJfVElNRV9ERUxFR19NT0RJRlkpKVxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oPTE1Nz1zdGF0aWMgaW5saW5lIGJvb2wgbmZzZF9hdHRyc19zdXBwb3J0ZWQodTMyIG1pbm9ydmVyc2lvbiwgY29uc3QgdTMyICpibXZhbClcXG4tLVxcbmZzL25mc2QvYXR0cjQuaC0xNjEtXFxuZnMvbmZzZC9hdHRyNC5oOjE2MjojZW5kaWYgLyogX0xJTlVYX05GU0RfQVRUUjRfSCAqL1xcbi0tXFxuZnMvbmZzZC9hdXRoLmgtNy1cXG5mcy9uZnNkL2F1dGguaDo4OiNpZm5kZWYgTElOVVhfTkZTRF9BVVRIX0hcXG5mcy9uZnNkL2F1dGguaDo5OiNkZWZpbmUgTElOVVhfTkZTRF9BVVRIX0hcXG5mcy9uZnNkL2F1dGguaC0xMC1cXG4tLVxcbmZzL25mc2QvYXV0aC5oPTIxPXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbmZzZF91c2VyX25hbWVzcGFjZShjb25zdCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTtcXG5mcy9uZnNkL2F1dGguaC0yMi1cXG5mcy9uZnNkL2F1dGguaDoyMzojZW5kaWYgLyogTElOVVhfTkZTRF9BVVRIX0ggKi9cXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0xNy1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MTg6I2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZXFx0TkZTRERCR19QTkZTXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTE5LVxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTE3OT1uZnNkNF9ibG9ja19jb21taXRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNkNF9sYXlvdXRjb21taXQgKmxjcCxcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0xOTktXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjIwMDojaWZkZWYgQ09ORklHX05GU0RfQkxPQ0tMQVlPVVRcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMjAxLXN0YXRpYyBpbnRcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYz0yNTI9Y29uc3Qgc3RydWN0IG5mc2Q0X2xheW91dF9vcHMgYmxfbGF5b3V0X29wcyA9IHtcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yNjktfTtcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MjcwOiNlbmRpZiAvKiBDT05GSUdfTkZTRF9CTE9DS0xBWU9VVCAqL1xcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yNzEtXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjI3MjojaWZkZWYgQ09ORklHX05GU0RfU0NTSUxBWU9VVFxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yNzMtXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjI3NDojZGVmaW5lIE5GU0RfTURTX1BSX0ZFTkNFRFxcdFhBX01BUktfMFxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yNzUtXFxuLS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9Mjg0PXN0YXRpYyBpbmxpbmUgaW50IG5mc2Q0X3Njc2lfZmVuY2VfaW5zZXJ0KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwLFxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTI5Mi1cXHRpZiAocmV0ID09IC1FQlVTWSkge1xcbmZzL25mc2QvYmxvY2tsYXlvdXQuYzoyOTM6XFx0XFx0X194YV9jbGVhcl9tYXJrKHhhLCBkZXZpY2UsIE5GU0RfTURTX1BSX0ZFTkNFRCk7XFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTI5NC1cXHRcXHRyZXQgPSAwO1xcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTMwMT1zdGF0aWMgaW5saW5lIGJvb2wgbmZzZDRfc2NzaV9mZW5jZV9zZXQoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIGRldl90IGRldmljZSlcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0zMDYtXFx0eGFfbG9jayh4YSk7XFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjMwNzpcXHRza2lwID0geGFfZ2V0X21hcmsoeGEsIGRldmljZSwgTkZTRF9NRFNfUFJfRkVOQ0VEKTtcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzA4LVxcdGlmICghc2tpcClcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MzA5OlxcdFxcdF9feGFfc2V0X21hcmsoeGEsIGRldmljZSwgTkZTRF9NRFNfUFJfRkVOQ0VEKTtcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzEwLVxcdHhhX3VubG9jayh4YSk7XFxuLS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9MzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnNkNF9zY3NpX2ZlbmNlX2NsZWFyKHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwLCBkZXZfdCBkZXZpY2UpXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTMxNS17XFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjMxNjpcXHR4YV9jbGVhcl9tYXJrKFxcdTAwMjZjbHAtXFx1MDAzZWNsX2Rldl9mZW5jZXMsIGRldmljZSwgTkZTRF9NRFNfUFJfRkVOQ0VEKTtcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzE3LX1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzE4LVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYzozMTk6I2RlZmluZSBORlNEX01EU19QUl9LRVlcXHRcXHQweDAxMDAwMDAwMDAwMDAwMDBVTExcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzIwLVxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTM1Nj1uZnNkNF9ibG9ja19nZXRfZGV2aWNlX2luZm9fc2NzaShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTM5MS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MzkyOlxcdHJldCA9IG9wcy1cXHUwMDNlcHJfcmVnaXN0ZXIoc2ItXFx1MDAzZXNfYmRldiwgMCwgTkZTRF9NRFNfUFJfS0VZLCB0cnVlKTtcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzkzLVxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0zOTgtXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjM5OTpcXHRyZXQgPSBvcHMtXFx1MDAzZXByX3Jlc2VydmUoc2ItXFx1MDAzZXNfYmRldiwgTkZTRF9NRFNfUFJfS0VZLFxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00MDAtXFx0XFx0XFx0UFJfRVhDTFVTSVZFX0FDQ0VTU19SRUdfT05MWSwgMCk7XFxuLS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9NDI2PW5mc2Q0X3Njc2lfcHJvY19sYXlvdXRjb21taXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHN2Y19ycXN0ICpycXN0cCxcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00NDYtICogYmxvY2sgZGV2aWNlLiBJZiBhIGZlbmNlIG9wZXJhdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3YWl0IGZvclxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYzo0NDc6ICogaXQgdG8gY29tcGxldGUgYmVmb3JlIGNoZWNraW5nIHRoZSBORlNEX01EU19QUl9GRU5DRUQgZmxhZy4gT25jZSB0aGVcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6NDQ4OiAqIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSwgY2hlY2sgdGhlIGZsYWcuIElmIE5GU0RfTURTX1BSX0ZFTkNFRCBpcyBzZXQsXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTQ0OS0gKiB1cGRhdGUgdGhlIGxheW91dCBzdGF0ZWlkIGJ5IHNldHRpbmcgdGhlIGxzX2ZlbmNlZCBmbGFnIHRvIGluZGljYXRlXFxuLS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9NDU5PW5mc2Q0X3Njc2lfZmVuY2VfY2xpZW50KHN0cnVjdCBuZnM0X2xheW91dF9zdGF0ZWlkICpscywgc3RydWN0IG5mc2RfZmlsZSAqZmlsZSlcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00NzEtXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjQ3MjpcXHRzdGF0dXMgPSBiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2Vmb3BzLVxcdTAwM2Vwcl9vcHMtXFx1MDAzZXByX3ByZWVtcHQoYmRldiwgTkZTRF9NRFNfUFJfS0VZLFxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00NzMtXFx0XFx0XFx0bmZzZDRfc2NzaV9wcl9rZXkoY2xwKSxcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYz01MDc9Y29uc3Qgc3RydWN0IG5mc2Q0X2xheW91dF9vcHMgc2NzaV9sYXlvdXRfb3BzID0ge1xcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTUyNS19O1xcbmZzL25mc2QvYmxvY2tsYXlvdXQuYzo1MjY6I2VuZGlmIC8qIENPTkZJR19ORlNEX1NDU0lMQVlPVVQgKi9cXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuYy0xMy1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0eGRyLmM6MTQ6I2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZXFx0TkZTRERCR19QTkZTXFxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5jLTE1LVxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0eGRyLmg6MjojaWZuZGVmIF9ORlNEX0JMT0NLTEFZT1VUWERSX0hcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0eGRyLmg6MzojZGVmaW5lIF9ORlNEX0JMT0NLTEFZT1VUWERSX0ggMVxcbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuaC00LVxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oPTczPV9fYmUzMiBuZnNkNF9zY3NpX2RlY29kZV9sYXlvdXR1cGRhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkcixcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuaC03NS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0eGRyLmg6NzY6I2VuZGlmIC8qIF9ORlNEX0JMT0NLTEFZT1VUWERSX0ggKi9cXG4tLVxcbmZzL25mc2QvY3VycmVudF9zdGF0ZWlkLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmZzL25mc2QvY3VycmVudF9zdGF0ZWlkLmg6MjojaWZuZGVmIF9ORlNENF9DVVJSRU5UX1NUQVRFX0hcXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oOjM6I2RlZmluZSBfTkZTRDRfQ1VSUkVOVF9TVEFURV9IXFxuZnMvbmZzZC9jdXJyZW50X3N0YXRlaWQuaC00LVxcbi0tXFxuZnMvbmZzZC9jdXJyZW50X3N0YXRlaWQuaD0zOD1leHRlcm4gdm9pZCBuZnNkNF9nZXRfd3JpdGVzdGF0ZWlkKHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLFxcbi0tXFxuZnMvbmZzZC9jdXJyZW50X3N0YXRlaWQuaC00MC1cXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oOjQxOiNlbmRpZiAgIC8qIF9ORlNENF9DVVJSRU5UX1NUQVRFX0ggKi9cXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jPTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKm5mc2RfdG9wX2RpciBfX3JlYWRfbW9zdGx5O1xcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTctICogYWxsb3dlZCkuIFRoaXMgc2V0dGluZyB0YWtlcyBpbW1lZGlhdGUgZWZmZWN0IGZvciBhbGwgTkZTXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6MTg6ICogdmVyc2lvbnMsIGFsbCBleHBvcnRzLCBhbmQgaW4gYWxsIE5GU0QgbmV0IG5hbWVzcGFjZXMuXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTktICovXFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYz0yNz1zdGF0aWMgaW50IG5mc2RfZHNyX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMzMtXFx0XFx0ICovXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6MzQ6XFx0XFx0bmZzZF9pb19jYWNoZV9yZWFkID0gTkZTRF9JT19CVUZGRVJFRDtcXG5mcy9uZnNkL2RlYnVnZnMuYy0zNS1cXHR9XFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYz0zOT1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUobmZzZF9kc3JfZm9wcywgbmZzZF9kc3JfZ2V0LCBuZnNkX2Rzcl9zZXQsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jLTQ5LSAqIFRoaXMgc2V0dGluZyB0YWtlcyBpbW1lZGlhdGUgZWZmZWN0IGZvciBhbGwgTkZTIHZlcnNpb25zLFxcbmZzL25mc2QvZGVidWdmcy5jOjUwOiAqIGFsbCBleHBvcnRzLCBhbmQgaW4gYWxsIE5GU0QgbmV0IG5hbWVzcGFjZXMuXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNTEtICovXFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYz01OT1zdGF0aWMgaW50IG5mc2RfaW9fY2FjaGVfcmVhZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jLTYzLVxcdHN3aXRjaCAodmFsKSB7XFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6NjQ6XFx0Y2FzZSBORlNEX0lPX0JVRkZFUkVEOlxcbmZzL25mc2QvZGVidWdmcy5jOjY1OlxcdFxcdG5mc2RfaW9fY2FjaGVfcmVhZCA9IE5GU0RfSU9fQlVGRkVSRUQ7XFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNjYtXFx0XFx0YnJlYWs7XFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6Njc6XFx0Y2FzZSBORlNEX0lPX0RPTlRDQUNIRTpcXG5mcy9uZnNkL2RlYnVnZnMuYzo2ODpcXHRjYXNlIE5GU0RfSU9fRElSRUNUOlxcbmZzL25mc2QvZGVidWdmcy5jLTY5LVxcdFxcdC8qXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNzAtXFx0XFx0ICogTXVzdCBkaXNhYmxlIHNwbGljZV9yZWFkIHdoZW4gZW5hYmxpbmdcXG5mcy9uZnNkL2RlYnVnZnMuYzo3MTpcXHRcXHQgKiBORlNEX0lPX0RPTlRDQUNIRS5cXG5mcy9uZnNkL2RlYnVnZnMuYy03Mi1cXHRcXHQgKi9cXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jPTg0PURFRklORV9ERUJVR0ZTX0FUVFJJQlVURShuZnNkX2lvX2NhY2hlX3JlYWRfZm9wcywgbmZzZF9pb19jYWNoZV9yZWFkX2dldCxcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jLTk0LSAqIFRoaXMgc2V0dGluZyB0YWtlcyBpbW1lZGlhdGUgZWZmZWN0IGZvciBhbGwgTkZTIHZlcnNpb25zLFxcbmZzL25mc2QvZGVidWdmcy5jOjk1OiAqIGFsbCBleHBvcnRzLCBhbmQgaW4gYWxsIE5GU0QgbmV0IG5hbWVzcGFjZXMuXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtOTYtICovXFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYz0xMDQ9c3RhdGljIGludCBuZnNkX2lvX2NhY2hlX3dyaXRlX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTA4LVxcdHN3aXRjaCAodmFsKSB7XFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6MTA5OlxcdGNhc2UgTkZTRF9JT19CVUZGRVJFRDpcXG5mcy9uZnNkL2RlYnVnZnMuYzoxMTA6XFx0Y2FzZSBORlNEX0lPX0RPTlRDQUNIRTpcXG5mcy9uZnNkL2RlYnVnZnMuYzoxMTE6XFx0Y2FzZSBORlNEX0lPX0RJUkVDVDpcXG5mcy9uZnNkL2RlYnVnZnMuYy0xMTItXFx0XFx0bmZzZF9pb19jYWNoZV93cml0ZSA9IHZhbDtcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jPTEzMT12b2lkIG5mc2RfZGVidWdmc19pbml0KHZvaWQpXFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYy0xNDItXFx0XFx0XFx0ICAgIFxcdTAwMjZuZnNkX2lvX2NhY2hlX3dyaXRlX2ZvcHMpO1xcbmZzL25mc2QvZGVidWdmcy5jOjE0MzojaWZkZWYgQ09ORklHX05GU0RfVjRcXG5mcy9uZnNkL2RlYnVnZnMuYy0xNDQtXFx0ZGVidWdmc19jcmVhdGVfYm9vbChcXFwiZGVsZWdhdGVkX3RpbWVzdGFtcHNcXFwiLCAwNjQ0LCBuZnNkX3RvcF9kaXIsXFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTMwLVxcbmZzL25mc2QvZXhwb3J0LmM6MzE6I2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZXFx0TkZTRERCR19FWFBPUlRcXG5mcy9uZnNkL2V4cG9ydC5jLTMyLVxcbi0tXFxuZnMvbmZzZC9leHBvcnQuYz0yNTg9c3RhdGljIGludCBleHBrZXlfbm90aWZ5KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaClcXG5mcy9uZnNkL2V4cG9ydC5jLTI1OS17XFxuZnMvbmZzZC9leHBvcnQuYzoyNjA6XFx0cmV0dXJuIG5mc2RfY2FjaGVfbm90aWZ5KGNkLCBoLCBORlNEX0NBQ0hFX1RZUEVfRVhQS0VZKTtcXG5mcy9uZnNkL2V4cG9ydC5jLTI2MS19XFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jPTMzND1pbnQgbmZzZF9ubF9leHBrZXlfZ2V0X3JlcXNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTM3Ni1cXHRcXHRcXHQgIGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgXFx1MDAyNm5mc2RfbmxfZmFtaWx5LFxcbmZzL25mc2QvZXhwb3J0LmM6Mzc3OlxcdFxcdFxcdCAgTkxNX0ZfTVVMVEksIE5GU0RfQ01EX0VYUEtFWV9HRVRfUkVRUyk7XFxuZnMvbmZzZC9leHBvcnQuYy0zNzgtXFx0aWYgKCFoZHIpIHtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtMzg5LVxcbmZzL25mc2QvZXhwb3J0LmM6MzkwOlxcdFxcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIE5GU0RfQV9FWFBLRVlfUkVRU19SRVFVRVNUUyk7XFxuZnMvbmZzZC9leHBvcnQuYy0zOTEtXFx0XFx0aWYgKCFuZXN0KVxcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy0zOTMtXFxuZnMvbmZzZC9leHBvcnQuYzozOTQ6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkZTRF9BX0VYUEtFWV9TRVFOTyxcXG5mcy9uZnNkL2V4cG9ydC5jLTM5NS1cXHRcXHRcXHRcXHQgICAgICBzZXFub3NbaV0sIDApIHx8XFxuZnMvbmZzZC9leHBvcnQuYzozOTY6XFx0XFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgTkZTRF9BX0VYUEtFWV9DTElFTlQsXFxuZnMvbmZzZC9leHBvcnQuYy0zOTctXFx0XFx0XFx0XFx0ICAgZWstXFx1MDAzZWVrX2NsaWVudC1cXHUwMDNlbmFtZSkgfHxcXG5mcy9uZnNkL2V4cG9ydC5jOjM5ODpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIE5GU0RfQV9FWFBLRVlfRlNJRFRZUEUsXFxuZnMvbmZzZC9leHBvcnQuYy0zOTktXFx0XFx0XFx0ICAgICAgIGVrLVxcdTAwM2Vla19mc2lkdHlwZSkgfHxcXG5mcy9uZnNkL2V4cG9ydC5jOjQwMDpcXHRcXHQgICAgbmxhX3B1dChza2IsIE5GU0RfQV9FWFBLRVlfRlNJRCxcXG5mcy9uZnNkL2V4cG9ydC5jLTQwMS1cXHRcXHRcXHQgICAga2V5X2xlbihlay1cXHUwMDNlZWtfZnNpZHR5cGUpLCBlay1cXHUwMDNlZWtfZnNpZCkpIHtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmM9NDQwPXN0YXRpYyBpbnQgbmZzZF9ubF9wYXJzZV9vbmVfZXhwa2V5KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLFxcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy00NDIte1xcbmZzL25mc2QvZXhwb3J0LmM6NDQzOlxcdHN0cnVjdCBubGF0dHIgKnRiW05GU0RfQV9FWFBLRVlfUEFUSCArIDFdO1xcbmZzL25mc2QvZXhwb3J0LmMtNDQ0LVxcdHN0cnVjdCBhdXRoX2RvbWFpbiAqZG9tID0gTlVMTDtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDUxLVxcbmZzL25mc2QvZXhwb3J0LmM6NDUyOlxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5GU0RfQV9FWFBLRVlfUEFUSCwgYXR0cixcXG5mcy9uZnNkL2V4cG9ydC5jLTQ1My1cXHRcXHRcXHQgICAgICAgbmZzZF9leHBrZXlfbmxfcG9saWN5LCBOVUxMKTtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDU3LVxcdC8qIGNsaWVudCAocmVxdWlyZWQpICovXFxuZnMvbmZzZC9leHBvcnQuYzo0NTg6XFx0aWYgKCF0YltORlNEX0FfRVhQS0VZX0NMSUVOVF0pXFxuZnMvbmZzZC9leHBvcnQuYy00NTktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZnMvbmZzZC9leHBvcnQuYy00NjAtXFxuZnMvbmZzZC9leHBvcnQuYzo0NjE6XFx0ZG9tID0gYXV0aF9kb21haW5fZmluZChubGFfZGF0YSh0YltORlNEX0FfRVhQS0VZX0NMSUVOVF0pKTtcXG5mcy9uZnNkL2V4cG9ydC5jLTQ2Mi1cXHRpZiAoIWRvbSlcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDY1LVxcdC8qIGZzaWR0eXBlIChyZXF1aXJlZCkgKi9cXG5mcy9uZnNkL2V4cG9ydC5jOjQ2NjpcXHRpZiAoIXRiW05GU0RfQV9FWFBLRVlfRlNJRFRZUEVdKSB7XFxuZnMvbmZzZC9leHBvcnQuYy00NjctXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDY5LVxcdH1cXG5mcy9uZnNkL2V4cG9ydC5jOjQ3MDpcXHRmc2lkdHlwZSA9IG5sYV9nZXRfdTgodGJbTkZTRF9BX0VYUEtFWV9GU0lEVFlQRV0pO1xcbmZzL25mc2QvZXhwb3J0LmMtNDcxLVxcdGlmIChrZXlfbGVuKGZzaWR0eXBlKSA9PSAwKSB7XFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTQ3Ni1cXHQvKiBmc2lkIChyZXF1aXJlZCkgKi9cXG5mcy9uZnNkL2V4cG9ydC5jOjQ3NzpcXHRpZiAoIXRiW05GU0RfQV9FWFBLRVlfRlNJRF0pIHtcXG5mcy9uZnNkL2V4cG9ydC5jLTQ3OC1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy00ODAtXFx0fVxcbmZzL25mc2QvZXhwb3J0LmM6NDgxOlxcdGZzaWRfbGVuID0gbmxhX2xlbih0YltORlNEX0FfRVhQS0VZX0ZTSURdKTtcXG5mcy9uZnNkL2V4cG9ydC5jLTQ4Mi1cXHRpZiAoZnNpZF9sZW4gIT0ga2V5X2xlbihmc2lkdHlwZSkpIHtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDg3LVxcdC8qIGV4cGlyeSAocmVxdWlyZWQsIHdhbGxjbG9jayBzZWNvbmRzKSAqL1xcbmZzL25mc2QvZXhwb3J0LmM6NDg4OlxcdGlmICghdGJbTkZTRF9BX0VYUEtFWV9FWFBJUlldKSB7XFxuZnMvbmZzZC9leHBvcnQuYy00ODktXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDk0LVxcdGdldGJvb3R0aW1lNjQoXFx1MDAyNmJvb3QpO1xcbmZzL25mc2QvZXhwb3J0LmM6NDk1OlxcdGtleS5oLmV4cGlyeV90aW1lID0gbmxhX2dldF91NjQodGJbTkZTRF9BX0VYUEtFWV9FWFBJUlldKSAtXFxuZnMvbmZzZC9leHBvcnQuYy00OTYtXFx0XFx0XFx0ICAgIGJvb3QudHZfc2VjO1xcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy00OTgtXFx0a2V5LmVrX2ZzaWR0eXBlID0gZnNpZHR5cGU7XFxuZnMvbmZzZC9leHBvcnQuYzo0OTk6XFx0bWVtY3B5KGtleS5la19mc2lkLCBubGFfZGF0YSh0YltORlNEX0FfRVhQS0VZX0ZTSURdKSwgZnNpZF9sZW4pO1xcbmZzL25mc2QvZXhwb3J0LmMtNTAwLVxcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy01MDYtXFxuZnMvbmZzZC9leHBvcnQuYzo1MDc6XFx0aWYgKHRiW05GU0RfQV9FWFBLRVlfTkVHQVRJVkVdKSB7XFxuZnMvbmZzZC9leHBvcnQuYy01MDgtXFx0XFx0c2V0X2JpdChDQUNIRV9ORUdBVElWRSwgXFx1MDAyNmtleS5oLmZsYWdzKTtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNTEzLVxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuZnMvbmZzZC9leHBvcnQuYzo1MTQ6XFx0fSBlbHNlIGlmICh0YltORlNEX0FfRVhQS0VZX1BBVEhdKSB7XFxuZnMvbmZzZC9leHBvcnQuYzo1MTU6XFx0XFx0ZXJyID0ga2Vybl9wYXRoKG5sYV9kYXRhKHRiW05GU0RfQV9FWFBLRVlfUEFUSF0pLCAwLFxcbmZzL25mc2QvZXhwb3J0LmMtNTE2LVxcdFxcdFxcdFxcdFxcdTAwMjZrZXkuZWtfcGF0aCk7XFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTUyMS1cXHRcXHRcXHR0cmFjZV9uZnNkX2V4cGtleV91cGRhdGUoZWssXFxuZnMvbmZzZC9leHBvcnQuYzo1MjI6XFx0XFx0XFx0XFx0XFx0bmxhX2RhdGEodGJbTkZTRF9BX0VYUEtFWV9QQVRIXSkpO1xcbmZzL25mc2QvZXhwb3J0LmMtNTIzLVxcdFxcdGVsc2VcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmM9NTUxPWludCBuZnNkX25sX2V4cGtleV9zZXRfcmVxc19kb2l0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTU2OC1cXG5mcy9uZnNkL2V4cG9ydC5jOjU2OTpcXHRubG1zZ19mb3JfZWFjaF9hdHRyX3R5cGUoYXR0ciwgTkZTRF9BX0VYUEtFWV9SRVFTX1JFUVVFU1RTLFxcbmZzL25mc2QvZXhwb3J0LmMtNTcwLVxcdFxcdFxcdFxcdCBpbmZvLVxcdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkge1xcbi0tXFxuZnMvbmZzZC9leHBvcnQuYz02NjA9aW50IG5mc2Rfbmxfc3ZjX2V4cG9ydF9nZXRfcmVxc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNzA0LVxcdFxcdFxcdCAgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBcXHUwMDI2bmZzZF9ubF9mYW1pbHksXFxuZnMvbmZzZC9leHBvcnQuYzo3MDU6XFx0XFx0XFx0ICBOTE1fRl9NVUxUSSwgTkZTRF9DTURfU1ZDX0VYUE9SVF9HRVRfUkVRUyk7XFxuZnMvbmZzZC9leHBvcnQuYy03MDYtXFx0aWYgKCFoZHIpIHtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNzIzLVxcdFxcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsXFxuZnMvbmZzZC9leHBvcnQuYzo3MjQ6XFx0XFx0XFx0XFx0ICAgICAgTkZTRF9BX1NWQ19FWFBPUlRfUkVRU19SRVFVRVNUUyk7XFxuZnMvbmZzZC9leHBvcnQuYy03MjUtXFx0XFx0aWYgKCFuZXN0KVxcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy03MjctXFxuZnMvbmZzZC9leHBvcnQuYzo3Mjg6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkZTRF9BX1NWQ19FWFBPUlRfU0VRTk8sXFxuZnMvbmZzZC9leHBvcnQuYy03MjktXFx0XFx0XFx0XFx0ICAgICAgc2Vxbm9zW2ldLCAwKSB8fFxcbmZzL25mc2QvZXhwb3J0LmM6NzMwOlxcdFxcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIE5GU0RfQV9TVkNfRVhQT1JUX0NMSUVOVCxcXG5mcy9uZnNkL2V4cG9ydC5jLTczMS1cXHRcXHRcXHRcXHQgICBleHAtXFx1MDAzZWV4X2NsaWVudC1cXHUwMDNlbmFtZSkgfHxcXG5mcy9uZnNkL2V4cG9ydC5jOjczMjpcXHRcXHQgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBORlNEX0FfU1ZDX0VYUE9SVF9QQVRILCBwdGgpKSB7XFxuZnMvbmZzZC9leHBvcnQuYy03MzMtXFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTc2My0gKiBuZnNkX25sX3BhcnNlX2ZzbG9jYXRpb25zIC0gcGFyc2UgZnNsb2NhdGlvbnMgZnJvbSBuZXRsaW5rXFxuZnMvbmZzZC9leHBvcnQuYzo3NjQ6ICogQGF0dHI6IE5GU0RfQV9TVkNfRVhQT1JUX0ZTTE9DQVRJT05TIG5lc3RlZCBhdHRyaWJ1dGVcXG5mcy9uZnNkL2V4cG9ydC5jLTc2NS0gKiBAZnNsb2M6IGZzbG9jYXRpb25zIHN0cnVjdCB0byBmaWxsIGluXFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jPTc2OT1zdGF0aWMgaW50IG5mc2RfbmxfcGFyc2VfZnNsb2NhdGlvbnMoc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNzc5LVxcdC8qIENvdW50IGxvY2F0aW9ucyBmaXJzdCAqL1xcbmZzL25mc2QvZXhwb3J0LmM6NzgwOlxcdG5sYV9mb3JfZWFjaF9uZXN0ZWRfdHlwZShsb2NfYXR0ciwgTkZTRF9BX0ZTTE9DQVRJT05TX0xPQ0FUSU9OLFxcbmZzL25mc2QvZXhwb3J0LmMtNzgxLVxcdFxcdFxcdFxcdCBhdHRyLCByZW0pXFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTc5My1cXG5mcy9uZnNkL2V4cG9ydC5jOjc5NDpcXHRubGFfZm9yX2VhY2hfbmVzdGVkX3R5cGUobG9jX2F0dHIsIE5GU0RfQV9GU0xPQ0FUSU9OU19MT0NBVElPTixcXG5mcy9uZnNkL2V4cG9ydC5jLTc5NS1cXHRcXHRcXHRcXHQgYXR0ciwgcmVtKSB7XFxuZnMvbmZzZC9leHBvcnQuYzo3OTY6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTkZTRF9BX0ZTTE9DQVRJT05fUEFUSCArIDFdO1xcbmZzL25mc2QvZXhwb3J0LmMtNzk3LVxcdFxcdHN0cnVjdCBuZnNkNF9mc19sb2NhdGlvbiAqbG9jO1xcbmZzL25mc2QvZXhwb3J0LmMtNzk4LVxcbmZzL25mc2QvZXhwb3J0LmM6Nzk5OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5GU0RfQV9GU0xPQ0FUSU9OX1BBVEgsIGxvY19hdHRyLFxcbmZzL25mc2QvZXhwb3J0LmMtODAwLVxcdFxcdFxcdFxcdCAgICAgICBuZnNkX2ZzbG9jYXRpb25fbmxfcG9saWN5LCBOVUxMKTtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtODAzLVxcbmZzL25mc2QvZXhwb3J0LmM6ODA0OlxcdFxcdGlmICghdGJbTkZTRF9BX0ZTTE9DQVRJT05fSE9TVF0gfHxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MDkuMDM5Mzc4MTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNjE5MjIwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDpcblxuKipJbnZlc3RpZ2F0aW5nIFNVTlJQQyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB0cmFjayBkb3duIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgU1VOUlBDYC4gSSBrbm93IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHVzZXMgS2NvbmZpZyBmaWxlcyB0byBtYW5hZ2UgdGhlc2UsIHNvIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gQW5kIGlmIEkgd2FudCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgaG93IGBTVU5SUENgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwsIHRoZSBtb3N0IGxvZ2ljYWwgZmlyc3Qgc3RvcCBpcyBwcm9iYWJseSB0aGUgYG5ldC9zdW5ycGMvS2NvbmZpZ2AgZmlsZS4gSSdtIHRoaW5raW5nIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIG1haW4gZGVjbGFyYXRpb24gb3IgcGVyaGFwcyBhIHRvcC1sZXZlbCBhZ2dyZWdhdGlvbiBvZiBhbGwgdGhlIGBTVU5SUENgLXJlbGF0ZWQgY29uZmlnIHN5bWJvbHMuIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY3NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjEyLjIwMTMwMjg1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMDQxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNVTlJQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcXG5uZXQvc3VucnBjL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY6Y29uZmlnIFNVTlJQQ19HU1NcXG5uZXQvc3VucnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTEwLVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXFxubmV0L3N1bnJwYy9LY29uZmlnLTEyLVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xNC1cXG5uZXQvc3VucnBjL0tjb25maWc6MTU6Y29uZmlnIFNVTlJQQ19TV0FQXFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMzUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcXG5uZXQvc3VucnBjL0tjb25maWctMzctXFx0Ym9vbCBcXFwiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNDktXFxubmV0L3N1bnJwYy9LY29uZmlnOjUwOmNvbmZpZyBTVU5SUENfREVCVUdfVFJBQ0VcXG5uZXQvc3VucnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUlBDOiBTZW5kIGRmcHJpbnRrKCkgb3V0cHV0IHRvIHRoZSB0cmFjZSBidWZmZXJcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNjMtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY0OmNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXFxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVxcdHRyaXN0YXRlIFxcXCJSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MTIuMjQ5NTEyODUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MjI5NTI4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgTkZTZCBhbmQgU1VOUlBDIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gYENPTkZJR19ORlNEYCBhbmQgYENPTkZJR19TVU5SUENgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgbGlrZSBlbmFibGluZyB0aGUgTkZTIGRhZW1vbiAoYENPTkZJR19ORlNEYCkgbWlnaHQgYXV0b21hdGljYWxseSBwdWxsIGluIFNVTlJQQywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoZSBxdWVzdGlvbiBpcywgaXMgYENPTkZJR19TVU5SUENgIGEgZGVwZW5kZW5jeSBvZiBgQ09ORklHX05GU0RgLCBvciBpcyBpdCBlbmFibGVkIHNvbWUgb3RoZXIgd2F5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gYmUgc3VyZS4gVGltZSB0byBkaWcgaW50byBgZnMvbmZzZC9LY29uZmlnYCBhbmQgYG5ldC9zdW5ycGMvS2NvbmZpZ2AgdG8gc2VlIGhvdyB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIHN0cnVjdHVyZWQgYW5kIGhvdyBgQ09ORklHX1NVTlJQQ2AgaXMgYWN0dWFsbHkgZW5hYmxlZC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgY2xhcmlmeSB0aGUgY29udHJvbCBmbG93IGFuZCBkZXBlbmRlbmNpZXMgSSdtIGludGVyZXN0ZWQgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mjg3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MTQuODcyNDY4NzA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTc4MDM2MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdC4qU1VOUlBDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MzgwPWNvbmZpZyBORlNfQ09NTU9OX0xPQ0FMSU9fU1VQUE9SVFxcbi0tXFxuZnMvS2NvbmZpZy0zODQtXFx0ZGVmYXVsdCBtIGlmIE5GU0Q9bSBcXHUwMDI2XFx1MDAyNiBORlNfRlM9bVxcbmZzL0tjb25maWc6Mzg1OlxcdHNlbGVjdCBTVU5SUENcXG5mcy9LY29uZmlnLTM4Ni1cXG4tLVxcbmZzL25mcy9LY29uZmlnPTI9Y29uZmlnIE5GU19GU1xcbi0tXFxuZnMvbmZzL0tjb25maWctNi1cXHRzZWxlY3QgTE9DS0RcXG5mcy9uZnMvS2NvbmZpZzo3OlxcdHNlbGVjdCBTVU5SUENcXG5mcy9uZnMvS2NvbmZpZy04LVxcdHNlbGVjdCBORlNfQ09NTU9OXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz03Nz1jb25maWcgTkZTX1Y0XFxuLS1cXG5mcy9uZnMvS2NvbmZpZy04MC1cXHRzZWxlY3QgS0VZU1xcbmZzL25mcy9LY29uZmlnOjgxOlxcdHNlbGVjdCBTVU5SUENfQkFDS0NIQU5ORUxcXG5mcy9uZnMvS2NvbmZpZy04Mi1cXHRoZWxwXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz05Mj1jb25maWcgTkZTX1NXQVBcXG4tLVxcbmZzL25mcy9LY29uZmlnLTk1LVxcdGRlcGVuZHMgb24gTkZTX0ZTIFxcdTAwMjZcXHUwMDI2IFNXQVBcXG5mcy9uZnMvS2NvbmZpZzo5NjpcXHRzZWxlY3QgU1VOUlBDX1NXQVBcXG5mcy9uZnMvS2NvbmZpZy05Ny1cXHRoZWxwXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9Mj1jb25maWcgTkZTRFxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTExLVxcdHNlbGVjdCBMT0NLRFxcbmZzL25mc2QvS2NvbmZpZzoxMjpcXHRzZWxlY3QgU1VOUlBDXFxuZnMvbmZzZC9LY29uZmlnLTEzLVxcdHNlbGVjdCBFWFBPUlRGU1xcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0yMi1cXHRkZWZhdWx0IHlcXG5uZXQvc3VucnBjL0tjb25maWc6MjM6XFx0c2VsZWN0IFNVTlJQQ19HU1NcXG5uZXQvc3VucnBjL0tjb25maWctMjQtXFx0c2VsZWN0IENSWVBUT19LUkI1XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjE3LjQ1MDUwOTg0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ4NTMxNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTkZTIFNlcnZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfTkZTRGAgYmVpbmcgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBicmluZ3MgaW4gYENPTkZJR19TVU5SUENgLiBJIGtub3cgdGhpcyBtZWFucyB0aGUgTmV0d29yayBGaWxlIFN5c3RlbSBEYWVtb24gaXMgcmVsaWFudCBvbiB0aGUgU3VuIFJlbW90ZSBQcm9jZWR1cmUgQ2FsbCBzeXN0ZW0uIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE5GUyBzZXJ2ZXIgaXMgYnVpbHQgYW5kIGhvdyB0aG9zZSBSUEMgY29tcG9uZW50cyBhcmUgbGlua2VkLiBUbyBkbyB0aGF0LCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBuZXQvc3VucnBjL01ha2VmaWxlYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBidWlsZCBydWxlcyBmb3IgY29yZSBvYmplY3RzLCBzcGVjaWZpY2FsbHkgdGhlIGNyZWF0aW9uIG9mIGBzdmNzb2NrLm9gLCB3aGljaCBJIGV4cGVjdCB3aWxsIGJlIGNydWNpYWwgZm9yIHRoZSBuZXR3b3JrIHNvY2tldCBtYW5hZ2VtZW50IHVzZWQgYnkgdGhlIHNlcnZlci4gVGltZSB0byBkaWcgaW50byB0aGUgbWFrZWZpbGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOToxOS42OTkwNDUyNDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODA2MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y3NvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL01ha2VmaWxlPTExPXN1bnJwYy15IDo9IGNsbnQubyB4cHJ0Lm8gc29ja2xpYi5vIHhwcnRzb2NrLm8gc2NoZWQubyBcXFxcXFxubmV0L3N1bnJwYy9NYWtlZmlsZS0xMi1cXHQgICAgYXV0aC5vIGF1dGhfbnVsbC5vIGF1dGhfdGxzLm8gYXV0aF91bml4Lm8gXFxcXFxcbm5ldC9zdW5ycGMvTWFrZWZpbGU6MTM6XFx0ICAgIHN2Yy5vIHN2Y3NvY2subyBzdmNhdXRoLm8gc3ZjYXV0aF91bml4Lm8gXFxcXFxcbm5ldC9zdW5ycGMvTWFrZWZpbGUtMTQtXFx0ICAgIGFkZHIubyBycGNiX2NsbnQubyB0aW1lci5vIHhkci5vIFxcXFxcXG4tLVxcbm5ldC9zdW5ycGMvc3RhdHMuYy0yMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL2NsbnQuaFxcdTAwM2VcXG5uZXQvc3VucnBjL3N0YXRzLmM6MjQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdGF0cy5jLTI1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvbWV0cmljcy5oXFx1MDAzZVxcbi0tXFxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jLTE5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvc3ZjLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXFx1MDAzZVxcbm5ldC9zdW5ycGMvc3VucnBjX3N5bXMuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL2F1dGguaFxcdTAwM2VcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMjctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdGF0cy5oXFx1MDAzZVxcbm5ldC9zdW5ycGMvc3ZjLmM6Mjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmMuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL2NsbnQuaFxcdTAwM2VcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL3N2Y194cHJ0LmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXFx1MDAzZVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL3hwcnQuaFxcdTAwM2VcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjYXV0aC5jLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMveGRyLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNhdXRoLmM6MTc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNhdXRoLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNhdXRoLmhcXHUwMDNlXFxuLS1cXG5uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy94ZHIuaFxcdTAwM2VcXG5uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvc3ZjYXV0aC5oXFx1MDAzZVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMi0vKlxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjM6ICogbGludXgvbmV0L3N1bnJwYy9zdmNzb2NrLmNcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00LSAqXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy01OC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL21zZ19wcm90LmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NTk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNjAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdGF0cy5oXFx1MDAzZVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9NDAxPXN0YXRpYyB2b2lkIHN2Y19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTQxMC1cXHRcXHRzdnNrLVxcdTAwM2Vza19vZGF0YShzayk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NDExOlxcdFxcdHRyYWNlX3N2Y3NvY2tfZGF0YV9yZWFkeShcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCwgMCk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDEyLVxcdFxcdGlmICh0ZXN0X2JpdChYUFRfSEFORFNIQUtFLCBcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfZmxhZ3MpKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9NDIyPXN0YXRpYyB2b2lkIHN2Y193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00MjgtXFx0XFx0cm1iKCk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NDI5OlxcdFxcdHRyYWNlX3N2Y3NvY2tfd3JpdGVfc3BhY2UoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIDApO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTQzMC1cXHRcXHRzdnNrLVxcdTAwM2Vza19vd3NwYWNlKHNrKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTYwOD1zdGF0aWMgaW50IHN2Y191ZHBfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTY1OS1cXHRycXN0cC1cXHUwMDNlcnFfYXJnLmxlbiA9IGxlbjtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo2NjA6XFx0dHJhY2Vfc3Zjc29ja191ZHBfcmVjdihcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCwgbGVuKTtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy02NjEtXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy03MDMtXFx0fVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjcwNDpcXHR0cmFjZV9zdmNzb2NrX3VkcF9yZWN2X2VycihcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCwgZXJyKTtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy03MDUtXFx0Z290byBvdXRfY2xlYXJfYnVzeTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTcyOD1zdGF0aWMgaW50IHN2Y191ZHBfc2VuZHRvKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy03NzQtb3V0X3RyYWNlOlxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjc3NTpcXHR0cmFjZV9zdmNzb2NrX3VkcF9zZW5kKHhwcnQsIGVycik7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNzc2LVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9OTEwPXN0YXRpYyB2b2lkIHN2Y190Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTkxNy1cXHRcXHRzdnNrLVxcdTAwM2Vza19vc3RhdGUoc2spO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjkxODpcXHRcXHR0cmFjZV9zdmNzb2NrX3RjcF9zdGF0ZShcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCwgc3Zzay1cXHUwMDNlc2tfc29jayk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTE5LVxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9OTI3PXN0YXRpYyBzdHJ1Y3Qgc3ZjX3hwcnQgKnN2Y190Y3BfYWNjZXB0KHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk0NC1cXHRcXHRpZiAoZXJyICE9IC1FQUdBSU4pXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTQ1OlxcdFxcdFxcdHRyYWNlX3N2Y3NvY2tfYWNjZXB0X2Vycih4cHJ0LCBzZXJ2LVxcdTAwM2Vzdl9uYW1lLCBlcnIpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk0Ni1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk1NC1cXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjk1NTpcXHRcXHR0cmFjZV9zdmNzb2NrX2dldHBlZXJuYW1lX2Vycih4cHJ0LCBzZXJ2LVxcdTAwM2Vzdl9uYW1lLCBlcnIpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk1Ni1cXHRcXHRnb3RvIGZhaWxlZDtcXHRcXHQvKiBhYm9ydGVkIGNvbm5lY3Rpb24gb3Igd2hhdGV2ZXIgKi9cXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTEwNTQ9c3RhdGljIHNzaXplX3Qgc3ZjX3RjcF9yZWFkX21hcmtlcihzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMDc3LVxcdFxcdH1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxMDc4OlxcdFxcdHRyYWNlX3N2Y3NvY2tfbWFya2VyKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBzdnNrLVxcdTAwM2Vza19tYXJrZXIpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEwNzktXFx0XFx0aWYgKHN2Y19zb2NrX3JlY2xlbihzdnNrKSArIHN2c2stXFx1MDAzZXNrX2RhdGFsZW4gXFx1MDAzZVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTE1NT1zdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTExNzMtXFx0aWYgKGxlbiBcXHUwMDNlPSAwKSB7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTE3NDpcXHRcXHR0cmFjZV9zdmNzb2NrX3RjcF9yZWN2KFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBsZW4pO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTExNzUtXFx0XFx0c3Zzay1cXHUwMDNlc2tfdGNwbGVuICs9IGxlbjtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMjQtXFx0ZWxzZVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjEyMjU6XFx0XFx0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdl9zaG9ydChcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMjI2LVxcdFxcdFxcdFxcdHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzEtXFx0XFx0Z290byBlcnJfZGVsZXRlO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjEyMzI6XFx0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdl9lYWdhaW4oXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIDApO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzMtXFx0Z290byBlcnJfbm9jbG9zZTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzYtZXJyX2RlbGV0ZTpcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxMjM3OlxcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3ZfZXJyKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBsZW4pO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzgtXFx0c3ZjX3hwcnRfZGVmZXJyZWRfY2xvc2UoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQpO1xcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTI5Mz1zdGF0aWMgaW50IHN2Y190Y3Bfc2VuZHRvKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMzA4LVxcdHNlbnQgPSBzdmNfdGNwX3NlbmRtc2coc3ZzaywgcnFzdHAsIG1hcmtlcik7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTMwOTpcXHR0cmFjZV9zdmNzb2NrX3RjcF9zZW5kKHhwcnQsIHNlbnQpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEzMTAtXFx0aWYgKHNlbnQgXFx1MDAzYyAwIHx8IHNlbnQgIT0gKHhkci1cXHUwMDNlbGVuICsgc2l6ZW9mKG1hcmtlcikpKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTQzOT1zdGF0aWMgc3RydWN0IHN2Y19zb2NrICpzdmNfc2V0dXBfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqc2VydixcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDEtXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTUwMjpcXHR0cmFjZV9zdmNzb2NrX25ldyhzdnNrLCBzb2NrKTtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTAzLVxcdHJldHVybiBzdnNrO1xcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTY4ND1zdGF0aWMgdm9pZCBzdmNfc29ja19mcmVlKHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE2ODgtXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTY4OTpcXHR0cmFjZV9zdmNzb2NrX2ZyZWUoc3Zzaywgc29jayk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTY5MC1cXG4tLVxcbm5ldC9zdW5ycGMveHBydHNvY2suYy0zOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL3NjaGVkLmhcXHUwMDNlXFxubmV0L3N1bnJwYy94cHJ0c29jay5jOjM5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXFx1MDAzZVxcbm5ldC9zdW5ycGMveHBydHNvY2suYy00MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL3hwcnRzb2NrLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjE5Ljc0Nzg2NjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY4OTA0MTI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYHN2Y19zZXR1cF9zb2NrZXRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBsaW5lIG9mIGNvZGU6IGBzdmNfc2V0dXBfc29ja2V0YCBzZXRzIGBzay1cdTAwM2Vza191c2VyX2RhdGEgPSBzdnNrO2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBzdGFydHMgd29ya2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIGBzay1cdTAwM2Vza191c2VyX2RhdGFgIOKAkyB0aGF0J3MgYSBjbGFzc2ljIGxvY2F0aW9uIGZvciBhdHRhY2hpbmcgcHJpdmF0ZSwgbW9kdWxlLXNwZWNpZmljIGRhdGEgdG8gYSBzb2NrZXQgc3RydWN0dXJlLiBUaGUgZmFjdCB0aGF0IGl0J3MgYmVpbmcgc2V0IHRvIGBzdnNrYCB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24sIGBzdmNfc2V0dXBfc29ja2V0YCwgaXMgY2xlYXJseSBhc3NvY2lhdGluZyBhIHNlcnZpY2Utc3BlY2lmaWMgc29ja2V0IHN0cnVjdHVyZSAoYHN2c2tgKSB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQgKGBza2ApLiBUaGlzIGFzc29jaWF0aW9uIGlzIGNyaXRpY2FsIGZvciBhbG1vc3QgYW55IG5ldHdvcmsgc2VydmljZS4gTm93IEkgbmVlZCB0byBrbm93IGV4YWN0bHkgd2hhdCB0aGUgYHN2c2tgIHN0cnVjdHVyZSBjb250YWlucy5cblxuVG8gYmUgc3VyZSBhYm91dCB0aGUgZnVuY3Rpb24gYW5kIGBzdnNrYCwgSSBzaG91bGQgbG9vayBhdCB0aGUgc291cmNlLiBMZXQgbWUgY2hlY2sgdGhlIGBzdmNfc2V0dXBfc29ja2V0YCBmdW5jdGlvbiBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgIHRvIHNlZSBob3cgaXQncyB1c2VkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSB3aG9sZSBwaWN0dXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW50ZW50IG9mIHRoaXMgYXNzb2NpYXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBSUEMgc3RhY2sgaXMgbWFuYWdpbmcgc29ja2V0cyBhbmQgcG90ZW50aWFsbHkgaG93IGl0J3MgbWFuYWdpbmcgY29uY3VycmVudCBjb25uZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOToyMy40MzY5MTAyNzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zdW5ycGMvc3Zjc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MzksXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0Mzk6XFx0c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXFxuMTQ0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbjE0NDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGZsYWdzKVxcbjE0NDI6XFx0e1xcbjE0NDM6XFx0XFx0c3RydWN0IHN2Y19zb2NrXFx0KnN2c2s7XFxuMTQ0NDpcXHRcXHRzdHJ1Y3Qgc29ja1xcdCppbmV0O1xcbjE0NDU6XFx0XFx0aW50XFx0XFx0cG1hcF9yZWdpc3RlciA9ICEoZmxhZ3MgXFx1MDAyNiBTVkNfU09DS19BTk9OWU1PVVMpO1xcbjE0NDY6XFx0XFx0aW50XFx0XFx0c2VuZHBhZ2VzO1xcbjE0NDc6XFx0XFx0dW5zaWduZWQgbG9uZ1xcdHBhZ2VzO1xcbjE0NDg6XFx0XFxuMTQ0OTpcXHRcXHRzZW5kcGFnZXMgPSBzdmNfc29ja19zZW5kcGFnZXMoc2Vydiwgc29jaywgZmxhZ3MpO1xcbjE0NTA6XFx0XFx0aWYgKHNlbmRwYWdlcyBcXHUwMDNjIDApXFxuMTQ1MTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihzZW5kcGFnZXMpO1xcbjE0NTI6XFx0XFxuMTQ1MzpcXHRcXHRwYWdlcyA9IHN2Y19zZXJ2X21heHBhZ2VzKHNlcnYpO1xcbjE0NTQ6XFx0XFx0c3ZzayA9IGt6YWxsb2NfZmxleCgqc3Zzaywgc2tfcGFnZXMsIHBhZ2VzKTtcXG4xNDU1OlxcdFxcdGlmICghc3ZzaylcXG4xNDU2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjE0NTc6XFx0XFxuMTQ1ODpcXHRcXHRpZiAoc2VuZHBhZ2VzKSB7XFxuMTQ1OTpcXHRcXHRcXHRzdnNrLVxcdTAwM2Vza19idmVjID0ga3phbGxvY19vYmpzKCpzdnNrLVxcdTAwM2Vza19idmVjLCBzZW5kcGFnZXMpO1xcbjE0NjA6XFx0XFx0XFx0aWYgKCFzdnNrLVxcdTAwM2Vza19idmVjKSB7XFxuMTQ2MTpcXHRcXHRcXHRcXHRrZnJlZShzdnNrKTtcXG4xNDYyOlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjE0NjM6XFx0XFx0XFx0fVxcbjE0NjQ6XFx0XFx0fVxcbjE0NjU6XFx0XFxuMTQ2NjpcXHRcXHRzdnNrLVxcdTAwM2Vza19tYXhwYWdlcyA9IHBhZ2VzO1xcbjE0Njc6XFx0XFxuMTQ2ODpcXHRcXHRpbmV0ID0gc29jay1cXHUwMDNlc2s7XFxuMTQ2OTpcXHRcXG4xNDcwOlxcdFxcdGlmIChwbWFwX3JlZ2lzdGVyKSB7XFxuMTQ3MTpcXHRcXHRcXHRpbnQgZXJyO1xcbjE0NzI6XFx0XFxuMTQ3MzpcXHRcXHRcXHRlcnIgPSBzdmNfcmVnaXN0ZXIoc2Vydiwgc29ja19uZXQoc29jay1cXHUwMDNlc2spLCBpbmV0LVxcdTAwM2Vza19mYW1pbHksXFxuMTQ3NDpcXHRcXHRcXHRcXHRcXHQgICAgIGluZXQtXFx1MDAzZXNrX3Byb3RvY29sLFxcbjE0NzU6XFx0XFx0XFx0XFx0XFx0ICAgICBudG9ocyhpbmV0X3NrKGluZXQpLVxcdTAwM2VpbmV0X3Nwb3J0KSk7XFxuMTQ3NjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjE0Nzc6XFx0XFx0XFx0XFx0a2ZyZWUoc3Zzay1cXHUwMDNlc2tfYnZlYyk7XFxuMTQ3ODpcXHRcXHRcXHRcXHRrZnJlZShzdnNrKTtcXG4xNDc5OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMTQ4MDpcXHRcXHRcXHR9XFxuMTQ4MTpcXHRcXHR9XFxuMTQ4MjpcXHRcXG4xNDgzOlxcdFxcdHN2c2stXFx1MDAzZXNrX3NvY2sgPSBzb2NrO1xcbjE0ODQ6XFx0XFx0c3Zzay1cXHUwMDNlc2tfc2sgPSBpbmV0O1xcbjE0ODU6XFx0XFx0c3Zzay1cXHUwMDNlc2tfb3N0YXRlID0gaW5ldC1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlO1xcbjE0ODY6XFx0XFx0c3Zzay1cXHUwMDNlc2tfb2RhdGEgPSBpbmV0LVxcdTAwM2Vza19kYXRhX3JlYWR5O1xcbjE0ODc6XFx0XFx0c3Zzay1cXHUwMDNlc2tfb3dzcGFjZSA9IGluZXQtXFx1MDAzZXNrX3dyaXRlX3NwYWNlO1xcbjE0ODg6XFx0XFx0LypcXG4xNDg5OlxcdFxcdCAqIFRoaXMgYmFycmllciBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvblxcbjE0OTA6XFx0XFx0ICogd2l0aCBzdmNfZGF0YV9yZWFkeSgpLCBzdmNfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KCksIGFuZCBvdGhlcnNcXG4xNDkxOlxcdFxcdCAqIHdoZW4gY2FsbGluZyBjYWxsYmFja3MgYWJvdmUuXFxuMTQ5MjpcXHRcXHQgKi9cXG4xNDkzOlxcdFxcdHdtYigpO1xcbjE0OTQ6XFx0XFx0aW5ldC1cXHUwMDNlc2tfdXNlcl9kYXRhID0gc3ZzaztcXG4xNDk1OlxcdFxcbjE0OTY6XFx0XFx0LyogSW5pdGlhbGl6ZSB0aGUgc29ja2V0ICovXFxuMTQ5NzpcXHRcXHRpZiAoc29jay1cXHUwMDNldHlwZSA9PSBTT0NLX0RHUkFNKVxcbjE0OTg6XFx0XFx0XFx0c3ZjX3VkcF9pbml0KHN2c2ssIHNlcnYpO1xcbjE0OTk6XFx0XFx0ZWxzZVxcbjE1MDA6XFx0XFx0XFx0c3ZjX3RjcF9pbml0KHN2c2ssIHNlcnYpO1xcbjE1MDE6XFx0XFxuMTUwMjpcXHRcXHR0cmFjZV9zdmNzb2NrX25ldyhzdnNrLCBzb2NrKTtcXG4xNTAzOlxcdFxcdHJldHVybiBzdnNrO1xcbjE1MDQ6XFx0fVxcbjE1MDU6XFx0XFxuMTUwNjpcXHQvKipcXG4xNTA3OlxcdCAqIHN2Y19hZGRzb2NrIC0gYWRkIGEgbGlzdGVuZXIgc29ja2V0IHRvIGFuIFJQQyBzZXJ2aWNlXFxuMTUwODpcXHQgKiBAc2VydjogcG9pbnRlciB0byBSUEMgc2VydmljZSB0byB3aGljaCB0byBhZGQgYSBuZXcgbGlzdGVuZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MjMuNDM3MDIzOTM0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NTcxMjU5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtlcm5lbCBWdWxuZXJhYmlsaXR5IGluIE5GUyBTZXJ2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gc29ja2V0IG93bmVyc2hpcCB3aXRoaW4gdGhlIE5GUyBzZXJ2ZXIsIHNwZWNpZmljYWxseSB3aGVuIGFkZGluZyBzb2NrZXRzLiBUaGUgY29kZSBpbiBxdWVzdGlvbiwgYGluZXQtXHUwMDNlc2tfdXNlcl9kYXRhID0gc3ZzaztgLCBoaWdobGlnaHRzIGEgcG90ZW50aWFsIG92ZXJ3cml0ZSBpc3N1ZS4gSWYgYSBzb2NrZXQgYWxyZWFkeSBoYXMgYHNrX3VzZXJfZGF0YWAgYXNzaWduZWQgKHBlcmhhcHMgZnJvbSBhbm90aGVyIFJQQyBzZXJ2aWNlLCBLQ00sIFRMUywgU0NUUCwgQlBGLCBvciBhIGR1cGxpY2F0ZSBhZGRpdGlvbiksIGBzdmNfc2V0dXBfc29ja2V0YCBjb3VsZCBjb3JydXB0IHRoYXQgb3duZXJzaGlwIG9yIHN0YXRlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIGluIGBzdmNfYWRkc29ja2A6XG5gYGBjXG5cdGVyciA9IC1FQlVTWTtcblx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcblx0XHRnb3RvIG91dDtcbmBgYFxudG8gcHJldmVudCB0aGUgb3ZlcndyaXRlLiBOb3csIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgaXMgcmVhY2hhYmxlIGFuZCBleHBsb2l0YWJsZS5cblxuRmlyc3QsIGlzIHRoaXMgY29kZSBwYXRoIGFjY2Vzc2libGU/IFllcywgYHN2Y19hZGRzb2NrYCBjYW4gYmUgY2FsbGVkIGZyb20gdXNlcnNwYWNlIGJ5IHdyaXRpbmcgYSBmaWxlIGRlc2NyaXB0b3IgdG8gYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgIChuZnNjdGwpLiBUaGlzIGlzIHN0YW5kYXJkIE5GUyBzZXJ2ZXIgZnVuY3Rpb25hbGl0eSwgYW5kIHRodXMgcmVhY2hhYmxlLlxuXG5TZWNvbmQsIGlzIHRoaXMgY29kZSBpbiBhIGNvcmUgc3Vic3lzdGVtIG9yIGEgY29tbW9ubHkgcmVhY2hhYmxlIHByb3RvY29sPyBBYnNvbHV0ZWx5LiBTdW5SUEMgYW5kIE5GU2QgYXJlIGZ1bmRhbWVudGFsIHBhcnRzIG9mIHRoZSBMaW51eCBrZXJuZWwncyBORlMgaW1wbGVtZW50YXRpb24uXG5cblRoaXJkLCBpcyB0aGlzIHBhdGNoIFwiV29ydGhGdXp6aW5nXCI/IERlZmluaXRlbHkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZhbGlkYXRpb24gY2hlY2sgd2l0aGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMgYW5kIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gVGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYHN2Y19hZGRzb2NrYCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgY2hhbmdlIGlzLiBOb3csIGZvciB0aGUgY2FsbGVyLCBpcyBpdCBgX193cml0ZV9wb3J0c19hZGRmZGA/IFllcywgaXQgYXBwZWFycyB0byBiZSBgX193cml0ZV9wb3J0c19hZGRmZGAgaW4gYGZzL25mc2QvbmZzY3RsLmNgLCB3aGljaCBjYWxscyBgc3ZjX2FkZHNvY2tgLiBJJ2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNhbGxlcnMgb2YgYHN2Y19hZGRzb2NrYC4gQSBxdWljayBncmVwIGNvbmZpcm1zIHRoaXMuXG5cbkxldCdzIG1vdmUgb250byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciBgc3ZjX2FkZHNvY2tgIGFuZCBuZnNkIHRvIGZ1bmN0aW9uPyBCeSBleGFtaW5pbmcgYG5ldC9zdW5ycGMvS2NvbmZpZ2AgYW5kIGBmcy9uZnNkL0tjb25maWdgLCBJIHNlZTpcbi0gICBgU1VOUlBDYCAoZWl0aGVyIGNvbXBpbGVkIGluIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUsIHNlbGVjdGVkIGJ5IGBORlNEYClcbi0gICBgTkZTRGAgKHJlcXVpcmVkIHRvIHJlYWNoIGBzdmNfYWRkc29ja2AgdGhyb3VnaCBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAgb3Igd3JpdGVfcG9ydHMpXG5cbkZ1cnRoZXJtb3JlLCBgTkZTRGAgZGVwZW5kcyBvbiBgTVVMVElVU0VSYCwgd2hpY2ggaXMgZGVmYXVsdCAneScsIGluIGFkZGl0aW9uIHRvIGBTVU5SUENgIGFuZCBvdGhlciBzZWxlY3Qgb3B0aW9ucy5cblxuVG8gYmUgZXh0cmEgY2xlYXI6IG15IGtleSBmb2N1cyBzeW1ib2xzIGFyZTpcbiogICBgc3ZjX2FkZHNvY2tgXG4qICAgYF9fd3JpdGVfcG9ydHNfYWRkZmRgXG5cbkZpbmFsbHksIEknbGwgY29uZmlybSB0aGF0IGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBpc24ndCBzdGF0aWMgaW4gYGZzL25mc2QvbmZzY3RsLmNgLiBJJ2xsIGFsc28gZG91YmxlIGNoZWNrIHRoZSBuYW1lIG9mIHRoZSB3cml0ZSBmdW5jdGlvbiBpbiB0aGUgY29kZSBhcm91bmQgbGluZXMgODAwLTgzMC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTozMC4wOTQxNTIxOTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25mc2QvbmZzY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODAwOlxcdFxcdFxcdG5mc2RfZGVzdHJveV9zZXJ2KG5ldCk7XFxuIDgwMTpcXHRcXG4gODAyOlxcdFxcdHJldHVybiBlcnI7XFxuIDgwMzpcXHR9XFxuIDgwNDpcXHRcXG4gODA1OlxcdHN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsXFxuIDgwNjpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4gODA3OlxcdHtcXG4gODA4OlxcdFxcdGlmIChzaXplID09IDApXFxuIDgwOTpcXHRcXHRcXHRyZXR1cm4gX193cml0ZV9wb3J0c19uYW1lcyhidWYsIG5ldCk7XFxuIDgxMDpcXHRcXG4gODExOlxcdFxcdGlmIChpc2RpZ2l0KGJ1ZlswXSkpXFxuIDgxMjpcXHRcXHRcXHRyZXR1cm4gX193cml0ZV9wb3J0c19hZGRmZChidWYsIG5ldCwgZmlsZS1cXHUwMDNlZl9jcmVkKTtcXG4gODEzOlxcdFxcbiA4MTQ6XFx0XFx0aWYgKGlzYWxwaGEoYnVmWzBdKSlcXG4gODE1OlxcdFxcdFxcdHJldHVybiBfX3dyaXRlX3BvcnRzX2FkZHhwcnQoYnVmLCBuZXQsIGZpbGUtXFx1MDAzZWZfY3JlZCk7XFxuIDgxNjpcXHRcXG4gODE3OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4MTg6XFx0fVxcbiA4MTk6XFx0XFxuIDgyMDpcXHQvKlxcbiA4MjE6XFx0ICogd3JpdGVfcG9ydHMgLSBQYXNzIGEgc29ja2V0IGZpbGUgZGVzY3JpcHRvciBvciB0cmFuc3BvcnQgbmFtZSB0byBsaXN0ZW4gb25cXG4gODIyOlxcdCAqXFxuIDgyMzpcXHQgKiBJbnB1dDpcXG4gODI0OlxcdCAqXFx0XFx0XFx0YnVmOlxcdFxcdGlnbm9yZWRcXG4gODI1OlxcdCAqXFx0XFx0XFx0c2l6ZTpcXHRcXHR6ZXJvXFxuIDgyNjpcXHQgKiBPdXRwdXQ6XFxuIDgyNzpcXHQgKlxcdE9uIHN1Y2Nlc3M6XFx0cGFzc2VkLWluIGJ1ZmZlciBmaWxsZWQgd2l0aCBhICdcXFxcbictdGVybWluYXRlZCBDXFxuIDgyODpcXHQgKlxcdFxcdFxcdHN0cmluZyBjb250YWluaW5nIGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZlxcbiA4Mjk6XFx0ICpcXHRcXHRcXHRuYW1lZCBORlNEIGxpc3RlbmVycztcXG4gODMwOlxcdCAqXFx0XFx0XFx0cmV0dXJuIGNvZGUgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHN0cmluZ1xcbiA4MzE6XFx0ICpcXHRPbiBlcnJvcjpcXHRyZXR1cm4gY29kZSBpcyB6ZXJvIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWVcXG4gODMyOlxcdCAqXFxuIDgzMzpcXHQgKiBPUlxcbiA4MzQ6XFx0ICpcXG4gODM1OlxcdCAqIElucHV0OlxcbiA4MzY6XFx0ICpcXHRcXHRcXHRidWY6XFx0XFx0QyBzdHJpbmcgY29udGFpbmluZyBhbiB1bnNpZ25lZFxcbiA4Mzc6XFx0ICpcXHRcXHRcXHRcXHRcXHRpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyBhIGJvdW5kXFxuIDgzODpcXHQgKlxcdFxcdFxcdFxcdFxcdGJ1dCB1bmNvbm5lY3RlZCBzb2NrZXQgdGhhdCBpcyB0byBiZVxcbiA4Mzk6XFx0ICpcXHRcXHRcXHRcXHRcXHR1c2VkIGFzIGFuIE5GU0QgbGlzdGVuZXI7IGxpc3RlbigzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTozMC4wOTQzMTUyODVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY5MzkwODQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIG1vZGlmaWNhdGlvbjpcblxuKipBbmFseXppbmcgdGhlIGBzdmNfYWRkc29ja2AgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB3aGVyZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gYmVpbmcgYWx0ZXJlZCBpcyBgc3ZjX2FkZHNvY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wYWN0IG9mIHRoaXMuIEJhc2VkIG9uIHRoZSBmaWxlIGNvbnRleHQsIHRoZSBlbnRyeSBwb2ludCBmb3IgbmZzY3RsIG9wZXJhdGlvbnMgaGVyZSBzZWVtcyB0byBiZSBlaXRoZXIgYF9fd3JpdGVfcG9ydHNfYWRkZmRgIG9yIHBvdGVudGlhbGx5IGB3cml0ZV9wb3J0c2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMsIGFuZCBJJ2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBmdW5jdGlvbnMgaW4gbWluZCBhcyB0aGUgbGlrZWx5IHBsYWNlcyB3aGVyZSB0aGlzIGNoYW5nZSB3aWxsIG1hbmlmZXN0LlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcGx5IGludG8gdGhlIGNvZGUgaXRzZWxmLCBsZXQncyBqdXN0IGNvbmZpcm0gdGhlIHNjb3BlLiBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgdGhlIHBhdGNoIHRvdWNoZXMgYW55IG90aGVyIGZpbGVzLiBPZnRlbiB0aGVzZSBwYXRjaGVzIHdpbGwgYWZmZWN0IGEgc3VpdGUgb2YgZmlsZXMgdG8gYWNoaWV2ZSB0aGUgZW5kIHJlc3VsdC4gQWgsIGdvb2QsIHRoZSBjaGFuZ2UgaXMgbGltaXRlZCB0byBqdXN0IGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuXG5cbkFscmlnaHQsIEkndmUgZ290IHRoZSBjb250ZXh0LCBJIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkLCBhbmQgSSd2ZSBjb25maXJtZWQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIFRpbWUgdG8gcnVuIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIHN0YXJ0IGNvbGxhdGluZyBteSBmaW5kaW5ncy4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBzcGl0cyBvdXQsIGFuZCB0aGVuIEkgY2FuIGRpdmUgaW50byB0aGUgY29kZSBtb3JlIG1ldGhvZGljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNzMsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTozMy43ODgyMjgzOTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzczMzgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1VOUlBDXCIsXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZjX2FkZHNvY2tcIixcbiAgICBcIl9fd3JpdGVfcG9ydHNfYWRkZmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcHJldmVudCBzb2NrZXRzIHdpdGggZXhpc3RpbmcgYHNrX3VzZXJfZGF0YWAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGFzIFJQQyBzZXJ2aWNlIGxpc3RlbmVyIHNvY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcvUlBDIHNlcnZlciBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBORlNEIGNvbnRyb2wgaW50ZXJmYWNlICh3cml0aW5nIGFuIEZEIHRvIC9wcm9jL2ZzL25mc2QvcG9ydGxpc3QpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCIsXG4gICAgXCJfX3dyaXRlX3BvcnRzX2FkZGZkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHN2Y19hZGRzb2NrKClgIHRvIHByZXZlbnQgc29ja2V0cyB3aXRoIGV4aXN0aW5nIGBza191c2VyX2RhdGFgIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBhcyBSUEMgc2VydmljZSBsaXN0ZW5lciBzb2NrZXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nL1JQQyBzZXJ2ZXIgY29kZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgTkZTRCBjb250cm9sIGludGVyZmFjZSAod3JpdGluZyBhbiBGRCB0byAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MzMuODcxOTcxODAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMxNjYwODY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjMzLjg3MjU4OTg2M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1MzE1OTg1MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYmQzZGNiYWY0MDg1MTZjMDFhMGM2MjAwZjE1YjQ0NTdiN2NhZDkyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNDowODo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xuKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbkBAIC0xNTQxLDYgKzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcbiBcdGVyciA9IC1FSVNDT05OO1xuIFx0aWYgKHNvLVx1MDAzZXN0YXRlIFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcbiBcdFx0Z290byBvdXQ7XG4rXHRlcnIgPSAtRUJVU1k7XG4rXHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuK1x0XHRnb3RvIG91dDtcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbiBcdFx0Z290byBvdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTozMy44NzI1OTEyMjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU5Nzg2OTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byBzdmNzb2NrLmMgZm9yIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gd2UgbmVlZCB0byBhbmFseXplIHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBhY3Rpb24gc3RhcnRzIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyB1c2UgbXkgdHJ1c3R5IGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gaW1tZWRpYXRlbHkgcHVsbCB1cCB0aGUgY29kZSBhcm91bmQgbGluZSAxNTQxIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFRoYXQncyB0aGUgYmVzdCB3YXkgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGxpbmUgdG8gc2VlIGhvdyB0aGlzIGNoYW5nZSBmaXRzIGluIGFuZCB0byBhc3Nlc3MgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBkaWdnaW5nIGludG8gbmV0d29yayBjb2RlISBPbmNlIEkgaGF2ZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSBjYW4gbWFrZSBhIHByb3BlciBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTozOC40NzA0NjM2ODZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zdW5ycGMvc3Zjc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MjA6XFx0XFx0XFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbjE1MjE6XFx0e1xcbjE1MjI6XFx0XFx0aW50IGVyciA9IDA7XFxuMTUyMzpcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzbyA9IHNvY2tmZF9sb29rdXAoZmQsIFxcdTAwMjZlcnIpO1xcbjE1MjQ6XFx0XFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID0gTlVMTDtcXG4xNTI1OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuMTUyNjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkcjtcXG4xNTI3OlxcdFxcdGludCBzYWxlbjtcXG4xNTI4OlxcdFxcbjE1Mjk6XFx0XFx0aWYgKCFzbylcXG4xNTMwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTUzMTpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE1MzI6XFx0XFx0aWYgKHNvY2tfbmV0KHNvLVxcdTAwM2VzaykgIT0gbmV0KVxcbjE1MzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNDpcXHRcXHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xcbjE1MzU6XFx0XFx0aWYgKChzby1cXHUwMDNlc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBQRl9JTkVUKSBcXHUwMDI2XFx1MDAyNiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYpKVxcbjE1MzY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNzpcXHRcXHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcXG4xNTM4OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2XFxuMTUzOTpcXHRcXHQgICAgc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcXG4xNTQwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDE6XFx0XFx0ZXJyID0gLUVJU0NPTk47XFxuMTU0MjpcXHRcXHRpZiAoc28tXFx1MDAzZXN0YXRlIFxcdTAwM2UgU1NfVU5DT05ORUNURUQpXFxuMTU0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ0OlxcdFxcdGVyciA9IC1FQlVTWTtcXG4xNTQ1OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSlcXG4xNTQ2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDc6XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xNTQ4OlxcdFxcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxcbjE1NDk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1MDpcXHRcXHRzdnNrID0gc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO1xcbjE1NTE6XFx0XFx0aWYgKElTX0VSUihzdnNrKSkge1xcbjE1NTI6XFx0XFx0XFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuMTU1MzpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHN2c2spO1xcbjE1NTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1NTpcXHRcXHR9XFxuMTU1NjpcXHRcXHRzYWxlbiA9IGtlcm5lbF9nZXRzb2NrbmFtZShzdnNrLVxcdTAwM2Vza19zb2NrLCBzaW4pO1xcbjE1NTc6XFx0XFx0aWYgKHNhbGVuIFxcdTAwM2U9IDApXFxuMTU1ODpcXHRcXHRcXHRzdmNfeHBydF9zZXRfbG9jYWwoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIHNpbiwgc2FsZW4pO1xcbjE1NTk6XFx0XFx0c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfY3JlZCA9IGdldF9jcmVkKGNyZWQpO1xcbjE1NjA6XFx0XFx0c3ZjX2FkZF9uZXdfcGVybV94cHJ0KHNlcnYsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0KTtcXG4xNTYxOlxcdFxcdHJldHVybiBzdmNfb25lX3NvY2tfbmFtZShzdnNrLCBuYW1lX3JldHVybiwgbGVuKTtcXG4xNTYyOlxcdG91dDpcXG4xNTYzOlxcdFxcdHNvY2tmZF9wdXQoc28pO1xcbjE1NjQ6XFx0XFx0cmV0dXJuIGVycjtcXG4xNTY1OlxcdH1cXG4xNTY2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcXG4xNTY3OlxcdFxcbjE1Njg6XFx0LypcXG4xNTY5OlxcdCAqIENyZWF0ZSBzb2NrZXQgZm9yIFJQQyBzZXJ2aWNlLlxcbjE1NzA6XFx0ICovXFxuMTU3MTpcXHRzdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfY3JlYXRlX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXFxuMTU3MjpcXHRcXHRcXHRcXHRcXHRcXHQgIGludCBwcm90b2NvbCxcXG4xNTczOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0LFxcbjE1NzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbiwgaW50IGxlbixcXG4xNTc1OlxcdFxcdFxcdFxcdFxcdFxcdCAgaW50IGZsYWdzKVxcbjE1NzY6XFx0e1xcbjE1Nzc6XFx0XFx0c3RydWN0IHN2Y19zb2NrXFx0KnN2c2s7XFxuMTU3ODpcXHRcXHRzdHJ1Y3Qgc29ja2V0XFx0KnNvY2s7XFxuMTU3OTpcXHRcXHRpbnRcXHRcXHRlcnJvcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MzguNDcwNTczOTc3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjU3MzUwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBgc3ZjX2FkZHNvY2tgIGZ1bmN0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIHBhcnRpY3VsYXIgY2hlY2suIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uLlxuXG4qKkRpdmluZyBpbnRvIGBzdmNfYWRkc29ja2AgYW5kIEl0cyBDb250ZXh0KipcblxuRmlyc3QsIEkgc2VlIGBzdmNfc2V0dXBfc29ja2V0KHNlcnYsIHNvLCBTVkNfU09DS19ERUZBVUxUUyk7YC4gVGhpcyBpcyB3aGVyZSB0aGUgc29ja2V0IGNvbmZpZ3VyYXRpb24gYXBwZWFycyB0byBiZSBoYXBwZW5pbmcuIEkgcmVjb2duaXplIHRoaXM7IEkndmUgdXNlZCB0aGlzIHNpbWlsYXIgY2FsbCBvZnRlbi4gR2l2ZW4gaXRzIGNlbnRyYWwgcm9sZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGBzdmNfc2V0dXBfc29ja2V0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IHNldHMgdXAgc29ja2V0cy4gSG9wZWZ1bGx5LCB0aGUgc291cmNlIGNvZGUgaXMgd2VsbCBkb2N1bWVudGVkLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNpZGUgZWZmZWN0cyBvciBwb3RlbnRpYWwgZ290Y2hhcyB0aGF0IHRoaXMgbmV3IGNoZWNrIGluIGBzdmNfYWRkc29ja2AgaXMgYXR0ZW1wdGluZyB0byBtaXRpZ2F0ZS4gUmlnaHQgbm93LCB0aGlzIGFsbCBzZWVtcyBhIGxpdHRsZSB2YWd1ZSB1bnRpbCBJIGNoZWNrIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkLiBMZXQncyBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIGBzdmNfc2V0dXBfc29ja2V0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6NDAuNjM2MzEyMDM1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ1MTQxMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX3NldHVwX3NvY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3N2Y3NvY2suYz04NT1lbnVtIHtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTg4LVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjg5OnN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICosIHN0cnVjdCBzb2NrZXQgKixcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05MC1cXHRcXHRcXHRcXHRcXHQgaW50IGZsYWdzKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTQwMT1zdGF0aWMgdm9pZCBzdmNfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00MDctXFx0aWYgKHN2c2spIHtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo0MDg6XFx0XFx0LyogUmVmZXIgdG8gc3ZjX3NldHVwX3NvY2tldCgpIGZvciBkZXRhaWxzLiAqL1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTQwOS1cXHRcXHRybWIoKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTQyMj1zdGF0aWMgdm9pZCBzdmNfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDI2LVxcdGlmIChzdnNrKSB7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NDI3OlxcdFxcdC8qIFJlZmVyIHRvIHN2Y19zZXR1cF9zb2NrZXQoKSBmb3IgZGV0YWlscy4gKi9cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00MjgtXFx0XFx0cm1iKCk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYz04Nzg9c3RhdGljIHZvaWQgc3ZjX3RjcF9saXN0ZW5fZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy04OTgtXFx0aWYgKHN2c2spIHtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo4OTk6XFx0XFx0LyogUmVmZXIgdG8gc3ZjX3NldHVwX3NvY2tldCgpIGZvciBkZXRhaWxzLiAqL1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTkwMC1cXHRcXHRybWIoKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTkxMD1zdGF0aWMgdm9pZCBzdmNfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05MTQtXFx0aWYgKHN2c2spIHtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo5MTU6XFx0XFx0LyogUmVmZXIgdG8gc3ZjX3NldHVwX3NvY2tldCgpIGZvciBkZXRhaWxzLiAqL1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTkxNi1cXHRcXHRybWIoKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTkyNz1zdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfdGNwX2FjY2VwdChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05NTktXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTYwOlxcdC8qIFJlc2V0IHRoZSBpbmhlcml0ZWQgY2FsbGJhY2tzIGJlZm9yZSBjYWxsaW5nIHN2Y19zZXR1cF9zb2NrZXQgKi9cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05NjEtXFx0bmV3c29jay1cXHUwMDNlc2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZSA9IHN2c2stXFx1MDAzZXNrX29zdGF0ZTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk2OS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo5NzA6XFx0bmV3c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2VydiwgbmV3c29jayxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05NzEtXFx0XFx0XFx0XFx0IChTVkNfU09DS19BTk9OWU1PVVMgfCBTVkNfU09DS19URU1QT1JBUlkpKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTE0MjI9c3RhdGljIGludCBzdmNfc29ja19zZW5kcGFnZXMoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNDM4LSAqL1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE0Mzk6c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTQ0MC1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTUxOT1pbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NDktXFx0XFx0Z290byBvdXQ7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTU1MDpcXHRzdnNrID0gc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NTEtXFx0aWYgKElTX0VSUihzdnNrKSkge1xcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTU3MT1zdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfY3JlYXRlX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNjMzLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE2MzQ6XFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc29jaywgZmxhZ3MpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE2MzUtXFx0aWYgKElTX0VSUihzdnNrKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTo0MS4wMDA4MzI0MjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwNjU4MjA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgYW5hbHlzaXM6XG5cbioqRGl2aW5nIGludG8gYHN2Y19zZXR1cF9zb2NrZXRgIGFuZCBgc2tfdXNlcl9kYXRhYCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgc3ZjX3NldHVwX3NvY2tldGAgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBoYW5kbGVzIGBza191c2VyX2RhdGFgLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgZm9yIGFueSBjdXN0b20gUlBDIGltcGxlbWVudGF0aW9uIGFuZCBob3cgd2UgaW50ZXJmYWNlIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0LiBHcmFiYmluZyBsaW5lcyAxNDM5LTE1MTAgd2lsbCBiZSB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXQgYW5kIHNlZSBob3cgaXQncyB1c2VkIGluIHByYWN0aWNlLiBJIG5lZWQgdG8ga25vdzogd2hhdCdzIGJlaW5nIHN0b3JlZCB0aGVyZSwgd2hhdCBjb250ZXh0IGl0IHJlcHJlc2VudHMgKGNsaWVudCwgc2VydmVyLCBpbmRpdmlkdWFsIHJlcXVlc3QsIHNlc3Npb24gZXRjLiksIGFuZCBob3cgaXQncyBpbml0aWFsaXplZCBhbmQgc3Vic2VxdWVudGx5IGFjY2Vzc2VkL21hbmlwdWxhdGVkIHdpdGhpbiB0aGUgUlBDIGZyYW1ld29yay4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgbG9naWMuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpZiBpdCdzIGhvbGRpbmcgcGVyLXNvY2tldC1zcGVjaWZpYyBSUEMgY29udGV4dCBvciBzb21lIG1vcmUgZ2VuZXJhbCBuZXR3b3JraW5nIG1ldGFkYXRhLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NDczNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjQzLjQwNzQxNzg2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N1bnJwYy9zdmNzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQzOCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQzODpcXHQgKi9cXG4xNDM5OlxcdHN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxcbjE0NDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNvY2tldCAqc29jayxcXG4xNDQxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBmbGFncylcXG4xNDQyOlxcdHtcXG4xNDQzOlxcdFxcdHN0cnVjdCBzdmNfc29ja1xcdCpzdnNrO1xcbjE0NDQ6XFx0XFx0c3RydWN0IHNvY2tcXHQqaW5ldDtcXG4xNDQ1OlxcdFxcdGludFxcdFxcdHBtYXBfcmVnaXN0ZXIgPSAhKGZsYWdzIFxcdTAwMjYgU1ZDX1NPQ0tfQU5PTllNT1VTKTtcXG4xNDQ2OlxcdFxcdGludFxcdFxcdHNlbmRwYWdlcztcXG4xNDQ3OlxcdFxcdHVuc2lnbmVkIGxvbmdcXHRwYWdlcztcXG4xNDQ4OlxcdFxcbjE0NDk6XFx0XFx0c2VuZHBhZ2VzID0gc3ZjX3NvY2tfc2VuZHBhZ2VzKHNlcnYsIHNvY2ssIGZsYWdzKTtcXG4xNDUwOlxcdFxcdGlmIChzZW5kcGFnZXMgXFx1MDAzYyAwKVxcbjE0NTE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoc2VuZHBhZ2VzKTtcXG4xNDUyOlxcdFxcbjE0NTM6XFx0XFx0cGFnZXMgPSBzdmNfc2Vydl9tYXhwYWdlcyhzZXJ2KTtcXG4xNDU0OlxcdFxcdHN2c2sgPSBremFsbG9jX2ZsZXgoKnN2c2ssIHNrX3BhZ2VzLCBwYWdlcyk7XFxuMTQ1NTpcXHRcXHRpZiAoIXN2c2spXFxuMTQ1NjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4xNDU3OlxcdFxcbjE0NTg6XFx0XFx0aWYgKHNlbmRwYWdlcykge1xcbjE0NTk6XFx0XFx0XFx0c3Zzay1cXHUwMDNlc2tfYnZlYyA9IGt6YWxsb2Nfb2Jqcygqc3Zzay1cXHUwMDNlc2tfYnZlYywgc2VuZHBhZ2VzKTtcXG4xNDYwOlxcdFxcdFxcdGlmICghc3Zzay1cXHUwMDNlc2tfYnZlYykge1xcbjE0NjE6XFx0XFx0XFx0XFx0a2ZyZWUoc3Zzayk7XFxuMTQ2MjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4xNDYzOlxcdFxcdFxcdH1cXG4xNDY0OlxcdFxcdH1cXG4xNDY1OlxcdFxcbjE0NjY6XFx0XFx0c3Zzay1cXHUwMDNlc2tfbWF4cGFnZXMgPSBwYWdlcztcXG4xNDY3OlxcdFxcbjE0Njg6XFx0XFx0aW5ldCA9IHNvY2stXFx1MDAzZXNrO1xcbjE0Njk6XFx0XFxuMTQ3MDpcXHRcXHRpZiAocG1hcF9yZWdpc3Rlcikge1xcbjE0NzE6XFx0XFx0XFx0aW50IGVycjtcXG4xNDcyOlxcdFxcbjE0NzM6XFx0XFx0XFx0ZXJyID0gc3ZjX3JlZ2lzdGVyKHNlcnYsIHNvY2tfbmV0KHNvY2stXFx1MDAzZXNrKSwgaW5ldC1cXHUwMDNlc2tfZmFtaWx5LFxcbjE0NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICBpbmV0LVxcdTAwM2Vza19wcm90b2NvbCxcXG4xNDc1OlxcdFxcdFxcdFxcdFxcdCAgICAgbnRvaHMoaW5ldF9zayhpbmV0KS1cXHUwMDNlaW5ldF9zcG9ydCkpO1xcbjE0NzY6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4xNDc3OlxcdFxcdFxcdFxcdGtmcmVlKHN2c2stXFx1MDAzZXNrX2J2ZWMpO1xcbjE0Nzg6XFx0XFx0XFx0XFx0a2ZyZWUoc3Zzayk7XFxuMTQ3OTpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjE0ODA6XFx0XFx0XFx0fVxcbjE0ODE6XFx0XFx0fVxcbjE0ODI6XFx0XFxuMTQ4MzpcXHRcXHRzdnNrLVxcdTAwM2Vza19zb2NrID0gc29jaztcXG4xNDg0OlxcdFxcdHN2c2stXFx1MDAzZXNrX3NrID0gaW5ldDtcXG4xNDg1OlxcdFxcdHN2c2stXFx1MDAzZXNrX29zdGF0ZSA9IGluZXQtXFx1MDAzZXNrX3N0YXRlX2NoYW5nZTtcXG4xNDg2OlxcdFxcdHN2c2stXFx1MDAzZXNrX29kYXRhID0gaW5ldC1cXHUwMDNlc2tfZGF0YV9yZWFkeTtcXG4xNDg3OlxcdFxcdHN2c2stXFx1MDAzZXNrX293c3BhY2UgPSBpbmV0LVxcdTAwM2Vza193cml0ZV9zcGFjZTtcXG4xNDg4OlxcdFxcdC8qXFxuMTQ4OTpcXHRcXHQgKiBUaGlzIGJhcnJpZXIgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25cXG4xNDkwOlxcdFxcdCAqIHdpdGggc3ZjX2RhdGFfcmVhZHkoKSwgc3ZjX3RjcF9saXN0ZW5fZGF0YV9yZWFkeSgpLCBhbmQgb3RoZXJzXFxuMTQ5MTpcXHRcXHQgKiB3aGVuIGNhbGxpbmcgY2FsbGJhY2tzIGFib3ZlLlxcbjE0OTI6XFx0XFx0ICovXFxuMTQ5MzpcXHRcXHR3bWIoKTtcXG4xNDk0OlxcdFxcdGluZXQtXFx1MDAzZXNrX3VzZXJfZGF0YSA9IHN2c2s7XFxuMTQ5NTpcXHRcXG4xNDk2OlxcdFxcdC8qIEluaXRpYWxpemUgdGhlIHNvY2tldCAqL1xcbjE0OTc6XFx0XFx0aWYgKHNvY2stXFx1MDAzZXR5cGUgPT0gU09DS19ER1JBTSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6NDMuNDA3NTU2Mjk4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODA5ODUxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBpcyBLQVNBTiB0ZXJyaXRvcnkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoYXQgYHN2Y19hZGRzb2NrYCBmdW5jdGlvbi4uLiBpdCdzIGRvaW5nIGEgY2hlY2ssIGFuZCBpdCdzIGEgY3JpdGljYWwgb25lLiBJZiBgc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldCwgaXQgYmFpbHMgb3V0IHdpdGggYC1FQlVTWWAuIFRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBgc3ZjX3NldHVwX3NvY2tldGAgd2FzIG92ZXJ3cml0aW5nIHRoaXMsIHdoaWNoIHdvdWxkIGFic29sdXRlbHkgc3RvbXAgb24gd2hhdGV2ZXIgZGF0YSBvciBzdWJzeXN0ZW0gd2FzICphbHJlYWR5KiB1c2luZyB0aGF0IGBza191c2VyX2RhdGFgIGZpZWxkLCBsZWFkaW5nIHRvIGEgY2xhc3NpYyBVQUYgb3IsIHdvcnNlLCBhcmJpdHJhcnkgcG9pbnRlciBvciBtZW1vcnkgY29ycnVwdGlvbi4gTmFzdHkuIFRoYXQgYC1FQlVTWWAgY2hlY2sgaXMgYSBjcnVjaWFsIHNhZmVndWFyZC5cblxuU28sIHdoZXJlIGRvZXMgdGhpcyBidWcgc2l0IG9uIHRoZSBzcGVjdHJ1bSBvZiBtZW1vcnkgc2FmZXR5IHRvb2xzPyBMZXQncyB0aWNrIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLiBEb2VzIGl0IGNyZWF0ZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBicmFuY2hpbmcgaW50cm9kdWNlZD8gQWxzbyBuby4gQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTmVnYXRpdmUuIEFyZSBhbnkgYm91bmRzIGNoZWNrcyBhbHRlcmVkIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vdCBpbiB0aGlzIGNhc2UuXG5cbldoYXQncyBoYXBwZW5pbmcgaGVyZSBpcyB0aGUgcHJldmVudGlvbiBvZiBhIHNvY2tldCBmcm9tIGJlaW5nIHJldXNlZCwgb3IgYSB1c2UtYWZ0ZXItZnJlZSwgb3IgYHNrX3VzZXJfZGF0YWAgYmVpbmcgb3ZlcndyaXR0ZW4gLSBpdCdzIGRpcmVjdGx5IGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24sIFVBRiwgYW5kIGRhdGEgY29ycnVwdGlvbi4gVGhhdCdzICp0ZXh0Ym9vayogS0FTQU4gdGVycml0b3J5LiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIG1lbW9yeSBzYWZldHkgaXNzdWVzIEtBU0FOIGlzIGJ1aWx0IHRvIGZpbmQuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgbm8gbmV3IGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIGFib3V0IGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIG1pc3VzZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgY2xlYXJseSBgZmFsc2VgLlxuXG5IZXJlJ3MgbXkgcmF0aW9uYWxlIGZvciB0aGUgY2hhbmdlOlxuVGhlIHBhdGNoIGluc2VydHMgYSBjaGVjayB3aXRoaW4gYHN2Y19hZGRzb2NrKClgLiAgVGhpcyByZXR1cm5zIGAtRUJVU1lgIGlmIHRoZSBzb2NrZXQgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBwYXJ0IG9mIHRoZSBzeXN0ZW0gb3IgYW4gUlBDIHNlcnZpY2UsIGFuZCB0aGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIGBza191c2VyX2RhdGFgLiBQcmV2ZW50aW5nIHRoaXMgaXMgdGhlICprZXkqIGhlcmUuICBPdmVyd3JpdGluZyBgc2tfdXNlcl9kYXRhYCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBvdXRyaWdodCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggaXMgYXZvaWRlZCBoZXJlLlxuXG5Dcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgb3IgdXNlci1zcGFjZSBpbmZvIGxlYWtzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgKnRoaXMqIGNoYW5nZS4gVGhlIHBvdGVudGlhbCBwcm9ibGVtcyBoZXJlLCBhcmUgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9ucyBvciBtaXN1c2Ugb2YgdGhlIHNvY2tldCBzdGF0ZSwgYW5kIHRoYXQgc29ydCBvZiBzdHVmZiBpcyB2ZXJ5IHdlbGwgaGFuZGxlZCBieSBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuICBObyBuZWVkIGZvciBhbnkgc3BlY2lhbCBLTVNBTiBmdXp6aW5nLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjMsIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6NDkuMTg4NTQ4MzgyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqb55s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 14:06:19 +0000 UTC FinishedAt: 2026-09-03 14:09:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "3bf08b66-cf4f-4b47-a71f-cf672709d3b3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "svc_addsock", "__write_ports_addfd" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OywKICAgICYjMzQ7X193cml0ZV9wb3J0c19hZGRmZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHN2Y19hZGRzb2NrKCkgdG8gZW5zdXJlIHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHN2Y19hZGRzb2NrKClgIHRvIHByZXZlbnQgc29ja2V0cyB3aXRoIGV4aXN0aW5nIGBza191c2VyX2RhdGFgIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBhcyBSUEMgc2VydmljZSBsaXN0ZW5lciBzb2NrZXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nL1JQQyBzZXJ2ZXIgY29kZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgTkZTRCBjb250cm9sIGludGVyZmFjZSAod3JpdGluZyBhbiBGRCB0byAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBiZDNkY2JhZjQwODUxNmMwMWEwYzYyMDBmMTViNDQ1N2I3Y2FkOTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjA4OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbkBAIC0xNTQxLDYgJiM0MzsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsXG4gXHRlcnIgPSAtRUlTQ09OTjtcbiBcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdGVyciA9IC1FQlVTWTtcbiYjNDM7XHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXHRlcnIgPSAtRU5PRU5UO1xuIFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4gXHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OywKICAgICYjMzQ7X193cml0ZV9wb3J0c19hZGRmZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcHJldmVudCBzb2NrZXRzIHdpdGggZXhpc3RpbmcgYHNrX3VzZXJfZGF0YWAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGFzIFJQQyBzZXJ2aWNlIGxpc3RlbmVyIHNvY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcvUlBDIHNlcnZlciBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBORlNEIGNvbnRyb2wgaW50ZXJmYWNlICh3cml0aW5nIGFuIEZEIHRvIC9wcm9jL2ZzL25mc2QvcG9ydGxpc3QpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGJkM2RjYmFmNDA4NTE2YzAxYTBjNjIwMGYxNWI0NDU3YjdjYWQ5MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTQ6MDg6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xNTQxLDYgJiM0MzsxNTQxLDkgQEAgaW50IHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBpbnQgZmQsCiAJZXJyID0gLUVJU0NPTk47CiAJaWYgKHNvLSZndDtzdGF0ZSAmZ3Q7IFNTX1VOQ09OTkVDVEVEKQogCQlnb3RvIG91dDsKJiM0MzsJZXJyID0gLUVCVVNZOwomIzQzOwlpZiAoc28tJmd0O3NrLSZndDtza191c2VyX2RhdGEpCiYjNDM7CQlnb3RvIG91dDsKIAllcnIgPSAtRU5PRU5UOwogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQogCQlnb3RvIG91dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzdmNfYWRkc29ja2AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRpZmYgdGFyZ2V0aW5nIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIGBzdmNfYWRkc29ja2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBpbnRyb2R1Y2VkLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBjaGVjazogYGlmIChzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YSkgZ290byBvdXQ7YCByaWdodCBhZnRlciB0aGUgZXhpc3RpbmcgYHNvLSZndDtzdGF0ZWAgYW5kIHJpZ2h0IGJlZm9yZSB0aGUgYHRyeV9tb2R1bGVfZ2V0YCBjYWxsLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBzaG9ydC1jaXJjdWl0aW5nIHRoZSBhZGQgb3BlcmF0aW9uIGlmIGBza191c2VyX2RhdGFgIGlzIHNldC4gVGhlIHByZXZpb3VzIGNoZWNrcyBjb3ZlcmVkIGNvbm5lY3Rpb24gc3RhdGUgYW5kIG1vZHVsZSBhdmFpbGFiaWxpdHksIHRoaXMgaXMgbmV3LCBhbmQgY2xlYXJseSByZWxhdGVkIHRvIHJlc291cmNlIGNvbnRlbnRpb24gb3IgcGVyaGFwcyBwcmV2ZW50aW5nIGRvdWJsZS1yZWdpc3RyYXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGludGVuZGVkIHRvIHByZXZlbnQgYSBzb2NrZXQgZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgc2VydmljZSBpZiBpdCYjMzk7cyBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBzb21lIG90aGVyIGNvbnRleHQuIFdlIGtub3cgdGhhdCBgc2tfdXNlcl9kYXRhYCBpcyBvZnRlbiB1c2VkIHRvIGhvbGQgcHJpdmF0ZSBkYXRhIHNwZWNpZmljIHRvIGEgc29ja2V0LCBzbyBhIG5vbi1udWxsIGBza191c2VyX2RhdGFgIGxpa2VseSBpbmRpY2F0ZXMgdGhlIHNvY2tldCBpcyBhbHJlYWR5ICYjMzk7aW4gdXNlJiMzOTsuIE1ha2VzIHNlbnNlLiBQcmV2ZW50aW5nIHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBhdm9pZGluZyByYWNlIGNvbmRpdGlvbnMsIHJlc291cmNlIGxlYWtzLCBvciBwcmV2ZW50aW5nIGRvdWJsZSBhY2NvdW50aW5nIG9mIHJlc291cmNlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLgoKVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBzdmNfYWRkc29ja2AgYW5kIHdoYXQgY2FsbHMgaXQuIEkmIzM5O2xsIGZpcmUgdXAgbXkgdHJ1c3R5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IGFyZWEsIGFuZCB3aGVyZSBgc3ZjX2FkZHNvY2tgIGdldHMgY2FsbGVkIGZyb20uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MjA6XHRcdFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuMTUyMTpcdHtcbjE1MjI6XHRcdGludCBlcnIgPSAwO1xuMTUyMzpcdFx0c3RydWN0IHNvY2tldCAqc28gPSBzb2NrZmRfbG9va3VwKGZkLCBcdTAwMjZlcnIpO1xuMTUyNDpcdFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID0gTlVMTDtcbjE1MjU6XHRcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XG4xNTI2Olx0XHRzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyO1xuMTUyNzpcdFx0aW50IHNhbGVuO1xuMTUyODpcdFxuMTUyOTpcdFx0aWYgKCFzbylcbjE1MzA6XHRcdFx0cmV0dXJuIGVycjtcbjE1MzE6XHRcdGVyciA9IC1FSU5WQUw7XG4xNTMyOlx0XHRpZiAoc29ja19uZXQoc28tXHUwMDNlc2spICE9IG5ldClcbjE1MzM6XHRcdFx0Z290byBvdXQ7XG4xNTM0Olx0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuMTUzNTpcdFx0aWYgKChzby1cdTAwM2Vzay1cdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVCkgXHUwMDI2XHUwMDI2IChzby1cdTAwM2Vzay1cdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYpKVxuMTUzNjpcdFx0XHRnb3RvIG91dDtcbjE1Mzc6XHRcdGVyciA9ICAtRVBST1RPTk9TVVBQT1JUO1xuMTUzODpcdFx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuMTUzOTpcdFx0ICAgIHNvLVx1MDAzZXNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuMTU0MDpcdFx0XHRnb3RvIG91dDtcbjE1NDE6XHRcdGVyciA9IC1FSVNDT05OO1xuMTU0MjpcdFx0aWYgKHNvLVx1MDAzZXN0YXRlIFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcbjE1NDM6XHRcdFx0Z290byBvdXQ7XG4xNTQ0Olx0XHRlcnIgPSAtRUJVU1k7XG4xNTQ1Olx0XHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuMTU0NjpcdFx0XHRnb3RvIG91dDtcbjE1NDc6XHRcdGVyciA9IC1FTk9FTlQ7XG4xNTQ4Olx0XHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbjE1NDk6XHRcdFx0Z290byBvdXQ7XG4xNTUwOlx0XHRzdnNrID0gc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO1xuMTU1MTpcdFx0aWYgKElTX0VSUihzdnNrKSkge1xuMTU1MjpcdFx0XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbjE1NTM6XHRcdFx0ZXJyID0gUFRSX0VSUihzdnNrKTtcbjE1NTQ6XHRcdFx0Z290byBvdXQ7XG4xNTU1Olx0XHR9XG4xNTU2Olx0XHRzYWxlbiA9IGtlcm5lbF9nZXRzb2NrbmFtZShzdnNrLVx1MDAzZXNrX3NvY2ssIHNpbik7XG4xNTU3Olx0XHRpZiAoc2FsZW4gXHUwMDNlPSAwKVxuMTU1ODpcdFx0XHRzdmNfeHBydF9zZXRfbG9jYWwoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBzaW4sIHNhbGVuKTtcbjE1NTk6XHRcdHN2c2stXHUwMDNlc2tfeHBydC54cHRfY3JlZCA9IGdldF9jcmVkKGNyZWQpO1xuMTU2MDpcdFx0c3ZjX2FkZF9uZXdfcGVybV94cHJ0KHNlcnYsIFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCk7XG4xNTYxOlx0XHRyZXR1cm4gc3ZjX29uZV9zb2NrX25hbWUoc3ZzaywgbmFtZV9yZXR1cm4sIGxlbik7XG4xNTYyOlx0b3V0OlxuMTU2MzpcdFx0c29ja2ZkX3B1dChzbyk7XG4xNTY0Olx0XHRyZXR1cm4gZXJyO1xuMTU2NTpcdH1cbjE1NjY6XHRFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XG4xNTY3Olx0XG4xNTY4Olx0LypcbjE1Njk6XHQgKiBDcmVhdGUgc29ja2V0IGZvciBSUEMgc2VydmljZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjY4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBzdmNfYWRkc29ja2AgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGBzdmNfYWRkc29ja2AuIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhpcyBpcyBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlIGZvciBkaWdnaW5nIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBhIHNwZWNpZmljIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20gd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCB0byBmaWd1cmluZyBvdXQgaXRzIHJvbGUgYW5kIGFueSBwb3RlbnRpYWwgaW1wYWN0IG9mIG1vZGlmeWluZyBpdCwgb3IgZm9yIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfYWRkc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnNkL25mc2N0bC5jPTczMj1zdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZGZkKGNoYXIgKmJ1Ziwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbi0tXG5mcy9uZnNkL25mc2N0bC5jLTc0OC1cdHNlcnYgPSBubi1cdTAwM2VuZnNkX3NlcnY7XG5mcy9uZnNkL25mc2N0bC5jOjc0OTpcdGVyciA9IHN2Y19hZGRzb2NrKHNlcnYsIG5ldCwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCBjcmVkKTtcbmZzL25mc2QvbmZzY3RsLmMtNzUwLVxuLS1cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaD02NT12b2lkXHRcdHN2Y19zZW5kKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApO1xuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oOjY2OmludFx0XHRzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaC02Ny1cdFx0XHQgICAgY29uc3QgaW50IGZkLCBjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbixcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xNDM5PXN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDYtLyoqXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTA3OiAqIHN2Y19hZGRzb2NrIC0gYWRkIGEgbGlzdGVuZXIgc29ja2V0IHRvIGFuIFJQQyBzZXJ2aWNlXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTA4LSAqIEBzZXJ2OiBwb2ludGVyIHRvIFJQQyBzZXJ2aWNlIHRvIHdoaWNoIHRvIGFkZCBhIG5ldyBsaXN0ZW5lclxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MTgtICovXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTE5OmludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUyMC1cdFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NjUtfVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTU2NjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTY3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBgc3ZjX2FkZHNvY2tgIFVzYWdlKioKCk9rYXksIHNvIGBzdmNfYWRkc29ja2AgaXMgZXhwb3J0ZWQsIGFuZCBpdCBsb29rcyBsaWtlIGBmcy9uZnNkL25mc2N0bC5jYCBpcyB1c2luZyBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqaG93Ki4gVGhlIGNsdWUgaXMgdGhpcyBpbnRlcmFjdGlvbiB3aXRoIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCBvciBzb21ldGhpbmcgYW5hbG9nb3VzIHdpdGhpbiB0aGUgYHN5c2ZzL25mc2N0bGAgaW50ZXJmYWNlLiBSaWdodCwgc28gdGhhdCBwb2ludHMgbWUgZGlyZWN0bHkgdG8gdGhhdCBgbmZzY3RsLmNgIGZpbGUuIFRpbWUgdG8gZGlnIGluLi4uIEkmIzM5O2xsIGp1bXAgcmlnaHQgdG8gbGluZSA3MzIsIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhlcmUuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWxldmFudCBgbmZzY3RsYCBsb2dpYyBvciB0aGUgcG9ydGxpc3QgaW50ZXJhY3Rpb24gb2NjdXJzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gYHN2Y19hZGRzb2NrYCBiYXNlZCBvbiB0aGF0IGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmZzZC9uZnNjdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzI1Olx0fVxuIDcyNjpcdFxuIDcyNzpcdC8qXG4gNzI4Olx0ICogQSBzaW5nbGUgJiMzOTtmZCYjMzk7IG51bWJlciB3YXMgd3JpdHRlbiwgaW4gd2hpY2ggY2FzZSBpdCBtdXN0IGJlIGZvclxuIDcyOTpcdCAqIGEgc29ja2V0IG9mIGEgc3VwcG9ydGVkIGZhbWlseS9wcm90b2NvbCwgYW5kIHdlIHVzZSBpdCBhcyBhblxuIDczMDpcdCAqIG5mc2QgbGlzdGVuZXIuXG4gNzMxOlx0ICovXG4gNzMyOlx0c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19hZGRmZChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4gNzMzOlx0e1xuIDczNDpcdFx0Y2hhciAqbWVzZyA9IGJ1ZjtcbiA3MzU6XHRcdGludCBmZCwgZXJyO1xuIDczNjpcdFx0c3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzZF9uZXRfaWQpO1xuIDczNzpcdFx0c3RydWN0IHN2Y19zZXJ2ICpzZXJ2O1xuIDczODpcdFxuIDczOTpcdFx0ZXJyID0gZ2V0X2ludChcdTAwMjZtZXNnLCBcdTAwMjZmZCk7XG4gNzQwOlx0XHRpZiAoZXJyICE9IDAgfHwgZmQgXHUwMDNjIDApXG4gNzQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc0MjpcdFx0dHJhY2VfbmZzZF9jdGxfcG9ydHNfYWRkZmQobmV0LCBmZCk7XG4gNzQzOlx0XG4gNzQ0Olx0XHRlcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KG5ldCk7XG4gNzQ1Olx0XHRpZiAoZXJyICE9IDApXG4gNzQ2Olx0XHRcdHJldHVybiBlcnI7XG4gNzQ3Olx0XG4gNzQ4Olx0XHRzZXJ2ID0gbm4tXHUwMDNlbmZzZF9zZXJ2O1xuIDc0OTpcdFx0ZXJyID0gc3ZjX2FkZHNvY2soc2VydiwgbmV0LCBmZCwgYnVmLCBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQsIGNyZWQpO1xuIDc1MDpcdFxuIDc1MTpcdFx0aWYgKCFzZXJ2LVx1MDAzZXN2X25ydGhyZWFkcyBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZubi1cdTAwM2VuZnNkX3NlcnYtXHUwMDNlc3ZfcGVybXNvY2tzKSlcbiA3NTI6XHRcdFx0bmZzZF9kZXN0cm95X3NlcnYobmV0KTtcbiA3NTM6XHRcbiA3NTQ6XHRcdHJldHVybiBlcnI7XG4gNzU1Olx0fVxuIDc1NjpcdFxuIDc1NzpcdC8qXG4gNzU4Olx0ICogQSB0cmFuc3BvcnQgbGlzdGVuZXIgaXMgYWRkZWQgYnkgd3JpdGluZyBpdHMgdHJhbnNwb3J0IG5hbWUgYW5kXG4gNzU5Olx0ICogYSBwb3J0IG51bWJlci5cbiA3NjA6XHQgKi9cbiA3NjE6XHRzdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZHhwcnQoY2hhciAqYnVmLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuIDc2MjpcdHtcbiA3NjM6XHRcdGNoYXIgdHJhbnNwb3J0WzE2XTtcbiA3NjQ6XHRcdHN0cnVjdCBzdmNfeHBydCAqeHBydDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBVc2VyLVNwYWNlIEVudHJ5IFBvaW50IGZvciBgX193cml0ZV9wb3J0c19hZGRmZGAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBpcyBiZWluZyBpbnZva2VkIGZyb20gdXNlciBzcGFjZS4gTGV0JiMzOTtzIGRpZyBpbi4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gd3JpdGluZy4gVGhlIGBfX2AgcHJlZml4IHVzdWFsbHkgaW5kaWNhdGVzIGFuIGludGVybmFsIGtlcm5lbCBmdW5jdGlvbiwgc28gaXQgd29uJiMzOTt0IGJlIGNhbGxlZCBkaXJlY3RseS4gSXQmIzM5O3MgbGlrZWx5IGEgbG93ZXItbGV2ZWwgaGVscGVyIGZvciBhIG1vcmUgdXNlci1mYWNpbmcgc3lzdGVtIGNhbGwuCgpNeSBpbW1lZGlhdGUgcGxhbiBpcyB0byB1c2UgYSBjb21iaW5hdGlvbiBvZiB0ZWNobmlxdWVzLiBJJiMzOTtsbCBzdGFydCB3aXRoIHNvdXJjZSBjb2RlIGFuYWx5c2lzLCBncmVwcGluZyBmb3IgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiwga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgaXQgbWlnaHQgYmUgbGlua2VkIHRvIG90aGVyIGZ1bmN0aW9ucyBhbmQgcG90ZW50aWFsbHkgdHJhY2UgaXQgd2l0aCBhIGRlYnVnZ2VyIHRvIGNoZWNrIHRoYXQgd2hhdCBJIHRob3VnaHQgd2FzIGhhcHBlbmluZywgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGUgYXJndW1lbnRzIHBhc3NlZCwgYW5kIHdoYXQgY29udGV4dCB0cmlnZ2VycyBpdHMgZXhlY3V0aW9uLiBJIGtub3cgSSBoYXZlIHRvIGNvbnNpZGVyIGRpZmZlcmVudCBzeXN0ZW0gY2FsbHMgdGhhdCBjb3VsZCBoYW5kbGUgdGhlIGZ1bmN0aW9uIGFzIGEgaGVscGVyLgoKSSYjMzk7bGwga2VlcCBhIHNoYXJwIGV5ZSBvdXQgZm9yIGxpa2VseSBzdXNwZWN0cyBsaWtlIGBlcG9sbF9jdGxgIChnaXZlbiBpdHMgRkQgbWFuYWdlbWVudCBuYXR1cmUpIG9yIGV2ZW4gY3VzdG9tIGRyaXZlcnMgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgc3BlY2lmaWMgdG8gaGFyZHdhcmUgb3IgYSBub24tc3RhbmRhcmQgZGV2aWNlLiBJIGtub3cgdGhhdCBsb29raW5nIGF0IHRoZSBmdW5jdGlvbiBjYWxscyB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIGlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYWxsIHBvc3NpYmxlIGVudHJ5IHBvaW50cyB0byBzZWUgaWYgdGhlIGNhbGxzIGFyZSBtYWRlIGZyb20gdGhlcmUuIEkgbWlnaHQgZXZlbiBjb25zaWRlciBsb29raW5nIGF0IHRoZSBrZXJuZWwgaGVhZGVycywgbG9va2luZyBmb3Igc3RydWN0dXJlcyBhbmQgbWFjcm9zIHRoYXQgYXJlIGRlZmluZWQgYXMgd2VsbC4KCkkgbmVlZCB0byBxdWlja2x5IGZvcm11bGF0ZSBhIHBsYW4gdGhhdCBpZGVudGlmaWVzIHN5c3RlbSBjYWxscyBpbnZvbHZlZCBpbiB3cml0ZSBvcGVyYXRpb25zIGFuZCB0aGVuIGlkZW50aWZ5IHRoZSBwb3NzaWJsZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgdGhlIG9wZXJhdGlvbnMgY2FsbC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBpZGVudGlmeSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X193cml0ZV9wb3J0c19hZGRmZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mc2QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9uZnNjdGwuYz03MTg9c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19uYW1lcyhjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5mcy9uZnNkL25mc2N0bC5jLTczMS0gKi9cbmZzL25mc2QvbmZzY3RsLmM6NzMyOnN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkZmQoY2hhciAqYnVmLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuZnMvbmZzZC9uZnNjdGwuYy03MzMte1xuLS1cbmZzL25mc2QvbmZzY3RsLmM9ODA1PXN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsXG4tLVxuZnMvbmZzZC9uZnNjdGwuYy04MTEtXHRpZiAoaXNkaWdpdChidWZbMF0pKVxuZnMvbmZzZC9uZnNjdGwuYzo4MTI6XHRcdHJldHVybiBfX3dyaXRlX3BvcnRzX2FkZGZkKGJ1ZiwgbmV0LCBmaWxlLVx1MDAzZWZfY3JlZCk7XG5mcy9uZnNkL25mc2N0bC5jLTgxMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkZTRCBQb3J0bGlzdCBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgX193cml0ZV9wb3J0c2AsIHdoaWNoIEkgc2VlIGlzIGEgaGVscGVyIHdpdGhpbiB0aGUgYHdyaXRlX3BvcnRzYCBoYW5kbGVyIHNwZWNpZmljYWxseSBmb3IgdGhlIGAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0YCBmaWxlIOKAkyB0aGF0IE5GUyBkYWVtb24gcG9ydGxpc3QgZW50cnkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgTkZTRCBhbmQgU1VOUlBDLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBleHBlY3RlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHNldCwgb3IgSSB3b24mIzM5O3QgdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBpcyBzdXBwb3NlZCB0byBkby4gQSBzb2xpZCBncmFzcCBvZiB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgdGVsbCBtZSBpZiB0aGUgTkZTIGRhZW1vbiBpcyBidWlsdCBhbmQgY29uZmlndXJlZCBhcyBJIHdvdWxkIGV4cGVjdCwgc28gSSBoYXZlIGEgZm91bmRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBgX193cml0ZV9wb3J0c2AgaGFuZGxlci4gSSBuZWVkIHRvIGtub3cgdGhlIHByZXJlcXVpc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GU0QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnNkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MzAzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5mcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXG5mcy9uZnNkL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy03LVx0c2VsZWN0IENSQzMyXG5mcy9uZnNkL0tjb25maWc6ODpcdHNlbGVjdCBDUllQVE9fTElCX01ENSBpZiBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbmZzL25mc2QvS2NvbmZpZzo5Olx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2IGlmIE5GU0RfVjRcbmZzL25mc2QvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE8gIyByZXF1aXJlZCBieSBSUENTRUNfR1NTX0tSQjUgYW5kIHNpZ25lZCBmaWxlaGFuZGxlc1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNC1cdHNlbGVjdCBORlNfQ09NTU9OXG5mcy9uZnNkL0tjb25maWc6MTU6XHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjJfQUNMXG5mcy9uZnNkL0tjb25maWc6MTY6XHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjNfQUNMXG5mcy9uZnNkL0tjb25maWctMTctXHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuLS1cbmZzL25mc2QvS2NvbmZpZy0zNS1cdCAgU3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMyAoUkZDIDE4MTMpIGlzIGFsd2F5cyBhdmFpbGFibGUgd2hlblxuZnMvbmZzZC9LY29uZmlnOjM2Olx0ICBDT05GSUdfTkZTRCBpcyBzZWxlY3RlZC5cbmZzL25mc2QvS2NvbmZpZy0zNy1cbi0tXG5mcy9uZnNkL0tjb25maWctMzktXG5mcy9uZnNkL0tjb25maWc6NDA6Y29uZmlnIE5GU0RfVjJcbmZzL25mc2QvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiAyIChERVBSRUNBVEVEKVwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjQyOlx0ZGVwZW5kcyBvbiBORlNEXG5mcy9uZnNkL0tjb25maWctNDMtXHRkZWZhdWx0IG5cbi0tXG5mcy9uZnNkL0tjb25maWctNTAtXG5mcy9uZnNkL0tjb25maWc6NTE6Y29uZmlnIE5GU0RfVjJfQUNMXG5mcy9uZnNkL0tjb25maWctNTItXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cJiMzNDtcbmZzL25mc2QvS2NvbmZpZzo1MzpcdGRlcGVuZHMgb24gTkZTRF9WMlxuZnMvbmZzZC9LY29uZmlnLTU0LVxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxuZnMvbmZzZC9LY29uZmlnLTU2LVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6NTc6XHRkZXBlbmRzIG9uIE5GU0RcbmZzL25mc2QvS2NvbmZpZy01OC1cdGhlbHBcbi0tXG5mcy9uZnNkL0tjb25maWctNzYtXG5mcy9uZnNkL0tjb25maWc6Nzc6Y29uZmlnIE5GU0RfVjRcbmZzL25mc2QvS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiA0XCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6Nzk6XHRkZXBlbmRzIG9uIE5GU0QgXHUwMDI2XHUwMDI2IFBST0NfRlNcbmZzL25mc2QvS2NvbmZpZy04MC1cdHNlbGVjdCBGU19QT1NJWF9BQ0xcbi0tXG5mcy9uZnNkL0tjb25maWctOTMtXG5mcy9uZnNkL0tjb25maWc6OTQ6Y29uZmlnIE5GU0RfUE5GU1xuZnMvbmZzZC9LY29uZmlnLTk1LVx0Ym9vbFxuZnMvbmZzZC9LY29uZmlnLTk2LVxuZnMvbmZzZC9LY29uZmlnOjk3OmNvbmZpZyBORlNEX0JMT0NLTEFZT1VUXG5mcy9uZnNkL0tjb25maWctOTgtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgYmxvY2sgbGF5b3V0c1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjk5Olx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBCTE9DS1xuZnMvbmZzZC9LY29uZmlnOjEwMDpcdHNlbGVjdCBORlNEX1BORlNcbmZzL25mc2QvS2NvbmZpZy0xMDEtXHRzZWxlY3QgRVhQT1JURlNfQkxPQ0tfT1BTXG4tLVxuZnMvbmZzZC9LY29uZmlnLTEwOS1cbmZzL25mc2QvS2NvbmZpZzoxMTA6Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzoxMTI6XHRkZXBlbmRzIG9uIE5GU0RfVjQgXHUwMDI2XHUwMDI2IEJMT0NLXG5mcy9uZnNkL0tjb25maWc6MTEzOlx0c2VsZWN0IE5GU0RfUE5GU1xuZnMvbmZzZC9LY29uZmlnLTExNC1cdHNlbGVjdCBFWFBPUlRGU19CTE9DS19PUFNcbi0tXG5mcy9uZnNkL0tjb25maWctMTIzLVxuZnMvbmZzZC9LY29uZmlnOjEyNDpjb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjEyNjpcdGRlcGVuZHMgb24gTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnOjEyNzpcdHNlbGVjdCBORlNEX1BORlNcbmZzL25mc2QvS2NvbmZpZy0xMjgtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnLTE0MC1cbmZzL25mc2QvS2NvbmZpZzoxNDE6Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcbmZzL25mc2QvS2NvbmZpZy0xNDItXHRib29sIFwmIzM0O05GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTQzOlx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBORlNfVjRfMlxuZnMvbmZzZC9LY29uZmlnLTE0NC1cdGhlbHBcbi0tXG5mcy9uZnNkL0tjb25maWctMTUwLVxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxuZnMvbmZzZC9LY29uZmlnLTE1Mi1cdGJvb2wgXCYjMzQ7UHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzoxNTM6XHRkZXBlbmRzIG9uIE5GU0RfVjQgXHUwMDI2XHUwMDI2IFNFQ1VSSVRZXG5mcy9uZnNkL0tjb25maWctMTU0LVx0aGVscFxuLS1cbmZzL25mc2QvS2NvbmZpZy0xNjMtXG5mcy9uZnNkL0tjb25maWc6MTY0OmNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbmZzL25mc2QvS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE2NjpcdGRlcGVuZHMgb24gTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnLTE2Ny1cdGRlZmF1bHQgblxuLS1cbmZzL25mc2QvS2NvbmZpZy0xNzktXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE4MjpcdGRlcGVuZHMgb24gTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnLTE4My1cdGRlZmF1bHQgblxuLS1cbmZzL25mc2QvTWFrZWZpbGU9Nj1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXHRcdFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xuZnMvbmZzZC9NYWtlZmlsZS03LVxuZnMvbmZzZC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19ORlNEKVx0JiM0Mzs9IG5mc2Qub1xuZnMvbmZzZC9NYWtlZmlsZS05LVxuLS1cbmZzL25mc2QvTWFrZWZpbGU9MTM9bmZzZC15IFx0XHRcdCYjNDM7PSBuZnNzdmMubyBuZnNjdGwubyBuZnNmaC5vIHZmcy5vIFxcXG4tLVxuZnMvbmZzZC9NYWtlZmlsZS0xNi1cdFx0XHQgICBuZXRsaW5rLm9cbmZzL25mc2QvTWFrZWZpbGU6MTc6bmZzZC0kKENPTkZJR19ORlNEX1YyKSAmIzQzOz0gbmZzcHJvYy5vIG5mc3hkci5vXG5mcy9uZnNkL01ha2VmaWxlOjE4Om5mc2QtJChDT05GSUdfTkZTRF9WMl9BQ0wpICYjNDM7PSBuZnMyYWNsLm9cbmZzL25mc2QvTWFrZWZpbGU6MTk6bmZzZC0kKENPTkZJR19ORlNEX1YzX0FDTCkgJiM0Mzs9IG5mczNhY2wub1xuZnMvbmZzZC9NYWtlZmlsZToyMDpuZnNkLSQoQ09ORklHX05GU0RfVjQpXHQmIzQzOz0gbmZzNHByb2MubyBuZnM0eGRyLm8gbmZzNHN0YXRlLm8gbmZzNGlkbWFwLm8gXFxcbmZzL25mc2QvTWFrZWZpbGUtMjEtXHRcdFx0ICAgbmZzNGFjbC5vIG5mczRjYWxsYmFjay5vIG5mczRyZWNvdmVyLm8gbmZzNHhkcl9nZW4ub1xuZnMvbmZzZC9NYWtlZmlsZToyMjpuZnNkLSQoQ09ORklHX05GU0RfUE5GUykgJiM0Mzs9IG5mczRsYXlvdXRzLm9cbmZzL25mc2QvTWFrZWZpbGU6MjM6bmZzZC0kKENPTkZJR19ORlNEX0JMT0NLTEFZT1VUKSAmIzQzOz0gYmxvY2tsYXlvdXQubyBibG9ja2xheW91dHhkci5vXG5mcy9uZnNkL01ha2VmaWxlOjI0Om5mc2QtJChDT05GSUdfTkZTRF9TQ1NJTEFZT1VUKSAmIzQzOz0gYmxvY2tsYXlvdXQubyBibG9ja2xheW91dHhkci5vXG5mcy9uZnNkL01ha2VmaWxlOjI1Om5mc2QtJChDT05GSUdfTkZTRF9GTEVYRklMRUxBWU9VVCkgJiM0Mzs9IGZsZXhmaWxlbGF5b3V0Lm8gZmxleGZpbGVsYXlvdXR4ZHIub1xuZnMvbmZzZC9NYWtlZmlsZS0yNi1uZnNkLSQoQ09ORklHX05GU19MT0NBTElPKSAmIzQzOz0gbG9jYWxpby5vXG4tLVxuZnMvbmZzZC9hdHRyNC5oLTUtXG5mcy9uZnNkL2F0dHI0Lmg6NjojaWZuZGVmIF9MSU5VWF9ORlNEX0FUVFI0X0hcbmZzL25mc2QvYXR0cjQuaDo3OiNkZWZpbmUgX0xJTlVYX05GU0RfQVRUUjRfSFxuZnMvbmZzZC9hdHRyNC5oLTgtXG4tLVxuZnMvbmZzZC9hdHRyNC5oLTEyLS8qXG5mcy9uZnNkL2F0dHI0Lmg6MTM6ICogVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBub3QgaW1wbGVtZW50ZWQgYnkgTkZTRDpcbmZzL25mc2QvYXR0cjQuaC0xNC0gKiAgICBBUkNISVZFICAgICAgIChkZXByZWNhdGVkIGFueXdheSlcbi0tXG5mcy9uZnNkL2F0dHI0LmgtMjAtICovXG5mcy9uZnNkL2F0dHI0Lmg6MjE6I2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuZnMvbmZzZC9hdHRyNC5oLTIyLShGQVRUUjRfV09SRDBfU1VQUE9SVEVEX0FUVFJTICAgfCBGQVRUUjRfV09SRDBfVFlQRSAgICAgICAgIHwgRkFUVFI0X1dPUkQwX0ZIX0VYUElSRV9UWVBFICAgXFxcbi0tXG5mcy9uZnNkL2F0dHI0LmgtMzItXG5mcy9uZnNkL2F0dHI0Lmg6MzM6I2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuZnMvbmZzZC9hdHRyNC5oLTM0LShGQVRUUjRfV09SRDFfTU9ERSAgICAgICAgICAgICAgfCBGQVRUUjRfV09SRDFfTk9fVFJVTkMgICAgIHwgRkFUVFI0X1dPUkQxX05VTUxJTktTICAgICAgICAgXFxcbi0tXG5mcy9uZnNkL2F0dHI0LmgtNDAtXG5mcy9uZnNkL2F0dHI0Lmg6NDE6I2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDIgMFxuZnMvbmZzZC9hdHRyNC5oLTQyLVxuZnMvbmZzZC9hdHRyNC5oLTQzLS8qIDQuMSAqL1xuZnMvbmZzZC9hdHRyNC5oOjQ0OiNpZmRlZiBDT05GSUdfTkZTRF9QTkZTXG5mcy9uZnNkL2F0dHI0Lmg6NDU6I2RlZmluZSBQTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDFcdEZBVFRSNF9XT1JEMV9GU19MQVlPVVRfVFlQRVNcbmZzL25mc2QvYXR0cjQuaDo0NjojZGVmaW5lIFBORlNEX1NVUFBPUlRFRF9BVFRSU19XT1JEMiBcXFxuZnMvbmZzZC9hdHRyNC5oLTQ3LShGQVRUUjRfV09SRDJfTEFZT1VUX0JMS1NJWkVcdHwgRkFUVFI0X1dPUkQyX0xBWU9VVF9UWVBFUylcbmZzL25mc2QvYXR0cjQuaC00OC0jZWxzZVxuZnMvbmZzZC9hdHRyNC5oOjQ5OiNkZWZpbmUgUE5GU0RfU1VQUE9SVEVEX0FUVFJTX1dPUkQxXHQwXG5mcy9uZnNkL2F0dHI0Lmg6NTA6I2RlZmluZSBQTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDJcdDBcbmZzL25mc2QvYXR0cjQuaDo1MTojZW5kaWYgLyogQ09ORklHX05GU0RfUE5GUyAqL1xuZnMvbmZzZC9hdHRyNC5oLTUyLVxuZnMvbmZzZC9hdHRyNC5oOjUzOiNkZWZpbmUgTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDAgXFxcbmZzL25mc2QvYXR0cjQuaDo1NDpcdE5GU0Q0X1NVUFBPUlRFRF9BVFRSU19XT1JEMFxuZnMvbmZzZC9hdHRyNC5oLTU1LVxuZnMvbmZzZC9hdHRyNC5oOjU2OiNkZWZpbmUgTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDEgXFxcbmZzL25mc2QvYXR0cjQuaDo1NzpcdChORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDFcdHwgUE5GU0RfU1VQUE9SVEVEX0FUVFJTX1dPUkQxKVxuZnMvbmZzZC9hdHRyNC5oLTU4LVxuZnMvbmZzZC9hdHRyNC5oOjU5OiNkZWZpbmUgTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDIgXFxcbmZzL25mc2QvYXR0cjQuaDo2MDpcdChORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDJcdHwgUE5GU0RfU1VQUE9SVEVEX0FUVFJTX1dPUkQyIHwgXFxcbmZzL25mc2QvYXR0cjQuaC02MS1cdCBGQVRUUjRfV09SRDJfU1VQUEFUVFJfRVhDTENSRUFUKVxuLS1cbmZzL25mc2QvYXR0cjQuaC02My0vKiA0LjIgKi9cbmZzL25mc2QvYXR0cjQuaDo2NDojaWZkZWYgQ09ORklHX05GU0RfVjRfU0VDVVJJVFlfTEFCRUxcbmZzL25mc2QvYXR0cjQuaDo2NTojZGVmaW5lIE5GU0Q0XzJfU0VDVVJJVFlfQVRUUlNcdFx0RkFUVFI0X1dPUkQyX1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL2F0dHI0LmgtNjYtI2Vsc2VcbmZzL25mc2QvYXR0cjQuaDo2NzojZGVmaW5lIE5GU0Q0XzJfU0VDVVJJVFlfQVRUUlNcdFx0MFxuZnMvbmZzZC9hdHRyNC5oLTY4LSNlbmRpZlxuZnMvbmZzZC9hdHRyNC5oLTY5LVxuZnMvbmZzZC9hdHRyNC5oOjcwOiNpZmRlZiBDT05GSUdfTkZTRF9WNF9QT1NJWF9BQ0xTXG5mcy9uZnNkL2F0dHI0Lmg6NzE6I2RlZmluZSBORlNENF8yX1BPU0lYX0FDTF9BVFRSUyBcXFxuZnMvbmZzZC9hdHRyNC5oLTcyLVx0KEZBVFRSNF9XT1JEMl9BQ0xfVFJVRUZPUk0gfCBcXFxuLS1cbmZzL25mc2QvYXR0cjQuaC03Ni0jZWxzZVxuZnMvbmZzZC9hdHRyNC5oOjc3OiNkZWZpbmUgTkZTRDRfMl9QT1NJWF9BQ0xfQVRUUlNcdFx0MFxuZnMvbmZzZC9hdHRyNC5oLTc4LSNlbmRpZlxuZnMvbmZzZC9hdHRyNC5oLTc5LVxuZnMvbmZzZC9hdHRyNC5oOjgwOiNkZWZpbmUgTkZTRDRfMl9TVVBQT1JURURfQVRUUlNfV09SRDIgXFxcbmZzL25mc2QvYXR0cjQuaDo4MTpcdChORlNENF8xX1NVUFBPUlRFRF9BVFRSU19XT1JEMiB8IFxcXG5mcy9uZnNkL2F0dHI0LmgtODItXHRGQVRUUjRfV09SRDJfTU9ERV9VTUFTSyB8IFxcXG5mcy9uZnNkL2F0dHI0LmgtODMtXHRGQVRUUjRfV09SRDJfQ0xPTkVfQkxLU0laRSB8IFxcXG5mcy9uZnNkL2F0dHI0Lmg6ODQ6XHRORlNENF8yX1NFQ1VSSVRZX0FUVFJTIHwgXFxcbmZzL25mc2QvYXR0cjQuaC04NS1cdEZBVFRSNF9XT1JEMl9YQVRUUl9TVVBQT1JUIHwgXFxcbi0tXG5mcy9uZnNkL2F0dHI0LmgtODgtXHRGQVRUUjRfV09SRDJfT1BFTl9BUkdVTUVOVFMgfCBcXFxuZnMvbmZzZC9hdHRyNC5oOjg5Olx0TkZTRDRfMl9QT1NJWF9BQ0xfQVRUUlMpXG5mcy9uZnNkL2F0dHI0LmgtOTAtXG5mcy9uZnNkL2F0dHI0LmgtOTEtLyogVGhlc2Ugd2lsbCByZXR1cm4gRVJSX0lOVkFMIGlmIHNwZWNpZmllZCBpbiBHRVRBVFRSIG9yIFJFQURESVIuICovXG5mcy9uZnNkL2F0dHI0Lmg6OTI6I2RlZmluZSBORlNEX1dSSVRFT05MWV9BVFRSU19XT1JEMSBcXFxuZnMvbmZzZC9hdHRyNC5oLTkzLVx0KEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgICB8IEZBVFRSNF9XT1JEMV9USU1FX01PRElGWV9TRVQpXG4tLVxuZnMvbmZzZC9hdHRyNC5oLTk5LSAqL1xuZnMvbmZzZC9hdHRyNC5oOjEwMDojZGVmaW5lIE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQwIFxcXG5mcy9uZnNkL2F0dHI0LmgtMTAxLVx0KEZBVFRSNF9XT1JEMF9TSVpFIHwgRkFUVFI0X1dPUkQwX0FDTClcbmZzL25mc2QvYXR0cjQuaDoxMDI6I2RlZmluZSBORlNEX1dSSVRFQUJMRV9BVFRSU19XT1JEMSBcXFxuZnMvbmZzZC9hdHRyNC5oLTEwMy1cdChGQVRUUjRfV09SRDFfTU9ERSB8IEZBVFRSNF9XT1JEMV9PV05FUiB8IEZBVFRSNF9XT1JEMV9PV05FUl9HUk9VUCBcXFxuLS1cbmZzL25mc2QvYXR0cjQuaC0xMDUtXHR8IEZBVFRSNF9XT1JEMV9USU1FX01PRElGWV9TRVQpXG5mcy9uZnNkL2F0dHI0Lmg6MTA2OiNpZmRlZiBDT05GSUdfTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxuZnMvbmZzZC9hdHRyNC5oLTEwNy0jZGVmaW5lIE1BWUJFX0ZBVFRSNF9XT1JEMl9TRUNVUklUWV9MQUJFTCBcXFxuLS1cbmZzL25mc2QvYXR0cjQuaC0xMTEtI2VuZGlmXG5mcy9uZnNkL2F0dHI0Lmg6MTEyOiNpZmRlZiBDT05GSUdfTkZTRF9WNF9QT1NJWF9BQ0xTXG5mcy9uZnNkL2F0dHI0LmgtMTEzLSNkZWZpbmUgTUFZQkVfRkFUVFI0X1dPUkQyX1BPU0lYX0FDTF9BVFRSUyBcXFxuLS1cbmZzL25mc2QvYXR0cjQuaC0xMTctI2VuZGlmXG5mcy9uZnNkL2F0dHI0Lmg6MTE4OiNkZWZpbmUgTkZTRF9XUklURUFCTEVfQVRUUlNfV09SRDIgXFxcbmZzL25mc2QvYXR0cjQuaC0xMTktXHQoRkFUVFI0X1dPUkQyX01PREVfVU1BU0sgXFxcbi0tXG5mcy9uZnNkL2F0dHI0LmgtMTI1LVxuZnMvbmZzZC9hdHRyNC5oOjEyNjojZGVmaW5lIE5GU0RfU1VQUEFUVFJfRVhDTENSRUFUX1dPUkQwIFxcXG5mcy9uZnNkL2F0dHI0Lmg6MTI3Olx0TkZTRF9XUklURUFCTEVfQVRUUlNfV09SRDBcbmZzL25mc2QvYXR0cjQuaC0xMjgtLypcbi0tXG5mcy9uZnNkL2F0dHI0LmgtMTMxLSAqL1xuZnMvbmZzZC9hdHRyNC5oOjEzMjojZGVmaW5lIE5GU0RfU1VQUEFUVFJfRVhDTENSRUFUX1dPUkQxIFxcXG5mcy9uZnNkL2F0dHI0Lmg6MTMzOlx0KE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQxIFx1MDAyNiBcXFxuZnMvbmZzZC9hdHRyNC5oLTEzNC1cdCB+KEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRllfU0VUKSlcbi0tXG5mcy9uZnNkL2F0dHI0LmgtMTQzLSAqL1xuZnMvbmZzZC9hdHRyNC5oOjE0NDojZGVmaW5lIE5GU0RfU1VQUEFUVFJfRVhDTENSRUFUX1dPUkQyIFxcXG5mcy9uZnNkL2F0dHI0Lmg6MTQ1Olx0KE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQyIFx1MDAyNiBcXFxuZnMvbmZzZC9hdHRyNC5oLTE0Ni1cdH4oRkFUVFI0X1dPUkQyX1RJTUVfREVMRUdfQUNDRVNTIHwgRkFUVFI0X1dPUkQyX1RJTUVfREVMRUdfTU9ESUZZKSlcbi0tXG5mcy9uZnNkL2F0dHI0Lmg9MTU3PXN0YXRpYyBpbmxpbmUgYm9vbCBuZnNkX2F0dHJzX3N1cHBvcnRlZCh1MzIgbWlub3J2ZXJzaW9uLCBjb25zdCB1MzIgKmJtdmFsKVxuLS1cbmZzL25mc2QvYXR0cjQuaC0xNjEtXG5mcy9uZnNkL2F0dHI0Lmg6MTYyOiNlbmRpZiAvKiBfTElOVVhfTkZTRF9BVFRSNF9IICovXG4tLVxuZnMvbmZzZC9hdXRoLmgtNy1cbmZzL25mc2QvYXV0aC5oOjg6I2lmbmRlZiBMSU5VWF9ORlNEX0FVVEhfSFxuZnMvbmZzZC9hdXRoLmg6OTojZGVmaW5lIExJTlVYX05GU0RfQVVUSF9IXG5mcy9uZnNkL2F1dGguaC0xMC1cbi0tXG5mcy9uZnNkL2F1dGguaD0yMT1zdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5mc2RfdXNlcl9uYW1lc3BhY2UoY29uc3Qgc3RydWN0IHN2Y19ycXN0ICpycXN0cCk7XG5mcy9uZnNkL2F1dGguaC0yMi1cbmZzL25mc2QvYXV0aC5oOjIzOiNlbmRpZiAvKiBMSU5VWF9ORlNEX0FVVEhfSCAqL1xuLS1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0xNy1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYzoxODojZGVmaW5lIE5GU0REQkdfRkFDSUxJVFlcdE5GU0REQkdfUE5GU1xuZnMvbmZzZC9ibG9ja2xheW91dC5jLTE5LVxuLS1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYz0xNzk9bmZzZDRfYmxvY2tfY29tbWl0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzZDRfbGF5b3V0Y29tbWl0ICpsY3AsXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTE5OS1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYzoyMDA6I2lmZGVmIENPTkZJR19ORlNEX0JMT0NLTEFZT1VUXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMjAxLXN0YXRpYyBpbnRcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9MjUyPWNvbnN0IHN0cnVjdCBuZnNkNF9sYXlvdXRfb3BzIGJsX2xheW91dF9vcHMgPSB7XG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTI2OS19O1xuZnMvbmZzZC9ibG9ja2xheW91dC5jOjI3MDojZW5kaWYgLyogQ09ORklHX05GU0RfQkxPQ0tMQVlPVVQgKi9cbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yNzEtXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MjcyOiNpZmRlZiBDT05GSUdfTkZTRF9TQ1NJTEFZT1VUXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMjczLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjI3NDojZGVmaW5lIE5GU0RfTURTX1BSX0ZFTkNFRFx0WEFfTUFSS18wXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMjc1LVxuLS1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYz0yODQ9c3RhdGljIGlubGluZSBpbnQgbmZzZDRfc2NzaV9mZW5jZV9pbnNlcnQoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTI5Mi1cdGlmIChyZXQgPT0gLUVCVVNZKSB7XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MjkzOlx0XHRfX3hhX2NsZWFyX21hcmsoeGEsIGRldmljZSwgTkZTRF9NRFNfUFJfRkVOQ0VEKTtcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yOTQtXHRcdHJldCA9IDA7XG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTMwMT1zdGF0aWMgaW5saW5lIGJvb2wgbmZzZDRfc2NzaV9mZW5jZV9zZXQoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIGRldl90IGRldmljZSlcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzA2LVx0eGFfbG9jayh4YSk7XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MzA3Olx0c2tpcCA9IHhhX2dldF9tYXJrKHhhLCBkZXZpY2UsIE5GU0RfTURTX1BSX0ZFTkNFRCk7XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzA4LVx0aWYgKCFza2lwKVxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjMwOTpcdFx0X194YV9zZXRfbWFyayh4YSwgZGV2aWNlLCBORlNEX01EU19QUl9GRU5DRUQpO1xuZnMvbmZzZC9ibG9ja2xheW91dC5jLTMxMC1cdHhhX3VubG9jayh4YSk7XG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgbmZzZDRfc2NzaV9mZW5jZV9jbGVhcihzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgZGV2X3QgZGV2aWNlKVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTMxNS17XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MzE2Olx0eGFfY2xlYXJfbWFyayhcdTAwMjZjbHAtXHUwMDNlY2xfZGV2X2ZlbmNlcywgZGV2aWNlLCBORlNEX01EU19QUl9GRU5DRUQpO1xuZnMvbmZzZC9ibG9ja2xheW91dC5jLTMxNy19XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzE4LVxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjMxOTojZGVmaW5lIE5GU0RfTURTX1BSX0tFWVx0XHQweDAxMDAwMDAwMDAwMDAwMDBVTExcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0zMjAtXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTM1Nj1uZnNkNF9ibG9ja19nZXRfZGV2aWNlX2luZm9fc2NzaShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0zOTEtXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MzkyOlx0cmV0ID0gb3BzLVx1MDAzZXByX3JlZ2lzdGVyKHNiLVx1MDAzZXNfYmRldiwgMCwgTkZTRF9NRFNfUFJfS0VZLCB0cnVlKTtcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0zOTMtXHRpZiAocmV0KSB7XG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTM5OC1cbmZzL25mc2QvYmxvY2tsYXlvdXQuYzozOTk6XHRyZXQgPSBvcHMtXHUwMDNlcHJfcmVzZXJ2ZShzYi1cdTAwM2VzX2JkZXYsIE5GU0RfTURTX1BSX0tFWSxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00MDAtXHRcdFx0UFJfRVhDTFVTSVZFX0FDQ0VTU19SRUdfT05MWSwgMCk7XG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTQyNj1uZnNkNF9zY3NpX3Byb2NfbGF5b3V0Y29tbWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTQ0Ni0gKiBibG9jayBkZXZpY2UuIElmIGEgZmVuY2Ugb3BlcmF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6NDQ3OiAqIGl0IHRvIGNvbXBsZXRlIGJlZm9yZSBjaGVja2luZyB0aGUgTkZTRF9NRFNfUFJfRkVOQ0VEIGZsYWcuIE9uY2UgdGhlXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6NDQ4OiAqIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSwgY2hlY2sgdGhlIGZsYWcuIElmIE5GU0RfTURTX1BSX0ZFTkNFRCBpcyBzZXQsXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtNDQ5LSAqIHVwZGF0ZSB0aGUgbGF5b3V0IHN0YXRlaWQgYnkgc2V0dGluZyB0aGUgbHNfZmVuY2VkIGZsYWcgdG8gaW5kaWNhdGVcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9NDU5PW5mc2Q0X3Njc2lfZmVuY2VfY2xpZW50KHN0cnVjdCBuZnM0X2xheW91dF9zdGF0ZWlkICpscywgc3RydWN0IG5mc2RfZmlsZSAqZmlsZSlcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtNDcxLVxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjQ3MjpcdHN0YXR1cyA9IGJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2Vmb3BzLVx1MDAzZXByX29wcy1cdTAwM2Vwcl9wcmVlbXB0KGJkZXYsIE5GU0RfTURTX1BSX0tFWSxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00NzMtXHRcdFx0bmZzZDRfc2NzaV9wcl9rZXkoY2xwKSxcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9NTA3PWNvbnN0IHN0cnVjdCBuZnNkNF9sYXlvdXRfb3BzIHNjc2lfbGF5b3V0X29wcyA9IHtcbi0tXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtNTI1LX07XG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6NTI2OiNlbmRpZiAvKiBDT05GSUdfTkZTRF9TQ1NJTEFZT1VUICovXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5jLTEzLVxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5jOjE0OiNkZWZpbmUgTkZTRERCR19GQUNJTElUWVx0TkZTRERCR19QTkZTXG5mcy9uZnNkL2Jsb2NrbGF5b3V0eGRyLmMtMTUtXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuaDoyOiNpZm5kZWYgX05GU0RfQkxPQ0tMQVlPVVRYRFJfSFxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oOjM6I2RlZmluZSBfTkZTRF9CTE9DS0xBWU9VVFhEUl9IIDFcbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuaC00LVxuLS1cbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuaD03Mz1fX2JlMzIgbmZzZDRfc2NzaV9kZWNvZGVfbGF5b3V0dXBkYXRlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsXG4tLVxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oLTc1LVxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oOjc2OiNlbmRpZiAvKiBfTkZTRF9CTE9DS0xBWU9VVFhEUl9IICovXG4tLVxuZnMvbmZzZC9jdXJyZW50X3N0YXRlaWQuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oOjI6I2lmbmRlZiBfTkZTRDRfQ1VSUkVOVF9TVEFURV9IXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oOjM6I2RlZmluZSBfTkZTRDRfQ1VSUkVOVF9TVEFURV9IXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oLTQtXG4tLVxuZnMvbmZzZC9jdXJyZW50X3N0YXRlaWQuaD0zOD1leHRlcm4gdm9pZCBuZnNkNF9nZXRfd3JpdGVzdGF0ZWlkKHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLFxuLS1cbmZzL25mc2QvY3VycmVudF9zdGF0ZWlkLmgtNDAtXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oOjQxOiNlbmRpZiAgIC8qIF9ORlNENF9DVVJSRU5UX1NUQVRFX0ggKi9cbi0tXG5mcy9uZnNkL2RlYnVnZnMuYz03PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuZnNkX3RvcF9kaXIgX19yZWFkX21vc3RseTtcbi0tXG5mcy9uZnNkL2RlYnVnZnMuYy0xNy0gKiBhbGxvd2VkKS4gVGhpcyBzZXR0aW5nIHRha2VzIGltbWVkaWF0ZSBlZmZlY3QgZm9yIGFsbCBORlNcbmZzL25mc2QvZGVidWdmcy5jOjE4OiAqIHZlcnNpb25zLCBhbGwgZXhwb3J0cywgYW5kIGluIGFsbCBORlNEIG5ldCBuYW1lc3BhY2VzLlxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTktICovXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmM9Mjc9c3RhdGljIGludCBuZnNkX2Rzcl9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbi0tXG5mcy9uZnNkL2RlYnVnZnMuYy0zMy1cdFx0ICovXG5mcy9uZnNkL2RlYnVnZnMuYzozNDpcdFx0bmZzZF9pb19jYWNoZV9yZWFkID0gTkZTRF9JT19CVUZGRVJFRDtcbmZzL25mc2QvZGVidWdmcy5jLTM1LVx0fVxuLS1cbmZzL25mc2QvZGVidWdmcy5jPTM5PURFRklORV9ERUJVR0ZTX0FUVFJJQlVURShuZnNkX2Rzcl9mb3BzLCBuZnNkX2Rzcl9nZXQsIG5mc2RfZHNyX3NldCwgXCYjMzQ7JWxsdVxcblwmIzM0Oyk7XG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNDktICogVGhpcyBzZXR0aW5nIHRha2VzIGltbWVkaWF0ZSBlZmZlY3QgZm9yIGFsbCBORlMgdmVyc2lvbnMsXG5mcy9uZnNkL2RlYnVnZnMuYzo1MDogKiBhbGwgZXhwb3J0cywgYW5kIGluIGFsbCBORlNEIG5ldCBuYW1lc3BhY2VzLlxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNTEtICovXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmM9NTk9c3RhdGljIGludCBuZnNkX2lvX2NhY2hlX3JlYWRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNjMtXHRzd2l0Y2ggKHZhbCkge1xuZnMvbmZzZC9kZWJ1Z2ZzLmM6NjQ6XHRjYXNlIE5GU0RfSU9fQlVGRkVSRUQ6XG5mcy9uZnNkL2RlYnVnZnMuYzo2NTpcdFx0bmZzZF9pb19jYWNoZV9yZWFkID0gTkZTRF9JT19CVUZGRVJFRDtcbmZzL25mc2QvZGVidWdmcy5jLTY2LVx0XHRicmVhaztcbmZzL25mc2QvZGVidWdmcy5jOjY3Olx0Y2FzZSBORlNEX0lPX0RPTlRDQUNIRTpcbmZzL25mc2QvZGVidWdmcy5jOjY4Olx0Y2FzZSBORlNEX0lPX0RJUkVDVDpcbmZzL25mc2QvZGVidWdmcy5jLTY5LVx0XHQvKlxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNzAtXHRcdCAqIE11c3QgZGlzYWJsZSBzcGxpY2VfcmVhZCB3aGVuIGVuYWJsaW5nXG5mcy9uZnNkL2RlYnVnZnMuYzo3MTpcdFx0ICogTkZTRF9JT19ET05UQ0FDSEUuXG5mcy9uZnNkL2RlYnVnZnMuYy03Mi1cdFx0ICovXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmM9ODQ9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKG5mc2RfaW9fY2FjaGVfcmVhZF9mb3BzLCBuZnNkX2lvX2NhY2hlX3JlYWRfZ2V0LFxuLS1cbmZzL25mc2QvZGVidWdmcy5jLTk0LSAqIFRoaXMgc2V0dGluZyB0YWtlcyBpbW1lZGlhdGUgZWZmZWN0IGZvciBhbGwgTkZTIHZlcnNpb25zLFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6OTU6ICogYWxsIGV4cG9ydHMsIGFuZCBpbiBhbGwgTkZTRCBuZXQgbmFtZXNwYWNlcy5cbmZzL25mc2QvZGVidWdmcy5jLTk2LSAqL1xuLS1cbmZzL25mc2QvZGVidWdmcy5jPTEwND1zdGF0aWMgaW50IG5mc2RfaW9fY2FjaGVfd3JpdGVfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTA4LVx0c3dpdGNoICh2YWwpIHtcbmZzL25mc2QvZGVidWdmcy5jOjEwOTpcdGNhc2UgTkZTRF9JT19CVUZGRVJFRDpcbmZzL25mc2QvZGVidWdmcy5jOjExMDpcdGNhc2UgTkZTRF9JT19ET05UQ0FDSEU6XG5mcy9uZnNkL2RlYnVnZnMuYzoxMTE6XHRjYXNlIE5GU0RfSU9fRElSRUNUOlxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTEyLVx0XHRuZnNkX2lvX2NhY2hlX3dyaXRlID0gdmFsO1xuLS1cbmZzL25mc2QvZGVidWdmcy5jPTEzMT12b2lkIG5mc2RfZGVidWdmc19pbml0KHZvaWQpXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTQyLVx0XHRcdCAgICBcdTAwMjZuZnNkX2lvX2NhY2hlX3dyaXRlX2ZvcHMpO1xuZnMvbmZzZC9kZWJ1Z2ZzLmM6MTQzOiNpZmRlZiBDT05GSUdfTkZTRF9WNFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTQ0LVx0ZGVidWdmc19jcmVhdGVfYm9vbChcJiMzNDtkZWxlZ2F0ZWRfdGltZXN0YW1wc1wmIzM0OywgMDY0NCwgbmZzZF90b3BfZGlyLFxuLS1cbmZzL25mc2QvZXhwb3J0LmMtMzAtXG5mcy9uZnNkL2V4cG9ydC5jOjMxOiNkZWZpbmUgTkZTRERCR19GQUNJTElUWVx0TkZTRERCR19FWFBPUlRcbmZzL25mc2QvZXhwb3J0LmMtMzItXG4tLVxuZnMvbmZzZC9leHBvcnQuYz0yNTg9c3RhdGljIGludCBleHBrZXlfbm90aWZ5KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaClcbmZzL25mc2QvZXhwb3J0LmMtMjU5LXtcbmZzL25mc2QvZXhwb3J0LmM6MjYwOlx0cmV0dXJuIG5mc2RfY2FjaGVfbm90aWZ5KGNkLCBoLCBORlNEX0NBQ0hFX1RZUEVfRVhQS0VZKTtcbmZzL25mc2QvZXhwb3J0LmMtMjYxLX1cbi0tXG5mcy9uZnNkL2V4cG9ydC5jPTMzND1pbnQgbmZzZF9ubF9leHBrZXlfZ2V0X3JlcXNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZnMvbmZzZC9leHBvcnQuYy0zNzYtXHRcdFx0ICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBcdTAwMjZuZnNkX25sX2ZhbWlseSxcbmZzL25mc2QvZXhwb3J0LmM6Mzc3Olx0XHRcdCAgTkxNX0ZfTVVMVEksIE5GU0RfQ01EX0VYUEtFWV9HRVRfUkVRUyk7XG5mcy9uZnNkL2V4cG9ydC5jLTM3OC1cdGlmICghaGRyKSB7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy0zODktXG5mcy9uZnNkL2V4cG9ydC5jOjM5MDpcdFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgTkZTRF9BX0VYUEtFWV9SRVFTX1JFUVVFU1RTKTtcbmZzL25mc2QvZXhwb3J0LmMtMzkxLVx0XHRpZiAoIW5lc3QpXG4tLVxuZnMvbmZzZC9leHBvcnQuYy0zOTMtXG5mcy9uZnNkL2V4cG9ydC5jOjM5NDpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkZTRF9BX0VYUEtFWV9TRVFOTyxcbmZzL25mc2QvZXhwb3J0LmMtMzk1LVx0XHRcdFx0ICAgICAgc2Vxbm9zW2ldLCAwKSB8fFxuZnMvbmZzZC9leHBvcnQuYzozOTY6XHRcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIE5GU0RfQV9FWFBLRVlfQ0xJRU5ULFxuZnMvbmZzZC9leHBvcnQuYy0zOTctXHRcdFx0XHQgICBlay1cdTAwM2Vla19jbGllbnQtXHUwMDNlbmFtZSkgfHxcbmZzL25mc2QvZXhwb3J0LmM6Mzk4Olx0XHQgICAgbmxhX3B1dF91OChza2IsIE5GU0RfQV9FWFBLRVlfRlNJRFRZUEUsXG5mcy9uZnNkL2V4cG9ydC5jLTM5OS1cdFx0XHQgICAgICAgZWstXHUwMDNlZWtfZnNpZHR5cGUpIHx8XG5mcy9uZnNkL2V4cG9ydC5jOjQwMDpcdFx0ICAgIG5sYV9wdXQoc2tiLCBORlNEX0FfRVhQS0VZX0ZTSUQsXG5mcy9uZnNkL2V4cG9ydC5jLTQwMS1cdFx0XHQgICAga2V5X2xlbihlay1cdTAwM2Vla19mc2lkdHlwZSksIGVrLVx1MDAzZWVrX2ZzaWQpKSB7XG4tLVxuZnMvbmZzZC9leHBvcnQuYz00NDA9c3RhdGljIGludCBuZnNkX25sX3BhcnNlX29uZV9leHBrZXkoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsXG4tLVxuZnMvbmZzZC9leHBvcnQuYy00NDIte1xuZnMvbmZzZC9leHBvcnQuYzo0NDM6XHRzdHJ1Y3QgbmxhdHRyICp0YltORlNEX0FfRVhQS0VZX1BBVEggJiM0MzsgMV07XG5mcy9uZnNkL2V4cG9ydC5jLTQ0NC1cdHN0cnVjdCBhdXRoX2RvbWFpbiAqZG9tID0gTlVMTDtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTQ1MS1cbmZzL25mc2QvZXhwb3J0LmM6NDUyOlx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkZTRF9BX0VYUEtFWV9QQVRILCBhdHRyLFxuZnMvbmZzZC9leHBvcnQuYy00NTMtXHRcdFx0ICAgICAgIG5mc2RfZXhwa2V5X25sX3BvbGljeSwgTlVMTCk7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy00NTctXHQvKiBjbGllbnQgKHJlcXVpcmVkKSAqL1xuZnMvbmZzZC9leHBvcnQuYzo0NTg6XHRpZiAoIXRiW05GU0RfQV9FWFBLRVlfQ0xJRU5UXSlcbmZzL25mc2QvZXhwb3J0LmMtNDU5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbmZzL25mc2QvZXhwb3J0LmMtNDYwLVxuZnMvbmZzZC9leHBvcnQuYzo0NjE6XHRkb20gPSBhdXRoX2RvbWFpbl9maW5kKG5sYV9kYXRhKHRiW05GU0RfQV9FWFBLRVlfQ0xJRU5UXSkpO1xuZnMvbmZzZC9leHBvcnQuYy00NjItXHRpZiAoIWRvbSlcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTQ2NS1cdC8qIGZzaWR0eXBlIChyZXF1aXJlZCkgKi9cbmZzL25mc2QvZXhwb3J0LmM6NDY2Olx0aWYgKCF0YltORlNEX0FfRVhQS0VZX0ZTSURUWVBFXSkge1xuZnMvbmZzZC9leHBvcnQuYy00NjctXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy00NjktXHR9XG5mcy9uZnNkL2V4cG9ydC5jOjQ3MDpcdGZzaWR0eXBlID0gbmxhX2dldF91OCh0YltORlNEX0FfRVhQS0VZX0ZTSURUWVBFXSk7XG5mcy9uZnNkL2V4cG9ydC5jLTQ3MS1cdGlmIChrZXlfbGVuKGZzaWR0eXBlKSA9PSAwKSB7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy00NzYtXHQvKiBmc2lkIChyZXF1aXJlZCkgKi9cbmZzL25mc2QvZXhwb3J0LmM6NDc3Olx0aWYgKCF0YltORlNEX0FfRVhQS0VZX0ZTSURdKSB7XG5mcy9uZnNkL2V4cG9ydC5jLTQ3OC1cdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTQ4MC1cdH1cbmZzL25mc2QvZXhwb3J0LmM6NDgxOlx0ZnNpZF9sZW4gPSBubGFfbGVuKHRiW05GU0RfQV9FWFBLRVlfRlNJRF0pO1xuZnMvbmZzZC9leHBvcnQuYy00ODItXHRpZiAoZnNpZF9sZW4gIT0ga2V5X2xlbihmc2lkdHlwZSkpIHtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTQ4Ny1cdC8qIGV4cGlyeSAocmVxdWlyZWQsIHdhbGxjbG9jayBzZWNvbmRzKSAqL1xuZnMvbmZzZC9leHBvcnQuYzo0ODg6XHRpZiAoIXRiW05GU0RfQV9FWFBLRVlfRVhQSVJZXSkge1xuZnMvbmZzZC9leHBvcnQuYy00ODktXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy00OTQtXHRnZXRib290dGltZTY0KFx1MDAyNmJvb3QpO1xuZnMvbmZzZC9leHBvcnQuYzo0OTU6XHRrZXkuaC5leHBpcnlfdGltZSA9IG5sYV9nZXRfdTY0KHRiW05GU0RfQV9FWFBLRVlfRVhQSVJZXSkgLVxuZnMvbmZzZC9leHBvcnQuYy00OTYtXHRcdFx0ICAgIGJvb3QudHZfc2VjO1xuLS1cbmZzL25mc2QvZXhwb3J0LmMtNDk4LVx0a2V5LmVrX2ZzaWR0eXBlID0gZnNpZHR5cGU7XG5mcy9uZnNkL2V4cG9ydC5jOjQ5OTpcdG1lbWNweShrZXkuZWtfZnNpZCwgbmxhX2RhdGEodGJbTkZTRF9BX0VYUEtFWV9GU0lEXSksIGZzaWRfbGVuKTtcbmZzL25mc2QvZXhwb3J0LmMtNTAwLVxuLS1cbmZzL25mc2QvZXhwb3J0LmMtNTA2LVxuZnMvbmZzZC9leHBvcnQuYzo1MDc6XHRpZiAodGJbTkZTRF9BX0VYUEtFWV9ORUdBVElWRV0pIHtcbmZzL25mc2QvZXhwb3J0LmMtNTA4LVx0XHRzZXRfYml0KENBQ0hFX05FR0FUSVZFLCBcdTAwMjZrZXkuaC5mbGFncyk7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy01MTMtXHRcdFx0ZXJyID0gLUVOT01FTTtcbmZzL25mc2QvZXhwb3J0LmM6NTE0Olx0fSBlbHNlIGlmICh0YltORlNEX0FfRVhQS0VZX1BBVEhdKSB7XG5mcy9uZnNkL2V4cG9ydC5jOjUxNTpcdFx0ZXJyID0ga2Vybl9wYXRoKG5sYV9kYXRhKHRiW05GU0RfQV9FWFBLRVlfUEFUSF0pLCAwLFxuZnMvbmZzZC9leHBvcnQuYy01MTYtXHRcdFx0XHRcdTAwMjZrZXkuZWtfcGF0aCk7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy01MjEtXHRcdFx0dHJhY2VfbmZzZF9leHBrZXlfdXBkYXRlKGVrLFxuZnMvbmZzZC9leHBvcnQuYzo1MjI6XHRcdFx0XHRcdG5sYV9kYXRhKHRiW05GU0RfQV9FWFBLRVlfUEFUSF0pKTtcbmZzL25mc2QvZXhwb3J0LmMtNTIzLVx0XHRlbHNlXG4tLVxuZnMvbmZzZC9leHBvcnQuYz01NTE9aW50IG5mc2RfbmxfZXhwa2V5X3NldF9yZXFzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTU2OC1cbmZzL25mc2QvZXhwb3J0LmM6NTY5Olx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGF0dHIsIE5GU0RfQV9FWFBLRVlfUkVRU19SRVFVRVNUUyxcbmZzL25mc2QvZXhwb3J0LmMtNTcwLVx0XHRcdFx0IGluZm8tXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pIHtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jPTY2MD1pbnQgbmZzZF9ubF9zdmNfZXhwb3J0X2dldF9yZXFzX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmZzL25mc2QvZXhwb3J0LmMtNzA0LVx0XHRcdCAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgXHUwMDI2bmZzZF9ubF9mYW1pbHksXG5mcy9uZnNkL2V4cG9ydC5jOjcwNTpcdFx0XHQgIE5MTV9GX01VTFRJLCBORlNEX0NNRF9TVkNfRVhQT1JUX0dFVF9SRVFTKTtcbmZzL25mc2QvZXhwb3J0LmMtNzA2LVx0aWYgKCFoZHIpIHtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTcyMy1cdFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYixcbmZzL25mc2QvZXhwb3J0LmM6NzI0Olx0XHRcdFx0ICAgICAgTkZTRF9BX1NWQ19FWFBPUlRfUkVRU19SRVFVRVNUUyk7XG5mcy9uZnNkL2V4cG9ydC5jLTcyNS1cdFx0aWYgKCFuZXN0KVxuLS1cbmZzL25mc2QvZXhwb3J0LmMtNzI3LVxuZnMvbmZzZC9leHBvcnQuYzo3Mjg6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE5GU0RfQV9TVkNfRVhQT1JUX1NFUU5PLFxuZnMvbmZzZC9leHBvcnQuYy03MjktXHRcdFx0XHQgICAgICBzZXFub3NbaV0sIDApIHx8XG5mcy9uZnNkL2V4cG9ydC5jOjczMDpcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgTkZTRF9BX1NWQ19FWFBPUlRfQ0xJRU5ULFxuZnMvbmZzZC9leHBvcnQuYy03MzEtXHRcdFx0XHQgICBleHAtXHUwMDNlZXhfY2xpZW50LVx1MDAzZW5hbWUpIHx8XG5mcy9uZnNkL2V4cG9ydC5jOjczMjpcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgTkZTRF9BX1NWQ19FWFBPUlRfUEFUSCwgcHRoKSkge1xuZnMvbmZzZC9leHBvcnQuYy03MzMtXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XG4tLVxuZnMvbmZzZC9leHBvcnQuYy03NjMtICogbmZzZF9ubF9wYXJzZV9mc2xvY2F0aW9ucyAtIHBhcnNlIGZzbG9jYXRpb25zIGZyb20gbmV0bGlua1xuZnMvbmZzZC9leHBvcnQuYzo3NjQ6ICogQGF0dHI6IE5GU0RfQV9TVkNfRVhQT1JUX0ZTTE9DQVRJT05TIG5lc3RlZCBhdHRyaWJ1dGVcbmZzL25mc2QvZXhwb3J0LmMtNzY1LSAqIEBmc2xvYzogZnNsb2NhdGlvbnMgc3RydWN0IHRvIGZpbGwgaW5cbi0tXG5mcy9uZnNkL2V4cG9ydC5jPTc2OT1zdGF0aWMgaW50IG5mc2RfbmxfcGFyc2VfZnNsb2NhdGlvbnMoc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTc3OS1cdC8qIENvdW50IGxvY2F0aW9ucyBmaXJzdCAqL1xuZnMvbmZzZC9leHBvcnQuYzo3ODA6XHRubGFfZm9yX2VhY2hfbmVzdGVkX3R5cGUobG9jX2F0dHIsIE5GU0RfQV9GU0xPQ0FUSU9OU19MT0NBVElPTixcbmZzL25mc2QvZXhwb3J0LmMtNzgxLVx0XHRcdFx0IGF0dHIsIHJlbSlcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTc5My1cbmZzL25mc2QvZXhwb3J0LmM6Nzk0Olx0bmxhX2Zvcl9lYWNoX25lc3RlZF90eXBlKGxvY19hdHRyLCBORlNEX0FfRlNMT0NBVElPTlNfTE9DQVRJT04sXG5mcy9uZnNkL2V4cG9ydC5jLTc5NS1cdFx0XHRcdCBhdHRyLCByZW0pIHtcbmZzL25mc2QvZXhwb3J0LmM6Nzk2Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltORlNEX0FfRlNMT0NBVElPTl9QQVRIICYjNDM7IDFdO1xuZnMvbmZzZC9leHBvcnQuYy03OTctXHRcdHN0cnVjdCBuZnNkNF9mc19sb2NhdGlvbiAqbG9jO1xuZnMvbmZzZC9leHBvcnQuYy03OTgtXG5mcy9uZnNkL2V4cG9ydC5jOjc5OTpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkZTRF9BX0ZTTE9DQVRJT05fUEFUSCwgbG9jX2F0dHIsXG5mcy9uZnNkL2V4cG9ydC5jLTgwMC1cdFx0XHRcdCAgICAgICBuZnNkX2ZzbG9jYXRpb25fbmxfcG9saWN5LCBOVUxMKTtcbi0tXG5mcy9uZnNkL2V4cG9ydC5jLTgwMy1cbmZzL25mc2QvZXhwb3J0LmM6ODA0Olx0XHRpZiAoIXRiW05GU0RfQV9GU0xPQ0FUSU9OX0hPU1RdIHx8XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDoKCioqSW52ZXN0aWdhdGluZyBTVU5SUEMgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB0cmFjayBkb3duIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgU1VOUlBDYC4gSSBrbm93IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHVzZXMgS2NvbmZpZyBmaWxlcyB0byBtYW5hZ2UgdGhlc2UsIHNvIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEFuZCBpZiBJIHdhbnQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGhvdyBgU1VOUlBDYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLCB0aGUgbW9zdCBsb2dpY2FsIGZpcnN0IHN0b3AgaXMgcHJvYmFibHkgdGhlIGBuZXQvc3VucnBjL0tjb25maWdgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBtYWluIGRlY2xhcmF0aW9uIG9yIHBlcmhhcHMgYSB0b3AtbGV2ZWwgYWdncmVnYXRpb24gb2YgYWxsIHRoZSBgU1VOUlBDYC1yZWxhdGVkIGNvbmZpZyBzeW1ib2xzLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNVTlJQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc3VucnBjL0tjb25maWc6Mjpjb25maWcgU1VOUlBDXG5uZXQvc3VucnBjL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTUtXG5uZXQvc3VucnBjL0tjb25maWc6Njpjb25maWcgU1VOUlBDX0dTU1xubmV0L3N1bnJwYy9LY29uZmlnLTctXHR0cmlzdGF0ZVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0xMC1cbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXG5uZXQvc3VucnBjL0tjb25maWctMTItXHRib29sXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxubmV0L3N1bnJwYy9LY29uZmlnOjE1OmNvbmZpZyBTVU5SUENfU1dBUFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVx0Ym9vbFxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTM1LVxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7UlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNDktXG5uZXQvc3VucnBjL0tjb25maWc6NTA6Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxubmV0L3N1bnJwYy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclwmIzM0O1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy02My1cbm5ldC9zdW5ycGMvS2NvbmZpZzo2NDpjb25maWcgU1VOUlBDX1hQUlRfUkRNQVxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVx0dHJpc3RhdGUgXCYjMzQ7UlBDLW92ZXItUkRNQSB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyODcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIE5GU2QgYW5kIFNVTlJQQyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gYENPTkZJR19ORlNEYCBhbmQgYENPTkZJR19TVU5SUENgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgbGlrZSBlbmFibGluZyB0aGUgTkZTIGRhZW1vbiAoYENPTkZJR19ORlNEYCkgbWlnaHQgYXV0b21hdGljYWxseSBwdWxsIGluIFNVTlJQQywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoZSBxdWVzdGlvbiBpcywgaXMgYENPTkZJR19TVU5SUENgIGEgZGVwZW5kZW5jeSBvZiBgQ09ORklHX05GU0RgLCBvciBpcyBpdCBlbmFibGVkIHNvbWUgb3RoZXIgd2F5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gYmUgc3VyZS4gVGltZSB0byBkaWcgaW50byBgZnMvbmZzZC9LY29uZmlnYCBhbmQgYG5ldC9zdW5ycGMvS2NvbmZpZ2AgdG8gc2VlIGhvdyB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIHN0cnVjdHVyZWQgYW5kIGhvdyBgQ09ORklHX1NVTlJQQ2AgaXMgYWN0dWFsbHkgZW5hYmxlZC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgY2xhcmlmeSB0aGUgY29udHJvbCBmbG93IGFuZCBkZXBlbmRlbmNpZXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QuKlNVTlJQQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTM4MD1jb25maWcgTkZTX0NPTU1PTl9MT0NBTElPX1NVUFBPUlRcbi0tXG5mcy9LY29uZmlnLTM4NC1cdGRlZmF1bHQgbSBpZiBORlNEPW0gXHUwMDI2XHUwMDI2IE5GU19GUz1tXG5mcy9LY29uZmlnOjM4NTpcdHNlbGVjdCBTVU5SUENcbmZzL0tjb25maWctMzg2LVxuLS1cbmZzL25mcy9LY29uZmlnPTI9Y29uZmlnIE5GU19GU1xuLS1cbmZzL25mcy9LY29uZmlnLTYtXHRzZWxlY3QgTE9DS0RcbmZzL25mcy9LY29uZmlnOjc6XHRzZWxlY3QgU1VOUlBDXG5mcy9uZnMvS2NvbmZpZy04LVx0c2VsZWN0IE5GU19DT01NT05cbi0tXG5mcy9uZnMvS2NvbmZpZz03Nz1jb25maWcgTkZTX1Y0XG4tLVxuZnMvbmZzL0tjb25maWctODAtXHRzZWxlY3QgS0VZU1xuZnMvbmZzL0tjb25maWc6ODE6XHRzZWxlY3QgU1VOUlBDX0JBQ0tDSEFOTkVMXG5mcy9uZnMvS2NvbmZpZy04Mi1cdGhlbHBcbi0tXG5mcy9uZnMvS2NvbmZpZz05Mj1jb25maWcgTkZTX1NXQVBcbi0tXG5mcy9uZnMvS2NvbmZpZy05NS1cdGRlcGVuZHMgb24gTkZTX0ZTIFx1MDAyNlx1MDAyNiBTV0FQXG5mcy9uZnMvS2NvbmZpZzo5NjpcdHNlbGVjdCBTVU5SUENfU1dBUFxuZnMvbmZzL0tjb25maWctOTctXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0Rcbi0tXG5mcy9uZnNkL0tjb25maWctMTEtXHRzZWxlY3QgTE9DS0RcbmZzL25mc2QvS2NvbmZpZzoxMjpcdHNlbGVjdCBTVU5SUENcbmZzL25mc2QvS2NvbmZpZy0xMy1cdHNlbGVjdCBFWFBPUlRGU1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTIyLVx0ZGVmYXVsdCB5XG5uZXQvc3VucnBjL0tjb25maWc6MjM6XHRzZWxlY3QgU1VOUlBDX0dTU1xubmV0L3N1bnJwYy9LY29uZmlnLTI0LVx0c2VsZWN0IENSWVBUT19LUkI1XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTc3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIE5GUyBTZXJ2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gYENPTkZJR19ORlNEYCBiZWluZyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGJyaW5ncyBpbiBgQ09ORklHX1NVTlJQQ2AuIEkga25vdyB0aGlzIG1lYW5zIHRoZSBOZXR3b3JrIEZpbGUgU3lzdGVtIERhZW1vbiBpcyByZWxpYW50IG9uIHRoZSBTdW4gUmVtb3RlIFByb2NlZHVyZSBDYWxsIHN5c3RlbS4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTkZTIHNlcnZlciBpcyBidWlsdCBhbmQgaG93IHRob3NlIFJQQyBjb21wb25lbnRzIGFyZSBsaW5rZWQuIFRvIGRvIHRoYXQsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIGBuZXQvc3VucnBjL01ha2VmaWxlYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBidWlsZCBydWxlcyBmb3IgY29yZSBvYmplY3RzLCBzcGVjaWZpY2FsbHkgdGhlIGNyZWF0aW9uIG9mIGBzdmNzb2NrLm9gLCB3aGljaCBJIGV4cGVjdCB3aWxsIGJlIGNydWNpYWwgZm9yIHRoZSBuZXR3b3JrIHNvY2tldCBtYW5hZ2VtZW50IHVzZWQgYnkgdGhlIHNlcnZlci4gVGltZSB0byBkaWcgaW50byB0aGUgbWFrZWZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2Y3NvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvTWFrZWZpbGU9MTE9c3VucnBjLXkgOj0gY2xudC5vIHhwcnQubyBzb2NrbGliLm8geHBydHNvY2subyBzY2hlZC5vIFxcXG5uZXQvc3VucnBjL01ha2VmaWxlLTEyLVx0ICAgIGF1dGgubyBhdXRoX251bGwubyBhdXRoX3Rscy5vIGF1dGhfdW5peC5vIFxcXG5uZXQvc3VucnBjL01ha2VmaWxlOjEzOlx0ICAgIHN2Yy5vIHN2Y3NvY2subyBzdmNhdXRoLm8gc3ZjYXV0aF91bml4Lm8gXFxcbm5ldC9zdW5ycGMvTWFrZWZpbGUtMTQtXHQgICAgYWRkci5vIHJwY2JfY2xudC5vIHRpbWVyLm8geGRyLm8gXFxcbi0tXG5uZXQvc3VucnBjL3N0YXRzLmMtMjMtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL2NsbnQuaFx1MDAzZVxubmV0L3N1bnJwYy9zdGF0cy5jOjI0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcdTAwM2Vcbm5ldC9zdW5ycGMvc3RhdHMuYy0yNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvbWV0cmljcy5oXHUwMDNlXG4tLVxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy9zdmMuaFx1MDAzZVxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jOjIwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcdTAwM2Vcbm5ldC9zdW5ycGMvc3VucnBjX3N5bXMuYy0yMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvYXV0aC5oXHUwMDNlXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvc3RhdHMuaFx1MDAzZVxubmV0L3N1bnJwYy9zdmMuYzoyODojaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXHUwMDNlXG5uZXQvc3VucnBjL3N2Yy5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy9jbG50LmhcdTAwM2Vcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N2Y194cHJ0LmhcdTAwM2Vcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYzoxNzojaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXHUwMDNlXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtMTgtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3hwcnQuaFx1MDAzZVxuLS1cbm5ldC9zdW5ycGMvc3ZjYXV0aC5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy94ZHIuaFx1MDAzZVxubmV0L3N1bnJwYy9zdmNhdXRoLmM6MTc6I2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N2Y3NvY2suaFx1MDAzZVxubmV0L3N1bnJwYy9zdmNhdXRoLmMtMTgtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N2Y2F1dGguaFx1MDAzZVxuLS1cbm5ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMveGRyLmhcdTAwM2Vcbm5ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXHUwMDNlXG5uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N2Y2F1dGguaFx1MDAzZVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTItLypcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjM6ICogbGludXgvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTQtICpcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy01OC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvbXNnX3Byb3QuaFx1MDAzZVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NTk6I2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N2Y3NvY2suaFx1MDAzZVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNjAtI2luY2x1ZGUgXHUwMDNjbGludXgvc3VucnBjL3N0YXRzLmhcdTAwM2Vcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz00MDE9c3RhdGljIHZvaWQgc3ZjX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTQxMC1cdFx0c3Zzay1cdTAwM2Vza19vZGF0YShzayk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYzo0MTE6XHRcdHRyYWNlX3N2Y3NvY2tfZGF0YV9yZWFkeShcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIDApO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDEyLVx0XHRpZiAodGVzdF9iaXQoWFBUX0hBTkRTSEFLRSwgXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LnhwdF9mbGFncykpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9NDIyPXN0YXRpYyB2b2lkIHN2Y193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDI4LVx0XHRybWIoKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjQyOTpcdFx0dHJhY2Vfc3Zjc29ja193cml0ZV9zcGFjZShcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIDApO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDMwLVx0XHRzdnNrLVx1MDAzZXNrX293c3BhY2Uoc2spO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTYwOD1zdGF0aWMgaW50IHN2Y191ZHBfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy02NTktXHRycXN0cC1cdTAwM2VycV9hcmcubGVuID0gbGVuO1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6NjYwOlx0dHJhY2Vfc3Zjc29ja191ZHBfcmVjdihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIGxlbik7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy02NjEtXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNzAzLVx0fVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NzA0Olx0dHJhY2Vfc3Zjc29ja191ZHBfcmVjdl9lcnIoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBlcnIpO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtNzA1LVx0Z290byBvdXRfY2xlYXJfYnVzeTtcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz03Mjg9c3RhdGljIGludCBzdmNfdWRwX3NlbmR0byhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTc3NC1vdXRfdHJhY2U6XG5uZXQvc3VucnBjL3N2Y3NvY2suYzo3NzU6XHR0cmFjZV9zdmNzb2NrX3VkcF9zZW5kKHhwcnQsIGVycik7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy03NzYtXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9OTEwPXN0YXRpYyB2b2lkIHN2Y190Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05MTctXHRcdHN2c2stXHUwMDNlc2tfb3N0YXRlKHNrKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjkxODpcdFx0dHJhY2Vfc3Zjc29ja190Y3Bfc3RhdGUoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBzdnNrLVx1MDAzZXNrX3NvY2spO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTE5LVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTkyNz1zdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfdGNwX2FjY2VwdChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTQ0LVx0XHRpZiAoZXJyICE9IC1FQUdBSU4pXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo5NDU6XHRcdFx0dHJhY2Vfc3Zjc29ja19hY2NlcHRfZXJyKHhwcnQsIHNlcnYtXHUwMDNlc3ZfbmFtZSwgZXJyKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk0Ni1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTU0LVx0aWYgKGVyciBcdTAwM2MgMCkge1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTU1Olx0XHR0cmFjZV9zdmNzb2NrX2dldHBlZXJuYW1lX2Vycih4cHJ0LCBzZXJ2LVx1MDAzZXN2X25hbWUsIGVycik7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy05NTYtXHRcdGdvdG8gZmFpbGVkO1x0XHQvKiBhYm9ydGVkIGNvbm5lY3Rpb24gb3Igd2hhdGV2ZXIgKi9cbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xMDU0PXN0YXRpYyBzc2l6ZV90IHN2Y190Y3BfcmVhZF9tYXJrZXIoc3RydWN0IHN2Y19zb2NrICpzdnNrLFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEwNzctXHRcdH1cbm5ldC9zdW5ycGMvc3Zjc29jay5jOjEwNzg6XHRcdHRyYWNlX3N2Y3NvY2tfbWFya2VyKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc3Zzay1cdTAwM2Vza19tYXJrZXIpO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTA3OS1cdFx0aWYgKHN2Y19zb2NrX3JlY2xlbihzdnNrKSAmIzQzOyBzdnNrLVx1MDAzZXNrX2RhdGFsZW4gXHUwMDNlXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTE1NT1zdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMTczLVx0aWYgKGxlbiBcdTAwM2U9IDApIHtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjExNzQ6XHRcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3YoXHUwMDI2c3Zzay1cdTAwM2Vza194cHJ0LCBsZW4pO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTE3NS1cdFx0c3Zzay1cdTAwM2Vza190Y3BsZW4gJiM0Mzs9IGxlbjtcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMjI0LVx0ZWxzZVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTIyNTpcdFx0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdl9zaG9ydChcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMjI2LVx0XHRcdFx0c3ZjX3NvY2tfcmVjbGVuKHN2c2spLFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzEtXHRcdGdvdG8gZXJyX2RlbGV0ZTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjEyMzI6XHR0cmFjZV9zdmNzb2NrX3RjcF9yZWN2X2VhZ2FpbihcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQsIDApO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTIzMy1cdGdvdG8gZXJyX25vY2xvc2U7XG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTIzNi1lcnJfZGVsZXRlOlxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTIzNzpcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3ZfZXJyKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgbGVuKTtcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzgtXHRzdmNfeHBydF9kZWZlcnJlZF9jbG9zZShcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTEyOTM9c3RhdGljIGludCBzdmNfdGNwX3NlbmR0byhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEzMDgtXHRzZW50ID0gc3ZjX3RjcF9zZW5kbXNnKHN2c2ssIHJxc3RwLCBtYXJrZXIpO1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTMwOTpcdHRyYWNlX3N2Y3NvY2tfdGNwX3NlbmQoeHBydCwgc2VudCk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMzEwLVx0aWYgKHNlbnQgXHUwMDNjIDAgfHwgc2VudCAhPSAoeGRyLVx1MDAzZWxlbiAmIzQzOyBzaXplb2YobWFya2VyKSkpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTQzOT1zdGF0aWMgc3RydWN0IHN2Y19zb2NrICpzdmNfc2V0dXBfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqc2Vydixcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTAxLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTUwMjpcdHRyYWNlX3N2Y3NvY2tfbmV3KHN2c2ssIHNvY2spO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUwMy1cdHJldHVybiBzdnNrO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTE2ODQ9c3RhdGljIHZvaWQgc3ZjX3NvY2tfZnJlZShzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTY4OC1cbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE2ODk6XHR0cmFjZV9zdmNzb2NrX2ZyZWUoc3Zzaywgc29jayk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNjkwLVxuLS1cbm5ldC9zdW5ycGMveHBydHNvY2suYy0zOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMvc2NoZWQuaFx1MDAzZVxubmV0L3N1bnJwYy94cHJ0c29jay5jOjM5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcdTAwM2Vcbm5ldC9zdW5ycGMveHBydHNvY2suYy00MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdW5ycGMveHBydHNvY2suaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBzdmNfc2V0dXBfc29ja2V0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGxpbmUgb2YgY29kZTogYHN2Y19zZXR1cF9zb2NrZXRgIHNldHMgYHNrLSZndDtza191c2VyX2RhdGEgPSBzdnNrO2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBzdGFydHMgd29ya2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIGBzay0mZ3Q7c2tfdXNlcl9kYXRhYCDigJMgdGhhdCYjMzk7cyBhIGNsYXNzaWMgbG9jYXRpb24gZm9yIGF0dGFjaGluZyBwcml2YXRlLCBtb2R1bGUtc3BlY2lmaWMgZGF0YSB0byBhIHNvY2tldCBzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgYmVpbmcgc2V0IHRvIGBzdnNrYCB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24sIGBzdmNfc2V0dXBfc29ja2V0YCwgaXMgY2xlYXJseSBhc3NvY2lhdGluZyBhIHNlcnZpY2Utc3BlY2lmaWMgc29ja2V0IHN0cnVjdHVyZSAoYHN2c2tgKSB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQgKGBza2ApLiBUaGlzIGFzc29jaWF0aW9uIGlzIGNyaXRpY2FsIGZvciBhbG1vc3QgYW55IG5ldHdvcmsgc2VydmljZS4gTm93IEkgbmVlZCB0byBrbm93IGV4YWN0bHkgd2hhdCB0aGUgYHN2c2tgIHN0cnVjdHVyZSBjb250YWlucy4KClRvIGJlIHN1cmUgYWJvdXQgdGhlIGZ1bmN0aW9uIGFuZCBgc3Zza2AsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIHNvdXJjZS4gTGV0IG1lIGNoZWNrIHRoZSBgc3ZjX3NldHVwX3NvY2tldGAgZnVuY3Rpb24gaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIHdob2xlIHBpY3R1cmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW50ZW50IG9mIHRoaXMgYXNzb2NpYXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBSUEMgc3RhY2sgaXMgbWFuYWdpbmcgc29ja2V0cyBhbmQgcG90ZW50aWFsbHkgaG93IGl0JiMzOTtzIG1hbmFnaW5nIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0Mzk6XHRzdGF0aWMgc3RydWN0IHN2Y19zb2NrICpzdmNfc2V0dXBfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqc2VydixcbjE0NDA6XHRcdFx0XHRcdFx0XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuMTQ0MTpcdFx0XHRcdFx0XHRcdGludCBmbGFncylcbjE0NDI6XHR7XG4xNDQzOlx0XHRzdHJ1Y3Qgc3ZjX3NvY2tcdCpzdnNrO1xuMTQ0NDpcdFx0c3RydWN0IHNvY2tcdCppbmV0O1xuMTQ0NTpcdFx0aW50XHRcdHBtYXBfcmVnaXN0ZXIgPSAhKGZsYWdzIFx1MDAyNiBTVkNfU09DS19BTk9OWU1PVVMpO1xuMTQ0NjpcdFx0aW50XHRcdHNlbmRwYWdlcztcbjE0NDc6XHRcdHVuc2lnbmVkIGxvbmdcdHBhZ2VzO1xuMTQ0ODpcdFxuMTQ0OTpcdFx0c2VuZHBhZ2VzID0gc3ZjX3NvY2tfc2VuZHBhZ2VzKHNlcnYsIHNvY2ssIGZsYWdzKTtcbjE0NTA6XHRcdGlmIChzZW5kcGFnZXMgXHUwMDNjIDApXG4xNDUxOlx0XHRcdHJldHVybiBFUlJfUFRSKHNlbmRwYWdlcyk7XG4xNDUyOlx0XG4xNDUzOlx0XHRwYWdlcyA9IHN2Y19zZXJ2X21heHBhZ2VzKHNlcnYpO1xuMTQ1NDpcdFx0c3ZzayA9IGt6YWxsb2NfZmxleCgqc3Zzaywgc2tfcGFnZXMsIHBhZ2VzKTtcbjE0NTU6XHRcdGlmICghc3ZzaylcbjE0NTY6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4xNDU3Olx0XG4xNDU4Olx0XHRpZiAoc2VuZHBhZ2VzKSB7XG4xNDU5Olx0XHRcdHN2c2stXHUwMDNlc2tfYnZlYyA9IGt6YWxsb2Nfb2Jqcygqc3Zzay1cdTAwM2Vza19idmVjLCBzZW5kcGFnZXMpO1xuMTQ2MDpcdFx0XHRpZiAoIXN2c2stXHUwMDNlc2tfYnZlYykge1xuMTQ2MTpcdFx0XHRcdGtmcmVlKHN2c2spO1xuMTQ2MjpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTQ2MzpcdFx0XHR9XG4xNDY0Olx0XHR9XG4xNDY1Olx0XG4xNDY2Olx0XHRzdnNrLVx1MDAzZXNrX21heHBhZ2VzID0gcGFnZXM7XG4xNDY3Olx0XG4xNDY4Olx0XHRpbmV0ID0gc29jay1cdTAwM2VzaztcbjE0Njk6XHRcbjE0NzA6XHRcdGlmIChwbWFwX3JlZ2lzdGVyKSB7XG4xNDcxOlx0XHRcdGludCBlcnI7XG4xNDcyOlx0XG4xNDczOlx0XHRcdGVyciA9IHN2Y19yZWdpc3RlcihzZXJ2LCBzb2NrX25ldChzb2NrLVx1MDAzZXNrKSwgaW5ldC1cdTAwM2Vza19mYW1pbHksXG4xNDc0Olx0XHRcdFx0XHQgICAgIGluZXQtXHUwMDNlc2tfcHJvdG9jb2wsXG4xNDc1Olx0XHRcdFx0XHQgICAgIG50b2hzKGluZXRfc2soaW5ldCktXHUwMDNlaW5ldF9zcG9ydCkpO1xuMTQ3NjpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4xNDc3Olx0XHRcdFx0a2ZyZWUoc3Zzay1cdTAwM2Vza19idmVjKTtcbjE0Nzg6XHRcdFx0XHRrZnJlZShzdnNrKTtcbjE0Nzk6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMTQ4MDpcdFx0XHR9XG4xNDgxOlx0XHR9XG4xNDgyOlx0XG4xNDgzOlx0XHRzdnNrLVx1MDAzZXNrX3NvY2sgPSBzb2NrO1xuMTQ4NDpcdFx0c3Zzay1cdTAwM2Vza19zayA9IGluZXQ7XG4xNDg1Olx0XHRzdnNrLVx1MDAzZXNrX29zdGF0ZSA9IGluZXQtXHUwMDNlc2tfc3RhdGVfY2hhbmdlO1xuMTQ4NjpcdFx0c3Zzay1cdTAwM2Vza19vZGF0YSA9IGluZXQtXHUwMDNlc2tfZGF0YV9yZWFkeTtcbjE0ODc6XHRcdHN2c2stXHUwMDNlc2tfb3dzcGFjZSA9IGluZXQtXHUwMDNlc2tfd3JpdGVfc3BhY2U7XG4xNDg4Olx0XHQvKlxuMTQ4OTpcdFx0ICogVGhpcyBiYXJyaWVyIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uXG4xNDkwOlx0XHQgKiB3aXRoIHN2Y19kYXRhX3JlYWR5KCksIHN2Y190Y3BfbGlzdGVuX2RhdGFfcmVhZHkoKSwgYW5kIG90aGVyc1xuMTQ5MTpcdFx0ICogd2hlbiBjYWxsaW5nIGNhbGxiYWNrcyBhYm92ZS5cbjE0OTI6XHRcdCAqL1xuMTQ5MzpcdFx0d21iKCk7XG4xNDk0Olx0XHRpbmV0LVx1MDAzZXNrX3VzZXJfZGF0YSA9IHN2c2s7XG4xNDk1Olx0XG4xNDk2Olx0XHQvKiBJbml0aWFsaXplIHRoZSBzb2NrZXQgKi9cbjE0OTc6XHRcdGlmIChzb2NrLVx1MDAzZXR5cGUgPT0gU09DS19ER1JBTSlcbjE0OTg6XHRcdFx0c3ZjX3VkcF9pbml0KHN2c2ssIHNlcnYpO1xuMTQ5OTpcdFx0ZWxzZVxuMTUwMDpcdFx0XHRzdmNfdGNwX2luaXQoc3Zzaywgc2Vydik7XG4xNTAxOlx0XG4xNTAyOlx0XHR0cmFjZV9zdmNzb2NrX25ldyhzdnNrLCBzb2NrKTtcbjE1MDM6XHRcdHJldHVybiBzdnNrO1xuMTUwNDpcdH1cbjE1MDU6XHRcbjE1MDY6XHQvKipcbjE1MDc6XHQgKiBzdmNfYWRkc29jayAtIGFkZCBhIGxpc3RlbmVyIHNvY2tldCB0byBhbiBSUEMgc2VydmljZVxuMTUwODpcdCAqIEBzZXJ2OiBwb2ludGVyIHRvIFJQQyBzZXJ2aWNlIHRvIHdoaWNoIHRvIGFkZCBhIG5ldyBsaXN0ZW5lclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMxNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgS2VybmVsIFZ1bG5lcmFiaWxpdHkgaW4gTkZTIFNlcnZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHNvY2tldCBvd25lcnNoaXAgd2l0aGluIHRoZSBORlMgc2VydmVyLCBzcGVjaWZpY2FsbHkgd2hlbiBhZGRpbmcgc29ja2V0cy4gVGhlIGNvZGUgaW4gcXVlc3Rpb24sIGBpbmV0LSZndDtza191c2VyX2RhdGEgPSBzdnNrO2AsIGhpZ2hsaWdodHMgYSBwb3RlbnRpYWwgb3ZlcndyaXRlIGlzc3VlLiBJZiBhIHNvY2tldCBhbHJlYWR5IGhhcyBgc2tfdXNlcl9kYXRhYCBhc3NpZ25lZCAocGVyaGFwcyBmcm9tIGFub3RoZXIgUlBDIHNlcnZpY2UsIEtDTSwgVExTLCBTQ1RQLCBCUEYsIG9yIGEgZHVwbGljYXRlIGFkZGl0aW9uKSwgYHN2Y19zZXR1cF9zb2NrZXRgIGNvdWxkIGNvcnJ1cHQgdGhhdCBvd25lcnNoaXAgb3Igc3RhdGUuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIGluIGBzdmNfYWRkc29ja2A6CmBgYGMKCWVyciA9IC1FQlVTWTsKCWlmIChzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YSkKCQlnb3RvIG91dDsKYGBgCnRvIHByZXZlbnQgdGhlIG92ZXJ3cml0ZS4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGlzIHJlYWNoYWJsZSBhbmQgZXhwbG9pdGFibGUuCgpGaXJzdCwgaXMgdGhpcyBjb2RlIHBhdGggYWNjZXNzaWJsZT8gWWVzLCBgc3ZjX2FkZHNvY2tgIGNhbiBiZSBjYWxsZWQgZnJvbSB1c2Vyc3BhY2UgYnkgd3JpdGluZyBhIGZpbGUgZGVzY3JpcHRvciB0byBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAgKG5mc2N0bCkuIFRoaXMgaXMgc3RhbmRhcmQgTkZTIHNlcnZlciBmdW5jdGlvbmFsaXR5LCBhbmQgdGh1cyByZWFjaGFibGUuCgpTZWNvbmQsIGlzIHRoaXMgY29kZSBpbiBhIGNvcmUgc3Vic3lzdGVtIG9yIGEgY29tbW9ubHkgcmVhY2hhYmxlIHByb3RvY29sPyBBYnNvbHV0ZWx5LiBTdW5SUEMgYW5kIE5GU2QgYXJlIGZ1bmRhbWVudGFsIHBhcnRzIG9mIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgTkZTIGltcGxlbWVudGF0aW9uLgoKVGhpcmQsIGlzIHRoaXMgcGF0Y2ggJiMzNDtXb3J0aEZ1enppbmcmIzM0Oz8gRGVmaW5pdGVseS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdmFsaWRhdGlvbiBjaGVjayB3aXRoaW4gcmVhY2hhYmxlIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCwgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGFuZCBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBzdmNfYWRkc29ja2AgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjaGFuZ2UgaXMuIE5vdywgZm9yIHRoZSBjYWxsZXIsIGlzIGl0IGBfX3dyaXRlX3BvcnRzX2FkZGZkYD8gWWVzLCBpdCBhcHBlYXJzIHRvIGJlIGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBpbiBgZnMvbmZzZC9uZnNjdGwuY2AsIHdoaWNoIGNhbGxzIGBzdmNfYWRkc29ja2AuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNhbGxlcnMgb2YgYHN2Y19hZGRzb2NrYC4gQSBxdWljayBncmVwIGNvbmZpcm1zIHRoaXMuCgpMZXQmIzM5O3MgbW92ZSBvbnRvIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIGBzdmNfYWRkc29ja2AgYW5kIG5mc2QgdG8gZnVuY3Rpb24/IEJ5IGV4YW1pbmluZyBgbmV0L3N1bnJwYy9LY29uZmlnYCBhbmQgYGZzL25mc2QvS2NvbmZpZ2AsIEkgc2VlOgotICAgYFNVTlJQQ2AgKGVpdGhlciBjb21waWxlZCBpbiB0aGUga2VybmVsIG9yIGFzIGEgbW9kdWxlLCBzZWxlY3RlZCBieSBgTkZTRGApCi0gICBgTkZTRGAgKHJlcXVpcmVkIHRvIHJlYWNoIGBzdmNfYWRkc29ja2AgdGhyb3VnaCBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAgb3Igd3JpdGVfcG9ydHMpCgpGdXJ0aGVybW9yZSwgYE5GU0RgIGRlcGVuZHMgb24gYE1VTFRJVVNFUmAsIHdoaWNoIGlzIGRlZmF1bHQgJiMzOTt5JiMzOTssIGluIGFkZGl0aW9uIHRvIGBTVU5SUENgIGFuZCBvdGhlciBzZWxlY3Qgb3B0aW9ucy4KClRvIGJlIGV4dHJhIGNsZWFyOiBteSBrZXkgZm9jdXMgc3ltYm9scyBhcmU6CiogICBgc3ZjX2FkZHNvY2tgCiogICBgX193cml0ZV9wb3J0c19hZGRmZGAKCkZpbmFsbHksIEkmIzM5O2xsIGNvbmZpcm0gdGhhdCBgX193cml0ZV9wb3J0c19hZGRmZGAgaXNuJiMzOTt0IHN0YXRpYyBpbiBgZnMvbmZzZC9uZnNjdGwuY2AuIEkmIzM5O2xsIGFsc28gZG91YmxlIGNoZWNrIHRoZSBuYW1lIG9mIHRoZSB3cml0ZSBmdW5jdGlvbiBpbiB0aGUgY29kZSBhcm91bmQgbGluZXMgODAwLTgzMC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uZnNkL25mc2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcdFx0bmZzZF9kZXN0cm95X3NlcnYobmV0KTtcbiA4MDE6XHRcbiA4MDI6XHRcdHJldHVybiBlcnI7XG4gODAzOlx0fVxuIDgwNDpcdFxuIDgwNTpcdHN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsXG4gODA2Olx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0ICpuZXQpXG4gODA3Olx0e1xuIDgwODpcdFx0aWYgKHNpemUgPT0gMClcbiA4MDk6XHRcdFx0cmV0dXJuIF9fd3JpdGVfcG9ydHNfbmFtZXMoYnVmLCBuZXQpO1xuIDgxMDpcdFxuIDgxMTpcdFx0aWYgKGlzZGlnaXQoYnVmWzBdKSlcbiA4MTI6XHRcdFx0cmV0dXJuIF9fd3JpdGVfcG9ydHNfYWRkZmQoYnVmLCBuZXQsIGZpbGUtXHUwMDNlZl9jcmVkKTtcbiA4MTM6XHRcbiA4MTQ6XHRcdGlmIChpc2FscGhhKGJ1ZlswXSkpXG4gODE1Olx0XHRcdHJldHVybiBfX3dyaXRlX3BvcnRzX2FkZHhwcnQoYnVmLCBuZXQsIGZpbGUtXHUwMDNlZl9jcmVkKTtcbiA4MTY6XHRcbiA4MTc6XHRcdHJldHVybiAtRUlOVkFMO1xuIDgxODpcdH1cbiA4MTk6XHRcbiA4MjA6XHQvKlxuIDgyMTpcdCAqIHdyaXRlX3BvcnRzIC0gUGFzcyBhIHNvY2tldCBmaWxlIGRlc2NyaXB0b3Igb3IgdHJhbnNwb3J0IG5hbWUgdG8gbGlzdGVuIG9uXG4gODIyOlx0ICpcbiA4MjM6XHQgKiBJbnB1dDpcbiA4MjQ6XHQgKlx0XHRcdGJ1ZjpcdFx0aWdub3JlZFxuIDgyNTpcdCAqXHRcdFx0c2l6ZTpcdFx0emVyb1xuIDgyNjpcdCAqIE91dHB1dDpcbiA4Mjc6XHQgKlx0T24gc3VjY2VzczpcdHBhc3NlZC1pbiBidWZmZXIgZmlsbGVkIHdpdGggYSAmIzM5O1xcbiYjMzk7LXRlcm1pbmF0ZWQgQ1xuIDgyODpcdCAqXHRcdFx0c3RyaW5nIGNvbnRhaW5pbmcgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mXG4gODI5Olx0ICpcdFx0XHRuYW1lZCBORlNEIGxpc3RlbmVycztcbiA4MzA6XHQgKlx0XHRcdHJldHVybiBjb2RlIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzdHJpbmdcbiA4MzE6XHQgKlx0T24gZXJyb3I6XHRyZXR1cm4gY29kZSBpcyB6ZXJvIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWVcbiA4MzI6XHQgKlxuIDgzMzpcdCAqIE9SXG4gODM0Olx0ICpcbiA4MzU6XHQgKiBJbnB1dDpcbiA4MzY6XHQgKlx0XHRcdGJ1ZjpcdFx0QyBzdHJpbmcgY29udGFpbmluZyBhbiB1bnNpZ25lZFxuIDgzNzpcdCAqXHRcdFx0XHRcdGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIGEgYm91bmRcbiA4Mzg6XHQgKlx0XHRcdFx0XHRidXQgdW5jb25uZWN0ZWQgc29ja2V0IHRoYXQgaXMgdG8gYmVcbiA4Mzk6XHQgKlx0XHRcdFx0XHR1c2VkIGFzIGFuIE5GU0QgbGlzdGVuZXI7IGxpc3RlbigzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3MwoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBtb2RpZmljYXRpb246CgoqKkFuYWx5emluZyB0aGUgYHN2Y19hZGRzb2NrYCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggd2hlcmUgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIGFsdGVyZWQgaXMgYHN2Y19hZGRzb2NrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGFjdCBvZiB0aGlzLiBCYXNlZCBvbiB0aGUgZmlsZSBjb250ZXh0LCB0aGUgZW50cnkgcG9pbnQgZm9yIG5mc2N0bCBvcGVyYXRpb25zIGhlcmUgc2VlbXMgdG8gYmUgZWl0aGVyIGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBvciBwb3RlbnRpYWxseSBgd3JpdGVfcG9ydHNgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRob3NlIGZ1bmN0aW9ucyBpbiBtaW5kIGFzIHRoZSBsaWtlbHkgcGxhY2VzIHdoZXJlIHRoaXMgY2hhbmdlIHdpbGwgbWFuaWZlc3QuCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcGx5IGludG8gdGhlIGNvZGUgaXRzZWxmLCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoZSBzY29wZS4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiB0aGUgcGF0Y2ggdG91Y2hlcyBhbnkgb3RoZXIgZmlsZXMuIE9mdGVuIHRoZXNlIHBhdGNoZXMgd2lsbCBhZmZlY3QgYSBzdWl0ZSBvZiBmaWxlcyB0byBhY2hpZXZlIHRoZSBlbmQgcmVzdWx0LiBBaCwgZ29vZCwgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGp1c3QgYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4KCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCB0aGUgY29udGV4dCwgSSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCwgYW5kIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGltZSB0byBydW4gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgc3RhcnQgY29sbGF0aW5nIG15IGZpbmRpbmdzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzcGl0cyBvdXQsIGFuZCB0aGVuIEkgY2FuIGRpdmUgaW50byB0aGUgY29kZSBtb3JlIG1ldGhvZGljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2FkZHNvY2smIzM0OywKICAgICYjMzQ7X193cml0ZV9wb3J0c19hZGRmZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcHJldmVudCBzb2NrZXRzIHdpdGggZXhpc3RpbmcgYHNrX3VzZXJfZGF0YWAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGFzIFJQQyBzZXJ2aWNlIGxpc3RlbmVyIHNvY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcvUlBDIHNlcnZlciBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBORlNEIGNvbnRyb2wgaW50ZXJmYWNlICh3cml0aW5nIGFuIEZEIHRvIC9wcm9jL2ZzL25mc2QvcG9ydGxpc3QpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVU5SUEMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19hZGRzb2NrJiMzNDssCiAgICAmIzM0O19fd3JpdGVfcG9ydHNfYWRkZmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHN2Y19hZGRzb2NrKClgIHRvIHByZXZlbnQgc29ja2V0cyB3aXRoIGV4aXN0aW5nIGBza191c2VyX2RhdGFgIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBhcyBSUEMgc2VydmljZSBsaXN0ZW5lciBzb2NrZXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nL1JQQyBzZXJ2ZXIgY29kZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgTkZTRCBjb250cm9sIGludGVyZmFjZSAod3JpdGluZyBhbiBGRCB0byAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIHN2Y19hZGRzb2NrKCkgdG8gZW5zdXJlIHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiZDNkY2JhZjQwODUxNmMwMWEwYzYyMDBmMTViNDQ1N2I3Y2FkOTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjA4OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA1MGU1ZTdmNWI3NjJkLi5lOGNjNDMyOWYxMjgyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtMTU0MSw2ICYjNDM7MTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLAogCWVyciA9IC1FSVNDT05OOwogCWlmIChzby0mZ3Q7c3RhdGUgJmd0OyBTU19VTkNPTk5FQ1RFRCkKIAkJZ290byBvdXQ7CiYjNDM7CWVyciA9IC1FQlVTWTsKJiM0MzsJaWYgKHNvLSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhKQomIzQzOwkJZ290byBvdXQ7CiAJZXJyID0gLUVOT0VOVDsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJZ290byBvdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gc3Zjc29jay5jIGZvciBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIGFuYWx5emUgdGhpcyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGFjdGlvbiBzdGFydHMgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgdXNlIG15IHRydXN0eSBgcmVhZC1maWxlYCBjb21tYW5kIHRvIGltbWVkaWF0ZWx5IHB1bGwgdXAgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMTU0MSBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGxpbmUgdG8gc2VlIGhvdyB0aGlzIGNoYW5nZSBmaXRzIGluIGFuZCB0byBhc3Nlc3MgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBkaWdnaW5nIGludG8gbmV0d29yayBjb2RlISBPbmNlIEkgaGF2ZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSBjYW4gbWFrZSBhIHByb3BlciBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRcdGNoYXIgKm5hbWVfcmV0dXJuLCBjb25zdCBzaXplX3QgbGVuLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbjE1MjE6XHR7XG4xNTIyOlx0XHRpbnQgZXJyID0gMDtcbjE1MjM6XHRcdHN0cnVjdCBzb2NrZXQgKnNvID0gc29ja2ZkX2xvb2t1cChmZCwgXHUwMDI2ZXJyKTtcbjE1MjQ6XHRcdHN0cnVjdCBzdmNfc29jayAqc3ZzayA9IE5VTEw7XG4xNTI1Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuMTUyNjpcdFx0c3RydWN0IHNvY2thZGRyICpzaW4gPSAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkcjtcbjE1Mjc6XHRcdGludCBzYWxlbjtcbjE1Mjg6XHRcbjE1Mjk6XHRcdGlmICghc28pXG4xNTMwOlx0XHRcdHJldHVybiBlcnI7XG4xNTMxOlx0XHRlcnIgPSAtRUlOVkFMO1xuMTUzMjpcdFx0aWYgKHNvY2tfbmV0KHNvLVx1MDAzZXNrKSAhPSBuZXQpXG4xNTMzOlx0XHRcdGdvdG8gb3V0O1xuMTUzNDpcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbjE1MzU6XHRcdGlmICgoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQpIFx1MDAyNlx1MDAyNiAoc28tXHUwMDNlc2stXHUwMDNlc2tfZmFtaWx5ICE9IFBGX0lORVQ2KSlcbjE1MzY6XHRcdFx0Z290byBvdXQ7XG4xNTM3Olx0XHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcbjE1Mzg6XHRcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbjE1Mzk6XHRcdCAgICBzby1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjE1NDA6XHRcdFx0Z290byBvdXQ7XG4xNTQxOlx0XHRlcnIgPSAtRUlTQ09OTjtcbjE1NDI6XHRcdGlmIChzby1cdTAwM2VzdGF0ZSBcdTAwM2UgU1NfVU5DT05ORUNURUQpXG4xNTQzOlx0XHRcdGdvdG8gb3V0O1xuMTU0NDpcdFx0ZXJyID0gLUVCVVNZO1xuMTU0NTpcdFx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbjE1NDY6XHRcdFx0Z290byBvdXQ7XG4xNTQ3Olx0XHRlcnIgPSAtRU5PRU5UO1xuMTU0ODpcdFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4xNTQ5Olx0XHRcdGdvdG8gb3V0O1xuMTU1MDpcdFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc28sIFNWQ19TT0NLX0RFRkFVTFRTKTtcbjE1NTE6XHRcdGlmIChJU19FUlIoc3ZzaykpIHtcbjE1NTI6XHRcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4xNTUzOlx0XHRcdGVyciA9IFBUUl9FUlIoc3Zzayk7XG4xNTU0Olx0XHRcdGdvdG8gb3V0O1xuMTU1NTpcdFx0fVxuMTU1NjpcdFx0c2FsZW4gPSBrZXJuZWxfZ2V0c29ja25hbWUoc3Zzay1cdTAwM2Vza19zb2NrLCBzaW4pO1xuMTU1NzpcdFx0aWYgKHNhbGVuIFx1MDAzZT0gMClcbjE1NTg6XHRcdFx0c3ZjX3hwcnRfc2V0X2xvY2FsKFx1MDAyNnN2c2stXHUwMDNlc2tfeHBydCwgc2luLCBzYWxlbik7XG4xNTU5Olx0XHRzdnNrLVx1MDAzZXNrX3hwcnQueHB0X2NyZWQgPSBnZXRfY3JlZChjcmVkKTtcbjE1NjA6XHRcdHN2Y19hZGRfbmV3X3Blcm1feHBydChzZXJ2LCBcdTAwMjZzdnNrLVx1MDAzZXNrX3hwcnQpO1xuMTU2MTpcdFx0cmV0dXJuIHN2Y19vbmVfc29ja19uYW1lKHN2c2ssIG5hbWVfcmV0dXJuLCBsZW4pO1xuMTU2MjpcdG91dDpcbjE1NjM6XHRcdHNvY2tmZF9wdXQoc28pO1xuMTU2NDpcdFx0cmV0dXJuIGVycjtcbjE1NjU6XHR9XG4xNTY2Olx0RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2FkZHNvY2spO1xuMTU2NzpcdFxuMTU2ODpcdC8qXG4xNTY5Olx0ICogQ3JlYXRlIHNvY2tldCBmb3IgUlBDIHNlcnZpY2UuXG4xNTcwOlx0ICovXG4xNTcxOlx0c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX2NyZWF0ZV9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxuMTU3MjpcdFx0XHRcdFx0XHQgIGludCBwcm90b2NvbCxcbjE1NzM6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ICpuZXQsXG4xNTc0Olx0XHRcdFx0XHRcdCAgc3RydWN0IHNvY2thZGRyICpzaW4sIGludCBsZW4sXG4xNTc1Olx0XHRcdFx0XHRcdCAgaW50IGZsYWdzKVxuMTU3NjpcdHtcbjE1Nzc6XHRcdHN0cnVjdCBzdmNfc29ja1x0KnN2c2s7XG4xNTc4Olx0XHRzdHJ1Y3Qgc29ja2V0XHQqc29jaztcbjE1Nzk6XHRcdGludFx0XHRlcnJvcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbmV3IGBzdmNfYWRkc29ja2AgZnVuY3Rpb24gYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgcGFydGljdWxhciBjaGVjay4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24uCgoqKkRpdmluZyBpbnRvIGBzdmNfYWRkc29ja2AgYW5kIEl0cyBDb250ZXh0KioKCkZpcnN0LCBJIHNlZSBgc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO2AuIFRoaXMgaXMgd2hlcmUgdGhlIHNvY2tldCBjb25maWd1cmF0aW9uIGFwcGVhcnMgdG8gYmUgaGFwcGVuaW5nLiBJIHJlY29nbml6ZSB0aGlzOyBJJiMzOTt2ZSB1c2VkIHRoaXMgc2ltaWxhciBjYWxsIG9mdGVuLiBHaXZlbiBpdHMgY2VudHJhbCByb2xlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYHN2Y19zZXR1cF9zb2NrZXRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgc2V0cyB1cCBzb2NrZXRzLiBIb3BlZnVsbHksIHRoZSBzb3VyY2UgY29kZSBpcyB3ZWxsIGRvY3VtZW50ZWQuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgc2lkZSBlZmZlY3RzIG9yIHBvdGVudGlhbCBnb3RjaGFzIHRoYXQgdGhpcyBuZXcgY2hlY2sgaW4gYHN2Y19hZGRzb2NrYCBpcyBhdHRlbXB0aW5nIHRvIG1pdGlnYXRlLiBSaWdodCBub3csIHRoaXMgYWxsIHNlZW1zIGEgbGl0dGxlIHZhZ3VlIHVudGlsIEkgY2hlY2sgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIGBzdmNfc2V0dXBfc29ja2V0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZjX3NldHVwX3NvY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jPTg1PWVudW0ge1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTg4LVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6ODk6c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKiwgc3RydWN0IHNvY2tldCAqLFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTAtXHRcdFx0XHRcdCBpbnQgZmxhZ3MpO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTQwMT1zdGF0aWMgdm9pZCBzdmNfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDA3LVx0aWYgKHN2c2spIHtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjQwODpcdFx0LyogUmVmZXIgdG8gc3ZjX3NldHVwX3NvY2tldCgpIGZvciBkZXRhaWxzLiAqL1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDA5LVx0XHRybWIoKTtcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz00MjI9c3RhdGljIHZvaWQgc3ZjX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00MjYtXHRpZiAoc3Zzaykge1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6NDI3Olx0XHQvKiBSZWZlciB0byBzdmNfc2V0dXBfc29ja2V0KCkgZm9yIGRldGFpbHMuICovXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00MjgtXHRcdHJtYigpO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTg3OD1zdGF0aWMgdm9pZCBzdmNfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy04OTgtXHRpZiAoc3Zzaykge1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6ODk5Olx0XHQvKiBSZWZlciB0byBzdmNfc2V0dXBfc29ja2V0KCkgZm9yIGRldGFpbHMuICovXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05MDAtXHRcdHJtYigpO1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTkxMD1zdGF0aWMgdm9pZCBzdmNfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTE0LVx0aWYgKHN2c2spIHtcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjkxNTpcdFx0LyogUmVmZXIgdG8gc3ZjX3NldHVwX3NvY2tldCgpIGZvciBkZXRhaWxzLiAqL1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTE2LVx0XHRybWIoKTtcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz05Mjc9c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX3RjcF9hY2NlcHQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk1OS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jOjk2MDpcdC8qIFJlc2V0IHRoZSBpbmhlcml0ZWQgY2FsbGJhY2tzIGJlZm9yZSBjYWxsaW5nIHN2Y19zZXR1cF9zb2NrZXQgKi9cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk2MS1cdG5ld3NvY2stXHUwMDNlc2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlID0gc3Zzay1cdTAwM2Vza19vc3RhdGU7XG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTY5LVxubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTcwOlx0bmV3c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2VydiwgbmV3c29jayxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk3MS1cdFx0XHRcdCAoU1ZDX1NPQ0tfQU5PTllNT1VTIHwgU1ZDX1NPQ0tfVEVNUE9SQVJZKSk7XG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTQyMj1zdGF0aWMgaW50IHN2Y19zb2NrX3NlbmRwYWdlcyhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncylcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNDM4LSAqL1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTQzOTpzdGF0aWMgc3RydWN0IHN2Y19zb2NrICpzdmNfc2V0dXBfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqc2Vydixcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE0NDAtXHRcdFx0XHRcdFx0c3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz0xNTE5PWludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NDktXHRcdGdvdG8gb3V0O1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTU1MDpcdHN2c2sgPSBzdmNfc2V0dXBfc29ja2V0KHNlcnYsIHNvLCBTVkNfU09DS19ERUZBVUxUUyk7XG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTUxLVx0aWYgKElTX0VSUihzdnNrKSkge1xuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jPTE1NzE9c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX2NyZWF0ZV9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE2MzMtXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNjM0Olx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc29jaywgZmxhZ3MpO1xubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTYzNS1cdGlmIChJU19FUlIoc3ZzaykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgYW5hbHlzaXM6CgoqKkRpdmluZyBpbnRvIGBzdmNfc2V0dXBfc29ja2V0YCBhbmQgYHNrX3VzZXJfZGF0YWAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgc3ZjX3NldHVwX3NvY2tldGAgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBoYW5kbGVzIGBza191c2VyX2RhdGFgLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgZm9yIGFueSBjdXN0b20gUlBDIGltcGxlbWVudGF0aW9uIGFuZCBob3cgd2UgaW50ZXJmYWNlIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0LiBHcmFiYmluZyBsaW5lcyAxNDM5LTE1MTAgd2lsbCBiZSB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXQgYW5kIHNlZSBob3cgaXQmIzM5O3MgdXNlZCBpbiBwcmFjdGljZS4gSSBuZWVkIHRvIGtub3c6IHdoYXQmIzM5O3MgYmVpbmcgc3RvcmVkIHRoZXJlLCB3aGF0IGNvbnRleHQgaXQgcmVwcmVzZW50cyAoY2xpZW50LCBzZXJ2ZXIsIGluZGl2aWR1YWwgcmVxdWVzdCwgc2Vzc2lvbiBldGMuKSwgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCBhbmQgc3Vic2VxdWVudGx5IGFjY2Vzc2VkL21hbmlwdWxhdGVkIHdpdGhpbiB0aGUgUlBDIGZyYW1ld29yay4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgbG9naWMuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgaG9sZGluZyBwZXItc29ja2V0LXNwZWNpZmljIFJQQyBjb250ZXh0IG9yIHNvbWUgbW9yZSBnZW5lcmFsIG5ldHdvcmtpbmcgbWV0YWRhdGEuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDM4Olx0ICovXG4xNDM5Olx0c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXG4xNDQwOlx0XHRcdFx0XHRcdFx0c3RydWN0IHNvY2tldCAqc29jayxcbjE0NDE6XHRcdFx0XHRcdFx0XHRpbnQgZmxhZ3MpXG4xNDQyOlx0e1xuMTQ0MzpcdFx0c3RydWN0IHN2Y19zb2NrXHQqc3ZzaztcbjE0NDQ6XHRcdHN0cnVjdCBzb2NrXHQqaW5ldDtcbjE0NDU6XHRcdGludFx0XHRwbWFwX3JlZ2lzdGVyID0gIShmbGFncyBcdTAwMjYgU1ZDX1NPQ0tfQU5PTllNT1VTKTtcbjE0NDY6XHRcdGludFx0XHRzZW5kcGFnZXM7XG4xNDQ3Olx0XHR1bnNpZ25lZCBsb25nXHRwYWdlcztcbjE0NDg6XHRcbjE0NDk6XHRcdHNlbmRwYWdlcyA9IHN2Y19zb2NrX3NlbmRwYWdlcyhzZXJ2LCBzb2NrLCBmbGFncyk7XG4xNDUwOlx0XHRpZiAoc2VuZHBhZ2VzIFx1MDAzYyAwKVxuMTQ1MTpcdFx0XHRyZXR1cm4gRVJSX1BUUihzZW5kcGFnZXMpO1xuMTQ1MjpcdFxuMTQ1MzpcdFx0cGFnZXMgPSBzdmNfc2Vydl9tYXhwYWdlcyhzZXJ2KTtcbjE0NTQ6XHRcdHN2c2sgPSBremFsbG9jX2ZsZXgoKnN2c2ssIHNrX3BhZ2VzLCBwYWdlcyk7XG4xNDU1Olx0XHRpZiAoIXN2c2spXG4xNDU2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTQ1NzpcdFxuMTQ1ODpcdFx0aWYgKHNlbmRwYWdlcykge1xuMTQ1OTpcdFx0XHRzdnNrLVx1MDAzZXNrX2J2ZWMgPSBremFsbG9jX29ianMoKnN2c2stXHUwMDNlc2tfYnZlYywgc2VuZHBhZ2VzKTtcbjE0NjA6XHRcdFx0aWYgKCFzdnNrLVx1MDAzZXNrX2J2ZWMpIHtcbjE0NjE6XHRcdFx0XHRrZnJlZShzdnNrKTtcbjE0NjI6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjE0NjM6XHRcdFx0fVxuMTQ2NDpcdFx0fVxuMTQ2NTpcdFxuMTQ2NjpcdFx0c3Zzay1cdTAwM2Vza19tYXhwYWdlcyA9IHBhZ2VzO1xuMTQ2NzpcdFxuMTQ2ODpcdFx0aW5ldCA9IHNvY2stXHUwMDNlc2s7XG4xNDY5Olx0XG4xNDcwOlx0XHRpZiAocG1hcF9yZWdpc3Rlcikge1xuMTQ3MTpcdFx0XHRpbnQgZXJyO1xuMTQ3MjpcdFxuMTQ3MzpcdFx0XHRlcnIgPSBzdmNfcmVnaXN0ZXIoc2Vydiwgc29ja19uZXQoc29jay1cdTAwM2VzayksIGluZXQtXHUwMDNlc2tfZmFtaWx5LFxuMTQ3NDpcdFx0XHRcdFx0ICAgICBpbmV0LVx1MDAzZXNrX3Byb3RvY29sLFxuMTQ3NTpcdFx0XHRcdFx0ICAgICBudG9ocyhpbmV0X3NrKGluZXQpLVx1MDAzZWluZXRfc3BvcnQpKTtcbjE0NzY6XHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMTQ3NzpcdFx0XHRcdGtmcmVlKHN2c2stXHUwMDNlc2tfYnZlYyk7XG4xNDc4Olx0XHRcdFx0a2ZyZWUoc3Zzayk7XG4xNDc5Olx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjE0ODA6XHRcdFx0fVxuMTQ4MTpcdFx0fVxuMTQ4MjpcdFxuMTQ4MzpcdFx0c3Zzay1cdTAwM2Vza19zb2NrID0gc29jaztcbjE0ODQ6XHRcdHN2c2stXHUwMDNlc2tfc2sgPSBpbmV0O1xuMTQ4NTpcdFx0c3Zzay1cdTAwM2Vza19vc3RhdGUgPSBpbmV0LVx1MDAzZXNrX3N0YXRlX2NoYW5nZTtcbjE0ODY6XHRcdHN2c2stXHUwMDNlc2tfb2RhdGEgPSBpbmV0LVx1MDAzZXNrX2RhdGFfcmVhZHk7XG4xNDg3Olx0XHRzdnNrLVx1MDAzZXNrX293c3BhY2UgPSBpbmV0LVx1MDAzZXNrX3dyaXRlX3NwYWNlO1xuMTQ4ODpcdFx0LypcbjE0ODk6XHRcdCAqIFRoaXMgYmFycmllciBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvblxuMTQ5MDpcdFx0ICogd2l0aCBzdmNfZGF0YV9yZWFkeSgpLCBzdmNfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KCksIGFuZCBvdGhlcnNcbjE0OTE6XHRcdCAqIHdoZW4gY2FsbGluZyBjYWxsYmFja3MgYWJvdmUuXG4xNDkyOlx0XHQgKi9cbjE0OTM6XHRcdHdtYigpO1xuMTQ5NDpcdFx0aW5ldC1cdTAwM2Vza191c2VyX2RhdGEgPSBzdnNrO1xuMTQ5NTpcdFxuMTQ5NjpcdFx0LyogSW5pdGlhbGl6ZSB0aGUgc29ja2V0ICovXG4xNDk3Olx0XHRpZiAoc29jay1cdTAwM2V0eXBlID09IFNPQ0tfREdSQU0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjMKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgaXMgS0FTQU4gdGVycml0b3J5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoYXQgYHN2Y19hZGRzb2NrYCBmdW5jdGlvbi4uLiBpdCYjMzk7cyBkb2luZyBhIGNoZWNrLCBhbmQgaXQmIzM5O3MgYSBjcml0aWNhbCBvbmUuIElmIGBzby0mZ3Q7c2stJmd0O3NrX3VzZXJfZGF0YWAgaXMgYWxyZWFkeSBzZXQsIGl0IGJhaWxzIG91dCB3aXRoIGAtRUJVU1lgLiBUaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGlzIHRoYXQgYHN2Y19zZXR1cF9zb2NrZXRgIHdhcyBvdmVyd3JpdGluZyB0aGlzLCB3aGljaCB3b3VsZCBhYnNvbHV0ZWx5IHN0b21wIG9uIHdoYXRldmVyIGRhdGEgb3Igc3Vic3lzdGVtIHdhcyAqYWxyZWFkeSogdXNpbmcgdGhhdCBgc2tfdXNlcl9kYXRhYCBmaWVsZCwgbGVhZGluZyB0byBhIGNsYXNzaWMgVUFGIG9yLCB3b3JzZSwgYXJiaXRyYXJ5IHBvaW50ZXIgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIE5hc3R5LiBUaGF0IGAtRUJVU1lgIGNoZWNrIGlzIGEgY3J1Y2lhbCBzYWZlZ3VhcmQuCgpTbywgd2hlcmUgZG9lcyB0aGlzIGJ1ZyBzaXQgb24gdGhlIHNwZWN0cnVtIG9mIG1lbW9yeSBzYWZldHkgdG9vbHM/IExldCYjMzk7cyB0aWNrIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLiBEb2VzIGl0IGNyZWF0ZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBicmFuY2hpbmcgaW50cm9kdWNlZD8gQWxzbyBuby4gQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTmVnYXRpdmUuIEFyZSBhbnkgYm91bmRzIGNoZWNrcyBhbHRlcmVkIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vdCBpbiB0aGlzIGNhc2UuCgpXaGF0JiMzOTtzIGhhcHBlbmluZyBoZXJlIGlzIHRoZSBwcmV2ZW50aW9uIG9mIGEgc29ja2V0IGZyb20gYmVpbmcgcmV1c2VkLCBvciBhIHVzZS1hZnRlci1mcmVlLCBvciBgc2tfdXNlcl9kYXRhYCBiZWluZyBvdmVyd3JpdHRlbiAtIGl0JiMzOTtzIGRpcmVjdGx5IGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24sIFVBRiwgYW5kIGRhdGEgY29ycnVwdGlvbi4gVGhhdCYjMzk7cyAqdGV4dGJvb2sqIEtBU0FOIHRlcnJpdG9yeS4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiBtZW1vcnkgc2FmZXR5IGlzc3VlcyBLQVNBTiBpcyBidWlsdCB0byBmaW5kLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBubyBuZXcgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIGFib3V0IGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIG1pc3VzZS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGNsZWFybHkgYGZhbHNlYC4KCkhlcmUmIzM5O3MgbXkgcmF0aW9uYWxlIGZvciB0aGUgY2hhbmdlOgpUaGUgcGF0Y2ggaW5zZXJ0cyBhIGNoZWNrIHdpdGhpbiBgc3ZjX2FkZHNvY2soKWAuICBUaGlzIHJldHVybnMgYC1FQlVTWWAgaWYgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIHBhcnQgb2YgdGhlIHN5c3RlbSBvciBhbiBSUEMgc2VydmljZSwgYW5kIHRoaXMgcHJldmVudHMgb3ZlcndyaXRpbmcgYHNrX3VzZXJfZGF0YWAuIFByZXZlbnRpbmcgdGhpcyBpcyB0aGUgKmtleSogaGVyZS4gIE92ZXJ3cml0aW5nIGBza191c2VyX2RhdGFgIGNvdWxkIGxlYWQgdG8gdHlwZSBjb25mdXNpb24sIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIG91dHJpZ2h0IG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBpcyBhdm9pZGVkIGhlcmUuCgpDcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgb3IgdXNlci1zcGFjZSBpbmZvIGxlYWtzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgKnRoaXMqIGNoYW5nZS4gVGhlIHBvdGVudGlhbCBwcm9ibGVtcyBoZXJlLCBhcmUgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9ucyBvciBtaXN1c2Ugb2YgdGhlIHNvY2tldCBzdGF0ZSwgYW5kIHRoYXQgc29ydCBvZiBzdHVmZiBpcyB2ZXJ5IHdlbGwgaGFuZGxlZCBieSBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuICBObyBuZWVkIGZvciBhbnkgc3BlY2lhbCBLTVNBTiBmdXp6aW5nLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgaXMgTlVMTCBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIHN2Y19zZXR1cF9zb2NrZXQoKSwgcmV0dXJuaW5nIC1FQlVTWSBpZiBpdCBpcyBhbHJlYWR5IGluIHVzZS4gVGhpcyBwcmV2ZW50cyBvdmVyd3JpdGluZyBza191c2VyX2RhdGEgYW5kIHNvY2tldCBjYWxsYmFja3Mgd2hlbiBhIHNvY2tldCBpcyBhbHJlYWR5IG93bmVkLCBwcmV2ZW50aW5nIHR5cGUgY29uZnVzaW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcvc3RydWN0IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxvZ2ljLiBBbnkgbWVtb3J5IGJ1Z3MgaW4gdGhpcyBwYXRoIGFyZSB1c2UtYWZ0ZXItZnJlZSBvciBzdGF0ZSBjb3JydXB0aW9uIGlzc3VlcyBjYXVnaHQgYnkgS0FTQU4sIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgaXMgTlVMTCBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIHN2Y19zZXR1cF9zb2NrZXQoKSwgcmV0dXJuaW5nIC1FQlVTWSBpZiBpdCBpcyBhbHJlYWR5IGluIHVzZS4gVGhpcyBwcmV2ZW50cyBvdmVyd3JpdGluZyBza191c2VyX2RhdGEgYW5kIHNvY2tldCBjYWxsYmFja3Mgd2hlbiBhIHNvY2tldCBpcyBhbHJlYWR5IG93bmVkLCBwcmV2ZW50aW5nIHR5cGUgY29uZnVzaW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcvc3RydWN0IGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxvZ2ljLiBBbnkgbWVtb3J5IGJ1Z3MgaW4gdGhpcyBwYXRoIGFyZSB1c2UtYWZ0ZXItZnJlZSBvciBzdGF0ZSBjb3JydXB0aW9uIGlzc3VlcyBjYXVnaHQgYnkgS0FTQU4sIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA4OjQ2LjQyNzExMjA3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzYxNDc5Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCIsXG4gICAgXCJfX3dyaXRlX3BvcnRzX2FkZGZkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcHJldmVudCBzb2NrZXRzIHdpdGggZXhpc3RpbmcgYHNrX3VzZXJfZGF0YWAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGFzIFJQQyBzZXJ2aWNlIGxpc3RlbmVyIHNvY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcvUlBDIHNlcnZlciBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBORlNEIGNvbnRyb2wgaW50ZXJmYWNlICh3cml0aW5nIGFuIEZEIHRvIC9wcm9jL2ZzL25mc2QvcG9ydGxpc3QpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowODo0Ni40MjcxMTgyOTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDk5MDM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBiZDNkY2JhZjQwODUxNmMwMWEwYzYyMDBmMTViNDQ1N2I3Y2FkOTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxNDowODo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXFxuaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xcbisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jXFxuQEAgLTE1NDEsNiArMTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxcbiBcXHRlcnIgPSAtRUlTQ09OTjtcXG4gXFx0aWYgKHNvLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4rXFx0ZXJyID0gLUVCVVNZO1xcbitcXHRpZiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHRlcnIgPSAtRU5PRU5UO1xcbiBcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA4OjQ2Ljk2ODg3NzMwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDY5MDMwODkzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1VOUlBDXCIsXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZjX2FkZHNvY2tcIixcbiAgICBcIl9fd3JpdGVfcG9ydHNfYWRkZmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcHJldmVudCBzb2NrZXRzIHdpdGggZXhpc3RpbmcgYHNrX3VzZXJfZGF0YWAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGFzIFJQQyBzZXJ2aWNlIGxpc3RlbmVyIHNvY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcvUlBDIHNlcnZlciBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBORlNEIGNvbnRyb2wgaW50ZXJmYWNlICh3cml0aW5nIGFuIEZEIHRvIC9wcm9jL2ZzL25mc2QvcG9ydGxpc3QpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiZDNkY2JhZjQwODUxNmMwMWEwYzYyMDBmMTViNDQ1N2I3Y2FkOTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjA4OjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuaW5kZXggNTBlNWU3ZjViNzYyZC4uZThjYzQzMjlmMTI4MiAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jXG4rKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suY1xuQEAgLTE1NDEsNiArMTU0MSw5IEBAIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxuIFx0ZXJyID0gLUVJU0NPTk47XG4gXHRpZiAoc28tXHUwMDNlc3RhdGUgXHUwMDNlIFNTX1VOQ09OTkVDVEVEKVxuIFx0XHRnb3RvIG91dDtcbitcdGVyciA9IC1FQlVTWTtcbitcdGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpXG4rXHRcdGdvdG8gb3V0O1xuIFx0ZXJyID0gLUVOT0VOVDtcbiBcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuIFx0XHRnb3RvIG91dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA4OjQ2Ljk2ODg3OTM0M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDIwODQ2NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHN2Y19hZGRzb2NrYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGRpZmYgdGFyZ2V0aW5nIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIGBzdmNfYWRkc29ja2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBpbnRyb2R1Y2VkLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBjaGVjazogYGlmIChzby1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEpIGdvdG8gb3V0O2AgcmlnaHQgYWZ0ZXIgdGhlIGV4aXN0aW5nIGBzby1cdTAwM2VzdGF0ZWAgYW5kIHJpZ2h0IGJlZm9yZSB0aGUgYHRyeV9tb2R1bGVfZ2V0YCBjYWxsLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0J3Mgc2hvcnQtY2lyY3VpdGluZyB0aGUgYWRkIG9wZXJhdGlvbiBpZiBgc2tfdXNlcl9kYXRhYCBpcyBzZXQuIFRoZSBwcmV2aW91cyBjaGVja3MgY292ZXJlZCBjb25uZWN0aW9uIHN0YXRlIGFuZCBtb2R1bGUgYXZhaWxhYmlsaXR5LCB0aGlzIGlzIG5ldywgYW5kIGNsZWFybHkgcmVsYXRlZCB0byByZXNvdXJjZSBjb250ZW50aW9uIG9yIHBlcmhhcHMgcHJldmVudGluZyBkb3VibGUtcmVnaXN0cmF0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGludGVuZGVkIHRvIHByZXZlbnQgYSBzb2NrZXQgZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgc2VydmljZSBpZiBpdCdzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIHNvbWUgb3RoZXIgY29udGV4dC4gV2Uga25vdyB0aGF0IGBza191c2VyX2RhdGFgIGlzIG9mdGVuIHVzZWQgdG8gaG9sZCBwcml2YXRlIGRhdGEgc3BlY2lmaWMgdG8gYSBzb2NrZXQsIHNvIGEgbm9uLW51bGwgYHNrX3VzZXJfZGF0YWAgbGlrZWx5IGluZGljYXRlcyB0aGUgc29ja2V0IGlzIGFscmVhZHkgJ2luIHVzZScuIE1ha2VzIHNlbnNlLiBQcmV2ZW50aW5nIHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBhdm9pZGluZyByYWNlIGNvbmRpdGlvbnMsIHJlc291cmNlIGxlYWtzLCBvciBwcmV2ZW50aW5nIGRvdWJsZSBhY2NvdW50aW5nIG9mIHJlc291cmNlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucywgSSdtIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgc3ZjX2FkZHNvY2tgIGFuZCB3aGF0IGNhbGxzIGl0LiBJJ2xsIGZpcmUgdXAgbXkgdHJ1c3R5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IGFyZWEsIGFuZCB3aGVyZSBgc3ZjX2FkZHNvY2tgIGdldHMgY2FsbGVkIGZyb20uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDg6NTcuMzg5NzI4NjY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zdW5ycGMvc3Zjc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MjA6XFx0XFx0XFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbjE1MjE6XFx0e1xcbjE1MjI6XFx0XFx0aW50IGVyciA9IDA7XFxuMTUyMzpcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzbyA9IHNvY2tmZF9sb29rdXAoZmQsIFxcdTAwMjZlcnIpO1xcbjE1MjQ6XFx0XFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID0gTlVMTDtcXG4xNTI1OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuMTUyNjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkcjtcXG4xNTI3OlxcdFxcdGludCBzYWxlbjtcXG4xNTI4OlxcdFxcbjE1Mjk6XFx0XFx0aWYgKCFzbylcXG4xNTMwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTUzMTpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE1MzI6XFx0XFx0aWYgKHNvY2tfbmV0KHNvLVxcdTAwM2VzaykgIT0gbmV0KVxcbjE1MzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNDpcXHRcXHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xcbjE1MzU6XFx0XFx0aWYgKChzby1cXHUwMDNlc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBQRl9JTkVUKSBcXHUwMDI2XFx1MDAyNiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYpKVxcbjE1MzY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNzpcXHRcXHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcXG4xNTM4OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2XFxuMTUzOTpcXHRcXHQgICAgc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcXG4xNTQwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDE6XFx0XFx0ZXJyID0gLUVJU0NPTk47XFxuMTU0MjpcXHRcXHRpZiAoc28tXFx1MDAzZXN0YXRlIFxcdTAwM2UgU1NfVU5DT05ORUNURUQpXFxuMTU0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ0OlxcdFxcdGVyciA9IC1FQlVTWTtcXG4xNTQ1OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSlcXG4xNTQ2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDc6XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xNTQ4OlxcdFxcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxcbjE1NDk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1MDpcXHRcXHRzdnNrID0gc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO1xcbjE1NTE6XFx0XFx0aWYgKElTX0VSUihzdnNrKSkge1xcbjE1NTI6XFx0XFx0XFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuMTU1MzpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHN2c2spO1xcbjE1NTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1NTpcXHRcXHR9XFxuMTU1NjpcXHRcXHRzYWxlbiA9IGtlcm5lbF9nZXRzb2NrbmFtZShzdnNrLVxcdTAwM2Vza19zb2NrLCBzaW4pO1xcbjE1NTc6XFx0XFx0aWYgKHNhbGVuIFxcdTAwM2U9IDApXFxuMTU1ODpcXHRcXHRcXHRzdmNfeHBydF9zZXRfbG9jYWwoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIHNpbiwgc2FsZW4pO1xcbjE1NTk6XFx0XFx0c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfY3JlZCA9IGdldF9jcmVkKGNyZWQpO1xcbjE1NjA6XFx0XFx0c3ZjX2FkZF9uZXdfcGVybV94cHJ0KHNlcnYsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0KTtcXG4xNTYxOlxcdFxcdHJldHVybiBzdmNfb25lX3NvY2tfbmFtZShzdnNrLCBuYW1lX3JldHVybiwgbGVuKTtcXG4xNTYyOlxcdG91dDpcXG4xNTYzOlxcdFxcdHNvY2tmZF9wdXQoc28pO1xcbjE1NjQ6XFx0XFx0cmV0dXJuIGVycjtcXG4xNTY1OlxcdH1cXG4xNTY2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcXG4xNTY3OlxcdFxcbjE1Njg6XFx0LypcXG4xNTY5OlxcdCAqIENyZWF0ZSBzb2NrZXQgZm9yIFJQQyBzZXJ2aWNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowODo1Ny4zOTAxNjE3MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjMzNzc4ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHN2Y19hZGRzb2NrYCBVc2FnZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgc3ZjX2FkZHNvY2tgLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhpcyBpcyBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlIGZvciBkaWdnaW5nIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBhIHNwZWNpZmljIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgd2hlcmUgaXQncyBjYWxsZWQgZnJvbSB3aWxsIGJlIHRoZSBmaXJzdCBzdGVwIHRvIGZpZ3VyaW5nIG91dCBpdHMgcm9sZSBhbmQgYW55IHBvdGVudGlhbCBpbXBhY3Qgb2YgbW9kaWZ5aW5nIGl0LCBvciBmb3IgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowODo1OS4wMjM5NDM5MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3ODA4NTUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdmNfYWRkc29ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnNkL25mc2N0bC5jPTczMj1zdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZGZkKGNoYXIgKmJ1Ziwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4tLVxcbmZzL25mc2QvbmZzY3RsLmMtNzQ4LVxcdHNlcnYgPSBubi1cXHUwMDNlbmZzZF9zZXJ2O1xcbmZzL25mc2QvbmZzY3RsLmM6NzQ5OlxcdGVyciA9IHN2Y19hZGRzb2NrKHNlcnYsIG5ldCwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCBjcmVkKTtcXG5mcy9uZnNkL25mc2N0bC5jLTc1MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaD02NT12b2lkXFx0XFx0c3ZjX3NlbmQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCk7XFxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oOjY2OmludFxcdFxcdHN2Y19hZGRzb2NrKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LFxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaC02Ny1cXHRcXHRcXHQgICAgY29uc3QgaW50IGZkLCBjaGFyICpuYW1lX3JldHVybiwgY29uc3Qgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTE0Mzk9c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTA2LS8qKlxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE1MDc6ICogc3ZjX2FkZHNvY2sgLSBhZGQgYSBsaXN0ZW5lciBzb2NrZXQgdG8gYW4gUlBDIHNlcnZpY2VcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTA4LSAqIEBzZXJ2OiBwb2ludGVyIHRvIFJQQyBzZXJ2aWNlIHRvIHdoaWNoIHRvIGFkZCBhIG5ldyBsaXN0ZW5lclxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTUxOC0gKi9cXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxNTE5OmludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgaW50IGZkLFxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MjAtXFx0XFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTU2NS19XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTU2NjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTU2Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MDAuODAyMDM5NDI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwNDY2NzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBgc3ZjX2FkZHNvY2tgIFVzYWdlKipcblxuT2theSwgc28gYHN2Y19hZGRzb2NrYCBpcyBleHBvcnRlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYGZzL25mc2QvbmZzY3RsLmNgIGlzIHVzaW5nIGl0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5ICpob3cqLiBUaGUgY2x1ZSBpcyB0aGlzIGludGVyYWN0aW9uIHdpdGggYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMgd2l0aGluIHRoZSBgc3lzZnMvbmZzY3RsYCBpbnRlcmZhY2UuIFJpZ2h0LCBzbyB0aGF0IHBvaW50cyBtZSBkaXJlY3RseSB0byB0aGF0IGBuZnNjdGwuY2AgZmlsZS4gVGltZSB0byBkaWcgaW4uLi4gSSdsbCBqdW1wIHJpZ2h0IHRvIGxpbmUgNzMyLCBzZWUgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhlcmUuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWxldmFudCBgbmZzY3RsYCBsb2dpYyBvciB0aGUgcG9ydGxpc3QgaW50ZXJhY3Rpb24gb2NjdXJzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBgc3ZjX2FkZHNvY2tgIGJhc2VkIG9uIHRoYXQgY29udGV4dC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjAzLjEwNjcxMDE4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZnNkL25mc2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyNTpcXHR9XFxuIDcyNjpcXHRcXG4gNzI3OlxcdC8qXFxuIDcyODpcXHQgKiBBIHNpbmdsZSAnZmQnIG51bWJlciB3YXMgd3JpdHRlbiwgaW4gd2hpY2ggY2FzZSBpdCBtdXN0IGJlIGZvclxcbiA3Mjk6XFx0ICogYSBzb2NrZXQgb2YgYSBzdXBwb3J0ZWQgZmFtaWx5L3Byb3RvY29sLCBhbmQgd2UgdXNlIGl0IGFzIGFuXFxuIDczMDpcXHQgKiBuZnNkIGxpc3RlbmVyLlxcbiA3MzE6XFx0ICovXFxuIDczMjpcXHRzdGF0aWMgc3NpemVfdCBfX3dyaXRlX3BvcnRzX2FkZGZkKGNoYXIgKmJ1Ziwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4gNzMzOlxcdHtcXG4gNzM0OlxcdFxcdGNoYXIgKm1lc2cgPSBidWY7XFxuIDczNTpcXHRcXHRpbnQgZmQsIGVycjtcXG4gNzM2OlxcdFxcdHN0cnVjdCBuZnNkX25ldCAqbm4gPSBuZXRfZ2VuZXJpYyhuZXQsIG5mc2RfbmV0X2lkKTtcXG4gNzM3OlxcdFxcdHN0cnVjdCBzdmNfc2VydiAqc2VydjtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0ZXJyID0gZ2V0X2ludChcXHUwMDI2bWVzZywgXFx1MDAyNmZkKTtcXG4gNzQwOlxcdFxcdGlmIChlcnIgIT0gMCB8fCBmZCBcXHUwMDNjIDApXFxuIDc0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzQyOlxcdFxcdHRyYWNlX25mc2RfY3RsX3BvcnRzX2FkZGZkKG5ldCwgZmQpO1xcbiA3NDM6XFx0XFxuIDc0NDpcXHRcXHRlcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KG5ldCk7XFxuIDc0NTpcXHRcXHRpZiAoZXJyICE9IDApXFxuIDc0NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRzZXJ2ID0gbm4tXFx1MDAzZW5mc2Rfc2VydjtcXG4gNzQ5OlxcdFxcdGVyciA9IHN2Y19hZGRzb2NrKHNlcnYsIG5ldCwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCBjcmVkKTtcXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0aWYgKCFzZXJ2LVxcdTAwM2Vzdl9ucnRocmVhZHMgXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2bm4tXFx1MDAzZW5mc2Rfc2Vydi1cXHUwMDNlc3ZfcGVybXNvY2tzKSlcXG4gNzUyOlxcdFxcdFxcdG5mc2RfZGVzdHJveV9zZXJ2KG5ldCk7XFxuIDc1MzpcXHRcXG4gNzU0OlxcdFxcdHJldHVybiBlcnI7XFxuIDc1NTpcXHR9XFxuIDc1NjpcXHRcXG4gNzU3OlxcdC8qXFxuIDc1ODpcXHQgKiBBIHRyYW5zcG9ydCBsaXN0ZW5lciBpcyBhZGRlZCBieSB3cml0aW5nIGl0cyB0cmFuc3BvcnQgbmFtZSBhbmRcXG4gNzU5OlxcdCAqIGEgcG9ydCBudW1iZXIuXFxuIDc2MDpcXHQgKi9cXG4gNzYxOlxcdHN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkeHBydChjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuIDc2MjpcXHR7XFxuIDc2MzpcXHRcXHRjaGFyIHRyYW5zcG9ydFsxNl07XFxuIDc2NDpcXHRcXHRzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjAzLjEwNjg1MjQyN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDg4MzE2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgVXNlci1TcGFjZSBFbnRyeSBQb2ludCBmb3IgYF9fd3JpdGVfcG9ydHNfYWRkZmRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBpcyBiZWluZyBpbnZva2VkIGZyb20gdXNlciBzcGFjZS4gTGV0J3MgZGlnIGluLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCBpdCdzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gd3JpdGluZy4gVGhlIGBfX2AgcHJlZml4IHVzdWFsbHkgaW5kaWNhdGVzIGFuIGludGVybmFsIGtlcm5lbCBmdW5jdGlvbiwgc28gaXQgd29uJ3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCdzIGxpa2VseSBhIGxvd2VyLWxldmVsIGhlbHBlciBmb3IgYSBtb3JlIHVzZXItZmFjaW5nIHN5c3RlbSBjYWxsLlxuXG5NeSBpbW1lZGlhdGUgcGxhbiBpcyB0byB1c2UgYSBjb21iaW5hdGlvbiBvZiB0ZWNobmlxdWVzLiBJJ2xsIHN0YXJ0IHdpdGggc291cmNlIGNvZGUgYW5hbHlzaXMsIGdyZXBwaW5nIGZvciBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLCBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyBpdCBtaWdodCBiZSBsaW5rZWQgdG8gb3RoZXIgZnVuY3Rpb25zIGFuZCBwb3RlbnRpYWxseSB0cmFjZSBpdCB3aXRoIGEgZGVidWdnZXIgdG8gY2hlY2sgdGhhdCB3aGF0IEkgdGhvdWdodCB3YXMgaGFwcGVuaW5nLCBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHRoZSBhcmd1bWVudHMgcGFzc2VkLCBhbmQgd2hhdCBjb250ZXh0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24uIEkga25vdyBJIGhhdmUgdG8gY29uc2lkZXIgZGlmZmVyZW50IHN5c3RlbSBjYWxscyB0aGF0IGNvdWxkIGhhbmRsZSB0aGUgZnVuY3Rpb24gYXMgYSBoZWxwZXIuXG5cbkknbGwga2VlcCBhIHNoYXJwIGV5ZSBvdXQgZm9yIGxpa2VseSBzdXNwZWN0cyBsaWtlIGBlcG9sbF9jdGxgIChnaXZlbiBpdHMgRkQgbWFuYWdlbWVudCBuYXR1cmUpIG9yIGV2ZW4gY3VzdG9tIGRyaXZlcnMgaWYgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBzcGVjaWZpYyB0byBoYXJkd2FyZSBvciBhIG5vbi1zdGFuZGFyZCBkZXZpY2UuIEkga25vdyB0aGF0IGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIGNhbGxzIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBsb29rIGF0IGFsbCBwb3NzaWJsZSBlbnRyeSBwb2ludHMgdG8gc2VlIGlmIHRoZSBjYWxscyBhcmUgbWFkZSBmcm9tIHRoZXJlLiBJIG1pZ2h0IGV2ZW4gY29uc2lkZXIgbG9va2luZyBhdCB0aGUga2VybmVsIGhlYWRlcnMsIGxvb2tpbmcgZm9yIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyB0aGF0IGFyZSBkZWZpbmVkIGFzIHdlbGwuXG5cbkkgbmVlZCB0byBxdWlja2x5IGZvcm11bGF0ZSBhIHBsYW4gdGhhdCBpZGVudGlmaWVzIHN5c3RlbSBjYWxscyBpbnZvbHZlZCBpbiB3cml0ZSBvcGVyYXRpb25zIGFuZCB0aGVuIGlkZW50aWZ5IHRoZSBwb3NzaWJsZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgdGhlIG9wZXJhdGlvbnMgY2FsbC4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIGlkZW50aWZ5IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0J3MgYmVpbmcgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MDYuMjU1Njg3NTcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQyMjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3dyaXRlX3BvcnRzX2FkZGZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mc2RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzZC9uZnNjdGwuYz03MTg9c3RhdGljIHNzaXplX3QgX193cml0ZV9wb3J0c19uYW1lcyhjaGFyICpidWYsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbmZzL25mc2QvbmZzY3RsLmMtNzMxLSAqL1xcbmZzL25mc2QvbmZzY3RsLmM6NzMyOnN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkZmQoY2hhciAqYnVmLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbmZzL25mc2QvbmZzY3RsLmMtNzMzLXtcXG4tLVxcbmZzL25mc2QvbmZzY3RsLmM9ODA1PXN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsXFxuLS1cXG5mcy9uZnNkL25mc2N0bC5jLTgxMS1cXHRpZiAoaXNkaWdpdChidWZbMF0pKVxcbmZzL25mc2QvbmZzY3RsLmM6ODEyOlxcdFxcdHJldHVybiBfX3dyaXRlX3BvcnRzX2FkZGZkKGJ1ZiwgbmV0LCBmaWxlLVxcdTAwM2VmX2NyZWQpO1xcbmZzL25mc2QvbmZzY3RsLmMtODEzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTowNi4zMDYxMTg1MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY2NDI0MDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GU0QgUG9ydGxpc3QgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBfX3dyaXRlX3BvcnRzYCwgd2hpY2ggSSBzZWUgaXMgYSBoZWxwZXIgd2l0aGluIHRoZSBgd3JpdGVfcG9ydHNgIGhhbmRsZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgIGZpbGUg4oCTIHRoYXQgTkZTIGRhZW1vbiBwb3J0bGlzdCBlbnRyeS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBORlNEIGFuZCBTVU5SUEMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2V0LCBvciBJIHdvbid0IHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgc3VwcG9zZWQgdG8gZG8uIEEgc29saWQgZ3Jhc3Agb2YgdGhlIEtjb25maWcgb3B0aW9ucyB3aWxsIHRlbGwgbWUgaWYgdGhlIE5GUyBkYWVtb24gaXMgYnVpbHQgYW5kIGNvbmZpZ3VyZWQgYXMgSSB3b3VsZCBleHBlY3QsIHNvIEkgaGF2ZSBhIGZvdW5kYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgYF9fd3JpdGVfcG9ydHNgIGhhbmRsZXIuIEkgbmVlZCB0byBrbm93IHRoZSBwcmVyZXF1aXNpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MDguOTcwMzYyMDM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTAxMDUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORlNEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mc2RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MzAzIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5mcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9uZnNkL0tjb25maWc6Mjpjb25maWcgTkZTRFxcbmZzL25mc2QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJORlMgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNy1cXHRzZWxlY3QgQ1JDMzJcXG5mcy9uZnNkL0tjb25maWc6ODpcXHRzZWxlY3QgQ1JZUFRPX0xJQl9NRDUgaWYgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuZnMvbmZzZC9LY29uZmlnOjk6XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2IGlmIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUTyAjIHJlcXVpcmVkIGJ5IFJQQ1NFQ19HU1NfS1JCNSBhbmQgc2lnbmVkIGZpbGVoYW5kbGVzXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTQtXFx0c2VsZWN0IE5GU19DT01NT05cXG5mcy9uZnNkL0tjb25maWc6MTU6XFx0c2VsZWN0IE5GU19BQ0xfU1VQUE9SVCBpZiBORlNEX1YyX0FDTFxcbmZzL25mc2QvS2NvbmZpZzoxNjpcXHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjNfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMzUtXFx0ICBTdXBwb3J0IGZvciBORlMgdmVyc2lvbiAzIChSRkMgMTgxMykgaXMgYWx3YXlzIGF2YWlsYWJsZSB3aGVuXFxuZnMvbmZzZC9LY29uZmlnOjM2OlxcdCAgQ09ORklHX05GU0QgaXMgc2VsZWN0ZWQuXFxuZnMvbmZzZC9LY29uZmlnLTM3LVxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTM5LVxcbmZzL25mc2QvS2NvbmZpZzo0MDpjb25maWcgTkZTRF9WMlxcbmZzL25mc2QvS2NvbmZpZy00MS1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXFxcIlxcbmZzL25mc2QvS2NvbmZpZzo0MjpcXHRkZXBlbmRzIG9uIE5GU0RcXG5mcy9uZnNkL0tjb25maWctNDMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNTAtXFxuZnMvbmZzZC9LY29uZmlnOjUxOmNvbmZpZyBORlNEX1YyX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Mi1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbmZzL25mc2QvS2NvbmZpZzo1MzpcXHRkZXBlbmRzIG9uIE5GU0RfVjJcXG5mcy9uZnNkL0tjb25maWctNTQtXFxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Ni1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbmZzL25mc2QvS2NvbmZpZzo1NzpcXHRkZXBlbmRzIG9uIE5GU0RcXG5mcy9uZnNkL0tjb25maWctNTgtXFx0aGVscFxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTc2LVxcbmZzL25mc2QvS2NvbmZpZzo3Nzpjb25maWcgTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy03OC1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjc5OlxcdGRlcGVuZHMgb24gTkZTRCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuZnMvbmZzZC9LY29uZmlnLTgwLVxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy05My1cXG5mcy9uZnNkL0tjb25maWc6OTQ6Y29uZmlnIE5GU0RfUE5GU1xcbmZzL25mc2QvS2NvbmZpZy05NS1cXHRib29sXFxuZnMvbmZzZC9LY29uZmlnLTk2LVxcbmZzL25mc2QvS2NvbmZpZzo5Nzpjb25maWcgTkZTRF9CTE9DS0xBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy05OC1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIGJsb2NrIGxheW91dHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjk5OlxcdGRlcGVuZHMgb24gTkZTRF9WNCBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmZzL25mc2QvS2NvbmZpZzoxMDA6XFx0c2VsZWN0IE5GU0RfUE5GU1xcbmZzL25mc2QvS2NvbmZpZy0xMDEtXFx0c2VsZWN0IEVYUE9SVEZTX0JMT0NLX09QU1xcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEwOS1cXG5mcy9uZnNkL0tjb25maWc6MTEwOmNvbmZpZyBORlNEX1NDU0lMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTExLVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXFxcIlxcbmZzL25mc2QvS2NvbmZpZzoxMTI6XFx0ZGVwZW5kcyBvbiBORlNEX1Y0IFxcdTAwMjZcXHUwMDI2IEJMT0NLXFxuZnMvbmZzZC9LY29uZmlnOjExMzpcXHRzZWxlY3QgTkZTRF9QTkZTXFxuZnMvbmZzZC9LY29uZmlnLTExNC1cXHRzZWxlY3QgRVhQT1JURlNfQkxPQ0tfT1BTXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTIzLVxcbmZzL25mc2QvS2NvbmZpZzoxMjQ6Y29uZmlnIE5GU0RfRkxFWEZJTEVMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTI1LVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgRmxleCBGaWxlIGxheW91dHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjEyNjpcXHRkZXBlbmRzIG9uIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWc6MTI3OlxcdHNlbGVjdCBORlNEX1BORlNcXG5mcy9uZnNkL0tjb25maWctMTI4LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNDAtXFxuZnMvbmZzZC9LY29uZmlnOjE0MTpjb25maWcgTkZTRF9WNF8yX0lOVEVSX1NTQ1xcbmZzL25mc2QvS2NvbmZpZy0xNDItXFx0Ym9vbCBcXFwiTkZTdjQuMiBpbnRlciBzZXJ2ZXIgdG8gc2VydmVyIENPUFlcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE0MzpcXHRkZXBlbmRzIG9uIE5GU0RfVjQgXFx1MDAyNlxcdTAwMjYgTkZTX1Y0XzJcXG5mcy9uZnNkL0tjb25maWctMTQ0LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNTAtXFxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvS2NvbmZpZy0xNTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE1MzpcXHRkZXBlbmRzIG9uIE5GU0RfVjQgXFx1MDAyNlxcdTAwMjYgU0VDVVJJVFlcXG5mcy9uZnNkL0tjb25maWctMTU0LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNjMtXFxuZnMvbmZzZC9LY29uZmlnOjE2NDpjb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuZnMvbmZzZC9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE2NjpcXHRkZXBlbmRzIG9uIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctMTY3LVxcdGRlZmF1bHQgblxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE3OS1cXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcXG5mcy9uZnNkL0tjb25maWctMTgxLVxcdGJvb2wgXFxcIlN1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1xcXCJcXG5mcy9uZnNkL0tjb25maWc6MTgyOlxcdGRlcGVuZHMgb24gTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy0xODMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5mcy9uZnNkL01ha2VmaWxlPTY9Y2NmbGFncy15ICs9IC1JJChzcmMpXFx0XFx0XFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xcbmZzL25mc2QvTWFrZWZpbGUtNy1cXG5mcy9uZnNkL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX05GU0QpXFx0Kz0gbmZzZC5vXFxuZnMvbmZzZC9NYWtlZmlsZS05LVxcbi0tXFxuZnMvbmZzZC9NYWtlZmlsZT0xMz1uZnNkLXkgXFx0XFx0XFx0Kz0gbmZzc3ZjLm8gbmZzY3RsLm8gbmZzZmgubyB2ZnMubyBcXFxcXFxuLS1cXG5mcy9uZnNkL01ha2VmaWxlLTE2LVxcdFxcdFxcdCAgIG5ldGxpbmsub1xcbmZzL25mc2QvTWFrZWZpbGU6MTc6bmZzZC0kKENPTkZJR19ORlNEX1YyKSArPSBuZnNwcm9jLm8gbmZzeGRyLm9cXG5mcy9uZnNkL01ha2VmaWxlOjE4Om5mc2QtJChDT05GSUdfTkZTRF9WMl9BQ0wpICs9IG5mczJhY2wub1xcbmZzL25mc2QvTWFrZWZpbGU6MTk6bmZzZC0kKENPTkZJR19ORlNEX1YzX0FDTCkgKz0gbmZzM2FjbC5vXFxuZnMvbmZzZC9NYWtlZmlsZToyMDpuZnNkLSQoQ09ORklHX05GU0RfVjQpXFx0Kz0gbmZzNHByb2MubyBuZnM0eGRyLm8gbmZzNHN0YXRlLm8gbmZzNGlkbWFwLm8gXFxcXFxcbmZzL25mc2QvTWFrZWZpbGUtMjEtXFx0XFx0XFx0ICAgbmZzNGFjbC5vIG5mczRjYWxsYmFjay5vIG5mczRyZWNvdmVyLm8gbmZzNHhkcl9nZW4ub1xcbmZzL25mc2QvTWFrZWZpbGU6MjI6bmZzZC0kKENPTkZJR19ORlNEX1BORlMpICs9IG5mczRsYXlvdXRzLm9cXG5mcy9uZnNkL01ha2VmaWxlOjIzOm5mc2QtJChDT05GSUdfTkZTRF9CTE9DS0xBWU9VVCkgKz0gYmxvY2tsYXlvdXQubyBibG9ja2xheW91dHhkci5vXFxuZnMvbmZzZC9NYWtlZmlsZToyNDpuZnNkLSQoQ09ORklHX05GU0RfU0NTSUxBWU9VVCkgKz0gYmxvY2tsYXlvdXQubyBibG9ja2xheW91dHhkci5vXFxuZnMvbmZzZC9NYWtlZmlsZToyNTpuZnNkLSQoQ09ORklHX05GU0RfRkxFWEZJTEVMQVlPVVQpICs9IGZsZXhmaWxlbGF5b3V0Lm8gZmxleGZpbGVsYXlvdXR4ZHIub1xcbmZzL25mc2QvTWFrZWZpbGUtMjYtbmZzZC0kKENPTkZJR19ORlNfTE9DQUxJTykgKz0gbG9jYWxpby5vXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtNS1cXG5mcy9uZnNkL2F0dHI0Lmg6NjojaWZuZGVmIF9MSU5VWF9ORlNEX0FUVFI0X0hcXG5mcy9uZnNkL2F0dHI0Lmg6NzojZGVmaW5lIF9MSU5VWF9ORlNEX0FUVFI0X0hcXG5mcy9uZnNkL2F0dHI0LmgtOC1cXG4tLVxcbmZzL25mc2QvYXR0cjQuaC0xMi0vKlxcbmZzL25mc2QvYXR0cjQuaDoxMzogKiBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIG5vdCBpbXBsZW1lbnRlZCBieSBORlNEOlxcbmZzL25mc2QvYXR0cjQuaC0xNC0gKiAgICBBUkNISVZFICAgICAgIChkZXByZWNhdGVkIGFueXdheSlcXG4tLVxcbmZzL25mc2QvYXR0cjQuaC0yMC0gKi9cXG5mcy9uZnNkL2F0dHI0Lmg6MjE6I2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuZnMvbmZzZC9hdHRyNC5oLTIyLShGQVRUUjRfV09SRDBfU1VQUE9SVEVEX0FUVFJTICAgfCBGQVRUUjRfV09SRDBfVFlQRSAgICAgICAgIHwgRkFUVFI0X1dPUkQwX0ZIX0VYUElSRV9UWVBFICAgXFxcXFxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oLTMyLVxcbmZzL25mc2QvYXR0cjQuaDozMzojZGVmaW5lIE5GU0Q0X1NVUFBPUlRFRF9BVFRSU19XT1JEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtMzQtKEZBVFRSNF9XT1JEMV9NT0RFICAgICAgICAgICAgICB8IEZBVFRSNF9XT1JEMV9OT19UUlVOQyAgICAgfCBGQVRUUjRfV09SRDFfTlVNTElOS1MgICAgICAgICBcXFxcXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtNDAtXFxuZnMvbmZzZC9hdHRyNC5oOjQxOiNkZWZpbmUgTkZTRDRfU1VQUE9SVEVEX0FUVFJTX1dPUkQyIDBcXG5mcy9uZnNkL2F0dHI0LmgtNDItXFxuZnMvbmZzZC9hdHRyNC5oLTQzLS8qIDQuMSAqL1xcbmZzL25mc2QvYXR0cjQuaDo0NDojaWZkZWYgQ09ORklHX05GU0RfUE5GU1xcbmZzL25mc2QvYXR0cjQuaDo0NTojZGVmaW5lIFBORlNEX1NVUFBPUlRFRF9BVFRSU19XT1JEMVxcdEZBVFRSNF9XT1JEMV9GU19MQVlPVVRfVFlQRVNcXG5mcy9uZnNkL2F0dHI0Lmg6NDY6I2RlZmluZSBQTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDIgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC00Ny0oRkFUVFI0X1dPUkQyX0xBWU9VVF9CTEtTSVpFXFx0fCBGQVRUUjRfV09SRDJfTEFZT1VUX1RZUEVTKVxcbmZzL25mc2QvYXR0cjQuaC00OC0jZWxzZVxcbmZzL25mc2QvYXR0cjQuaDo0OTojZGVmaW5lIFBORlNEX1NVUFBPUlRFRF9BVFRSU19XT1JEMVxcdDBcXG5mcy9uZnNkL2F0dHI0Lmg6NTA6I2RlZmluZSBQTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDJcXHQwXFxuZnMvbmZzZC9hdHRyNC5oOjUxOiNlbmRpZiAvKiBDT05GSUdfTkZTRF9QTkZTICovXFxuZnMvbmZzZC9hdHRyNC5oLTUyLVxcbmZzL25mc2QvYXR0cjQuaDo1MzojZGVmaW5lIE5GU0Q0XzFfU1VQUE9SVEVEX0FUVFJTX1dPUkQwIFxcXFxcXG5mcy9uZnNkL2F0dHI0Lmg6NTQ6XFx0TkZTRDRfU1VQUE9SVEVEX0FUVFJTX1dPUkQwXFxuZnMvbmZzZC9hdHRyNC5oLTU1LVxcbmZzL25mc2QvYXR0cjQuaDo1NjojZGVmaW5lIE5GU0Q0XzFfU1VQUE9SVEVEX0FUVFJTX1dPUkQxIFxcXFxcXG5mcy9uZnNkL2F0dHI0Lmg6NTc6XFx0KE5GU0Q0X1NVUFBPUlRFRF9BVFRSU19XT1JEMVxcdHwgUE5GU0RfU1VQUE9SVEVEX0FUVFJTX1dPUkQxKVxcbmZzL25mc2QvYXR0cjQuaC01OC1cXG5mcy9uZnNkL2F0dHI0Lmg6NTk6I2RlZmluZSBORlNENF8xX1NVUFBPUlRFRF9BVFRSU19XT1JEMiBcXFxcXFxuZnMvbmZzZC9hdHRyNC5oOjYwOlxcdChORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDJcXHR8IFBORlNEX1NVUFBPUlRFRF9BVFRSU19XT1JEMiB8IFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtNjEtXFx0IEZBVFRSNF9XT1JEMl9TVVBQQVRUUl9FWENMQ1JFQVQpXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtNjMtLyogNC4yICovXFxuZnMvbmZzZC9hdHRyNC5oOjY0OiNpZmRlZiBDT05GSUdfTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvYXR0cjQuaDo2NTojZGVmaW5lIE5GU0Q0XzJfU0VDVVJJVFlfQVRUUlNcXHRcXHRGQVRUUjRfV09SRDJfU0VDVVJJVFlfTEFCRUxcXG5mcy9uZnNkL2F0dHI0LmgtNjYtI2Vsc2VcXG5mcy9uZnNkL2F0dHI0Lmg6Njc6I2RlZmluZSBORlNENF8yX1NFQ1VSSVRZX0FUVFJTXFx0XFx0MFxcbmZzL25mc2QvYXR0cjQuaC02OC0jZW5kaWZcXG5mcy9uZnNkL2F0dHI0LmgtNjktXFxuZnMvbmZzZC9hdHRyNC5oOjcwOiNpZmRlZiBDT05GSUdfTkZTRF9WNF9QT1NJWF9BQ0xTXFxuZnMvbmZzZC9hdHRyNC5oOjcxOiNkZWZpbmUgTkZTRDRfMl9QT1NJWF9BQ0xfQVRUUlMgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC03Mi1cXHQoRkFUVFI0X1dPUkQyX0FDTF9UUlVFRk9STSB8IFxcXFxcXG4tLVxcbmZzL25mc2QvYXR0cjQuaC03Ni0jZWxzZVxcbmZzL25mc2QvYXR0cjQuaDo3NzojZGVmaW5lIE5GU0Q0XzJfUE9TSVhfQUNMX0FUVFJTXFx0XFx0MFxcbmZzL25mc2QvYXR0cjQuaC03OC0jZW5kaWZcXG5mcy9uZnNkL2F0dHI0LmgtNzktXFxuZnMvbmZzZC9hdHRyNC5oOjgwOiNkZWZpbmUgTkZTRDRfMl9TVVBQT1JURURfQVRUUlNfV09SRDIgXFxcXFxcbmZzL25mc2QvYXR0cjQuaDo4MTpcXHQoTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDIgfCBcXFxcXFxuZnMvbmZzZC9hdHRyNC5oLTgyLVxcdEZBVFRSNF9XT1JEMl9NT0RFX1VNQVNLIHwgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC04My1cXHRGQVRUUjRfV09SRDJfQ0xPTkVfQkxLU0laRSB8IFxcXFxcXG5mcy9uZnNkL2F0dHI0Lmg6ODQ6XFx0TkZTRDRfMl9TRUNVUklUWV9BVFRSUyB8IFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtODUtXFx0RkFUVFI0X1dPUkQyX1hBVFRSX1NVUFBPUlQgfCBcXFxcXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtODgtXFx0RkFUVFI0X1dPUkQyX09QRU5fQVJHVU1FTlRTIHwgXFxcXFxcbmZzL25mc2QvYXR0cjQuaDo4OTpcXHRORlNENF8yX1BPU0lYX0FDTF9BVFRSUylcXG5mcy9uZnNkL2F0dHI0LmgtOTAtXFxuZnMvbmZzZC9hdHRyNC5oLTkxLS8qIFRoZXNlIHdpbGwgcmV0dXJuIEVSUl9JTlZBTCBpZiBzcGVjaWZpZWQgaW4gR0VUQVRUUiBvciBSRUFERElSLiAqL1xcbmZzL25mc2QvYXR0cjQuaDo5MjojZGVmaW5lIE5GU0RfV1JJVEVPTkxZX0FUVFJTX1dPUkQxIFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtOTMtXFx0KEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgICB8IEZBVFRSNF9XT1JEMV9USU1FX01PRElGWV9TRVQpXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtOTktICovXFxuZnMvbmZzZC9hdHRyNC5oOjEwMDojZGVmaW5lIE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQwIFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtMTAxLVxcdChGQVRUUjRfV09SRDBfU0laRSB8IEZBVFRSNF9XT1JEMF9BQ0wpXFxuZnMvbmZzZC9hdHRyNC5oOjEwMjojZGVmaW5lIE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQxIFxcXFxcXG5mcy9uZnNkL2F0dHI0LmgtMTAzLVxcdChGQVRUUjRfV09SRDFfTU9ERSB8IEZBVFRSNF9XT1JEMV9PV05FUiB8IEZBVFRSNF9XT1JEMV9PV05FUl9HUk9VUCBcXFxcXFxuLS1cXG5mcy9uZnNkL2F0dHI0LmgtMTA1LVxcdHwgRkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZX1NFVClcXG5mcy9uZnNkL2F0dHI0Lmg6MTA2OiNpZmRlZiBDT05GSUdfTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvYXR0cjQuaC0xMDctI2RlZmluZSBNQVlCRV9GQVRUUjRfV09SRDJfU0VDVVJJVFlfTEFCRUwgXFxcXFxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oLTExMS0jZW5kaWZcXG5mcy9uZnNkL2F0dHI0Lmg6MTEyOiNpZmRlZiBDT05GSUdfTkZTRF9WNF9QT1NJWF9BQ0xTXFxuZnMvbmZzZC9hdHRyNC5oLTExMy0jZGVmaW5lIE1BWUJFX0ZBVFRSNF9XT1JEMl9QT1NJWF9BQ0xfQVRUUlMgXFxcXFxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oLTExNy0jZW5kaWZcXG5mcy9uZnNkL2F0dHI0Lmg6MTE4OiNkZWZpbmUgTkZTRF9XUklURUFCTEVfQVRUUlNfV09SRDIgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC0xMTktXFx0KEZBVFRSNF9XT1JEMl9NT0RFX1VNQVNLIFxcXFxcXG4tLVxcbmZzL25mc2QvYXR0cjQuaC0xMjUtXFxuZnMvbmZzZC9hdHRyNC5oOjEyNjojZGVmaW5lIE5GU0RfU1VQUEFUVFJfRVhDTENSRUFUX1dPUkQwIFxcXFxcXG5mcy9uZnNkL2F0dHI0Lmg6MTI3OlxcdE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQwXFxuZnMvbmZzZC9hdHRyNC5oLTEyOC0vKlxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oLTEzMS0gKi9cXG5mcy9uZnNkL2F0dHI0Lmg6MTMyOiNkZWZpbmUgTkZTRF9TVVBQQVRUUl9FWENMQ1JFQVRfV09SRDEgXFxcXFxcbmZzL25mc2QvYXR0cjQuaDoxMzM6XFx0KE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQxIFxcdTAwMjYgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC0xMzQtXFx0IH4oRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTX1NFVCB8IEZBVFRSNF9XT1JEMV9USU1FX01PRElGWV9TRVQpKVxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oLTE0My0gKi9cXG5mcy9uZnNkL2F0dHI0Lmg6MTQ0OiNkZWZpbmUgTkZTRF9TVVBQQVRUUl9FWENMQ1JFQVRfV09SRDIgXFxcXFxcbmZzL25mc2QvYXR0cjQuaDoxNDU6XFx0KE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQyIFxcdTAwMjYgXFxcXFxcbmZzL25mc2QvYXR0cjQuaC0xNDYtXFx0fihGQVRUUjRfV09SRDJfVElNRV9ERUxFR19BQ0NFU1MgfCBGQVRUUjRfV09SRDJfVElNRV9ERUxFR19NT0RJRlkpKVxcbi0tXFxuZnMvbmZzZC9hdHRyNC5oPTE1Nz1zdGF0aWMgaW5saW5lIGJvb2wgbmZzZF9hdHRyc19zdXBwb3J0ZWQodTMyIG1pbm9ydmVyc2lvbiwgY29uc3QgdTMyICpibXZhbClcXG4tLVxcbmZzL25mc2QvYXR0cjQuaC0xNjEtXFxuZnMvbmZzZC9hdHRyNC5oOjE2MjojZW5kaWYgLyogX0xJTlVYX05GU0RfQVRUUjRfSCAqL1xcbi0tXFxuZnMvbmZzZC9hdXRoLmgtNy1cXG5mcy9uZnNkL2F1dGguaDo4OiNpZm5kZWYgTElOVVhfTkZTRF9BVVRIX0hcXG5mcy9uZnNkL2F1dGguaDo5OiNkZWZpbmUgTElOVVhfTkZTRF9BVVRIX0hcXG5mcy9uZnNkL2F1dGguaC0xMC1cXG4tLVxcbmZzL25mc2QvYXV0aC5oPTIxPXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbmZzZF91c2VyX25hbWVzcGFjZShjb25zdCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTtcXG5mcy9uZnNkL2F1dGguaC0yMi1cXG5mcy9uZnNkL2F1dGguaDoyMzojZW5kaWYgLyogTElOVVhfTkZTRF9BVVRIX0ggKi9cXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0xNy1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MTg6I2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZXFx0TkZTRERCR19QTkZTXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTE5LVxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTE3OT1uZnNkNF9ibG9ja19jb21taXRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNkNF9sYXlvdXRjb21taXQgKmxjcCxcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0xOTktXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjIwMDojaWZkZWYgQ09ORklHX05GU0RfQkxPQ0tMQVlPVVRcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMjAxLXN0YXRpYyBpbnRcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYz0yNTI9Y29uc3Qgc3RydWN0IG5mc2Q0X2xheW91dF9vcHMgYmxfbGF5b3V0X29wcyA9IHtcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yNjktfTtcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MjcwOiNlbmRpZiAvKiBDT05GSUdfTkZTRF9CTE9DS0xBWU9VVCAqL1xcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yNzEtXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjI3MjojaWZkZWYgQ09ORklHX05GU0RfU0NTSUxBWU9VVFxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yNzMtXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjI3NDojZGVmaW5lIE5GU0RfTURTX1BSX0ZFTkNFRFxcdFhBX01BUktfMFxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0yNzUtXFxuLS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9Mjg0PXN0YXRpYyBpbmxpbmUgaW50IG5mc2Q0X3Njc2lfZmVuY2VfaW5zZXJ0KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwLFxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTI5Mi1cXHRpZiAocmV0ID09IC1FQlVTWSkge1xcbmZzL25mc2QvYmxvY2tsYXlvdXQuYzoyOTM6XFx0XFx0X194YV9jbGVhcl9tYXJrKHhhLCBkZXZpY2UsIE5GU0RfTURTX1BSX0ZFTkNFRCk7XFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTI5NC1cXHRcXHRyZXQgPSAwO1xcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTMwMT1zdGF0aWMgaW5saW5lIGJvb2wgbmZzZDRfc2NzaV9mZW5jZV9zZXQoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIGRldl90IGRldmljZSlcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0zMDYtXFx0eGFfbG9jayh4YSk7XFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjMwNzpcXHRza2lwID0geGFfZ2V0X21hcmsoeGEsIGRldmljZSwgTkZTRF9NRFNfUFJfRkVOQ0VEKTtcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzA4LVxcdGlmICghc2tpcClcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MzA5OlxcdFxcdF9feGFfc2V0X21hcmsoeGEsIGRldmljZSwgTkZTRF9NRFNfUFJfRkVOQ0VEKTtcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzEwLVxcdHhhX3VubG9jayh4YSk7XFxuLS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9MzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnNkNF9zY3NpX2ZlbmNlX2NsZWFyKHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwLCBkZXZfdCBkZXZpY2UpXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTMxNS17XFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjMxNjpcXHR4YV9jbGVhcl9tYXJrKFxcdTAwMjZjbHAtXFx1MDAzZWNsX2Rldl9mZW5jZXMsIGRldmljZSwgTkZTRF9NRFNfUFJfRkVOQ0VEKTtcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzE3LX1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzE4LVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYzozMTk6I2RlZmluZSBORlNEX01EU19QUl9LRVlcXHRcXHQweDAxMDAwMDAwMDAwMDAwMDBVTExcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzIwLVxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jPTM1Nj1uZnNkNF9ibG9ja19nZXRfZGV2aWNlX2luZm9fc2NzaShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTM5MS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6MzkyOlxcdHJldCA9IG9wcy1cXHUwMDNlcHJfcmVnaXN0ZXIoc2ItXFx1MDAzZXNfYmRldiwgMCwgTkZTRF9NRFNfUFJfS0VZLCB0cnVlKTtcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmMtMzkzLVxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy0zOTgtXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjM5OTpcXHRyZXQgPSBvcHMtXFx1MDAzZXByX3Jlc2VydmUoc2ItXFx1MDAzZXNfYmRldiwgTkZTRF9NRFNfUFJfS0VZLFxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00MDAtXFx0XFx0XFx0UFJfRVhDTFVTSVZFX0FDQ0VTU19SRUdfT05MWSwgMCk7XFxuLS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9NDI2PW5mc2Q0X3Njc2lfcHJvY19sYXlvdXRjb21taXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHN2Y19ycXN0ICpycXN0cCxcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00NDYtICogYmxvY2sgZGV2aWNlLiBJZiBhIGZlbmNlIG9wZXJhdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3YWl0IGZvclxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYzo0NDc6ICogaXQgdG8gY29tcGxldGUgYmVmb3JlIGNoZWNraW5nIHRoZSBORlNEX01EU19QUl9GRU5DRUQgZmxhZy4gT25jZSB0aGVcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM6NDQ4OiAqIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSwgY2hlY2sgdGhlIGZsYWcuIElmIE5GU0RfTURTX1BSX0ZFTkNFRCBpcyBzZXQsXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTQ0OS0gKiB1cGRhdGUgdGhlIGxheW91dCBzdGF0ZWlkIGJ5IHNldHRpbmcgdGhlIGxzX2ZlbmNlZCBmbGFnIHRvIGluZGljYXRlXFxuLS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0LmM9NDU5PW5mc2Q0X3Njc2lfZmVuY2VfY2xpZW50KHN0cnVjdCBuZnM0X2xheW91dF9zdGF0ZWlkICpscywgc3RydWN0IG5mc2RfZmlsZSAqZmlsZSlcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00NzEtXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jOjQ3MjpcXHRzdGF0dXMgPSBiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2Vmb3BzLVxcdTAwM2Vwcl9vcHMtXFx1MDAzZXByX3ByZWVtcHQoYmRldiwgTkZTRF9NRFNfUFJfS0VZLFxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYy00NzMtXFx0XFx0XFx0bmZzZDRfc2NzaV9wcl9rZXkoY2xwKSxcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXQuYz01MDc9Y29uc3Qgc3RydWN0IG5mc2Q0X2xheW91dF9vcHMgc2NzaV9sYXlvdXRfb3BzID0ge1xcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dC5jLTUyNS19O1xcbmZzL25mc2QvYmxvY2tsYXlvdXQuYzo1MjY6I2VuZGlmIC8qIENPTkZJR19ORlNEX1NDU0lMQVlPVVQgKi9cXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuYy0xMy1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0eGRyLmM6MTQ6I2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZXFx0TkZTRERCR19QTkZTXFxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5jLTE1LVxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0eGRyLmg6MjojaWZuZGVmIF9ORlNEX0JMT0NLTEFZT1VUWERSX0hcXG5mcy9uZnNkL2Jsb2NrbGF5b3V0eGRyLmg6MzojZGVmaW5lIF9ORlNEX0JMT0NLTEFZT1VUWERSX0ggMVxcbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuaC00LVxcbi0tXFxuZnMvbmZzZC9ibG9ja2xheW91dHhkci5oPTczPV9fYmUzMiBuZnNkNF9zY3NpX2RlY29kZV9sYXlvdXR1cGRhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkcixcXG4tLVxcbmZzL25mc2QvYmxvY2tsYXlvdXR4ZHIuaC03NS1cXG5mcy9uZnNkL2Jsb2NrbGF5b3V0eGRyLmg6NzY6I2VuZGlmIC8qIF9ORlNEX0JMT0NLTEFZT1VUWERSX0ggKi9cXG4tLVxcbmZzL25mc2QvY3VycmVudF9zdGF0ZWlkLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmZzL25mc2QvY3VycmVudF9zdGF0ZWlkLmg6MjojaWZuZGVmIF9ORlNENF9DVVJSRU5UX1NUQVRFX0hcXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oOjM6I2RlZmluZSBfTkZTRDRfQ1VSUkVOVF9TVEFURV9IXFxuZnMvbmZzZC9jdXJyZW50X3N0YXRlaWQuaC00LVxcbi0tXFxuZnMvbmZzZC9jdXJyZW50X3N0YXRlaWQuaD0zOD1leHRlcm4gdm9pZCBuZnNkNF9nZXRfd3JpdGVzdGF0ZWlkKHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLFxcbi0tXFxuZnMvbmZzZC9jdXJyZW50X3N0YXRlaWQuaC00MC1cXG5mcy9uZnNkL2N1cnJlbnRfc3RhdGVpZC5oOjQxOiNlbmRpZiAgIC8qIF9ORlNENF9DVVJSRU5UX1NUQVRFX0ggKi9cXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jPTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKm5mc2RfdG9wX2RpciBfX3JlYWRfbW9zdGx5O1xcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTctICogYWxsb3dlZCkuIFRoaXMgc2V0dGluZyB0YWtlcyBpbW1lZGlhdGUgZWZmZWN0IGZvciBhbGwgTkZTXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6MTg6ICogdmVyc2lvbnMsIGFsbCBleHBvcnRzLCBhbmQgaW4gYWxsIE5GU0QgbmV0IG5hbWVzcGFjZXMuXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTktICovXFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYz0yNz1zdGF0aWMgaW50IG5mc2RfZHNyX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMzMtXFx0XFx0ICovXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6MzQ6XFx0XFx0bmZzZF9pb19jYWNoZV9yZWFkID0gTkZTRF9JT19CVUZGRVJFRDtcXG5mcy9uZnNkL2RlYnVnZnMuYy0zNS1cXHR9XFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYz0zOT1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUobmZzZF9kc3JfZm9wcywgbmZzZF9kc3JfZ2V0LCBuZnNkX2Rzcl9zZXQsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jLTQ5LSAqIFRoaXMgc2V0dGluZyB0YWtlcyBpbW1lZGlhdGUgZWZmZWN0IGZvciBhbGwgTkZTIHZlcnNpb25zLFxcbmZzL25mc2QvZGVidWdmcy5jOjUwOiAqIGFsbCBleHBvcnRzLCBhbmQgaW4gYWxsIE5GU0QgbmV0IG5hbWVzcGFjZXMuXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNTEtICovXFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYz01OT1zdGF0aWMgaW50IG5mc2RfaW9fY2FjaGVfcmVhZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jLTYzLVxcdHN3aXRjaCAodmFsKSB7XFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6NjQ6XFx0Y2FzZSBORlNEX0lPX0JVRkZFUkVEOlxcbmZzL25mc2QvZGVidWdmcy5jOjY1OlxcdFxcdG5mc2RfaW9fY2FjaGVfcmVhZCA9IE5GU0RfSU9fQlVGRkVSRUQ7XFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNjYtXFx0XFx0YnJlYWs7XFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6Njc6XFx0Y2FzZSBORlNEX0lPX0RPTlRDQUNIRTpcXG5mcy9uZnNkL2RlYnVnZnMuYzo2ODpcXHRjYXNlIE5GU0RfSU9fRElSRUNUOlxcbmZzL25mc2QvZGVidWdmcy5jLTY5LVxcdFxcdC8qXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtNzAtXFx0XFx0ICogTXVzdCBkaXNhYmxlIHNwbGljZV9yZWFkIHdoZW4gZW5hYmxpbmdcXG5mcy9uZnNkL2RlYnVnZnMuYzo3MTpcXHRcXHQgKiBORlNEX0lPX0RPTlRDQUNIRS5cXG5mcy9uZnNkL2RlYnVnZnMuYy03Mi1cXHRcXHQgKi9cXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jPTg0PURFRklORV9ERUJVR0ZTX0FUVFJJQlVURShuZnNkX2lvX2NhY2hlX3JlYWRfZm9wcywgbmZzZF9pb19jYWNoZV9yZWFkX2dldCxcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jLTk0LSAqIFRoaXMgc2V0dGluZyB0YWtlcyBpbW1lZGlhdGUgZWZmZWN0IGZvciBhbGwgTkZTIHZlcnNpb25zLFxcbmZzL25mc2QvZGVidWdmcy5jOjk1OiAqIGFsbCBleHBvcnRzLCBhbmQgaW4gYWxsIE5GU0QgbmV0IG5hbWVzcGFjZXMuXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtOTYtICovXFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYz0xMDQ9c3RhdGljIGludCBuZnNkX2lvX2NhY2hlX3dyaXRlX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtMTA4LVxcdHN3aXRjaCAodmFsKSB7XFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6MTA5OlxcdGNhc2UgTkZTRF9JT19CVUZGRVJFRDpcXG5mcy9uZnNkL2RlYnVnZnMuYzoxMTA6XFx0Y2FzZSBORlNEX0lPX0RPTlRDQUNIRTpcXG5mcy9uZnNkL2RlYnVnZnMuYzoxMTE6XFx0Y2FzZSBORlNEX0lPX0RJUkVDVDpcXG5mcy9uZnNkL2RlYnVnZnMuYy0xMTItXFx0XFx0bmZzZF9pb19jYWNoZV93cml0ZSA9IHZhbDtcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jPTEzMT12b2lkIG5mc2RfZGVidWdmc19pbml0KHZvaWQpXFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYy0xNDItXFx0XFx0XFx0ICAgIFxcdTAwMjZuZnNkX2lvX2NhY2hlX3dyaXRlX2ZvcHMpO1xcbmZzL25mc2QvZGVidWdmcy5jOjE0MzojaWZkZWYgQ09ORklHX05GU0RfVjRcXG5mcy9uZnNkL2RlYnVnZnMuYy0xNDQtXFx0ZGVidWdmc19jcmVhdGVfYm9vbChcXFwiZGVsZWdhdGVkX3RpbWVzdGFtcHNcXFwiLCAwNjQ0LCBuZnNkX3RvcF9kaXIsXFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTMwLVxcbmZzL25mc2QvZXhwb3J0LmM6MzE6I2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZXFx0TkZTRERCR19FWFBPUlRcXG5mcy9uZnNkL2V4cG9ydC5jLTMyLVxcbi0tXFxuZnMvbmZzZC9leHBvcnQuYz0yNTg9c3RhdGljIGludCBleHBrZXlfbm90aWZ5KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaClcXG5mcy9uZnNkL2V4cG9ydC5jLTI1OS17XFxuZnMvbmZzZC9leHBvcnQuYzoyNjA6XFx0cmV0dXJuIG5mc2RfY2FjaGVfbm90aWZ5KGNkLCBoLCBORlNEX0NBQ0hFX1RZUEVfRVhQS0VZKTtcXG5mcy9uZnNkL2V4cG9ydC5jLTI2MS19XFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jPTMzND1pbnQgbmZzZF9ubF9leHBrZXlfZ2V0X3JlcXNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTM3Ni1cXHRcXHRcXHQgIGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgXFx1MDAyNm5mc2RfbmxfZmFtaWx5LFxcbmZzL25mc2QvZXhwb3J0LmM6Mzc3OlxcdFxcdFxcdCAgTkxNX0ZfTVVMVEksIE5GU0RfQ01EX0VYUEtFWV9HRVRfUkVRUyk7XFxuZnMvbmZzZC9leHBvcnQuYy0zNzgtXFx0aWYgKCFoZHIpIHtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtMzg5LVxcbmZzL25mc2QvZXhwb3J0LmM6MzkwOlxcdFxcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIE5GU0RfQV9FWFBLRVlfUkVRU19SRVFVRVNUUyk7XFxuZnMvbmZzZC9leHBvcnQuYy0zOTEtXFx0XFx0aWYgKCFuZXN0KVxcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy0zOTMtXFxuZnMvbmZzZC9leHBvcnQuYzozOTQ6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkZTRF9BX0VYUEtFWV9TRVFOTyxcXG5mcy9uZnNkL2V4cG9ydC5jLTM5NS1cXHRcXHRcXHRcXHQgICAgICBzZXFub3NbaV0sIDApIHx8XFxuZnMvbmZzZC9leHBvcnQuYzozOTY6XFx0XFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgTkZTRF9BX0VYUEtFWV9DTElFTlQsXFxuZnMvbmZzZC9leHBvcnQuYy0zOTctXFx0XFx0XFx0XFx0ICAgZWstXFx1MDAzZWVrX2NsaWVudC1cXHUwMDNlbmFtZSkgfHxcXG5mcy9uZnNkL2V4cG9ydC5jOjM5ODpcXHRcXHQgICAgbmxhX3B1dF91OChza2IsIE5GU0RfQV9FWFBLRVlfRlNJRFRZUEUsXFxuZnMvbmZzZC9leHBvcnQuYy0zOTktXFx0XFx0XFx0ICAgICAgIGVrLVxcdTAwM2Vla19mc2lkdHlwZSkgfHxcXG5mcy9uZnNkL2V4cG9ydC5jOjQwMDpcXHRcXHQgICAgbmxhX3B1dChza2IsIE5GU0RfQV9FWFBLRVlfRlNJRCxcXG5mcy9uZnNkL2V4cG9ydC5jLTQwMS1cXHRcXHRcXHQgICAga2V5X2xlbihlay1cXHUwMDNlZWtfZnNpZHR5cGUpLCBlay1cXHUwMDNlZWtfZnNpZCkpIHtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmM9NDQwPXN0YXRpYyBpbnQgbmZzZF9ubF9wYXJzZV9vbmVfZXhwa2V5KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLFxcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy00NDIte1xcbmZzL25mc2QvZXhwb3J0LmM6NDQzOlxcdHN0cnVjdCBubGF0dHIgKnRiW05GU0RfQV9FWFBLRVlfUEFUSCArIDFdO1xcbmZzL25mc2QvZXhwb3J0LmMtNDQ0LVxcdHN0cnVjdCBhdXRoX2RvbWFpbiAqZG9tID0gTlVMTDtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDUxLVxcbmZzL25mc2QvZXhwb3J0LmM6NDUyOlxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5GU0RfQV9FWFBLRVlfUEFUSCwgYXR0cixcXG5mcy9uZnNkL2V4cG9ydC5jLTQ1My1cXHRcXHRcXHQgICAgICAgbmZzZF9leHBrZXlfbmxfcG9saWN5LCBOVUxMKTtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDU3LVxcdC8qIGNsaWVudCAocmVxdWlyZWQpICovXFxuZnMvbmZzZC9leHBvcnQuYzo0NTg6XFx0aWYgKCF0YltORlNEX0FfRVhQS0VZX0NMSUVOVF0pXFxuZnMvbmZzZC9leHBvcnQuYy00NTktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZnMvbmZzZC9leHBvcnQuYy00NjAtXFxuZnMvbmZzZC9leHBvcnQuYzo0NjE6XFx0ZG9tID0gYXV0aF9kb21haW5fZmluZChubGFfZGF0YSh0YltORlNEX0FfRVhQS0VZX0NMSUVOVF0pKTtcXG5mcy9uZnNkL2V4cG9ydC5jLTQ2Mi1cXHRpZiAoIWRvbSlcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDY1LVxcdC8qIGZzaWR0eXBlIChyZXF1aXJlZCkgKi9cXG5mcy9uZnNkL2V4cG9ydC5jOjQ2NjpcXHRpZiAoIXRiW05GU0RfQV9FWFBLRVlfRlNJRFRZUEVdKSB7XFxuZnMvbmZzZC9leHBvcnQuYy00NjctXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDY5LVxcdH1cXG5mcy9uZnNkL2V4cG9ydC5jOjQ3MDpcXHRmc2lkdHlwZSA9IG5sYV9nZXRfdTgodGJbTkZTRF9BX0VYUEtFWV9GU0lEVFlQRV0pO1xcbmZzL25mc2QvZXhwb3J0LmMtNDcxLVxcdGlmIChrZXlfbGVuKGZzaWR0eXBlKSA9PSAwKSB7XFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTQ3Ni1cXHQvKiBmc2lkIChyZXF1aXJlZCkgKi9cXG5mcy9uZnNkL2V4cG9ydC5jOjQ3NzpcXHRpZiAoIXRiW05GU0RfQV9FWFBLRVlfRlNJRF0pIHtcXG5mcy9uZnNkL2V4cG9ydC5jLTQ3OC1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy00ODAtXFx0fVxcbmZzL25mc2QvZXhwb3J0LmM6NDgxOlxcdGZzaWRfbGVuID0gbmxhX2xlbih0YltORlNEX0FfRVhQS0VZX0ZTSURdKTtcXG5mcy9uZnNkL2V4cG9ydC5jLTQ4Mi1cXHRpZiAoZnNpZF9sZW4gIT0ga2V5X2xlbihmc2lkdHlwZSkpIHtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDg3LVxcdC8qIGV4cGlyeSAocmVxdWlyZWQsIHdhbGxjbG9jayBzZWNvbmRzKSAqL1xcbmZzL25mc2QvZXhwb3J0LmM6NDg4OlxcdGlmICghdGJbTkZTRF9BX0VYUEtFWV9FWFBJUlldKSB7XFxuZnMvbmZzZC9leHBvcnQuYy00ODktXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNDk0LVxcdGdldGJvb3R0aW1lNjQoXFx1MDAyNmJvb3QpO1xcbmZzL25mc2QvZXhwb3J0LmM6NDk1OlxcdGtleS5oLmV4cGlyeV90aW1lID0gbmxhX2dldF91NjQodGJbTkZTRF9BX0VYUEtFWV9FWFBJUlldKSAtXFxuZnMvbmZzZC9leHBvcnQuYy00OTYtXFx0XFx0XFx0ICAgIGJvb3QudHZfc2VjO1xcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy00OTgtXFx0a2V5LmVrX2ZzaWR0eXBlID0gZnNpZHR5cGU7XFxuZnMvbmZzZC9leHBvcnQuYzo0OTk6XFx0bWVtY3B5KGtleS5la19mc2lkLCBubGFfZGF0YSh0YltORlNEX0FfRVhQS0VZX0ZTSURdKSwgZnNpZF9sZW4pO1xcbmZzL25mc2QvZXhwb3J0LmMtNTAwLVxcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy01MDYtXFxuZnMvbmZzZC9leHBvcnQuYzo1MDc6XFx0aWYgKHRiW05GU0RfQV9FWFBLRVlfTkVHQVRJVkVdKSB7XFxuZnMvbmZzZC9leHBvcnQuYy01MDgtXFx0XFx0c2V0X2JpdChDQUNIRV9ORUdBVElWRSwgXFx1MDAyNmtleS5oLmZsYWdzKTtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNTEzLVxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuZnMvbmZzZC9leHBvcnQuYzo1MTQ6XFx0fSBlbHNlIGlmICh0YltORlNEX0FfRVhQS0VZX1BBVEhdKSB7XFxuZnMvbmZzZC9leHBvcnQuYzo1MTU6XFx0XFx0ZXJyID0ga2Vybl9wYXRoKG5sYV9kYXRhKHRiW05GU0RfQV9FWFBLRVlfUEFUSF0pLCAwLFxcbmZzL25mc2QvZXhwb3J0LmMtNTE2LVxcdFxcdFxcdFxcdFxcdTAwMjZrZXkuZWtfcGF0aCk7XFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTUyMS1cXHRcXHRcXHR0cmFjZV9uZnNkX2V4cGtleV91cGRhdGUoZWssXFxuZnMvbmZzZC9leHBvcnQuYzo1MjI6XFx0XFx0XFx0XFx0XFx0bmxhX2RhdGEodGJbTkZTRF9BX0VYUEtFWV9QQVRIXSkpO1xcbmZzL25mc2QvZXhwb3J0LmMtNTIzLVxcdFxcdGVsc2VcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmM9NTUxPWludCBuZnNkX25sX2V4cGtleV9zZXRfcmVxc19kb2l0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTU2OC1cXG5mcy9uZnNkL2V4cG9ydC5jOjU2OTpcXHRubG1zZ19mb3JfZWFjaF9hdHRyX3R5cGUoYXR0ciwgTkZTRF9BX0VYUEtFWV9SRVFTX1JFUVVFU1RTLFxcbmZzL25mc2QvZXhwb3J0LmMtNTcwLVxcdFxcdFxcdFxcdCBpbmZvLVxcdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkge1xcbi0tXFxuZnMvbmZzZC9leHBvcnQuYz02NjA9aW50IG5mc2Rfbmxfc3ZjX2V4cG9ydF9nZXRfcmVxc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNzA0LVxcdFxcdFxcdCAgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBcXHUwMDI2bmZzZF9ubF9mYW1pbHksXFxuZnMvbmZzZC9leHBvcnQuYzo3MDU6XFx0XFx0XFx0ICBOTE1fRl9NVUxUSSwgTkZTRF9DTURfU1ZDX0VYUE9SVF9HRVRfUkVRUyk7XFxuZnMvbmZzZC9leHBvcnQuYy03MDYtXFx0aWYgKCFoZHIpIHtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNzIzLVxcdFxcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsXFxuZnMvbmZzZC9leHBvcnQuYzo3MjQ6XFx0XFx0XFx0XFx0ICAgICAgTkZTRF9BX1NWQ19FWFBPUlRfUkVRU19SRVFVRVNUUyk7XFxuZnMvbmZzZC9leHBvcnQuYy03MjUtXFx0XFx0aWYgKCFuZXN0KVxcbi0tXFxuZnMvbmZzZC9leHBvcnQuYy03MjctXFxuZnMvbmZzZC9leHBvcnQuYzo3Mjg6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkZTRF9BX1NWQ19FWFBPUlRfU0VRTk8sXFxuZnMvbmZzZC9leHBvcnQuYy03MjktXFx0XFx0XFx0XFx0ICAgICAgc2Vxbm9zW2ldLCAwKSB8fFxcbmZzL25mc2QvZXhwb3J0LmM6NzMwOlxcdFxcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIE5GU0RfQV9TVkNfRVhQT1JUX0NMSUVOVCxcXG5mcy9uZnNkL2V4cG9ydC5jLTczMS1cXHRcXHRcXHRcXHQgICBleHAtXFx1MDAzZWV4X2NsaWVudC1cXHUwMDNlbmFtZSkgfHxcXG5mcy9uZnNkL2V4cG9ydC5jOjczMjpcXHRcXHQgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBORlNEX0FfU1ZDX0VYUE9SVF9QQVRILCBwdGgpKSB7XFxuZnMvbmZzZC9leHBvcnQuYy03MzMtXFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTc2My0gKiBuZnNkX25sX3BhcnNlX2ZzbG9jYXRpb25zIC0gcGFyc2UgZnNsb2NhdGlvbnMgZnJvbSBuZXRsaW5rXFxuZnMvbmZzZC9leHBvcnQuYzo3NjQ6ICogQGF0dHI6IE5GU0RfQV9TVkNfRVhQT1JUX0ZTTE9DQVRJT05TIG5lc3RlZCBhdHRyaWJ1dGVcXG5mcy9uZnNkL2V4cG9ydC5jLTc2NS0gKiBAZnNsb2M6IGZzbG9jYXRpb25zIHN0cnVjdCB0byBmaWxsIGluXFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jPTc2OT1zdGF0aWMgaW50IG5mc2RfbmxfcGFyc2VfZnNsb2NhdGlvbnMoc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtNzc5LVxcdC8qIENvdW50IGxvY2F0aW9ucyBmaXJzdCAqL1xcbmZzL25mc2QvZXhwb3J0LmM6NzgwOlxcdG5sYV9mb3JfZWFjaF9uZXN0ZWRfdHlwZShsb2NfYXR0ciwgTkZTRF9BX0ZTTE9DQVRJT05TX0xPQ0FUSU9OLFxcbmZzL25mc2QvZXhwb3J0LmMtNzgxLVxcdFxcdFxcdFxcdCBhdHRyLCByZW0pXFxuLS1cXG5mcy9uZnNkL2V4cG9ydC5jLTc5My1cXG5mcy9uZnNkL2V4cG9ydC5jOjc5NDpcXHRubGFfZm9yX2VhY2hfbmVzdGVkX3R5cGUobG9jX2F0dHIsIE5GU0RfQV9GU0xPQ0FUSU9OU19MT0NBVElPTixcXG5mcy9uZnNkL2V4cG9ydC5jLTc5NS1cXHRcXHRcXHRcXHQgYXR0ciwgcmVtKSB7XFxuZnMvbmZzZC9leHBvcnQuYzo3OTY6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTkZTRF9BX0ZTTE9DQVRJT05fUEFUSCArIDFdO1xcbmZzL25mc2QvZXhwb3J0LmMtNzk3LVxcdFxcdHN0cnVjdCBuZnNkNF9mc19sb2NhdGlvbiAqbG9jO1xcbmZzL25mc2QvZXhwb3J0LmMtNzk4LVxcbmZzL25mc2QvZXhwb3J0LmM6Nzk5OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5GU0RfQV9GU0xPQ0FUSU9OX1BBVEgsIGxvY19hdHRyLFxcbmZzL25mc2QvZXhwb3J0LmMtODAwLVxcdFxcdFxcdFxcdCAgICAgICBuZnNkX2ZzbG9jYXRpb25fbmxfcG9saWN5LCBOVUxMKTtcXG4tLVxcbmZzL25mc2QvZXhwb3J0LmMtODAzLVxcbmZzL25mc2QvZXhwb3J0LmM6ODA0OlxcdFxcdGlmICghdGJbTkZTRF9BX0ZTTE9DQVRJT05fSE9TVF0gfHxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MDkuMDM5Mzc4MTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNjE5MjIwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDpcblxuKipJbnZlc3RpZ2F0aW5nIFNVTlJQQyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB0cmFjayBkb3duIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgU1VOUlBDYC4gSSBrbm93IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHVzZXMgS2NvbmZpZyBmaWxlcyB0byBtYW5hZ2UgdGhlc2UsIHNvIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gQW5kIGlmIEkgd2FudCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgaG93IGBTVU5SUENgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwsIHRoZSBtb3N0IGxvZ2ljYWwgZmlyc3Qgc3RvcCBpcyBwcm9iYWJseSB0aGUgYG5ldC9zdW5ycGMvS2NvbmZpZ2AgZmlsZS4gSSdtIHRoaW5raW5nIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIG1haW4gZGVjbGFyYXRpb24gb3IgcGVyaGFwcyBhIHRvcC1sZXZlbCBhZ2dyZWdhdGlvbiBvZiBhbGwgdGhlIGBTVU5SUENgLXJlbGF0ZWQgY29uZmlnIHN5bWJvbHMuIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY3NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjEyLjIwMTMwMjg1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMDQxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNVTlJQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcXG5uZXQvc3VucnBjL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY6Y29uZmlnIFNVTlJQQ19HU1NcXG5uZXQvc3VucnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTEwLVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXFxubmV0L3N1bnJwYy9LY29uZmlnLTEyLVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xNC1cXG5uZXQvc3VucnBjL0tjb25maWc6MTU6Y29uZmlnIFNVTlJQQ19TV0FQXFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMzUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcXG5uZXQvc3VucnBjL0tjb25maWctMzctXFx0Ym9vbCBcXFwiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNDktXFxubmV0L3N1bnJwYy9LY29uZmlnOjUwOmNvbmZpZyBTVU5SUENfREVCVUdfVFJBQ0VcXG5uZXQvc3VucnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUlBDOiBTZW5kIGRmcHJpbnRrKCkgb3V0cHV0IHRvIHRoZSB0cmFjZSBidWZmZXJcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNjMtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY0OmNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXFxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVxcdHRyaXN0YXRlIFxcXCJSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MTIuMjQ5NTEyODUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MjI5NTI4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgTkZTZCBhbmQgU1VOUlBDIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gYENPTkZJR19ORlNEYCBhbmQgYENPTkZJR19TVU5SUENgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgbGlrZSBlbmFibGluZyB0aGUgTkZTIGRhZW1vbiAoYENPTkZJR19ORlNEYCkgbWlnaHQgYXV0b21hdGljYWxseSBwdWxsIGluIFNVTlJQQywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoZSBxdWVzdGlvbiBpcywgaXMgYENPTkZJR19TVU5SUENgIGEgZGVwZW5kZW5jeSBvZiBgQ09ORklHX05GU0RgLCBvciBpcyBpdCBlbmFibGVkIHNvbWUgb3RoZXIgd2F5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gYmUgc3VyZS4gVGltZSB0byBkaWcgaW50byBgZnMvbmZzZC9LY29uZmlnYCBhbmQgYG5ldC9zdW5ycGMvS2NvbmZpZ2AgdG8gc2VlIGhvdyB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIHN0cnVjdHVyZWQgYW5kIGhvdyBgQ09ORklHX1NVTlJQQ2AgaXMgYWN0dWFsbHkgZW5hYmxlZC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgY2xhcmlmeSB0aGUgY29udHJvbCBmbG93IGFuZCBkZXBlbmRlbmNpZXMgSSdtIGludGVyZXN0ZWQgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mjg3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MTQuODcyNDY4NzA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTc4MDM2MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdC4qU1VOUlBDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MzgwPWNvbmZpZyBORlNfQ09NTU9OX0xPQ0FMSU9fU1VQUE9SVFxcbi0tXFxuZnMvS2NvbmZpZy0zODQtXFx0ZGVmYXVsdCBtIGlmIE5GU0Q9bSBcXHUwMDI2XFx1MDAyNiBORlNfRlM9bVxcbmZzL0tjb25maWc6Mzg1OlxcdHNlbGVjdCBTVU5SUENcXG5mcy9LY29uZmlnLTM4Ni1cXG4tLVxcbmZzL25mcy9LY29uZmlnPTI9Y29uZmlnIE5GU19GU1xcbi0tXFxuZnMvbmZzL0tjb25maWctNi1cXHRzZWxlY3QgTE9DS0RcXG5mcy9uZnMvS2NvbmZpZzo3OlxcdHNlbGVjdCBTVU5SUENcXG5mcy9uZnMvS2NvbmZpZy04LVxcdHNlbGVjdCBORlNfQ09NTU9OXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz03Nz1jb25maWcgTkZTX1Y0XFxuLS1cXG5mcy9uZnMvS2NvbmZpZy04MC1cXHRzZWxlY3QgS0VZU1xcbmZzL25mcy9LY29uZmlnOjgxOlxcdHNlbGVjdCBTVU5SUENfQkFDS0NIQU5ORUxcXG5mcy9uZnMvS2NvbmZpZy04Mi1cXHRoZWxwXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz05Mj1jb25maWcgTkZTX1NXQVBcXG4tLVxcbmZzL25mcy9LY29uZmlnLTk1LVxcdGRlcGVuZHMgb24gTkZTX0ZTIFxcdTAwMjZcXHUwMDI2IFNXQVBcXG5mcy9uZnMvS2NvbmZpZzo5NjpcXHRzZWxlY3QgU1VOUlBDX1NXQVBcXG5mcy9uZnMvS2NvbmZpZy05Ny1cXHRoZWxwXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9Mj1jb25maWcgTkZTRFxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTExLVxcdHNlbGVjdCBMT0NLRFxcbmZzL25mc2QvS2NvbmZpZzoxMjpcXHRzZWxlY3QgU1VOUlBDXFxuZnMvbmZzZC9LY29uZmlnLTEzLVxcdHNlbGVjdCBFWFBPUlRGU1xcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0yMi1cXHRkZWZhdWx0IHlcXG5uZXQvc3VucnBjL0tjb25maWc6MjM6XFx0c2VsZWN0IFNVTlJQQ19HU1NcXG5uZXQvc3VucnBjL0tjb25maWctMjQtXFx0c2VsZWN0IENSWVBUT19LUkI1XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjE3LjQ1MDUwOTg0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ4NTMxNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTkZTIFNlcnZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfTkZTRGAgYmVpbmcgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBicmluZ3MgaW4gYENPTkZJR19TVU5SUENgLiBJIGtub3cgdGhpcyBtZWFucyB0aGUgTmV0d29yayBGaWxlIFN5c3RlbSBEYWVtb24gaXMgcmVsaWFudCBvbiB0aGUgU3VuIFJlbW90ZSBQcm9jZWR1cmUgQ2FsbCBzeXN0ZW0uIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE5GUyBzZXJ2ZXIgaXMgYnVpbHQgYW5kIGhvdyB0aG9zZSBSUEMgY29tcG9uZW50cyBhcmUgbGlua2VkLiBUbyBkbyB0aGF0LCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBuZXQvc3VucnBjL01ha2VmaWxlYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBidWlsZCBydWxlcyBmb3IgY29yZSBvYmplY3RzLCBzcGVjaWZpY2FsbHkgdGhlIGNyZWF0aW9uIG9mIGBzdmNzb2NrLm9gLCB3aGljaCBJIGV4cGVjdCB3aWxsIGJlIGNydWNpYWwgZm9yIHRoZSBuZXR3b3JrIHNvY2tldCBtYW5hZ2VtZW50IHVzZWQgYnkgdGhlIHNlcnZlci4gVGltZSB0byBkaWcgaW50byB0aGUgbWFrZWZpbGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOToxOS42OTkwNDUyNDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODA2MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y3NvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL01ha2VmaWxlPTExPXN1bnJwYy15IDo9IGNsbnQubyB4cHJ0Lm8gc29ja2xpYi5vIHhwcnRzb2NrLm8gc2NoZWQubyBcXFxcXFxubmV0L3N1bnJwYy9NYWtlZmlsZS0xMi1cXHQgICAgYXV0aC5vIGF1dGhfbnVsbC5vIGF1dGhfdGxzLm8gYXV0aF91bml4Lm8gXFxcXFxcbm5ldC9zdW5ycGMvTWFrZWZpbGU6MTM6XFx0ICAgIHN2Yy5vIHN2Y3NvY2subyBzdmNhdXRoLm8gc3ZjYXV0aF91bml4Lm8gXFxcXFxcbm5ldC9zdW5ycGMvTWFrZWZpbGUtMTQtXFx0ICAgIGFkZHIubyBycGNiX2NsbnQubyB0aW1lci5vIHhkci5vIFxcXFxcXG4tLVxcbm5ldC9zdW5ycGMvc3RhdHMuYy0yMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL2NsbnQuaFxcdTAwM2VcXG5uZXQvc3VucnBjL3N0YXRzLmM6MjQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdGF0cy5jLTI1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvbWV0cmljcy5oXFx1MDAzZVxcbi0tXFxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jLTE5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvc3ZjLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXFx1MDAzZVxcbm5ldC9zdW5ycGMvc3VucnBjX3N5bXMuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL2F1dGguaFxcdTAwM2VcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMjctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdGF0cy5oXFx1MDAzZVxcbm5ldC9zdW5ycGMvc3ZjLmM6Mjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmMuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL2NsbnQuaFxcdTAwM2VcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL3N2Y194cHJ0LmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXFx1MDAzZVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL3hwcnQuaFxcdTAwM2VcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjYXV0aC5jLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMveGRyLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNhdXRoLmM6MTc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNhdXRoLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNhdXRoLmhcXHUwMDNlXFxuLS1cXG5uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy94ZHIuaFxcdTAwM2VcXG5uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvc3ZjYXV0aC5oXFx1MDAzZVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMi0vKlxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjM6ICogbGludXgvbmV0L3N1bnJwYy9zdmNzb2NrLmNcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00LSAqXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy01OC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL21zZ19wcm90LmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NTk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdmNzb2NrLmhcXHUwMDNlXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNjAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N1bnJwYy9zdGF0cy5oXFx1MDAzZVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9NDAxPXN0YXRpYyB2b2lkIHN2Y19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTQxMC1cXHRcXHRzdnNrLVxcdTAwM2Vza19vZGF0YShzayk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NDExOlxcdFxcdHRyYWNlX3N2Y3NvY2tfZGF0YV9yZWFkeShcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCwgMCk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDEyLVxcdFxcdGlmICh0ZXN0X2JpdChYUFRfSEFORFNIQUtFLCBcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfZmxhZ3MpKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9NDIyPXN0YXRpYyB2b2lkIHN2Y193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00MjgtXFx0XFx0cm1iKCk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NDI5OlxcdFxcdHRyYWNlX3N2Y3NvY2tfd3JpdGVfc3BhY2UoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIDApO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTQzMC1cXHRcXHRzdnNrLVxcdTAwM2Vza19vd3NwYWNlKHNrKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTYwOD1zdGF0aWMgaW50IHN2Y191ZHBfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTY1OS1cXHRycXN0cC1cXHUwMDNlcnFfYXJnLmxlbiA9IGxlbjtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo2NjA6XFx0dHJhY2Vfc3Zjc29ja191ZHBfcmVjdihcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCwgbGVuKTtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy02NjEtXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy03MDMtXFx0fVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjcwNDpcXHR0cmFjZV9zdmNzb2NrX3VkcF9yZWN2X2VycihcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCwgZXJyKTtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy03MDUtXFx0Z290byBvdXRfY2xlYXJfYnVzeTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTcyOD1zdGF0aWMgaW50IHN2Y191ZHBfc2VuZHRvKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy03NzQtb3V0X3RyYWNlOlxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjc3NTpcXHR0cmFjZV9zdmNzb2NrX3VkcF9zZW5kKHhwcnQsIGVycik7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNzc2LVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9OTEwPXN0YXRpYyB2b2lkIHN2Y190Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTkxNy1cXHRcXHRzdnNrLVxcdTAwM2Vza19vc3RhdGUoc2spO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjkxODpcXHRcXHR0cmFjZV9zdmNzb2NrX3RjcF9zdGF0ZShcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCwgc3Zzay1cXHUwMDNlc2tfc29jayk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTE5LVxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9OTI3PXN0YXRpYyBzdHJ1Y3Qgc3ZjX3hwcnQgKnN2Y190Y3BfYWNjZXB0KHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk0NC1cXHRcXHRpZiAoZXJyICE9IC1FQUdBSU4pXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTQ1OlxcdFxcdFxcdHRyYWNlX3N2Y3NvY2tfYWNjZXB0X2Vycih4cHJ0LCBzZXJ2LVxcdTAwM2Vzdl9uYW1lLCBlcnIpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk0Ni1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk1NC1cXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjk1NTpcXHRcXHR0cmFjZV9zdmNzb2NrX2dldHBlZXJuYW1lX2Vycih4cHJ0LCBzZXJ2LVxcdTAwM2Vzdl9uYW1lLCBlcnIpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk1Ni1cXHRcXHRnb3RvIGZhaWxlZDtcXHRcXHQvKiBhYm9ydGVkIGNvbm5lY3Rpb24gb3Igd2hhdGV2ZXIgKi9cXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTEwNTQ9c3RhdGljIHNzaXplX3Qgc3ZjX3RjcF9yZWFkX21hcmtlcihzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMDc3LVxcdFxcdH1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxMDc4OlxcdFxcdHRyYWNlX3N2Y3NvY2tfbWFya2VyKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBzdnNrLVxcdTAwM2Vza19tYXJrZXIpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEwNzktXFx0XFx0aWYgKHN2Y19zb2NrX3JlY2xlbihzdnNrKSArIHN2c2stXFx1MDAzZXNrX2RhdGFsZW4gXFx1MDAzZVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTE1NT1zdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTExNzMtXFx0aWYgKGxlbiBcXHUwMDNlPSAwKSB7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTE3NDpcXHRcXHR0cmFjZV9zdmNzb2NrX3RjcF9yZWN2KFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBsZW4pO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTExNzUtXFx0XFx0c3Zzay1cXHUwMDNlc2tfdGNwbGVuICs9IGxlbjtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMjQtXFx0ZWxzZVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjEyMjU6XFx0XFx0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdl9zaG9ydChcXHUwMDI2c3Zzay1cXHUwMDNlc2tfeHBydCxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMjI2LVxcdFxcdFxcdFxcdHN2Y19zb2NrX3JlY2xlbihzdnNrKSxcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzEtXFx0XFx0Z290byBlcnJfZGVsZXRlO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjEyMzI6XFx0dHJhY2Vfc3Zjc29ja190Y3BfcmVjdl9lYWdhaW4oXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIDApO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzMtXFx0Z290byBlcnJfbm9jbG9zZTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzYtZXJyX2RlbGV0ZTpcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzoxMjM3OlxcdHRyYWNlX3N2Y3NvY2tfdGNwX3JlY3ZfZXJyKFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0LCBsZW4pO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEyMzgtXFx0c3ZjX3hwcnRfZGVmZXJyZWRfY2xvc2UoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQpO1xcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTI5Mz1zdGF0aWMgaW50IHN2Y190Y3Bfc2VuZHRvKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMzA4LVxcdHNlbnQgPSBzdmNfdGNwX3NlbmRtc2coc3ZzaywgcnFzdHAsIG1hcmtlcik7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTMwOTpcXHR0cmFjZV9zdmNzb2NrX3RjcF9zZW5kKHhwcnQsIHNlbnQpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEzMTAtXFx0aWYgKHNlbnQgXFx1MDAzYyAwIHx8IHNlbnQgIT0gKHhkci1cXHUwMDNlbGVuICsgc2l6ZW9mKG1hcmtlcikpKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTQzOT1zdGF0aWMgc3RydWN0IHN2Y19zb2NrICpzdmNfc2V0dXBfc29ja2V0KHN0cnVjdCBzdmNfc2VydiAqc2VydixcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1MDEtXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTUwMjpcXHR0cmFjZV9zdmNzb2NrX25ldyhzdnNrLCBzb2NrKTtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNTAzLVxcdHJldHVybiBzdnNrO1xcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTY4ND1zdGF0aWMgdm9pZCBzdmNfc29ja19mcmVlKHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE2ODgtXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTY4OTpcXHR0cmFjZV9zdmNzb2NrX2ZyZWUoc3Zzaywgc29jayk7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTY5MC1cXG4tLVxcbm5ldC9zdW5ycGMveHBydHNvY2suYy0zOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL3NjaGVkLmhcXHUwMDNlXFxubmV0L3N1bnJwYy94cHJ0c29jay5jOjM5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdW5ycGMvc3Zjc29jay5oXFx1MDAzZVxcbm5ldC9zdW5ycGMveHBydHNvY2suYy00MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3VucnBjL3hwcnRzb2NrLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjE5Ljc0Nzg2NjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY4OTA0MTI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYHN2Y19zZXR1cF9zb2NrZXRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBsaW5lIG9mIGNvZGU6IGBzdmNfc2V0dXBfc29ja2V0YCBzZXRzIGBzay1cdTAwM2Vza191c2VyX2RhdGEgPSBzdnNrO2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBzdGFydHMgd29ya2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIGBzay1cdTAwM2Vza191c2VyX2RhdGFgIOKAkyB0aGF0J3MgYSBjbGFzc2ljIGxvY2F0aW9uIGZvciBhdHRhY2hpbmcgcHJpdmF0ZSwgbW9kdWxlLXNwZWNpZmljIGRhdGEgdG8gYSBzb2NrZXQgc3RydWN0dXJlLiBUaGUgZmFjdCB0aGF0IGl0J3MgYmVpbmcgc2V0IHRvIGBzdnNrYCB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24sIGBzdmNfc2V0dXBfc29ja2V0YCwgaXMgY2xlYXJseSBhc3NvY2lhdGluZyBhIHNlcnZpY2Utc3BlY2lmaWMgc29ja2V0IHN0cnVjdHVyZSAoYHN2c2tgKSB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQgKGBza2ApLiBUaGlzIGFzc29jaWF0aW9uIGlzIGNyaXRpY2FsIGZvciBhbG1vc3QgYW55IG5ldHdvcmsgc2VydmljZS4gTm93IEkgbmVlZCB0byBrbm93IGV4YWN0bHkgd2hhdCB0aGUgYHN2c2tgIHN0cnVjdHVyZSBjb250YWlucy5cblxuVG8gYmUgc3VyZSBhYm91dCB0aGUgZnVuY3Rpb24gYW5kIGBzdnNrYCwgSSBzaG91bGQgbG9vayBhdCB0aGUgc291cmNlLiBMZXQgbWUgY2hlY2sgdGhlIGBzdmNfc2V0dXBfc29ja2V0YCBmdW5jdGlvbiBpbiBgbmV0L3N1bnJwYy9zdmNzb2NrLmNgIHRvIHNlZSBob3cgaXQncyB1c2VkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSB3aG9sZSBwaWN0dXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW50ZW50IG9mIHRoaXMgYXNzb2NpYXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBSUEMgc3RhY2sgaXMgbWFuYWdpbmcgc29ja2V0cyBhbmQgcG90ZW50aWFsbHkgaG93IGl0J3MgbWFuYWdpbmcgY29uY3VycmVudCBjb25uZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOToyMy40MzY5MTAyNzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zdW5ycGMvc3Zjc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MzksXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0Mzk6XFx0c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXFxuMTQ0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbjE0NDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGZsYWdzKVxcbjE0NDI6XFx0e1xcbjE0NDM6XFx0XFx0c3RydWN0IHN2Y19zb2NrXFx0KnN2c2s7XFxuMTQ0NDpcXHRcXHRzdHJ1Y3Qgc29ja1xcdCppbmV0O1xcbjE0NDU6XFx0XFx0aW50XFx0XFx0cG1hcF9yZWdpc3RlciA9ICEoZmxhZ3MgXFx1MDAyNiBTVkNfU09DS19BTk9OWU1PVVMpO1xcbjE0NDY6XFx0XFx0aW50XFx0XFx0c2VuZHBhZ2VzO1xcbjE0NDc6XFx0XFx0dW5zaWduZWQgbG9uZ1xcdHBhZ2VzO1xcbjE0NDg6XFx0XFxuMTQ0OTpcXHRcXHRzZW5kcGFnZXMgPSBzdmNfc29ja19zZW5kcGFnZXMoc2Vydiwgc29jaywgZmxhZ3MpO1xcbjE0NTA6XFx0XFx0aWYgKHNlbmRwYWdlcyBcXHUwMDNjIDApXFxuMTQ1MTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihzZW5kcGFnZXMpO1xcbjE0NTI6XFx0XFxuMTQ1MzpcXHRcXHRwYWdlcyA9IHN2Y19zZXJ2X21heHBhZ2VzKHNlcnYpO1xcbjE0NTQ6XFx0XFx0c3ZzayA9IGt6YWxsb2NfZmxleCgqc3Zzaywgc2tfcGFnZXMsIHBhZ2VzKTtcXG4xNDU1OlxcdFxcdGlmICghc3ZzaylcXG4xNDU2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjE0NTc6XFx0XFxuMTQ1ODpcXHRcXHRpZiAoc2VuZHBhZ2VzKSB7XFxuMTQ1OTpcXHRcXHRcXHRzdnNrLVxcdTAwM2Vza19idmVjID0ga3phbGxvY19vYmpzKCpzdnNrLVxcdTAwM2Vza19idmVjLCBzZW5kcGFnZXMpO1xcbjE0NjA6XFx0XFx0XFx0aWYgKCFzdnNrLVxcdTAwM2Vza19idmVjKSB7XFxuMTQ2MTpcXHRcXHRcXHRcXHRrZnJlZShzdnNrKTtcXG4xNDYyOlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjE0NjM6XFx0XFx0XFx0fVxcbjE0NjQ6XFx0XFx0fVxcbjE0NjU6XFx0XFxuMTQ2NjpcXHRcXHRzdnNrLVxcdTAwM2Vza19tYXhwYWdlcyA9IHBhZ2VzO1xcbjE0Njc6XFx0XFxuMTQ2ODpcXHRcXHRpbmV0ID0gc29jay1cXHUwMDNlc2s7XFxuMTQ2OTpcXHRcXG4xNDcwOlxcdFxcdGlmIChwbWFwX3JlZ2lzdGVyKSB7XFxuMTQ3MTpcXHRcXHRcXHRpbnQgZXJyO1xcbjE0NzI6XFx0XFxuMTQ3MzpcXHRcXHRcXHRlcnIgPSBzdmNfcmVnaXN0ZXIoc2Vydiwgc29ja19uZXQoc29jay1cXHUwMDNlc2spLCBpbmV0LVxcdTAwM2Vza19mYW1pbHksXFxuMTQ3NDpcXHRcXHRcXHRcXHRcXHQgICAgIGluZXQtXFx1MDAzZXNrX3Byb3RvY29sLFxcbjE0NzU6XFx0XFx0XFx0XFx0XFx0ICAgICBudG9ocyhpbmV0X3NrKGluZXQpLVxcdTAwM2VpbmV0X3Nwb3J0KSk7XFxuMTQ3NjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjE0Nzc6XFx0XFx0XFx0XFx0a2ZyZWUoc3Zzay1cXHUwMDNlc2tfYnZlYyk7XFxuMTQ3ODpcXHRcXHRcXHRcXHRrZnJlZShzdnNrKTtcXG4xNDc5OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMTQ4MDpcXHRcXHRcXHR9XFxuMTQ4MTpcXHRcXHR9XFxuMTQ4MjpcXHRcXG4xNDgzOlxcdFxcdHN2c2stXFx1MDAzZXNrX3NvY2sgPSBzb2NrO1xcbjE0ODQ6XFx0XFx0c3Zzay1cXHUwMDNlc2tfc2sgPSBpbmV0O1xcbjE0ODU6XFx0XFx0c3Zzay1cXHUwMDNlc2tfb3N0YXRlID0gaW5ldC1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlO1xcbjE0ODY6XFx0XFx0c3Zzay1cXHUwMDNlc2tfb2RhdGEgPSBpbmV0LVxcdTAwM2Vza19kYXRhX3JlYWR5O1xcbjE0ODc6XFx0XFx0c3Zzay1cXHUwMDNlc2tfb3dzcGFjZSA9IGluZXQtXFx1MDAzZXNrX3dyaXRlX3NwYWNlO1xcbjE0ODg6XFx0XFx0LypcXG4xNDg5OlxcdFxcdCAqIFRoaXMgYmFycmllciBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvblxcbjE0OTA6XFx0XFx0ICogd2l0aCBzdmNfZGF0YV9yZWFkeSgpLCBzdmNfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KCksIGFuZCBvdGhlcnNcXG4xNDkxOlxcdFxcdCAqIHdoZW4gY2FsbGluZyBjYWxsYmFja3MgYWJvdmUuXFxuMTQ5MjpcXHRcXHQgKi9cXG4xNDkzOlxcdFxcdHdtYigpO1xcbjE0OTQ6XFx0XFx0aW5ldC1cXHUwMDNlc2tfdXNlcl9kYXRhID0gc3ZzaztcXG4xNDk1OlxcdFxcbjE0OTY6XFx0XFx0LyogSW5pdGlhbGl6ZSB0aGUgc29ja2V0ICovXFxuMTQ5NzpcXHRcXHRpZiAoc29jay1cXHUwMDNldHlwZSA9PSBTT0NLX0RHUkFNKVxcbjE0OTg6XFx0XFx0XFx0c3ZjX3VkcF9pbml0KHN2c2ssIHNlcnYpO1xcbjE0OTk6XFx0XFx0ZWxzZVxcbjE1MDA6XFx0XFx0XFx0c3ZjX3RjcF9pbml0KHN2c2ssIHNlcnYpO1xcbjE1MDE6XFx0XFxuMTUwMjpcXHRcXHR0cmFjZV9zdmNzb2NrX25ldyhzdnNrLCBzb2NrKTtcXG4xNTAzOlxcdFxcdHJldHVybiBzdnNrO1xcbjE1MDQ6XFx0fVxcbjE1MDU6XFx0XFxuMTUwNjpcXHQvKipcXG4xNTA3OlxcdCAqIHN2Y19hZGRzb2NrIC0gYWRkIGEgbGlzdGVuZXIgc29ja2V0IHRvIGFuIFJQQyBzZXJ2aWNlXFxuMTUwODpcXHQgKiBAc2VydjogcG9pbnRlciB0byBSUEMgc2VydmljZSB0byB3aGljaCB0byBhZGQgYSBuZXcgbGlzdGVuZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MjMuNDM3MDIzOTM0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NTcxMjU5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtlcm5lbCBWdWxuZXJhYmlsaXR5IGluIE5GUyBTZXJ2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gc29ja2V0IG93bmVyc2hpcCB3aXRoaW4gdGhlIE5GUyBzZXJ2ZXIsIHNwZWNpZmljYWxseSB3aGVuIGFkZGluZyBzb2NrZXRzLiBUaGUgY29kZSBpbiBxdWVzdGlvbiwgYGluZXQtXHUwMDNlc2tfdXNlcl9kYXRhID0gc3ZzaztgLCBoaWdobGlnaHRzIGEgcG90ZW50aWFsIG92ZXJ3cml0ZSBpc3N1ZS4gSWYgYSBzb2NrZXQgYWxyZWFkeSBoYXMgYHNrX3VzZXJfZGF0YWAgYXNzaWduZWQgKHBlcmhhcHMgZnJvbSBhbm90aGVyIFJQQyBzZXJ2aWNlLCBLQ00sIFRMUywgU0NUUCwgQlBGLCBvciBhIGR1cGxpY2F0ZSBhZGRpdGlvbiksIGBzdmNfc2V0dXBfc29ja2V0YCBjb3VsZCBjb3JydXB0IHRoYXQgb3duZXJzaGlwIG9yIHN0YXRlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIGluIGBzdmNfYWRkc29ja2A6XG5gYGBjXG5cdGVyciA9IC1FQlVTWTtcblx0aWYgKHNvLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcblx0XHRnb3RvIG91dDtcbmBgYFxudG8gcHJldmVudCB0aGUgb3ZlcndyaXRlLiBOb3csIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgaXMgcmVhY2hhYmxlIGFuZCBleHBsb2l0YWJsZS5cblxuRmlyc3QsIGlzIHRoaXMgY29kZSBwYXRoIGFjY2Vzc2libGU/IFllcywgYHN2Y19hZGRzb2NrYCBjYW4gYmUgY2FsbGVkIGZyb20gdXNlcnNwYWNlIGJ5IHdyaXRpbmcgYSBmaWxlIGRlc2NyaXB0b3IgdG8gYC9wcm9jL2ZzL25mc2QvcG9ydGxpc3RgIChuZnNjdGwpLiBUaGlzIGlzIHN0YW5kYXJkIE5GUyBzZXJ2ZXIgZnVuY3Rpb25hbGl0eSwgYW5kIHRodXMgcmVhY2hhYmxlLlxuXG5TZWNvbmQsIGlzIHRoaXMgY29kZSBpbiBhIGNvcmUgc3Vic3lzdGVtIG9yIGEgY29tbW9ubHkgcmVhY2hhYmxlIHByb3RvY29sPyBBYnNvbHV0ZWx5LiBTdW5SUEMgYW5kIE5GU2QgYXJlIGZ1bmRhbWVudGFsIHBhcnRzIG9mIHRoZSBMaW51eCBrZXJuZWwncyBORlMgaW1wbGVtZW50YXRpb24uXG5cblRoaXJkLCBpcyB0aGlzIHBhdGNoIFwiV29ydGhGdXp6aW5nXCI/IERlZmluaXRlbHkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHZhbGlkYXRpb24gY2hlY2sgd2l0aGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMgYW5kIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gVGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYHN2Y19hZGRzb2NrYCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgY2hhbmdlIGlzLiBOb3csIGZvciB0aGUgY2FsbGVyLCBpcyBpdCBgX193cml0ZV9wb3J0c19hZGRmZGA/IFllcywgaXQgYXBwZWFycyB0byBiZSBgX193cml0ZV9wb3J0c19hZGRmZGAgaW4gYGZzL25mc2QvbmZzY3RsLmNgLCB3aGljaCBjYWxscyBgc3ZjX2FkZHNvY2tgLiBJJ2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNhbGxlcnMgb2YgYHN2Y19hZGRzb2NrYC4gQSBxdWljayBncmVwIGNvbmZpcm1zIHRoaXMuXG5cbkxldCdzIG1vdmUgb250byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciBgc3ZjX2FkZHNvY2tgIGFuZCBuZnNkIHRvIGZ1bmN0aW9uPyBCeSBleGFtaW5pbmcgYG5ldC9zdW5ycGMvS2NvbmZpZ2AgYW5kIGBmcy9uZnNkL0tjb25maWdgLCBJIHNlZTpcbi0gICBgU1VOUlBDYCAoZWl0aGVyIGNvbXBpbGVkIGluIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUsIHNlbGVjdGVkIGJ5IGBORlNEYClcbi0gICBgTkZTRGAgKHJlcXVpcmVkIHRvIHJlYWNoIGBzdmNfYWRkc29ja2AgdGhyb3VnaCBgL3Byb2MvZnMvbmZzZC9wb3J0bGlzdGAgb3Igd3JpdGVfcG9ydHMpXG5cbkZ1cnRoZXJtb3JlLCBgTkZTRGAgZGVwZW5kcyBvbiBgTVVMVElVU0VSYCwgd2hpY2ggaXMgZGVmYXVsdCAneScsIGluIGFkZGl0aW9uIHRvIGBTVU5SUENgIGFuZCBvdGhlciBzZWxlY3Qgb3B0aW9ucy5cblxuVG8gYmUgZXh0cmEgY2xlYXI6IG15IGtleSBmb2N1cyBzeW1ib2xzIGFyZTpcbiogICBgc3ZjX2FkZHNvY2tgXG4qICAgYF9fd3JpdGVfcG9ydHNfYWRkZmRgXG5cbkZpbmFsbHksIEknbGwgY29uZmlybSB0aGF0IGBfX3dyaXRlX3BvcnRzX2FkZGZkYCBpc24ndCBzdGF0aWMgaW4gYGZzL25mc2QvbmZzY3RsLmNgLiBJJ2xsIGFsc28gZG91YmxlIGNoZWNrIHRoZSBuYW1lIG9mIHRoZSB3cml0ZSBmdW5jdGlvbiBpbiB0aGUgY29kZSBhcm91bmQgbGluZXMgODAwLTgzMC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTozMC4wOTQxNTIxOTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25mc2QvbmZzY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODAwOlxcdFxcdFxcdG5mc2RfZGVzdHJveV9zZXJ2KG5ldCk7XFxuIDgwMTpcXHRcXG4gODAyOlxcdFxcdHJldHVybiBlcnI7XFxuIDgwMzpcXHR9XFxuIDgwNDpcXHRcXG4gODA1OlxcdHN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsXFxuIDgwNjpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4gODA3OlxcdHtcXG4gODA4OlxcdFxcdGlmIChzaXplID09IDApXFxuIDgwOTpcXHRcXHRcXHRyZXR1cm4gX193cml0ZV9wb3J0c19uYW1lcyhidWYsIG5ldCk7XFxuIDgxMDpcXHRcXG4gODExOlxcdFxcdGlmIChpc2RpZ2l0KGJ1ZlswXSkpXFxuIDgxMjpcXHRcXHRcXHRyZXR1cm4gX193cml0ZV9wb3J0c19hZGRmZChidWYsIG5ldCwgZmlsZS1cXHUwMDNlZl9jcmVkKTtcXG4gODEzOlxcdFxcbiA4MTQ6XFx0XFx0aWYgKGlzYWxwaGEoYnVmWzBdKSlcXG4gODE1OlxcdFxcdFxcdHJldHVybiBfX3dyaXRlX3BvcnRzX2FkZHhwcnQoYnVmLCBuZXQsIGZpbGUtXFx1MDAzZWZfY3JlZCk7XFxuIDgxNjpcXHRcXG4gODE3OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4MTg6XFx0fVxcbiA4MTk6XFx0XFxuIDgyMDpcXHQvKlxcbiA4MjE6XFx0ICogd3JpdGVfcG9ydHMgLSBQYXNzIGEgc29ja2V0IGZpbGUgZGVzY3JpcHRvciBvciB0cmFuc3BvcnQgbmFtZSB0byBsaXN0ZW4gb25cXG4gODIyOlxcdCAqXFxuIDgyMzpcXHQgKiBJbnB1dDpcXG4gODI0OlxcdCAqXFx0XFx0XFx0YnVmOlxcdFxcdGlnbm9yZWRcXG4gODI1OlxcdCAqXFx0XFx0XFx0c2l6ZTpcXHRcXHR6ZXJvXFxuIDgyNjpcXHQgKiBPdXRwdXQ6XFxuIDgyNzpcXHQgKlxcdE9uIHN1Y2Nlc3M6XFx0cGFzc2VkLWluIGJ1ZmZlciBmaWxsZWQgd2l0aCBhICdcXFxcbictdGVybWluYXRlZCBDXFxuIDgyODpcXHQgKlxcdFxcdFxcdHN0cmluZyBjb250YWluaW5nIGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZlxcbiA4Mjk6XFx0ICpcXHRcXHRcXHRuYW1lZCBORlNEIGxpc3RlbmVycztcXG4gODMwOlxcdCAqXFx0XFx0XFx0cmV0dXJuIGNvZGUgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHN0cmluZ1xcbiA4MzE6XFx0ICpcXHRPbiBlcnJvcjpcXHRyZXR1cm4gY29kZSBpcyB6ZXJvIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWVcXG4gODMyOlxcdCAqXFxuIDgzMzpcXHQgKiBPUlxcbiA4MzQ6XFx0ICpcXG4gODM1OlxcdCAqIElucHV0OlxcbiA4MzY6XFx0ICpcXHRcXHRcXHRidWY6XFx0XFx0QyBzdHJpbmcgY29udGFpbmluZyBhbiB1bnNpZ25lZFxcbiA4Mzc6XFx0ICpcXHRcXHRcXHRcXHRcXHRpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyBhIGJvdW5kXFxuIDgzODpcXHQgKlxcdFxcdFxcdFxcdFxcdGJ1dCB1bmNvbm5lY3RlZCBzb2NrZXQgdGhhdCBpcyB0byBiZVxcbiA4Mzk6XFx0ICpcXHRcXHRcXHRcXHRcXHR1c2VkIGFzIGFuIE5GU0QgbGlzdGVuZXI7IGxpc3RlbigzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTozMC4wOTQzMTUyODVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY5MzkwODQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIG1vZGlmaWNhdGlvbjpcblxuKipBbmFseXppbmcgdGhlIGBzdmNfYWRkc29ja2AgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB3aGVyZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gYmVpbmcgYWx0ZXJlZCBpcyBgc3ZjX2FkZHNvY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wYWN0IG9mIHRoaXMuIEJhc2VkIG9uIHRoZSBmaWxlIGNvbnRleHQsIHRoZSBlbnRyeSBwb2ludCBmb3IgbmZzY3RsIG9wZXJhdGlvbnMgaGVyZSBzZWVtcyB0byBiZSBlaXRoZXIgYF9fd3JpdGVfcG9ydHNfYWRkZmRgIG9yIHBvdGVudGlhbGx5IGB3cml0ZV9wb3J0c2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMsIGFuZCBJJ2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBmdW5jdGlvbnMgaW4gbWluZCBhcyB0aGUgbGlrZWx5IHBsYWNlcyB3aGVyZSB0aGlzIGNoYW5nZSB3aWxsIG1hbmlmZXN0LlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcGx5IGludG8gdGhlIGNvZGUgaXRzZWxmLCBsZXQncyBqdXN0IGNvbmZpcm0gdGhlIHNjb3BlLiBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgdGhlIHBhdGNoIHRvdWNoZXMgYW55IG90aGVyIGZpbGVzLiBPZnRlbiB0aGVzZSBwYXRjaGVzIHdpbGwgYWZmZWN0IGEgc3VpdGUgb2YgZmlsZXMgdG8gYWNoaWV2ZSB0aGUgZW5kIHJlc3VsdC4gQWgsIGdvb2QsIHRoZSBjaGFuZ2UgaXMgbGltaXRlZCB0byBqdXN0IGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuXG5cbkFscmlnaHQsIEkndmUgZ290IHRoZSBjb250ZXh0LCBJIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkLCBhbmQgSSd2ZSBjb25maXJtZWQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIFRpbWUgdG8gcnVuIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIHN0YXJ0IGNvbGxhdGluZyBteSBmaW5kaW5ncy4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBzcGl0cyBvdXQsIGFuZCB0aGVuIEkgY2FuIGRpdmUgaW50byB0aGUgY29kZSBtb3JlIG1ldGhvZGljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNzMsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTozMy43ODgyMjgzOTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzczMzgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1VOUlBDXCIsXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZjX2FkZHNvY2tcIixcbiAgICBcIl9fd3JpdGVfcG9ydHNfYWRkZmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc3ZjX2FkZHNvY2soKWAgdG8gcHJldmVudCBzb2NrZXRzIHdpdGggZXhpc3RpbmcgYHNrX3VzZXJfZGF0YWAgZnJvbSBiZWluZyByZWdpc3RlcmVkIGFzIFJQQyBzZXJ2aWNlIGxpc3RlbmVyIHNvY2tldHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcvUlBDIHNlcnZlciBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBORlNEIGNvbnRyb2wgaW50ZXJmYWNlICh3cml0aW5nIGFuIEZEIHRvIC9wcm9jL2ZzL25mc2QvcG9ydGxpc3QpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19hZGRzb2NrXCIsXG4gICAgXCJfX3dyaXRlX3BvcnRzX2FkZGZkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHN2Y19hZGRzb2NrKClgIHRvIHByZXZlbnQgc29ja2V0cyB3aXRoIGV4aXN0aW5nIGBza191c2VyX2RhdGFgIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBhcyBSUEMgc2VydmljZSBsaXN0ZW5lciBzb2NrZXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nL1JQQyBzZXJ2ZXIgY29kZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgTkZTRCBjb250cm9sIGludGVyZmFjZSAod3JpdGluZyBhbiBGRCB0byAvcHJvYy9mcy9uZnNkL3BvcnRsaXN0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MzMuODcxOTcxODAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMxNjYwODY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjMzLjg3MjU4OTg2M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1MzE1OTg1MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYmQzZGNiYWY0MDg1MTZjMDFhMGM2MjAwZjE1YjQ0NTdiN2NhZDkyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNDowODo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbmluZGV4IDUwZTVlN2Y1Yjc2MmQuLmU4Y2M0MzI5ZjEyODIgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suY1xuKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmNcbkBAIC0xNTQxLDYgKzE1NDEsOSBAQCBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcbiBcdGVyciA9IC1FSVNDT05OO1xuIFx0aWYgKHNvLVx1MDAzZXN0YXRlIFx1MDAzZSBTU19VTkNPTk5FQ1RFRClcbiBcdFx0Z290byBvdXQ7XG4rXHRlcnIgPSAtRUJVU1k7XG4rXHRpZiAoc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhKVxuK1x0XHRnb3RvIG91dDtcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbiBcdFx0Z290byBvdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTozMy44NzI1OTEyMjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU5Nzg2OTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byBzdmNzb2NrLmMgZm9yIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gd2UgbmVlZCB0byBhbmFseXplIHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBhY3Rpb24gc3RhcnRzIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyB1c2UgbXkgdHJ1c3R5IGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gaW1tZWRpYXRlbHkgcHVsbCB1cCB0aGUgY29kZSBhcm91bmQgbGluZSAxNTQxIGluIGBuZXQvc3VucnBjL3N2Y3NvY2suY2AuIFRoYXQncyB0aGUgYmVzdCB3YXkgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGxpbmUgdG8gc2VlIGhvdyB0aGlzIGNoYW5nZSBmaXRzIGluIGFuZCB0byBhc3Nlc3MgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBkaWdnaW5nIGludG8gbmV0d29yayBjb2RlISBPbmNlIEkgaGF2ZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSBjYW4gbWFrZSBhIHByb3BlciBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTozOC40NzA0NjM2ODZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zdW5ycGMvc3Zjc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MjA6XFx0XFx0XFx0Y2hhciAqbmFtZV9yZXR1cm4sIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbjE1MjE6XFx0e1xcbjE1MjI6XFx0XFx0aW50IGVyciA9IDA7XFxuMTUyMzpcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzbyA9IHNvY2tmZF9sb29rdXAoZmQsIFxcdTAwMjZlcnIpO1xcbjE1MjQ6XFx0XFx0c3RydWN0IHN2Y19zb2NrICpzdnNrID0gTlVMTDtcXG4xNTI1OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuMTUyNjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkcjtcXG4xNTI3OlxcdFxcdGludCBzYWxlbjtcXG4xNTI4OlxcdFxcbjE1Mjk6XFx0XFx0aWYgKCFzbylcXG4xNTMwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTUzMTpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE1MzI6XFx0XFx0aWYgKHNvY2tfbmV0KHNvLVxcdTAwM2VzaykgIT0gbmV0KVxcbjE1MzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNDpcXHRcXHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xcbjE1MzU6XFx0XFx0aWYgKChzby1cXHUwMDNlc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBQRl9JTkVUKSBcXHUwMDI2XFx1MDAyNiAoc28tXFx1MDAzZXNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYpKVxcbjE1MzY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTUzNzpcXHRcXHRlcnIgPSAgLUVQUk9UT05PU1VQUE9SVDtcXG4xNTM4OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2XFxuMTUzOTpcXHRcXHQgICAgc28tXFx1MDAzZXNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcXG4xNTQwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDE6XFx0XFx0ZXJyID0gLUVJU0NPTk47XFxuMTU0MjpcXHRcXHRpZiAoc28tXFx1MDAzZXN0YXRlIFxcdTAwM2UgU1NfVU5DT05ORUNURUQpXFxuMTU0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNTQ0OlxcdFxcdGVyciA9IC1FQlVTWTtcXG4xNTQ1OlxcdFxcdGlmIChzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSlcXG4xNTQ2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE1NDc6XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xNTQ4OlxcdFxcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxcbjE1NDk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1MDpcXHRcXHRzdnNrID0gc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO1xcbjE1NTE6XFx0XFx0aWYgKElTX0VSUihzdnNrKSkge1xcbjE1NTI6XFx0XFx0XFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuMTU1MzpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHN2c2spO1xcbjE1NTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTU1NTpcXHRcXHR9XFxuMTU1NjpcXHRcXHRzYWxlbiA9IGtlcm5lbF9nZXRzb2NrbmFtZShzdnNrLVxcdTAwM2Vza19zb2NrLCBzaW4pO1xcbjE1NTc6XFx0XFx0aWYgKHNhbGVuIFxcdTAwM2U9IDApXFxuMTU1ODpcXHRcXHRcXHRzdmNfeHBydF9zZXRfbG9jYWwoXFx1MDAyNnN2c2stXFx1MDAzZXNrX3hwcnQsIHNpbiwgc2FsZW4pO1xcbjE1NTk6XFx0XFx0c3Zzay1cXHUwMDNlc2tfeHBydC54cHRfY3JlZCA9IGdldF9jcmVkKGNyZWQpO1xcbjE1NjA6XFx0XFx0c3ZjX2FkZF9uZXdfcGVybV94cHJ0KHNlcnYsIFxcdTAwMjZzdnNrLVxcdTAwM2Vza194cHJ0KTtcXG4xNTYxOlxcdFxcdHJldHVybiBzdmNfb25lX3NvY2tfbmFtZShzdnNrLCBuYW1lX3JldHVybiwgbGVuKTtcXG4xNTYyOlxcdG91dDpcXG4xNTYzOlxcdFxcdHNvY2tmZF9wdXQoc28pO1xcbjE1NjQ6XFx0XFx0cmV0dXJuIGVycjtcXG4xNTY1OlxcdH1cXG4xNTY2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTtcXG4xNTY3OlxcdFxcbjE1Njg6XFx0LypcXG4xNTY5OlxcdCAqIENyZWF0ZSBzb2NrZXQgZm9yIFJQQyBzZXJ2aWNlLlxcbjE1NzA6XFx0ICovXFxuMTU3MTpcXHRzdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfY3JlYXRlX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXFxuMTU3MjpcXHRcXHRcXHRcXHRcXHRcXHQgIGludCBwcm90b2NvbCxcXG4xNTczOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldCAqbmV0LFxcbjE1NzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbiwgaW50IGxlbixcXG4xNTc1OlxcdFxcdFxcdFxcdFxcdFxcdCAgaW50IGZsYWdzKVxcbjE1NzY6XFx0e1xcbjE1Nzc6XFx0XFx0c3RydWN0IHN2Y19zb2NrXFx0KnN2c2s7XFxuMTU3ODpcXHRcXHRzdHJ1Y3Qgc29ja2V0XFx0KnNvY2s7XFxuMTU3OTpcXHRcXHRpbnRcXHRcXHRlcnJvcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6MzguNDcwNTczOTc3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjU3MzUwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBgc3ZjX2FkZHNvY2tgIGZ1bmN0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIHBhcnRpY3VsYXIgY2hlY2suIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uLlxuXG4qKkRpdmluZyBpbnRvIGBzdmNfYWRkc29ja2AgYW5kIEl0cyBDb250ZXh0KipcblxuRmlyc3QsIEkgc2VlIGBzdmNfc2V0dXBfc29ja2V0KHNlcnYsIHNvLCBTVkNfU09DS19ERUZBVUxUUyk7YC4gVGhpcyBpcyB3aGVyZSB0aGUgc29ja2V0IGNvbmZpZ3VyYXRpb24gYXBwZWFycyB0byBiZSBoYXBwZW5pbmcuIEkgcmVjb2duaXplIHRoaXM7IEkndmUgdXNlZCB0aGlzIHNpbWlsYXIgY2FsbCBvZnRlbi4gR2l2ZW4gaXRzIGNlbnRyYWwgcm9sZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGBzdmNfc2V0dXBfc29ja2V0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IHNldHMgdXAgc29ja2V0cy4gSG9wZWZ1bGx5LCB0aGUgc291cmNlIGNvZGUgaXMgd2VsbCBkb2N1bWVudGVkLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNpZGUgZWZmZWN0cyBvciBwb3RlbnRpYWwgZ290Y2hhcyB0aGF0IHRoaXMgbmV3IGNoZWNrIGluIGBzdmNfYWRkc29ja2AgaXMgYXR0ZW1wdGluZyB0byBtaXRpZ2F0ZS4gUmlnaHQgbm93LCB0aGlzIGFsbCBzZWVtcyBhIGxpdHRsZSB2YWd1ZSB1bnRpbCBJIGNoZWNrIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkLiBMZXQncyBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIGBzdmNfc2V0dXBfc29ja2V0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6NDAuNjM2MzEyMDM1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ1MTQxMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX3NldHVwX3NvY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3N2Y3NvY2suYz04NT1lbnVtIHtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTg4LVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjg5OnN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICosIHN0cnVjdCBzb2NrZXQgKixcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05MC1cXHRcXHRcXHRcXHRcXHQgaW50IGZsYWdzKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTQwMT1zdGF0aWMgdm9pZCBzdmNfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00MDctXFx0aWYgKHN2c2spIHtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo0MDg6XFx0XFx0LyogUmVmZXIgdG8gc3ZjX3NldHVwX3NvY2tldCgpIGZvciBkZXRhaWxzLiAqL1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTQwOS1cXHRcXHRybWIoKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTQyMj1zdGF0aWMgdm9pZCBzdmNfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNDI2LVxcdGlmIChzdnNrKSB7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NDI3OlxcdFxcdC8qIFJlZmVyIHRvIHN2Y19zZXR1cF9zb2NrZXQoKSBmb3IgZGV0YWlscy4gKi9cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy00MjgtXFx0XFx0cm1iKCk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYz04Nzg9c3RhdGljIHZvaWQgc3ZjX3RjcF9saXN0ZW5fZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy04OTgtXFx0aWYgKHN2c2spIHtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo4OTk6XFx0XFx0LyogUmVmZXIgdG8gc3ZjX3NldHVwX3NvY2tldCgpIGZvciBkZXRhaWxzLiAqL1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTkwMC1cXHRcXHRybWIoKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTkxMD1zdGF0aWMgdm9pZCBzdmNfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05MTQtXFx0aWYgKHN2c2spIHtcXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo5MTU6XFx0XFx0LyogUmVmZXIgdG8gc3ZjX3NldHVwX3NvY2tldCgpIGZvciBkZXRhaWxzLiAqL1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTkxNi1cXHRcXHRybWIoKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTkyNz1zdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfdGNwX2FjY2VwdChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05NTktXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTYwOlxcdC8qIFJlc2V0IHRoZSBpbmhlcml0ZWQgY2FsbGJhY2tzIGJlZm9yZSBjYWxsaW5nIHN2Y19zZXR1cF9zb2NrZXQgKi9cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05NjEtXFx0bmV3c29jay1cXHUwMDNlc2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZSA9IHN2c2stXFx1MDAzZXNrX29zdGF0ZTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTk2OS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYzo5NzA6XFx0bmV3c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2VydiwgbmV3c29jayxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05NzEtXFx0XFx0XFx0XFx0IChTVkNfU09DS19BTk9OWU1PVVMgfCBTVkNfU09DS19URU1QT1JBUlkpKTtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jPTE0MjI9c3RhdGljIGludCBzdmNfc29ja19zZW5kcGFnZXMoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNDM4LSAqL1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE0Mzk6c3RhdGljIHN0cnVjdCBzdmNfc29jayAqc3ZjX3NldHVwX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtMTQ0MC1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTUxOT1pbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGludCBmZCxcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NDktXFx0XFx0Z290byBvdXQ7XFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTU1MDpcXHRzdnNrID0gc3ZjX3NldHVwX3NvY2tldChzZXJ2LCBzbywgU1ZDX1NPQ0tfREVGQVVMVFMpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE1NTEtXFx0aWYgKElTX0VSUihzdnNrKSkge1xcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTU3MT1zdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfY3JlYXRlX3NvY2tldChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xNjMzLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjE2MzQ6XFx0c3ZzayA9IHN2Y19zZXR1cF9zb2NrZXQoc2Vydiwgc29jaywgZmxhZ3MpO1xcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTE2MzUtXFx0aWYgKElTX0VSUihzdnNrKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDowOTo0MS4wMDA4MzI0MjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwNjU4MjA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgYW5hbHlzaXM6XG5cbioqRGl2aW5nIGludG8gYHN2Y19zZXR1cF9zb2NrZXRgIGFuZCBgc2tfdXNlcl9kYXRhYCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgc3ZjX3NldHVwX3NvY2tldGAgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYCBoYW5kbGVzIGBza191c2VyX2RhdGFgLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgZm9yIGFueSBjdXN0b20gUlBDIGltcGxlbWVudGF0aW9uIGFuZCBob3cgd2UgaW50ZXJmYWNlIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0LiBHcmFiYmluZyBsaW5lcyAxNDM5LTE1MTAgd2lsbCBiZSB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXQgYW5kIHNlZSBob3cgaXQncyB1c2VkIGluIHByYWN0aWNlLiBJIG5lZWQgdG8ga25vdzogd2hhdCdzIGJlaW5nIHN0b3JlZCB0aGVyZSwgd2hhdCBjb250ZXh0IGl0IHJlcHJlc2VudHMgKGNsaWVudCwgc2VydmVyLCBpbmRpdmlkdWFsIHJlcXVlc3QsIHNlc3Npb24gZXRjLiksIGFuZCBob3cgaXQncyBpbml0aWFsaXplZCBhbmQgc3Vic2VxdWVudGx5IGFjY2Vzc2VkL21hbmlwdWxhdGVkIHdpdGhpbiB0aGUgUlBDIGZyYW1ld29yay4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgbG9naWMuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpZiBpdCdzIGhvbGRpbmcgcGVyLXNvY2tldC1zcGVjaWZpYyBSUEMgY29udGV4dCBvciBzb21lIG1vcmUgZ2VuZXJhbCBuZXR3b3JraW5nIG1ldGFkYXRhLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NDczNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjA5OjQzLjQwNzQxNzg2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N1bnJwYy9zdmNzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQzOCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQzODpcXHQgKi9cXG4xNDM5OlxcdHN0YXRpYyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2Y19zZXR1cF9zb2NrZXQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LFxcbjE0NDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNvY2tldCAqc29jayxcXG4xNDQxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBmbGFncylcXG4xNDQyOlxcdHtcXG4xNDQzOlxcdFxcdHN0cnVjdCBzdmNfc29ja1xcdCpzdnNrO1xcbjE0NDQ6XFx0XFx0c3RydWN0IHNvY2tcXHQqaW5ldDtcXG4xNDQ1OlxcdFxcdGludFxcdFxcdHBtYXBfcmVnaXN0ZXIgPSAhKGZsYWdzIFxcdTAwMjYgU1ZDX1NPQ0tfQU5PTllNT1VTKTtcXG4xNDQ2OlxcdFxcdGludFxcdFxcdHNlbmRwYWdlcztcXG4xNDQ3OlxcdFxcdHVuc2lnbmVkIGxvbmdcXHRwYWdlcztcXG4xNDQ4OlxcdFxcbjE0NDk6XFx0XFx0c2VuZHBhZ2VzID0gc3ZjX3NvY2tfc2VuZHBhZ2VzKHNlcnYsIHNvY2ssIGZsYWdzKTtcXG4xNDUwOlxcdFxcdGlmIChzZW5kcGFnZXMgXFx1MDAzYyAwKVxcbjE0NTE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoc2VuZHBhZ2VzKTtcXG4xNDUyOlxcdFxcbjE0NTM6XFx0XFx0cGFnZXMgPSBzdmNfc2Vydl9tYXhwYWdlcyhzZXJ2KTtcXG4xNDU0OlxcdFxcdHN2c2sgPSBremFsbG9jX2ZsZXgoKnN2c2ssIHNrX3BhZ2VzLCBwYWdlcyk7XFxuMTQ1NTpcXHRcXHRpZiAoIXN2c2spXFxuMTQ1NjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4xNDU3OlxcdFxcbjE0NTg6XFx0XFx0aWYgKHNlbmRwYWdlcykge1xcbjE0NTk6XFx0XFx0XFx0c3Zzay1cXHUwMDNlc2tfYnZlYyA9IGt6YWxsb2Nfb2Jqcygqc3Zzay1cXHUwMDNlc2tfYnZlYywgc2VuZHBhZ2VzKTtcXG4xNDYwOlxcdFxcdFxcdGlmICghc3Zzay1cXHUwMDNlc2tfYnZlYykge1xcbjE0NjE6XFx0XFx0XFx0XFx0a2ZyZWUoc3Zzayk7XFxuMTQ2MjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4xNDYzOlxcdFxcdFxcdH1cXG4xNDY0OlxcdFxcdH1cXG4xNDY1OlxcdFxcbjE0NjY6XFx0XFx0c3Zzay1cXHUwMDNlc2tfbWF4cGFnZXMgPSBwYWdlcztcXG4xNDY3OlxcdFxcbjE0Njg6XFx0XFx0aW5ldCA9IHNvY2stXFx1MDAzZXNrO1xcbjE0Njk6XFx0XFxuMTQ3MDpcXHRcXHRpZiAocG1hcF9yZWdpc3Rlcikge1xcbjE0NzE6XFx0XFx0XFx0aW50IGVycjtcXG4xNDcyOlxcdFxcbjE0NzM6XFx0XFx0XFx0ZXJyID0gc3ZjX3JlZ2lzdGVyKHNlcnYsIHNvY2tfbmV0KHNvY2stXFx1MDAzZXNrKSwgaW5ldC1cXHUwMDNlc2tfZmFtaWx5LFxcbjE0NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICBpbmV0LVxcdTAwM2Vza19wcm90b2NvbCxcXG4xNDc1OlxcdFxcdFxcdFxcdFxcdCAgICAgbnRvaHMoaW5ldF9zayhpbmV0KS1cXHUwMDNlaW5ldF9zcG9ydCkpO1xcbjE0NzY6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4xNDc3OlxcdFxcdFxcdFxcdGtmcmVlKHN2c2stXFx1MDAzZXNrX2J2ZWMpO1xcbjE0Nzg6XFx0XFx0XFx0XFx0a2ZyZWUoc3Zzayk7XFxuMTQ3OTpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjE0ODA6XFx0XFx0XFx0fVxcbjE0ODE6XFx0XFx0fVxcbjE0ODI6XFx0XFxuMTQ4MzpcXHRcXHRzdnNrLVxcdTAwM2Vza19zb2NrID0gc29jaztcXG4xNDg0OlxcdFxcdHN2c2stXFx1MDAzZXNrX3NrID0gaW5ldDtcXG4xNDg1OlxcdFxcdHN2c2stXFx1MDAzZXNrX29zdGF0ZSA9IGluZXQtXFx1MDAzZXNrX3N0YXRlX2NoYW5nZTtcXG4xNDg2OlxcdFxcdHN2c2stXFx1MDAzZXNrX29kYXRhID0gaW5ldC1cXHUwMDNlc2tfZGF0YV9yZWFkeTtcXG4xNDg3OlxcdFxcdHN2c2stXFx1MDAzZXNrX293c3BhY2UgPSBpbmV0LVxcdTAwM2Vza193cml0ZV9zcGFjZTtcXG4xNDg4OlxcdFxcdC8qXFxuMTQ4OTpcXHRcXHQgKiBUaGlzIGJhcnJpZXIgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25cXG4xNDkwOlxcdFxcdCAqIHdpdGggc3ZjX2RhdGFfcmVhZHkoKSwgc3ZjX3RjcF9saXN0ZW5fZGF0YV9yZWFkeSgpLCBhbmQgb3RoZXJzXFxuMTQ5MTpcXHRcXHQgKiB3aGVuIGNhbGxpbmcgY2FsbGJhY2tzIGFib3ZlLlxcbjE0OTI6XFx0XFx0ICovXFxuMTQ5MzpcXHRcXHR3bWIoKTtcXG4xNDk0OlxcdFxcdGluZXQtXFx1MDAzZXNrX3VzZXJfZGF0YSA9IHN2c2s7XFxuMTQ5NTpcXHRcXG4xNDk2OlxcdFxcdC8qIEluaXRpYWxpemUgdGhlIHNvY2tldCAqL1xcbjE0OTc6XFx0XFx0aWYgKHNvY2stXFx1MDAzZXR5cGUgPT0gU09DS19ER1JBTSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6NDMuNDA3NTU2Mjk4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODA5ODUxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBpcyBLQVNBTiB0ZXJyaXRvcnkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoYXQgYHN2Y19hZGRzb2NrYCBmdW5jdGlvbi4uLiBpdCdzIGRvaW5nIGEgY2hlY2ssIGFuZCBpdCdzIGEgY3JpdGljYWwgb25lLiBJZiBgc28tXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhYCBpcyBhbHJlYWR5IHNldCwgaXQgYmFpbHMgb3V0IHdpdGggYC1FQlVTWWAuIFRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBgc3ZjX3NldHVwX3NvY2tldGAgd2FzIG92ZXJ3cml0aW5nIHRoaXMsIHdoaWNoIHdvdWxkIGFic29sdXRlbHkgc3RvbXAgb24gd2hhdGV2ZXIgZGF0YSBvciBzdWJzeXN0ZW0gd2FzICphbHJlYWR5KiB1c2luZyB0aGF0IGBza191c2VyX2RhdGFgIGZpZWxkLCBsZWFkaW5nIHRvIGEgY2xhc3NpYyBVQUYgb3IsIHdvcnNlLCBhcmJpdHJhcnkgcG9pbnRlciBvciBtZW1vcnkgY29ycnVwdGlvbi4gTmFzdHkuIFRoYXQgYC1FQlVTWWAgY2hlY2sgaXMgYSBjcnVjaWFsIHNhZmVndWFyZC5cblxuU28sIHdoZXJlIGRvZXMgdGhpcyBidWcgc2l0IG9uIHRoZSBzcGVjdHJ1bSBvZiBtZW1vcnkgc2FmZXR5IHRvb2xzPyBMZXQncyB0aWNrIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLiBEb2VzIGl0IGNyZWF0ZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBicmFuY2hpbmcgaW50cm9kdWNlZD8gQWxzbyBuby4gQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTmVnYXRpdmUuIEFyZSBhbnkgYm91bmRzIGNoZWNrcyBhbHRlcmVkIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vdCBpbiB0aGlzIGNhc2UuXG5cbldoYXQncyBoYXBwZW5pbmcgaGVyZSBpcyB0aGUgcHJldmVudGlvbiBvZiBhIHNvY2tldCBmcm9tIGJlaW5nIHJldXNlZCwgb3IgYSB1c2UtYWZ0ZXItZnJlZSwgb3IgYHNrX3VzZXJfZGF0YWAgYmVpbmcgb3ZlcndyaXR0ZW4gLSBpdCdzIGRpcmVjdGx5IGxlYWRpbmcgdG8gdHlwZSBjb25mdXNpb24sIFVBRiwgYW5kIGRhdGEgY29ycnVwdGlvbi4gVGhhdCdzICp0ZXh0Ym9vayogS0FTQU4gdGVycml0b3J5LiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIG1lbW9yeSBzYWZldHkgaXNzdWVzIEtBU0FOIGlzIGJ1aWx0IHRvIGZpbmQuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgbm8gbmV3IGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIGFib3V0IGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIG1pc3VzZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgY2xlYXJseSBgZmFsc2VgLlxuXG5IZXJlJ3MgbXkgcmF0aW9uYWxlIGZvciB0aGUgY2hhbmdlOlxuVGhlIHBhdGNoIGluc2VydHMgYSBjaGVjayB3aXRoaW4gYHN2Y19hZGRzb2NrKClgLiAgVGhpcyByZXR1cm5zIGAtRUJVU1lgIGlmIHRoZSBzb2NrZXQgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBwYXJ0IG9mIHRoZSBzeXN0ZW0gb3IgYW4gUlBDIHNlcnZpY2UsIGFuZCB0aGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIGBza191c2VyX2RhdGFgLiBQcmV2ZW50aW5nIHRoaXMgaXMgdGhlICprZXkqIGhlcmUuICBPdmVyd3JpdGluZyBgc2tfdXNlcl9kYXRhYCBjb3VsZCBsZWFkIHRvIHR5cGUgY29uZnVzaW9uLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBvdXRyaWdodCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggaXMgYXZvaWRlZCBoZXJlLlxuXG5Dcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgb3IgdXNlci1zcGFjZSBpbmZvIGxlYWtzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgKnRoaXMqIGNoYW5nZS4gVGhlIHBvdGVudGlhbCBwcm9ibGVtcyBoZXJlLCBhcmUgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9ucyBvciBtaXN1c2Ugb2YgdGhlIHNvY2tldCBzdGF0ZSwgYW5kIHRoYXQgc29ydCBvZiBzdHVmZiBpcyB2ZXJ5IHdlbGwgaGFuZGxlZCBieSBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuICBObyBuZWVkIGZvciBhbnkgc3BlY2lhbCBLTVNBTiBmdXp6aW5nLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjMsIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MDk6NDkuMTg4NTQ4MzgyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBzdmNfYWRkc29jaygpIHRvIGVuc3VyZSBzby1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSBpcyBOVUxMIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggc3ZjX3NldHVwX3NvY2tldCgpLCByZXR1cm5pbmcgLUVCVVNZIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlLiBUaGlzIHByZXZlbnRzIG92ZXJ3cml0aW5nIHNrX3VzZXJfZGF0YSBhbmQgc29ja2V0IGNhbGxiYWNrcyB3aGVuIGEgc29ja2V0IGlzIGFscmVhZHkgb3duZWQsIHByZXZlbnRpbmcgdHlwZSBjb25mdXNpb24gYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZy9zdHJ1Y3QgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbG9naWMuIEFueSBtZW1vcnkgYnVncyBpbiB0aGlzIHBhdGggYXJlIHVzZS1hZnRlci1mcmVlIG9yIHN0YXRlIGNvcnJ1cHRpb24gaXNzdWVzIGNhdWdodCBieSBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqb55s[1] Phase: Succeeded StartedAt: 2026-09-03 14:10:01 +0000 UTC FinishedAt: 2026-09-03 14:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 14:10:01 +0000 UTC FinishedAt: 2026-09-03 14:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2] Phase: Succeeded StartedAt: 2026-09-03 14:10:01 +0000 UTC FinishedAt: 2026-09-03 15:40:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 14:10:01 +0000 UTC FinishedAt: 2026-09-03 15:40:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 14:10:01 +0000 UTC FinishedAt: 2026-09-03 14:10:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 14:10:01 +0000 UTC FinishedAt: 2026-09-03 14:10:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqb55s/series-workflowqb55s-convert-artifact-1404682933/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 14:10:11 +0000 UTC FinishedAt: 2026-09-03 14:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 14:10:11 +0000 UTC FinishedAt: 2026-09-03 14:27:03 +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:*10ffd47c-3d86-475a-9120-c997a8d873ba,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-workflowqb55s/series-workflowqb55s-convert-artifact-1404682933/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": "8b0766a4-45ad-43cd-a472-e852b61b843e", "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-workflowqb55s/series-workflowqb55s-build-action-2837937819/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 14:10:11 +0000 UTC FinishedAt: 2026-09-03 14:26:53 +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:*10ffd47c-3d86-475a-9120-c997a8d873ba,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-workflowqb55s/series-workflowqb55s-convert-artifact-1404682933/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": "8b0766a4-45ad-43cd-a472-e852b61b843e", "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-workflowqb55s/series-workflowqb55s-build-action-2837937819/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 14:27:03 +0000 UTC FinishedAt: 2026-09-03 14:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 14:27:03 +0000 UTC FinishedAt: 2026-09-03 14:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 14:27:03 +0000 UTC FinishedAt: 2026-09-03 14:27:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 14:27:03 +0000 UTC FinishedAt: 2026-09-03 14:27:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqb55s/series-workflowqb55s-convert-artifact-1020846352/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 14:27:13 +0000 UTC FinishedAt: 2026-09-03 14:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 14:27:13 +0000 UTC FinishedAt: 2026-09-03 14:29:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8b0766a4-45ad-43cd-a472-e852b61b843e,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-workflowqb55s/series-workflowqb55s-build-action-2837937819/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-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 14:29:12 +0000 UTC FinishedAt: 2026-09-03 14:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 14:29:12 +0000 UTC FinishedAt: 2026-09-03 14:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 14:29:12 +0000 UTC FinishedAt: 2026-09-03 14:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 14:29:12 +0000 UTC FinishedAt: 2026-09-03 14:45:22 +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:*10ffd47c-3d86-475a-9120-c997a8d873ba,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-workflowqb55s/series-workflowqb55s-convert-artifact-1020846352/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": "8826d148-ee14-40c5-a705-c1b1a8f8d1fc", "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-workflowqb55s/series-workflowqb55s-build-action-1331617164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 14:29:12 +0000 UTC FinishedAt: 2026-09-03 14:45:12 +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:*10ffd47c-3d86-475a-9120-c997a8d873ba,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-workflowqb55s/series-workflowqb55s-convert-artifact-1020846352/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": "8826d148-ee14-40c5-a705-c1b1a8f8d1fc", "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-workflowqb55s/series-workflowqb55s-build-action-1331617164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 14:45:22 +0000 UTC FinishedAt: 2026-09-03 14:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 14:45:22 +0000 UTC FinishedAt: 2026-09-03 14:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 14:45:22 +0000 UTC FinishedAt: 2026-09-03 14:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 14:45:22 +0000 UTC FinishedAt: 2026-09-03 14:47:03 +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:*8826d148-ee14-40c5-a705-c1b1a8f8d1fc,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-workflowqb55s/series-workflowqb55s-build-action-1331617164/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-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 14:47:13 +0000 UTC FinishedAt: 2026-09-03 15:40:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 14:47:13 +0000 UTC FinishedAt: 2026-09-03 15:40:42 +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":["svc_addsock","__write_ports_addfd"],"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:*8b0766a4-45ad-43cd-a472-e852b61b843e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8826d148-ee14-40c5-a705-c1b1a8f8d1fc,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-workflowqb55s/series-workflowqb55s-build-action-2837937819/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-workflowqb55s/series-workflowqb55s-build-action-1331617164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 14:47:13 +0000 UTC FinishedAt: 2026-09-03 14:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 14:47:13 +0000 UTC FinishedAt: 2026-09-03 14:47:36 +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":["svc_addsock","__write_ports_addfd"],"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-workflowqb55s/series-workflowqb55s-convert-artifact-3137130505/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 14:47:13 +0000 UTC FinishedAt: 2026-09-03 14:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 14:47:13 +0000 UTC FinishedAt: 2026-09-03 14:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 14:47:13 +0000 UTC FinishedAt: 2026-09-03 14:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 14:47:43 +0000 UTC FinishedAt: 2026-09-03 15:40:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqb55s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_addsock","__write_ports_addfd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"3bf08b66-cf4f-4b47-a71f-cf672709d3b3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 14:47:43 +0000 UTC FinishedAt: 2026-09-03 15:40:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8b0766a4-45ad-43cd-a472-e852b61b843e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8826d148-ee14-40c5-a705-c1b1a8f8d1fc,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-workflowqb55s/series-workflowqb55s-build-action-2837937819/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-workflowqb55s/series-workflowqb55s-build-action-1331617164/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-workflowqb55s/series-workflowqb55s-convert-artifact-3137130505/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,}