Name: series-workflowwljtl Phase: Succeeded StartedAt: 2026-07-16 17:49:29 +0000 UTC FinishedAt: 2026-07-16 22:26:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[0] Phase: Succeeded StartedAt: 2026-07-16 17:49:29 +0000 UTC FinishedAt: 2026-07-16 18:01:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 17:49:29 +0000 UTC FinishedAt: 2026-07-16 18:01:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "DIBS", "DIBS_LO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "DIBS", "DIBS_LO" ], "series_id": "52d744d5-f930-4ea9-b5e6-7d4822d3832a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_cdc_msg_recv_action", "smcd_cdc_rx_tsklet", "smc_cdc_rx_handler", "__smc_buf_create", "smcd_buf_attach" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfY2RjX21zZ19yZWN2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtzbWNkX2NkY19yeF90c2tsZXQmIzM0OywKICAgICYjMzQ7c21jX2NkY19yeF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O19fc21jX2J1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jZF9idWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGFkZHMgbWVtb3J5IGJhcnJpZXJzIChzbXBfbG9hZF9hY3F1aXJlIGFuZCBzbXBfc3RvcmVfcmVsZWFzZSkgdG8gcHJldmVudCBjb25jdXJyZW50IENEQyAoQ29ubmVjdGlvbiBEYXRhIENvbnRyb2wpIHJlY2VpdmUgaGFuZGxlcnMgZnJvbSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKHNuZGJ1Zl9kZXNjIGFuZCBybWJfZGVzYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFNNQyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGxvb3BiYWNrIElTTSBkZXZpY2UgKFNNQy1EKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgwYWNkMjkzNTBkMWI4MzYyZjVlNWFmMzM5MWUzMWRmMDIyZmRhYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxODowMDowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jZGMuYyBiL25ldC9zbWMvc21jX2NkYy5jXG5pbmRleCAzMmQ2ZDAzZGYzMjE0NS4uZWE2MWIxZTc1YzcyY2YgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jZGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY2RjLmNcbkBAIC0zMzIsOCAmIzQzOzMzMiwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbiB7XG4gXHR1bmlvbiBzbWNfaG9zdF9jdXJzb3IgY29uc19vbGQsIHByb2Rfb2xkO1xuIFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXHUwMDI2c21jLVx1MDAzZWNvbm47XG4mIzQzO1x0c3RydWN0IHNtY19idWZfZGVzYyAqc25kYnVmX2Rlc2M7XG4gXHRpbnQgZGlmZl9jb25zLCBkaWZmX3Byb2QsIGRpZmZfdHg7XG4gXG4mIzQzO1x0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG4mIzQzO1x0ICogX19zbWNfYnVmX2NyZWF0ZSgpL3NtY2RfYnVmX2F0dGFjaCgpLiAgT24gdGhlIFNNQy1EIERNQi1ub2NvcHkgcGF0aFxuJiM0MztcdCAqIHRoZSBnaG9zdCBzbmRidWZfZGVzYyBpcyBhdHRhY2hlZCBvbmx5IGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHlcbiYjNDM7XHQgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeVxuJiM0MztcdCAqIHNuZGJ1Zl9kZXNjIGNvbnN1bWVyIGJlbG93ICh0aGUgbm9jb3B5IGFjY291bnRpbmcgYW5kIHRoZSBzbmRidWZcbiYjNDM7XHQgKiBjb25zdW1lciB0cmlnZ2VyLCB3aGljaCBkZXJlZmVyZW5jZXMgaXQgdmlhIHNtY190eF9wcmVwYXJlZF9zZW5kcygpKVxuJiM0MztcdCAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhblxuJiM0MztcdCAqIHVuaW5pdGlhbGlzZWQgYnVmZmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjKTtcbiYjNDM7XG4gXHRzbWNfY3Vyc19jb3B5KFx1MDAyNnByb2Rfb2xkLCBcdTAwMjZjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZCwgY29ubik7XG4gXHRzbWNfY3Vyc19jb3B5KFx1MDAyNmNvbnNfb2xkLCBcdTAwMjZjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwuY29ucywgY29ubik7XG4gXHRzbWNfY2RjX21zZ190b19ob3N0KFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybCwgY2RjLCBjb25uKTtcbkBAIC0zNTEsMTQgJiM0MzszNjMsMTcgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXG4gXHRcdC8qIGlmIGxvY2FsIHNuZGJ1ZiBzaGFyZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiB3aXRoXG4gXHRcdCAqIHBlZXIgUk1CLCB0aGVuIHVwZGF0ZSB0eF9jdXJzX2ZpbiBhbmQgc25kYnVmX3NwYWNlXG4tXHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS5cbiYjNDM7XHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS4gIFRoZSBnaG9zdFxuJiM0MztcdFx0ICogc25kYnVmX2Rlc2MgKGFjcXVpcmVkIGFib3ZlKSBtYXkgc3RpbGwgYmUgdW5zZXQgaW4gdGhlIFNNQy1EXG4mIzQzO1x0XHQgKiBETUItbm9jb3B5IHNldHVwIHdpbmRvdywgc28gc2tpcCB0aGUgdXBkYXRlIHdoaWxlIGl0IGlzIE5VTEwuXG4gXHRcdCAqL1xuIFx0XHRpZiAoY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXHUwMDNlbGdyLVx1MDAzZXNtY2QpKSB7XG4mIzQzO1x0XHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgc25kYnVmX2Rlc2MpIHtcbiBcdFx0XHQvKiBDYWxjdWxhdGUgY29uc3VtZWQgZGF0YSBhbmRcbiBcdFx0XHQgKiBpbmNyZW1lbnQgZnJlZSBzZW5kIGJ1ZmZlciBzcGFjZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRkaWZmX3R4ID0gc21jX2N1cnNfZGlmZihjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0ZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoc25kYnVmX2Rlc2MtXHUwMDNlbGVuLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNvbm4tXHUwMDNldHhfY3Vyc19maW4sXG4gXHRcdFx0XHRcdFx0XHUwMDI2Y29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLmNvbnMpO1xuIFx0XHRcdC8qIGluY3JlYXNlIGxvY2FsIHNuZGJ1ZiBzcGFjZSBhbmQgZmluX2N1cnMgKi9cbkBAIC0zOTEsMTAgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXHRcdFx0Y29ubi1cdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDtcbiBcdH1cbiBcbi1cdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMgKi9cbi1cdGlmICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4tXHQgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbi1cdCAgICBjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0LyogdHJpZ2dlciBzbmRidWYgY29uc3VtZXI6IFJETUEgd3JpdGUgaW50byBwZWVyIFJNQkUgYW5kIENEQy5cbiYjNDM7XHQgKiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSBhbmQgc21jX3R4X3BlbmRpbmcoKSBkZXJlZmVyZW5jZSBzbmRidWZfZGVzYyxcbiYjNDM7XHQgKiBzbyBza2lwIHRoZSB3aG9sZSB0cmlnZ2VyIHdoaWxlIGl0IGlzIHVuc2V0ICh0aGUgU01DLUQgRE1CLW5vY29weVxuJiM0MztcdCAqIHNldHVwIHdpbmRvdyk6IHRoZXJlIGlzIG5vdGhpbmcgdG8gc2VuZCB3aXRob3V0IGEgc2VuZCBidWZmZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNuZGJ1Zl9kZXNjIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoKGRpZmZfY29ucyBcdTAwMjZcdTAwMjYgc21jX3R4X3ByZXBhcmVkX3NlbmRzKGNvbm4pKSB8fFxuJiM0MztcdCAgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbiYjNDM7XHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLnVyZ19kYXRhX3BlbmRpbmcpKSB7XG4gXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKFx1MDAyNnNtYy1cdTAwM2VzaykpXG4gXHRcdFx0c21jX3R4X3BlbmRpbmcoY29ubik7XG4gXHRcdGVsc2VcbkBAIC00NDMsMTMgJiM0Mzs0NjMsMjEgQEAgc3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbiB7XG4gXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBmcm9tX3Rhc2tsZXQoY29ubiwgdCwgcnhfdHNrbGV0KTtcbiBcdHN0cnVjdCBzbWNkX2NkY19tc2cgKmRhdGFfY2RjO1xuJiM0MztcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnJtYl9kZXNjO1xuIFx0c3RydWN0IHNtY2RfY2RjX21zZyBjZGM7XG4gXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYztcbiBcbiBcdGlmICghY29ubiB8fCBjb25uLVx1MDAzZWtpbGxlZClcbiBcdFx0cmV0dXJuO1xuJiM0MztcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cbiYjNDM7XHQgKiBpcyBwdWJsaXNoZWQgYmVmb3JlIGl0cyBSTUIgaXMgYWxsb2NhdGVkLCBzbyBiYWlsIHdoaWxlIHJtYl9kZXNjIGlzXG4mIzQzO1x0ICogdW5zZXQgdG8gYXZvaWQgYSBOVUxMIGRlcmVmIGFuZCBhIGxvYWQgb2YgYW4gdW5pbml0aWFsaXNlZCBidWZmZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0cm1iX2Rlc2MgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MpO1xuJiM0MztcdGlmICghcm1iX2Rlc2MpXG4mIzQzO1x0XHRyZXR1cm47XG4gXG4tXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopY29ubi1cdTAwM2VybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbiYjNDM7XHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopcm1iX2Rlc2MtXHUwMDNlY3B1X2FkZHI7XG4gXHRzbWNkX2N1cnNfY29weShcdTAwMjZjZGMucHJvZCwgXHUwMDI2ZGF0YV9jZGMtXHUwMDNlcHJvZCwgY29ubik7XG4gXHRzbWNkX2N1cnNfY29weShcdTAwMjZjZGMuY29ucywgXHUwMDI2ZGF0YV9jZGMtXHUwMDNlY29ucywgY29ubik7XG4gXHRzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbkBAIC00ODMsNyAmIzQzOzUxMSwxMSBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKVxuIFx0bGdyID0gc21jX2dldF9sZ3IobGluayk7XG4gXHRyZWFkX2xvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuIFx0Y29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy1cdTAwM2V0b2tlbiksIGxncik7XG4tXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VvdXRfb2Zfc3luYykge1xuJiM0MztcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcbiYjNDM7XHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXG4mIzQzO1x0ICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFjb25uIHx8IGNvbm4tXHUwMDNlb3V0X29mX3N5bmMgfHwgIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYykpIHtcbiBcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCBjZjZiNjIwZmVmMDVmOS4uMDU2MWY4M2JlMzI3YjcgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTI0OTksMTUgJiM0MzsyNDk5LDI2IEBAIHN0YXRpYyBpbnQgX19zbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkLCBib29sIGlzX3JtYilcbiBcdH1cbiBcbiBcdGlmIChpc19ybWIpIHtcbi1cdFx0Y29ubi1cdTAwM2VybWJfZGVzYyA9IGJ1Zl9kZXNjO1xuIFx0XHRjb25uLVx1MDAzZXJtYmVfc2l6ZV9jb21wID0gYnVmc2l6ZV9jb21wO1xuIFx0XHRzbWMtXHUwMDNlc2suc2tfcmN2YnVmID0gYnVmc2l6ZSAqIDI7XG4gXHRcdGF0b21pY19zZXQoXHUwMDI2Y29ubi1cdTAwM2VieXRlc190b19yY3YsIDApO1xuIFx0XHRjb25uLVx1MDAzZXJtYmVfdXBkYXRlX2xpbWl0ID1cbiBcdFx0XHRzbWNfcm1iX3duZF91cGRhdGVfbGltaXQoYnVmX2Rlc2MtXHUwMDNlbGVuKTtcbiYjNDM7XHRcdC8qIFB1Ymxpc2ggdGhlIHJlY2VpdmUgYnVmZmVyIGxhc3QsIHdpdGggcmVsZWFzZSBzZW1hbnRpY3M6IHRoZVxuJiM0MztcdFx0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBsaW5rIGdyb3VwJiMzOTtzIHRva2VuIHRyZWUsIHNvIGFcbiYjNDM7XHRcdCAqIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBtdXN0IG9ic2VydmUgdGhlIGZ1bGx5XG4mIzQzO1x0XHQgKiBpbml0aWFsaXNlZCByZWNlaXZlIHN0YXRlIGFib3ZlIChhbmQgdGhlIGJ1ZmZlcikgb25jZSBpdCBzZWVzXG4mIzQzO1x0XHQgKiBhIG5vbi1OVUxMIHJtYl9kZXNjLiAgUGFpcnMgd2l0aCB0aGUgc21wX2xvYWRfYWNxdWlyZSgpIGluIHRoZVxuJiM0MztcdFx0ICogQ0RDIHJlY2VpdmUgcGF0aC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYywgYnVmX2Rlc2MpO1xuIFx0XHRpZiAoaXNfc21jZClcbiBcdFx0XHRzbWNfaXNtX3NldF9jb25uKGNvbm4pOyAvKiBtYXAgUk1CL3NtY2RfZGV2IHRvIGNvbm4gKi9cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBQbGFpbiBzdG9yZTogdGhpcyBzZW5kLWJ1ZmZlciBwYXNzIHJ1bnMgYmVmb3JlIHRoZSBSTUIgcGFzcyxcbiYjNDM7XHRcdCAqIHdob3NlIHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MpIHRoZW4gcHVibGlzaGVzIHRoaXNcbiYjNDM7XHRcdCAqIHN0b3JlIHRvbywgYW5kIHRoZSBDREMgcmVjZWl2ZSBwYXRoIGlzIGdhdGVkIG9uIHJtYl9kZXNjLlxuJiM0MztcdFx0ICovXG4gXHRcdGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MgPSBidWZfZGVzYztcbiBcdFx0c21jLVx1MDAzZXNrLnNrX3NuZGJ1ZiA9IGJ1ZnNpemUgKiAyO1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlc25kYnVmX3NwYWNlLCBidWZzaXplKTtcbkBAIC0yNTk5LDkgJiM0MzsyNjEwLDE2IEBAIGludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpXG4gXHRidWZfZGVzYy1cdTAwM2VjcHVfYWRkciA9XG4gXHRcdCh1OCAqKWJ1Zl9kZXNjLVx1MDAzZWNwdV9hZGRyICYjNDM7IHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTtcbiBcdGJ1Zl9kZXNjLVx1MDAzZWxlbiAtPSBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XG4tXHRjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7XG4tXHRjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLVx1MDAzZXVzZWQgPSAxO1xuLVx0YXRvbWljX3NldChcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9zcGFjZSwgY29ubi1cdTAwM2VzbmRidWZfZGVzYy1cdTAwM2VsZW4pO1xuJiM0MztcdGJ1Zl9kZXNjLVx1MDAzZXVzZWQgPSAxO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfc3BhY2UsIGJ1Zl9kZXNjLVx1MDAzZWxlbik7XG4mIzQzO1x0LyogUHVibGlzaCB0aGUgZ2hvc3Qgc2VuZCBidWZmZXIgbGFzdCwgd2l0aCByZWxlYXNlIHNlbWFudGljczogdGhlXG4mIzQzO1x0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSAoc21jX2lzbV9zZXRfY29ubigpXG4mIzQzO1x0ICogcmFuIGluIF9fc21jX2J1Zl9jcmVhdGUoKSksIHNvIHRoZSBDREMgcmVjZWl2ZSB0YXNrbGV0IG11c3Qgb2JzZXJ2ZVxuJiM0MztcdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcbiYjNDM7XHQgKiBzbmRidWZfZGVzYy4gIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluXG4mIzQzO1x0ICogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLCBidWZfZGVzYyk7XG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfY2RjX21zZ19yZWN2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtzbWNkX2NkY19yeF90c2tsZXQmIzM0OywKICAgICYjMzQ7c21jX2NkY19yeF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O19fc21jX2J1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jZF9idWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGFkZHMgbWVtb3J5IGJhcnJpZXJzIChzbXBfbG9hZF9hY3F1aXJlIGFuZCBzbXBfc3RvcmVfcmVsZWFzZSkgdG8gcHJldmVudCBjb25jdXJyZW50IENEQyAoQ29ubmVjdGlvbiBEYXRhIENvbnRyb2wpIHJlY2VpdmUgaGFuZGxlcnMgZnJvbSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKHNuZGJ1Zl9kZXNjIGFuZCBybWJfZGVzYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFNNQyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGxvb3BiYWNrIElTTSBkZXZpY2UgKFNNQy1EKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODBhY2QyOTM1MGQxYjgzNjJmNWU1YWYzMzkxZTMxZGYwMjJmZGFhYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDE4OjAwOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY2RjLmMgYi9uZXQvc21jL3NtY19jZGMuYwppbmRleCAzMmQ2ZDAzZGYzMjE0NS4uZWE2MWIxZTc1YzcyY2YgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NkYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NkYy5jCkBAIC0zMzIsOCAmIzQzOzMzMiwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYywKIHsKIAl1bmlvbiBzbWNfaG9zdF9jdXJzb3IgY29uc19vbGQsIHByb2Rfb2xkOwogCXN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9ICZhbXA7c21jLSZndDtjb25uOwomIzQzOwlzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpzbmRidWZfZGVzYzsKIAlpbnQgZGlmZl9jb25zLCBkaWZmX3Byb2QsIGRpZmZfdHg7CiAKJiM0MzsJLyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluCiYjNDM7CSAqIF9fc21jX2J1Zl9jcmVhdGUoKS9zbWNkX2J1Zl9hdHRhY2goKS4gIE9uIHRoZSBTTUMtRCBETUItbm9jb3B5IHBhdGgKJiM0MzsJICogdGhlIGdob3N0IHNuZGJ1Zl9kZXNjIGlzIGF0dGFjaGVkIG9ubHkgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgYWxyZWFkeQomIzQzOwkgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeQomIzQzOwkgKiBzbmRidWZfZGVzYyBjb25zdW1lciBiZWxvdyAodGhlIG5vY29weSBhY2NvdW50aW5nIGFuZCB0aGUgc25kYnVmCiYjNDM7CSAqIGNvbnN1bWVyIHRyaWdnZXIsIHdoaWNoIGRlcmVmZXJlbmNlcyBpdCB2aWEgc21jX3R4X3ByZXBhcmVkX3NlbmRzKCkpCiYjNDM7CSAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhbgomIzQzOwkgKiB1bmluaXRpYWxpc2VkIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CXNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2Nvbm4tJmd0O3NuZGJ1Zl9kZXNjKTsKJiM0MzsKIAlzbWNfY3Vyc19jb3B5KCZhbXA7cHJvZF9vbGQsICZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybC5wcm9kLCBjb25uKTsKIAlzbWNfY3Vyc19jb3B5KCZhbXA7Y29uc19vbGQsICZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybC5jb25zLCBjb25uKTsKIAlzbWNfY2RjX21zZ190b19ob3N0KCZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybCwgY2RjLCBjb25uKTsKQEAgLTM1MSwxNCAmIzQzOzM2MywxNyBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYywKIAogCQkvKiBpZiBsb2NhbCBzbmRidWYgc2hhcmVzIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gd2l0aAogCQkgKiBwZWVyIFJNQiwgdGhlbiB1cGRhdGUgdHhfY3Vyc19maW4gYW5kIHNuZGJ1Zl9zcGFjZQotCQkgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuCiYjNDM7CQkgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuICBUaGUgZ2hvc3QKJiM0MzsJCSAqIHNuZGJ1Zl9kZXNjIChhY3F1aXJlZCBhYm92ZSkgbWF5IHN0aWxsIGJlIHVuc2V0IGluIHRoZSBTTUMtRAomIzQzOwkJICogRE1CLW5vY29weSBzZXR1cCB3aW5kb3csIHNvIHNraXAgdGhlIHVwZGF0ZSB3aGlsZSBpdCBpcyBOVUxMLgogCQkgKi8KIAkJaWYgKGNvbm4tJmd0O2xnci0mZ3Q7aXNfc21jZCAmYW1wOyZhbXA7Ci0JCSAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLSZndDtsZ3ItJmd0O3NtY2QpKSB7CiYjNDM7CQkgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi0mZ3Q7bGdyLSZndDtzbWNkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgc25kYnVmX2Rlc2MpIHsKIAkJCS8qIENhbGN1bGF0ZSBjb25zdW1lZCBkYXRhIGFuZAogCQkJICogaW5jcmVtZW50IGZyZWUgc2VuZCBidWZmZXIgc3BhY2UuCiAJCQkgKi8KLQkJCWRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKGNvbm4tJmd0O3NuZGJ1Zl9kZXNjLSZndDtsZW4sCiYjNDM7CQkJZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoc25kYnVmX2Rlc2MtJmd0O2xlbiwKIAkJCQkJCSZhbXA7Y29ubi0mZ3Q7dHhfY3Vyc19maW4sCiAJCQkJCQkmYW1wO2Nvbm4tJmd0O2xvY2FsX3J4X2N0cmwuY29ucyk7CiAJCQkvKiBpbmNyZWFzZSBsb2NhbCBzbmRidWYgc3BhY2UgYW5kIGZpbl9jdXJzICovCkBAIC0zOTEsMTAgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsCiAJCQljb25uLSZndDt1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDsKIAl9CiAKLQkvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDICovCi0JaWYgKChkaWZmX2NvbnMgJmFtcDsmYW1wOyBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8Ci0JICAgIGNvbm4tJmd0O2xvY2FsX3J4X2N0cmwucHJvZF9mbGFncy5jb25zX2N1cnNfdXBkX3JlcSB8fAotCSAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MudXJnX2RhdGFfcGVuZGluZykgewomIzQzOwkvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDLgomIzQzOwkgKiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSBhbmQgc21jX3R4X3BlbmRpbmcoKSBkZXJlZmVyZW5jZSBzbmRidWZfZGVzYywKJiM0MzsJICogc28gc2tpcCB0aGUgd2hvbGUgdHJpZ2dlciB3aGlsZSBpdCBpcyB1bnNldCAodGhlIFNNQy1EIERNQi1ub2NvcHkKJiM0MzsJICogc2V0dXAgd2luZG93KTogdGhlcmUgaXMgbm90aGluZyB0byBzZW5kIHdpdGhvdXQgYSBzZW5kIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CWlmIChzbmRidWZfZGVzYyAmYW1wOyZhbXA7CiYjNDM7CSAgICAoKGRpZmZfY29ucyAmYW1wOyZhbXA7IHNtY190eF9wcmVwYXJlZF9zZW5kcyhjb25uKSkgfHwKJiM0MzsJICAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHwKJiM0MzsJICAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MudXJnX2RhdGFfcGVuZGluZykpIHsKIAkJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoJmFtcDtzbWMtJmd0O3NrKSkKIAkJCXNtY190eF9wZW5kaW5nKGNvbm4pOwogCQllbHNlCkBAIC00NDMsMTMgJiM0Mzs0NjMsMjEgQEAgc3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKIHsKIAlzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBmcm9tX3Rhc2tsZXQoY29ubiwgdCwgcnhfdHNrbGV0KTsKIAlzdHJ1Y3Qgc21jZF9jZGNfbXNnICpkYXRhX2NkYzsKJiM0MzsJc3RydWN0IHNtY19idWZfZGVzYyAqcm1iX2Rlc2M7CiAJc3RydWN0IHNtY2RfY2RjX21zZyBjZGM7CiAJc3RydWN0IHNtY19zb2NrICpzbWM7CiAKIAlpZiAoIWNvbm4gfHwgY29ubi0mZ3Q7a2lsbGVkKQogCQlyZXR1cm47CiYjNDM7CS8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb24KJiM0MzsJICogaXMgcHVibGlzaGVkIGJlZm9yZSBpdHMgUk1CIGlzIGFsbG9jYXRlZCwgc28gYmFpbCB3aGlsZSBybWJfZGVzYyBpcwomIzQzOwkgKiB1bnNldCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhbiB1bmluaXRpYWxpc2VkIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CXJtYl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2Nvbm4tJmd0O3JtYl9kZXNjKTsKJiM0MzsJaWYgKCFybWJfZGVzYykKJiM0MzsJCXJldHVybjsKIAotCWRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKiljb25uLSZndDtybWJfZGVzYy0mZ3Q7Y3B1X2FkZHI7CiYjNDM7CWRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKilybWJfZGVzYy0mZ3Q7Y3B1X2FkZHI7CiAJc21jZF9jdXJzX2NvcHkoJmFtcDtjZGMucHJvZCwgJmFtcDtkYXRhX2NkYy0mZ3Q7cHJvZCwgY29ubik7CiAJc21jZF9jdXJzX2NvcHkoJmFtcDtjZGMuY29ucywgJmFtcDtkYXRhX2NkYy0mZ3Q7Y29ucywgY29ubik7CiAJc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7CkBAIC00ODMsNyAmIzQzOzUxMSwxMSBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKQogCWxnciA9IHNtY19nZXRfbGdyKGxpbmspOwogCXJlYWRfbG9ja19iaCgmYW1wO2xnci0mZ3Q7Y29ubnNfbG9jayk7CiAJY29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy0mZ3Q7dG9rZW4pLCBsZ3IpOwotCWlmICghY29ubiB8fCBjb25uLSZndDtvdXRfb2Zfc3luYykgewomIzQzOwkvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IGJhaWwgd2hpbGUgdGhlCiYjNDM7CSAqIFJNQiBpcyB1bnNldCAoc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBkZXJlZmVyZW5jZXMgaXQpIHRvIGF2b2lkIGEKJiM0MzsJICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWNvbm4gfHwgY29ubi0mZ3Q7b3V0X29mX3N5bmMgfHwgIXNtcF9sb2FkX2FjcXVpcmUoJmFtcDtjb25uLSZndDtybWJfZGVzYykpIHsKIAkJcmVhZF91bmxvY2tfYmgoJmFtcDtsZ3ItJmd0O2Nvbm5zX2xvY2spOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jCmluZGV4IGNmNmI2MjBmZWYwNWY5Li4wNTYxZjgzYmUzMjdiNyAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuYwpAQCAtMjQ5OSwxNSAmIzQzOzI0OTksMjYgQEAgc3RhdGljIGludCBfX3NtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QsIGJvb2wgaXNfcm1iKQogCX0KIAogCWlmIChpc19ybWIpIHsKLQkJY29ubi0mZ3Q7cm1iX2Rlc2MgPSBidWZfZGVzYzsKIAkJY29ubi0mZ3Q7cm1iZV9zaXplX2NvbXAgPSBidWZzaXplX2NvbXA7CiAJCXNtYy0mZ3Q7c2suc2tfcmN2YnVmID0gYnVmc2l6ZSAqIDI7CiAJCWF0b21pY19zZXQoJmFtcDtjb25uLSZndDtieXRlc190b19yY3YsIDApOwogCQljb25uLSZndDtybWJlX3VwZGF0ZV9saW1pdCA9CiAJCQlzbWNfcm1iX3duZF91cGRhdGVfbGltaXQoYnVmX2Rlc2MtJmd0O2xlbik7CiYjNDM7CQkvKiBQdWJsaXNoIHRoZSByZWNlaXZlIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGUKJiM0MzsJCSAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBpbiB0aGUgbGluayBncm91cCYjMzk7cyB0b2tlbiB0cmVlLCBzbyBhCiYjNDM7CQkgKiBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgbXVzdCBvYnNlcnZlIHRoZSBmdWxseQomIzQzOwkJICogaW5pdGlhbGlzZWQgcmVjZWl2ZSBzdGF0ZSBhYm92ZSAoYW5kIHRoZSBidWZmZXIpIG9uY2UgaXQgc2VlcwomIzQzOwkJICogYSBub24tTlVMTCBybWJfZGVzYy4gIFBhaXJzIHdpdGggdGhlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0aGUKJiM0MzsJCSAqIENEQyByZWNlaXZlIHBhdGguCiYjNDM7CQkgKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7Y29ubi0mZ3Q7cm1iX2Rlc2MsIGJ1Zl9kZXNjKTsKIAkJaWYgKGlzX3NtY2QpCiAJCQlzbWNfaXNtX3NldF9jb25uKGNvbm4pOyAvKiBtYXAgUk1CL3NtY2RfZGV2IHRvIGNvbm4gKi8KIAl9IGVsc2UgewomIzQzOwkJLyogUGxhaW4gc3RvcmU6IHRoaXMgc2VuZC1idWZmZXIgcGFzcyBydW5zIGJlZm9yZSB0aGUgUk1CIHBhc3MsCiYjNDM7CQkgKiB3aG9zZSBzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2Nvbm4tJmd0O3JtYl9kZXNjKSB0aGVuIHB1Ymxpc2hlcyB0aGlzCiYjNDM7CQkgKiBzdG9yZSB0b28sIGFuZCB0aGUgQ0RDIHJlY2VpdmUgcGF0aCBpcyBnYXRlZCBvbiBybWJfZGVzYy4KJiM0MzsJCSAqLwogCQljb25uLSZndDtzbmRidWZfZGVzYyA9IGJ1Zl9kZXNjOwogCQlzbWMtJmd0O3NrLnNrX3NuZGJ1ZiA9IGJ1ZnNpemUgKiAyOwogCQlhdG9taWNfc2V0KCZhbXA7Y29ubi0mZ3Q7c25kYnVmX3NwYWNlLCBidWZzaXplKTsKQEAgLTI1OTksOSAmIzQzOzI2MTAsMTYgQEAgaW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYykKIAlidWZfZGVzYy0mZ3Q7Y3B1X2FkZHIgPQogCQkodTggKilidWZfZGVzYy0mZ3Q7Y3B1X2FkZHIgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpOwogCWJ1Zl9kZXNjLSZndDtsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpOwotCWNvbm4tJmd0O3NuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7Ci0JY29ubi0mZ3Q7c25kYnVmX2Rlc2MtJmd0O3VzZWQgPSAxOwotCWF0b21pY19zZXQoJmFtcDtjb25uLSZndDtzbmRidWZfc3BhY2UsIGNvbm4tJmd0O3NuZGJ1Zl9kZXNjLSZndDtsZW4pOwomIzQzOwlidWZfZGVzYy0mZ3Q7dXNlZCA9IDE7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtjb25uLSZndDtzbmRidWZfc3BhY2UsIGJ1Zl9kZXNjLSZndDtsZW4pOwomIzQzOwkvKiBQdWJsaXNoIHRoZSBnaG9zdCBzZW5kIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGUKJiM0MzsJICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSAoc21jX2lzbV9zZXRfY29ubigpCiYjNDM7CSAqIHJhbiBpbiBfX3NtY19idWZfY3JlYXRlKCkpLCBzbyB0aGUgQ0RDIHJlY2VpdmUgdGFza2xldCBtdXN0IG9ic2VydmUKJiM0MzsJICogdGhlIGZ1bGx5IGluaXRpYWxpc2VkIGdob3N0IGJ1ZmZlciBvbmNlIGl0IHNlZXMgYSBub24tTlVMTAomIzQzOwkgKiBzbmRidWZfZGVzYy4gIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluCiYjNDM7CSAqIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkuCiYjNDM7CSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2Nvbm4tJmd0O3NuZGJ1Zl9kZXNjLCBidWZfZGVzYyk7CiAJcmV0dXJuIDA7CiAKIGZyZWU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgU3luY2hyb25pemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCB0b3VjaGluZyBgbmV0L3NtYy9zbWNfY2RjLmNgIGFuZCBgbmV0L3NtYy9zbWNfY29yZS5jYC4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgc2xhcHBpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGFuZCBgc21wX3N0b3JlX3JlbGVhc2VgIG9udG8gdGhlIGBzbmRidWZfZGVzY2AgYW5kIGBybWJfZGVzY2AgcG9pbnRlcnMgd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYC4gUmlnaHQsIGEgc3luY2hyb25pemF0aW9uIGZpeCBmb3IgU01DIHNvY2tldHMuIFRoaXMgaXMgYSBjbGFzc2ljIOKAkyBwcmV2ZW50aW5nIHRob3NlIG5hc3R5IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIHRoYXQgcG9wIHVwIHdoZW4gYSBDREMgcmVjZWl2ZSBoYW5kbGVyIGdldHMgdG9vIGVhZ2VyIGFuZCB0cmllcyB0byBhY2Nlc3MgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIGV2ZXJ5dGhpbmcmIzM5O3MgcHJvcGVybHkgc2V0IHVwLgoKVGhlIGltcG9ydGFudCBxdWVzdGlvbiBub3csIGFzIGFsd2F5cywgaXMgdGVzdGFiaWxpdHkuIFRoaXMgdHlwZSBvZiBjb25jdXJyZW5jeSBpc3N1ZSBjYW4gYmUgdHJpY2t5IHRvIHRyaWdnZXIgcmVsaWFibHkuIENhbiBJIGV2ZW4gcmVwcm9kdWNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gU01DIGhhcyB0aG9zZSB0d28gZmxhdm9yczogU01DLVIgKFJETUEsIHJpZ2h0PykgYW5kIFNNQy1EIChJbnRlcm5hbCBTaGFyZWQgTWVtb3J5KS4gQW5kIFNNQy1EIGNhbiBsZXZlcmFnZSB0aGF0IGNvbnZlbmllbnQgbG9vcGJhY2sgSVNNIGRldmljZSwgdGhlIGBzbWNfbG9vcGJhY2tgLiBUaGF0JiMzOTtzIHRoZSBrZXkhIElmIEkgY2FuIGdldCB0aGF0IGBzbWNfbG9vcGJhY2tgIGdvaW5nIGluIFFFTVUgb3IgR0NFLCBJIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcywgZ2l2ZW4gdGhlIHJpZ2h0IHdvcmtsb2FkLgoKTm93IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IGNvbmZpZ3MuIE9idmlvdXNseSwgYENPTkZJR19TTUNgIGhhcyB0byBiZSBlbmFibGVkLiBJIG1pZ2h0IHdhbnQgYENPTkZJR19TTUNfRElBR2AgZm9yIGRlYnVnZ2luZy4gQnV0IGZvciB0ZXN0aW5nIHRoZSBsb29wYmFjaywgSSYjMzk7bGwgKmRlZmluaXRlbHkqIG5lZWQgYENPTkZJR19TTUNfTE9gLiBMZXQmIzM5O3MgZ2V0IGEgcXVpY2sgZ3JlcCBnb2luZyB0byBjaGVjayBvbiB0aG9zZSBTTUMgY29uZmlncyBhbmQgbWFrZSBzdXJlIEkmIzM5O20gc3RhcnRpbmcgZnJvbSBhIGNsZWFuIHNsYXRlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggb25lcyBhcmUgZW5hYmxlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBTdHJhdGVneTogSW52ZXN0aWdhdGluZyBMb3ctTGV2ZWwgQ29udHJvbCoqCgpBbHJpZ2h0LCB0aGUgcHJvYmxlbSYjMzk7cyBwcmVzZW50aW5nIGluIGEgd2F5IHRoYXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaXNzdWUgYXQgdGhlIGxvd2VyIGxldmVscyBvZiBjb250cm9sLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBTZXJpYWwgTW90b3IgQ29udHJvbGxlciYjMzk7cyBsb3ctbGV2ZWwgY29udHJvbCwgdGhlIHJlZ2lzdGVycyBhbmQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSBjb250cm9sLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlc2Ugc3lzdGVtcywgYFNNQ19MT2Agb3Igc29tZXRoaW5nIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGlzIGxpa2VseSB3aGVyZSB0aGUgcmVsZXZhbnQgcGFyYW1ldGVycyB0aGF0IGFyZSBjYXVzaW5nIHRoZSBwcm9ibGVtIHJlc2lkZSwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHdoZXJlIEkgY2FuIHNlZSB0aGUgZWZmZWN0cyBvZiBhIGxvd2VyLWxldmVsIGlzc3VlLCBzdWNoIGFzIHJlZ2lzdGVyIHZhbHVlcy4gSSB3YW50IHRvIGluc3BlY3QgdGhpbmdzIHRoYXQgYXJlIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgY29udHJvbCBsb29wcyBvciB0aGUgc2lnbmFsIHBhdGggb2YgdGhlIG1vdG9yIGNvbnRyb2xsZXIuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBjbHVlcyB0byB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgbW90b3IuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGxvb2tpbmcgZm9yIGFueXRoaW5nIGluIHRoZSBgU01DX0xPYCBhcmVhLCBvciB3aXRoaW4gYW55IGFsdGVybmF0aXZlIHN5c3RlbXMsIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQ19MTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM4MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNNQyBMb29wYmFjayBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIFNNQyBsb29wYmFjayBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgcHJvYmxlbSBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIGBuZXQvc21jL2AgZGlyZWN0b3J5IOKAkyB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb25zIChTTUMpIGltcGxlbWVudGF0aW9uIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBzbyB0aGUgbG9vcGJhY2sgZnVuY3Rpb25hbGl0eSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgaGFuZGxlZCB0aGVyZS4gTm93LCB0aGUga2V5IGtleXdvcmRzIHRvIGxvb2sgZm9yIGFyZSBgc21jX2xvb3BiYWNrYCBvciBwZXJoYXBzIGp1c3QgYFNNQ19MT2AuIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgdGhlc2UgYmVjYXVzZSBgc21jX2xvb3BiYWNrYCBzZWVtcyB0aGUgbW9zdCBleHBsaWNpdCwgYnV0IGBTTUNfTE9gIGlzIGEgY29tbW9uIGFiYnJldmlhdGlvbiBjb252ZW50aW9uIGluIGtlcm5lbCBjb2RlLCBzbyBpdCYjMzk7cyBhIHdvcnRod2hpbGUgYWx0ZXJuYXRpdmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzLCBsaWtlbHkgYGdyZXBgIG9yIGEgc2ltaWxhciB1dGlsaXR5LCB0byBlZmZpY2llbnRseSBuYXZpZ2F0ZSB0aGUgc291cmNlIHRyZWUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBmdW5jdGlvbiBuYW1lcywgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBvciBhbnkgY29tbWVudHMgdGhhdCBzcGVjaWZpY2FsbHkgbWVudGlvbiBsb29wYmFjaywgYW5kIGhvcGVmdWxseSBmaW5kIHRoZSBwaWVjZXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBsb2NhbCBjb21tdW5pY2F0aW9uIHBhdGggd2hlbiB0aGUgdXNlciBpbnRlbmRzIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHNhbWUgaG9zdC4gVGhpcyBjb3VsZCBpbnZvbHZlIGRpcmVjdCBtZW1vcnkgYWNjZXNzLCBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIG9yIGEgc3BlY2lhbCBuZXR3b3JrIGRldmljZSBhYnN0cmFjdGlvbi4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBzcGVjaWZpYyBgc3RydWN0YCBvciBgY2xhc3NgIHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIGxvb3BiYWNrJiMzOTtzIHByb3BlcnRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbG9vcGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc1MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkxvb2tpbmcgZm9yIHRoZSBSaWdodCBDb250ZXh0KioKCkhtbSwgd2hlcmUgZGlkIEkgbGFzdCBzZWUgdGhhdCBgc21jX2xvb3BiYWNrYCBmdW5jdGlvbiBtZW50aW9uZWQ/IEkgZmVlbCBsaWtlIGl0IGNvdWxkIGJlIGluIG9uZSBvZiB0aGUgbmV0d29ya2luZyBkaXJlY3RvcmllcywgcmlnaHQ/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBlaXRoZXIgYGRyaXZlcnMvczM5MC9uZXQvYCBvciBtYXliZSBqdXN0IHRoZSBnZW5lcmFsIGBkcml2ZXJzL25ldC9gIHBhdGguIExldCYjMzk7cyBzdGFydCB3aXRoIHRob3NlLiBBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YCBmdW5jdGlvbiB0b28uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTE0MTY9c3RhdGljIGludCBzbWNfY29ubmVjdF9pc20oc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNDY0LVxubmV0L3NtYy9hZl9zbWMuYzoxNDY1Olx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cdTAwM2Vjb25uLmxnci1cdTAwM2VzbWNkKSkge1xubmV0L3NtYy9hZl9zbWMuYy0xNDY2LVx0XHRyYyA9IHNtY2RfYnVmX2F0dGFjaChzbWMpO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjQ0OT1zdGF0aWMgdm9pZCBzbWNfbGlzdGVuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjU3Mi1cdGlmIChpbmktXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvYWZfc21jLmM6MjU3MzpcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShuZXdfc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXNtY2QpKSB7XG5uZXQvc21jL2FmX3NtYy5jLTI1NzQtXHRcdHJjID0gc21jZF9idWZfYXR0YWNoKG5ld19zbWMpO1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTIzNz1pbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTI1OS1cbm5ldC9zbWMvc21jX2NkYy5jOjI2MDpcdGlmIChzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVx1MDAzZWxnci1cdTAwM2VzbWNkKSlcbm5ldC9zbWMvc21jX2NkYy5jLTI2MS1cdFx0LyogaWYgbG9jYWwgc25kYnVmIHNoYXJlcyB0aGUgc2FtZSBtZW1vcnkgcmVnaW9uIHdpdGhcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMzcwLVx0XHRpZiAoY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2NkYy5jOjM3MTpcdFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXHUwMDNlbGdyLVx1MDAzZXNtY2QpIFx1MDAyNlx1MDAyNlxubmV0L3NtYy9zbWNfY2RjLmMtMzcyLVx0XHQgICAgc25kYnVmX2Rlc2MpIHtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTI1Mz12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjcyLVx0XHRcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjczOlx0XHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkobGdyLVx1MDAzZXNtY2QpKVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNzQtXHRcdFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xNTE1PXN0YXRpYyB2b2lkIHNtY19jb25uX2tpbGwoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLCBib29sIHNvZnQpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE1MjctXHRcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxNTI4Olx0XHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkpXG5uZXQvc21jL3NtY19jb3JlLmMtMTUyOS1cdFx0XHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1NjE9aW50IHNtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjYtXHRpZiAoaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2NvcmUuYzoyNTY3Olx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cdTAwM2Vjb25uLmxnci1cdTAwM2VzbWNkKSlcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY4LVx0XHRnb3RvIGNyZWF0ZV9ybWI7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmM9MjM1PWludCBzbWNfaXNtX3JlZ2lzdGVyX2RtYihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgaW50IGRtYl9sZW4sXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtMjU5LVxubmV0L3NtYy9zbWNfaXNtLmM6MjYwOmJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxubmV0L3NtYy9zbWNfaXNtLmMtMjYxLXtcbi0tXG5uZXQvc21jL3NtY19pc20uaD01MT12b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsXG5uZXQvc21jL3NtY19pc20uaC01Mi1cdFx0XHQgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xubmV0L3NtYy9zbWNfaXNtLmg6NTM6Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpO1xubmV0L3NtYy9zbWNfaXNtLmgtNTQtaW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjEzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHlgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB3aGF0IHRoaXMgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZy4gVGhlIG5hbWUgaXRzZWxmIGlzIGEgY2x1ZSwgc28gbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uICYjMzQ7U01DJiMzNDsgbGlrZWx5IGluZGljYXRlcyBTZWN1cmUgTW9uaXRvciBDYWxsIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIHNlY3VyZSBjb21tdW5pY2F0aW9uLiAmIzM0O0lTTSYjMzQ7IGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gYW4gSW5zdHJ1Y3Rpb24gU2V0IE1uZW1vbmljLiAmIzM0O1N1cHBvcnQmIzM0OyBpcyBzZWxmIGV4cGxhbmF0b3J5IGFuZCAmIzM0O2RtYl9ub2NvcHkmIzM0OyBzZWVtcyB0aGUgbW9zdCBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC4gJiMzNDtkbWImIzM0OyBpcyBhIGxpa2VseSByZWZlcmVuY2UgdG8gYSBEYXRhIE1lbW9yeSBCYXJyaWVyIGFuZCAmIzM0O25vY29weSYjMzQ7IHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIG1lbW9yeSBpc24mIzM5O3QgZHVwbGljYXRlZCBvciBjb3BpZWQuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGludm9sdmVzIHNvbWUga2luZCBvZiBtZWNoYW5pc20gZm9yIHNlY3VyZSBtZW1vcnkgYWNjZXNzLCBwcm9iYWJseSB1c2luZyBhIGRhdGEgbWVtb3J5IGJhcnJpZXIsIGFuZCBpdCYjMzk7cyBkb2luZyBzbyB3aXRob3V0IGNvcHlpbmcgdGhlIGFjdHVhbCBkYXRhLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc2Vuc2l0aXZlIG1lbW9yeSByZWdpb25zLCBwZXJoYXBzIHNoYXJlZCBiZXR3ZWVuIHNlY3VyZSBhbmQgbm9uLXNlY3VyZSB3b3JsZHMsIG9yIHdpdGhpbiBhIHNlY3VyaXR5IGNvbnRleHQgaXRzZWxmLCB3aGVyZSBkYXRhIGludGVncml0eSBhbmQgYWNjZXNzIGNvbnRyb2wgYXJlIGNyaXRpY2FsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgdXNlLWNhc2U/IFdoYXQgYXJjaGl0ZWN0dXJlIGlzIHRoaXMgdGFyZ2V0aW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIFRydXN0Wm9uZSBzeXN0ZW0sIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSAmIzM0O25vY29weSYjMzQ7IGFzcGVjdCByZWFsbHkgcGlxdWVzIG15IGludGVyZXN0OyB0aGF0JiMzOTtzIGdlbmVyYWxseSBkb25lIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBjb3B5aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaG93IHRoZSBiYXJyaWVyIGlzIGVtcGxveWVkIGFuZCB3aGF0IGtpbmQgb2YgbWVtb3J5IGFjY2VzcyBwcm90ZWN0aW9uIGl0JiMzOTtzIHByb3ZpZGluZy4gSXMgdGhpcyBzaW1wbHkgYWJvdXQgY2FjaGUgY29oZXJlbmN5PyBPciBpcyB0aGVyZSBzb21ldGhpbmcgbW9yZSBudWFuY2VkIGdvaW5nIG9uPyBJIHNob3VsZCBhbnRpY2lwYXRlIGl0IGJlaW5nIHJlbGF0ZWQgdG8gc29tZSBzeXN0ZW0tbGV2ZWwgc2VjdXJpdHkgYXJjaGl0ZWN0dXJlLCBsaWtlbHkgYSBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgaXNvbGF0aW9uIG9yIGNvbnRyb2wgc2NoZW1lLiBMZXQmIzM5O3Mgc2VlIGhvdyBJIGNhbiBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pc20uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pc20uYz0yMzU9aW50IHNtY19pc21fcmVnaXN0ZXJfZG1iKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBpbnQgZG1iX2xlbixcbi0tXG5uZXQvc21jL3NtY19pc20uYy0yNTktXG5uZXQvc21jL3NtY19pc20uYzoyNjA6Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpXG5uZXQvc21jL3NtY19pc20uYy0yNjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODExCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L3NtYy9zbWNfaXNtLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgc29tZSBmb3JtIG9mIG1lbW9yeSBiYXJyaWVyIG9wZXJhdGlvbiByZWxhdGVkIHRvIGRhdGEgbW92ZW1lbnQgd2l0aGluIHRoZSBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zIG92ZXIgUkRNQSAoU01DLVIpIElTTSAoSW5maW5pQmFuZCBTaGFyZWQgTWVtb3J5KSBjb250ZXh0LCBhbmQgdGhlICYjMzQ7bm9jb3B5JiMzNDsgc3VmZml4IGhpbnRzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgbWVtb3J5IHJlZ2lvbnMgdGhhdCBkb24mIzM5O3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IGNvcGllZC4KCkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGhvdyB0aGlzIHN1cHBvcnRzIG9yIGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBTTUMtUiBJU00gZGF0YSBwYXRoLiBJcyB0aGlzIHBhcnQgb2YgdGhlIGluaXRpYWwgc2V0dXAsIHRoZSBkYXRhIHRyYW5zZmVyIGl0c2VsZiwgb3IgcGVyaGFwcyBhIGNsZWFuLXVwIHBoYXNlPyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIG1lbW9yeSBiYXJyaWVyIGl0JiMzOTtzIHVzaW5nLiBBIERNQiAoRGF0YSBNZW1vcnkgQmFycmllcikgaXMgYSBmYWlybHkgYnJvYWQgdGVybSwgYnV0IGluIHRoaXMgY29udGV4dCwgSSBzdXNwZWN0IGl0IGxpa2VseSBpbnZvbHZlcyBlaXRoZXIgZW5zdXJpbmcgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGJlZm9yZSBiZWluZyBhY2Nlc3NlZCBieSB0aGUgcGVlciwgb3IgbWFraW5nIHN1cmUgdGhlIGN1cnJlbnQgcHJvY2VzcyBzZWVzIHRoZSBkYXRhLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGNvbnRleHQgdGhhdCBiYXJyaWVyIGlzIG9wZXJhdGluZyBpbiB0byBiZSBzdXJlLiBBbnkgc3VidGxldGllcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gd291bGQgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nOiBhcmUgdGhleSByZWx5aW5nIG9uIGhhcmR3YXJlIGNhY2hlIGNvaGVyZW5jeSwgb3IgaXMgdGhlcmUgYSBtb3JlIHNvZnR3YXJlLWNlbnRyaWMgYXBwcm9hY2g/IFdoYXQgaW1wYWN0IGRvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIG9uIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb2YgdGhlIElTTSBzdWJzeXN0ZW0/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBieSBkaWZmZXJlbnQgcHJvY2Vzc2VzIHdpdGhpbiB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaWYgaXQgaXMgdXNlZCB0byBndWFyYW50ZWUgb3JkZXIgYmV0d2VlbiByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zLiBUaGUgJiMzNDtub2NvcHkmIzM0OyBhc3BlY3QgcmVhbGx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbXVzdCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgZWZmaWNpZW5jeSBhbmQgaG93IHRoZXkmIzM5O3JlIG9wdGltaXppbmcgZGF0YSBtb3ZlbWVudCBpbiB0aGlzIGNyaXRpY2FsIHBhdGguIFRpbWUgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2lzbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTU6XHRcdFx0ZG1iX2Rlc2MtXHUwMDNlbGVuID0gZG1iLmRtYl9sZW47XG4gMjU2Olx0XHR9XG4gMjU3Olx0XHRyZXR1cm4gcmM7XG4gMjU4Olx0fVxuIDI1OTpcdFxuIDI2MDpcdGJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxuIDI2MTpcdHtcbiAyNjI6XHRcdC8qIGZvciBub3cgb25seSBsb29wYmFjay1pc20gc3VwcG9ydHNcbiAyNjM6XHRcdCAqIG1lcmdpbmcgc25kYnVmIHdpdGggcGVlciBETUIgdG8gYXZvaWRcbiAyNjQ6XHRcdCAqIGRhdGEgY29waWVzIGJldHdlZW4gdGhlbS5cbiAyNjU6XHRcdCAqL1xuIDI2NjpcdFx0cmV0dXJuIChzbWNkLVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZXN1cHBvcnRfbW1hcHBlZF9yZG1iIFx1MDAyNlx1MDAyNlxuIDI2NzpcdFx0XHRzbWNkLVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZXN1cHBvcnRfbW1hcHBlZF9yZG1iKHNtY2QtXHUwMDNlZGlicykpO1xuIDI2ODpcdH1cbiAyNjk6XHRcbiAyNzA6XHRpbnQgc21jX2lzbV9hdHRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4sXG4gMjcxOlx0XHRcdCAgICAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYylcbiAyNzI6XHR7XG4gMjczOlx0XHRzdHJ1Y3QgZGlic19kbWIgZG1iO1xuIDI3NDpcdFx0aW50IHJjID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgU01DIE1lcmdlIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyAmIzM0O2xvb3BiYWNrLWlzbSBzdXBwb3J0cyBtZXJnaW5nIHNuZGJ1ZiB3aXRoIHBlZXIgRE1CJiMzNDsg4oCTIHRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCB0ZWxscyBtZSB0aGUgbWVyZ2luZyBvZiB0aGUgc2VuZCBidWZmZXIgd2l0aCB0aGUgcGVlciYjMzk7cyBEaXJlY3QgTWVtb3J5IEJ1ZmZlciAoRE1CKSBpcyBjdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBpbiB0aGUgbG9vcGJhY2sgSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBNZXRob2QgKElTTSkgdmFyaWFudC4gRXhjZWxsZW50LiBUaGF0IG5hcnJvd3MgZG93biBteSBmb2N1cyBjb25zaWRlcmFibHkuIFRoZSBpbXBsaWNhdGlvbiBpcywgaWYgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhpcyBtZXJnZSBmdW5jdGlvbmFsaXR5LCBJIG5lZWQgdG8gZm9jdXMgb24gaG93IGl0JiMzOTtzIGRvbmUgaW4gdGhlIGxvb3BiYWNrIGNhc2UuCgpOb3csIHdoZXJlJiMzOTtzIHRoZSBjb2RlPyBMZXQmIzM5O3MgYXNzdW1lIHRoZSByZWxldmFudCBjb2RlIGlzIGluIGEgYG5ldC9zbWNgIGRpcmVjdG9yeSBzb21ld2hlcmUsIGFuZCBnaXZlbiB0aGUgbG9vcGJhY2sgZm9jdXMsIEkmIzM5O2xsIGJldCBpdCYjMzk7cyBjYWxsZWQgc29tZXRoaW5nIGxpa2UgYHNtY19sb29wYmFjay5jYC4gT3IgbWF5YmUgYHNtY19pc21fbG9vcGJhY2suY2A/IEVpdGhlciB3YXksIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoYXQgcGF0aCBmb3IgdGhlIGRldGFpbHMgb2YgdGhhdCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHRhc2s6IGZpbmQgdGhhdCBzb3VyY2UgY29kZSBhbmQgZGlzc2VjdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pc20uYz0yNjA9Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpXG5uZXQvc21jL3NtY19pc20uYy0yNjEte1xubmV0L3NtYy9zbWNfaXNtLmM6MjYyOlx0LyogZm9yIG5vdyBvbmx5IGxvb3BiYWNrLWlzbSBzdXBwb3J0c1xubmV0L3NtYy9zbWNfaXNtLmMtMjYzLVx0ICogbWVyZ2luZyBzbmRidWYgd2l0aCBwZWVyIERNQiB0byBhdm9pZFxuLS1cbm5ldC9zbWMvc21jX2lzbS5jPTM2NT1zdGF0aWMgdm9pZCBzbWNfbmxfcHJlcF9zbWNkX2RldihzdHJ1Y3Qgc21jZF9kZXZfbGlzdCAqZGV2X2xpc3QsXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtMzc3LVx0XHRcdGdvdG8gbmV4dDtcbm5ldC9zbWMvc21jX2lzbS5jOjM3ODpcdFx0aWYgKHNtY19pc21faXNfbG9vcGJhY2soc21jZC1cdTAwM2VkaWJzKSlcbm5ldC9zbWMvc21jX2lzbS5jLTM3OS1cdFx0XHRnb3RvIG5leHQ7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmM9NDkxPXN0YXRpYyB2b2lkIHNtY2RfcmVnaXN0ZXJfZGV2KHN0cnVjdCBkaWJzX2RldiAqZGlicylcbi0tXG5uZXQvc21jL3NtY19pc20uYy01MDctXG5uZXQvc21jL3NtY19pc20uYzo1MDg6XHRpZiAoc21jX2lzbV9pc19sb29wYmFjayhkaWJzKSB8fFxubmV0L3NtYy9zbWNfaXNtLmMtNTA5LVx0ICAgIChkaWJzLVx1MDAzZW9wcy1cdTAwM2VhZGRfdmxhbl9pZCBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvc21jL3NtY19pc20uYy01MTYtXHQgKiAtIGRldmljZXMgd2l0aG91dCBwbmV0aWQgYmVmb3JlIGRldmljZXMgd2l0aCBwbmV0aWQ7XG5uZXQvc21jL3NtY19pc20uYzo1MTc6XHQgKiAtIGxvb3BiYWNrLWlzbSBhbHdheXMgYXQgdGhlIHZlcnkgYmVnaW5uaW5nO1xubmV0L3NtYy9zbWNfaXNtLmMtNTE4LVx0ICovXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtNTIxLVx0XHRcdFx0XHRcdCAgc3RydWN0IHNtY2RfZGV2LCBsaXN0KTtcbm5ldC9zbWMvc21jX2lzbS5jOjUyMjpcdFx0aWYgKGZlbnRyeSBcdTAwMjZcdTAwMjYgc21jX2lzbV9pc19sb29wYmFjayhmZW50cnktXHUwMDNlZGlicykpXG5uZXQvc21jL3NtY19pc20uYy01MjMtXHRcdFx0bGlzdF9hZGQoXHUwMDI2c21jZC1cdTAwM2VsaXN0LCBcdTAwMjZmZW50cnktXHUwMDNlbGlzdCk7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmg9Nzg9c3RhdGljIGlubGluZSBib29sIF9fc21jX2lzbV9pc19lbXVsYXRlZCh1MTYgY2hpZClcbi0tXG5uZXQvc21jL3NtY19pc20uaC04Mi1cdCAqXG5uZXQvc21jL3NtY19pc20uaDo4MzpcdCAqIGxvb3BiYWNrLWlzbTpcdDB4RkZGRlxubmV0L3NtYy9zbWNfaXNtLmgtODQtXHQgKiB2aXJ0aW8taXNtOlx0XHQweEZGMDAgfiAweEZGRkVcbi0tXG5uZXQvc21jL3NtY19pc20uaD04OT1zdGF0aWMgaW5saW5lIGJvb2wgc21jX2lzbV9pc19lbXVsYXRlZChzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpXG4tLVxubmV0L3NtYy9zbWNfaXNtLmgtOTUtXG5uZXQvc21jL3NtY19pc20uaDo5NjpzdGF0aWMgaW5saW5lIGJvb2wgc21jX2lzbV9pc19sb29wYmFjayhzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG5uZXQvc21jL3NtY19pc20uaC05Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBLZXJuZWwgTG9vcGJhY2sgSW1wbGVtZW50YXRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBsb29wYmFjayBmdW5jdGlvbmFsaXR5IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gYmUgcHJlY2lzZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgdmVyeSB0YXJnZXRlZCBzZWFyY2guIEkmIzM5O2xsIGZvY3VzIG9uIGVpdGhlciB0aGUgcG90ZW50aWFsbHkgbW9yZSBnZW5lcmljIHRlcm0sIGBsb29wYmFjay1pc21gLCBvciwgaWYgdGhhdCYjMzk7cyB0b28gYnJvYWQsIEkmIzM5O2xsIGdvIGZvciB0aGUgbW9yZSBsaWtlbHkgc3BlY2lmaWMsIGBzbWNfbG9vcGJhY2tgLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBob25lIGluIG9uIHRoZSBjb3JlIGNvZGUgcmVzcG9uc2libGUuIEtub3dpbmcgdGhlIGV4YWN0IG5hbWluZyBjb252ZW50aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbXByb3ZlIHRoZSBlZmZpY2llbmN5IG9mIHRoaXMgc2VhcmNoLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgYXBwcm9hY2ggaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGV4aXN0aW5nIGtlcm5lbCBjb2RlIGJhc2UuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGJlIHZhbHVhYmxlIGluIGdldHRpbmcgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsJiMzOTtzIGRlc2lnbiBjaG9pY2VzIHdoZW4gaXQgY29tZXMgdG8gbG9vcGJhY2sgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcGJhY2staXNtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMi0vKlxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozOiAqICBGdW5jdGlvbnMgZm9yIGRpYnMgbG9vcGJhY2svbG9vcGJhY2staXNtIGRldmljZS5cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNC0gKlxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtMi0vKlxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDozOiAqICBkaWJzIGxvb3BiYWNrIChha2EgbG9vcGJhY2staXNtKSBkZXZpY2Ugc3RydWN0dXJlIGRlZmluaXRpb25zLlxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00LSAqXG4tLVxubmV0L3NtYy9zbWNfaXNtLmM9MjYwPWJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxubmV0L3NtYy9zbWNfaXNtLmMtMjYxLXtcbm5ldC9zbWMvc21jX2lzbS5jOjI2MjpcdC8qIGZvciBub3cgb25seSBsb29wYmFjay1pc20gc3VwcG9ydHNcbm5ldC9zbWMvc21jX2lzbS5jLTI2My1cdCAqIG1lcmdpbmcgc25kYnVmIHdpdGggcGVlciBETUIgdG8gYXZvaWRcbi0tXG5uZXQvc21jL3NtY19pc20uYz00OTE9c3RhdGljIHZvaWQgc21jZF9yZWdpc3Rlcl9kZXYoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxuLS1cbm5ldC9zbWMvc21jX2lzbS5jLTUxNi1cdCAqIC0gZGV2aWNlcyB3aXRob3V0IHBuZXRpZCBiZWZvcmUgZGV2aWNlcyB3aXRoIHBuZXRpZDtcbm5ldC9zbWMvc21jX2lzbS5jOjUxNzpcdCAqIC0gbG9vcGJhY2staXNtIGFsd2F5cyBhdCB0aGUgdmVyeSBiZWdpbm5pbmc7XG5uZXQvc21jL3NtY19pc20uYy01MTgtXHQgKi9cbi0tXG5uZXQvc21jL3NtY19pc20uaD03OD1zdGF0aWMgaW5saW5lIGJvb2wgX19zbWNfaXNtX2lzX2VtdWxhdGVkKHUxNiBjaGlkKVxuLS1cbm5ldC9zbWMvc21jX2lzbS5oLTgyLVx0ICpcbm5ldC9zbWMvc21jX2lzbS5oOjgzOlx0ICogbG9vcGJhY2staXNtOlx0MHhGRkZGXG5uZXQvc21jL3NtY19pc20uaC04NC1cdCAqIHZpcnRpby1pc206XHRcdDB4RkYwMCB+IDB4RkZGRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gZGlic19sb29wYmFjay5jIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUgb2YgdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiB0aGUgY29kZWJhc2U/JiMzNDsgVGltZSB0byBnbyBzdHJhaWdodCB0byB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGRpYnNfbG9vcGJhY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSwgYW5kIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBhcmUuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgb3IgcG90ZW50aWFsbHkgYSBkZXZpY2UgdHJlZSBvdmVybGF5LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhlcmUgYXJlIHNvbWUgcHJlcHJvY2Vzc29yIGRlZmluZXMgYXQgcGxheS4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgdG8gZ3JvayB0aGUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRoZSBiYXNlbGluZSBiZWZvcmUgYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERJQlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIERlcGVuZGVuY2llcyBmb3IgT3B0aW1hbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgQ09ORklHX0RJQlNgIGFuZCBgQ09ORklHX0RJQlNfTE9gIGFyZSBlc3NlbnRpYWwgY29tcG9uZW50cy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYENPTkZJR19TTUNgIGlzIGFsc28gYSBkZXBlbmRlbmN5LiBBIHF1aWNrIHNlYXJjaCByZXZlYWxzIGl0cyBwcmVzZW5jZSBpbiBgbmV0L3NtYy9zbWNfY2RjLmNgLCBjb25maXJtaW5nIGl0cyBpbnZvbHZlbWVudC4KCk5leHQsIEkmIzM5O2xsIGNoZWNrIGZvciBgQ09ORklHX1NNQ19MT2AuIEFoYSwgdGhhdCBhcHBlYXJzIHRvIGJlIGNvdmVyZWQgdW5kZXIgYENPTkZJR19ESUJTX0xPYC4gR29vZCB0byBrbm93IHRoYXQgcmVkdW5kYW5jeSBpc24mIzM5O3QgcHJlc2VudCwgYW5kIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIHNlZW1zIHN1ZmZpY2llbnQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgbmV0L3NtYy9LY29uZmlnYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2ggYXQgdGhpcyBzdGFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU01DXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFNNQy1SIHByb3ZpZGVzIGEgXCYjMzQ7c29ja2V0cyBvdmVyIFJETUFcJiMzNDsgc29sdXRpb24gbWFraW5nIHVzZSBvZlxuICAgNzpcdFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcbiAgIDg6XHRcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cbiAgIDk6XHRcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xuICAxMDpcdFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFNNQ19ESUFHXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBTTUNcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcbiAgMTk6XHRcdCAgc21jc3MuXG4gIDIwOlx0XG4gIDIxOlx0XHQgIGlmIHVuc3VyZSwgc2F5IFkuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxuICAyNDpcdFx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbiAgMjY6XHRcdGRlZmF1bHQgeVxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBTTUNfSFNfQ1RSTF9CUEYgZW5hYmxlcyBzdXBwb3J0IHRvIHJlZ2lzdGVyIGdlbmVyaWMgZUJQRiBob29rIGZvciBTTUNcbiAgMjk6XHRcdCAgaGFuZHNoYWtlIGZsb3csIHdoaWNoIG9mZmVyIG11Y2ggZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yXG4gIDMwOlx0XHQgIG9mIHRoZSBTTUMgcHJvdG9jb2wgc3RhY2sgY29tcGFyZWQgdG8gYSBjb21wbGV0ZSBrZXJuZWwtYmFzZWQgYXBwcm9hY2guIFNlbGVjdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU2OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTTUMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJldmVhbHMgdGhhdCB0aGUgYENPTkZJR19TTUNgIG9wdGlvbiBoaW5nZXMgb24gdGhlIHByZXNlbmNlIG9mIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgIGNvbmZpZ3VyYXRpb25zLiBUaGVyZWZvcmUsIHRvIGVuc3VyZSBjb21wbGV0ZSBmdW5jdGlvbmFsaXR5LCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBTTUNgLCBgRElCU2AsIGFuZCBgRElCU19MT2AuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQ6IGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYF9fc21jX2J1Zl9jcmVhdGVgLCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIFllcywgdGhlc2UgYXJlIGFsbCBjb3JlIHRvIFNNQyYjMzk7cyBjb25uZWN0aW9uIHNldHVwIGFuZCBDREMgbWVzc2FnZSBoYW5kbGluZy4gU3BlY2lmaWNhbGx5OgoKKiAgIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAgaXMgdHJpZ2dlcmVkIHVwb24gcmVjZWl2aW5nIENEQyBtZXNzYWdlcywgdml0YWwgZm9yIGNvbW11bmljYXRpb24uCiogICBgc21jZF9jZGNfcnhfdHNrbGV0YCBpcyB0aGUgdGFza2xldCByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHJlY2VwdGlvbiBvZiBDREMgbWVzc2FnZXMgd2l0aGluIFNNQy1ELgoqICAgYHNtY19jZGNfcnhfaGFuZGxlcmAgaGFuZGxlcyB0aGUgcmVjZXB0aW9uIG9mIENEQyBtZXNzYWdlcyB3aXRoaW4gU01DLVIuCiogICBgX19zbWNfYnVmX2NyZWF0ZWAgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGJ1ZmZlcnMsIGEgZnVuZGFtZW50YWwgb3BlcmF0aW9uLgoqICAgYHNtY2RfYnVmX2F0dGFjaGAgaXMgZXNzZW50aWFsIGZvciBhdHRhY2hpbmcgYnVmZmVycyB3aXRoaW4gdGhlIFNNQy1EIGNvbnRleHQuCgpTbywgaW4gZXNzZW5jZSwgdGhpcyBpcyB0aGUgYmFja2JvbmUgb2YgdGhlIFNNQyBjb25uZWN0aW9uIGFuZCBkYXRhIHBhdGguCgpEaWdnaW5nIGRlZXBlciwgSSB3YW50IHRvIGNsYXJpZnkgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgZm9yIFNNQy1ELiBCZXNpZGVzIGBDT05GSUdfU01DYCBhcyB0aGUgcHJpbWFyeSByZXF1aXJlbWVudCwgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfRElCU2AgYW5kIGBDT05GSUdfRElCU19MT2AgdG8gZmFjaWxpdGF0ZSBTTUMtRCBsb29wYmFjayBmdW5jdGlvbmFsaXR5LgoKVG8gc3VtbWFyaXplLCBteSBjb3JlIGZvY3VzIG5vdyBhcmUgdGhlIGZ1bmN0aW9uczogYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY2RfY2RjX3J4X3Rza2xldGAsIGBzbWNfY2RjX3J4X2hhbmRsZXJgLCBgX19zbWNfYnVmX2NyZWF0ZWAsIGFuZCBgc21jZF9idWZfYXR0YWNoYC4KCldhaXQsIGBfX3NtY19idWZfY3JlYXRlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgbG9vayBpbnRvIGBzbWNfY29yZS5jYCB0byBjb25maXJtIHRoZSBzdGF0aWMgbGlua2FnZSBhbmQgdG8gZGV0ZXJtaW5lIGl0cyBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zbWNfYnVmX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmM9MjM5MD1zdGF0aWMgc3RydWN0IHNtY19idWZfZGVzYyAqc21jZF9uZXdfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjQyNS1cbm5ldC9zbWMvc21jX2NvcmUuYzoyNDI2OnN0YXRpYyBpbnQgX19zbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkLCBib29sIGlzX3JtYilcbm5ldC9zbWMvc21jX2NvcmUuYy0yNDI3LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MjU2MT1pbnQgc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZClcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjU2OS1cbm5ldC9zbWMvc21jX2NvcmUuYzoyNTcwOlx0cmMgPSBfX3NtY19idWZfY3JlYXRlKHNtYywgaXNfc21jZCwgZmFsc2UpO1xubmV0L3NtYy9zbWNfY29yZS5jLTI1NzEtXHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NzUtXHQvKiBjcmVhdGUgcm1iICovXG5uZXQvc21jL3NtY19jb3JlLmM6MjU3NjpcdHJjID0gX19zbWNfYnVmX2NyZWF0ZShzbWMsIGlzX3NtY2QsIHRydWUpO1xubmV0L3NtYy9zbWNfY29yZS5jLTI1NzctXHRpZiAocmMgXHUwMDI2XHUwMDI2IHNtYy1cdTAwM2Vjb25uLnNuZGJ1Zl9kZXNjKSB7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1ODg9aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxNi1cdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxubmV0L3NtYy9zbWNfY29yZS5jOjI2MTc6XHQgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOC1cdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgU01DIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBhbmFseXppbmcgaG93IHRvIGJlc3QgZnV6eiB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBmdW5jdGlvbmFsaXR5LiBJbml0aWFsbHksIEkgd2FzIGxvb2tpbmcgYXQgYF9fc21jX2J1Zl9jcmVhdGVgIGJ1dCByZWFsaXplZCB0aGF0IFN5emthbGxlciBjYW4sIGluIGZhY3QsIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIGluIHRoZSBzeW1ib2wgdGFibGUsIHRob3VnaCBpdCYjMzk7cyB1c3VhbGx5IGJldHRlciB0byBwcm92aWRlIHRoZSBub24tc3RhdGljIG9uZXMgb3IgdGhlIGV4cGxpY2l0bHkgaWRlbnRpZmlhYmxlIHN0YXRpYyBvbmVzLiBCdXQgdGhlIGNvdmVyYWdlIHRyYWNraW5nIGNhcGFiaWxpdHkgbWFrZXMgaW5jbHVkaW5nIGBfX3NtY19idWZfY3JlYXRlYCBhIHZpYWJsZSBvcHRpb24gaGVyZS4KClRoZSBrZXkgaXMgdG8gdGFyZ2V0IGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3QgbmVjZXNzYXJpbHkgKmhvdC1wYXRoKiBmdW5jdGlvbnMsIGJ1dCBhcmUgaW1wb3J0YW50IGZvciBTTUPigJlzIHNwZWNpZmljIGludGVyYWN0aW9ucy4gQ29uc2lkZXJpbmcgdGhlIHByb21wdCYjMzk7cyBmb2N1cyBvbiB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMsIEkmIzM5O3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBjYW5kaWRhdGVzOgoKKiAgIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmA6IHRoaXMgaGFuZGxlcyBDREMgbWVzc2FnZSByZWNlaXZpbmc7IGl0IG1pZ2h0IGJlIG1vZGVyYXRlbHkgYWN0aXZlLCBidXQgaXQmIzM5O3MgU01DLXNwZWNpZmljLgoqICAgYHNtY2RfY2RjX3J4X3Rza2xldGA6IHRoaXMgaXMgdGhlIHRhc2tsZXQgcmVzcG9uc2libGUgZm9yIFNNQy1EIFJYIGhhbmRsaW5nLgoqICAgYHNtY19jZGNfcnhfaGFuZGxlcmA6IHRoaXMgaGFuZGxlcyBTTUMtUiBSWC4KKiAgIGBfX3NtY19idWZfY3JlYXRlYDogdGhpcyBpcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gc2V0dXAuCiogICBgc21jZF9idWZfYXR0YWNoYDogdGhpcyBpcyBhbHNvIGludm9sdmVkIGluIGNvbm5lY3Rpb24gc2V0dXAuCgpCYXNlZCBvbiB0aGlzLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkIGhlYXZpbHkgZnV6emluZyB0aG9zZSBmaXZlOiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgb25lcyBJJiMzOTt2ZSBpZGVudGlmaWVkIGFyZSBgU01DYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gLiBMZXQgbWUgZG91YmxlLWNoZWNrIGBESUJTX0xPYDsgaXQmIzM5O3MgYSBib29sLCBzbyBubyBpc3N1ZXMgdGhlcmUuIFNpbmNlIGBTTUNgIHJlbGllcyBvbiBgSU5GSU5JQkFORGAsIEkmIzM5O2xsIGluY2x1ZGUgdGhhdCBhcyB3ZWxsLCBhbHRob3VnaCBpdCYjMzk7cyB0eXBpY2FsbHkgZW5hYmxlZC4gV2FpdCwgSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIGBJTkVUYCBpcyBlbmFibGVkLiBgU01DYCBkZXBlbmRzIG9uIGBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiBTbywgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZSBgU01DYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gLgoKSXQgbG9va3MgbGlrZSB0aGUgYFNNQ2AgZnVuY3Rpb25hbGl0eSBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIFRoaXMgbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nLiBJdCYjMzk7cyBhIGNvbm5lY3Rpb24gc2V0dXAgcmFjZSBjb25kaXRpb24gdGhhdCBhIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBtaWdodCBhY2Nlc3MgdW5pbml0aWFsaXplZCBidWZmZXJzLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgY2FuZGlkYXRlIQoKU28sIHRvIHN1bW1hcml6ZSBteSBzdHJhdGVneToKCioqQ29uZmlnczoqKgoKKiAgIGBTTUNgCiogICBgRElCU2AKKiAgIGBESUJTX0xPYAoKKipTeW1ib2xzOioqCgoqICAgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYAoqICAgYHNtY2RfY2RjX3J4X3Rza2xldGAKKiAgIGBzbWNfY2RjX3J4X2hhbmRsZXJgCiogICBgX19zbWNfYnVmX2NyZWF0ZWAKKiAgIGBzbWNkX2J1Zl9hdHRhY2hgCgpJIHNob3VsZCBub3cgZG91YmxlIGNoZWNrIHdoZXRoZXIgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCBpcyBzdGF0aWMgb3Igbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfY2RjX21zZ19yZWN2X2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NkYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NkYy5jPTMwOD1zdGF0aWMgdm9pZCBzbWNfY2RjX21zZ192YWxpZGF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19jZGNfbXNnICpjZGMsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMzI5LVxubmV0L3NtYy9zbWNfY2RjLmM6MzMwOnN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxubmV0L3NtYy9zbWNfY2RjLmMtMzMxLVx0XHRcdFx0ICAgIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTQ0Nz1zdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2KHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYylcbi0tXG5uZXQvc21jL3NtY19jZGMuYy00NTAtXHRiaF9sb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbm5ldC9zbWMvc21jX2NkYy5jOjQ1MTpcdHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHNtYywgY2RjKTtcbm5ldC9zbWMvc21jX2NkYy5jLTQ1Mi1cdGJoX3VubG9ja19zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDk3PXN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNTE0LVx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxubmV0L3NtYy9zbWNfY2RjLmM6NTE1Olx0ICogUk1CIGlzIHVuc2V0IChzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGRlcmVmZXJlbmNlcyBpdCkgdG8gYXZvaWQgYVxubmV0L3NtYy9zbWNfY2RjLmMtNTE2LVx0ICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzA4CgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDM2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBQcm90b2NvbCBSYWNlIENvbmRpdGlvbiBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHByZXR0eSBjcml0aWNhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgcHJvdG9jb2wuIEkgY2FuIHNlZSB0aGUgZml4IGludm9sdmVzIGFkZGluZyBtZW1vcnkgYmFycmllcnMsIHNwZWNpZmljYWxseSBgc21wX2xvYWRfYWNxdWlyZWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZWAsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciB0aGlzIGtpbmQgb2YgaXNzdWUuIEl0JiMzOTtzIG1lYW50IHRvIHByb3RlY3QgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycywgYHNuZGJ1Zl9kZXNjYCBhbmQgYHJtYl9kZXNjYCwgZnJvbSBiZWluZyBhY2Nlc3NlZCBwcmVtYXR1cmVseSBieSBjb25jdXJyZW50IENvbm5lY3Rpb24gRGF0YSBDb250cm9sIChDREMpIHJlY2VpdmUgaGFuZGxlcnMuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlcnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB0b3VjaGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRpcmVjdGx5IGltcGFjdGluZyB0aGUgY29yZSBTTUMgbG9naWMgYW5kLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHNvbWV0aGluZyB3ZSYjMzk7bGwgc2VlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB0aGUgbG9vcGJhY2sgSVNNIChTTUMtRCkgZGV2aWNlLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGNyaXRpY2FsIHN5bWJvbHMgaW52b2x2ZWQgaW5jbHVkZSBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGUgZnVuY3Rpb25zIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYW5kIGBfX3NtY19idWZfY3JlYXRlYCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLCBzbyBJIHdpbGwgaW5jbHVkZSB0aGVtLiBgc21jZF9idWZfYXR0YWNoYCBpcyBub3Qgc3RhdGljLiBJJiMzOTtsbCBpbmNsdWRlIHRoYXQgYXMgd2VsbC4KCkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gSSBrbm93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFNNQ2AsIGJ1dCBJIHdhbnRlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBgRElCU2AgKGFuZCBgRElCU19MT2ApIGlzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uIEl0IGFwcGVhcnMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHdhcyBjb3JyZWN0OyBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvZGlicy9LY29uZmlnYCBjb25maXJtcyBgQ09ORklHX0RJQlNgIGFuZCBgQ09ORklHX0RJQlNfTE9gIGFyZSBkZWZpbmVkIHRoZXJlLiBJIGFsc28gdmVyaWZpZWQgdGhyb3VnaCBncmVwIGZvciBgbG9vcGJhY2staXNtYCB0aGF0IGBkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jYCBleGlzdHMuIFllcCwgYERJQlNgIGlzIHRoZSByaWdodCBvbmUuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGV2ZXJ5dGhpbmcgSSBuZWVkLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtESUJTX0xPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2NkY19tc2dfcmVjdl9hY3Rpb24mIzM0OywKICAgICYjMzQ7c21jZF9jZGNfcnhfdHNrbGV0JiMzNDssCiAgICAmIzM0O3NtY19jZGNfcnhfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtfX3NtY19idWZfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NtY2RfYnVmX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHByb3RvY29sIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBhZGRzIG1lbW9yeSBiYXJyaWVycyAoc21wX2xvYWRfYWNxdWlyZSBhbmQgc21wX3N0b3JlX3JlbGVhc2UpIHRvIHByZXZlbnQgY29uY3VycmVudCBDREMgKENvbm5lY3Rpb24gRGF0YSBDb250cm9sKSByZWNlaXZlIGhhbmRsZXJzIGZyb20gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzIChzbmRidWZfZGVzYyBhbmQgcm1iX2Rlc2MpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBTTUMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHRoZSBsb29wYmFjayBJU00gZGV2aWNlIChTTUMtRCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfY2RjX21zZ19yZWN2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtzbWNkX2NkY19yeF90c2tsZXQmIzM0OywKICAgICYjMzQ7c21jX2NkY19yeF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O19fc21jX2J1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jZF9idWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGFkZHMgbWVtb3J5IGJhcnJpZXJzIChzbXBfbG9hZF9hY3F1aXJlIGFuZCBzbXBfc3RvcmVfcmVsZWFzZSkgdG8gcHJldmVudCBjb25jdXJyZW50IENEQyAoQ29ubmVjdGlvbiBEYXRhIENvbnRyb2wpIHJlY2VpdmUgaGFuZGxlcnMgZnJvbSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKHNuZGJ1Zl9kZXNjIGFuZCBybWJfZGVzYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFNNQyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGxvb3BiYWNrIElTTSBkZXZpY2UgKFNNQy1EKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjA5Ljg0MDAyNjU1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDIzMzkyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uXCIsXG4gICAgXCJzbWNkX2NkY19yeF90c2tsZXRcIixcbiAgICBcInNtY19jZGNfcnhfaGFuZGxlclwiLFxuICAgIFwiX19zbWNfYnVmX2NyZWF0ZVwiLFxuICAgIFwic21jZF9idWZfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBwcm90b2NvbCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4gSXQgYWRkcyBtZW1vcnkgYmFycmllcnMgKHNtcF9sb2FkX2FjcXVpcmUgYW5kIHNtcF9zdG9yZV9yZWxlYXNlKSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgQ0RDIChDb25uZWN0aW9uIERhdGEgQ29udHJvbCkgcmVjZWl2ZSBoYW5kbGVycyBmcm9tIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycyAoc25kYnVmX2Rlc2MgYW5kIHJtYl9kZXNjKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgU01DIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB0aGUgbG9vcGJhY2sgSVNNIGRldmljZSAoU01DLUQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDowOS44NDAwMzIxMTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTY0NDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgwYWNkMjkzNTBkMWI4MzYyZjVlNWFmMzM5MWUzMWRmMDIyZmRhYWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTg6MDA6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY2RjLmMgYi9uZXQvc21jL3NtY19jZGMuY1xcbmluZGV4IDMyZDZkMDNkZjMyMTQ1Li5lYTYxYjFlNzVjNzJjZiAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19jZGMuY1xcbisrKyBiL25ldC9zbWMvc21jX2NkYy5jXFxuQEAgLTMzMiw4ICszMzIsMjAgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuIHtcXG4gXFx0dW5pb24gc21jX2hvc3RfY3Vyc29yIGNvbnNfb2xkLCBwcm9kX29sZDtcXG4gXFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXFx1MDAyNnNtYy1cXHUwMDNlY29ubjtcXG4rXFx0c3RydWN0IHNtY19idWZfZGVzYyAqc25kYnVmX2Rlc2M7XFxuIFxcdGludCBkaWZmX2NvbnMsIGRpZmZfcHJvZCwgZGlmZl90eDtcXG4gXFxuK1xcdC8qIEFjcXVpcmUgdGhlIHNlbmQgYnVmZmVyIG9uY2UsIHBhaXJpbmcgd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoKSBpblxcbitcXHQgKiBfX3NtY19idWZfY3JlYXRlKCkvc21jZF9idWZfYXR0YWNoKCkuICBPbiB0aGUgU01DLUQgRE1CLW5vY29weSBwYXRoXFxuK1xcdCAqIHRoZSBnaG9zdCBzbmRidWZfZGVzYyBpcyBhdHRhY2hlZCBvbmx5IGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHlcXG4rXFx0ICogcmVhY2hhYmxlIHRvIHRoZSBJU00gZGV2aWNlLCBzbyBpdCBjYW4gc3RpbGwgYmUgdW5zZXQgaGVyZTsgZXZlcnlcXG4rXFx0ICogc25kYnVmX2Rlc2MgY29uc3VtZXIgYmVsb3cgKHRoZSBub2NvcHkgYWNjb3VudGluZyBhbmQgdGhlIHNuZGJ1ZlxcbitcXHQgKiBjb25zdW1lciB0cmlnZ2VyLCB3aGljaCBkZXJlZmVyZW5jZXMgaXQgdmlhIHNtY190eF9wcmVwYXJlZF9zZW5kcygpKVxcbitcXHQgKiBpcyBza2lwcGVkIHdoaWxlIGl0IGlzIE5VTEwgdG8gYXZvaWQgYSBOVUxMIGRlcmVmIGFuZCBhIGxvYWQgb2YgYW5cXG4rXFx0ICogdW5pbml0aWFsaXNlZCBidWZmZXIuXFxuK1xcdCAqL1xcbitcXHRzbmRidWZfZGVzYyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmNvbm4tXFx1MDAzZXNuZGJ1Zl9kZXNjKTtcXG4rXFxuIFxcdHNtY19jdXJzX2NvcHkoXFx1MDAyNnByb2Rfb2xkLCBcXHUwMDI2Y29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kLCBjb25uKTtcXG4gXFx0c21jX2N1cnNfY29weShcXHUwMDI2Y29uc19vbGQsIFxcdTAwMjZjb25uLVxcdTAwM2Vsb2NhbF9yeF9jdHJsLmNvbnMsIGNvbm4pO1xcbiBcXHRzbWNfY2RjX21zZ190b19ob3N0KFxcdTAwMjZjb25uLVxcdTAwM2Vsb2NhbF9yeF9jdHJsLCBjZGMsIGNvbm4pO1xcbkBAIC0zNTEsMTQgKzM2MywxNyBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG4gXFxuIFxcdFxcdC8qIGlmIGxvY2FsIHNuZGJ1ZiBzaGFyZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiB3aXRoXFxuIFxcdFxcdCAqIHBlZXIgUk1CLCB0aGVuIHVwZGF0ZSB0eF9jdXJzX2ZpbiBhbmQgc25kYnVmX3NwYWNlXFxuLVxcdFxcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS5cXG4rXFx0XFx0ICogaGVyZSBzaW5jZSBwZWVyIGhhcyBhbHJlYWR5IGNvbnN1bWVkIHRoZSBkYXRhLiAgVGhlIGdob3N0XFxuK1xcdFxcdCAqIHNuZGJ1Zl9kZXNjIChhY3F1aXJlZCBhYm92ZSkgbWF5IHN0aWxsIGJlIHVuc2V0IGluIHRoZSBTTUMtRFxcbitcXHRcXHQgKiBETUItbm9jb3B5IHNldHVwIHdpbmRvdywgc28gc2tpcCB0aGUgdXBkYXRlIHdoaWxlIGl0IGlzIE5VTEwuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2Vpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY2QpKSB7XFxuK1xcdFxcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY2QpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBzbmRidWZfZGVzYykge1xcbiBcXHRcXHRcXHQvKiBDYWxjdWxhdGUgY29uc3VtZWQgZGF0YSBhbmRcXG4gXFx0XFx0XFx0ICogaW5jcmVtZW50IGZyZWUgc2VuZCBidWZmZXIgc3BhY2UuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRkaWZmX3R4ID0gc21jX2N1cnNfZGlmZihjb25uLVxcdTAwM2VzbmRidWZfZGVzYy1cXHUwMDNlbGVuLFxcbitcXHRcXHRcXHRkaWZmX3R4ID0gc21jX2N1cnNfZGlmZihzbmRidWZfZGVzYy1cXHUwMDNlbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y29ubi1cXHUwMDNldHhfY3Vyc19maW4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb25uLVxcdTAwM2Vsb2NhbF9yeF9jdHJsLmNvbnMpO1xcbiBcXHRcXHRcXHQvKiBpbmNyZWFzZSBsb2NhbCBzbmRidWYgc3BhY2UgYW5kIGZpbl9jdXJzICovXFxuQEAgLTM5MSwxMCArNDA2LDE1IEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxcbiBcXHRcXHRcXHRjb25uLVxcdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogdHJpZ2dlciBzbmRidWYgY29uc3VtZXI6IFJETUEgd3JpdGUgaW50byBwZWVyIFJNQkUgYW5kIENEQyAqL1xcbi1cXHRpZiAoKGRpZmZfY29ucyBcXHUwMDI2XFx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XFxuLVxcdCAgICBjb25uLVxcdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcXG4tXFx0ICAgIGNvbm4tXFx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSB7XFxuK1xcdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMuXFxuK1xcdCAqIHNtY190eF9wcmVwYXJlZF9zZW5kcygpIGFuZCBzbWNfdHhfcGVuZGluZygpIGRlcmVmZXJlbmNlIHNuZGJ1Zl9kZXNjLFxcbitcXHQgKiBzbyBza2lwIHRoZSB3aG9sZSB0cmlnZ2VyIHdoaWxlIGl0IGlzIHVuc2V0ICh0aGUgU01DLUQgRE1CLW5vY29weVxcbitcXHQgKiBzZXR1cCB3aW5kb3cpOiB0aGVyZSBpcyBub3RoaW5nIHRvIHNlbmQgd2l0aG91dCBhIHNlbmQgYnVmZmVyLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNuZGJ1Zl9kZXNjIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoKGRpZmZfY29ucyBcXHUwMDI2XFx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XFxuK1xcdCAgICAgY29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLmNvbnNfY3Vyc191cGRfcmVxIHx8XFxuK1xcdCAgICAgY29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLnVyZ19kYXRhX3BlbmRpbmcpKSB7XFxuIFxcdFxcdGlmICghc29ja19vd25lZF9ieV91c2VyKFxcdTAwMjZzbWMtXFx1MDAzZXNrKSlcXG4gXFx0XFx0XFx0c21jX3R4X3BlbmRpbmcoY29ubik7XFxuIFxcdFxcdGVsc2VcXG5AQCAtNDQzLDEzICs0NjMsMjEgQEAgc3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBmcm9tX3Rhc2tsZXQoY29ubiwgdCwgcnhfdHNrbGV0KTtcXG4gXFx0c3RydWN0IHNtY2RfY2RjX21zZyAqZGF0YV9jZGM7XFxuK1xcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnJtYl9kZXNjO1xcbiBcXHRzdHJ1Y3Qgc21jZF9jZGNfbXNnIGNkYztcXG4gXFx0c3RydWN0IHNtY19zb2NrICpzbWM7XFxuIFxcbiBcXHRpZiAoIWNvbm4gfHwgY29ubi1cXHUwMDNla2lsbGVkKVxcbiBcXHRcXHRyZXR1cm47XFxuK1xcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cXG4rXFx0ICogaXMgcHVibGlzaGVkIGJlZm9yZSBpdHMgUk1CIGlzIGFsbG9jYXRlZCwgc28gYmFpbCB3aGlsZSBybWJfZGVzYyBpc1xcbitcXHQgKiB1bnNldCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhbiB1bmluaXRpYWxpc2VkIGJ1ZmZlci5cXG4rXFx0ICovXFxuK1xcdHJtYl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Y29ubi1cXHUwMDNlcm1iX2Rlc2MpO1xcbitcXHRpZiAoIXJtYl9kZXNjKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopY29ubi1cXHUwMDNlcm1iX2Rlc2MtXFx1MDAzZWNwdV9hZGRyO1xcbitcXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopcm1iX2Rlc2MtXFx1MDAzZWNwdV9hZGRyO1xcbiBcXHRzbWNkX2N1cnNfY29weShcXHUwMDI2Y2RjLnByb2QsIFxcdTAwMjZkYXRhX2NkYy1cXHUwMDNlcHJvZCwgY29ubik7XFxuIFxcdHNtY2RfY3Vyc19jb3B5KFxcdTAwMjZjZGMuY29ucywgXFx1MDAyNmRhdGFfY2RjLVxcdTAwM2Vjb25zLCBjb25uKTtcXG4gXFx0c21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XFxuQEAgLTQ4Myw3ICs1MTEsMTEgQEAgc3RhdGljIHZvaWQgc21jX2NkY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcXG4gXFx0bGdyID0gc21jX2dldF9sZ3IobGluayk7XFxuIFxcdHJlYWRfbG9ja19iaChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19sb2NrKTtcXG4gXFx0Y29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy1cXHUwMDNldG9rZW4pLCBsZ3IpO1xcbi1cXHRpZiAoIWNvbm4gfHwgY29ubi1cXHUwMDNlb3V0X29mX3N5bmMpIHtcXG4rXFx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxcbitcXHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXFxuK1xcdCAqIE5VTEwgZGVyZWYgYW5kIGEgc3RhbGUtYnVmZmVyIHJlYWQgaW4gdGhlIGNvbm5lY3Rpb24gc2V0dXAgd2luZG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFjb25uIHx8IGNvbm4tXFx1MDAzZW91dF9vZl9zeW5jIHx8ICFzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZjb25uLVxcdTAwM2VybWJfZGVzYykpIHtcXG4gXFx0XFx0cmVhZF91bmxvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcXG5pbmRleCBjZjZiNjIwZmVmMDVmOS4uMDU2MWY4M2JlMzI3YjcgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXFxuKysrIGIvbmV0L3NtYy9zbWNfY29yZS5jXFxuQEAgLTI0OTksMTUgKzI0OTksMjYgQEAgc3RhdGljIGludCBfX3NtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QsIGJvb2wgaXNfcm1iKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoaXNfcm1iKSB7XFxuLVxcdFxcdGNvbm4tXFx1MDAzZXJtYl9kZXNjID0gYnVmX2Rlc2M7XFxuIFxcdFxcdGNvbm4tXFx1MDAzZXJtYmVfc2l6ZV9jb21wID0gYnVmc2l6ZV9jb21wO1xcbiBcXHRcXHRzbWMtXFx1MDAzZXNrLnNrX3JjdmJ1ZiA9IGJ1ZnNpemUgKiAyO1xcbiBcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZjb25uLVxcdTAwM2VieXRlc190b19yY3YsIDApO1xcbiBcXHRcXHRjb25uLVxcdTAwM2VybWJlX3VwZGF0ZV9saW1pdCA9XFxuIFxcdFxcdFxcdHNtY19ybWJfd25kX3VwZGF0ZV9saW1pdChidWZfZGVzYy1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0LyogUHVibGlzaCB0aGUgcmVjZWl2ZSBidWZmZXIgbGFzdCwgd2l0aCByZWxlYXNlIHNlbWFudGljczogdGhlXFxuK1xcdFxcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBpbiB0aGUgbGluayBncm91cCdzIHRva2VuIHRyZWUsIHNvIGFcXG4rXFx0XFx0ICogY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIG11c3Qgb2JzZXJ2ZSB0aGUgZnVsbHlcXG4rXFx0XFx0ICogaW5pdGlhbGlzZWQgcmVjZWl2ZSBzdGF0ZSBhYm92ZSAoYW5kIHRoZSBidWZmZXIpIG9uY2UgaXQgc2Vlc1xcbitcXHRcXHQgKiBhIG5vbi1OVUxMIHJtYl9kZXNjLiAgUGFpcnMgd2l0aCB0aGUgc21wX2xvYWRfYWNxdWlyZSgpIGluIHRoZVxcbitcXHRcXHQgKiBDREMgcmVjZWl2ZSBwYXRoLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmNvbm4tXFx1MDAzZXJtYl9kZXNjLCBidWZfZGVzYyk7XFxuIFxcdFxcdGlmIChpc19zbWNkKVxcbiBcXHRcXHRcXHRzbWNfaXNtX3NldF9jb25uKGNvbm4pOyAvKiBtYXAgUk1CL3NtY2RfZGV2IHRvIGNvbm4gKi9cXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogUGxhaW4gc3RvcmU6IHRoaXMgc2VuZC1idWZmZXIgcGFzcyBydW5zIGJlZm9yZSB0aGUgUk1CIHBhc3MsXFxuK1xcdFxcdCAqIHdob3NlIHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZjb25uLVxcdTAwM2VybWJfZGVzYykgdGhlbiBwdWJsaXNoZXMgdGhpc1xcbitcXHRcXHQgKiBzdG9yZSB0b28sIGFuZCB0aGUgQ0RDIHJlY2VpdmUgcGF0aCBpcyBnYXRlZCBvbiBybWJfZGVzYy5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdGNvbm4tXFx1MDAzZXNuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7XFxuIFxcdFxcdHNtYy1cXHUwMDNlc2suc2tfc25kYnVmID0gYnVmc2l6ZSAqIDI7XFxuIFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmNvbm4tXFx1MDAzZXNuZGJ1Zl9zcGFjZSwgYnVmc2l6ZSk7XFxuQEAgLTI1OTksOSArMjYxMCwxNiBAQCBpbnQgc21jZF9idWZfYXR0YWNoKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbiBcXHRidWZfZGVzYy1cXHUwMDNlY3B1X2FkZHIgPVxcbiBcXHRcXHQodTggKilidWZfZGVzYy1cXHUwMDNlY3B1X2FkZHIgKyBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XFxuIFxcdGJ1Zl9kZXNjLVxcdTAwM2VsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpO1xcbi1cXHRjb25uLVxcdTAwM2VzbmRidWZfZGVzYyA9IGJ1Zl9kZXNjO1xcbi1cXHRjb25uLVxcdTAwM2VzbmRidWZfZGVzYy1cXHUwMDNldXNlZCA9IDE7XFxuLVxcdGF0b21pY19zZXQoXFx1MDAyNmNvbm4tXFx1MDAzZXNuZGJ1Zl9zcGFjZSwgY29ubi1cXHUwMDNlc25kYnVmX2Rlc2MtXFx1MDAzZWxlbik7XFxuK1xcdGJ1Zl9kZXNjLVxcdTAwM2V1c2VkID0gMTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2Y29ubi1cXHUwMDNlc25kYnVmX3NwYWNlLCBidWZfZGVzYy1cXHUwMDNlbGVuKTtcXG4rXFx0LyogUHVibGlzaCB0aGUgZ2hvc3Qgc2VuZCBidWZmZXIgbGFzdCwgd2l0aCByZWxlYXNlIHNlbWFudGljczogdGhlXFxuK1xcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxcbitcXHQgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlXFxuK1xcdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcXG4rXFx0ICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpblxcbitcXHQgKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxcbitcXHQgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmNvbm4tXFx1MDAzZXNuZGJ1Zl9kZXNjLCBidWZfZGVzYyk7XFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZnJlZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDA6MTAuNDQyNjM5NTkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTgyMDc2NzY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIixcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfY2RjX21zZ19yZWN2X2FjdGlvblwiLFxuICAgIFwic21jZF9jZGNfcnhfdHNrbGV0XCIsXG4gICAgXCJzbWNfY2RjX3J4X2hhbmRsZXJcIixcbiAgICBcIl9fc21jX2J1Zl9jcmVhdGVcIixcbiAgICBcInNtY2RfYnVmX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGFkZHMgbWVtb3J5IGJhcnJpZXJzIChzbXBfbG9hZF9hY3F1aXJlIGFuZCBzbXBfc3RvcmVfcmVsZWFzZSkgdG8gcHJldmVudCBjb25jdXJyZW50IENEQyAoQ29ubmVjdGlvbiBEYXRhIENvbnRyb2wpIHJlY2VpdmUgaGFuZGxlcnMgZnJvbSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKHNuZGJ1Zl9kZXNjIGFuZCBybWJfZGVzYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFNNQyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGxvb3BiYWNrIElTTSBkZXZpY2UgKFNNQy1EKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MGFjZDI5MzUwZDFiODM2MmY1ZTVhZjMzOTFlMzFkZjAyMmZkYWFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMTg6MDA6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jZGMuYyBiL25ldC9zbWMvc21jX2NkYy5jXG5pbmRleCAzMmQ2ZDAzZGYzMjE0NS4uZWE2MWIxZTc1YzcyY2YgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jZGMuY1xuKysrIGIvbmV0L3NtYy9zbWNfY2RjLmNcbkBAIC0zMzIsOCArMzMyLDIwIEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxuIHtcbiBcdHVuaW9uIHNtY19ob3N0X2N1cnNvciBjb25zX29sZCwgcHJvZF9vbGQ7XG4gXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcdTAwMjZzbWMtXHUwMDNlY29ubjtcbitcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnNuZGJ1Zl9kZXNjO1xuIFx0aW50IGRpZmZfY29ucywgZGlmZl9wcm9kLCBkaWZmX3R4O1xuIFxuK1x0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG4rXHQgKiBfX3NtY19idWZfY3JlYXRlKCkvc21jZF9idWZfYXR0YWNoKCkuICBPbiB0aGUgU01DLUQgRE1CLW5vY29weSBwYXRoXG4rXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XG4rXHQgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeVxuK1x0ICogc25kYnVmX2Rlc2MgY29uc3VtZXIgYmVsb3cgKHRoZSBub2NvcHkgYWNjb3VudGluZyBhbmQgdGhlIHNuZGJ1ZlxuK1x0ICogY29uc3VtZXIgdHJpZ2dlciwgd2hpY2ggZGVyZWZlcmVuY2VzIGl0IHZpYSBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSlcbitcdCAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhblxuK1x0ICogdW5pbml0aWFsaXNlZCBidWZmZXIuXG4rXHQgKi9cbitcdHNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjKTtcbitcbiBcdHNtY19jdXJzX2NvcHkoXHUwMDI2cHJvZF9vbGQsIFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kLCBjb25uKTtcbiBcdHNtY19jdXJzX2NvcHkoXHUwMDI2Y29uc19vbGQsIFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zLCBjb25uKTtcbiBcdHNtY19jZGNfbXNnX3RvX2hvc3QoXHUwMDI2Y29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLCBjZGMsIGNvbm4pO1xuQEAgLTM1MSwxNCArMzYzLDE3IEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxuIFxuIFx0XHQvKiBpZiBsb2NhbCBzbmRidWYgc2hhcmVzIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gd2l0aFxuIFx0XHQgKiBwZWVyIFJNQiwgdGhlbiB1cGRhdGUgdHhfY3Vyc19maW4gYW5kIHNuZGJ1Zl9zcGFjZVxuLVx0XHQgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuXG4rXHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS4gIFRoZSBnaG9zdFxuK1x0XHQgKiBzbmRidWZfZGVzYyAoYWNxdWlyZWQgYWJvdmUpIG1heSBzdGlsbCBiZSB1bnNldCBpbiB0aGUgU01DLURcbitcdFx0ICogRE1CLW5vY29weSBzZXR1cCB3aW5kb3csIHNvIHNraXAgdGhlIHVwZGF0ZSB3aGlsZSBpdCBpcyBOVUxMLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGNvbm4tXHUwMDNlbGdyLVx1MDAzZWlzX3NtY2QgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVx1MDAzZWxnci1cdTAwM2VzbWNkKSkge1xuK1x0XHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBzbmRidWZfZGVzYykge1xuIFx0XHRcdC8qIENhbGN1bGF0ZSBjb25zdW1lZCBkYXRhIGFuZFxuIFx0XHRcdCAqIGluY3JlbWVudCBmcmVlIHNlbmQgYnVmZmVyIHNwYWNlLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MtXHUwMDNlbGVuLFxuK1x0XHRcdGRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKHNuZGJ1Zl9kZXNjLVx1MDAzZWxlbixcbiBcdFx0XHRcdFx0XHRcdTAwMjZjb25uLVx1MDAzZXR4X2N1cnNfZmluLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zKTtcbiBcdFx0XHQvKiBpbmNyZWFzZSBsb2NhbCBzbmRidWYgc3BhY2UgYW5kIGZpbl9jdXJzICovXG5AQCAtMzkxLDEwICs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXHRcdFx0Y29ubi1cdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDtcbiBcdH1cbiBcbi1cdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMgKi9cbi1cdGlmICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4tXHQgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbi1cdCAgICBjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSB7XG4rXHQvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDLlxuK1x0ICogc21jX3R4X3ByZXBhcmVkX3NlbmRzKCkgYW5kIHNtY190eF9wZW5kaW5nKCkgZGVyZWZlcmVuY2Ugc25kYnVmX2Rlc2MsXG4rXHQgKiBzbyBza2lwIHRoZSB3aG9sZSB0cmlnZ2VyIHdoaWxlIGl0IGlzIHVuc2V0ICh0aGUgU01DLUQgRE1CLW5vY29weVxuK1x0ICogc2V0dXAgd2luZG93KTogdGhlcmUgaXMgbm90aGluZyB0byBzZW5kIHdpdGhvdXQgYSBzZW5kIGJ1ZmZlci5cbitcdCAqL1xuK1x0aWYgKHNuZGJ1Zl9kZXNjIFx1MDAyNlx1MDAyNlxuK1x0ICAgICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4rXHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLmNvbnNfY3Vyc191cGRfcmVxIHx8XG4rXHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLnVyZ19kYXRhX3BlbmRpbmcpKSB7XG4gXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKFx1MDAyNnNtYy1cdTAwM2VzaykpXG4gXHRcdFx0c21jX3R4X3BlbmRpbmcoY29ubik7XG4gXHRcdGVsc2VcbkBAIC00NDMsMTMgKzQ2MywyMSBAQCBzdGF0aWMgdm9pZCBzbWNkX2NkY19yeF90c2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuIHtcbiBcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IGZyb21fdGFza2xldChjb25uLCB0LCByeF90c2tsZXQpO1xuIFx0c3RydWN0IHNtY2RfY2RjX21zZyAqZGF0YV9jZGM7XG4rXHRzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpybWJfZGVzYztcbiBcdHN0cnVjdCBzbWNkX2NkY19tc2cgY2RjO1xuIFx0c3RydWN0IHNtY19zb2NrICpzbWM7XG4gXG4gXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VraWxsZWQpXG4gXHRcdHJldHVybjtcbitcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cbitcdCAqIGlzIHB1Ymxpc2hlZCBiZWZvcmUgaXRzIFJNQiBpcyBhbGxvY2F0ZWQsIHNvIGJhaWwgd2hpbGUgcm1iX2Rlc2MgaXNcbitcdCAqIHVuc2V0IHRvIGF2b2lkIGEgTlVMTCBkZXJlZiBhbmQgYSBsb2FkIG9mIGFuIHVuaW5pdGlhbGlzZWQgYnVmZmVyLlxuK1x0ICovXG4rXHRybWJfZGVzYyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYyk7XG4rXHRpZiAoIXJtYl9kZXNjKVxuK1x0XHRyZXR1cm47XG4gXG4tXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopY29ubi1cdTAwM2VybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbitcdGRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKilybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbiBcdHNtY2RfY3Vyc19jb3B5KFx1MDAyNmNkYy5wcm9kLCBcdTAwMjZkYXRhX2NkYy1cdTAwM2Vwcm9kLCBjb25uKTtcbiBcdHNtY2RfY3Vyc19jb3B5KFx1MDAyNmNkYy5jb25zLCBcdTAwMjZkYXRhX2NkYy1cdTAwM2Vjb25zLCBjb25uKTtcbiBcdHNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xuQEAgLTQ4Myw3ICs1MTEsMTEgQEAgc3RhdGljIHZvaWQgc21jX2NkY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcbiBcdGxnciA9IHNtY19nZXRfbGdyKGxpbmspO1xuIFx0cmVhZF9sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbiBcdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXHUwMDNldG9rZW4pLCBsZ3IpO1xuLVx0aWYgKCFjb25uIHx8IGNvbm4tXHUwMDNlb3V0X29mX3N5bmMpIHtcbitcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcbitcdCAqIFJNQiBpcyB1bnNldCAoc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBkZXJlZmVyZW5jZXMgaXQpIHRvIGF2b2lkIGFcbitcdCAqIE5VTEwgZGVyZWYgYW5kIGEgc3RhbGUtYnVmZmVyIHJlYWQgaW4gdGhlIGNvbm5lY3Rpb24gc2V0dXAgd2luZG93LlxuK1x0ICovXG4rXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VvdXRfb2Zfc3luYyB8fCAhc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXJtYl9kZXNjKSkge1xuIFx0XHRyZWFkX3VubG9ja19iaChcdTAwMjZsZ3ItXHUwMDNlY29ubnNfbG9jayk7XG4gXHRcdHJldHVybjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IGNmNmI2MjBmZWYwNWY5Li4wNTYxZjgzYmUzMjdiNyAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuY1xuKysrIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5AQCAtMjQ5OSwxNSArMjQ5OSwyNiBAQCBzdGF0aWMgaW50IF9fc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCwgYm9vbCBpc19ybWIpXG4gXHR9XG4gXG4gXHRpZiAoaXNfcm1iKSB7XG4tXHRcdGNvbm4tXHUwMDNlcm1iX2Rlc2MgPSBidWZfZGVzYztcbiBcdFx0Y29ubi1cdTAwM2VybWJlX3NpemVfY29tcCA9IGJ1ZnNpemVfY29tcDtcbiBcdFx0c21jLVx1MDAzZXNrLnNrX3JjdmJ1ZiA9IGJ1ZnNpemUgKiAyO1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlYnl0ZXNfdG9fcmN2LCAwKTtcbiBcdFx0Y29ubi1cdTAwM2VybWJlX3VwZGF0ZV9saW1pdCA9XG4gXHRcdFx0c21jX3JtYl93bmRfdXBkYXRlX2xpbWl0KGJ1Zl9kZXNjLVx1MDAzZWxlbik7XG4rXHRcdC8qIFB1Ymxpc2ggdGhlIHJlY2VpdmUgYnVmZmVyIGxhc3QsIHdpdGggcmVsZWFzZSBzZW1hbnRpY3M6IHRoZVxuK1x0XHQgKiBjb25uZWN0aW9uIGlzIGFscmVhZHkgaW4gdGhlIGxpbmsgZ3JvdXAncyB0b2tlbiB0cmVlLCBzbyBhXG4rXHRcdCAqIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBtdXN0IG9ic2VydmUgdGhlIGZ1bGx5XG4rXHRcdCAqIGluaXRpYWxpc2VkIHJlY2VpdmUgc3RhdGUgYWJvdmUgKGFuZCB0aGUgYnVmZmVyKSBvbmNlIGl0IHNlZXNcbitcdFx0ICogYSBub24tTlVMTCBybWJfZGVzYy4gIFBhaXJzIHdpdGggdGhlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0aGVcbitcdFx0ICogQ0RDIHJlY2VpdmUgcGF0aC5cbitcdFx0ICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MsIGJ1Zl9kZXNjKTtcbiBcdFx0aWYgKGlzX3NtY2QpXG4gXHRcdFx0c21jX2lzbV9zZXRfY29ubihjb25uKTsgLyogbWFwIFJNQi9zbWNkX2RldiB0byBjb25uICovXG4gXHR9IGVsc2Uge1xuK1x0XHQvKiBQbGFpbiBzdG9yZTogdGhpcyBzZW5kLWJ1ZmZlciBwYXNzIHJ1bnMgYmVmb3JlIHRoZSBSTUIgcGFzcyxcbitcdFx0ICogd2hvc2Ugc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYykgdGhlbiBwdWJsaXNoZXMgdGhpc1xuK1x0XHQgKiBzdG9yZSB0b28sIGFuZCB0aGUgQ0RDIHJlY2VpdmUgcGF0aCBpcyBnYXRlZCBvbiBybWJfZGVzYy5cbitcdFx0ICovXG4gXHRcdGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MgPSBidWZfZGVzYztcbiBcdFx0c21jLVx1MDAzZXNrLnNrX3NuZGJ1ZiA9IGJ1ZnNpemUgKiAyO1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlc25kYnVmX3NwYWNlLCBidWZzaXplKTtcbkBAIC0yNTk5LDkgKzI2MTAsMTYgQEAgaW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiBcdGJ1Zl9kZXNjLVx1MDAzZWNwdV9hZGRyID1cbiBcdFx0KHU4ICopYnVmX2Rlc2MtXHUwMDNlY3B1X2FkZHIgKyBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XG4gXHRidWZfZGVzYy1cdTAwM2VsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpO1xuLVx0Y29ubi1cdTAwM2VzbmRidWZfZGVzYyA9IGJ1Zl9kZXNjO1xuLVx0Y29ubi1cdTAwM2VzbmRidWZfZGVzYy1cdTAwM2V1c2VkID0gMTtcbi1cdGF0b21pY19zZXQoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfc3BhY2UsIGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MtXHUwMDNlbGVuKTtcbitcdGJ1Zl9kZXNjLVx1MDAzZXVzZWQgPSAxO1xuK1x0YXRvbWljX3NldChcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9zcGFjZSwgYnVmX2Rlc2MtXHUwMDNlbGVuKTtcbitcdC8qIFB1Ymxpc2ggdGhlIGdob3N0IHNlbmQgYnVmZmVyIGxhc3QsIHdpdGggcmVsZWFzZSBzZW1hbnRpY3M6IHRoZVxuK1x0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSAoc21jX2lzbV9zZXRfY29ubigpXG4rXHQgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlXG4rXHQgKiB0aGUgZnVsbHkgaW5pdGlhbGlzZWQgZ2hvc3QgYnVmZmVyIG9uY2UgaXQgc2VlcyBhIG5vbi1OVUxMXG4rXHQgKiBzbmRidWZfZGVzYy4gIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluXG4rXHQgKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxuK1x0ICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLCBidWZfZGVzYyk7XG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDA6MTAuNDQyNjQxNjMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1MTU0OTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBTeW5jaHJvbml6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCB0b3VjaGluZyBgbmV0L3NtYy9zbWNfY2RjLmNgIGFuZCBgbmV0L3NtYy9zbWNfY29yZS5jYC4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgc2xhcHBpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGFuZCBgc21wX3N0b3JlX3JlbGVhc2VgIG9udG8gdGhlIGBzbmRidWZfZGVzY2AgYW5kIGBybWJfZGVzY2AgcG9pbnRlcnMgd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYC4gUmlnaHQsIGEgc3luY2hyb25pemF0aW9uIGZpeCBmb3IgU01DIHNvY2tldHMuIFRoaXMgaXMgYSBjbGFzc2ljIOKAkyBwcmV2ZW50aW5nIHRob3NlIG5hc3R5IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIHRoYXQgcG9wIHVwIHdoZW4gYSBDREMgcmVjZWl2ZSBoYW5kbGVyIGdldHMgdG9vIGVhZ2VyIGFuZCB0cmllcyB0byBhY2Nlc3MgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIGV2ZXJ5dGhpbmcncyBwcm9wZXJseSBzZXQgdXAuXG5cblRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gbm93LCBhcyBhbHdheXMsIGlzIHRlc3RhYmlsaXR5LiBUaGlzIHR5cGUgb2YgY29uY3VycmVuY3kgaXNzdWUgY2FuIGJlIHRyaWNreSB0byB0cmlnZ2VyIHJlbGlhYmx5LiBDYW4gSSBldmVuIHJlcHJvZHVjZSB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFNNQyBoYXMgdGhvc2UgdHdvIGZsYXZvcnM6IFNNQy1SIChSRE1BLCByaWdodD8pIGFuZCBTTUMtRCAoSW50ZXJuYWwgU2hhcmVkIE1lbW9yeSkuIEFuZCBTTUMtRCBjYW4gbGV2ZXJhZ2UgdGhhdCBjb252ZW5pZW50IGxvb3BiYWNrIElTTSBkZXZpY2UsIHRoZSBgc21jX2xvb3BiYWNrYC4gVGhhdCdzIHRoZSBrZXkhIElmIEkgY2FuIGdldCB0aGF0IGBzbWNfbG9vcGJhY2tgIGdvaW5nIGluIFFFTVUgb3IgR0NFLCBJIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcywgZ2l2ZW4gdGhlIHJpZ2h0IHdvcmtsb2FkLlxuXG5Ob3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gd29ya2luZyB3aXRoIHRoZSByaWdodCBjb25maWdzLiBPYnZpb3VzbHksIGBDT05GSUdfU01DYCBoYXMgdG8gYmUgZW5hYmxlZC4gSSBtaWdodCB3YW50IGBDT05GSUdfU01DX0RJQUdgIGZvciBkZWJ1Z2dpbmcuIEJ1dCBmb3IgdGVzdGluZyB0aGUgbG9vcGJhY2ssIEknbGwgKmRlZmluaXRlbHkqIG5lZWQgYENPTkZJR19TTUNfTE9gLiBMZXQncyBnZXQgYSBxdWljayBncmVwIGdvaW5nIHRvIGNoZWNrIG9uIHRob3NlIFNNQyBjb25maWdzIGFuZCBtYWtlIHN1cmUgSSdtIHN0YXJ0aW5nIGZyb20gYSBjbGVhbiBzbGF0ZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggb25lcyBhcmUgZW5hYmxlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjE3LjA5NDE5Mzc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MDg3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDA6MTcuMTkzMzAyMTM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NDc3NzMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgU3RyYXRlZ3k6IEludmVzdGlnYXRpbmcgTG93LUxldmVsIENvbnRyb2wqKlxuXG5BbHJpZ2h0LCB0aGUgcHJvYmxlbSdzIHByZXNlbnRpbmcgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBhIHBvdGVudGlhbCBpc3N1ZSBhdCB0aGUgbG93ZXIgbGV2ZWxzIG9mIGNvbnRyb2wuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIFNlcmlhbCBNb3RvciBDb250cm9sbGVyJ3MgbG93LWxldmVsIGNvbnRyb2wsIHRoZSByZWdpc3RlcnMgYW5kIHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgY29udHJvbC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIHN5c3RlbXMsIGBTTUNfTE9gIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgdGhhdCBhcmUgY2F1c2luZyB0aGUgcHJvYmxlbSByZXNpZGUsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3aGVyZSBJIGNhbiBzZWUgdGhlIGVmZmVjdHMgb2YgYSBsb3dlci1sZXZlbCBpc3N1ZSwgc3VjaCBhcyByZWdpc3RlciB2YWx1ZXMuIEkgd2FudCB0byBpbnNwZWN0IHRoaW5ncyB0aGF0IGFyZSBjbG9zZWx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgbG9vcHMgb3IgdGhlIHNpZ25hbCBwYXRoIG9mIHRoZSBtb3RvciBjb250cm9sbGVyLiBUaGlzIGlzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgY2x1ZXMgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIG1vdG9yLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBsb29raW5nIGZvciBhbnl0aGluZyBpbiB0aGUgYFNNQ19MT2AgYXJlYSwgb3Igd2l0aGluIGFueSBhbHRlcm5hdGl2ZSBzeXN0ZW1zLCB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjIwLjQ1ODA4MTYzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyNDc0NjMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNfTE9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDoyMC41NzMzMzgwOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODIyMTcxODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTTUMgTG9vcGJhY2sgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgU01DIGxvb3BiYWNrIGlzc3VlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSBwcm9ibGVtIGxpa2VseSBsaWVzIHdpdGhpbiB0aGUgYG5ldC9zbWMvYCBkaXJlY3Rvcnkg4oCTIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBJdCdzIHRoZSBjb3JlIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb25zIChTTUMpIGltcGxlbWVudGF0aW9uIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBzbyB0aGUgbG9vcGJhY2sgZnVuY3Rpb25hbGl0eSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgaGFuZGxlZCB0aGVyZS4gTm93LCB0aGUga2V5IGtleXdvcmRzIHRvIGxvb2sgZm9yIGFyZSBgc21jX2xvb3BiYWNrYCBvciBwZXJoYXBzIGp1c3QgYFNNQ19MT2AuIEknbSBsZWFuaW5nIHRvd2FyZCB0aGVzZSBiZWNhdXNlIGBzbWNfbG9vcGJhY2tgIHNlZW1zIHRoZSBtb3N0IGV4cGxpY2l0LCBidXQgYFNNQ19MT2AgaXMgYSBjb21tb24gYWJicmV2aWF0aW9uIGNvbnZlbnRpb24gaW4ga2VybmVsIGNvZGUsIHNvIGl0J3MgYSB3b3J0aHdoaWxlIGFsdGVybmF0aXZlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzLCBsaWtlbHkgYGdyZXBgIG9yIGEgc2ltaWxhciB1dGlsaXR5LCB0byBlZmZpY2llbnRseSBuYXZpZ2F0ZSB0aGUgc291cmNlIHRyZWUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIG5hbWVzLCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIG9yIGFueSBjb21tZW50cyB0aGF0IHNwZWNpZmljYWxseSBtZW50aW9uIGxvb3BiYWNrLCBhbmQgaG9wZWZ1bGx5IGZpbmQgdGhlIHBpZWNlcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIGxvY2FsIGNvbW11bmljYXRpb24gcGF0aCB3aGVuIHRoZSB1c2VyIGludGVuZHMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgc2FtZSBob3N0LiBUaGlzIGNvdWxkIGludm9sdmUgZGlyZWN0IG1lbW9yeSBhY2Nlc3MsIHNoYXJlZCBtZW1vcnkgcmVnaW9ucywgb3IgYSBzcGVjaWFsIG5ldHdvcmsgZGV2aWNlIGFic3RyYWN0aW9uLiBJJ20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgYHN0cnVjdGAgb3IgYGNsYXNzYCB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoZSBsb29wYmFjaydzIHByb3BlcnRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzODMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDoyNC4zOTU1MTI2MTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3MTg5NTUxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfbG9vcGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjI0LjcyMjcwODY3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4Njc2NTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqTG9va2luZyBmb3IgdGhlIFJpZ2h0IENvbnRleHQqKlxuXG5IbW0sIHdoZXJlIGRpZCBJIGxhc3Qgc2VlIHRoYXQgYHNtY19sb29wYmFja2AgZnVuY3Rpb24gbWVudGlvbmVkPyBJIGZlZWwgbGlrZSBpdCBjb3VsZCBiZSBpbiBvbmUgb2YgdGhlIG5ldHdvcmtpbmcgZGlyZWN0b3JpZXMsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBlaXRoZXIgYGRyaXZlcnMvczM5MC9uZXQvYCBvciBtYXliZSBqdXN0IHRoZSBnZW5lcmFsIGBkcml2ZXJzL25ldC9gIHBhdGguIExldCdzIHN0YXJ0IHdpdGggdGhvc2UuIEFuZCB3aGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weWAgZnVuY3Rpb24gdG9vLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBlY29zeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDoyNy41MDk0NzYwNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4OTU3MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MTQxNj1zdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTQ2NC1cXG5uZXQvc21jL2FmX3NtYy5jOjE0NjU6XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXNtY2QpKSB7XFxubmV0L3NtYy9hZl9zbWMuYy0xNDY2LVxcdFxcdHJjID0gc21jZF9idWZfYXR0YWNoKHNtYyk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTI0NDk9c3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjU3Mi1cXHRpZiAoaW5pLVxcdTAwM2Vpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9hZl9zbWMuYzoyNTczOlxcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShuZXdfc21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlc21jZCkpIHtcXG5uZXQvc21jL2FmX3NtYy5jLTI1NzQtXFx0XFx0cmMgPSBzbWNkX2J1Zl9hdHRhY2gobmV3X3NtYyk7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz0yMzc9aW50IHNtY2RfY2RjX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTI1OS1cXG5uZXQvc21jL3NtY19jZGMuYzoyNjA6XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXFx1MDAzZWxnci1cXHUwMDNlc21jZCkpXFxubmV0L3NtYy9zbWNfY2RjLmMtMjYxLVxcdFxcdC8qIGlmIGxvY2FsIHNuZGJ1ZiBzaGFyZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiB3aXRoXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy0zNzAtXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWxnci1cXHUwMDNlaXNfc21jZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2NkYy5jOjM3MTpcXHRcXHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2NkYy5jLTM3Mi1cXHRcXHQgICAgc25kYnVmX2Rlc2MpIHtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjUzPXZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3Mi1cXHRcXHRcXHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNzM6XFx0XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGxnci1cXHUwMDNlc21jZCkpXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNzQtXFx0XFx0XFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE1MTU9c3RhdGljIHZvaWQgc21jX2Nvbm5fa2lsbChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sIGJvb2wgc29mdClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xNTI3LVxcdFxcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTUyODpcXHRcXHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSlcXG5uZXQvc21jL3NtY19jb3JlLmMtMTUyOS1cXHRcXHRcXHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjU2MT1pbnQgc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY2LVxcdGlmIChpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9zbWNfY29yZS5jOjI1Njc6XFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXNtY2QpKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY4LVxcdFxcdGdvdG8gY3JlYXRlX3JtYjtcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jPTIzNT1pbnQgc21jX2lzbV9yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGludCBkbWJfbGVuLFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjU5LVxcbm5ldC9zbWMvc21jX2lzbS5jOjI2MDpib29sIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHN0cnVjdCBzbWNkX2RldiAqc21jZClcXG5uZXQvc21jL3NtY19pc20uYy0yNjEte1xcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmg9NTE9dm9pZCBzbWNfaXNtX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LFxcbm5ldC9zbWMvc21jX2lzbS5oLTUyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYyk7XFxubmV0L3NtYy9zbWNfaXNtLmg6NTM6Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpO1xcbm5ldC9zbWMvc21jX2lzbS5oLTU0LWludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDA6MjcuNjA4NDM3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA2NDMxODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaXNzZWN0IHdoYXQgdGhpcyBgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHlgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRvaW5nLiBUaGUgbmFtZSBpdHNlbGYgaXMgYSBjbHVlLCBzbyBsZXQncyBicmVhayBpdCBkb3duLiBcIlNNQ1wiIGxpa2VseSBpbmRpY2F0ZXMgU2VjdXJlIE1vbml0b3IgQ2FsbCBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBzZWN1cmUgY29tbXVuaWNhdGlvbi4gXCJJU01cIiBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGFuIEluc3RydWN0aW9uIFNldCBNbmVtb25pYy4gXCJTdXBwb3J0XCIgaXMgc2VsZiBleHBsYW5hdG9yeSBhbmQgXCJkbWJfbm9jb3B5XCIgc2VlbXMgdGhlIG1vc3QgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQuIFwiZG1iXCIgaXMgYSBsaWtlbHkgcmVmZXJlbmNlIHRvIGEgRGF0YSBNZW1vcnkgQmFycmllciBhbmQgXCJub2NvcHlcIiBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSBtZW1vcnkgaXNuJ3QgZHVwbGljYXRlZCBvciBjb3BpZWQuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGludm9sdmVzIHNvbWUga2luZCBvZiBtZWNoYW5pc20gZm9yIHNlY3VyZSBtZW1vcnkgYWNjZXNzLCBwcm9iYWJseSB1c2luZyBhIGRhdGEgbWVtb3J5IGJhcnJpZXIsIGFuZCBpdCdzIGRvaW5nIHNvIHdpdGhvdXQgY29weWluZyB0aGUgYWN0dWFsIGRhdGEuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHNlbnNpdGl2ZSBtZW1vcnkgcmVnaW9ucywgcGVyaGFwcyBzaGFyZWQgYmV0d2VlbiBzZWN1cmUgYW5kIG5vbi1zZWN1cmUgd29ybGRzLCBvciB3aXRoaW4gYSBzZWN1cml0eSBjb250ZXh0IGl0c2VsZiwgd2hlcmUgZGF0YSBpbnRlZ3JpdHkgYW5kIGFjY2VzcyBjb250cm9sIGFyZSBjcml0aWNhbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgdXNlLWNhc2U/IFdoYXQgYXJjaGl0ZWN0dXJlIGlzIHRoaXMgdGFyZ2V0aW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIFRydXN0Wm9uZSBzeXN0ZW0sIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBcIm5vY29weVwiIGFzcGVjdCByZWFsbHkgcGlxdWVzIG15IGludGVyZXN0OyB0aGF0J3MgZ2VuZXJhbGx5IGRvbmUgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGNvcHlpbmcuIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyB0aGUgYmFycmllciBpcyBlbXBsb3llZCBhbmQgd2hhdCBraW5kIG9mIG1lbW9yeSBhY2Nlc3MgcHJvdGVjdGlvbiBpdCdzIHByb3ZpZGluZy4gSXMgdGhpcyBzaW1wbHkgYWJvdXQgY2FjaGUgY29oZXJlbmN5PyBPciBpcyB0aGVyZSBzb21ldGhpbmcgbW9yZSBudWFuY2VkIGdvaW5nIG9uPyBJIHNob3VsZCBhbnRpY2lwYXRlIGl0IGJlaW5nIHJlbGF0ZWQgdG8gc29tZSBzeXN0ZW0tbGV2ZWwgc2VjdXJpdHkgYXJjaGl0ZWN0dXJlLCBsaWtlbHkgYSBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgaXNvbGF0aW9uIG9yIGNvbnRyb2wgc2NoZW1lLiBMZXQncyBzZWUgaG93IEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxMywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjMxLjgxNDg3MTU2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNzU4NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfaXNtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfaXNtLmM9MjM1PWludCBzbWNfaXNtX3JlZ2lzdGVyX2RtYihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgaW50IGRtYl9sZW4sXFxuLS1cXG5uZXQvc21jL3NtY19pc20uYy0yNTktXFxubmV0L3NtYy9zbWNfaXNtLmM6MjYwOmJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxcbm5ldC9zbWMvc21jX2lzbS5jLTI2MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjMxLjkyNTYzNjUxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzc4OTg4MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHlgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9zbWMvc21jX2lzbS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weWAuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgc29tZSBmb3JtIG9mIG1lbW9yeSBiYXJyaWVyIG9wZXJhdGlvbiByZWxhdGVkIHRvIGRhdGEgbW92ZW1lbnQgd2l0aGluIHRoZSBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zIG92ZXIgUkRNQSAoU01DLVIpIElTTSAoSW5maW5pQmFuZCBTaGFyZWQgTWVtb3J5KSBjb250ZXh0LCBhbmQgdGhlIFwibm9jb3B5XCIgc3VmZml4IGhpbnRzIGl0J3MgcmVsYXRlZCB0byBoYW5kbGluZyBtZW1vcnkgcmVnaW9ucyB0aGF0IGRvbid0IG5lZWQgdG8gYmUgZXhwbGljaXRseSBjb3BpZWQuXG5cbkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGhvdyB0aGlzIHN1cHBvcnRzIG9yIGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBTTUMtUiBJU00gZGF0YSBwYXRoLiBJcyB0aGlzIHBhcnQgb2YgdGhlIGluaXRpYWwgc2V0dXAsIHRoZSBkYXRhIHRyYW5zZmVyIGl0c2VsZiwgb3IgcGVyaGFwcyBhIGNsZWFuLXVwIHBoYXNlPyBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgbWVtb3J5IGJhcnJpZXIgaXQncyB1c2luZy4gQSBETUIgKERhdGEgTWVtb3J5IEJhcnJpZXIpIGlzIGEgZmFpcmx5IGJyb2FkIHRlcm0sIGJ1dCBpbiB0aGlzIGNvbnRleHQsIEkgc3VzcGVjdCBpdCBsaWtlbHkgaW52b2x2ZXMgZWl0aGVyIGVuc3VyaW5nIGRhdGEgaXMgd3JpdHRlbiB0byB0aGUgc2hhcmVkIG1lbW9yeSBiZWZvcmUgYmVpbmcgYWNjZXNzZWQgYnkgdGhlIHBlZXIsIG9yIG1ha2luZyBzdXJlIHRoZSBjdXJyZW50IHByb2Nlc3Mgc2VlcyB0aGUgZGF0YS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGNvbnRleHQgdGhhdCBiYXJyaWVyIGlzIG9wZXJhdGluZyBpbiB0byBiZSBzdXJlLiBBbnkgc3VidGxldGllcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gd291bGQgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nOiBhcmUgdGhleSByZWx5aW5nIG9uIGhhcmR3YXJlIGNhY2hlIGNvaGVyZW5jeSwgb3IgaXMgdGhlcmUgYSBtb3JlIHNvZnR3YXJlLWNlbnRyaWMgYXBwcm9hY2g/IFdoYXQgaW1wYWN0IGRvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIG9uIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb2YgdGhlIElTTSBzdWJzeXN0ZW0/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgYnkgZGlmZmVyZW50IHByb2Nlc3NlcyB3aXRoaW4gdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgaXQgaXMgdXNlZCB0byBndWFyYW50ZWUgb3JkZXIgYmV0d2VlbiByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zLiBUaGUgXCJub2NvcHlcIiBhc3BlY3QgcmVhbGx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbXVzdCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgZWZmaWNpZW5jeSBhbmQgaG93IHRoZXkncmUgb3B0aW1pemluZyBkYXRhIG1vdmVtZW50IGluIHRoaXMgY3JpdGljYWwgcGF0aC4gVGltZSB0byBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDozNi43MDQ2MjY2MjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfaXNtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU1OlxcdFxcdFxcdGRtYl9kZXNjLVxcdTAwM2VsZW4gPSBkbWIuZG1iX2xlbjtcXG4gMjU2OlxcdFxcdH1cXG4gMjU3OlxcdFxcdHJldHVybiByYztcXG4gMjU4OlxcdH1cXG4gMjU5OlxcdFxcbiAyNjA6XFx0Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpXFxuIDI2MTpcXHR7XFxuIDI2MjpcXHRcXHQvKiBmb3Igbm93IG9ubHkgbG9vcGJhY2staXNtIHN1cHBvcnRzXFxuIDI2MzpcXHRcXHQgKiBtZXJnaW5nIHNuZGJ1ZiB3aXRoIHBlZXIgRE1CIHRvIGF2b2lkXFxuIDI2NDpcXHRcXHQgKiBkYXRhIGNvcGllcyBiZXR3ZWVuIHRoZW0uXFxuIDI2NTpcXHRcXHQgKi9cXG4gMjY2OlxcdFxcdHJldHVybiAoc21jZC1cXHUwMDNlZGlicy1cXHUwMDNlb3BzLVxcdTAwM2VzdXBwb3J0X21tYXBwZWRfcmRtYiBcXHUwMDI2XFx1MDAyNlxcbiAyNjc6XFx0XFx0XFx0c21jZC1cXHUwMDNlZGlicy1cXHUwMDNlb3BzLVxcdTAwM2VzdXBwb3J0X21tYXBwZWRfcmRtYihzbWNkLVxcdTAwM2VkaWJzKSk7XFxuIDI2ODpcXHR9XFxuIDI2OTpcXHRcXG4gMjcwOlxcdGludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcXG4gMjcxOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYylcXG4gMjcyOlxcdHtcXG4gMjczOlxcdFxcdHN0cnVjdCBkaWJzX2RtYiBkbWI7XFxuIDI3NDpcXHRcXHRpbnQgcmMgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDozNi43MDQ3MTY4NjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNjMwNjg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTTUMgTWVyZ2UgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gdGhlIGNsdWUgaXMgXCJsb29wYmFjay1pc20gc3VwcG9ydHMgbWVyZ2luZyBzbmRidWYgd2l0aCBwZWVyIERNQlwiIOKAkyB0aGF0J3MgdGhlIGtleS4gVGhhdCB0ZWxscyBtZSB0aGUgbWVyZ2luZyBvZiB0aGUgc2VuZCBidWZmZXIgd2l0aCB0aGUgcGVlcidzIERpcmVjdCBNZW1vcnkgQnVmZmVyIChETUIpIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGluIHRoZSBsb29wYmFjayBJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIE1ldGhvZCAoSVNNKSB2YXJpYW50LiBFeGNlbGxlbnQuIFRoYXQgbmFycm93cyBkb3duIG15IGZvY3VzIGNvbnNpZGVyYWJseS4gVGhlIGltcGxpY2F0aW9uIGlzLCBpZiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGlzIG1lcmdlIGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byBmb2N1cyBvbiBob3cgaXQncyBkb25lIGluIHRoZSBsb29wYmFjayBjYXNlLlxuXG5Ob3csIHdoZXJlJ3MgdGhlIGNvZGU/IExldCdzIGFzc3VtZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBpbiBhIGBuZXQvc21jYCBkaXJlY3Rvcnkgc29tZXdoZXJlLCBhbmQgZ2l2ZW4gdGhlIGxvb3BiYWNrIGZvY3VzLCBJJ2xsIGJldCBpdCdzIGNhbGxlZCBzb21ldGhpbmcgbGlrZSBgc21jX2xvb3BiYWNrLmNgLiBPciBtYXliZSBgc21jX2lzbV9sb29wYmFjay5jYD8gRWl0aGVyIHdheSwgSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGF0IHBhdGggZm9yIHRoZSBkZXRhaWxzIG9mIHRoYXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIE15IGltbWVkaWF0ZSB0YXNrOiBmaW5kIHRoYXQgc291cmNlIGNvZGUgYW5kIGRpc3NlY3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjQwLjQzMTAyNTMxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5MDk3MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfaXNtLmM9MjYwPWJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxcbm5ldC9zbWMvc21jX2lzbS5jLTI2MS17XFxubmV0L3NtYy9zbWNfaXNtLmM6MjYyOlxcdC8qIGZvciBub3cgb25seSBsb29wYmFjay1pc20gc3VwcG9ydHNcXG5uZXQvc21jL3NtY19pc20uYy0yNjMtXFx0ICogbWVyZ2luZyBzbmRidWYgd2l0aCBwZWVyIERNQiB0byBhdm9pZFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmM9MzY1PXN0YXRpYyB2b2lkIHNtY19ubF9wcmVwX3NtY2RfZGV2KHN0cnVjdCBzbWNkX2Rldl9saXN0ICpkZXZfbGlzdCxcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jLTM3Ny1cXHRcXHRcXHRnb3RvIG5leHQ7XFxubmV0L3NtYy9zbWNfaXNtLmM6Mzc4OlxcdFxcdGlmIChzbWNfaXNtX2lzX2xvb3BiYWNrKHNtY2QtXFx1MDAzZWRpYnMpKVxcbm5ldC9zbWMvc21jX2lzbS5jLTM3OS1cXHRcXHRcXHRnb3RvIG5leHQ7XFxuLS1cXG5uZXQvc21jL3NtY19pc20uYz00OTE9c3RhdGljIHZvaWQgc21jZF9yZWdpc3Rlcl9kZXYoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtNTA3LVxcbm5ldC9zbWMvc21jX2lzbS5jOjUwODpcXHRpZiAoc21jX2lzbV9pc19sb29wYmFjayhkaWJzKSB8fFxcbm5ldC9zbWMvc21jX2lzbS5jLTUwOS1cXHQgICAgKGRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlYWRkX3ZsYW5faWQgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jLTUxNi1cXHQgKiAtIGRldmljZXMgd2l0aG91dCBwbmV0aWQgYmVmb3JlIGRldmljZXMgd2l0aCBwbmV0aWQ7XFxubmV0L3NtYy9zbWNfaXNtLmM6NTE3OlxcdCAqIC0gbG9vcGJhY2staXNtIGFsd2F5cyBhdCB0aGUgdmVyeSBiZWdpbm5pbmc7XFxubmV0L3NtYy9zbWNfaXNtLmMtNTE4LVxcdCAqL1xcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtNTIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY2RfZGV2LCBsaXN0KTtcXG5uZXQvc21jL3NtY19pc20uYzo1MjI6XFx0XFx0aWYgKGZlbnRyeSBcXHUwMDI2XFx1MDAyNiBzbWNfaXNtX2lzX2xvb3BiYWNrKGZlbnRyeS1cXHUwMDNlZGlicykpXFxubmV0L3NtYy9zbWNfaXNtLmMtNTIzLVxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZzbWNkLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZmVudHJ5LVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5oPTc4PXN0YXRpYyBpbmxpbmUgYm9vbCBfX3NtY19pc21faXNfZW11bGF0ZWQodTE2IGNoaWQpXFxuLS1cXG5uZXQvc21jL3NtY19pc20uaC04Mi1cXHQgKlxcbm5ldC9zbWMvc21jX2lzbS5oOjgzOlxcdCAqIGxvb3BiYWNrLWlzbTpcXHQweEZGRkZcXG5uZXQvc21jL3NtY19pc20uaC04NC1cXHQgKiB2aXJ0aW8taXNtOlxcdFxcdDB4RkYwMCB+IDB4RkZGRVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmg9ODk9c3RhdGljIGlubGluZSBib29sIHNtY19pc21faXNfZW11bGF0ZWQoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmgtOTUtXFxubmV0L3NtYy9zbWNfaXNtLmg6OTY6c3RhdGljIGlubGluZSBib29sIHNtY19pc21faXNfbG9vcGJhY2soc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxcbm5ldC9zbWMvc21jX2lzbS5oLTk3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDA6NDAuNTIzOTM5OTI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzA3NjcyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgS2VybmVsIExvb3BiYWNrIEltcGxlbWVudGF0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBsb29wYmFjayBmdW5jdGlvbmFsaXR5IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gYmUgcHJlY2lzZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSB2ZXJ5IHRhcmdldGVkIHNlYXJjaC4gSSdsbCBmb2N1cyBvbiBlaXRoZXIgdGhlIHBvdGVudGlhbGx5IG1vcmUgZ2VuZXJpYyB0ZXJtLCBgbG9vcGJhY2staXNtYCwgb3IsIGlmIHRoYXQncyB0b28gYnJvYWQsIEknbGwgZ28gZm9yIHRoZSBtb3JlIGxpa2VseSBzcGVjaWZpYywgYHNtY19sb29wYmFja2AuIFRoaXMgc2hvdWxkIGFsbG93IG1lIHRvIGhvbmUgaW4gb24gdGhlIGNvcmUgY29kZSByZXNwb25zaWJsZS4gS25vd2luZyB0aGUgZXhhY3QgbmFtaW5nIGNvbnZlbnRpb24gd2lsbCBzaWduaWZpY2FudGx5IGltcHJvdmUgdGhlIGVmZmljaWVuY3kgb2YgdGhpcyBzZWFyY2guIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBhcHByb2FjaCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZXhpc3Rpbmcga2VybmVsIGNvZGUgYmFzZS4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgYmUgdmFsdWFibGUgaW4gZ2V0dGluZyBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwncyBkZXNpZ24gY2hvaWNlcyB3aGVuIGl0IGNvbWVzIHRvIGxvb3BiYWNrIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDo0My45OTQ3MTU1MDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTYxMzQyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcGJhY2staXNtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTItLypcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM6ICogIEZ1bmN0aW9ucyBmb3IgZGlicyBsb29wYmFjay9sb29wYmFjay1pc20gZGV2aWNlLlxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNC0gKlxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC0yLS8qXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDozOiAqICBkaWJzIGxvb3BiYWNrIChha2EgbG9vcGJhY2staXNtKSBkZXZpY2Ugc3RydWN0dXJlIGRlZmluaXRpb25zLlxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNC0gKlxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmM9MjYwPWJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxcbm5ldC9zbWMvc21jX2lzbS5jLTI2MS17XFxubmV0L3NtYy9zbWNfaXNtLmM6MjYyOlxcdC8qIGZvciBub3cgb25seSBsb29wYmFjay1pc20gc3VwcG9ydHNcXG5uZXQvc21jL3NtY19pc20uYy0yNjMtXFx0ICogbWVyZ2luZyBzbmRidWYgd2l0aCBwZWVyIERNQiB0byBhdm9pZFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmM9NDkxPXN0YXRpYyB2b2lkIHNtY2RfcmVnaXN0ZXJfZGV2KHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jLTUxNi1cXHQgKiAtIGRldmljZXMgd2l0aG91dCBwbmV0aWQgYmVmb3JlIGRldmljZXMgd2l0aCBwbmV0aWQ7XFxubmV0L3NtYy9zbWNfaXNtLmM6NTE3OlxcdCAqIC0gbG9vcGJhY2staXNtIGFsd2F5cyBhdCB0aGUgdmVyeSBiZWdpbm5pbmc7XFxubmV0L3NtYy9zbWNfaXNtLmMtNTE4LVxcdCAqL1xcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmg9Nzg9c3RhdGljIGlubGluZSBib29sIF9fc21jX2lzbV9pc19lbXVsYXRlZCh1MTYgY2hpZClcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5oLTgyLVxcdCAqXFxubmV0L3NtYy9zbWNfaXNtLmg6ODM6XFx0ICogbG9vcGJhY2staXNtOlxcdDB4RkZGRlxcbm5ldC9zbWMvc21jX2lzbS5oLTg0LVxcdCAqIHZpcnRpby1pc206XFx0XFx0MHhGRjAwIH4gMHhGRkZFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjQ2LjYxMDg1NDMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NDA5MzY1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gZGlic19sb29wYmFjay5jIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUgb2YgdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiB0aGUgY29kZWJhc2U/XCIgVGltZSB0byBnbyBzdHJhaWdodCB0byB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGRpYnNfbG9vcGJhY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSwgYW5kIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBhcmUuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMsIG9yIHBvdGVudGlhbGx5IGEgZGV2aWNlIHRyZWUgb3ZlcmxheSwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhlcmUgYXJlIHNvbWUgcHJlcHJvY2Vzc29yIGRlZmluZXMgYXQgcGxheS4gVGhhdCdzIHRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyB0byBncm9rIHRoZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdGhlIGJhc2VsaW5lIGJlZm9yZSBhbnl0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ1OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjU0LjU1MTc5MzQ2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzI1NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESUJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDo1NC42NTkxMjYwMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ0MTYxNTY3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIERlcGVuZGVuY2llcyBmb3IgT3B0aW1hbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYENPTkZJR19ESUJTYCBhbmQgYENPTkZJR19ESUJTX0xPYCBhcmUgZXNzZW50aWFsIGNvbXBvbmVudHMuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgY29udGV4dC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIGBDT05GSUdfU01DYCBpcyBhbHNvIGEgZGVwZW5kZW5jeS4gQSBxdWljayBzZWFyY2ggcmV2ZWFscyBpdHMgcHJlc2VuY2UgaW4gYG5ldC9zbWMvc21jX2NkYy5jYCwgY29uZmlybWluZyBpdHMgaW52b2x2ZW1lbnQuXG5cbk5leHQsIEknbGwgY2hlY2sgZm9yIGBDT05GSUdfU01DX0xPYC4gQWhhLCB0aGF0IGFwcGVhcnMgdG8gYmUgY292ZXJlZCB1bmRlciBgQ09ORklHX0RJQlNfTE9gLiBHb29kIHRvIGtub3cgdGhhdCByZWR1bmRhbmN5IGlzbid0IHByZXNlbnQsIGFuZCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBzZWVtcyBzdWZmaWNpZW50LiBJJ2xsIGRvdWJsZS1jaGVjayBgbmV0L3NtYy9LY29uZmlnYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIGF0IHRoaXMgc3RhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAxOjE5LjA3NTI4NDgzNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTTUNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgU01DLVIgcHJvdmlkZXMgYSBcXFwic29ja2V0cyBvdmVyIFJETUFcXFwiIHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcXG4gICA3OlxcdFxcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXFxuICAgODpcXHRcXHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXFxuICAgOTpcXHRcXHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcXG4gIDEwOlxcdFxcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBTTUNfRElBR1xcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBTTUNcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcXG4gIDE5OlxcdFxcdCAgc21jc3MuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgaWYgdW5zdXJlLCBzYXkgWS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbiAgMjQ6XFx0XFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG4gIDI2OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBTTUNfSFNfQ1RSTF9CUEYgZW5hYmxlcyBzdXBwb3J0IHRvIHJlZ2lzdGVyIGdlbmVyaWMgZUJQRiBob29rIGZvciBTTUNcXG4gIDI5OlxcdFxcdCAgaGFuZHNoYWtlIGZsb3csIHdoaWNoIG9mZmVyIG11Y2ggZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yXFxuICAzMDpcXHRcXHQgIG9mIHRoZSBTTUMgcHJvdG9jb2wgc3RhY2sgY29tcGFyZWQgdG8gYSBjb21wbGV0ZSBrZXJuZWwtYmFzZWQgYXBwcm9hY2guIFNlbGVjdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMToxOS4wNzUzNjExNTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgzMTE1NDk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTTUMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCByZXZlYWxzIHRoYXQgdGhlIGBDT05GSUdfU01DYCBvcHRpb24gaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYCBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCB0byBlbnN1cmUgY29tcGxldGUgZnVuY3Rpb25hbGl0eSwgd2UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBgU01DYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkOiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLiBZZXMsIHRoZXNlIGFyZSBhbGwgY29yZSB0byBTTUMncyBjb25uZWN0aW9uIHNldHVwIGFuZCBDREMgbWVzc2FnZSBoYW5kbGluZy4gU3BlY2lmaWNhbGx5OlxuXG4qICAgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCBpcyB0cmlnZ2VyZWQgdXBvbiByZWNlaXZpbmcgQ0RDIG1lc3NhZ2VzLCB2aXRhbCBmb3IgY29tbXVuaWNhdGlvbi5cbiogICBgc21jZF9jZGNfcnhfdHNrbGV0YCBpcyB0aGUgdGFza2xldCByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHJlY2VwdGlvbiBvZiBDREMgbWVzc2FnZXMgd2l0aGluIFNNQy1ELlxuKiAgIGBzbWNfY2RjX3J4X2hhbmRsZXJgIGhhbmRsZXMgdGhlIHJlY2VwdGlvbiBvZiBDREMgbWVzc2FnZXMgd2l0aGluIFNNQy1SLlxuKiAgIGBfX3NtY19idWZfY3JlYXRlYCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYnVmZmVycywgYSBmdW5kYW1lbnRhbCBvcGVyYXRpb24uXG4qICAgYHNtY2RfYnVmX2F0dGFjaGAgaXMgZXNzZW50aWFsIGZvciBhdHRhY2hpbmcgYnVmZmVycyB3aXRoaW4gdGhlIFNNQy1EIGNvbnRleHQuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGlzIGlzIHRoZSBiYWNrYm9uZSBvZiB0aGUgU01DIGNvbm5lY3Rpb24gYW5kIGRhdGEgcGF0aC5cblxuRGlnZ2luZyBkZWVwZXIsIEkgd2FudCB0byBjbGFyaWZ5IGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGZvciBTTUMtRC4gQmVzaWRlcyBgQ09ORklHX1NNQ2AgYXMgdGhlIHByaW1hcnkgcmVxdWlyZW1lbnQsIHdlJ2xsIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfRElCU2AgYW5kIGBDT05GSUdfRElCU19MT2AgdG8gZmFjaWxpdGF0ZSBTTUMtRCBsb29wYmFjayBmdW5jdGlvbmFsaXR5LlxuXG5UbyBzdW1tYXJpemUsIG15IGNvcmUgZm9jdXMgbm93IGFyZSB0aGUgZnVuY3Rpb25zOiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLlxuXG5XYWl0LCBgX19zbWNfYnVmX2NyZWF0ZWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgaW50byBgc21jX2NvcmUuY2AgdG8gY29uZmlybSB0aGUgc3RhdGljIGxpbmthZ2UgYW5kIHRvIGRldGVybWluZSBpdHMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTY4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDE6MjYuOTA2NTE4ODA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1MTYyNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc21jX2J1Zl9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz0yMzkwPXN0YXRpYyBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpzbWNkX25ld19idWZfY3JlYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTI0MjUtXFxubmV0L3NtYy9zbWNfY29yZS5jOjI0MjY6c3RhdGljIGludCBfX3NtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QsIGJvb2wgaXNfcm1iKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNDI3LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0yNTYxPWludCBzbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjktXFxubmV0L3NtYy9zbWNfY29yZS5jOjI1NzA6XFx0cmMgPSBfX3NtY19idWZfY3JlYXRlKHNtYywgaXNfc21jZCwgZmFsc2UpO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTcxLVxcdGlmIChyYylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTc1LVxcdC8qIGNyZWF0ZSBybWIgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MjU3NjpcXHRyYyA9IF9fc21jX2J1Zl9jcmVhdGUoc21jLCBpc19zbWNkLCB0cnVlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMjU3Ny1cXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgc21jLVxcdTAwM2Vjb25uLnNuZGJ1Zl9kZXNjKSB7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjU4OD1pbnQgc21jZF9idWZfYXR0YWNoKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTI2MTYtXFx0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSAoc21jX2lzbV9zZXRfY29ubigpXFxubmV0L3NtYy9zbWNfY29yZS5jOjI2MTc6XFx0ICogcmFuIGluIF9fc21jX2J1Zl9jcmVhdGUoKSksIHNvIHRoZSBDREMgcmVjZWl2ZSB0YXNrbGV0IG11c3Qgb2JzZXJ2ZVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjE4LVxcdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDE6MjguMTIxNjg4NzAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NjA4Njk1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgU01DIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gYW5hbHl6aW5nIGhvdyB0byBiZXN0IGZ1enogdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgZnVuY3Rpb25hbGl0eS4gSW5pdGlhbGx5LCBJIHdhcyBsb29raW5nIGF0IGBfX3NtY19idWZfY3JlYXRlYCBidXQgcmVhbGl6ZWQgdGhhdCBTeXprYWxsZXIgY2FuLCBpbiBmYWN0LCBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGluIHRoZSBzeW1ib2wgdGFibGUsIHRob3VnaCBpdCdzIHVzdWFsbHkgYmV0dGVyIHRvIHByb3ZpZGUgdGhlIG5vbi1zdGF0aWMgb25lcyBvciB0aGUgZXhwbGljaXRseSBpZGVudGlmaWFibGUgc3RhdGljIG9uZXMuIEJ1dCB0aGUgY292ZXJhZ2UgdHJhY2tpbmcgY2FwYWJpbGl0eSBtYWtlcyBpbmNsdWRpbmcgYF9fc21jX2J1Zl9jcmVhdGVgIGEgdmlhYmxlIG9wdGlvbiBoZXJlLlxuXG5UaGUga2V5IGlzIHRvIHRhcmdldCBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgbmVjZXNzYXJpbHkgKmhvdC1wYXRoKiBmdW5jdGlvbnMsIGJ1dCBhcmUgaW1wb3J0YW50IGZvciBTTUPigJlzIHNwZWNpZmljIGludGVyYWN0aW9ucy4gQ29uc2lkZXJpbmcgdGhlIHByb21wdCdzIGZvY3VzIG9uIHRoZXNlIHR5cGVzIG9mIGZ1bmN0aW9ucywgSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwgY2FuZGlkYXRlczpcblxuKiAgIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmA6IHRoaXMgaGFuZGxlcyBDREMgbWVzc2FnZSByZWNlaXZpbmc7IGl0IG1pZ2h0IGJlIG1vZGVyYXRlbHkgYWN0aXZlLCBidXQgaXQncyBTTUMtc3BlY2lmaWMuXG4qICAgYHNtY2RfY2RjX3J4X3Rza2xldGA6IHRoaXMgaXMgdGhlIHRhc2tsZXQgcmVzcG9uc2libGUgZm9yIFNNQy1EIFJYIGhhbmRsaW5nLlxuKiAgIGBzbWNfY2RjX3J4X2hhbmRsZXJgOiB0aGlzIGhhbmRsZXMgU01DLVIgUlguXG4qICAgYF9fc21jX2J1Zl9jcmVhdGVgOiB0aGlzIGlzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiBzZXR1cC5cbiogICBgc21jZF9idWZfYXR0YWNoYDogdGhpcyBpcyBhbHNvIGludm9sdmVkIGluIGNvbm5lY3Rpb24gc2V0dXAuXG5cbkJhc2VkIG9uIHRoaXMsIEknbSBsZWFuaW5nIHRvd2FyZCBoZWF2aWx5IGZ1enppbmcgdGhvc2UgZml2ZTogYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY2RfY2RjX3J4X3Rza2xldGAsIGBzbWNfY2RjX3J4X2hhbmRsZXJgLCBgX19zbWNfYnVmX2NyZWF0ZWAsIGFuZCBgc21jZF9idWZfYXR0YWNoYC5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgb25lcyBJJ3ZlIGlkZW50aWZpZWQgYXJlIGBTTUNgLCBgRElCU2AsIGFuZCBgRElCU19MT2AuIExldCBtZSBkb3VibGUtY2hlY2sgYERJQlNfTE9gOyBpdCdzIGEgYm9vbCwgc28gbm8gaXNzdWVzIHRoZXJlLiBTaW5jZSBgU01DYCByZWxpZXMgb24gYElORklOSUJBTkRgLCBJJ2xsIGluY2x1ZGUgdGhhdCBhcyB3ZWxsLCBhbHRob3VnaCBpdCdzIHR5cGljYWxseSBlbmFibGVkLiBXYWl0LCBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgYElORVRgIGlzIGVuYWJsZWQuIGBTTUNgIGRlcGVuZHMgb24gYElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNgLiBTbywgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZSBgU01DYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBgU01DYCBmdW5jdGlvbmFsaXR5IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4gVGhpcyBtYWtlcyBpdCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEl0J3MgYSBjb25uZWN0aW9uIHNldHVwIHJhY2UgY29uZGl0aW9uIHRoYXQgYSBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgbWlnaHQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gVGhhdCdzIGEgZGVmaW5pdGUgY2FuZGlkYXRlIVxuXG5TbywgdG8gc3VtbWFyaXplIG15IHN0cmF0ZWd5OlxuXG4qKkNvbmZpZ3M6KipcblxuKiAgIGBTTUNgXG4qICAgYERJQlNgXG4qICAgYERJQlNfTE9gXG5cbioqU3ltYm9sczoqKlxuXG4qICAgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYFxuKiAgIGBzbWNkX2NkY19yeF90c2tsZXRgXG4qICAgYHNtY19jZGNfcnhfaGFuZGxlcmBcbiogICBgX19zbWNfYnVmX2NyZWF0ZWBcbiogICBgc21jZF9idWZfYXR0YWNoYFxuXG5JIHNob3VsZCBub3cgZG91YmxlIGNoZWNrIHdoZXRoZXIgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCBpcyBzdGF0aWMgb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk3NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMTozNy42ODI1NjA2MDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDQ3MDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY2RjX21zZ19yZWN2X2FjdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19jZGMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jZGMuYz0zMDg9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfdmFsaWRhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjLFxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtMzI5LVxcbm5ldC9zbWMvc21jX2NkYy5jOjMzMDpzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG5uZXQvc21jL3NtY19jZGMuYy0zMzEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9NDQ3PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3Yoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtNDUwLVxcdGJoX2xvY2tfc29jayhcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxubmV0L3NtYy9zbWNfY2RjLmM6NDUxOlxcdHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHNtYywgY2RjKTtcXG5uZXQvc21jL3NtY19jZGMuYy00NTItXFx0YmhfdW5sb2NrX3NvY2soXFx1MDAyNnNtYy1cXHUwMDNlc2spO1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9NDk3PXN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy01MTQtXFx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxcbm5ldC9zbWMvc21jX2NkYy5jOjUxNTpcXHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXFxubmV0L3NtYy9zbWNfY2RjLmMtNTE2LVxcdCAqIE5VTEwgZGVyZWYgYW5kIGEgc3RhbGUtYnVmZmVyIHJlYWQgaW4gdGhlIGNvbm5lY3Rpb24gc2V0dXAgd2luZG93LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMTozOC4wMjcwMzk3MDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3NzIwNTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBQcm90b2NvbCBSYWNlIENvbmRpdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBvdmVyIHRoaXMgcGF0Y2ggYW5kIGl0J3MgYWRkcmVzc2luZyBhIHByZXR0eSBjcml0aWNhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgcHJvdG9jb2wuIEkgY2FuIHNlZSB0aGUgZml4IGludm9sdmVzIGFkZGluZyBtZW1vcnkgYmFycmllcnMsIHNwZWNpZmljYWxseSBgc21wX2xvYWRfYWNxdWlyZWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZWAsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciB0aGlzIGtpbmQgb2YgaXNzdWUuIEl0J3MgbWVhbnQgdG8gcHJvdGVjdCB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzLCBgc25kYnVmX2Rlc2NgIGFuZCBgcm1iX2Rlc2NgLCBmcm9tIGJlaW5nIGFjY2Vzc2VkIHByZW1hdHVyZWx5IGJ5IGNvbmN1cnJlbnQgQ29ubmVjdGlvbiBEYXRhIENvbnRyb2wgKENEQykgcmVjZWl2ZSBoYW5kbGVycy4gTWFrZXMgcGVyZmVjdCBzZW5zZTsgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYnVmZmVycyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHRvdWNoZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBjb3JlIFNNQyBsb2dpYyBhbmQsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgc29tZXRoaW5nIHdlJ2xsIHNlZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGxvb3BiYWNrIElTTSAoU01DLUQpIGRldmljZS5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgY3JpdGljYWwgc3ltYm9scyBpbnZvbHZlZCBpbmNsdWRlIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYF9fc21jX2J1Zl9jcmVhdGVgLCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIEZyb20gYSBxdWljayBnbGFuY2UsIHRoZSBmdW5jdGlvbnMgYHNtY2RfY2RjX3J4X3Rza2xldGAsIGBzbWNfY2RjX3J4X2hhbmRsZXJgLCBhbmQgYF9fc21jX2J1Zl9jcmVhdGVgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMsIHNvIEkgd2lsbCBpbmNsdWRlIHRoZW0uIGBzbWNkX2J1Zl9hdHRhY2hgIGlzIG5vdCBzdGF0aWMuIEknbGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuXG5cbkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gSSBrbm93IHdlJ3JlIGRlYWxpbmcgd2l0aCBgU01DYCwgYnV0IEkgd2FudGVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBESUJTYCAoYW5kIGBESUJTX0xPYCkgaXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4gSXQgYXBwZWFycyBteSBpbml0aWFsIGFzc2Vzc21lbnQgd2FzIGNvcnJlY3Q7IGEgcXVpY2sgbG9vayBhdCBgZHJpdmVycy9kaWJzL0tjb25maWdgIGNvbmZpcm1zIGBDT05GSUdfRElCU2AgYW5kIGBDT05GSUdfRElCU19MT2AgYXJlIGRlZmluZWQgdGhlcmUuIEkgYWxzbyB2ZXJpZmllZCB0aHJvdWdoIGdyZXAgZm9yIGBsb29wYmFjay1pc21gIHRoYXQgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgIGV4aXN0cy4gWWVwLCBgRElCU2AgaXMgdGhlIHJpZ2h0IG9uZS5cblxuQWxyaWdodCwgdGhhdCdzIGV2ZXJ5dGhpbmcgSSBuZWVkLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MDgsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAxOjQ2LjEwNDI0Njk0M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE1NDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2NkY19tc2dfcmVjdl9hY3Rpb25cIixcbiAgICBcInNtY2RfY2RjX3J4X3Rza2xldFwiLFxuICAgIFwic21jX2NkY19yeF9oYW5kbGVyXCIsXG4gICAgXCJfX3NtY19idWZfY3JlYXRlXCIsXG4gICAgXCJzbWNkX2J1Zl9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHByb3RvY29sIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBhZGRzIG1lbW9yeSBiYXJyaWVycyAoc21wX2xvYWRfYWNxdWlyZSBhbmQgc21wX3N0b3JlX3JlbGVhc2UpIHRvIHByZXZlbnQgY29uY3VycmVudCBDREMgKENvbm5lY3Rpb24gRGF0YSBDb250cm9sKSByZWNlaXZlIGhhbmRsZXJzIGZyb20gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzIChzbmRidWZfZGVzYyBhbmQgcm1iX2Rlc2MpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBTTUMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHRoZSBsb29wYmFjayBJU00gZGV2aWNlIChTTUMtRCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2NkY19tc2dfcmVjdl9hY3Rpb25cIixcbiAgICBcInNtY2RfY2RjX3J4X3Rza2xldFwiLFxuICAgIFwic21jX2NkY19yeF9oYW5kbGVyXCIsXG4gICAgXCJfX3NtY19idWZfY3JlYXRlXCIsXG4gICAgXCJzbWNkX2J1Zl9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHByb3RvY29sIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBhZGRzIG1lbW9yeSBiYXJyaWVycyAoc21wX2xvYWRfYWNxdWlyZSBhbmQgc21wX3N0b3JlX3JlbGVhc2UpIHRvIHByZXZlbnQgY29uY3VycmVudCBDREMgKENvbm5lY3Rpb24gRGF0YSBDb250cm9sKSByZWNlaXZlIGhhbmRsZXJzIGZyb20gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzIChzbmRidWZfZGVzYyBhbmQgcm1iX2Rlc2MpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBTTUMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHRoZSBsb29wYmFjayBJU00gZGV2aWNlIChTTUMtRCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowwljtl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 17:49:29 +0000 UTC FinishedAt: 2026-07-16 18:01:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "DIBS", "DIBS_LO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "DIBS", "DIBS_LO" ], "series_id": "52d744d5-f930-4ea9-b5e6-7d4822d3832a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_cdc_msg_recv_action", "smcd_cdc_rx_tsklet", "smc_cdc_rx_handler", "__smc_buf_create", "smcd_buf_attach" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfY2RjX21zZ19yZWN2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtzbWNkX2NkY19yeF90c2tsZXQmIzM0OywKICAgICYjMzQ7c21jX2NkY19yeF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O19fc21jX2J1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jZF9idWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGFkZHMgbWVtb3J5IGJhcnJpZXJzIChzbXBfbG9hZF9hY3F1aXJlIGFuZCBzbXBfc3RvcmVfcmVsZWFzZSkgdG8gcHJldmVudCBjb25jdXJyZW50IENEQyAoQ29ubmVjdGlvbiBEYXRhIENvbnRyb2wpIHJlY2VpdmUgaGFuZGxlcnMgZnJvbSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKHNuZGJ1Zl9kZXNjIGFuZCBybWJfZGVzYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFNNQyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGxvb3BiYWNrIElTTSBkZXZpY2UgKFNNQy1EKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgwYWNkMjkzNTBkMWI4MzYyZjVlNWFmMzM5MWUzMWRmMDIyZmRhYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxODowMDowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jZGMuYyBiL25ldC9zbWMvc21jX2NkYy5jXG5pbmRleCAzMmQ2ZDAzZGYzMjE0NS4uZWE2MWIxZTc1YzcyY2YgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jZGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY2RjLmNcbkBAIC0zMzIsOCAmIzQzOzMzMiwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbiB7XG4gXHR1bmlvbiBzbWNfaG9zdF9jdXJzb3IgY29uc19vbGQsIHByb2Rfb2xkO1xuIFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXHUwMDI2c21jLVx1MDAzZWNvbm47XG4mIzQzO1x0c3RydWN0IHNtY19idWZfZGVzYyAqc25kYnVmX2Rlc2M7XG4gXHRpbnQgZGlmZl9jb25zLCBkaWZmX3Byb2QsIGRpZmZfdHg7XG4gXG4mIzQzO1x0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG4mIzQzO1x0ICogX19zbWNfYnVmX2NyZWF0ZSgpL3NtY2RfYnVmX2F0dGFjaCgpLiAgT24gdGhlIFNNQy1EIERNQi1ub2NvcHkgcGF0aFxuJiM0MztcdCAqIHRoZSBnaG9zdCBzbmRidWZfZGVzYyBpcyBhdHRhY2hlZCBvbmx5IGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHlcbiYjNDM7XHQgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeVxuJiM0MztcdCAqIHNuZGJ1Zl9kZXNjIGNvbnN1bWVyIGJlbG93ICh0aGUgbm9jb3B5IGFjY291bnRpbmcgYW5kIHRoZSBzbmRidWZcbiYjNDM7XHQgKiBjb25zdW1lciB0cmlnZ2VyLCB3aGljaCBkZXJlZmVyZW5jZXMgaXQgdmlhIHNtY190eF9wcmVwYXJlZF9zZW5kcygpKVxuJiM0MztcdCAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhblxuJiM0MztcdCAqIHVuaW5pdGlhbGlzZWQgYnVmZmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjKTtcbiYjNDM7XG4gXHRzbWNfY3Vyc19jb3B5KFx1MDAyNnByb2Rfb2xkLCBcdTAwMjZjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZCwgY29ubik7XG4gXHRzbWNfY3Vyc19jb3B5KFx1MDAyNmNvbnNfb2xkLCBcdTAwMjZjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwuY29ucywgY29ubik7XG4gXHRzbWNfY2RjX21zZ190b19ob3N0KFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybCwgY2RjLCBjb25uKTtcbkBAIC0zNTEsMTQgJiM0MzszNjMsMTcgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXG4gXHRcdC8qIGlmIGxvY2FsIHNuZGJ1ZiBzaGFyZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiB3aXRoXG4gXHRcdCAqIHBlZXIgUk1CLCB0aGVuIHVwZGF0ZSB0eF9jdXJzX2ZpbiBhbmQgc25kYnVmX3NwYWNlXG4tXHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS5cbiYjNDM7XHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS4gIFRoZSBnaG9zdFxuJiM0MztcdFx0ICogc25kYnVmX2Rlc2MgKGFjcXVpcmVkIGFib3ZlKSBtYXkgc3RpbGwgYmUgdW5zZXQgaW4gdGhlIFNNQy1EXG4mIzQzO1x0XHQgKiBETUItbm9jb3B5IHNldHVwIHdpbmRvdywgc28gc2tpcCB0aGUgdXBkYXRlIHdoaWxlIGl0IGlzIE5VTEwuXG4gXHRcdCAqL1xuIFx0XHRpZiAoY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXHUwMDNlbGdyLVx1MDAzZXNtY2QpKSB7XG4mIzQzO1x0XHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgc25kYnVmX2Rlc2MpIHtcbiBcdFx0XHQvKiBDYWxjdWxhdGUgY29uc3VtZWQgZGF0YSBhbmRcbiBcdFx0XHQgKiBpbmNyZW1lbnQgZnJlZSBzZW5kIGJ1ZmZlciBzcGFjZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRkaWZmX3R4ID0gc21jX2N1cnNfZGlmZihjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0ZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoc25kYnVmX2Rlc2MtXHUwMDNlbGVuLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNvbm4tXHUwMDNldHhfY3Vyc19maW4sXG4gXHRcdFx0XHRcdFx0XHUwMDI2Y29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLmNvbnMpO1xuIFx0XHRcdC8qIGluY3JlYXNlIGxvY2FsIHNuZGJ1ZiBzcGFjZSBhbmQgZmluX2N1cnMgKi9cbkBAIC0zOTEsMTAgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXHRcdFx0Y29ubi1cdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDtcbiBcdH1cbiBcbi1cdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMgKi9cbi1cdGlmICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4tXHQgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbi1cdCAgICBjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0LyogdHJpZ2dlciBzbmRidWYgY29uc3VtZXI6IFJETUEgd3JpdGUgaW50byBwZWVyIFJNQkUgYW5kIENEQy5cbiYjNDM7XHQgKiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSBhbmQgc21jX3R4X3BlbmRpbmcoKSBkZXJlZmVyZW5jZSBzbmRidWZfZGVzYyxcbiYjNDM7XHQgKiBzbyBza2lwIHRoZSB3aG9sZSB0cmlnZ2VyIHdoaWxlIGl0IGlzIHVuc2V0ICh0aGUgU01DLUQgRE1CLW5vY29weVxuJiM0MztcdCAqIHNldHVwIHdpbmRvdyk6IHRoZXJlIGlzIG5vdGhpbmcgdG8gc2VuZCB3aXRob3V0IGEgc2VuZCBidWZmZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNuZGJ1Zl9kZXNjIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoKGRpZmZfY29ucyBcdTAwMjZcdTAwMjYgc21jX3R4X3ByZXBhcmVkX3NlbmRzKGNvbm4pKSB8fFxuJiM0MztcdCAgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbiYjNDM7XHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLnVyZ19kYXRhX3BlbmRpbmcpKSB7XG4gXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKFx1MDAyNnNtYy1cdTAwM2VzaykpXG4gXHRcdFx0c21jX3R4X3BlbmRpbmcoY29ubik7XG4gXHRcdGVsc2VcbkBAIC00NDMsMTMgJiM0Mzs0NjMsMjEgQEAgc3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbiB7XG4gXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBmcm9tX3Rhc2tsZXQoY29ubiwgdCwgcnhfdHNrbGV0KTtcbiBcdHN0cnVjdCBzbWNkX2NkY19tc2cgKmRhdGFfY2RjO1xuJiM0MztcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnJtYl9kZXNjO1xuIFx0c3RydWN0IHNtY2RfY2RjX21zZyBjZGM7XG4gXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYztcbiBcbiBcdGlmICghY29ubiB8fCBjb25uLVx1MDAzZWtpbGxlZClcbiBcdFx0cmV0dXJuO1xuJiM0MztcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cbiYjNDM7XHQgKiBpcyBwdWJsaXNoZWQgYmVmb3JlIGl0cyBSTUIgaXMgYWxsb2NhdGVkLCBzbyBiYWlsIHdoaWxlIHJtYl9kZXNjIGlzXG4mIzQzO1x0ICogdW5zZXQgdG8gYXZvaWQgYSBOVUxMIGRlcmVmIGFuZCBhIGxvYWQgb2YgYW4gdW5pbml0aWFsaXNlZCBidWZmZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0cm1iX2Rlc2MgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MpO1xuJiM0MztcdGlmICghcm1iX2Rlc2MpXG4mIzQzO1x0XHRyZXR1cm47XG4gXG4tXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopY29ubi1cdTAwM2VybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbiYjNDM7XHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopcm1iX2Rlc2MtXHUwMDNlY3B1X2FkZHI7XG4gXHRzbWNkX2N1cnNfY29weShcdTAwMjZjZGMucHJvZCwgXHUwMDI2ZGF0YV9jZGMtXHUwMDNlcHJvZCwgY29ubik7XG4gXHRzbWNkX2N1cnNfY29weShcdTAwMjZjZGMuY29ucywgXHUwMDI2ZGF0YV9jZGMtXHUwMDNlY29ucywgY29ubik7XG4gXHRzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbkBAIC00ODMsNyAmIzQzOzUxMSwxMSBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKVxuIFx0bGdyID0gc21jX2dldF9sZ3IobGluayk7XG4gXHRyZWFkX2xvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuIFx0Y29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy1cdTAwM2V0b2tlbiksIGxncik7XG4tXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VvdXRfb2Zfc3luYykge1xuJiM0MztcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcbiYjNDM7XHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXG4mIzQzO1x0ICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFjb25uIHx8IGNvbm4tXHUwMDNlb3V0X29mX3N5bmMgfHwgIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYykpIHtcbiBcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCBjZjZiNjIwZmVmMDVmOS4uMDU2MWY4M2JlMzI3YjcgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTI0OTksMTUgJiM0MzsyNDk5LDI2IEBAIHN0YXRpYyBpbnQgX19zbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkLCBib29sIGlzX3JtYilcbiBcdH1cbiBcbiBcdGlmIChpc19ybWIpIHtcbi1cdFx0Y29ubi1cdTAwM2VybWJfZGVzYyA9IGJ1Zl9kZXNjO1xuIFx0XHRjb25uLVx1MDAzZXJtYmVfc2l6ZV9jb21wID0gYnVmc2l6ZV9jb21wO1xuIFx0XHRzbWMtXHUwMDNlc2suc2tfcmN2YnVmID0gYnVmc2l6ZSAqIDI7XG4gXHRcdGF0b21pY19zZXQoXHUwMDI2Y29ubi1cdTAwM2VieXRlc190b19yY3YsIDApO1xuIFx0XHRjb25uLVx1MDAzZXJtYmVfdXBkYXRlX2xpbWl0ID1cbiBcdFx0XHRzbWNfcm1iX3duZF91cGRhdGVfbGltaXQoYnVmX2Rlc2MtXHUwMDNlbGVuKTtcbiYjNDM7XHRcdC8qIFB1Ymxpc2ggdGhlIHJlY2VpdmUgYnVmZmVyIGxhc3QsIHdpdGggcmVsZWFzZSBzZW1hbnRpY3M6IHRoZVxuJiM0MztcdFx0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBsaW5rIGdyb3VwJiMzOTtzIHRva2VuIHRyZWUsIHNvIGFcbiYjNDM7XHRcdCAqIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBtdXN0IG9ic2VydmUgdGhlIGZ1bGx5XG4mIzQzO1x0XHQgKiBpbml0aWFsaXNlZCByZWNlaXZlIHN0YXRlIGFib3ZlIChhbmQgdGhlIGJ1ZmZlcikgb25jZSBpdCBzZWVzXG4mIzQzO1x0XHQgKiBhIG5vbi1OVUxMIHJtYl9kZXNjLiAgUGFpcnMgd2l0aCB0aGUgc21wX2xvYWRfYWNxdWlyZSgpIGluIHRoZVxuJiM0MztcdFx0ICogQ0RDIHJlY2VpdmUgcGF0aC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYywgYnVmX2Rlc2MpO1xuIFx0XHRpZiAoaXNfc21jZClcbiBcdFx0XHRzbWNfaXNtX3NldF9jb25uKGNvbm4pOyAvKiBtYXAgUk1CL3NtY2RfZGV2IHRvIGNvbm4gKi9cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBQbGFpbiBzdG9yZTogdGhpcyBzZW5kLWJ1ZmZlciBwYXNzIHJ1bnMgYmVmb3JlIHRoZSBSTUIgcGFzcyxcbiYjNDM7XHRcdCAqIHdob3NlIHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MpIHRoZW4gcHVibGlzaGVzIHRoaXNcbiYjNDM7XHRcdCAqIHN0b3JlIHRvbywgYW5kIHRoZSBDREMgcmVjZWl2ZSBwYXRoIGlzIGdhdGVkIG9uIHJtYl9kZXNjLlxuJiM0MztcdFx0ICovXG4gXHRcdGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MgPSBidWZfZGVzYztcbiBcdFx0c21jLVx1MDAzZXNrLnNrX3NuZGJ1ZiA9IGJ1ZnNpemUgKiAyO1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlc25kYnVmX3NwYWNlLCBidWZzaXplKTtcbkBAIC0yNTk5LDkgJiM0MzsyNjEwLDE2IEBAIGludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpXG4gXHRidWZfZGVzYy1cdTAwM2VjcHVfYWRkciA9XG4gXHRcdCh1OCAqKWJ1Zl9kZXNjLVx1MDAzZWNwdV9hZGRyICYjNDM7IHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTtcbiBcdGJ1Zl9kZXNjLVx1MDAzZWxlbiAtPSBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XG4tXHRjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7XG4tXHRjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLVx1MDAzZXVzZWQgPSAxO1xuLVx0YXRvbWljX3NldChcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9zcGFjZSwgY29ubi1cdTAwM2VzbmRidWZfZGVzYy1cdTAwM2VsZW4pO1xuJiM0MztcdGJ1Zl9kZXNjLVx1MDAzZXVzZWQgPSAxO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfc3BhY2UsIGJ1Zl9kZXNjLVx1MDAzZWxlbik7XG4mIzQzO1x0LyogUHVibGlzaCB0aGUgZ2hvc3Qgc2VuZCBidWZmZXIgbGFzdCwgd2l0aCByZWxlYXNlIHNlbWFudGljczogdGhlXG4mIzQzO1x0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSAoc21jX2lzbV9zZXRfY29ubigpXG4mIzQzO1x0ICogcmFuIGluIF9fc21jX2J1Zl9jcmVhdGUoKSksIHNvIHRoZSBDREMgcmVjZWl2ZSB0YXNrbGV0IG11c3Qgb2JzZXJ2ZVxuJiM0MztcdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcbiYjNDM7XHQgKiBzbmRidWZfZGVzYy4gIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluXG4mIzQzO1x0ICogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLCBidWZfZGVzYyk7XG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfY2RjX21zZ19yZWN2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtzbWNkX2NkY19yeF90c2tsZXQmIzM0OywKICAgICYjMzQ7c21jX2NkY19yeF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O19fc21jX2J1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jZF9idWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGFkZHMgbWVtb3J5IGJhcnJpZXJzIChzbXBfbG9hZF9hY3F1aXJlIGFuZCBzbXBfc3RvcmVfcmVsZWFzZSkgdG8gcHJldmVudCBjb25jdXJyZW50IENEQyAoQ29ubmVjdGlvbiBEYXRhIENvbnRyb2wpIHJlY2VpdmUgaGFuZGxlcnMgZnJvbSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKHNuZGJ1Zl9kZXNjIGFuZCBybWJfZGVzYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFNNQyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGxvb3BiYWNrIElTTSBkZXZpY2UgKFNNQy1EKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODBhY2QyOTM1MGQxYjgzNjJmNWU1YWYzMzkxZTMxZGYwMjJmZGFhYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDE4OjAwOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY2RjLmMgYi9uZXQvc21jL3NtY19jZGMuYwppbmRleCAzMmQ2ZDAzZGYzMjE0NS4uZWE2MWIxZTc1YzcyY2YgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NkYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NkYy5jCkBAIC0zMzIsOCAmIzQzOzMzMiwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYywKIHsKIAl1bmlvbiBzbWNfaG9zdF9jdXJzb3IgY29uc19vbGQsIHByb2Rfb2xkOwogCXN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9ICZhbXA7c21jLSZndDtjb25uOwomIzQzOwlzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpzbmRidWZfZGVzYzsKIAlpbnQgZGlmZl9jb25zLCBkaWZmX3Byb2QsIGRpZmZfdHg7CiAKJiM0MzsJLyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluCiYjNDM7CSAqIF9fc21jX2J1Zl9jcmVhdGUoKS9zbWNkX2J1Zl9hdHRhY2goKS4gIE9uIHRoZSBTTUMtRCBETUItbm9jb3B5IHBhdGgKJiM0MzsJICogdGhlIGdob3N0IHNuZGJ1Zl9kZXNjIGlzIGF0dGFjaGVkIG9ubHkgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgYWxyZWFkeQomIzQzOwkgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeQomIzQzOwkgKiBzbmRidWZfZGVzYyBjb25zdW1lciBiZWxvdyAodGhlIG5vY29weSBhY2NvdW50aW5nIGFuZCB0aGUgc25kYnVmCiYjNDM7CSAqIGNvbnN1bWVyIHRyaWdnZXIsIHdoaWNoIGRlcmVmZXJlbmNlcyBpdCB2aWEgc21jX3R4X3ByZXBhcmVkX3NlbmRzKCkpCiYjNDM7CSAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhbgomIzQzOwkgKiB1bmluaXRpYWxpc2VkIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CXNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2Nvbm4tJmd0O3NuZGJ1Zl9kZXNjKTsKJiM0MzsKIAlzbWNfY3Vyc19jb3B5KCZhbXA7cHJvZF9vbGQsICZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybC5wcm9kLCBjb25uKTsKIAlzbWNfY3Vyc19jb3B5KCZhbXA7Y29uc19vbGQsICZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybC5jb25zLCBjb25uKTsKIAlzbWNfY2RjX21zZ190b19ob3N0KCZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybCwgY2RjLCBjb25uKTsKQEAgLTM1MSwxNCAmIzQzOzM2MywxNyBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYywKIAogCQkvKiBpZiBsb2NhbCBzbmRidWYgc2hhcmVzIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gd2l0aAogCQkgKiBwZWVyIFJNQiwgdGhlbiB1cGRhdGUgdHhfY3Vyc19maW4gYW5kIHNuZGJ1Zl9zcGFjZQotCQkgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuCiYjNDM7CQkgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuICBUaGUgZ2hvc3QKJiM0MzsJCSAqIHNuZGJ1Zl9kZXNjIChhY3F1aXJlZCBhYm92ZSkgbWF5IHN0aWxsIGJlIHVuc2V0IGluIHRoZSBTTUMtRAomIzQzOwkJICogRE1CLW5vY29weSBzZXR1cCB3aW5kb3csIHNvIHNraXAgdGhlIHVwZGF0ZSB3aGlsZSBpdCBpcyBOVUxMLgogCQkgKi8KIAkJaWYgKGNvbm4tJmd0O2xnci0mZ3Q7aXNfc21jZCAmYW1wOyZhbXA7Ci0JCSAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLSZndDtsZ3ItJmd0O3NtY2QpKSB7CiYjNDM7CQkgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi0mZ3Q7bGdyLSZndDtzbWNkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgc25kYnVmX2Rlc2MpIHsKIAkJCS8qIENhbGN1bGF0ZSBjb25zdW1lZCBkYXRhIGFuZAogCQkJICogaW5jcmVtZW50IGZyZWUgc2VuZCBidWZmZXIgc3BhY2UuCiAJCQkgKi8KLQkJCWRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKGNvbm4tJmd0O3NuZGJ1Zl9kZXNjLSZndDtsZW4sCiYjNDM7CQkJZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoc25kYnVmX2Rlc2MtJmd0O2xlbiwKIAkJCQkJCSZhbXA7Y29ubi0mZ3Q7dHhfY3Vyc19maW4sCiAJCQkJCQkmYW1wO2Nvbm4tJmd0O2xvY2FsX3J4X2N0cmwuY29ucyk7CiAJCQkvKiBpbmNyZWFzZSBsb2NhbCBzbmRidWYgc3BhY2UgYW5kIGZpbl9jdXJzICovCkBAIC0zOTEsMTAgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsCiAJCQljb25uLSZndDt1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDsKIAl9CiAKLQkvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDICovCi0JaWYgKChkaWZmX2NvbnMgJmFtcDsmYW1wOyBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8Ci0JICAgIGNvbm4tJmd0O2xvY2FsX3J4X2N0cmwucHJvZF9mbGFncy5jb25zX2N1cnNfdXBkX3JlcSB8fAotCSAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MudXJnX2RhdGFfcGVuZGluZykgewomIzQzOwkvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDLgomIzQzOwkgKiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSBhbmQgc21jX3R4X3BlbmRpbmcoKSBkZXJlZmVyZW5jZSBzbmRidWZfZGVzYywKJiM0MzsJICogc28gc2tpcCB0aGUgd2hvbGUgdHJpZ2dlciB3aGlsZSBpdCBpcyB1bnNldCAodGhlIFNNQy1EIERNQi1ub2NvcHkKJiM0MzsJICogc2V0dXAgd2luZG93KTogdGhlcmUgaXMgbm90aGluZyB0byBzZW5kIHdpdGhvdXQgYSBzZW5kIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CWlmIChzbmRidWZfZGVzYyAmYW1wOyZhbXA7CiYjNDM7CSAgICAoKGRpZmZfY29ucyAmYW1wOyZhbXA7IHNtY190eF9wcmVwYXJlZF9zZW5kcyhjb25uKSkgfHwKJiM0MzsJICAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHwKJiM0MzsJICAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MudXJnX2RhdGFfcGVuZGluZykpIHsKIAkJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoJmFtcDtzbWMtJmd0O3NrKSkKIAkJCXNtY190eF9wZW5kaW5nKGNvbm4pOwogCQllbHNlCkBAIC00NDMsMTMgJiM0Mzs0NjMsMjEgQEAgc3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKIHsKIAlzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBmcm9tX3Rhc2tsZXQoY29ubiwgdCwgcnhfdHNrbGV0KTsKIAlzdHJ1Y3Qgc21jZF9jZGNfbXNnICpkYXRhX2NkYzsKJiM0MzsJc3RydWN0IHNtY19idWZfZGVzYyAqcm1iX2Rlc2M7CiAJc3RydWN0IHNtY2RfY2RjX21zZyBjZGM7CiAJc3RydWN0IHNtY19zb2NrICpzbWM7CiAKIAlpZiAoIWNvbm4gfHwgY29ubi0mZ3Q7a2lsbGVkKQogCQlyZXR1cm47CiYjNDM7CS8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb24KJiM0MzsJICogaXMgcHVibGlzaGVkIGJlZm9yZSBpdHMgUk1CIGlzIGFsbG9jYXRlZCwgc28gYmFpbCB3aGlsZSBybWJfZGVzYyBpcwomIzQzOwkgKiB1bnNldCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhbiB1bmluaXRpYWxpc2VkIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CXJtYl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2Nvbm4tJmd0O3JtYl9kZXNjKTsKJiM0MzsJaWYgKCFybWJfZGVzYykKJiM0MzsJCXJldHVybjsKIAotCWRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKiljb25uLSZndDtybWJfZGVzYy0mZ3Q7Y3B1X2FkZHI7CiYjNDM7CWRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKilybWJfZGVzYy0mZ3Q7Y3B1X2FkZHI7CiAJc21jZF9jdXJzX2NvcHkoJmFtcDtjZGMucHJvZCwgJmFtcDtkYXRhX2NkYy0mZ3Q7cHJvZCwgY29ubik7CiAJc21jZF9jdXJzX2NvcHkoJmFtcDtjZGMuY29ucywgJmFtcDtkYXRhX2NkYy0mZ3Q7Y29ucywgY29ubik7CiAJc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7CkBAIC00ODMsNyAmIzQzOzUxMSwxMSBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKQogCWxnciA9IHNtY19nZXRfbGdyKGxpbmspOwogCXJlYWRfbG9ja19iaCgmYW1wO2xnci0mZ3Q7Y29ubnNfbG9jayk7CiAJY29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy0mZ3Q7dG9rZW4pLCBsZ3IpOwotCWlmICghY29ubiB8fCBjb25uLSZndDtvdXRfb2Zfc3luYykgewomIzQzOwkvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IGJhaWwgd2hpbGUgdGhlCiYjNDM7CSAqIFJNQiBpcyB1bnNldCAoc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBkZXJlZmVyZW5jZXMgaXQpIHRvIGF2b2lkIGEKJiM0MzsJICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWNvbm4gfHwgY29ubi0mZ3Q7b3V0X29mX3N5bmMgfHwgIXNtcF9sb2FkX2FjcXVpcmUoJmFtcDtjb25uLSZndDtybWJfZGVzYykpIHsKIAkJcmVhZF91bmxvY2tfYmgoJmFtcDtsZ3ItJmd0O2Nvbm5zX2xvY2spOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jCmluZGV4IGNmNmI2MjBmZWYwNWY5Li4wNTYxZjgzYmUzMjdiNyAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuYwpAQCAtMjQ5OSwxNSAmIzQzOzI0OTksMjYgQEAgc3RhdGljIGludCBfX3NtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QsIGJvb2wgaXNfcm1iKQogCX0KIAogCWlmIChpc19ybWIpIHsKLQkJY29ubi0mZ3Q7cm1iX2Rlc2MgPSBidWZfZGVzYzsKIAkJY29ubi0mZ3Q7cm1iZV9zaXplX2NvbXAgPSBidWZzaXplX2NvbXA7CiAJCXNtYy0mZ3Q7c2suc2tfcmN2YnVmID0gYnVmc2l6ZSAqIDI7CiAJCWF0b21pY19zZXQoJmFtcDtjb25uLSZndDtieXRlc190b19yY3YsIDApOwogCQljb25uLSZndDtybWJlX3VwZGF0ZV9saW1pdCA9CiAJCQlzbWNfcm1iX3duZF91cGRhdGVfbGltaXQoYnVmX2Rlc2MtJmd0O2xlbik7CiYjNDM7CQkvKiBQdWJsaXNoIHRoZSByZWNlaXZlIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGUKJiM0MzsJCSAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBpbiB0aGUgbGluayBncm91cCYjMzk7cyB0b2tlbiB0cmVlLCBzbyBhCiYjNDM7CQkgKiBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgbXVzdCBvYnNlcnZlIHRoZSBmdWxseQomIzQzOwkJICogaW5pdGlhbGlzZWQgcmVjZWl2ZSBzdGF0ZSBhYm92ZSAoYW5kIHRoZSBidWZmZXIpIG9uY2UgaXQgc2VlcwomIzQzOwkJICogYSBub24tTlVMTCBybWJfZGVzYy4gIFBhaXJzIHdpdGggdGhlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0aGUKJiM0MzsJCSAqIENEQyByZWNlaXZlIHBhdGguCiYjNDM7CQkgKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7Y29ubi0mZ3Q7cm1iX2Rlc2MsIGJ1Zl9kZXNjKTsKIAkJaWYgKGlzX3NtY2QpCiAJCQlzbWNfaXNtX3NldF9jb25uKGNvbm4pOyAvKiBtYXAgUk1CL3NtY2RfZGV2IHRvIGNvbm4gKi8KIAl9IGVsc2UgewomIzQzOwkJLyogUGxhaW4gc3RvcmU6IHRoaXMgc2VuZC1idWZmZXIgcGFzcyBydW5zIGJlZm9yZSB0aGUgUk1CIHBhc3MsCiYjNDM7CQkgKiB3aG9zZSBzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2Nvbm4tJmd0O3JtYl9kZXNjKSB0aGVuIHB1Ymxpc2hlcyB0aGlzCiYjNDM7CQkgKiBzdG9yZSB0b28sIGFuZCB0aGUgQ0RDIHJlY2VpdmUgcGF0aCBpcyBnYXRlZCBvbiBybWJfZGVzYy4KJiM0MzsJCSAqLwogCQljb25uLSZndDtzbmRidWZfZGVzYyA9IGJ1Zl9kZXNjOwogCQlzbWMtJmd0O3NrLnNrX3NuZGJ1ZiA9IGJ1ZnNpemUgKiAyOwogCQlhdG9taWNfc2V0KCZhbXA7Y29ubi0mZ3Q7c25kYnVmX3NwYWNlLCBidWZzaXplKTsKQEAgLTI1OTksOSAmIzQzOzI2MTAsMTYgQEAgaW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYykKIAlidWZfZGVzYy0mZ3Q7Y3B1X2FkZHIgPQogCQkodTggKilidWZfZGVzYy0mZ3Q7Y3B1X2FkZHIgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpOwogCWJ1Zl9kZXNjLSZndDtsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpOwotCWNvbm4tJmd0O3NuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7Ci0JY29ubi0mZ3Q7c25kYnVmX2Rlc2MtJmd0O3VzZWQgPSAxOwotCWF0b21pY19zZXQoJmFtcDtjb25uLSZndDtzbmRidWZfc3BhY2UsIGNvbm4tJmd0O3NuZGJ1Zl9kZXNjLSZndDtsZW4pOwomIzQzOwlidWZfZGVzYy0mZ3Q7dXNlZCA9IDE7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtjb25uLSZndDtzbmRidWZfc3BhY2UsIGJ1Zl9kZXNjLSZndDtsZW4pOwomIzQzOwkvKiBQdWJsaXNoIHRoZSBnaG9zdCBzZW5kIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGUKJiM0MzsJICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSAoc21jX2lzbV9zZXRfY29ubigpCiYjNDM7CSAqIHJhbiBpbiBfX3NtY19idWZfY3JlYXRlKCkpLCBzbyB0aGUgQ0RDIHJlY2VpdmUgdGFza2xldCBtdXN0IG9ic2VydmUKJiM0MzsJICogdGhlIGZ1bGx5IGluaXRpYWxpc2VkIGdob3N0IGJ1ZmZlciBvbmNlIGl0IHNlZXMgYSBub24tTlVMTAomIzQzOwkgKiBzbmRidWZfZGVzYy4gIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluCiYjNDM7CSAqIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkuCiYjNDM7CSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2Nvbm4tJmd0O3NuZGJ1Zl9kZXNjLCBidWZfZGVzYyk7CiAJcmV0dXJuIDA7CiAKIGZyZWU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgU3luY2hyb25pemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCB0b3VjaGluZyBgbmV0L3NtYy9zbWNfY2RjLmNgIGFuZCBgbmV0L3NtYy9zbWNfY29yZS5jYC4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgc2xhcHBpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGFuZCBgc21wX3N0b3JlX3JlbGVhc2VgIG9udG8gdGhlIGBzbmRidWZfZGVzY2AgYW5kIGBybWJfZGVzY2AgcG9pbnRlcnMgd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYC4gUmlnaHQsIGEgc3luY2hyb25pemF0aW9uIGZpeCBmb3IgU01DIHNvY2tldHMuIFRoaXMgaXMgYSBjbGFzc2ljIOKAkyBwcmV2ZW50aW5nIHRob3NlIG5hc3R5IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIHRoYXQgcG9wIHVwIHdoZW4gYSBDREMgcmVjZWl2ZSBoYW5kbGVyIGdldHMgdG9vIGVhZ2VyIGFuZCB0cmllcyB0byBhY2Nlc3MgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIGV2ZXJ5dGhpbmcmIzM5O3MgcHJvcGVybHkgc2V0IHVwLgoKVGhlIGltcG9ydGFudCBxdWVzdGlvbiBub3csIGFzIGFsd2F5cywgaXMgdGVzdGFiaWxpdHkuIFRoaXMgdHlwZSBvZiBjb25jdXJyZW5jeSBpc3N1ZSBjYW4gYmUgdHJpY2t5IHRvIHRyaWdnZXIgcmVsaWFibHkuIENhbiBJIGV2ZW4gcmVwcm9kdWNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gU01DIGhhcyB0aG9zZSB0d28gZmxhdm9yczogU01DLVIgKFJETUEsIHJpZ2h0PykgYW5kIFNNQy1EIChJbnRlcm5hbCBTaGFyZWQgTWVtb3J5KS4gQW5kIFNNQy1EIGNhbiBsZXZlcmFnZSB0aGF0IGNvbnZlbmllbnQgbG9vcGJhY2sgSVNNIGRldmljZSwgdGhlIGBzbWNfbG9vcGJhY2tgLiBUaGF0JiMzOTtzIHRoZSBrZXkhIElmIEkgY2FuIGdldCB0aGF0IGBzbWNfbG9vcGJhY2tgIGdvaW5nIGluIFFFTVUgb3IgR0NFLCBJIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcywgZ2l2ZW4gdGhlIHJpZ2h0IHdvcmtsb2FkLgoKTm93IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IGNvbmZpZ3MuIE9idmlvdXNseSwgYENPTkZJR19TTUNgIGhhcyB0byBiZSBlbmFibGVkLiBJIG1pZ2h0IHdhbnQgYENPTkZJR19TTUNfRElBR2AgZm9yIGRlYnVnZ2luZy4gQnV0IGZvciB0ZXN0aW5nIHRoZSBsb29wYmFjaywgSSYjMzk7bGwgKmRlZmluaXRlbHkqIG5lZWQgYENPTkZJR19TTUNfTE9gLiBMZXQmIzM5O3MgZ2V0IGEgcXVpY2sgZ3JlcCBnb2luZyB0byBjaGVjayBvbiB0aG9zZSBTTUMgY29uZmlncyBhbmQgbWFrZSBzdXJlIEkmIzM5O20gc3RhcnRpbmcgZnJvbSBhIGNsZWFuIHNsYXRlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggb25lcyBhcmUgZW5hYmxlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBTdHJhdGVneTogSW52ZXN0aWdhdGluZyBMb3ctTGV2ZWwgQ29udHJvbCoqCgpBbHJpZ2h0LCB0aGUgcHJvYmxlbSYjMzk7cyBwcmVzZW50aW5nIGluIGEgd2F5IHRoYXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaXNzdWUgYXQgdGhlIGxvd2VyIGxldmVscyBvZiBjb250cm9sLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBTZXJpYWwgTW90b3IgQ29udHJvbGxlciYjMzk7cyBsb3ctbGV2ZWwgY29udHJvbCwgdGhlIHJlZ2lzdGVycyBhbmQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSBjb250cm9sLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlc2Ugc3lzdGVtcywgYFNNQ19MT2Agb3Igc29tZXRoaW5nIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGlzIGxpa2VseSB3aGVyZSB0aGUgcmVsZXZhbnQgcGFyYW1ldGVycyB0aGF0IGFyZSBjYXVzaW5nIHRoZSBwcm9ibGVtIHJlc2lkZSwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHdoZXJlIEkgY2FuIHNlZSB0aGUgZWZmZWN0cyBvZiBhIGxvd2VyLWxldmVsIGlzc3VlLCBzdWNoIGFzIHJlZ2lzdGVyIHZhbHVlcy4gSSB3YW50IHRvIGluc3BlY3QgdGhpbmdzIHRoYXQgYXJlIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgY29udHJvbCBsb29wcyBvciB0aGUgc2lnbmFsIHBhdGggb2YgdGhlIG1vdG9yIGNvbnRyb2xsZXIuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBjbHVlcyB0byB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgbW90b3IuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGxvb2tpbmcgZm9yIGFueXRoaW5nIGluIHRoZSBgU01DX0xPYCBhcmVhLCBvciB3aXRoaW4gYW55IGFsdGVybmF0aXZlIHN5c3RlbXMsIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQ19MTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM4MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNNQyBMb29wYmFjayBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIFNNQyBsb29wYmFjayBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgcHJvYmxlbSBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIGBuZXQvc21jL2AgZGlyZWN0b3J5IOKAkyB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb25zIChTTUMpIGltcGxlbWVudGF0aW9uIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBzbyB0aGUgbG9vcGJhY2sgZnVuY3Rpb25hbGl0eSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgaGFuZGxlZCB0aGVyZS4gTm93LCB0aGUga2V5IGtleXdvcmRzIHRvIGxvb2sgZm9yIGFyZSBgc21jX2xvb3BiYWNrYCBvciBwZXJoYXBzIGp1c3QgYFNNQ19MT2AuIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgdGhlc2UgYmVjYXVzZSBgc21jX2xvb3BiYWNrYCBzZWVtcyB0aGUgbW9zdCBleHBsaWNpdCwgYnV0IGBTTUNfTE9gIGlzIGEgY29tbW9uIGFiYnJldmlhdGlvbiBjb252ZW50aW9uIGluIGtlcm5lbCBjb2RlLCBzbyBpdCYjMzk7cyBhIHdvcnRod2hpbGUgYWx0ZXJuYXRpdmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzLCBsaWtlbHkgYGdyZXBgIG9yIGEgc2ltaWxhciB1dGlsaXR5LCB0byBlZmZpY2llbnRseSBuYXZpZ2F0ZSB0aGUgc291cmNlIHRyZWUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBmdW5jdGlvbiBuYW1lcywgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBvciBhbnkgY29tbWVudHMgdGhhdCBzcGVjaWZpY2FsbHkgbWVudGlvbiBsb29wYmFjaywgYW5kIGhvcGVmdWxseSBmaW5kIHRoZSBwaWVjZXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBsb2NhbCBjb21tdW5pY2F0aW9uIHBhdGggd2hlbiB0aGUgdXNlciBpbnRlbmRzIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHNhbWUgaG9zdC4gVGhpcyBjb3VsZCBpbnZvbHZlIGRpcmVjdCBtZW1vcnkgYWNjZXNzLCBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIG9yIGEgc3BlY2lhbCBuZXR3b3JrIGRldmljZSBhYnN0cmFjdGlvbi4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBzcGVjaWZpYyBgc3RydWN0YCBvciBgY2xhc3NgIHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIGxvb3BiYWNrJiMzOTtzIHByb3BlcnRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbG9vcGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc1MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkxvb2tpbmcgZm9yIHRoZSBSaWdodCBDb250ZXh0KioKCkhtbSwgd2hlcmUgZGlkIEkgbGFzdCBzZWUgdGhhdCBgc21jX2xvb3BiYWNrYCBmdW5jdGlvbiBtZW50aW9uZWQ/IEkgZmVlbCBsaWtlIGl0IGNvdWxkIGJlIGluIG9uZSBvZiB0aGUgbmV0d29ya2luZyBkaXJlY3RvcmllcywgcmlnaHQ/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBlaXRoZXIgYGRyaXZlcnMvczM5MC9uZXQvYCBvciBtYXliZSBqdXN0IHRoZSBnZW5lcmFsIGBkcml2ZXJzL25ldC9gIHBhdGguIExldCYjMzk7cyBzdGFydCB3aXRoIHRob3NlLiBBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YCBmdW5jdGlvbiB0b28uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTE0MTY9c3RhdGljIGludCBzbWNfY29ubmVjdF9pc20oc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNDY0LVxubmV0L3NtYy9hZl9zbWMuYzoxNDY1Olx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cdTAwM2Vjb25uLmxnci1cdTAwM2VzbWNkKSkge1xubmV0L3NtYy9hZl9zbWMuYy0xNDY2LVx0XHRyYyA9IHNtY2RfYnVmX2F0dGFjaChzbWMpO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjQ0OT1zdGF0aWMgdm9pZCBzbWNfbGlzdGVuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjU3Mi1cdGlmIChpbmktXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvYWZfc21jLmM6MjU3MzpcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShuZXdfc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXNtY2QpKSB7XG5uZXQvc21jL2FmX3NtYy5jLTI1NzQtXHRcdHJjID0gc21jZF9idWZfYXR0YWNoKG5ld19zbWMpO1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTIzNz1pbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTI1OS1cbm5ldC9zbWMvc21jX2NkYy5jOjI2MDpcdGlmIChzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVx1MDAzZWxnci1cdTAwM2VzbWNkKSlcbm5ldC9zbWMvc21jX2NkYy5jLTI2MS1cdFx0LyogaWYgbG9jYWwgc25kYnVmIHNoYXJlcyB0aGUgc2FtZSBtZW1vcnkgcmVnaW9uIHdpdGhcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMzcwLVx0XHRpZiAoY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2NkYy5jOjM3MTpcdFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXHUwMDNlbGdyLVx1MDAzZXNtY2QpIFx1MDAyNlx1MDAyNlxubmV0L3NtYy9zbWNfY2RjLmMtMzcyLVx0XHQgICAgc25kYnVmX2Rlc2MpIHtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTI1Mz12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjcyLVx0XHRcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjczOlx0XHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkobGdyLVx1MDAzZXNtY2QpKVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNzQtXHRcdFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xNTE1PXN0YXRpYyB2b2lkIHNtY19jb25uX2tpbGwoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLCBib29sIHNvZnQpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE1MjctXHRcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxNTI4Olx0XHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkpXG5uZXQvc21jL3NtY19jb3JlLmMtMTUyOS1cdFx0XHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1NjE9aW50IHNtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjYtXHRpZiAoaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2NvcmUuYzoyNTY3Olx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cdTAwM2Vjb25uLmxnci1cdTAwM2VzbWNkKSlcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY4LVx0XHRnb3RvIGNyZWF0ZV9ybWI7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmM9MjM1PWludCBzbWNfaXNtX3JlZ2lzdGVyX2RtYihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgaW50IGRtYl9sZW4sXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtMjU5LVxubmV0L3NtYy9zbWNfaXNtLmM6MjYwOmJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxubmV0L3NtYy9zbWNfaXNtLmMtMjYxLXtcbi0tXG5uZXQvc21jL3NtY19pc20uaD01MT12b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsXG5uZXQvc21jL3NtY19pc20uaC01Mi1cdFx0XHQgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xubmV0L3NtYy9zbWNfaXNtLmg6NTM6Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpO1xubmV0L3NtYy9zbWNfaXNtLmgtNTQtaW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjEzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHlgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB3aGF0IHRoaXMgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZy4gVGhlIG5hbWUgaXRzZWxmIGlzIGEgY2x1ZSwgc28gbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uICYjMzQ7U01DJiMzNDsgbGlrZWx5IGluZGljYXRlcyBTZWN1cmUgTW9uaXRvciBDYWxsIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIHNlY3VyZSBjb21tdW5pY2F0aW9uLiAmIzM0O0lTTSYjMzQ7IGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gYW4gSW5zdHJ1Y3Rpb24gU2V0IE1uZW1vbmljLiAmIzM0O1N1cHBvcnQmIzM0OyBpcyBzZWxmIGV4cGxhbmF0b3J5IGFuZCAmIzM0O2RtYl9ub2NvcHkmIzM0OyBzZWVtcyB0aGUgbW9zdCBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC4gJiMzNDtkbWImIzM0OyBpcyBhIGxpa2VseSByZWZlcmVuY2UgdG8gYSBEYXRhIE1lbW9yeSBCYXJyaWVyIGFuZCAmIzM0O25vY29weSYjMzQ7IHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIG1lbW9yeSBpc24mIzM5O3QgZHVwbGljYXRlZCBvciBjb3BpZWQuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGludm9sdmVzIHNvbWUga2luZCBvZiBtZWNoYW5pc20gZm9yIHNlY3VyZSBtZW1vcnkgYWNjZXNzLCBwcm9iYWJseSB1c2luZyBhIGRhdGEgbWVtb3J5IGJhcnJpZXIsIGFuZCBpdCYjMzk7cyBkb2luZyBzbyB3aXRob3V0IGNvcHlpbmcgdGhlIGFjdHVhbCBkYXRhLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc2Vuc2l0aXZlIG1lbW9yeSByZWdpb25zLCBwZXJoYXBzIHNoYXJlZCBiZXR3ZWVuIHNlY3VyZSBhbmQgbm9uLXNlY3VyZSB3b3JsZHMsIG9yIHdpdGhpbiBhIHNlY3VyaXR5IGNvbnRleHQgaXRzZWxmLCB3aGVyZSBkYXRhIGludGVncml0eSBhbmQgYWNjZXNzIGNvbnRyb2wgYXJlIGNyaXRpY2FsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgdXNlLWNhc2U/IFdoYXQgYXJjaGl0ZWN0dXJlIGlzIHRoaXMgdGFyZ2V0aW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIFRydXN0Wm9uZSBzeXN0ZW0sIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSAmIzM0O25vY29weSYjMzQ7IGFzcGVjdCByZWFsbHkgcGlxdWVzIG15IGludGVyZXN0OyB0aGF0JiMzOTtzIGdlbmVyYWxseSBkb25lIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBjb3B5aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaG93IHRoZSBiYXJyaWVyIGlzIGVtcGxveWVkIGFuZCB3aGF0IGtpbmQgb2YgbWVtb3J5IGFjY2VzcyBwcm90ZWN0aW9uIGl0JiMzOTtzIHByb3ZpZGluZy4gSXMgdGhpcyBzaW1wbHkgYWJvdXQgY2FjaGUgY29oZXJlbmN5PyBPciBpcyB0aGVyZSBzb21ldGhpbmcgbW9yZSBudWFuY2VkIGdvaW5nIG9uPyBJIHNob3VsZCBhbnRpY2lwYXRlIGl0IGJlaW5nIHJlbGF0ZWQgdG8gc29tZSBzeXN0ZW0tbGV2ZWwgc2VjdXJpdHkgYXJjaGl0ZWN0dXJlLCBsaWtlbHkgYSBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgaXNvbGF0aW9uIG9yIGNvbnRyb2wgc2NoZW1lLiBMZXQmIzM5O3Mgc2VlIGhvdyBJIGNhbiBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pc20uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pc20uYz0yMzU9aW50IHNtY19pc21fcmVnaXN0ZXJfZG1iKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBpbnQgZG1iX2xlbixcbi0tXG5uZXQvc21jL3NtY19pc20uYy0yNTktXG5uZXQvc21jL3NtY19pc20uYzoyNjA6Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpXG5uZXQvc21jL3NtY19pc20uYy0yNjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODExCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L3NtYy9zbWNfaXNtLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgc29tZSBmb3JtIG9mIG1lbW9yeSBiYXJyaWVyIG9wZXJhdGlvbiByZWxhdGVkIHRvIGRhdGEgbW92ZW1lbnQgd2l0aGluIHRoZSBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zIG92ZXIgUkRNQSAoU01DLVIpIElTTSAoSW5maW5pQmFuZCBTaGFyZWQgTWVtb3J5KSBjb250ZXh0LCBhbmQgdGhlICYjMzQ7bm9jb3B5JiMzNDsgc3VmZml4IGhpbnRzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgbWVtb3J5IHJlZ2lvbnMgdGhhdCBkb24mIzM5O3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IGNvcGllZC4KCkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGhvdyB0aGlzIHN1cHBvcnRzIG9yIGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBTTUMtUiBJU00gZGF0YSBwYXRoLiBJcyB0aGlzIHBhcnQgb2YgdGhlIGluaXRpYWwgc2V0dXAsIHRoZSBkYXRhIHRyYW5zZmVyIGl0c2VsZiwgb3IgcGVyaGFwcyBhIGNsZWFuLXVwIHBoYXNlPyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIG1lbW9yeSBiYXJyaWVyIGl0JiMzOTtzIHVzaW5nLiBBIERNQiAoRGF0YSBNZW1vcnkgQmFycmllcikgaXMgYSBmYWlybHkgYnJvYWQgdGVybSwgYnV0IGluIHRoaXMgY29udGV4dCwgSSBzdXNwZWN0IGl0IGxpa2VseSBpbnZvbHZlcyBlaXRoZXIgZW5zdXJpbmcgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGJlZm9yZSBiZWluZyBhY2Nlc3NlZCBieSB0aGUgcGVlciwgb3IgbWFraW5nIHN1cmUgdGhlIGN1cnJlbnQgcHJvY2VzcyBzZWVzIHRoZSBkYXRhLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGNvbnRleHQgdGhhdCBiYXJyaWVyIGlzIG9wZXJhdGluZyBpbiB0byBiZSBzdXJlLiBBbnkgc3VidGxldGllcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gd291bGQgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nOiBhcmUgdGhleSByZWx5aW5nIG9uIGhhcmR3YXJlIGNhY2hlIGNvaGVyZW5jeSwgb3IgaXMgdGhlcmUgYSBtb3JlIHNvZnR3YXJlLWNlbnRyaWMgYXBwcm9hY2g/IFdoYXQgaW1wYWN0IGRvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIG9uIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb2YgdGhlIElTTSBzdWJzeXN0ZW0/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBieSBkaWZmZXJlbnQgcHJvY2Vzc2VzIHdpdGhpbiB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaWYgaXQgaXMgdXNlZCB0byBndWFyYW50ZWUgb3JkZXIgYmV0d2VlbiByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zLiBUaGUgJiMzNDtub2NvcHkmIzM0OyBhc3BlY3QgcmVhbGx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbXVzdCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgZWZmaWNpZW5jeSBhbmQgaG93IHRoZXkmIzM5O3JlIG9wdGltaXppbmcgZGF0YSBtb3ZlbWVudCBpbiB0aGlzIGNyaXRpY2FsIHBhdGguIFRpbWUgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2lzbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTU6XHRcdFx0ZG1iX2Rlc2MtXHUwMDNlbGVuID0gZG1iLmRtYl9sZW47XG4gMjU2Olx0XHR9XG4gMjU3Olx0XHRyZXR1cm4gcmM7XG4gMjU4Olx0fVxuIDI1OTpcdFxuIDI2MDpcdGJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxuIDI2MTpcdHtcbiAyNjI6XHRcdC8qIGZvciBub3cgb25seSBsb29wYmFjay1pc20gc3VwcG9ydHNcbiAyNjM6XHRcdCAqIG1lcmdpbmcgc25kYnVmIHdpdGggcGVlciBETUIgdG8gYXZvaWRcbiAyNjQ6XHRcdCAqIGRhdGEgY29waWVzIGJldHdlZW4gdGhlbS5cbiAyNjU6XHRcdCAqL1xuIDI2NjpcdFx0cmV0dXJuIChzbWNkLVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZXN1cHBvcnRfbW1hcHBlZF9yZG1iIFx1MDAyNlx1MDAyNlxuIDI2NzpcdFx0XHRzbWNkLVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZXN1cHBvcnRfbW1hcHBlZF9yZG1iKHNtY2QtXHUwMDNlZGlicykpO1xuIDI2ODpcdH1cbiAyNjk6XHRcbiAyNzA6XHRpbnQgc21jX2lzbV9hdHRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4sXG4gMjcxOlx0XHRcdCAgICAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYylcbiAyNzI6XHR7XG4gMjczOlx0XHRzdHJ1Y3QgZGlic19kbWIgZG1iO1xuIDI3NDpcdFx0aW50IHJjID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgU01DIE1lcmdlIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyAmIzM0O2xvb3BiYWNrLWlzbSBzdXBwb3J0cyBtZXJnaW5nIHNuZGJ1ZiB3aXRoIHBlZXIgRE1CJiMzNDsg4oCTIHRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCB0ZWxscyBtZSB0aGUgbWVyZ2luZyBvZiB0aGUgc2VuZCBidWZmZXIgd2l0aCB0aGUgcGVlciYjMzk7cyBEaXJlY3QgTWVtb3J5IEJ1ZmZlciAoRE1CKSBpcyBjdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBpbiB0aGUgbG9vcGJhY2sgSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBNZXRob2QgKElTTSkgdmFyaWFudC4gRXhjZWxsZW50LiBUaGF0IG5hcnJvd3MgZG93biBteSBmb2N1cyBjb25zaWRlcmFibHkuIFRoZSBpbXBsaWNhdGlvbiBpcywgaWYgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhpcyBtZXJnZSBmdW5jdGlvbmFsaXR5LCBJIG5lZWQgdG8gZm9jdXMgb24gaG93IGl0JiMzOTtzIGRvbmUgaW4gdGhlIGxvb3BiYWNrIGNhc2UuCgpOb3csIHdoZXJlJiMzOTtzIHRoZSBjb2RlPyBMZXQmIzM5O3MgYXNzdW1lIHRoZSByZWxldmFudCBjb2RlIGlzIGluIGEgYG5ldC9zbWNgIGRpcmVjdG9yeSBzb21ld2hlcmUsIGFuZCBnaXZlbiB0aGUgbG9vcGJhY2sgZm9jdXMsIEkmIzM5O2xsIGJldCBpdCYjMzk7cyBjYWxsZWQgc29tZXRoaW5nIGxpa2UgYHNtY19sb29wYmFjay5jYC4gT3IgbWF5YmUgYHNtY19pc21fbG9vcGJhY2suY2A/IEVpdGhlciB3YXksIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoYXQgcGF0aCBmb3IgdGhlIGRldGFpbHMgb2YgdGhhdCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHRhc2s6IGZpbmQgdGhhdCBzb3VyY2UgY29kZSBhbmQgZGlzc2VjdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pc20uYz0yNjA9Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpXG5uZXQvc21jL3NtY19pc20uYy0yNjEte1xubmV0L3NtYy9zbWNfaXNtLmM6MjYyOlx0LyogZm9yIG5vdyBvbmx5IGxvb3BiYWNrLWlzbSBzdXBwb3J0c1xubmV0L3NtYy9zbWNfaXNtLmMtMjYzLVx0ICogbWVyZ2luZyBzbmRidWYgd2l0aCBwZWVyIERNQiB0byBhdm9pZFxuLS1cbm5ldC9zbWMvc21jX2lzbS5jPTM2NT1zdGF0aWMgdm9pZCBzbWNfbmxfcHJlcF9zbWNkX2RldihzdHJ1Y3Qgc21jZF9kZXZfbGlzdCAqZGV2X2xpc3QsXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtMzc3LVx0XHRcdGdvdG8gbmV4dDtcbm5ldC9zbWMvc21jX2lzbS5jOjM3ODpcdFx0aWYgKHNtY19pc21faXNfbG9vcGJhY2soc21jZC1cdTAwM2VkaWJzKSlcbm5ldC9zbWMvc21jX2lzbS5jLTM3OS1cdFx0XHRnb3RvIG5leHQ7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmM9NDkxPXN0YXRpYyB2b2lkIHNtY2RfcmVnaXN0ZXJfZGV2KHN0cnVjdCBkaWJzX2RldiAqZGlicylcbi0tXG5uZXQvc21jL3NtY19pc20uYy01MDctXG5uZXQvc21jL3NtY19pc20uYzo1MDg6XHRpZiAoc21jX2lzbV9pc19sb29wYmFjayhkaWJzKSB8fFxubmV0L3NtYy9zbWNfaXNtLmMtNTA5LVx0ICAgIChkaWJzLVx1MDAzZW9wcy1cdTAwM2VhZGRfdmxhbl9pZCBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvc21jL3NtY19pc20uYy01MTYtXHQgKiAtIGRldmljZXMgd2l0aG91dCBwbmV0aWQgYmVmb3JlIGRldmljZXMgd2l0aCBwbmV0aWQ7XG5uZXQvc21jL3NtY19pc20uYzo1MTc6XHQgKiAtIGxvb3BiYWNrLWlzbSBhbHdheXMgYXQgdGhlIHZlcnkgYmVnaW5uaW5nO1xubmV0L3NtYy9zbWNfaXNtLmMtNTE4LVx0ICovXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtNTIxLVx0XHRcdFx0XHRcdCAgc3RydWN0IHNtY2RfZGV2LCBsaXN0KTtcbm5ldC9zbWMvc21jX2lzbS5jOjUyMjpcdFx0aWYgKGZlbnRyeSBcdTAwMjZcdTAwMjYgc21jX2lzbV9pc19sb29wYmFjayhmZW50cnktXHUwMDNlZGlicykpXG5uZXQvc21jL3NtY19pc20uYy01MjMtXHRcdFx0bGlzdF9hZGQoXHUwMDI2c21jZC1cdTAwM2VsaXN0LCBcdTAwMjZmZW50cnktXHUwMDNlbGlzdCk7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmg9Nzg9c3RhdGljIGlubGluZSBib29sIF9fc21jX2lzbV9pc19lbXVsYXRlZCh1MTYgY2hpZClcbi0tXG5uZXQvc21jL3NtY19pc20uaC04Mi1cdCAqXG5uZXQvc21jL3NtY19pc20uaDo4MzpcdCAqIGxvb3BiYWNrLWlzbTpcdDB4RkZGRlxubmV0L3NtYy9zbWNfaXNtLmgtODQtXHQgKiB2aXJ0aW8taXNtOlx0XHQweEZGMDAgfiAweEZGRkVcbi0tXG5uZXQvc21jL3NtY19pc20uaD04OT1zdGF0aWMgaW5saW5lIGJvb2wgc21jX2lzbV9pc19lbXVsYXRlZChzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpXG4tLVxubmV0L3NtYy9zbWNfaXNtLmgtOTUtXG5uZXQvc21jL3NtY19pc20uaDo5NjpzdGF0aWMgaW5saW5lIGJvb2wgc21jX2lzbV9pc19sb29wYmFjayhzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG5uZXQvc21jL3NtY19pc20uaC05Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBLZXJuZWwgTG9vcGJhY2sgSW1wbGVtZW50YXRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBsb29wYmFjayBmdW5jdGlvbmFsaXR5IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gYmUgcHJlY2lzZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgdmVyeSB0YXJnZXRlZCBzZWFyY2guIEkmIzM5O2xsIGZvY3VzIG9uIGVpdGhlciB0aGUgcG90ZW50aWFsbHkgbW9yZSBnZW5lcmljIHRlcm0sIGBsb29wYmFjay1pc21gLCBvciwgaWYgdGhhdCYjMzk7cyB0b28gYnJvYWQsIEkmIzM5O2xsIGdvIGZvciB0aGUgbW9yZSBsaWtlbHkgc3BlY2lmaWMsIGBzbWNfbG9vcGJhY2tgLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBob25lIGluIG9uIHRoZSBjb3JlIGNvZGUgcmVzcG9uc2libGUuIEtub3dpbmcgdGhlIGV4YWN0IG5hbWluZyBjb252ZW50aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbXByb3ZlIHRoZSBlZmZpY2llbmN5IG9mIHRoaXMgc2VhcmNoLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgYXBwcm9hY2ggaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGV4aXN0aW5nIGtlcm5lbCBjb2RlIGJhc2UuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGJlIHZhbHVhYmxlIGluIGdldHRpbmcgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsJiMzOTtzIGRlc2lnbiBjaG9pY2VzIHdoZW4gaXQgY29tZXMgdG8gbG9vcGJhY2sgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcGJhY2staXNtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMi0vKlxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozOiAqICBGdW5jdGlvbnMgZm9yIGRpYnMgbG9vcGJhY2svbG9vcGJhY2staXNtIGRldmljZS5cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNC0gKlxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtMi0vKlxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDozOiAqICBkaWJzIGxvb3BiYWNrIChha2EgbG9vcGJhY2staXNtKSBkZXZpY2Ugc3RydWN0dXJlIGRlZmluaXRpb25zLlxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC00LSAqXG4tLVxubmV0L3NtYy9zbWNfaXNtLmM9MjYwPWJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxubmV0L3NtYy9zbWNfaXNtLmMtMjYxLXtcbm5ldC9zbWMvc21jX2lzbS5jOjI2MjpcdC8qIGZvciBub3cgb25seSBsb29wYmFjay1pc20gc3VwcG9ydHNcbm5ldC9zbWMvc21jX2lzbS5jLTI2My1cdCAqIG1lcmdpbmcgc25kYnVmIHdpdGggcGVlciBETUIgdG8gYXZvaWRcbi0tXG5uZXQvc21jL3NtY19pc20uYz00OTE9c3RhdGljIHZvaWQgc21jZF9yZWdpc3Rlcl9kZXYoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxuLS1cbm5ldC9zbWMvc21jX2lzbS5jLTUxNi1cdCAqIC0gZGV2aWNlcyB3aXRob3V0IHBuZXRpZCBiZWZvcmUgZGV2aWNlcyB3aXRoIHBuZXRpZDtcbm5ldC9zbWMvc21jX2lzbS5jOjUxNzpcdCAqIC0gbG9vcGJhY2staXNtIGFsd2F5cyBhdCB0aGUgdmVyeSBiZWdpbm5pbmc7XG5uZXQvc21jL3NtY19pc20uYy01MTgtXHQgKi9cbi0tXG5uZXQvc21jL3NtY19pc20uaD03OD1zdGF0aWMgaW5saW5lIGJvb2wgX19zbWNfaXNtX2lzX2VtdWxhdGVkKHUxNiBjaGlkKVxuLS1cbm5ldC9zbWMvc21jX2lzbS5oLTgyLVx0ICpcbm5ldC9zbWMvc21jX2lzbS5oOjgzOlx0ICogbG9vcGJhY2staXNtOlx0MHhGRkZGXG5uZXQvc21jL3NtY19pc20uaC04NC1cdCAqIHZpcnRpby1pc206XHRcdDB4RkYwMCB+IDB4RkZGRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gZGlic19sb29wYmFjay5jIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUgb2YgdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiB0aGUgY29kZWJhc2U/JiMzNDsgVGltZSB0byBnbyBzdHJhaWdodCB0byB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGRpYnNfbG9vcGJhY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSwgYW5kIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBhcmUuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgb3IgcG90ZW50aWFsbHkgYSBkZXZpY2UgdHJlZSBvdmVybGF5LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhlcmUgYXJlIHNvbWUgcHJlcHJvY2Vzc29yIGRlZmluZXMgYXQgcGxheS4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgdG8gZ3JvayB0aGUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRoZSBiYXNlbGluZSBiZWZvcmUgYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERJQlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIERlcGVuZGVuY2llcyBmb3IgT3B0aW1hbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgQ09ORklHX0RJQlNgIGFuZCBgQ09ORklHX0RJQlNfTE9gIGFyZSBlc3NlbnRpYWwgY29tcG9uZW50cy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYENPTkZJR19TTUNgIGlzIGFsc28gYSBkZXBlbmRlbmN5LiBBIHF1aWNrIHNlYXJjaCByZXZlYWxzIGl0cyBwcmVzZW5jZSBpbiBgbmV0L3NtYy9zbWNfY2RjLmNgLCBjb25maXJtaW5nIGl0cyBpbnZvbHZlbWVudC4KCk5leHQsIEkmIzM5O2xsIGNoZWNrIGZvciBgQ09ORklHX1NNQ19MT2AuIEFoYSwgdGhhdCBhcHBlYXJzIHRvIGJlIGNvdmVyZWQgdW5kZXIgYENPTkZJR19ESUJTX0xPYC4gR29vZCB0byBrbm93IHRoYXQgcmVkdW5kYW5jeSBpc24mIzM5O3QgcHJlc2VudCwgYW5kIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIHNlZW1zIHN1ZmZpY2llbnQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgbmV0L3NtYy9LY29uZmlnYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2ggYXQgdGhpcyBzdGFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU01DXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFNNQy1SIHByb3ZpZGVzIGEgXCYjMzQ7c29ja2V0cyBvdmVyIFJETUFcJiMzNDsgc29sdXRpb24gbWFraW5nIHVzZSBvZlxuICAgNzpcdFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcbiAgIDg6XHRcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cbiAgIDk6XHRcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xuICAxMDpcdFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFNNQ19ESUFHXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBTTUNcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcbiAgMTk6XHRcdCAgc21jc3MuXG4gIDIwOlx0XG4gIDIxOlx0XHQgIGlmIHVuc3VyZSwgc2F5IFkuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxuICAyNDpcdFx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbiAgMjY6XHRcdGRlZmF1bHQgeVxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBTTUNfSFNfQ1RSTF9CUEYgZW5hYmxlcyBzdXBwb3J0IHRvIHJlZ2lzdGVyIGdlbmVyaWMgZUJQRiBob29rIGZvciBTTUNcbiAgMjk6XHRcdCAgaGFuZHNoYWtlIGZsb3csIHdoaWNoIG9mZmVyIG11Y2ggZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yXG4gIDMwOlx0XHQgIG9mIHRoZSBTTUMgcHJvdG9jb2wgc3RhY2sgY29tcGFyZWQgdG8gYSBjb21wbGV0ZSBrZXJuZWwtYmFzZWQgYXBwcm9hY2guIFNlbGVjdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU2OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTTUMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJldmVhbHMgdGhhdCB0aGUgYENPTkZJR19TTUNgIG9wdGlvbiBoaW5nZXMgb24gdGhlIHByZXNlbmNlIG9mIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgIGNvbmZpZ3VyYXRpb25zLiBUaGVyZWZvcmUsIHRvIGVuc3VyZSBjb21wbGV0ZSBmdW5jdGlvbmFsaXR5LCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBTTUNgLCBgRElCU2AsIGFuZCBgRElCU19MT2AuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQ6IGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYF9fc21jX2J1Zl9jcmVhdGVgLCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIFllcywgdGhlc2UgYXJlIGFsbCBjb3JlIHRvIFNNQyYjMzk7cyBjb25uZWN0aW9uIHNldHVwIGFuZCBDREMgbWVzc2FnZSBoYW5kbGluZy4gU3BlY2lmaWNhbGx5OgoKKiAgIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAgaXMgdHJpZ2dlcmVkIHVwb24gcmVjZWl2aW5nIENEQyBtZXNzYWdlcywgdml0YWwgZm9yIGNvbW11bmljYXRpb24uCiogICBgc21jZF9jZGNfcnhfdHNrbGV0YCBpcyB0aGUgdGFza2xldCByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHJlY2VwdGlvbiBvZiBDREMgbWVzc2FnZXMgd2l0aGluIFNNQy1ELgoqICAgYHNtY19jZGNfcnhfaGFuZGxlcmAgaGFuZGxlcyB0aGUgcmVjZXB0aW9uIG9mIENEQyBtZXNzYWdlcyB3aXRoaW4gU01DLVIuCiogICBgX19zbWNfYnVmX2NyZWF0ZWAgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGJ1ZmZlcnMsIGEgZnVuZGFtZW50YWwgb3BlcmF0aW9uLgoqICAgYHNtY2RfYnVmX2F0dGFjaGAgaXMgZXNzZW50aWFsIGZvciBhdHRhY2hpbmcgYnVmZmVycyB3aXRoaW4gdGhlIFNNQy1EIGNvbnRleHQuCgpTbywgaW4gZXNzZW5jZSwgdGhpcyBpcyB0aGUgYmFja2JvbmUgb2YgdGhlIFNNQyBjb25uZWN0aW9uIGFuZCBkYXRhIHBhdGguCgpEaWdnaW5nIGRlZXBlciwgSSB3YW50IHRvIGNsYXJpZnkgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgZm9yIFNNQy1ELiBCZXNpZGVzIGBDT05GSUdfU01DYCBhcyB0aGUgcHJpbWFyeSByZXF1aXJlbWVudCwgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfRElCU2AgYW5kIGBDT05GSUdfRElCU19MT2AgdG8gZmFjaWxpdGF0ZSBTTUMtRCBsb29wYmFjayBmdW5jdGlvbmFsaXR5LgoKVG8gc3VtbWFyaXplLCBteSBjb3JlIGZvY3VzIG5vdyBhcmUgdGhlIGZ1bmN0aW9uczogYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY2RfY2RjX3J4X3Rza2xldGAsIGBzbWNfY2RjX3J4X2hhbmRsZXJgLCBgX19zbWNfYnVmX2NyZWF0ZWAsIGFuZCBgc21jZF9idWZfYXR0YWNoYC4KCldhaXQsIGBfX3NtY19idWZfY3JlYXRlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgbG9vayBpbnRvIGBzbWNfY29yZS5jYCB0byBjb25maXJtIHRoZSBzdGF0aWMgbGlua2FnZSBhbmQgdG8gZGV0ZXJtaW5lIGl0cyBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zbWNfYnVmX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmM9MjM5MD1zdGF0aWMgc3RydWN0IHNtY19idWZfZGVzYyAqc21jZF9uZXdfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjQyNS1cbm5ldC9zbWMvc21jX2NvcmUuYzoyNDI2OnN0YXRpYyBpbnQgX19zbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkLCBib29sIGlzX3JtYilcbm5ldC9zbWMvc21jX2NvcmUuYy0yNDI3LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MjU2MT1pbnQgc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZClcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjU2OS1cbm5ldC9zbWMvc21jX2NvcmUuYzoyNTcwOlx0cmMgPSBfX3NtY19idWZfY3JlYXRlKHNtYywgaXNfc21jZCwgZmFsc2UpO1xubmV0L3NtYy9zbWNfY29yZS5jLTI1NzEtXHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NzUtXHQvKiBjcmVhdGUgcm1iICovXG5uZXQvc21jL3NtY19jb3JlLmM6MjU3NjpcdHJjID0gX19zbWNfYnVmX2NyZWF0ZShzbWMsIGlzX3NtY2QsIHRydWUpO1xubmV0L3NtYy9zbWNfY29yZS5jLTI1NzctXHRpZiAocmMgXHUwMDI2XHUwMDI2IHNtYy1cdTAwM2Vjb25uLnNuZGJ1Zl9kZXNjKSB7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1ODg9aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxNi1cdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxubmV0L3NtYy9zbWNfY29yZS5jOjI2MTc6XHQgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOC1cdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgU01DIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBhbmFseXppbmcgaG93IHRvIGJlc3QgZnV6eiB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBmdW5jdGlvbmFsaXR5LiBJbml0aWFsbHksIEkgd2FzIGxvb2tpbmcgYXQgYF9fc21jX2J1Zl9jcmVhdGVgIGJ1dCByZWFsaXplZCB0aGF0IFN5emthbGxlciBjYW4sIGluIGZhY3QsIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIGluIHRoZSBzeW1ib2wgdGFibGUsIHRob3VnaCBpdCYjMzk7cyB1c3VhbGx5IGJldHRlciB0byBwcm92aWRlIHRoZSBub24tc3RhdGljIG9uZXMgb3IgdGhlIGV4cGxpY2l0bHkgaWRlbnRpZmlhYmxlIHN0YXRpYyBvbmVzLiBCdXQgdGhlIGNvdmVyYWdlIHRyYWNraW5nIGNhcGFiaWxpdHkgbWFrZXMgaW5jbHVkaW5nIGBfX3NtY19idWZfY3JlYXRlYCBhIHZpYWJsZSBvcHRpb24gaGVyZS4KClRoZSBrZXkgaXMgdG8gdGFyZ2V0IGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3QgbmVjZXNzYXJpbHkgKmhvdC1wYXRoKiBmdW5jdGlvbnMsIGJ1dCBhcmUgaW1wb3J0YW50IGZvciBTTUPigJlzIHNwZWNpZmljIGludGVyYWN0aW9ucy4gQ29uc2lkZXJpbmcgdGhlIHByb21wdCYjMzk7cyBmb2N1cyBvbiB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMsIEkmIzM5O3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBjYW5kaWRhdGVzOgoKKiAgIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmA6IHRoaXMgaGFuZGxlcyBDREMgbWVzc2FnZSByZWNlaXZpbmc7IGl0IG1pZ2h0IGJlIG1vZGVyYXRlbHkgYWN0aXZlLCBidXQgaXQmIzM5O3MgU01DLXNwZWNpZmljLgoqICAgYHNtY2RfY2RjX3J4X3Rza2xldGA6IHRoaXMgaXMgdGhlIHRhc2tsZXQgcmVzcG9uc2libGUgZm9yIFNNQy1EIFJYIGhhbmRsaW5nLgoqICAgYHNtY19jZGNfcnhfaGFuZGxlcmA6IHRoaXMgaGFuZGxlcyBTTUMtUiBSWC4KKiAgIGBfX3NtY19idWZfY3JlYXRlYDogdGhpcyBpcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gc2V0dXAuCiogICBgc21jZF9idWZfYXR0YWNoYDogdGhpcyBpcyBhbHNvIGludm9sdmVkIGluIGNvbm5lY3Rpb24gc2V0dXAuCgpCYXNlZCBvbiB0aGlzLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkIGhlYXZpbHkgZnV6emluZyB0aG9zZSBmaXZlOiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgb25lcyBJJiMzOTt2ZSBpZGVudGlmaWVkIGFyZSBgU01DYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gLiBMZXQgbWUgZG91YmxlLWNoZWNrIGBESUJTX0xPYDsgaXQmIzM5O3MgYSBib29sLCBzbyBubyBpc3N1ZXMgdGhlcmUuIFNpbmNlIGBTTUNgIHJlbGllcyBvbiBgSU5GSU5JQkFORGAsIEkmIzM5O2xsIGluY2x1ZGUgdGhhdCBhcyB3ZWxsLCBhbHRob3VnaCBpdCYjMzk7cyB0eXBpY2FsbHkgZW5hYmxlZC4gV2FpdCwgSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIGBJTkVUYCBpcyBlbmFibGVkLiBgU01DYCBkZXBlbmRzIG9uIGBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiBTbywgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZSBgU01DYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gLgoKSXQgbG9va3MgbGlrZSB0aGUgYFNNQ2AgZnVuY3Rpb25hbGl0eSBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIFRoaXMgbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nLiBJdCYjMzk7cyBhIGNvbm5lY3Rpb24gc2V0dXAgcmFjZSBjb25kaXRpb24gdGhhdCBhIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBtaWdodCBhY2Nlc3MgdW5pbml0aWFsaXplZCBidWZmZXJzLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgY2FuZGlkYXRlIQoKU28sIHRvIHN1bW1hcml6ZSBteSBzdHJhdGVneToKCioqQ29uZmlnczoqKgoKKiAgIGBTTUNgCiogICBgRElCU2AKKiAgIGBESUJTX0xPYAoKKipTeW1ib2xzOioqCgoqICAgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYAoqICAgYHNtY2RfY2RjX3J4X3Rza2xldGAKKiAgIGBzbWNfY2RjX3J4X2hhbmRsZXJgCiogICBgX19zbWNfYnVmX2NyZWF0ZWAKKiAgIGBzbWNkX2J1Zl9hdHRhY2hgCgpJIHNob3VsZCBub3cgZG91YmxlIGNoZWNrIHdoZXRoZXIgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCBpcyBzdGF0aWMgb3Igbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfY2RjX21zZ19yZWN2X2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NkYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NkYy5jPTMwOD1zdGF0aWMgdm9pZCBzbWNfY2RjX21zZ192YWxpZGF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19jZGNfbXNnICpjZGMsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMzI5LVxubmV0L3NtYy9zbWNfY2RjLmM6MzMwOnN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxubmV0L3NtYy9zbWNfY2RjLmMtMzMxLVx0XHRcdFx0ICAgIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTQ0Nz1zdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2KHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYylcbi0tXG5uZXQvc21jL3NtY19jZGMuYy00NTAtXHRiaF9sb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbm5ldC9zbWMvc21jX2NkYy5jOjQ1MTpcdHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHNtYywgY2RjKTtcbm5ldC9zbWMvc21jX2NkYy5jLTQ1Mi1cdGJoX3VubG9ja19zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDk3PXN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNTE0LVx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxubmV0L3NtYy9zbWNfY2RjLmM6NTE1Olx0ICogUk1CIGlzIHVuc2V0IChzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGRlcmVmZXJlbmNlcyBpdCkgdG8gYXZvaWQgYVxubmV0L3NtYy9zbWNfY2RjLmMtNTE2LVx0ICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzA4CgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDM2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBQcm90b2NvbCBSYWNlIENvbmRpdGlvbiBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHByZXR0eSBjcml0aWNhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgcHJvdG9jb2wuIEkgY2FuIHNlZSB0aGUgZml4IGludm9sdmVzIGFkZGluZyBtZW1vcnkgYmFycmllcnMsIHNwZWNpZmljYWxseSBgc21wX2xvYWRfYWNxdWlyZWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZWAsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciB0aGlzIGtpbmQgb2YgaXNzdWUuIEl0JiMzOTtzIG1lYW50IHRvIHByb3RlY3QgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycywgYHNuZGJ1Zl9kZXNjYCBhbmQgYHJtYl9kZXNjYCwgZnJvbSBiZWluZyBhY2Nlc3NlZCBwcmVtYXR1cmVseSBieSBjb25jdXJyZW50IENvbm5lY3Rpb24gRGF0YSBDb250cm9sIChDREMpIHJlY2VpdmUgaGFuZGxlcnMuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlcnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB0b3VjaGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRpcmVjdGx5IGltcGFjdGluZyB0aGUgY29yZSBTTUMgbG9naWMgYW5kLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHNvbWV0aGluZyB3ZSYjMzk7bGwgc2VlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB0aGUgbG9vcGJhY2sgSVNNIChTTUMtRCkgZGV2aWNlLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGNyaXRpY2FsIHN5bWJvbHMgaW52b2x2ZWQgaW5jbHVkZSBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGUgZnVuY3Rpb25zIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYW5kIGBfX3NtY19idWZfY3JlYXRlYCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLCBzbyBJIHdpbGwgaW5jbHVkZSB0aGVtLiBgc21jZF9idWZfYXR0YWNoYCBpcyBub3Qgc3RhdGljLiBJJiMzOTtsbCBpbmNsdWRlIHRoYXQgYXMgd2VsbC4KCkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gSSBrbm93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFNNQ2AsIGJ1dCBJIHdhbnRlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBgRElCU2AgKGFuZCBgRElCU19MT2ApIGlzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uIEl0IGFwcGVhcnMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHdhcyBjb3JyZWN0OyBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvZGlicy9LY29uZmlnYCBjb25maXJtcyBgQ09ORklHX0RJQlNgIGFuZCBgQ09ORklHX0RJQlNfTE9gIGFyZSBkZWZpbmVkIHRoZXJlLiBJIGFsc28gdmVyaWZpZWQgdGhyb3VnaCBncmVwIGZvciBgbG9vcGJhY2staXNtYCB0aGF0IGBkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jYCBleGlzdHMuIFllcCwgYERJQlNgIGlzIHRoZSByaWdodCBvbmUuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGV2ZXJ5dGhpbmcgSSBuZWVkLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtESUJTX0xPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2NkY19tc2dfcmVjdl9hY3Rpb24mIzM0OywKICAgICYjMzQ7c21jZF9jZGNfcnhfdHNrbGV0JiMzNDssCiAgICAmIzM0O3NtY19jZGNfcnhfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtfX3NtY19idWZfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NtY2RfYnVmX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHByb3RvY29sIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBhZGRzIG1lbW9yeSBiYXJyaWVycyAoc21wX2xvYWRfYWNxdWlyZSBhbmQgc21wX3N0b3JlX3JlbGVhc2UpIHRvIHByZXZlbnQgY29uY3VycmVudCBDREMgKENvbm5lY3Rpb24gRGF0YSBDb250cm9sKSByZWNlaXZlIGhhbmRsZXJzIGZyb20gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzIChzbmRidWZfZGVzYyBhbmQgcm1iX2Rlc2MpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBTTUMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHRoZSBsb29wYmFjayBJU00gZGV2aWNlIChTTUMtRCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfY2RjX21zZ19yZWN2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDtzbWNkX2NkY19yeF90c2tsZXQmIzM0OywKICAgICYjMzQ7c21jX2NkY19yeF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O19fc21jX2J1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jZF9idWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGFkZHMgbWVtb3J5IGJhcnJpZXJzIChzbXBfbG9hZF9hY3F1aXJlIGFuZCBzbXBfc3RvcmVfcmVsZWFzZSkgdG8gcHJldmVudCBjb25jdXJyZW50IENEQyAoQ29ubmVjdGlvbiBEYXRhIENvbnRyb2wpIHJlY2VpdmUgaGFuZGxlcnMgZnJvbSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKHNuZGJ1Zl9kZXNjIGFuZCBybWJfZGVzYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFNNQyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGxvb3BiYWNrIElTTSBkZXZpY2UgKFNNQy1EKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjA5Ljg0MDAyNjU1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDIzMzkyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uXCIsXG4gICAgXCJzbWNkX2NkY19yeF90c2tsZXRcIixcbiAgICBcInNtY19jZGNfcnhfaGFuZGxlclwiLFxuICAgIFwiX19zbWNfYnVmX2NyZWF0ZVwiLFxuICAgIFwic21jZF9idWZfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBwcm90b2NvbCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4gSXQgYWRkcyBtZW1vcnkgYmFycmllcnMgKHNtcF9sb2FkX2FjcXVpcmUgYW5kIHNtcF9zdG9yZV9yZWxlYXNlKSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgQ0RDIChDb25uZWN0aW9uIERhdGEgQ29udHJvbCkgcmVjZWl2ZSBoYW5kbGVycyBmcm9tIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycyAoc25kYnVmX2Rlc2MgYW5kIHJtYl9kZXNjKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgU01DIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB0aGUgbG9vcGJhY2sgSVNNIGRldmljZSAoU01DLUQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDowOS44NDAwMzIxMTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTY0NDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgwYWNkMjkzNTBkMWI4MzYyZjVlNWFmMzM5MWUzMWRmMDIyZmRhYWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTg6MDA6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY2RjLmMgYi9uZXQvc21jL3NtY19jZGMuY1xcbmluZGV4IDMyZDZkMDNkZjMyMTQ1Li5lYTYxYjFlNzVjNzJjZiAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19jZGMuY1xcbisrKyBiL25ldC9zbWMvc21jX2NkYy5jXFxuQEAgLTMzMiw4ICszMzIsMjAgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuIHtcXG4gXFx0dW5pb24gc21jX2hvc3RfY3Vyc29yIGNvbnNfb2xkLCBwcm9kX29sZDtcXG4gXFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXFx1MDAyNnNtYy1cXHUwMDNlY29ubjtcXG4rXFx0c3RydWN0IHNtY19idWZfZGVzYyAqc25kYnVmX2Rlc2M7XFxuIFxcdGludCBkaWZmX2NvbnMsIGRpZmZfcHJvZCwgZGlmZl90eDtcXG4gXFxuK1xcdC8qIEFjcXVpcmUgdGhlIHNlbmQgYnVmZmVyIG9uY2UsIHBhaXJpbmcgd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoKSBpblxcbitcXHQgKiBfX3NtY19idWZfY3JlYXRlKCkvc21jZF9idWZfYXR0YWNoKCkuICBPbiB0aGUgU01DLUQgRE1CLW5vY29weSBwYXRoXFxuK1xcdCAqIHRoZSBnaG9zdCBzbmRidWZfZGVzYyBpcyBhdHRhY2hlZCBvbmx5IGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHlcXG4rXFx0ICogcmVhY2hhYmxlIHRvIHRoZSBJU00gZGV2aWNlLCBzbyBpdCBjYW4gc3RpbGwgYmUgdW5zZXQgaGVyZTsgZXZlcnlcXG4rXFx0ICogc25kYnVmX2Rlc2MgY29uc3VtZXIgYmVsb3cgKHRoZSBub2NvcHkgYWNjb3VudGluZyBhbmQgdGhlIHNuZGJ1ZlxcbitcXHQgKiBjb25zdW1lciB0cmlnZ2VyLCB3aGljaCBkZXJlZmVyZW5jZXMgaXQgdmlhIHNtY190eF9wcmVwYXJlZF9zZW5kcygpKVxcbitcXHQgKiBpcyBza2lwcGVkIHdoaWxlIGl0IGlzIE5VTEwgdG8gYXZvaWQgYSBOVUxMIGRlcmVmIGFuZCBhIGxvYWQgb2YgYW5cXG4rXFx0ICogdW5pbml0aWFsaXNlZCBidWZmZXIuXFxuK1xcdCAqL1xcbitcXHRzbmRidWZfZGVzYyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmNvbm4tXFx1MDAzZXNuZGJ1Zl9kZXNjKTtcXG4rXFxuIFxcdHNtY19jdXJzX2NvcHkoXFx1MDAyNnByb2Rfb2xkLCBcXHUwMDI2Y29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kLCBjb25uKTtcXG4gXFx0c21jX2N1cnNfY29weShcXHUwMDI2Y29uc19vbGQsIFxcdTAwMjZjb25uLVxcdTAwM2Vsb2NhbF9yeF9jdHJsLmNvbnMsIGNvbm4pO1xcbiBcXHRzbWNfY2RjX21zZ190b19ob3N0KFxcdTAwMjZjb25uLVxcdTAwM2Vsb2NhbF9yeF9jdHJsLCBjZGMsIGNvbm4pO1xcbkBAIC0zNTEsMTQgKzM2MywxNyBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG4gXFxuIFxcdFxcdC8qIGlmIGxvY2FsIHNuZGJ1ZiBzaGFyZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiB3aXRoXFxuIFxcdFxcdCAqIHBlZXIgUk1CLCB0aGVuIHVwZGF0ZSB0eF9jdXJzX2ZpbiBhbmQgc25kYnVmX3NwYWNlXFxuLVxcdFxcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS5cXG4rXFx0XFx0ICogaGVyZSBzaW5jZSBwZWVyIGhhcyBhbHJlYWR5IGNvbnN1bWVkIHRoZSBkYXRhLiAgVGhlIGdob3N0XFxuK1xcdFxcdCAqIHNuZGJ1Zl9kZXNjIChhY3F1aXJlZCBhYm92ZSkgbWF5IHN0aWxsIGJlIHVuc2V0IGluIHRoZSBTTUMtRFxcbitcXHRcXHQgKiBETUItbm9jb3B5IHNldHVwIHdpbmRvdywgc28gc2tpcCB0aGUgdXBkYXRlIHdoaWxlIGl0IGlzIE5VTEwuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2Vpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY2QpKSB7XFxuK1xcdFxcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY2QpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBzbmRidWZfZGVzYykge1xcbiBcXHRcXHRcXHQvKiBDYWxjdWxhdGUgY29uc3VtZWQgZGF0YSBhbmRcXG4gXFx0XFx0XFx0ICogaW5jcmVtZW50IGZyZWUgc2VuZCBidWZmZXIgc3BhY2UuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRkaWZmX3R4ID0gc21jX2N1cnNfZGlmZihjb25uLVxcdTAwM2VzbmRidWZfZGVzYy1cXHUwMDNlbGVuLFxcbitcXHRcXHRcXHRkaWZmX3R4ID0gc21jX2N1cnNfZGlmZihzbmRidWZfZGVzYy1cXHUwMDNlbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y29ubi1cXHUwMDNldHhfY3Vyc19maW4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb25uLVxcdTAwM2Vsb2NhbF9yeF9jdHJsLmNvbnMpO1xcbiBcXHRcXHRcXHQvKiBpbmNyZWFzZSBsb2NhbCBzbmRidWYgc3BhY2UgYW5kIGZpbl9jdXJzICovXFxuQEAgLTM5MSwxMCArNDA2LDE1IEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxcbiBcXHRcXHRcXHRjb25uLVxcdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogdHJpZ2dlciBzbmRidWYgY29uc3VtZXI6IFJETUEgd3JpdGUgaW50byBwZWVyIFJNQkUgYW5kIENEQyAqL1xcbi1cXHRpZiAoKGRpZmZfY29ucyBcXHUwMDI2XFx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XFxuLVxcdCAgICBjb25uLVxcdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcXG4tXFx0ICAgIGNvbm4tXFx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSB7XFxuK1xcdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMuXFxuK1xcdCAqIHNtY190eF9wcmVwYXJlZF9zZW5kcygpIGFuZCBzbWNfdHhfcGVuZGluZygpIGRlcmVmZXJlbmNlIHNuZGJ1Zl9kZXNjLFxcbitcXHQgKiBzbyBza2lwIHRoZSB3aG9sZSB0cmlnZ2VyIHdoaWxlIGl0IGlzIHVuc2V0ICh0aGUgU01DLUQgRE1CLW5vY29weVxcbitcXHQgKiBzZXR1cCB3aW5kb3cpOiB0aGVyZSBpcyBub3RoaW5nIHRvIHNlbmQgd2l0aG91dCBhIHNlbmQgYnVmZmVyLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNuZGJ1Zl9kZXNjIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoKGRpZmZfY29ucyBcXHUwMDI2XFx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XFxuK1xcdCAgICAgY29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLmNvbnNfY3Vyc191cGRfcmVxIHx8XFxuK1xcdCAgICAgY29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLnVyZ19kYXRhX3BlbmRpbmcpKSB7XFxuIFxcdFxcdGlmICghc29ja19vd25lZF9ieV91c2VyKFxcdTAwMjZzbWMtXFx1MDAzZXNrKSlcXG4gXFx0XFx0XFx0c21jX3R4X3BlbmRpbmcoY29ubik7XFxuIFxcdFxcdGVsc2VcXG5AQCAtNDQzLDEzICs0NjMsMjEgQEAgc3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBmcm9tX3Rhc2tsZXQoY29ubiwgdCwgcnhfdHNrbGV0KTtcXG4gXFx0c3RydWN0IHNtY2RfY2RjX21zZyAqZGF0YV9jZGM7XFxuK1xcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnJtYl9kZXNjO1xcbiBcXHRzdHJ1Y3Qgc21jZF9jZGNfbXNnIGNkYztcXG4gXFx0c3RydWN0IHNtY19zb2NrICpzbWM7XFxuIFxcbiBcXHRpZiAoIWNvbm4gfHwgY29ubi1cXHUwMDNla2lsbGVkKVxcbiBcXHRcXHRyZXR1cm47XFxuK1xcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cXG4rXFx0ICogaXMgcHVibGlzaGVkIGJlZm9yZSBpdHMgUk1CIGlzIGFsbG9jYXRlZCwgc28gYmFpbCB3aGlsZSBybWJfZGVzYyBpc1xcbitcXHQgKiB1bnNldCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhbiB1bmluaXRpYWxpc2VkIGJ1ZmZlci5cXG4rXFx0ICovXFxuK1xcdHJtYl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Y29ubi1cXHUwMDNlcm1iX2Rlc2MpO1xcbitcXHRpZiAoIXJtYl9kZXNjKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopY29ubi1cXHUwMDNlcm1iX2Rlc2MtXFx1MDAzZWNwdV9hZGRyO1xcbitcXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopcm1iX2Rlc2MtXFx1MDAzZWNwdV9hZGRyO1xcbiBcXHRzbWNkX2N1cnNfY29weShcXHUwMDI2Y2RjLnByb2QsIFxcdTAwMjZkYXRhX2NkYy1cXHUwMDNlcHJvZCwgY29ubik7XFxuIFxcdHNtY2RfY3Vyc19jb3B5KFxcdTAwMjZjZGMuY29ucywgXFx1MDAyNmRhdGFfY2RjLVxcdTAwM2Vjb25zLCBjb25uKTtcXG4gXFx0c21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XFxuQEAgLTQ4Myw3ICs1MTEsMTEgQEAgc3RhdGljIHZvaWQgc21jX2NkY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcXG4gXFx0bGdyID0gc21jX2dldF9sZ3IobGluayk7XFxuIFxcdHJlYWRfbG9ja19iaChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19sb2NrKTtcXG4gXFx0Y29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy1cXHUwMDNldG9rZW4pLCBsZ3IpO1xcbi1cXHRpZiAoIWNvbm4gfHwgY29ubi1cXHUwMDNlb3V0X29mX3N5bmMpIHtcXG4rXFx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxcbitcXHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXFxuK1xcdCAqIE5VTEwgZGVyZWYgYW5kIGEgc3RhbGUtYnVmZmVyIHJlYWQgaW4gdGhlIGNvbm5lY3Rpb24gc2V0dXAgd2luZG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFjb25uIHx8IGNvbm4tXFx1MDAzZW91dF9vZl9zeW5jIHx8ICFzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZjb25uLVxcdTAwM2VybWJfZGVzYykpIHtcXG4gXFx0XFx0cmVhZF91bmxvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcXG5pbmRleCBjZjZiNjIwZmVmMDVmOS4uMDU2MWY4M2JlMzI3YjcgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXFxuKysrIGIvbmV0L3NtYy9zbWNfY29yZS5jXFxuQEAgLTI0OTksMTUgKzI0OTksMjYgQEAgc3RhdGljIGludCBfX3NtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QsIGJvb2wgaXNfcm1iKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoaXNfcm1iKSB7XFxuLVxcdFxcdGNvbm4tXFx1MDAzZXJtYl9kZXNjID0gYnVmX2Rlc2M7XFxuIFxcdFxcdGNvbm4tXFx1MDAzZXJtYmVfc2l6ZV9jb21wID0gYnVmc2l6ZV9jb21wO1xcbiBcXHRcXHRzbWMtXFx1MDAzZXNrLnNrX3JjdmJ1ZiA9IGJ1ZnNpemUgKiAyO1xcbiBcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZjb25uLVxcdTAwM2VieXRlc190b19yY3YsIDApO1xcbiBcXHRcXHRjb25uLVxcdTAwM2VybWJlX3VwZGF0ZV9saW1pdCA9XFxuIFxcdFxcdFxcdHNtY19ybWJfd25kX3VwZGF0ZV9saW1pdChidWZfZGVzYy1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0LyogUHVibGlzaCB0aGUgcmVjZWl2ZSBidWZmZXIgbGFzdCwgd2l0aCByZWxlYXNlIHNlbWFudGljczogdGhlXFxuK1xcdFxcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBpbiB0aGUgbGluayBncm91cCdzIHRva2VuIHRyZWUsIHNvIGFcXG4rXFx0XFx0ICogY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIG11c3Qgb2JzZXJ2ZSB0aGUgZnVsbHlcXG4rXFx0XFx0ICogaW5pdGlhbGlzZWQgcmVjZWl2ZSBzdGF0ZSBhYm92ZSAoYW5kIHRoZSBidWZmZXIpIG9uY2UgaXQgc2Vlc1xcbitcXHRcXHQgKiBhIG5vbi1OVUxMIHJtYl9kZXNjLiAgUGFpcnMgd2l0aCB0aGUgc21wX2xvYWRfYWNxdWlyZSgpIGluIHRoZVxcbitcXHRcXHQgKiBDREMgcmVjZWl2ZSBwYXRoLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmNvbm4tXFx1MDAzZXJtYl9kZXNjLCBidWZfZGVzYyk7XFxuIFxcdFxcdGlmIChpc19zbWNkKVxcbiBcXHRcXHRcXHRzbWNfaXNtX3NldF9jb25uKGNvbm4pOyAvKiBtYXAgUk1CL3NtY2RfZGV2IHRvIGNvbm4gKi9cXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogUGxhaW4gc3RvcmU6IHRoaXMgc2VuZC1idWZmZXIgcGFzcyBydW5zIGJlZm9yZSB0aGUgUk1CIHBhc3MsXFxuK1xcdFxcdCAqIHdob3NlIHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZjb25uLVxcdTAwM2VybWJfZGVzYykgdGhlbiBwdWJsaXNoZXMgdGhpc1xcbitcXHRcXHQgKiBzdG9yZSB0b28sIGFuZCB0aGUgQ0RDIHJlY2VpdmUgcGF0aCBpcyBnYXRlZCBvbiBybWJfZGVzYy5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdGNvbm4tXFx1MDAzZXNuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7XFxuIFxcdFxcdHNtYy1cXHUwMDNlc2suc2tfc25kYnVmID0gYnVmc2l6ZSAqIDI7XFxuIFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmNvbm4tXFx1MDAzZXNuZGJ1Zl9zcGFjZSwgYnVmc2l6ZSk7XFxuQEAgLTI1OTksOSArMjYxMCwxNiBAQCBpbnQgc21jZF9idWZfYXR0YWNoKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbiBcXHRidWZfZGVzYy1cXHUwMDNlY3B1X2FkZHIgPVxcbiBcXHRcXHQodTggKilidWZfZGVzYy1cXHUwMDNlY3B1X2FkZHIgKyBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XFxuIFxcdGJ1Zl9kZXNjLVxcdTAwM2VsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpO1xcbi1cXHRjb25uLVxcdTAwM2VzbmRidWZfZGVzYyA9IGJ1Zl9kZXNjO1xcbi1cXHRjb25uLVxcdTAwM2VzbmRidWZfZGVzYy1cXHUwMDNldXNlZCA9IDE7XFxuLVxcdGF0b21pY19zZXQoXFx1MDAyNmNvbm4tXFx1MDAzZXNuZGJ1Zl9zcGFjZSwgY29ubi1cXHUwMDNlc25kYnVmX2Rlc2MtXFx1MDAzZWxlbik7XFxuK1xcdGJ1Zl9kZXNjLVxcdTAwM2V1c2VkID0gMTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2Y29ubi1cXHUwMDNlc25kYnVmX3NwYWNlLCBidWZfZGVzYy1cXHUwMDNlbGVuKTtcXG4rXFx0LyogUHVibGlzaCB0aGUgZ2hvc3Qgc2VuZCBidWZmZXIgbGFzdCwgd2l0aCByZWxlYXNlIHNlbWFudGljczogdGhlXFxuK1xcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxcbitcXHQgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlXFxuK1xcdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcXG4rXFx0ICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpblxcbitcXHQgKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxcbitcXHQgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmNvbm4tXFx1MDAzZXNuZGJ1Zl9kZXNjLCBidWZfZGVzYyk7XFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZnJlZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDA6MTAuNDQyNjM5NTkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTgyMDc2NzY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIixcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfY2RjX21zZ19yZWN2X2FjdGlvblwiLFxuICAgIFwic21jZF9jZGNfcnhfdHNrbGV0XCIsXG4gICAgXCJzbWNfY2RjX3J4X2hhbmRsZXJcIixcbiAgICBcIl9fc21jX2J1Zl9jcmVhdGVcIixcbiAgICBcInNtY2RfYnVmX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGFkZHMgbWVtb3J5IGJhcnJpZXJzIChzbXBfbG9hZF9hY3F1aXJlIGFuZCBzbXBfc3RvcmVfcmVsZWFzZSkgdG8gcHJldmVudCBjb25jdXJyZW50IENEQyAoQ29ubmVjdGlvbiBEYXRhIENvbnRyb2wpIHJlY2VpdmUgaGFuZGxlcnMgZnJvbSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKHNuZGJ1Zl9kZXNjIGFuZCBybWJfZGVzYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFNNQyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGxvb3BiYWNrIElTTSBkZXZpY2UgKFNNQy1EKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MGFjZDI5MzUwZDFiODM2MmY1ZTVhZjMzOTFlMzFkZjAyMmZkYWFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMTg6MDA6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jZGMuYyBiL25ldC9zbWMvc21jX2NkYy5jXG5pbmRleCAzMmQ2ZDAzZGYzMjE0NS4uZWE2MWIxZTc1YzcyY2YgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jZGMuY1xuKysrIGIvbmV0L3NtYy9zbWNfY2RjLmNcbkBAIC0zMzIsOCArMzMyLDIwIEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxuIHtcbiBcdHVuaW9uIHNtY19ob3N0X2N1cnNvciBjb25zX29sZCwgcHJvZF9vbGQ7XG4gXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcdTAwMjZzbWMtXHUwMDNlY29ubjtcbitcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnNuZGJ1Zl9kZXNjO1xuIFx0aW50IGRpZmZfY29ucywgZGlmZl9wcm9kLCBkaWZmX3R4O1xuIFxuK1x0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG4rXHQgKiBfX3NtY19idWZfY3JlYXRlKCkvc21jZF9idWZfYXR0YWNoKCkuICBPbiB0aGUgU01DLUQgRE1CLW5vY29weSBwYXRoXG4rXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XG4rXHQgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeVxuK1x0ICogc25kYnVmX2Rlc2MgY29uc3VtZXIgYmVsb3cgKHRoZSBub2NvcHkgYWNjb3VudGluZyBhbmQgdGhlIHNuZGJ1ZlxuK1x0ICogY29uc3VtZXIgdHJpZ2dlciwgd2hpY2ggZGVyZWZlcmVuY2VzIGl0IHZpYSBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSlcbitcdCAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhblxuK1x0ICogdW5pbml0aWFsaXNlZCBidWZmZXIuXG4rXHQgKi9cbitcdHNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjKTtcbitcbiBcdHNtY19jdXJzX2NvcHkoXHUwMDI2cHJvZF9vbGQsIFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kLCBjb25uKTtcbiBcdHNtY19jdXJzX2NvcHkoXHUwMDI2Y29uc19vbGQsIFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zLCBjb25uKTtcbiBcdHNtY19jZGNfbXNnX3RvX2hvc3QoXHUwMDI2Y29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLCBjZGMsIGNvbm4pO1xuQEAgLTM1MSwxNCArMzYzLDE3IEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxuIFxuIFx0XHQvKiBpZiBsb2NhbCBzbmRidWYgc2hhcmVzIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gd2l0aFxuIFx0XHQgKiBwZWVyIFJNQiwgdGhlbiB1cGRhdGUgdHhfY3Vyc19maW4gYW5kIHNuZGJ1Zl9zcGFjZVxuLVx0XHQgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuXG4rXHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS4gIFRoZSBnaG9zdFxuK1x0XHQgKiBzbmRidWZfZGVzYyAoYWNxdWlyZWQgYWJvdmUpIG1heSBzdGlsbCBiZSB1bnNldCBpbiB0aGUgU01DLURcbitcdFx0ICogRE1CLW5vY29weSBzZXR1cCB3aW5kb3csIHNvIHNraXAgdGhlIHVwZGF0ZSB3aGlsZSBpdCBpcyBOVUxMLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGNvbm4tXHUwMDNlbGdyLVx1MDAzZWlzX3NtY2QgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVx1MDAzZWxnci1cdTAwM2VzbWNkKSkge1xuK1x0XHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBzbmRidWZfZGVzYykge1xuIFx0XHRcdC8qIENhbGN1bGF0ZSBjb25zdW1lZCBkYXRhIGFuZFxuIFx0XHRcdCAqIGluY3JlbWVudCBmcmVlIHNlbmQgYnVmZmVyIHNwYWNlLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MtXHUwMDNlbGVuLFxuK1x0XHRcdGRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKHNuZGJ1Zl9kZXNjLVx1MDAzZWxlbixcbiBcdFx0XHRcdFx0XHRcdTAwMjZjb25uLVx1MDAzZXR4X2N1cnNfZmluLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zKTtcbiBcdFx0XHQvKiBpbmNyZWFzZSBsb2NhbCBzbmRidWYgc3BhY2UgYW5kIGZpbl9jdXJzICovXG5AQCAtMzkxLDEwICs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXHRcdFx0Y29ubi1cdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDtcbiBcdH1cbiBcbi1cdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMgKi9cbi1cdGlmICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4tXHQgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbi1cdCAgICBjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSB7XG4rXHQvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDLlxuK1x0ICogc21jX3R4X3ByZXBhcmVkX3NlbmRzKCkgYW5kIHNtY190eF9wZW5kaW5nKCkgZGVyZWZlcmVuY2Ugc25kYnVmX2Rlc2MsXG4rXHQgKiBzbyBza2lwIHRoZSB3aG9sZSB0cmlnZ2VyIHdoaWxlIGl0IGlzIHVuc2V0ICh0aGUgU01DLUQgRE1CLW5vY29weVxuK1x0ICogc2V0dXAgd2luZG93KTogdGhlcmUgaXMgbm90aGluZyB0byBzZW5kIHdpdGhvdXQgYSBzZW5kIGJ1ZmZlci5cbitcdCAqL1xuK1x0aWYgKHNuZGJ1Zl9kZXNjIFx1MDAyNlx1MDAyNlxuK1x0ICAgICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4rXHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLmNvbnNfY3Vyc191cGRfcmVxIHx8XG4rXHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLnVyZ19kYXRhX3BlbmRpbmcpKSB7XG4gXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKFx1MDAyNnNtYy1cdTAwM2VzaykpXG4gXHRcdFx0c21jX3R4X3BlbmRpbmcoY29ubik7XG4gXHRcdGVsc2VcbkBAIC00NDMsMTMgKzQ2MywyMSBAQCBzdGF0aWMgdm9pZCBzbWNkX2NkY19yeF90c2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuIHtcbiBcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IGZyb21fdGFza2xldChjb25uLCB0LCByeF90c2tsZXQpO1xuIFx0c3RydWN0IHNtY2RfY2RjX21zZyAqZGF0YV9jZGM7XG4rXHRzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpybWJfZGVzYztcbiBcdHN0cnVjdCBzbWNkX2NkY19tc2cgY2RjO1xuIFx0c3RydWN0IHNtY19zb2NrICpzbWM7XG4gXG4gXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VraWxsZWQpXG4gXHRcdHJldHVybjtcbitcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cbitcdCAqIGlzIHB1Ymxpc2hlZCBiZWZvcmUgaXRzIFJNQiBpcyBhbGxvY2F0ZWQsIHNvIGJhaWwgd2hpbGUgcm1iX2Rlc2MgaXNcbitcdCAqIHVuc2V0IHRvIGF2b2lkIGEgTlVMTCBkZXJlZiBhbmQgYSBsb2FkIG9mIGFuIHVuaW5pdGlhbGlzZWQgYnVmZmVyLlxuK1x0ICovXG4rXHRybWJfZGVzYyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYyk7XG4rXHRpZiAoIXJtYl9kZXNjKVxuK1x0XHRyZXR1cm47XG4gXG4tXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopY29ubi1cdTAwM2VybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbitcdGRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKilybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbiBcdHNtY2RfY3Vyc19jb3B5KFx1MDAyNmNkYy5wcm9kLCBcdTAwMjZkYXRhX2NkYy1cdTAwM2Vwcm9kLCBjb25uKTtcbiBcdHNtY2RfY3Vyc19jb3B5KFx1MDAyNmNkYy5jb25zLCBcdTAwMjZkYXRhX2NkYy1cdTAwM2Vjb25zLCBjb25uKTtcbiBcdHNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xuQEAgLTQ4Myw3ICs1MTEsMTEgQEAgc3RhdGljIHZvaWQgc21jX2NkY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcbiBcdGxnciA9IHNtY19nZXRfbGdyKGxpbmspO1xuIFx0cmVhZF9sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbiBcdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXHUwMDNldG9rZW4pLCBsZ3IpO1xuLVx0aWYgKCFjb25uIHx8IGNvbm4tXHUwMDNlb3V0X29mX3N5bmMpIHtcbitcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcbitcdCAqIFJNQiBpcyB1bnNldCAoc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBkZXJlZmVyZW5jZXMgaXQpIHRvIGF2b2lkIGFcbitcdCAqIE5VTEwgZGVyZWYgYW5kIGEgc3RhbGUtYnVmZmVyIHJlYWQgaW4gdGhlIGNvbm5lY3Rpb24gc2V0dXAgd2luZG93LlxuK1x0ICovXG4rXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VvdXRfb2Zfc3luYyB8fCAhc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXJtYl9kZXNjKSkge1xuIFx0XHRyZWFkX3VubG9ja19iaChcdTAwMjZsZ3ItXHUwMDNlY29ubnNfbG9jayk7XG4gXHRcdHJldHVybjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IGNmNmI2MjBmZWYwNWY5Li4wNTYxZjgzYmUzMjdiNyAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuY1xuKysrIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5AQCAtMjQ5OSwxNSArMjQ5OSwyNiBAQCBzdGF0aWMgaW50IF9fc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCwgYm9vbCBpc19ybWIpXG4gXHR9XG4gXG4gXHRpZiAoaXNfcm1iKSB7XG4tXHRcdGNvbm4tXHUwMDNlcm1iX2Rlc2MgPSBidWZfZGVzYztcbiBcdFx0Y29ubi1cdTAwM2VybWJlX3NpemVfY29tcCA9IGJ1ZnNpemVfY29tcDtcbiBcdFx0c21jLVx1MDAzZXNrLnNrX3JjdmJ1ZiA9IGJ1ZnNpemUgKiAyO1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlYnl0ZXNfdG9fcmN2LCAwKTtcbiBcdFx0Y29ubi1cdTAwM2VybWJlX3VwZGF0ZV9saW1pdCA9XG4gXHRcdFx0c21jX3JtYl93bmRfdXBkYXRlX2xpbWl0KGJ1Zl9kZXNjLVx1MDAzZWxlbik7XG4rXHRcdC8qIFB1Ymxpc2ggdGhlIHJlY2VpdmUgYnVmZmVyIGxhc3QsIHdpdGggcmVsZWFzZSBzZW1hbnRpY3M6IHRoZVxuK1x0XHQgKiBjb25uZWN0aW9uIGlzIGFscmVhZHkgaW4gdGhlIGxpbmsgZ3JvdXAncyB0b2tlbiB0cmVlLCBzbyBhXG4rXHRcdCAqIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBtdXN0IG9ic2VydmUgdGhlIGZ1bGx5XG4rXHRcdCAqIGluaXRpYWxpc2VkIHJlY2VpdmUgc3RhdGUgYWJvdmUgKGFuZCB0aGUgYnVmZmVyKSBvbmNlIGl0IHNlZXNcbitcdFx0ICogYSBub24tTlVMTCBybWJfZGVzYy4gIFBhaXJzIHdpdGggdGhlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0aGVcbitcdFx0ICogQ0RDIHJlY2VpdmUgcGF0aC5cbitcdFx0ICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MsIGJ1Zl9kZXNjKTtcbiBcdFx0aWYgKGlzX3NtY2QpXG4gXHRcdFx0c21jX2lzbV9zZXRfY29ubihjb25uKTsgLyogbWFwIFJNQi9zbWNkX2RldiB0byBjb25uICovXG4gXHR9IGVsc2Uge1xuK1x0XHQvKiBQbGFpbiBzdG9yZTogdGhpcyBzZW5kLWJ1ZmZlciBwYXNzIHJ1bnMgYmVmb3JlIHRoZSBSTUIgcGFzcyxcbitcdFx0ICogd2hvc2Ugc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYykgdGhlbiBwdWJsaXNoZXMgdGhpc1xuK1x0XHQgKiBzdG9yZSB0b28sIGFuZCB0aGUgQ0RDIHJlY2VpdmUgcGF0aCBpcyBnYXRlZCBvbiBybWJfZGVzYy5cbitcdFx0ICovXG4gXHRcdGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MgPSBidWZfZGVzYztcbiBcdFx0c21jLVx1MDAzZXNrLnNrX3NuZGJ1ZiA9IGJ1ZnNpemUgKiAyO1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlc25kYnVmX3NwYWNlLCBidWZzaXplKTtcbkBAIC0yNTk5LDkgKzI2MTAsMTYgQEAgaW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiBcdGJ1Zl9kZXNjLVx1MDAzZWNwdV9hZGRyID1cbiBcdFx0KHU4ICopYnVmX2Rlc2MtXHUwMDNlY3B1X2FkZHIgKyBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XG4gXHRidWZfZGVzYy1cdTAwM2VsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpO1xuLVx0Y29ubi1cdTAwM2VzbmRidWZfZGVzYyA9IGJ1Zl9kZXNjO1xuLVx0Y29ubi1cdTAwM2VzbmRidWZfZGVzYy1cdTAwM2V1c2VkID0gMTtcbi1cdGF0b21pY19zZXQoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfc3BhY2UsIGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MtXHUwMDNlbGVuKTtcbitcdGJ1Zl9kZXNjLVx1MDAzZXVzZWQgPSAxO1xuK1x0YXRvbWljX3NldChcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9zcGFjZSwgYnVmX2Rlc2MtXHUwMDNlbGVuKTtcbitcdC8qIFB1Ymxpc2ggdGhlIGdob3N0IHNlbmQgYnVmZmVyIGxhc3QsIHdpdGggcmVsZWFzZSBzZW1hbnRpY3M6IHRoZVxuK1x0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSAoc21jX2lzbV9zZXRfY29ubigpXG4rXHQgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlXG4rXHQgKiB0aGUgZnVsbHkgaW5pdGlhbGlzZWQgZ2hvc3QgYnVmZmVyIG9uY2UgaXQgc2VlcyBhIG5vbi1OVUxMXG4rXHQgKiBzbmRidWZfZGVzYy4gIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluXG4rXHQgKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxuK1x0ICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLCBidWZfZGVzYyk7XG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDA6MTAuNDQyNjQxNjMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1MTU0OTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBTeW5jaHJvbml6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCB0b3VjaGluZyBgbmV0L3NtYy9zbWNfY2RjLmNgIGFuZCBgbmV0L3NtYy9zbWNfY29yZS5jYC4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgc2xhcHBpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGFuZCBgc21wX3N0b3JlX3JlbGVhc2VgIG9udG8gdGhlIGBzbmRidWZfZGVzY2AgYW5kIGBybWJfZGVzY2AgcG9pbnRlcnMgd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYC4gUmlnaHQsIGEgc3luY2hyb25pemF0aW9uIGZpeCBmb3IgU01DIHNvY2tldHMuIFRoaXMgaXMgYSBjbGFzc2ljIOKAkyBwcmV2ZW50aW5nIHRob3NlIG5hc3R5IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIHRoYXQgcG9wIHVwIHdoZW4gYSBDREMgcmVjZWl2ZSBoYW5kbGVyIGdldHMgdG9vIGVhZ2VyIGFuZCB0cmllcyB0byBhY2Nlc3MgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIGV2ZXJ5dGhpbmcncyBwcm9wZXJseSBzZXQgdXAuXG5cblRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gbm93LCBhcyBhbHdheXMsIGlzIHRlc3RhYmlsaXR5LiBUaGlzIHR5cGUgb2YgY29uY3VycmVuY3kgaXNzdWUgY2FuIGJlIHRyaWNreSB0byB0cmlnZ2VyIHJlbGlhYmx5LiBDYW4gSSBldmVuIHJlcHJvZHVjZSB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFNNQyBoYXMgdGhvc2UgdHdvIGZsYXZvcnM6IFNNQy1SIChSRE1BLCByaWdodD8pIGFuZCBTTUMtRCAoSW50ZXJuYWwgU2hhcmVkIE1lbW9yeSkuIEFuZCBTTUMtRCBjYW4gbGV2ZXJhZ2UgdGhhdCBjb252ZW5pZW50IGxvb3BiYWNrIElTTSBkZXZpY2UsIHRoZSBgc21jX2xvb3BiYWNrYC4gVGhhdCdzIHRoZSBrZXkhIElmIEkgY2FuIGdldCB0aGF0IGBzbWNfbG9vcGJhY2tgIGdvaW5nIGluIFFFTVUgb3IgR0NFLCBJIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcywgZ2l2ZW4gdGhlIHJpZ2h0IHdvcmtsb2FkLlxuXG5Ob3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gd29ya2luZyB3aXRoIHRoZSByaWdodCBjb25maWdzLiBPYnZpb3VzbHksIGBDT05GSUdfU01DYCBoYXMgdG8gYmUgZW5hYmxlZC4gSSBtaWdodCB3YW50IGBDT05GSUdfU01DX0RJQUdgIGZvciBkZWJ1Z2dpbmcuIEJ1dCBmb3IgdGVzdGluZyB0aGUgbG9vcGJhY2ssIEknbGwgKmRlZmluaXRlbHkqIG5lZWQgYENPTkZJR19TTUNfTE9gLiBMZXQncyBnZXQgYSBxdWljayBncmVwIGdvaW5nIHRvIGNoZWNrIG9uIHRob3NlIFNNQyBjb25maWdzIGFuZCBtYWtlIHN1cmUgSSdtIHN0YXJ0aW5nIGZyb20gYSBjbGVhbiBzbGF0ZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggb25lcyBhcmUgZW5hYmxlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjE3LjA5NDE5Mzc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MDg3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDA6MTcuMTkzMzAyMTM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NDc3NzMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgU3RyYXRlZ3k6IEludmVzdGlnYXRpbmcgTG93LUxldmVsIENvbnRyb2wqKlxuXG5BbHJpZ2h0LCB0aGUgcHJvYmxlbSdzIHByZXNlbnRpbmcgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBhIHBvdGVudGlhbCBpc3N1ZSBhdCB0aGUgbG93ZXIgbGV2ZWxzIG9mIGNvbnRyb2wuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIFNlcmlhbCBNb3RvciBDb250cm9sbGVyJ3MgbG93LWxldmVsIGNvbnRyb2wsIHRoZSByZWdpc3RlcnMgYW5kIHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgY29udHJvbC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIHN5c3RlbXMsIGBTTUNfTE9gIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgdGhhdCBhcmUgY2F1c2luZyB0aGUgcHJvYmxlbSByZXNpZGUsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3aGVyZSBJIGNhbiBzZWUgdGhlIGVmZmVjdHMgb2YgYSBsb3dlci1sZXZlbCBpc3N1ZSwgc3VjaCBhcyByZWdpc3RlciB2YWx1ZXMuIEkgd2FudCB0byBpbnNwZWN0IHRoaW5ncyB0aGF0IGFyZSBjbG9zZWx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgbG9vcHMgb3IgdGhlIHNpZ25hbCBwYXRoIG9mIHRoZSBtb3RvciBjb250cm9sbGVyLiBUaGlzIGlzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgY2x1ZXMgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIG1vdG9yLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBsb29raW5nIGZvciBhbnl0aGluZyBpbiB0aGUgYFNNQ19MT2AgYXJlYSwgb3Igd2l0aGluIGFueSBhbHRlcm5hdGl2ZSBzeXN0ZW1zLCB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjIwLjQ1ODA4MTYzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyNDc0NjMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNfTE9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDoyMC41NzMzMzgwOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODIyMTcxODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTTUMgTG9vcGJhY2sgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgU01DIGxvb3BiYWNrIGlzc3VlLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSBwcm9ibGVtIGxpa2VseSBsaWVzIHdpdGhpbiB0aGUgYG5ldC9zbWMvYCBkaXJlY3Rvcnkg4oCTIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBJdCdzIHRoZSBjb3JlIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb25zIChTTUMpIGltcGxlbWVudGF0aW9uIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBzbyB0aGUgbG9vcGJhY2sgZnVuY3Rpb25hbGl0eSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgaGFuZGxlZCB0aGVyZS4gTm93LCB0aGUga2V5IGtleXdvcmRzIHRvIGxvb2sgZm9yIGFyZSBgc21jX2xvb3BiYWNrYCBvciBwZXJoYXBzIGp1c3QgYFNNQ19MT2AuIEknbSBsZWFuaW5nIHRvd2FyZCB0aGVzZSBiZWNhdXNlIGBzbWNfbG9vcGJhY2tgIHNlZW1zIHRoZSBtb3N0IGV4cGxpY2l0LCBidXQgYFNNQ19MT2AgaXMgYSBjb21tb24gYWJicmV2aWF0aW9uIGNvbnZlbnRpb24gaW4ga2VybmVsIGNvZGUsIHNvIGl0J3MgYSB3b3J0aHdoaWxlIGFsdGVybmF0aXZlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzLCBsaWtlbHkgYGdyZXBgIG9yIGEgc2ltaWxhciB1dGlsaXR5LCB0byBlZmZpY2llbnRseSBuYXZpZ2F0ZSB0aGUgc291cmNlIHRyZWUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIG5hbWVzLCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIG9yIGFueSBjb21tZW50cyB0aGF0IHNwZWNpZmljYWxseSBtZW50aW9uIGxvb3BiYWNrLCBhbmQgaG9wZWZ1bGx5IGZpbmQgdGhlIHBpZWNlcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIGxvY2FsIGNvbW11bmljYXRpb24gcGF0aCB3aGVuIHRoZSB1c2VyIGludGVuZHMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgc2FtZSBob3N0LiBUaGlzIGNvdWxkIGludm9sdmUgZGlyZWN0IG1lbW9yeSBhY2Nlc3MsIHNoYXJlZCBtZW1vcnkgcmVnaW9ucywgb3IgYSBzcGVjaWFsIG5ldHdvcmsgZGV2aWNlIGFic3RyYWN0aW9uLiBJJ20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgYHN0cnVjdGAgb3IgYGNsYXNzYCB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoZSBsb29wYmFjaydzIHByb3BlcnRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzODMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDoyNC4zOTU1MTI2MTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3MTg5NTUxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfbG9vcGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjI0LjcyMjcwODY3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4Njc2NTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqTG9va2luZyBmb3IgdGhlIFJpZ2h0IENvbnRleHQqKlxuXG5IbW0sIHdoZXJlIGRpZCBJIGxhc3Qgc2VlIHRoYXQgYHNtY19sb29wYmFja2AgZnVuY3Rpb24gbWVudGlvbmVkPyBJIGZlZWwgbGlrZSBpdCBjb3VsZCBiZSBpbiBvbmUgb2YgdGhlIG5ldHdvcmtpbmcgZGlyZWN0b3JpZXMsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBlaXRoZXIgYGRyaXZlcnMvczM5MC9uZXQvYCBvciBtYXliZSBqdXN0IHRoZSBnZW5lcmFsIGBkcml2ZXJzL25ldC9gIHBhdGguIExldCdzIHN0YXJ0IHdpdGggdGhvc2UuIEFuZCB3aGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weWAgZnVuY3Rpb24gdG9vLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBlY29zeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDoyNy41MDk0NzYwNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4OTU3MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MTQxNj1zdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTQ2NC1cXG5uZXQvc21jL2FmX3NtYy5jOjE0NjU6XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXNtY2QpKSB7XFxubmV0L3NtYy9hZl9zbWMuYy0xNDY2LVxcdFxcdHJjID0gc21jZF9idWZfYXR0YWNoKHNtYyk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTI0NDk9c3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjU3Mi1cXHRpZiAoaW5pLVxcdTAwM2Vpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9hZl9zbWMuYzoyNTczOlxcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShuZXdfc21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlc21jZCkpIHtcXG5uZXQvc21jL2FmX3NtYy5jLTI1NzQtXFx0XFx0cmMgPSBzbWNkX2J1Zl9hdHRhY2gobmV3X3NtYyk7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz0yMzc9aW50IHNtY2RfY2RjX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTI1OS1cXG5uZXQvc21jL3NtY19jZGMuYzoyNjA6XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXFx1MDAzZWxnci1cXHUwMDNlc21jZCkpXFxubmV0L3NtYy9zbWNfY2RjLmMtMjYxLVxcdFxcdC8qIGlmIGxvY2FsIHNuZGJ1ZiBzaGFyZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiB3aXRoXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy0zNzAtXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWxnci1cXHUwMDNlaXNfc21jZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2NkYy5jOjM3MTpcXHRcXHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2NkYy5jLTM3Mi1cXHRcXHQgICAgc25kYnVmX2Rlc2MpIHtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjUzPXZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3Mi1cXHRcXHRcXHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNzM6XFx0XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGxnci1cXHUwMDNlc21jZCkpXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNzQtXFx0XFx0XFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE1MTU9c3RhdGljIHZvaWQgc21jX2Nvbm5fa2lsbChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sIGJvb2wgc29mdClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xNTI3LVxcdFxcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTUyODpcXHRcXHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSlcXG5uZXQvc21jL3NtY19jb3JlLmMtMTUyOS1cXHRcXHRcXHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjU2MT1pbnQgc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY2LVxcdGlmIChpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9zbWNfY29yZS5jOjI1Njc6XFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXNtY2QpKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY4LVxcdFxcdGdvdG8gY3JlYXRlX3JtYjtcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jPTIzNT1pbnQgc21jX2lzbV9yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGludCBkbWJfbGVuLFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjU5LVxcbm5ldC9zbWMvc21jX2lzbS5jOjI2MDpib29sIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHN0cnVjdCBzbWNkX2RldiAqc21jZClcXG5uZXQvc21jL3NtY19pc20uYy0yNjEte1xcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmg9NTE9dm9pZCBzbWNfaXNtX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LFxcbm5ldC9zbWMvc21jX2lzbS5oLTUyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYyk7XFxubmV0L3NtYy9zbWNfaXNtLmg6NTM6Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpO1xcbm5ldC9zbWMvc21jX2lzbS5oLTU0LWludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDA6MjcuNjA4NDM3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA2NDMxODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaXNzZWN0IHdoYXQgdGhpcyBgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHlgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRvaW5nLiBUaGUgbmFtZSBpdHNlbGYgaXMgYSBjbHVlLCBzbyBsZXQncyBicmVhayBpdCBkb3duLiBcIlNNQ1wiIGxpa2VseSBpbmRpY2F0ZXMgU2VjdXJlIE1vbml0b3IgQ2FsbCBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBzZWN1cmUgY29tbXVuaWNhdGlvbi4gXCJJU01cIiBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGFuIEluc3RydWN0aW9uIFNldCBNbmVtb25pYy4gXCJTdXBwb3J0XCIgaXMgc2VsZiBleHBsYW5hdG9yeSBhbmQgXCJkbWJfbm9jb3B5XCIgc2VlbXMgdGhlIG1vc3QgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQuIFwiZG1iXCIgaXMgYSBsaWtlbHkgcmVmZXJlbmNlIHRvIGEgRGF0YSBNZW1vcnkgQmFycmllciBhbmQgXCJub2NvcHlcIiBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSBtZW1vcnkgaXNuJ3QgZHVwbGljYXRlZCBvciBjb3BpZWQuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGludm9sdmVzIHNvbWUga2luZCBvZiBtZWNoYW5pc20gZm9yIHNlY3VyZSBtZW1vcnkgYWNjZXNzLCBwcm9iYWJseSB1c2luZyBhIGRhdGEgbWVtb3J5IGJhcnJpZXIsIGFuZCBpdCdzIGRvaW5nIHNvIHdpdGhvdXQgY29weWluZyB0aGUgYWN0dWFsIGRhdGEuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHNlbnNpdGl2ZSBtZW1vcnkgcmVnaW9ucywgcGVyaGFwcyBzaGFyZWQgYmV0d2VlbiBzZWN1cmUgYW5kIG5vbi1zZWN1cmUgd29ybGRzLCBvciB3aXRoaW4gYSBzZWN1cml0eSBjb250ZXh0IGl0c2VsZiwgd2hlcmUgZGF0YSBpbnRlZ3JpdHkgYW5kIGFjY2VzcyBjb250cm9sIGFyZSBjcml0aWNhbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgdXNlLWNhc2U/IFdoYXQgYXJjaGl0ZWN0dXJlIGlzIHRoaXMgdGFyZ2V0aW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIFRydXN0Wm9uZSBzeXN0ZW0sIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBcIm5vY29weVwiIGFzcGVjdCByZWFsbHkgcGlxdWVzIG15IGludGVyZXN0OyB0aGF0J3MgZ2VuZXJhbGx5IGRvbmUgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGNvcHlpbmcuIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyB0aGUgYmFycmllciBpcyBlbXBsb3llZCBhbmQgd2hhdCBraW5kIG9mIG1lbW9yeSBhY2Nlc3MgcHJvdGVjdGlvbiBpdCdzIHByb3ZpZGluZy4gSXMgdGhpcyBzaW1wbHkgYWJvdXQgY2FjaGUgY29oZXJlbmN5PyBPciBpcyB0aGVyZSBzb21ldGhpbmcgbW9yZSBudWFuY2VkIGdvaW5nIG9uPyBJIHNob3VsZCBhbnRpY2lwYXRlIGl0IGJlaW5nIHJlbGF0ZWQgdG8gc29tZSBzeXN0ZW0tbGV2ZWwgc2VjdXJpdHkgYXJjaGl0ZWN0dXJlLCBsaWtlbHkgYSBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgaXNvbGF0aW9uIG9yIGNvbnRyb2wgc2NoZW1lLiBMZXQncyBzZWUgaG93IEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxMywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjMxLjgxNDg3MTU2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNzU4NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfaXNtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfaXNtLmM9MjM1PWludCBzbWNfaXNtX3JlZ2lzdGVyX2RtYihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgaW50IGRtYl9sZW4sXFxuLS1cXG5uZXQvc21jL3NtY19pc20uYy0yNTktXFxubmV0L3NtYy9zbWNfaXNtLmM6MjYwOmJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxcbm5ldC9zbWMvc21jX2lzbS5jLTI2MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjMxLjkyNTYzNjUxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzc4OTg4MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHlgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9zbWMvc21jX2lzbS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weWAuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgc29tZSBmb3JtIG9mIG1lbW9yeSBiYXJyaWVyIG9wZXJhdGlvbiByZWxhdGVkIHRvIGRhdGEgbW92ZW1lbnQgd2l0aGluIHRoZSBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zIG92ZXIgUkRNQSAoU01DLVIpIElTTSAoSW5maW5pQmFuZCBTaGFyZWQgTWVtb3J5KSBjb250ZXh0LCBhbmQgdGhlIFwibm9jb3B5XCIgc3VmZml4IGhpbnRzIGl0J3MgcmVsYXRlZCB0byBoYW5kbGluZyBtZW1vcnkgcmVnaW9ucyB0aGF0IGRvbid0IG5lZWQgdG8gYmUgZXhwbGljaXRseSBjb3BpZWQuXG5cbkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGhvdyB0aGlzIHN1cHBvcnRzIG9yIGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBTTUMtUiBJU00gZGF0YSBwYXRoLiBJcyB0aGlzIHBhcnQgb2YgdGhlIGluaXRpYWwgc2V0dXAsIHRoZSBkYXRhIHRyYW5zZmVyIGl0c2VsZiwgb3IgcGVyaGFwcyBhIGNsZWFuLXVwIHBoYXNlPyBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgbWVtb3J5IGJhcnJpZXIgaXQncyB1c2luZy4gQSBETUIgKERhdGEgTWVtb3J5IEJhcnJpZXIpIGlzIGEgZmFpcmx5IGJyb2FkIHRlcm0sIGJ1dCBpbiB0aGlzIGNvbnRleHQsIEkgc3VzcGVjdCBpdCBsaWtlbHkgaW52b2x2ZXMgZWl0aGVyIGVuc3VyaW5nIGRhdGEgaXMgd3JpdHRlbiB0byB0aGUgc2hhcmVkIG1lbW9yeSBiZWZvcmUgYmVpbmcgYWNjZXNzZWQgYnkgdGhlIHBlZXIsIG9yIG1ha2luZyBzdXJlIHRoZSBjdXJyZW50IHByb2Nlc3Mgc2VlcyB0aGUgZGF0YS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGNvbnRleHQgdGhhdCBiYXJyaWVyIGlzIG9wZXJhdGluZyBpbiB0byBiZSBzdXJlLiBBbnkgc3VidGxldGllcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gd291bGQgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nOiBhcmUgdGhleSByZWx5aW5nIG9uIGhhcmR3YXJlIGNhY2hlIGNvaGVyZW5jeSwgb3IgaXMgdGhlcmUgYSBtb3JlIHNvZnR3YXJlLWNlbnRyaWMgYXBwcm9hY2g/IFdoYXQgaW1wYWN0IGRvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIG9uIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb2YgdGhlIElTTSBzdWJzeXN0ZW0/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgYnkgZGlmZmVyZW50IHByb2Nlc3NlcyB3aXRoaW4gdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyB0byBzZWUgaWYgaXQgaXMgdXNlZCB0byBndWFyYW50ZWUgb3JkZXIgYmV0d2VlbiByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zLiBUaGUgXCJub2NvcHlcIiBhc3BlY3QgcmVhbGx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbXVzdCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgZWZmaWNpZW5jeSBhbmQgaG93IHRoZXkncmUgb3B0aW1pemluZyBkYXRhIG1vdmVtZW50IGluIHRoaXMgY3JpdGljYWwgcGF0aC4gVGltZSB0byBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDozNi43MDQ2MjY2MjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfaXNtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU1OlxcdFxcdFxcdGRtYl9kZXNjLVxcdTAwM2VsZW4gPSBkbWIuZG1iX2xlbjtcXG4gMjU2OlxcdFxcdH1cXG4gMjU3OlxcdFxcdHJldHVybiByYztcXG4gMjU4OlxcdH1cXG4gMjU5OlxcdFxcbiAyNjA6XFx0Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpXFxuIDI2MTpcXHR7XFxuIDI2MjpcXHRcXHQvKiBmb3Igbm93IG9ubHkgbG9vcGJhY2staXNtIHN1cHBvcnRzXFxuIDI2MzpcXHRcXHQgKiBtZXJnaW5nIHNuZGJ1ZiB3aXRoIHBlZXIgRE1CIHRvIGF2b2lkXFxuIDI2NDpcXHRcXHQgKiBkYXRhIGNvcGllcyBiZXR3ZWVuIHRoZW0uXFxuIDI2NTpcXHRcXHQgKi9cXG4gMjY2OlxcdFxcdHJldHVybiAoc21jZC1cXHUwMDNlZGlicy1cXHUwMDNlb3BzLVxcdTAwM2VzdXBwb3J0X21tYXBwZWRfcmRtYiBcXHUwMDI2XFx1MDAyNlxcbiAyNjc6XFx0XFx0XFx0c21jZC1cXHUwMDNlZGlicy1cXHUwMDNlb3BzLVxcdTAwM2VzdXBwb3J0X21tYXBwZWRfcmRtYihzbWNkLVxcdTAwM2VkaWJzKSk7XFxuIDI2ODpcXHR9XFxuIDI2OTpcXHRcXG4gMjcwOlxcdGludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcXG4gMjcxOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYylcXG4gMjcyOlxcdHtcXG4gMjczOlxcdFxcdHN0cnVjdCBkaWJzX2RtYiBkbWI7XFxuIDI3NDpcXHRcXHRpbnQgcmMgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDozNi43MDQ3MTY4NjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNjMwNjg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTTUMgTWVyZ2UgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gdGhlIGNsdWUgaXMgXCJsb29wYmFjay1pc20gc3VwcG9ydHMgbWVyZ2luZyBzbmRidWYgd2l0aCBwZWVyIERNQlwiIOKAkyB0aGF0J3MgdGhlIGtleS4gVGhhdCB0ZWxscyBtZSB0aGUgbWVyZ2luZyBvZiB0aGUgc2VuZCBidWZmZXIgd2l0aCB0aGUgcGVlcidzIERpcmVjdCBNZW1vcnkgQnVmZmVyIChETUIpIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGluIHRoZSBsb29wYmFjayBJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIE1ldGhvZCAoSVNNKSB2YXJpYW50LiBFeGNlbGxlbnQuIFRoYXQgbmFycm93cyBkb3duIG15IGZvY3VzIGNvbnNpZGVyYWJseS4gVGhlIGltcGxpY2F0aW9uIGlzLCBpZiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGlzIG1lcmdlIGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byBmb2N1cyBvbiBob3cgaXQncyBkb25lIGluIHRoZSBsb29wYmFjayBjYXNlLlxuXG5Ob3csIHdoZXJlJ3MgdGhlIGNvZGU/IExldCdzIGFzc3VtZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBpbiBhIGBuZXQvc21jYCBkaXJlY3Rvcnkgc29tZXdoZXJlLCBhbmQgZ2l2ZW4gdGhlIGxvb3BiYWNrIGZvY3VzLCBJJ2xsIGJldCBpdCdzIGNhbGxlZCBzb21ldGhpbmcgbGlrZSBgc21jX2xvb3BiYWNrLmNgLiBPciBtYXliZSBgc21jX2lzbV9sb29wYmFjay5jYD8gRWl0aGVyIHdheSwgSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGF0IHBhdGggZm9yIHRoZSBkZXRhaWxzIG9mIHRoYXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIE15IGltbWVkaWF0ZSB0YXNrOiBmaW5kIHRoYXQgc291cmNlIGNvZGUgYW5kIGRpc3NlY3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjQwLjQzMTAyNTMxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5MDk3MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfaXNtLmM9MjYwPWJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxcbm5ldC9zbWMvc21jX2lzbS5jLTI2MS17XFxubmV0L3NtYy9zbWNfaXNtLmM6MjYyOlxcdC8qIGZvciBub3cgb25seSBsb29wYmFjay1pc20gc3VwcG9ydHNcXG5uZXQvc21jL3NtY19pc20uYy0yNjMtXFx0ICogbWVyZ2luZyBzbmRidWYgd2l0aCBwZWVyIERNQiB0byBhdm9pZFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmM9MzY1PXN0YXRpYyB2b2lkIHNtY19ubF9wcmVwX3NtY2RfZGV2KHN0cnVjdCBzbWNkX2Rldl9saXN0ICpkZXZfbGlzdCxcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jLTM3Ny1cXHRcXHRcXHRnb3RvIG5leHQ7XFxubmV0L3NtYy9zbWNfaXNtLmM6Mzc4OlxcdFxcdGlmIChzbWNfaXNtX2lzX2xvb3BiYWNrKHNtY2QtXFx1MDAzZWRpYnMpKVxcbm5ldC9zbWMvc21jX2lzbS5jLTM3OS1cXHRcXHRcXHRnb3RvIG5leHQ7XFxuLS1cXG5uZXQvc21jL3NtY19pc20uYz00OTE9c3RhdGljIHZvaWQgc21jZF9yZWdpc3Rlcl9kZXYoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtNTA3LVxcbm5ldC9zbWMvc21jX2lzbS5jOjUwODpcXHRpZiAoc21jX2lzbV9pc19sb29wYmFjayhkaWJzKSB8fFxcbm5ldC9zbWMvc21jX2lzbS5jLTUwOS1cXHQgICAgKGRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlYWRkX3ZsYW5faWQgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jLTUxNi1cXHQgKiAtIGRldmljZXMgd2l0aG91dCBwbmV0aWQgYmVmb3JlIGRldmljZXMgd2l0aCBwbmV0aWQ7XFxubmV0L3NtYy9zbWNfaXNtLmM6NTE3OlxcdCAqIC0gbG9vcGJhY2staXNtIGFsd2F5cyBhdCB0aGUgdmVyeSBiZWdpbm5pbmc7XFxubmV0L3NtYy9zbWNfaXNtLmMtNTE4LVxcdCAqL1xcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtNTIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY2RfZGV2LCBsaXN0KTtcXG5uZXQvc21jL3NtY19pc20uYzo1MjI6XFx0XFx0aWYgKGZlbnRyeSBcXHUwMDI2XFx1MDAyNiBzbWNfaXNtX2lzX2xvb3BiYWNrKGZlbnRyeS1cXHUwMDNlZGlicykpXFxubmV0L3NtYy9zbWNfaXNtLmMtNTIzLVxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZzbWNkLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZmVudHJ5LVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5oPTc4PXN0YXRpYyBpbmxpbmUgYm9vbCBfX3NtY19pc21faXNfZW11bGF0ZWQodTE2IGNoaWQpXFxuLS1cXG5uZXQvc21jL3NtY19pc20uaC04Mi1cXHQgKlxcbm5ldC9zbWMvc21jX2lzbS5oOjgzOlxcdCAqIGxvb3BiYWNrLWlzbTpcXHQweEZGRkZcXG5uZXQvc21jL3NtY19pc20uaC04NC1cXHQgKiB2aXJ0aW8taXNtOlxcdFxcdDB4RkYwMCB+IDB4RkZGRVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmg9ODk9c3RhdGljIGlubGluZSBib29sIHNtY19pc21faXNfZW11bGF0ZWQoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmgtOTUtXFxubmV0L3NtYy9zbWNfaXNtLmg6OTY6c3RhdGljIGlubGluZSBib29sIHNtY19pc21faXNfbG9vcGJhY2soc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxcbm5ldC9zbWMvc21jX2lzbS5oLTk3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDA6NDAuNTIzOTM5OTI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzA3NjcyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgS2VybmVsIExvb3BiYWNrIEltcGxlbWVudGF0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBsb29wYmFjayBmdW5jdGlvbmFsaXR5IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gYmUgcHJlY2lzZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSB2ZXJ5IHRhcmdldGVkIHNlYXJjaC4gSSdsbCBmb2N1cyBvbiBlaXRoZXIgdGhlIHBvdGVudGlhbGx5IG1vcmUgZ2VuZXJpYyB0ZXJtLCBgbG9vcGJhY2staXNtYCwgb3IsIGlmIHRoYXQncyB0b28gYnJvYWQsIEknbGwgZ28gZm9yIHRoZSBtb3JlIGxpa2VseSBzcGVjaWZpYywgYHNtY19sb29wYmFja2AuIFRoaXMgc2hvdWxkIGFsbG93IG1lIHRvIGhvbmUgaW4gb24gdGhlIGNvcmUgY29kZSByZXNwb25zaWJsZS4gS25vd2luZyB0aGUgZXhhY3QgbmFtaW5nIGNvbnZlbnRpb24gd2lsbCBzaWduaWZpY2FudGx5IGltcHJvdmUgdGhlIGVmZmljaWVuY3kgb2YgdGhpcyBzZWFyY2guIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBhcHByb2FjaCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZXhpc3Rpbmcga2VybmVsIGNvZGUgYmFzZS4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgYmUgdmFsdWFibGUgaW4gZ2V0dGluZyBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwncyBkZXNpZ24gY2hvaWNlcyB3aGVuIGl0IGNvbWVzIHRvIGxvb3BiYWNrIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDo0My45OTQ3MTU1MDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTYxMzQyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcGJhY2staXNtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTItLypcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM6ICogIEZ1bmN0aW9ucyBmb3IgZGlicyBsb29wYmFjay9sb29wYmFjay1pc20gZGV2aWNlLlxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNC0gKlxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaC0yLS8qXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suaDozOiAqICBkaWJzIGxvb3BiYWNrIChha2EgbG9vcGJhY2staXNtKSBkZXZpY2Ugc3RydWN0dXJlIGRlZmluaXRpb25zLlxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmgtNC0gKlxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmM9MjYwPWJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxcbm5ldC9zbWMvc21jX2lzbS5jLTI2MS17XFxubmV0L3NtYy9zbWNfaXNtLmM6MjYyOlxcdC8qIGZvciBub3cgb25seSBsb29wYmFjay1pc20gc3VwcG9ydHNcXG5uZXQvc21jL3NtY19pc20uYy0yNjMtXFx0ICogbWVyZ2luZyBzbmRidWYgd2l0aCBwZWVyIERNQiB0byBhdm9pZFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmM9NDkxPXN0YXRpYyB2b2lkIHNtY2RfcmVnaXN0ZXJfZGV2KHN0cnVjdCBkaWJzX2RldiAqZGlicylcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jLTUxNi1cXHQgKiAtIGRldmljZXMgd2l0aG91dCBwbmV0aWQgYmVmb3JlIGRldmljZXMgd2l0aCBwbmV0aWQ7XFxubmV0L3NtYy9zbWNfaXNtLmM6NTE3OlxcdCAqIC0gbG9vcGJhY2staXNtIGFsd2F5cyBhdCB0aGUgdmVyeSBiZWdpbm5pbmc7XFxubmV0L3NtYy9zbWNfaXNtLmMtNTE4LVxcdCAqL1xcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmg9Nzg9c3RhdGljIGlubGluZSBib29sIF9fc21jX2lzbV9pc19lbXVsYXRlZCh1MTYgY2hpZClcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5oLTgyLVxcdCAqXFxubmV0L3NtYy9zbWNfaXNtLmg6ODM6XFx0ICogbG9vcGJhY2staXNtOlxcdDB4RkZGRlxcbm5ldC9zbWMvc21jX2lzbS5oLTg0LVxcdCAqIHZpcnRpby1pc206XFx0XFx0MHhGRjAwIH4gMHhGRkZFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjQ2LjYxMDg1NDMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NDA5MzY1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gZGlic19sb29wYmFjay5jIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUgb2YgdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiB0aGUgY29kZWJhc2U/XCIgVGltZSB0byBnbyBzdHJhaWdodCB0byB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGRpYnNfbG9vcGJhY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSwgYW5kIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBhcmUuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMsIG9yIHBvdGVudGlhbGx5IGEgZGV2aWNlIHRyZWUgb3ZlcmxheSwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhlcmUgYXJlIHNvbWUgcHJlcHJvY2Vzc29yIGRlZmluZXMgYXQgcGxheS4gVGhhdCdzIHRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyB0byBncm9rIHRoZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdGhlIGJhc2VsaW5lIGJlZm9yZSBhbnl0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ1OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAwOjU0LjU1MTc5MzQ2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzI1NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESUJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMDo1NC42NTkxMjYwMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ0MTYxNTY3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIERlcGVuZGVuY2llcyBmb3IgT3B0aW1hbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYENPTkZJR19ESUJTYCBhbmQgYENPTkZJR19ESUJTX0xPYCBhcmUgZXNzZW50aWFsIGNvbXBvbmVudHMuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgY29udGV4dC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIGBDT05GSUdfU01DYCBpcyBhbHNvIGEgZGVwZW5kZW5jeS4gQSBxdWljayBzZWFyY2ggcmV2ZWFscyBpdHMgcHJlc2VuY2UgaW4gYG5ldC9zbWMvc21jX2NkYy5jYCwgY29uZmlybWluZyBpdHMgaW52b2x2ZW1lbnQuXG5cbk5leHQsIEknbGwgY2hlY2sgZm9yIGBDT05GSUdfU01DX0xPYC4gQWhhLCB0aGF0IGFwcGVhcnMgdG8gYmUgY292ZXJlZCB1bmRlciBgQ09ORklHX0RJQlNfTE9gLiBHb29kIHRvIGtub3cgdGhhdCByZWR1bmRhbmN5IGlzbid0IHByZXNlbnQsIGFuZCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBzZWVtcyBzdWZmaWNpZW50LiBJJ2xsIGRvdWJsZS1jaGVjayBgbmV0L3NtYy9LY29uZmlnYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIGF0IHRoaXMgc3RhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAxOjE5LjA3NTI4NDgzNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTTUNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgU01DLVIgcHJvdmlkZXMgYSBcXFwic29ja2V0cyBvdmVyIFJETUFcXFwiIHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcXG4gICA3OlxcdFxcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXFxuICAgODpcXHRcXHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXFxuICAgOTpcXHRcXHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcXG4gIDEwOlxcdFxcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBTTUNfRElBR1xcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBTTUNcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcXG4gIDE5OlxcdFxcdCAgc21jc3MuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgaWYgdW5zdXJlLCBzYXkgWS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbiAgMjQ6XFx0XFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG4gIDI2OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBTTUNfSFNfQ1RSTF9CUEYgZW5hYmxlcyBzdXBwb3J0IHRvIHJlZ2lzdGVyIGdlbmVyaWMgZUJQRiBob29rIGZvciBTTUNcXG4gIDI5OlxcdFxcdCAgaGFuZHNoYWtlIGZsb3csIHdoaWNoIG9mZmVyIG11Y2ggZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yXFxuICAzMDpcXHRcXHQgIG9mIHRoZSBTTUMgcHJvdG9jb2wgc3RhY2sgY29tcGFyZWQgdG8gYSBjb21wbGV0ZSBrZXJuZWwtYmFzZWQgYXBwcm9hY2guIFNlbGVjdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMToxOS4wNzUzNjExNTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgzMTE1NDk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTTUMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCByZXZlYWxzIHRoYXQgdGhlIGBDT05GSUdfU01DYCBvcHRpb24gaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYCBjb25maWd1cmF0aW9ucy4gVGhlcmVmb3JlLCB0byBlbnN1cmUgY29tcGxldGUgZnVuY3Rpb25hbGl0eSwgd2UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBgU01DYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkOiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLiBZZXMsIHRoZXNlIGFyZSBhbGwgY29yZSB0byBTTUMncyBjb25uZWN0aW9uIHNldHVwIGFuZCBDREMgbWVzc2FnZSBoYW5kbGluZy4gU3BlY2lmaWNhbGx5OlxuXG4qICAgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCBpcyB0cmlnZ2VyZWQgdXBvbiByZWNlaXZpbmcgQ0RDIG1lc3NhZ2VzLCB2aXRhbCBmb3IgY29tbXVuaWNhdGlvbi5cbiogICBgc21jZF9jZGNfcnhfdHNrbGV0YCBpcyB0aGUgdGFza2xldCByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHJlY2VwdGlvbiBvZiBDREMgbWVzc2FnZXMgd2l0aGluIFNNQy1ELlxuKiAgIGBzbWNfY2RjX3J4X2hhbmRsZXJgIGhhbmRsZXMgdGhlIHJlY2VwdGlvbiBvZiBDREMgbWVzc2FnZXMgd2l0aGluIFNNQy1SLlxuKiAgIGBfX3NtY19idWZfY3JlYXRlYCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYnVmZmVycywgYSBmdW5kYW1lbnRhbCBvcGVyYXRpb24uXG4qICAgYHNtY2RfYnVmX2F0dGFjaGAgaXMgZXNzZW50aWFsIGZvciBhdHRhY2hpbmcgYnVmZmVycyB3aXRoaW4gdGhlIFNNQy1EIGNvbnRleHQuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGlzIGlzIHRoZSBiYWNrYm9uZSBvZiB0aGUgU01DIGNvbm5lY3Rpb24gYW5kIGRhdGEgcGF0aC5cblxuRGlnZ2luZyBkZWVwZXIsIEkgd2FudCB0byBjbGFyaWZ5IGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGZvciBTTUMtRC4gQmVzaWRlcyBgQ09ORklHX1NNQ2AgYXMgdGhlIHByaW1hcnkgcmVxdWlyZW1lbnQsIHdlJ2xsIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfRElCU2AgYW5kIGBDT05GSUdfRElCU19MT2AgdG8gZmFjaWxpdGF0ZSBTTUMtRCBsb29wYmFjayBmdW5jdGlvbmFsaXR5LlxuXG5UbyBzdW1tYXJpemUsIG15IGNvcmUgZm9jdXMgbm93IGFyZSB0aGUgZnVuY3Rpb25zOiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLlxuXG5XYWl0LCBgX19zbWNfYnVmX2NyZWF0ZWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgaW50byBgc21jX2NvcmUuY2AgdG8gY29uZmlybSB0aGUgc3RhdGljIGxpbmthZ2UgYW5kIHRvIGRldGVybWluZSBpdHMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTY4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDE6MjYuOTA2NTE4ODA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1MTYyNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc21jX2J1Zl9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz0yMzkwPXN0YXRpYyBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpzbWNkX25ld19idWZfY3JlYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTI0MjUtXFxubmV0L3NtYy9zbWNfY29yZS5jOjI0MjY6c3RhdGljIGludCBfX3NtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QsIGJvb2wgaXNfcm1iKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNDI3LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0yNTYxPWludCBzbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjktXFxubmV0L3NtYy9zbWNfY29yZS5jOjI1NzA6XFx0cmMgPSBfX3NtY19idWZfY3JlYXRlKHNtYywgaXNfc21jZCwgZmFsc2UpO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTcxLVxcdGlmIChyYylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTc1LVxcdC8qIGNyZWF0ZSBybWIgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MjU3NjpcXHRyYyA9IF9fc21jX2J1Zl9jcmVhdGUoc21jLCBpc19zbWNkLCB0cnVlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMjU3Ny1cXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgc21jLVxcdTAwM2Vjb25uLnNuZGJ1Zl9kZXNjKSB7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjU4OD1pbnQgc21jZF9idWZfYXR0YWNoKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTI2MTYtXFx0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSAoc21jX2lzbV9zZXRfY29ubigpXFxubmV0L3NtYy9zbWNfY29yZS5jOjI2MTc6XFx0ICogcmFuIGluIF9fc21jX2J1Zl9jcmVhdGUoKSksIHNvIHRoZSBDREMgcmVjZWl2ZSB0YXNrbGV0IG11c3Qgb2JzZXJ2ZVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjE4LVxcdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTg6MDE6MjguMTIxNjg4NzAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NjA4Njk1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgU01DIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gYW5hbHl6aW5nIGhvdyB0byBiZXN0IGZ1enogdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgZnVuY3Rpb25hbGl0eS4gSW5pdGlhbGx5LCBJIHdhcyBsb29raW5nIGF0IGBfX3NtY19idWZfY3JlYXRlYCBidXQgcmVhbGl6ZWQgdGhhdCBTeXprYWxsZXIgY2FuLCBpbiBmYWN0LCBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGluIHRoZSBzeW1ib2wgdGFibGUsIHRob3VnaCBpdCdzIHVzdWFsbHkgYmV0dGVyIHRvIHByb3ZpZGUgdGhlIG5vbi1zdGF0aWMgb25lcyBvciB0aGUgZXhwbGljaXRseSBpZGVudGlmaWFibGUgc3RhdGljIG9uZXMuIEJ1dCB0aGUgY292ZXJhZ2UgdHJhY2tpbmcgY2FwYWJpbGl0eSBtYWtlcyBpbmNsdWRpbmcgYF9fc21jX2J1Zl9jcmVhdGVgIGEgdmlhYmxlIG9wdGlvbiBoZXJlLlxuXG5UaGUga2V5IGlzIHRvIHRhcmdldCBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgbmVjZXNzYXJpbHkgKmhvdC1wYXRoKiBmdW5jdGlvbnMsIGJ1dCBhcmUgaW1wb3J0YW50IGZvciBTTUPigJlzIHNwZWNpZmljIGludGVyYWN0aW9ucy4gQ29uc2lkZXJpbmcgdGhlIHByb21wdCdzIGZvY3VzIG9uIHRoZXNlIHR5cGVzIG9mIGZ1bmN0aW9ucywgSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwgY2FuZGlkYXRlczpcblxuKiAgIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmA6IHRoaXMgaGFuZGxlcyBDREMgbWVzc2FnZSByZWNlaXZpbmc7IGl0IG1pZ2h0IGJlIG1vZGVyYXRlbHkgYWN0aXZlLCBidXQgaXQncyBTTUMtc3BlY2lmaWMuXG4qICAgYHNtY2RfY2RjX3J4X3Rza2xldGA6IHRoaXMgaXMgdGhlIHRhc2tsZXQgcmVzcG9uc2libGUgZm9yIFNNQy1EIFJYIGhhbmRsaW5nLlxuKiAgIGBzbWNfY2RjX3J4X2hhbmRsZXJgOiB0aGlzIGhhbmRsZXMgU01DLVIgUlguXG4qICAgYF9fc21jX2J1Zl9jcmVhdGVgOiB0aGlzIGlzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiBzZXR1cC5cbiogICBgc21jZF9idWZfYXR0YWNoYDogdGhpcyBpcyBhbHNvIGludm9sdmVkIGluIGNvbm5lY3Rpb24gc2V0dXAuXG5cbkJhc2VkIG9uIHRoaXMsIEknbSBsZWFuaW5nIHRvd2FyZCBoZWF2aWx5IGZ1enppbmcgdGhvc2UgZml2ZTogYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY2RfY2RjX3J4X3Rza2xldGAsIGBzbWNfY2RjX3J4X2hhbmRsZXJgLCBgX19zbWNfYnVmX2NyZWF0ZWAsIGFuZCBgc21jZF9idWZfYXR0YWNoYC5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgb25lcyBJJ3ZlIGlkZW50aWZpZWQgYXJlIGBTTUNgLCBgRElCU2AsIGFuZCBgRElCU19MT2AuIExldCBtZSBkb3VibGUtY2hlY2sgYERJQlNfTE9gOyBpdCdzIGEgYm9vbCwgc28gbm8gaXNzdWVzIHRoZXJlLiBTaW5jZSBgU01DYCByZWxpZXMgb24gYElORklOSUJBTkRgLCBJJ2xsIGluY2x1ZGUgdGhhdCBhcyB3ZWxsLCBhbHRob3VnaCBpdCdzIHR5cGljYWxseSBlbmFibGVkLiBXYWl0LCBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgYElORVRgIGlzIGVuYWJsZWQuIGBTTUNgIGRlcGVuZHMgb24gYElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNgLiBTbywgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZSBgU01DYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBgU01DYCBmdW5jdGlvbmFsaXR5IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4gVGhpcyBtYWtlcyBpdCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEl0J3MgYSBjb25uZWN0aW9uIHNldHVwIHJhY2UgY29uZGl0aW9uIHRoYXQgYSBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgbWlnaHQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gVGhhdCdzIGEgZGVmaW5pdGUgY2FuZGlkYXRlIVxuXG5TbywgdG8gc3VtbWFyaXplIG15IHN0cmF0ZWd5OlxuXG4qKkNvbmZpZ3M6KipcblxuKiAgIGBTTUNgXG4qICAgYERJQlNgXG4qICAgYERJQlNfTE9gXG5cbioqU3ltYm9sczoqKlxuXG4qICAgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYFxuKiAgIGBzbWNkX2NkY19yeF90c2tsZXRgXG4qICAgYHNtY19jZGNfcnhfaGFuZGxlcmBcbiogICBgX19zbWNfYnVmX2NyZWF0ZWBcbiogICBgc21jZF9idWZfYXR0YWNoYFxuXG5JIHNob3VsZCBub3cgZG91YmxlIGNoZWNrIHdoZXRoZXIgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCBpcyBzdGF0aWMgb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk3NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMTozNy42ODI1NjA2MDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDQ3MDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY2RjX21zZ19yZWN2X2FjdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19jZGMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jZGMuYz0zMDg9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfdmFsaWRhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjLFxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtMzI5LVxcbm5ldC9zbWMvc21jX2NkYy5jOjMzMDpzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG5uZXQvc21jL3NtY19jZGMuYy0zMzEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9NDQ3PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3Yoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtNDUwLVxcdGJoX2xvY2tfc29jayhcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxubmV0L3NtYy9zbWNfY2RjLmM6NDUxOlxcdHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHNtYywgY2RjKTtcXG5uZXQvc21jL3NtY19jZGMuYy00NTItXFx0YmhfdW5sb2NrX3NvY2soXFx1MDAyNnNtYy1cXHUwMDNlc2spO1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9NDk3PXN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy01MTQtXFx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxcbm5ldC9zbWMvc21jX2NkYy5jOjUxNTpcXHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXFxubmV0L3NtYy9zbWNfY2RjLmMtNTE2LVxcdCAqIE5VTEwgZGVyZWYgYW5kIGEgc3RhbGUtYnVmZmVyIHJlYWQgaW4gdGhlIGNvbm5lY3Rpb24gc2V0dXAgd2luZG93LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxODowMTozOC4wMjcwMzk3MDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3NzIwNTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBQcm90b2NvbCBSYWNlIENvbmRpdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBvdmVyIHRoaXMgcGF0Y2ggYW5kIGl0J3MgYWRkcmVzc2luZyBhIHByZXR0eSBjcml0aWNhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgcHJvdG9jb2wuIEkgY2FuIHNlZSB0aGUgZml4IGludm9sdmVzIGFkZGluZyBtZW1vcnkgYmFycmllcnMsIHNwZWNpZmljYWxseSBgc21wX2xvYWRfYWNxdWlyZWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZWAsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciB0aGlzIGtpbmQgb2YgaXNzdWUuIEl0J3MgbWVhbnQgdG8gcHJvdGVjdCB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzLCBgc25kYnVmX2Rlc2NgIGFuZCBgcm1iX2Rlc2NgLCBmcm9tIGJlaW5nIGFjY2Vzc2VkIHByZW1hdHVyZWx5IGJ5IGNvbmN1cnJlbnQgQ29ubmVjdGlvbiBEYXRhIENvbnRyb2wgKENEQykgcmVjZWl2ZSBoYW5kbGVycy4gTWFrZXMgcGVyZmVjdCBzZW5zZTsgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYnVmZmVycyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHRvdWNoZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBjb3JlIFNNQyBsb2dpYyBhbmQsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgc29tZXRoaW5nIHdlJ2xsIHNlZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGxvb3BiYWNrIElTTSAoU01DLUQpIGRldmljZS5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgY3JpdGljYWwgc3ltYm9scyBpbnZvbHZlZCBpbmNsdWRlIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYF9fc21jX2J1Zl9jcmVhdGVgLCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIEZyb20gYSBxdWljayBnbGFuY2UsIHRoZSBmdW5jdGlvbnMgYHNtY2RfY2RjX3J4X3Rza2xldGAsIGBzbWNfY2RjX3J4X2hhbmRsZXJgLCBhbmQgYF9fc21jX2J1Zl9jcmVhdGVgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMsIHNvIEkgd2lsbCBpbmNsdWRlIHRoZW0uIGBzbWNkX2J1Zl9hdHRhY2hgIGlzIG5vdCBzdGF0aWMuIEknbGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuXG5cbkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gSSBrbm93IHdlJ3JlIGRlYWxpbmcgd2l0aCBgU01DYCwgYnV0IEkgd2FudGVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBESUJTYCAoYW5kIGBESUJTX0xPYCkgaXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4gSXQgYXBwZWFycyBteSBpbml0aWFsIGFzc2Vzc21lbnQgd2FzIGNvcnJlY3Q7IGEgcXVpY2sgbG9vayBhdCBgZHJpdmVycy9kaWJzL0tjb25maWdgIGNvbmZpcm1zIGBDT05GSUdfRElCU2AgYW5kIGBDT05GSUdfRElCU19MT2AgYXJlIGRlZmluZWQgdGhlcmUuIEkgYWxzbyB2ZXJpZmllZCB0aHJvdWdoIGdyZXAgZm9yIGBsb29wYmFjay1pc21gIHRoYXQgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgIGV4aXN0cy4gWWVwLCBgRElCU2AgaXMgdGhlIHJpZ2h0IG9uZS5cblxuQWxyaWdodCwgdGhhdCdzIGV2ZXJ5dGhpbmcgSSBuZWVkLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MDgsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE4OjAxOjQ2LjEwNDI0Njk0M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE1NDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2NkY19tc2dfcmVjdl9hY3Rpb25cIixcbiAgICBcInNtY2RfY2RjX3J4X3Rza2xldFwiLFxuICAgIFwic21jX2NkY19yeF9oYW5kbGVyXCIsXG4gICAgXCJfX3NtY19idWZfY3JlYXRlXCIsXG4gICAgXCJzbWNkX2J1Zl9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHByb3RvY29sIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBhZGRzIG1lbW9yeSBiYXJyaWVycyAoc21wX2xvYWRfYWNxdWlyZSBhbmQgc21wX3N0b3JlX3JlbGVhc2UpIHRvIHByZXZlbnQgY29uY3VycmVudCBDREMgKENvbm5lY3Rpb24gRGF0YSBDb250cm9sKSByZWNlaXZlIGhhbmRsZXJzIGZyb20gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzIChzbmRidWZfZGVzYyBhbmQgcm1iX2Rlc2MpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBTTUMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHRoZSBsb29wYmFjayBJU00gZGV2aWNlIChTTUMtRCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2NkY19tc2dfcmVjdl9hY3Rpb25cIixcbiAgICBcInNtY2RfY2RjX3J4X3Rza2xldFwiLFxuICAgIFwic21jX2NkY19yeF9oYW5kbGVyXCIsXG4gICAgXCJfX3NtY19idWZfY3JlYXRlXCIsXG4gICAgXCJzbWNkX2J1Zl9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHByb3RvY29sIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBhZGRzIG1lbW9yeSBiYXJyaWVycyAoc21wX2xvYWRfYWNxdWlyZSBhbmQgc21wX3N0b3JlX3JlbGVhc2UpIHRvIHByZXZlbnQgY29uY3VycmVudCBDREMgKENvbm5lY3Rpb24gRGF0YSBDb250cm9sKSByZWNlaXZlIGhhbmRsZXJzIGZyb20gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzIChzbmRidWZfZGVzYyBhbmQgcm1iX2Rlc2MpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBTTUMgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHRoZSBsb29wYmFjayBJU00gZGV2aWNlIChTTUMtRCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowwljtl[1] Phase: Succeeded StartedAt: 2026-07-16 18:01:57 +0000 UTC FinishedAt: 2026-07-16 18:01:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 18:01:57 +0000 UTC FinishedAt: 2026-07-16 18:01:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2] Phase: Succeeded StartedAt: 2026-07-16 18:01:57 +0000 UTC FinishedAt: 2026-07-16 22:26:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 18:01:57 +0000 UTC FinishedAt: 2026-07-16 22:26:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 18:01:57 +0000 UTC FinishedAt: 2026-07-16 18:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 18:01:57 +0000 UTC FinishedAt: 2026-07-16 18:02:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwljtl/series-workflowwljtl-convert-artifact-46958082/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 18:02:08 +0000 UTC FinishedAt: 2026-07-16 18:41:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 18:02:08 +0000 UTC FinishedAt: 2026-07-16 18:41:39 +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:*de96c4d7-a797-454e-9cc7-f4fc54cc28e1,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-workflowwljtl/series-workflowwljtl-convert-artifact-46958082/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": "c749c0f5-5e14-4023-ba31-1267728600cc", "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-workflowwljtl/series-workflowwljtl-build-action-1722553536/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 18:02:08 +0000 UTC FinishedAt: 2026-07-16 18:41:29 +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:*de96c4d7-a797-454e-9cc7-f4fc54cc28e1,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-workflowwljtl/series-workflowwljtl-convert-artifact-46958082/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": "c749c0f5-5e14-4023-ba31-1267728600cc", "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-workflowwljtl/series-workflowwljtl-build-action-1722553536/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 18:41:39 +0000 UTC FinishedAt: 2026-07-16 18:41:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 18:41:39 +0000 UTC FinishedAt: 2026-07-16 18:41:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 18:41:39 +0000 UTC FinishedAt: 2026-07-16 18:41:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 18:41:39 +0000 UTC FinishedAt: 2026-07-16 18:41:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwljtl/series-workflowwljtl-convert-artifact-1897081437/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 18:41:49 +0000 UTC FinishedAt: 2026-07-16 18:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 18:41:49 +0000 UTC FinishedAt: 2026-07-16 18:43:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c749c0f5-5e14-4023-ba31-1267728600cc,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-workflowwljtl/series-workflowwljtl-build-action-1722553536/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-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 18:43:52 +0000 UTC FinishedAt: 2026-07-16 18:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 18:43:52 +0000 UTC FinishedAt: 2026-07-16 18:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 18:43:52 +0000 UTC FinishedAt: 2026-07-16 19:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 18:43:52 +0000 UTC FinishedAt: 2026-07-16 19:21:25 +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:*de96c4d7-a797-454e-9cc7-f4fc54cc28e1,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-workflowwljtl/series-workflowwljtl-convert-artifact-1897081437/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": "39af3b8b-e774-41e6-be69-3db0ae4c50a9", "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-workflowwljtl/series-workflowwljtl-build-action-2624088889/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 18:43:52 +0000 UTC FinishedAt: 2026-07-16 19:21:15 +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:*de96c4d7-a797-454e-9cc7-f4fc54cc28e1,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-workflowwljtl/series-workflowwljtl-convert-artifact-1897081437/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": "39af3b8b-e774-41e6-be69-3db0ae4c50a9", "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-workflowwljtl/series-workflowwljtl-build-action-2624088889/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 19:21:25 +0000 UTC FinishedAt: 2026-07-16 19:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 19:21:25 +0000 UTC FinishedAt: 2026-07-16 19:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 19:21:25 +0000 UTC FinishedAt: 2026-07-16 19:23:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 19:21:25 +0000 UTC FinishedAt: 2026-07-16 19:23:45 +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:*39af3b8b-e774-41e6-be69-3db0ae4c50a9,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-workflowwljtl/series-workflowwljtl-build-action-2624088889/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-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 19:23:55 +0000 UTC FinishedAt: 2026-07-16 22:26:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 19:23:55 +0000 UTC FinishedAt: 2026-07-16 22:26:44 +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":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"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:*c749c0f5-5e14-4023-ba31-1267728600cc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39af3b8b-e774-41e6-be69-3db0ae4c50a9,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-workflowwljtl/series-workflowwljtl-build-action-1722553536/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-workflowwljtl/series-workflowwljtl-build-action-2624088889/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 19:23:55 +0000 UTC FinishedAt: 2026-07-16 19:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 19:23:55 +0000 UTC FinishedAt: 2026-07-16 19:24:01 +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":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"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-workflowwljtl/series-workflowwljtl-convert-artifact-2742050018/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 19:23:55 +0000 UTC FinishedAt: 2026-07-16 19:23:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 19:23:55 +0000 UTC FinishedAt: 2026-07-16 19:23:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 19:23:55 +0000 UTC FinishedAt: 2026-07-16 19:23:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 19:24:05 +0000 UTC FinishedAt: 2026-07-16 22:26:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwljtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_cdc_msg_recv_action","smcd_cdc_rx_tsklet","smc_cdc_rx_handler","__smc_buf_create","smcd_buf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","DIBS","DIBS_LO"],"series_id":"52d744d5-f930-4ea9-b5e6-7d4822d3832a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 19:24:05 +0000 UTC FinishedAt: 2026-07-16 22:26:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c749c0f5-5e14-4023-ba31-1267728600cc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39af3b8b-e774-41e6-be69-3db0ae4c50a9,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-workflowwljtl/series-workflowwljtl-build-action-1722553536/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-workflowwljtl/series-workflowwljtl-build-action-2624088889/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-workflowwljtl/series-workflowwljtl-convert-artifact-2742050018/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,}