Name: series-workflowrz5jg Phase: Succeeded StartedAt: 2026-08-18 22:08:32 +0000 UTC FinishedAt: 2026-08-19 02:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[0] Phase: Succeeded StartedAt: 2026-08-18 22:08:32 +0000 UTC FinishedAt: 2026-08-18 22:29:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 22:08:32 +0000 UTC FinishedAt: 2026-08-18 22:29:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e625a9477d12baaff4025c5f9989184a907ea8fc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NF_FLOW_TABLE_INET", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e625a9477d12baaff4025c5f9989184a907ea8fc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NF_FLOW_TABLE_INET", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "3283fd1d-6956-442c-aba8-e739fe08a624" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_flow_offload_add", "nf_flow_offload_del", "nf_flow_table_offload_setup", "flow_offload_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2RlbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkX2FkZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBzZXR0aW5nIG9mIHRoZSBgTkZfRkxPV19IV19ERUFEYCBiaXQgaW4gYG9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VmbGFnc2AgZnJvbSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsKClgIHRvIHRoZSBlbmQgb2YgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoKWAsIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSBpdCBpcyBwdWJsaXNoZWQgb25seSBhZnRlciB0aGUgd29ya2VyJiMzOTtzIGxhc3QgYWNjZXNzIHRvIHRoZSBmbG93LiBUaGlzIGlzIGEgZml4IGZvciBhIGNvbmN1cnJlbmN5IGlzc3VlLCBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBidWcgd2hlcmUgdGhlIGZsb3cgY291bGQgYmUgZnJlZWQgYnkgYW5vdGhlciB0aHJlYWQgd2hpbGUgdGhlIHdvcmtlciB3YXMgc3RpbGwgYWNjZXNzaW5nIGl0LiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFuZCByYWNlIGNvbmRpdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChsaWtlIEtDU0FOKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhhcmR3YXJlIG9mZmxvYWQgd29ya3F1ZXVlIGhhbmRsZXIgYnkgZGVsYXlpbmcgdGhlIHNldHRpbmcgb2YgdGhlIE5GX0ZMT1dfSFdfREVBRCBmbGFnIHVudGlsIGFmdGVyIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkIGZvciBhIGZsb3d0YWJsZS4gRnV6emluZyB0aGlzIGFyZWEgY2FuIGhlbHAgZW5zdXJlIHRoYXQgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDViZjcwMzMwOTRlNzU5MTgwOWM2NmIyYzk4MTkwMWUwZWJlYzZiMWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjoyNjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuaW5kZXggODAxYTNkZDljZWVhMy4uNjc1N2ZkODljMWYxYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbkBAIC05OTUsNyAmIzQzOzk5NSw2IEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4gXHRmbG93X29mZmxvYWRfdHVwbGVfZGVsKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xuIFx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKSlcbiBcdFx0Zmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbi1cdHNldF9iaXQoTkZfRkxPV19IV19ERUFELCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfdHVwbGVfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxuQEAgLTEwNTksNiAmIzQzOzEwNTgsMTIgQEAgc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR9XG4gXG4gXHRjbGVhcl9iaXQoTkZfRkxPV19IV19QRU5ESU5HLCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpO1xuJiM0MztcdGlmIChvZmZsb2FkLVx1MDAzZWNtZCA9PSBGTE9XX0NMU19ERVNUUk9ZKSB7XG4mIzQzO1x0XHQvKiBQdWJsaXNoIGFmdGVyIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBmbG93IGFjY2Vzcy4gKi9cbiYjNDM7XHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuJiM0MztcdFx0c2V0X2JpdChORl9GTE9XX0hXX0RFQUQsIFx1MDAyNm9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGtmcmVlKG9mZmxvYWQpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEVfSU5FVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2FkZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZGVsJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCYjMzQ7LAogICAgJiMzNDtmbG93X29mZmxvYWRfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhhcmR3YXJlIG9mZmxvYWQgd29ya3F1ZXVlIGhhbmRsZXIgYnkgZGVsYXlpbmcgdGhlIHNldHRpbmcgb2YgdGhlIE5GX0ZMT1dfSFdfREVBRCBmbGFnIHVudGlsIGFmdGVyIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkIGZvciBhIGZsb3d0YWJsZS4gRnV6emluZyB0aGlzIGFyZWEgY2FuIGhlbHAgZW5zdXJlIHRoYXQgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViZjcwMzMwOTRlNzU5MTgwOWM2NmIyYzk4MTkwMWUwZWJlYzZiMWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjoyNjozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCmluZGV4IDgwMWEzZGQ5Y2VlYTMuLjY3NTdmZDg5YzFmMWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYwpAQCAtOTk1LDcgJiM0Mzs5OTUsNiBAQCBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19kZWwoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKQogCWZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7CiAJaWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgJmFtcDtvZmZsb2FkLSZndDtmbG93LSZndDtmbGFncykpCiAJCWZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7Ci0Jc2V0X2JpdChORl9GTE9XX0hXX0RFQUQsICZhbXA7b2ZmbG9hZC0mZ3Q7Zmxvdy0mZ3Q7ZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfdHVwbGVfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLApAQCAtMTA1OSw2ICYjNDM7MTA1OCwxMiBAQCBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAl9CiAKIAljbGVhcl9iaXQoTkZfRkxPV19IV19QRU5ESU5HLCAmYW1wO29mZmxvYWQtJmd0O2Zsb3ctJmd0O2ZsYWdzKTsKJiM0MzsJaWYgKG9mZmxvYWQtJmd0O2NtZCA9PSBGTE9XX0NMU19ERVNUUk9ZKSB7CiYjNDM7CQkvKiBQdWJsaXNoIGFmdGVyIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBmbG93IGFjY2Vzcy4gKi8KJiM0MzsJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwomIzQzOwkJc2V0X2JpdChORl9GTE9XX0hXX0RFQUQsICZhbXA7b2ZmbG9hZC0mZ3Q7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiAJa2ZyZWUob2ZmbG9hZCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSByZWxvY2F0aW9uIG9mIGBzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgJmFtcDtvZmZsb2FkLSZndDtmbG93LSZndDtmbGFncyk7YC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgbW92ZWQgdGhhdCBiaXQtc2V0dGluZyBmcm9tIGBmbG93X29mZmxvYWRfd29ya19kZWxgIHRvIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGNvbW1hbmQgYG9mZmxvYWQtJmd0O2NtZGAgaXMgYEZMT1dfQ0xTX0RFU1RST1lgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBJIHdvbmRlciBhYm91dCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGF0IHNoaWZ0LiBQb3RlbnRpYWxseSBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUgdGltaW5nIGlzc3VlIG9yIG1heWJlIGEgcmFjZSBjb25kaXRpb24gdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHJlc29sdmUuCgpUaGUgYWRkaXRpb24gb2YgYHNtcF9tYl9fYmVmb3JlX2F0b21pYygpYCBpcyBhbm90aGVyIHBvaW50IG9mIGludGVyZXN0LiBBIG1lbW9yeSBiYXJyaWVyIGhlcmUgc3VnZ2VzdHMgdGhleSBhcmUgY29uY2VybmVkIGFib3V0IHRoZSBvcmRlciBpbiB3aGljaCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkLCBsaWtlbHkgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBtdWx0aS1jb3JlIGVudmlyb25tZW50LiBUaGlzIHN0cm9uZ2x5IGluZGljYXRlcyB0aGV5IGFyZSB0cnlpbmcgdG8gZW5zdXJlIHRoYXQgdGhlIGhhcmR3YXJlIHNlZXMgdGhlIGBORl9GTE9XX0hXX0RFQURgIGZsYWcgc2V0IGJlZm9yZSBhIHJlbGF0ZWQgYXRvbWljIG9wZXJhdGlvbiBvY2N1cnMuCgpJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgIGFuZCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJgLiBDb250ZXh0IGlzIGtpbmcuIFNlZWluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBlYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgdGhlIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IG90aGVyIGNvZGUgaW50ZXJhY3RzIHdpdGggYG9mZmxvYWQtJmd0O2Zsb3ctJmd0O2ZsYWdzYCBhbmQgYEZMT1dfQ0xTX0RFU1RST1lgIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhdGNoIGlzIGEgYnVnIGZpeCwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfd29ya19kZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTczPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk5MjpzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19kZWwoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTAzNj1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNDgtXHRcdGNhc2UgRkxPV19DTFNfREVTVFJPWTpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA0OTpcdFx0XHRmbG93X29mZmxvYWRfd29ya19kZWwob2ZmbG9hZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNTAtXHRcdFx0TkZfRkxPV19UQUJMRV9TVEFUX0RFQ19BVE9NSUMobmV0LCBjb3VudF93cV9kZWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgd2hlbiBgTkZfRkxPV19IV19ERUFEYCBnZXRzIHNldC4gVGhhdCBzb3VuZHMgbGlrZSBhIHByZXR0eSBjcml0aWNhbCB0aW1pbmcgY2hhbmdlIGluIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgbG9naWMgd2l0aGluIG5ldGZpbHRlci4gSW1tZWRpYXRlbHksIG15IGludGVybmFsIHJhZGFyIHBpbmdzIOKAkyBhIHRpbWluZyBjaGFuZ2UgaW4gdGhhdCBhcmVhIG9mdGVuIHBvaW50cyB0byBjb25jdXJyZW5jeSBidWdzLiBMaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbi4gV2UgbmVlZCB0byBhc3Nlc3MgdGhpcyBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgYSBuYXN0eSBtZW1vcnkgY29ycnVwdGlvbiBidWcsIGFic29sdXRlbHksIGZ1enppbmcgaXMgd2FycmFudGVkIGhlcmUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSBuZWVkIHRvIGVuYWJsZSB0byBnZXQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCBhY3RpdmUgYW5kIGV4cG9zZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRoIGZvciBvdXIgZnV6emluZyBlZmZvcnRzLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvbmZpZ3MgYW5kIGdldCB0aGUgY29ycmVjdCBzZXQgb2Ygb3B0aW9ucyB0byByZXByb2R1Y2UgdGhlIGJ1ZyBhbmQgYmVnaW4gb3VyIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd190YWJsZV9vZmZsb2FkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mz1uZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NTpcdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ2LW5mX2Zsb3dfdGFibGUtJChDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlMpICYjNDM7PSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBGbG93IFRhYmxlIE9iamVjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQmIzM5O3MgY2xlYXJseSBwYXJ0IG9mIHRoZSBgbmZfZmxvd190YWJsZS1vYmpzYCBjb250ZXh0LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24uIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgbmZfZmxvd190YWJsZWAgbW9kdWxlIGlzIGNvbmZpZ3VyZWQuIFRoYXQgY29uZmlnIGlzIGdvaW5nIHRvIGRpY3RhdGUgZXZlcnl0aGluZyBhYm91dCBpdHMgYmVoYXZpb3Ig4oCTIHRoZSB0YWJsZSYjMzk7cyBzaXplLCBpdHMgYWdpbmcgcGFyYW1ldGVycywgcGVyaGFwcyBldmVuIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBpdCYjMzk7cyB1c2luZy4gSSYjMzk7bGwgbmVlZCB0aGF0IHRvIHVuZGVyc3RhbmQgaXRzIGxpbWl0YXRpb25zIGFuZCBob3cgSSBtaWdodCBiZSBhYmxlIHRvIHR1bmUgaXQuIFRpbWUgdG8gdHJhY2sgZG93biB0aGF0IGNvbmZpZ3VyYXRpb24hIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGxvb2tpbmcgYXQga2VybmVsIGNvbmZpZyBmaWxlcyBvciBtb2R1bGUgcGFyYW1ldGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzOT1vYmotJChDT05GSUdfTkZUX0ZXRF9ORVRERVYpXHQmIzQzOz0gbmZ0X2Z3ZF9uZXRkZXYub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXHQmIzQzOz0gbmZfZmxvd190YWJsZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MzpuZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NTpcdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ2LW5mX2Zsb3dfdGFibGUtJChDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlMpICYjNDM7PSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03NDQ9dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzQ4LVx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VnY193b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzQ5Olx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3d0YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1MC19XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03NjM9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc2OS1cdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWdjX3dvcmspO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NzA6XHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goZmxvd190YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc3MS1cdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzczLVx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3NDpcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzUtXHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VyaGFzaHRhYmxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTgyND1zdGF0aWMgaW50IF9faW5pdCBuZl9mbG93X3RhYmxlX21vZHVsZV9pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04MzUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjgzNjpcdHJldCA9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTgzNy1cdGlmIChyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NDYtb3V0X2JwZjpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODQ3Olx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2V4aXQoKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODQ4LW91dF9vZmZsb2FkOlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODU1PXN0YXRpYyB2b2lkIF9fZXhpdCBuZl9mbG93X3RhYmxlX21vZHVsZV9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg1Ni17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjg1NzpcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg1OC1cdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZuZl9mbG93X3RhYmxlX25ldF9vcHMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Njg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaW5ldCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTcwLVx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjcxOlx0LnNldHVwXHRcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03Mi1cdC5hY3Rpb25cdFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaW5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTc4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy04MC1cdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo4MTpcdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODItXHQuYWN0aW9uXHRcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz04OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY2ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTAtXHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6OTE6XHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkyLVx0LmFjdGlvblx0XHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE1Mz12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTY5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTcwOnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTcxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzg6dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTc5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyNDM9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX2luZHJfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjU1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjU2OnN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI1Ny1cdFx0XHRcdCAgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI3NC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI3NTppbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI3Ni1cdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjg2LVx0aWYgKGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90Yylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI4NzpcdFx0ZXJyID0gbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChcdTAwMjZibywgZmxvd3RhYmxlLCBkZXYsIGNtZCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4OC1cdFx0XHRcdFx0XHRcdTAwMjZleHRhY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI5Ni19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyOTc6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI5OC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI5OTppbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzI0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI1OnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2V4aXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk0NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29kZSYjMzk7cyByZWZlcmVuY2luZyBgTkZfRkxPV19UQUJMRWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIG5ldGZpbHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZlYXR1cmUgZmxhZyBhY3R1YWxseSAqZG9lcyouIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgcmlnaHQgYXdheS4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOZXRmaWx0ZXIgYXJlIGRlZmluZWQsIGFuZCB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTGludXgga2VybmVsIGlzIGNvbmZpZ3VyZWQuIEkga25vdyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzZWN0aW9uIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBORl9GTE9XX1RBQkxFYCBhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucyBvbiB0aGUgYnVpbGQuIFRoaXMgdGVsbHMgbWUgaWYgaXQmIzM5O3MgYSBjb21waWxlLXRpbWUgb3B0aW9uLCBhIG1vZHVsZSwgb3Igd2hhdC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgdHlwaWNhbCB0aGluZ3MgSSB3YW50IHRvIGxvb2sgZm9yOiBJcyB0aGVyZSBhIGRlZmF1bHQgc2V0dGluZz8gSXMgaXQgZGVwZW5kZW50IG9uIGFub3RoZXIgZmVhdHVyZT8gQXJlIHRoZXJlIGFueSBjb21tZW50cyBkZXRhaWxpbmcgdGhlIHVzZSBjYXNlLCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBvciBzZWN1cml0eSBjb25zaWRlcmF0aW9ucz8gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1kb2N1bWVudGVkIGFzIHRoaXMgaXMgYSBjb3JlIHBpZWNlIG9mIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzExOmNvbmZpZyBORl9GTE9XX1RBQkxFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVx0Ym9vbCBcJiMzNDtTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgTkZfRkxPV19UQUJMRWAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5GX0ZMT1dfVEFCTEVgLiBJdCYjMzk7cyBhIGtleSBjb21wb25lbnQgaW4gdGhlIG5ldGZpbHRlciBlY29zeXN0ZW0sIGJ1dCBiZWZvcmUgSSBkaWcgaW50byBpdHMgc3BlY2lmaWNzLCBJIHdhbnQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3LiBXaGVyZSBkb2VzIGl0IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZT8gV2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBjb21wb25lbnRzIGlzIGl0IHRpZ2h0bHkgY291cGxlZCB3aXRoPyBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGluY2x1c2lvbiBwYXRocyBhbmQgc2VlIHdoYXQgaW5jbHVkZXMgaXQsIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCwgZXNwZWNpYWxseSBpZiBhbnkga2V5IGRhdGEgc3RydWN0dXJlcyBvciBBUElzIGZyb20gb3RoZXIgY29tcG9uZW50cyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gaXRzIGRlZmluaXRpb25zLiBBcmUgdGhlcmUgYW55IG9idmlvdXMgY2FuZGlkYXRlcyBsaWtlIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgb3Igb3RoZXIgbmV0ZmlsdGVyIG1vZHVsZXM/IEFyZSB0aGVyZSBhbnkga2VybmVsIHN1YnN5c3RlbXMsIG1heWJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxvY2tpbmcsIG9yIHRoZSBuZXR3b3JraW5nIHN0YWNrIGl0c2VsZiwgdGhhdCBpdCBjcml0aWNhbGx5IHJlbGllcyB1cG9uPyBUaGlzIGluaXRpYWwgZGVwZW5kZW5jeSBzY2FuIGlzIGVzc2VudGlhbCBmb3IgYW55IGRlZXAgZGl2ZSBvciBtb2RpZmljYXRpb24sIHRvIGF2b2lkIGJyZWFraW5nIHNvbWV0aGluZyBkb3duc3RyZWFtIG9yIGludHJvZHVjaW5nIHN1YnRsZSwgaGFyZC10by1kZWJ1ZyBpc3N1ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRSQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMz1jb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDcxMS4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgW2luc2VydCB5b3VyIGFzc3VtcHRpb24gb2Ygd2hhdCB5b3UmIzM5O3JlIGludGVyZXN0ZWQgaW4gYmFzZWQgb24gdGhlIEtjb25maWcgZmlsZV0uIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBwb3RlbnRpYWxseSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIFthZ2FpbiwgaW5zZXJ0IHlvdXIgZWR1Y2F0ZWQgZ3Vlc3NdLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBmZWF0dXJlIHNlbGVjdGlvbiBvciBleGNsdXNpb24gbG9naWMgcmVzaWRlcyBmb3IgW3RoZSBmZWF0dXJlIHRoZSB1c2VyIGlzIGludmVzdGlnYXRpbmddLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIHBvc3NpYmx5IGludm9sdmluZyBgZGVwZW5kcyBvbmAgY2xhdXNlcywgdGhhdCBnb3Zlcm4gd2hldGhlciBvciBub3QgY2VydGFpbiBOZXRmaWx0ZXIgbW9kdWxlcyBvciBmdW5jdGlvbmFsaXRpZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgc3BlY2lmaWMgZmVhdHVyZXMgcmVsYXRlZCB0byBbdGhlIGFzcGVjdCB0aGUgdXNlciBoYXMgaW4gbWluZF0sIGFuZCBob3cgdGhvc2UgY2hvaWNlcyBpbnRlcnJlbGF0ZSB3aXRoIG90aGVyIE5ldGZpbHRlciBjb21wb25lbnRzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCBbdGhlIGFzcGVjdCB0aGV5JiMzOTtyZSBpbnRlcmVzdGVkIGluXS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFxuIDcwMTpcdGVuZGlmICMgTkZfVEFCTEVTXG4gNzAyOlx0XG4gNzAzOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxuIDcwNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuIDcwNTpcdFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IHN1cHBvcnQuXG4gNzA4Olx0XG4gNzA5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gNzEwOlx0XG4gNzExOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbiA3MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuIDcxMzpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfSU5HUkVTU1xuIDcxNDpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA3MTU6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gNzE2Olx0XHRoZWxwXG4gNzE3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgY29yZSBpbmZyYXN0cnVjdHVyZS5cbiA3MTg6XHRcbiA3MTk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiA3MjA6XHRcbiA3MjE6XHRjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbiA3MjI6XHRcdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiA3MjM6XHRcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxuIDcyNDpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gNzI1Olx0XHRoZWxwXG4gNzI2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZm9yIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgc3RhdGlzdGljc1xuIDcyNzpcdFx0ICB0byBiZSBzaG93biBpbiBwcm9jZnMgdW5kZXIgbmV0L25ldGZpbHRlci9uZl9mbG93dGFibGUuXG4gNzI4Olx0XG4gNzI5Olx0Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgTkZfRkxPV19UQUJMRWAgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCByZWxpZXMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZW5hYmxlIGBORl9GTE9XX1RBQkxFYCwgb2J2aW91c2x5LgoKTm93LCBpZiB3ZSB3YW50IHRvIGdldCBpbnRvIHRoZSByZWFsbSBvZiBoYXJkd2FyZSBvZmZsb2FkLCBJIGJldCB0aGVyZSBhcmUgYSBmZXcgbW9yZSBjb25maWdzIHdlIG5lZWQgdG8gY29uc2lkZXIuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGluc3BlY3RpbmcgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgIHRvIHNlZSBpZiB0aGF0IGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBub3QuIEFoLCB3YWl0LCBubyBuZWVkLCBpdCBsb29rcyBsaWtlIGBuZl9mbG93X3RhYmxlX29mZmxvYWQub2AgKmlzKiBhbHdheXMgY29tcGlsZWQgd2hlbiBgTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gR29vZCwgZ29vZC4gTm8gZ290Y2hhcyB0aGVyZS4KCkFscmlnaHQsIHdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIHdpdGhpbiB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBsb2dpYz8gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggc2VlbXMgdG8gbW9kaWZ5IGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbGAuIFRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCB1c3VhbGx5IG1lYW5zIHRoZXkmIzM5O3JlIGludGVybmFsIHRvIHRoZSBtb2R1bGUuIFNvLCB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBBaCwgaGVyZSB3ZSBnbywgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJgIGlzIGEgd29ya3F1ZXVlIGhhbmRsZXIuIEFuZCBpdCBsb29rcyBsaWtlIGl0IGlzIHNjaGVkdWxlZCBieSBgZmxvd19vZmZsb2FkX3dvcmtfYWRkYC4gT2theSwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfd29ya19hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTU3PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX3J1bGVfYWRkKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTczOnN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk3NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDM2PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0NC1cdFx0Y2FzZSBGTE9XX0NMU19SRVBMQUNFOlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDQ1Olx0XHRcdGZsb3dfb2ZmbG9hZF93b3JrX2FkZChvZmZsb2FkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0Ni1cdFx0XHRORl9GTE9XX1RBQkxFX1NUQVRfREVDX0FUT01JQyhuZXQsIGNvdW50X3dxX2FkZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NjgKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIHRoZSBXb3JrcXVldWUgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGNoYWluIGludm9sdmluZyBgZmxvd19vZmZsb2FkX3dvcmtfYWRkYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyYjMzQ7IEJ1dCB0aGVuIEkgaGFkIHRvIG1lbnRhbGx5IGNvcnJlY3QgbXlzZWxmIOKAkyBoYW5nIG9uLCBpc24mIzM5O3QgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJgIGludm9sdmVkPyBBbmQgdGhlbiBpdCBoaXQgbWUuIFJpZ2h0LCBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcmAgKmlzKiB0aGUgd29ya3F1ZXVlIGhhbmRsZXIuIFNvLCB0aGUgcmVsYXRpb25zaGlwIGlzIHRoYXQgdGhlIGhhbmRsZXIgaXRzZWxmIGxpa2VseSBtYWtlcyB0aGUgY2FsbCB0byBgZmxvd19vZmZsb2FkX3dvcmtfYWRkYCwgb3IgcG90ZW50aWFsbHkgaXRzIGNvdW50ZXJwYXJ0LCBgZmxvd19vZmZsb2FkX3dvcmtfZGVsYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyBgb2ZmbG9hZC0mZ3Q7Y21kYCBmaWd1cmVzIGludG8gdGhlIGNob2ljZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG9mZmxvYWQtJmd0O2NtZGAgZGV0ZXJtaW5lcyBpZiBgZmxvd19vZmZsb2FkX3dvcmtfYWRkYCBvciBgZmxvd19vZmZsb2FkX3dvcmtfZGVsYCBhcmUgY2FsbGVkLCBidXQgdGhhdCBmZWVscyByaWdodC4gVGhlIG5leHQgcXVlc3Rpb24gaXMsIHdoZXJlIGV4YWN0bHkgd2l0aGluIHRoZSBzeXN0ZW0gaXMgdGhpcyB3b3JrIGJlaW5nIHF1ZXVlZD8gVGhhdCYjMzk7cyB0aGUga2V5IG5leHQgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHdob2xlIHRoaW5nIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJTklUX1dPUksuKmZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA4Nz1uZl9mbG93X29mZmxvYWRfd29ya19hbGxvYyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTAzLVx0b2ZmbG9hZC1cdTAwM2VmbG93dGFibGUgPSBmbG93dGFibGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMDQ6XHRJTklUX1dPUksoXHUwMDI2b2ZmbG9hZC1cdTAwM2V3b3JrLCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFsbG9jYXRpbmcgdGhlIE9mZmxvYWQgV29yayoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mZmxvYWQgd29yayBhbGxvY2F0aW9uIHByb2Nlc3Mg4oCTIHNwZWNpZmljYWxseSwgYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2FsbG9jYC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUsIGFzIGFsd2F5cywgaXMgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSYjMzk7bSB2aXN1YWxpemluZyBob3cgdGhpcyBmdW5jdGlvbiBjYXJlZnVsbHkgbWFuYWdlcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgd29yayBpdHNlbGYuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgc2V0dGluZyB1cCB0aGUgc3RydWN0dXJlcywgdGhlIG1lbW9yeSwgdGhlIG1ldGFkYXRhLCBldmVyeXRoaW5nIG5lZWRlZCB0byByZXByZXNlbnQgYSBwYXJ0aWN1bGFyIGZsb3cgdGhhdCYjMzk7cyBiZWluZyBvZmZsb2FkZWQuIFRoZSBzcGVjaWZpYyBpbnRlcm5hbHMgb2YgKmhvdyogaXQmIzM5O3MgZG9uZeKAlHRoZSBhbGdvcml0aG1zLCB0aGUgcG90ZW50aWFsIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMsIGFsbCBvZiB0aGF0IGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgb2ZmbG9hZCBhcmNoaXRlY3R1cmUsIHdoaWNoIEkmIzM5O2xsIG5lZWQgdG8ga25vdy4gVGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW4gcmVzb3VyY2VzIGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCBhbmQgYWxzbyB3aWxsIGhhbmRsZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb25lIGNvcnJlY3RseSwgYW5kIHRoZSByaWdodCBzdHJ1Y3R1cmVzIGFyZSBjb3JyZWN0bHkgaW4gcGxhY2UuIEl0IHdpbGwgdGFrZSB0aW1lIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUgd29yayBhbGxvY2F0ZWQgaXMgZG9uZSBpbiBhIHRpbWVseSBtYW5uZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfb2ZmbG9hZF93b3JrX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwODY9c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwODc6bmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2Moc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDg4LVx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHVuc2lnbmVkIGludCBjbWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTE4PXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyMi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEyMzpcdG9mZmxvYWQgPSBuZl9mbG93X29mZmxvYWRfd29ya19hbGxvYyhmbG93dGFibGUsIGZsb3csIEZMT1dfQ0xTX1JFUExBQ0UpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTI0LVx0aWYgKCFvZmZsb2FkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE0MD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9kZWwoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE0NC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE0NTpcdG9mZmxvYWQgPSBuZl9mbG93X29mZmxvYWRfd29ya19hbGxvYyhmbG93dGFibGUsIGZsb3csIEZMT1dfQ0xTX0RFU1RST1kpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTQ2LVx0aWYgKCFvZmZsb2FkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE1Mz12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTYyLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTYzOlx0b2ZmbG9hZCA9IG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2FsbG9jKGZsb3d0YWJsZSwgZmxvdywgRkxPV19DTFNfU1RBVFMpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTY0LVx0aWYgKCFvZmZsb2FkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODY0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRocm91Z2ggaXQgYXMgeW91IGFza2VkOgoKKipBbmFseXppbmcgRmxvdyBPZmZsb2FkIEVudHJ5IFBvaW50cyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZl9mbG93X29mZmxvYWRfcmVmcmVzaGAsIGBuZl9mbG93X29mZmxvYWRfZGVsYCwgYW5kIGBuZl9mbG93X29mZmxvYWRfc3RhdHNgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIG1hbmFnaW5nIGZsb3cgb2ZmbG9hZCwgZnJvbSB3aGF0IEkgY2FuIGdhdGhlci4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGRlcGVuZGVuY2llcyBoZXJlLiBBcmUgdGhlc2UgZnVuY3Rpb25zIHB1cmVseSBpbnRlcm5hbCB0byB0aGlzIHNwZWNpZmljIG1vZHVsZSwgb3IgYXJlIHRoZXkgZXhwb3J0ZWQgYW5kIHV0aWxpemVkIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhleSYjMzk7cmUgcHVibGljIGludGVyZmFjZXMsIG9yIGlmIHRoZXkmIzM5O3JlIHRpZ2h0bHkgY291cGxlZCB3aXRoaW4gYSBzcGVjaWZpYyBzdWJzeXN0ZW0uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgc2lnbmlmaWNhbnQgYW55IGNoYW5nZXMgdG8gdGhlbSBtaWdodCBiZSwgYW5kIHdoYXQgaW1wYWN0IHRoYXQgd291bGQgaGF2ZSBvbiB0aGUgc3lzdGVtLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSByZWZlcmVuY2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfZGVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01Njg9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU4Ni1cdFx0XHRpZiAoIXRlc3RfYml0KE5GX0ZMT1dfSFdfRFlJTkcsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1ODc6XHRcdFx0XHRuZl9mbG93X29mZmxvYWRfZGVsKGZsb3dfdGFibGUsIGZsb3cpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01ODgtXHRcdFx0ZWxzZSBpZiAodGVzdF9iaXQoTkZfRkxPV19IV19ERUFELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU5NS1cdFx0ICAgIXRlc3RfYml0KE5GX0ZMT1dfSFdfRFlJTkcsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU5NjpcdFx0bmZfZmxvd19vZmZsb2FkX2RlbChmbG93X3RhYmxlLCBmbG93KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTk3LVx0fSBlbHNlIGlmICh0ZXN0X2JpdChORl9GTE9XX0hXLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MjA9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfYWRkX3dxO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyMTpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTIyLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZfZmxvd19vZmZsb2FkX3N0YXRzX3dxO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA3MD1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc4LVx0XHRORl9GTE9XX1RBQkxFX1NUQVRfSU5DX0FUT01JQyhuZXQsIGNvdW50X3dxX2RlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzk6XHRcdHF1ZXVlX3dvcmsobmZfZmxvd19vZmZsb2FkX2RlbF93cSwgXHUwMDI2b2ZmbG9hZC1cdTAwM2V3b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA4MC1cdH0gZWxzZSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTMwPXZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTM5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTQwOnZvaWQgbmZfZmxvd19vZmZsb2FkX2RlbChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNDEtXHRcdFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTcwPXZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3Mi1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzM6XHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3NC1cdFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd3RhYmxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE4MS1cdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgyOlx0XHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExODMtXHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfc3RhdHNfd3EpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTI5OT1pbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMDUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDY6XHRuZl9mbG93X29mZmxvYWRfZGVsX3dxICA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtuZl9mdF9vZmZsb2FkX2RlbFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNy1cdFx0XHRcdFx0XHQgIFdRX1VOQk9VTkQgfCBXUV9TWVNGUywgMCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDg6XHRpZiAoIW5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMDktXHRcdGdvdG8gZXJyX2RlbF93cTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMTgtZXJyX3N0YXRzX3dxOlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzE5Olx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjAtZXJyX2RlbF93cTpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEzMjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyNy1cdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI4Olx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjktXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfc3RhdHNfd3EpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY0MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgbmZfZmxvd19vZmZsb2FkX2RlbGAgaXMgYmVpbmcgdHJpZ2dlcmVkIGZyb20gYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYC4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbiBvciBjbGVhbnVwIG9mIGZsb3cgb2ZmbG9hZCBlbnRyaWVzLCB3aGljaCBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBJdCYjMzk7cyB0cmlnZ2VyZWQgYnkgYSBHQyBwcm9jZXNzLCBzbyBpdCBtYWtlcyBzZW5zZS4KCk9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYWRkaXRpb24gc2lkZSBvZiB0aGluZ3MgYXBwZWFycyBoYW5kbGVkIGJ5IGBuZl9mbG93X29mZmxvYWRfYWRkYCwgd2hpY2ggb3JpZ2luYXRlcyBmcm9tIGBmbG93X29mZmxvYWRfYWRkYCB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfY29yZS5jYC4gVGhpcyBzdWdnZXN0cyB0aGF0IGBuZl9mbG93X29mZmxvYWRfYWRkYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgYWRkaW5nIG5ldyBmbG93cyB0byB0aGUgb2ZmbG9hZCB0YWJsZS4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBmaWxlIG5hbWUgYXMgd2VsbC4gVGhlc2UgYXJlIHRoZSB0d28gcHJpbWFyeSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgaGVyZS4gTG9va3MgbGlrZSB0aGUgY29yZSBhZGRpdGlvbiBpcyBnb2luZyBvbiBpbiB0aGUgY29yZSBmaWxlLCBhbmQgdGhlbiB0aGUgR0MgYW5kIERlbGV0aW9uIGlzIGdvaW5nIG9uIGluIHRoZSBvZmZsb2FkIGZpbGUuIEl0IGxvb2tzIHRvIGJlIGEgZ29vZCwgY2xlYW4sIG1vZHVsYXIgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zMjg9aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1My1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzU0Olx0XHRuZl9mbG93X29mZmxvYWRfYWRkKGZsb3dfdGFibGUsIGZsb3cpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTUtXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjA6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfYWRkX3dxO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMS1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDcwPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9xdWV1ZV93b3JrKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNzUtXHRcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA3NjpcdFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcdTAwMjZvZmZsb2FkLVx1MDAzZXdvcmspO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc3LVx0fSBlbHNlIGlmIChvZmZsb2FkLVx1MDAzZWNtZCA9PSBGTE9XX0NMU19ERVNUUk9ZKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTE4PXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEzMDp2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTMxLVx0XHRcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE3OD12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgwLVx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE4MTpcdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgyLVx0XHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjk5PWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMwMTpcdG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O25mX2Z0X29mZmxvYWRfYWRkXCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAyLVx0XHRcdFx0XHRcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMwMzpcdGlmICghbmZfZmxvd19vZmZsb2FkX2FkZF93cSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzIwLWVycl9kZWxfd3E6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMjE6XHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMi1cdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTMyNT12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjYte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI3Olx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjgtXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCB0aGlua2luZyBpcyB0aGF0IGBmbG93X29mZmxvYWRfYWRkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBsb29rIGxpa2Ugc3Ryb25nIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBCdXQsIGhvbGQgb24gYSBzZWNvbmTigKYgYGZsb3dfb2ZmbG9hZF9hZGRgLCB0aGF0JiMzOTtzIHRoZSAqY29yZSogZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8gT2theSwgcmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBMZXQgbWUgc2VlLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoZXJlIGV4YWN0bHkgYGZsb3dfb2ZmbG9hZF9hZGRgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0IG1lIGNoZWNrIHRoZSBjYWxsIGNoYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zMDk9dW5zaWduZWQgbG9uZyBmbG93X29mZmxvYWRfZ2V0X3RpbWVvdXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMyNy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzI4OmludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMyOS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTMtXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM1NDpcdFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzU1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzU3LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzU4OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hZGQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTktXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjA6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfYWRkX3dxO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMS1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDcwPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9xdWV1ZV93b3JrKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNzUtXHRcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA3NjpcdFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcdTAwMjZvZmZsb2FkLVx1MDAzZXdvcmspO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc3LVx0fSBlbHNlIGlmIChvZmZsb2FkLVx1MDAzZWNtZCA9PSBGTE9XX0NMU19ERVNUUk9ZKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTE4PXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEzMDp2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTMxLVx0XHRcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE3OD12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgwLVx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE4MTpcdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgyLVx0XHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjk5PWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMwMTpcdG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O25mX2Z0X29mZmxvYWRfYWRkXCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAyLVx0XHRcdFx0XHRcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMwMzpcdGlmICghbmZfZmxvd19vZmZsb2FkX2FkZF93cSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzIwLWVycl9kZWxfd3E6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMjE6XHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMi1cdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTMyNT12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjYte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI3Olx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjgtXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz01MD1zdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEyMC1cdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTIxOlx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTIyLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRGVlcCBEaXZlIGludG8gdGhlIEZsb3cgT2ZmbG9hZCBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaXQgbG9va3MgbGlrZSBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBpcyBjYWxsaW5nIGBmbG93X29mZmxvYWRfYWRkYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIGBuZl9mbG93X29mZmxvYWRfYWRkYCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHF1ZXVlaW5nIHRoZSBhY3R1YWwgd29yay4gTWFrZXMgbWUgd29uZGVyIGhvdyB0aGUgcmVtb3ZhbCBwcm9jZXNzIHdvcmtzLCBzbyBJJiMzOTtsbCBjaGVjayBgbmZfZmxvd19vZmZsb2FkX2RlbGAgYW5kIGBuZl9mbG93X29mZmxvYWRfYWRkYCB3aGlsZSBJJiMzOTttIGF0IGl0LiBIb2xkIG9uLCBgbmZfZmxvd19vZmZsb2FkX2FkZGAgaXMgKmNvbmRpdGlvbmFsbHkqIGNhbGxlZCBmcm9tIGBmbG93X29mZmxvYWRfYWRkYOKAlG9ubHkgaWYgYG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpYCBldmFsdWF0ZXMgdG8gdHJ1ZS4gQWhhISBOb3cgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogd2hhdCB0cmlnZ2VycyBgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWRgPyBTZWVtcyB0byBiZSB0aWVkIHRvIHRoZSBgTkZfRkxPV1RBQkxFX0hXX09GRkxPQURgIGZsYWcuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYG5mdF9mbG93X29mZmxvYWQuY2Agc291cmNlIGNvZGUgdG8gc2VlIGhvdyBpdCB1c2VzIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHRvIGVuYWJsZSB0aGlzIGhhcmR3YXJlIG9mZmxvYWQgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NDE9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2N0X3RjcChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNDktXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzo1MDpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNTEtXHRcdFx0XHQgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjIwLVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCkpLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjIxOlx0LmV2YWxcdFx0PSBuZnRfZmxvd19vZmZsb2FkX2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMjItXHQuaW5pdFx0XHQ9IG5mdF9mbG93X29mZmxvYWRfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGlzIHRocm91Z2g6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZGAgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgKnRoZSogZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBldmFsdWF0aW9uIHdvcmsgZm9yIHRoZSBgZmxvd19vZmZsb2FkYCBleHByZXNzaW9uIHdpdGhpbiB0aGUgbmZ0YWJsZXMgZnJhbWV3b3JrLiBObyBhbWJpZ3VpdHkgdGhlcmUuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGlzIGEgcGF0aCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYmVpbmcgdHJhdmVsZWQsIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucy4uLiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0aGF0IGdvdmVybnMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGBORlRfRkxPV19PRkZMT0FEYC4gVGhhdOKAmXMgbXkga2V5IHRvIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCBzb3VyY2UgY29kZSBhbmQgaXRzIHNldHRpbmdzLiBJIGNhbiB1c2UgdGhpcyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgaXMgYmVpbmcgdXNlZCBhbmQgaG93IHRvIGFjY2VzcyByZWxldmFudCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19vZmZsb2FkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMj1vYmotJChDT05GSUdfTkZUX0NUKVx0XHQmIzQzOz0gbmZ0X2N0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEzOm9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVx0JiM0Mzs9IG5mdF9mbG93X29mZmxvYWQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTQtb2JqLSQoQ09ORklHX05GVF9MSU1JVClcdFx0JiM0Mzs9IG5mdF9saW1pdC5vXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9MjE3PXN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmxvd19vZmZsb2FkX3R5cGU7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMTg6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMTktXHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9mbG93X29mZmxvYWRfdHlwZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMzA9c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9mbG93X29mZmxvYWRfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMxLVx0Lm5hbWVcdFx0PSBcJiMzNDtmbG93X29mZmxvYWRcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzI6XHQub3BzXHRcdD0gXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzMtXHQucG9saWN5XHRcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9wb2xpY3ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTgxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIEZsb3cgT2ZmbG9hZCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIGBORlRfRkxPV19PRkZMT0FEYC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBuZXRmaWx0ZXIsIGFuZCBsaWtlbHkgYW55IHJlbGF0ZWQgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHksIHNob3VsZCBiZSBkZWZpbmVkLiBMZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIHRoZXJlLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHNldHRpbmdzIGxvb2sgbGlrZS4gR290dGEgdW5kZXJzdGFuZCBpdHMgaW50ZWdyYXRpb24uIE15IGV4cGVydGlzZSBpbiBuZXRmaWx0ZXIgdGVsbHMgbWUgdGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZ2l2ZXMgbWUgdGhlIGluZm9ybWF0aW9uIG9uIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyB0aGlzIG9mZmxvYWQgcmVsaWVzIG9uLCBhbmQgaWYgaXQgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9GTE9XX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5GVF9GTE9XX09GRkxPQURgIOKAkyB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGNvbmZpZyBJIG5lZWQgdG8gZm9jdXMgb24uIE15IG5leHQgc3RlcCBpcyB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcuIFRoZSBjb3JlIGxvZ2ljIGZvciB0aGlzIHNlZW1zIHRvIGJlIG5lc3RsZWQgd2l0aGluIGBuZl9mbG93X3RhYmxlX29mZmxvYWQuY2AsIGFuZCB0aGF0IGNvZGUgaXMgb25seSBjb21waWxlZCBpZiBgTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kOyBpdCBjb25maXJtcyB0aGF0IGJvdGggYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgYXJlIGV4YWN0bHkgd2hhdCBJIHN1c3BlY3RlZC4gSSBrbm93IHRoYXQgYE5GX1RBQkxFU2AgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBlc3NlbnRpYWwgZGVwZW5kZW5jaWVzIGhlcmUsIHNvIHRob3NlIGFyZSBhdXRvbWF0aWNhbGx5IGFjY291bnRlZCBmb3IsIG5vIGZ1cnRoZXIgYWN0aW9uIHJlcXVpcmVkLiBMZXQgbWUganVzdCBjaGVjayBpZiB0aG9zZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBsaWtlIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZfRkxPV19UQUJMRV9JUFY0YCwgYW5kIGBORl9GTE9XX1RBQkxFX0lQVjZgIGFyZSByZWxldmFudCBpbiB0aGlzIGNvbnRleHQg4oCTIGFoLCB3YWl0IGEgbWludXRlLCBJIHNwb3R0ZWQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgZWFybGllciwgc28gaXQmIzM5O3MgY2xlYXJseSBhY3RpdmUgYW5kIHJlbGV2YW50LiBSaWdodCwgdGhhdCBjb25maXJtcyB0aGUgY29yZSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEVfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTcxMT1jb25maWcgTkZfRkxPV19UQUJMRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwOTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZsb3cgdGFibGUgY29uZmlndXJhdGlvbnMgd2l0aGluIE5ldGZpbHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgb3B0aW9ucyBmb3IgZW5hYmxpbmcsIGRpc2FibGluZywgYW5kIHR1bmluZyBmbG93IHRhYmxlIGJlaGF2aW9yIGZvciBib3RoIElQdjQgYW5kIElQdjYgdHJhZmZpYy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzExCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNjEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY29yZSBjb25maWd1cmF0aW9uczogYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19ORVRGSUxURVJfSU5HUkVTU2AgaXMgYSBkZXBlbmRlbmN5IG9mIGBORl9GTE9XX1RBQkxFYCwgc28gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyB3ZWxsLiBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGNoYW5naW5nLgoKTm93LCB0byBuYWlsIGRvd24gdGhlIHNwZWNpZmljcywgSSYjMzk7bGwgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbGAgYXJlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGJlaW5nIHR3ZWFrZWQuIFRoZSByZWFsIGVudHJ5IHBvaW50cywgdGhlIG9uZXMgSSBuZWVkIHRvIGV4YW1pbmUgaW4gZGV0YWlsLCBhcmU6IGBuZl9mbG93X29mZmxvYWRfYWRkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgLCBgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2hgLCBgbmZfZmxvd19vZmZsb2FkX3N0YXRzYCwgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaGAsIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cGAsIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBgLCBgZmxvd19vZmZsb2FkX2FkZGAsIGFuZCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYC4KCkZpcnN0LCBJIHNob3VsZCBjaGVjayBpZiBgbmZfZmxvd19vZmZsb2FkX2FkZGAgaXMgZXhwb3J0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGtub3dpbmcgaXRzIHZpc2liaWxpdHkgd2lsbCBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwobmZfZmxvd19vZmZsb2FkX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MzIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIE1pc3NpbmcgYG5mX2Zsb3dfb2ZmbG9hZF9hZGRgIFN5bWJvbCoqCgpPa2F5LCBzbyBJJiMzOTttIGVuY291bnRlcmluZyBhIHNuYWcuIEkgd2FzIGV4cGVjdGluZyBgbmZfZmxvd19vZmZsb2FkX2FkZGAgdG8gYmUgZXhwb3J0ZWQsIGJ1dCB0aGUgbGlua2VyJiMzOTtzIGNvbXBsYWluaW5nLiBUaW1lIHRvIGRpZyBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBuZl9mbG93X3RhYmxlX29mZmxvYWQuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24sIG9yIGF0IGxlYXN0IHRoZSBkZWNsYXJhdGlvbiwgb2YgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIG5vdCB2aXNpYmxlIGFuZCB3aGF0JiMzOTtzIHByZXZlbnRpbmcgaXRzIHVzZS4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpdHNlbGYgd2lsbCBwcm92aWRlIHNvbWUgY2x1ZXMgYXMgdG8gdGhlIGludGVuZGVkIHNjb3BlIG9yIGFueSBpbnRlcm5hbCBsaW1pdGF0aW9ucy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuLi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIwOnN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZfZmxvd19vZmZsb2FkX2FkZF93cTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjEtc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfZGVsX3dxO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA3MD1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc1LVx0XHRORl9GTE9XX1RBQkxFX1NUQVRfSU5DX0FUT01JQyhuZXQsIGNvdW50X3dxX2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzY6XHRcdHF1ZXVlX3dvcmsobmZfZmxvd19vZmZsb2FkX2FkZF93cSwgXHUwMDI2b2ZmbG9hZC1cdTAwM2V3b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA3Ny1cdH0gZWxzZSBpZiAob2ZmbG9hZC1cdTAwM2VjbWQgPT0gRkxPV19DTFNfREVTVFJPWSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTExOD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMjktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMzA6dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEzMS1cdFx0XHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE4MC1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExODE6XHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE4Mi1cdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTI5OT1pbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDE6XHRuZl9mbG93X29mZmxvYWRfYWRkX3dxICA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtuZl9mdF9vZmZsb2FkX2FkZFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMi1cdFx0XHRcdFx0XHQgIFdRX1VOQk9VTkQgfCBXUV9TWVNGUywgMCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDM6XHRpZiAoIW5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMDQtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMC1lcnJfZGVsX3dxOlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzIxOlx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjItXHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEzMjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzI2LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyNzpcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzI4LVx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmbG93IG9mZmxvYWQgc2l0dWF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgc29tZXRoaW5nIGlzbiYjMzk7dCBleHBvcnRlZCBidXQgKmFsc28qIGlzbiYjMzk7dCBzdGF0aWMuIEl0JiMzOTtzIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGBuZl9mbG93X3RhYmxlYCBtb2R1bGUuIFRoZW4gYGZsb3dfb2ZmbG9hZF9hZGRgICppcyogZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIGEgdmlzaWJsZSBpbnRlcmZhY2UuIEFuZCBJJiMzOTt2ZSBnb3QgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAsIHdoaWNoIGlzICpzdGF0aWMqLiBIbW0sIGJ1dCBob2xkIG9uIOKAkyBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IHNlZW1zIHRvIGFjdCBhcyBhbiBlbnRyeSBwb2ludCBmb3IgdGhlIG5mdGFibGVzIGV4cHJlc3Npb24uIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsISBOb3csIHdoYXQgYWJvdXQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGA/IEFoLCB5ZXMsICp0aGF0KiBpcyBleHBvcnRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Njg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaW5ldCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTcwLVx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjcxOlx0LnNldHVwXHRcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03Mi1cdC5hY3Rpb25cdFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaW5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTc4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy04MC1cdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo4MTpcdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODItXHQuYWN0aW9uXHRcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz04OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY2ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTAtXHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6OTE6XHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkyLVx0LmFjdGlvblx0XHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTI1Nj1zdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjc0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjc1OmludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjc2LVx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTYtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjk3OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjMzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEZsb3cgT2ZmbG9hZCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gc29tZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBmb2N1cy4gTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQuLi4gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIGBmbG93X29mZmxvYWRfYWRkYC4gSXQmIzM5O3MgZXhwb3J0ZWQsIGFuZCBpdCYjMzk7cyB1c2VkIHdpdGhpbiBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCwgc28gaXQgd2FycmFudHMgYSBsb29rLiBNb3Zpbmcgb24sIHdoYXQgYWJvdXQgYG5mX2Zsb3dfb2ZmbG9hZF9hZGRgPyBTaW5jZSBpdCYjMzk7cyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHRoYXQgb3BlbnMgaXQgdXAgYXMgYSBwb3RlbnRpYWwgc3ltYm9sIHRvIGV4YW1pbmUgY2xvc2VseS4gQW5kLCBhbG9uZyB0aGUgc2FtZSBsaW5lcywgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgIGxvb2tzIHByb21pc2luZyB0b28sIGFzIGl0JiMzOTtzIGFsc28gbm9uLXN0YXRpYy4gVG8gbWFrZSBzdXJlIG15IHNjb3BlIGlzIGNvcnJlY3QsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYm90aCBgbmZfZmxvd19vZmZsb2FkX2FkZGAgYW5kIGBuZl9mbG93X29mZmxvYWRfZGVsYCBhcmUgaW5kZWVkIGRlZmluZWQgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMTg9dm9pZCBuZl9mbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTI5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTMwOnZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMzEtXHRcdFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCBzb21lIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCB0aGF0IGFyZSBwb3RlbnRpYWwgYXJlYXMgZm9yIGZ1enppbmc6IGBuZl9mbG93X29mZmxvYWRfYWRkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgLCBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYCwgYW5kIGBmbG93X29mZmxvYWRfYWRkYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGVzZS4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBgbmZfZmxvd19vZmZsb2FkX2FkZGAgaXMgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBpdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBhIGZsb3cgaXMgYWRkZWQgdG8gdGhlIGZsb3cgdGFibGUgYW5kIGhhcmR3YXJlIG9mZmxvYWQgaXMgYWN0aXZlLiBJdCBxdWV1ZXMgYSB3b3JrIGl0ZW0uIFNpbmNlIGl0JiMzOTtzIHBlci1mbG93LCBub3QgcGVyLXBhY2tldCwgZnV6emluZyBpdCBzaG91bGRuJiMzOTt0IGludHJvZHVjZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBjb25jZXJucy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHdvbmRlcmluZyBpZiBqdXN0IGBORl9GTE9XX1RBQkxFYCBhbmQgYE5GVF9GTE9XX09GRkxPQURgIGFyZSBzdWZmaWNpZW50IGZvciBlbmFibGluZyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4gQWZ0ZXIgcmV2aWV3aW5nIHRoZSBkZXBlbmRlbmNpZXMsIGl0IGFwcGVhcnMgdGhhdCBgTkZfRkxPV19UQUJMRWAgZGVwZW5kcyBvbiBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLCB3aGlsZSBgTkZUX0ZMT1dfT0ZGTE9BRGAgZGVwZW5kcyBvbiBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBTbywgeWVzLCBlbmFibGluZyBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBzaG91bGQgY292ZXIgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MuIEFoLCBgTkZfRkxPV19UQUJMRV9JTkVUYCBsb29rcyBsaWtlIGEgZ29vZCBhZGRpdGlvbi4gSSYjMzk7bGwgYWRkIHRoYXQgdG8gdGhlIGxpc3Qgb2YgY29uZmlncy4KCldhaXQsIHRoZSBjb2RlIGluIHF1ZXN0aW9uLCBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLCBpcyBwYXJ0IG9mIHRoZSBmbG93IG9mZmxvYWQgc3lzdGVtLiBTbyBpcyBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGBORl9GTE9XX1RBQkxFYCBpcyBlbmFibGVkPyBMb29raW5nIGF0IHRoZSBidWlsZCBvdXRwdXQsIGBuZl9mbG93X3RhYmxlX29mZmxvYWQub2AgaXMgaW5kZWVkIHdpdGhpbiBgbmZfZmxvd190YWJsZS1vYmpzYC4gSG93ZXZlciwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0byBhY3R1YWxseSB0cmlnZ2VyIHRoZSBoYXJkd2FyZSBvZmZsb2FkLiBUbyBkbyB0aGF0LCBJIG5lZWQgYG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpYCB0byByZXR1cm4gdHJ1ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgc2V0IHRvIHByb2NlZWQgd2l0aCBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd3RhYmxlX2h3X29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTMyOD1pbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzUyLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNTM6XHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1NC1cdFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTM2MD12b2lkIGZsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNzAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM3MTpcdGlmIChsaWtlbHkoIW5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKSB8fFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNzItXHQgICAgdGVzdF9iaXQoTkZfRkxPV19DTE9TSU5HLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzA9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzEte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTcyOlx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3My1cdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE3OD12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzkte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgwOlx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE4MS1cdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTI3NT1pbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyODItXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyODM6XHRpZiAoIW5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyODQtXHRcdHJldHVybiBuZl9mbG93X29mZmxvYWRfeGRwX3NldHVwKGZsb3d0YWJsZSwgZGV2LCBjbWQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTA0PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xODktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjE5MDpcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMTkxLVx0ICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby1cdTAwM2VkZXYpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWRgIHRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBzb2xpZCBkZWZpbml0aW9uLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIHRvIGJ1aWxkIGEgY29uY2VwdHVhbCBmcmFtZXdvcmsgZm9yIGhvdyB0aGlzIG9mZmxvYWRpbmcgbWVjaGFuaXNtIHdvcmtzIHdpdGhpbiB0aGUgYnJvYWRlciBOZXRmaWx0ZXIgZWNvc3lzdGVtLiBLbm93aW5nIHRoZSBleGFjdCBkZWZpbml0aW9uIHdpbGwgaW5mb3JtIHRoZSBuZXh0IGxldmVsIG9mIG15IGludmVzdGlnYXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBhbnkgYXNzdW1wdGlvbnMgbmVlZCB0byBiZSBjaGVja2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93dGFibGVfaHdfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD03Nj1zdHJ1Y3QgbmZfZmxvd3RhYmxlIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTg4LVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo4OTpzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC05MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODgwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBuZl9mbG93X3RhYmxlLmgqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgODkuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGNydWNpYWwgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIE5ldGZpbHRlciBmbG93IHRhYmxlIGltcGxlbWVudGF0aW9uIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBzZWUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBtYWluIGZsb3cgdGFibGUgc3RydWN0dXJlIGl0c2VsZiwgbWF5YmUgdGhlIGluZGl2aWR1YWwgZmxvdyBlbnRyeSBzdHJ1Y3R1cmUsIGFuZCBwb3RlbnRpYWxseSBhbnkgcmVsYXRlZCBsb2NraW5nIHByaW1pdGl2ZXMgb3IgaGVscGVyIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgd2UgY2FuIGRpZyB1cCB0aGVyZS4gUGVyaGFwcyBJIGNhbiBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgaW4gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XG4gIDgxOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XHRcdC8qIHNsb3dwYXRoIHBhcnRzICovXG4gIDgyOlx0XHRjb25zdCBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGVcdCp0eXBlO1xuICA4MzpcdFx0c3RydWN0IGRlbGF5ZWRfd29ya1x0XHRnY193b3JrO1xuICA4NDpcdFx0c3RydWN0IGZsb3dfYmxvY2tcdFx0Zmxvd19ibG9jaztcbiAgODU6XHRcdHN0cnVjdCByd19zZW1hcGhvcmVcdFx0Zmxvd19ibG9ja19sb2NrOyAvKiBHdWFyZHMgZmxvd19ibG9jayAqL1xuICA4NjpcdFx0cG9zc2libGVfbmV0X3RcdFx0XHRuZXQ7XG4gIDg3Olx0fTtcbiAgODg6XHRcbiAgODk6XHRzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuICA5MDpcdHtcbiAgOTE6XHRcdHJldHVybiBmbG93dGFibGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIge1xuICA5NTpcdFx0RkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCA9IElQX0NUX0RJUl9PUklHSU5BTCxcbiAgOTY6XHRcdEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkgPSBJUF9DVF9ESVJfUkVQTFksXG4gIDk3Olx0fTtcbiAgOTg6XHQjZGVmaW5lIEZMT1dfT0ZGTE9BRF9ESVJfTUFYXHRJUF9DVF9ESVJfTUFYXG4gIDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDIzCgkJCQkJCQlvdXRwdXQ6IDIyNAoJCQkJCQkJdGhvdWdodHM6IDU3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaGFyZHdhcmUgb2ZmbG9hZCBsb2dpYy4gTXkgaW5pdGlhbCBzY2FuIGNoZWNrcyBgZmxvd3RhYmxlLSZndDtmbGFncyAmYW1wOyBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAuIFRoYXQgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZmxvd3RhYmxlIGlzIGNyZWF0ZWQgd2l0aCB0aGUgYG9mZmxvYWRgIGZsYWcgaW4gbmZ0YWJsZXMg4oCTIGl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS4KClRoZSBjb3JlIG9mIHRoZSBmaXggaW52b2x2ZXMgc2V0dGluZyB0aGUgYE5GX0ZMT1dfSFdfREVBRGAgZmxhZyAqYWZ0ZXIqIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgdGhlIGNydWNpYWwgYWRkaXRpb24gb2YgYSBtZW1vcnkgYmFycmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaXJlY3RseSBhZGRyZXNzaW5nIGEgY29uY3VycmVuY3kgaXNzdWUuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBjb25jdXJyZW5jeSBmaXgsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQgaGVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGZpeCBhZGRyZXNzZXMgdGhlIHJhY2UgY29uZGl0aW9uIHdpdGhvdXQgaW50cm9kdWNpbmcgbmV3IHByb2JsZW1zLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgYG5mX2Zsb3dfb2ZmbG9hZF9hZGRgLCBgbmZfZmxvd19vZmZsb2FkX2RlbGAsIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBgLCBhbmQgYGZsb3dfb2ZmbG9hZF9hZGRgLiBJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSwgYW5kIHRoZXkgYXJlLCB0aHJvdWdoIHRoZSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gb2YgbmZ0YWJsZXMgZmxvd3RhYmxlcyB3aXRoIHRoZSBgb2ZmbG9hZGAgZmxhZyBhbmQgdGhlbiB3aGVuIHRyYWZmaWMgbWF0Y2hlcyB0aGVzZSBmbG93dGFibGUgcnVsZXMuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgZGVmaW5pdGVseSBuZWVkIGBORl9GTE9XX1RBQkxFYCwgYE5GVF9GTE9XX09GRkxPQURgLCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBJJiMzOTtkIGp1c3QgaW5jbHVkZSBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgIHRvIGJlIHNhZmUsIGJ1dCB0aGVuIEkgcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBuZWVkIHRvIGZvbGxvdyB0aG9zZSBpbnN0cnVjdGlvbnMgYW5kIGxvb2sgZm9yICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIGBLY29uZmlnYC4gVGhleSBhcmVuJiMzOTt0IHNwZWNpZmljYWxseSBub24tc3RhbmRhcmQsIGJ1dCB0aGV5IGFyZSByZXF1aXJlZC4gSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGFsbCB0aHJlZS4KCk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIGhhbmRsZXIuIEl0IGRlbGF5cyBzZXR0aW5nIHRoZSBgTkZfRkxPV19IV19ERUFEYCBmbGFnIGFuZCBhZGRzIGEgbWVtb3J5IGJhcnJpZXIgdG8gY29ycmVjdCB0aGUgZmxhdy4gVGhlIHJlbGV2YW50IGNvZGUgaXMgdHJpZ2dlcmVkIGJ5IG5mdGFibGVzIGhhcmR3YXJlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBmdXp6aW5nIGlzIGFuIGltcG9ydGFudCBzdGVwIHRvIHZhbGlkYXRlIHRoZSBmaXggYW5kIHJ1bGUgb3V0IG5ldyBpc3N1ZXMuIEkmIzM5O2xsIGZsYWcgaXQgYXMgc3VjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2RlbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIHdvcmtxdWV1ZSBoYW5kbGVyIGJ5IGRlbGF5aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBORl9GTE9XX0hXX0RFQUQgZmxhZyB1bnRpbCBhZnRlciB0aGUgd29ya2VyJiMzOTtzIGxhc3QgZmxvdyBhY2Nlc3MgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyB3aGVuIGhhcmR3YXJlIG9mZmxvYWQgaXMgZW5hYmxlZCBmb3IgYSBmbG93dGFibGUuIEZ1enppbmcgdGhpcyBhcmVhIGNhbiBoZWxwIGVuc3VyZSB0aGF0IHRoZSBjb25jdXJyZW5jeSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2RlbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIHdvcmtxdWV1ZSBoYW5kbGVyIGJ5IGRlbGF5aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBORl9GTE9XX0hXX0RFQUQgZmxhZyB1bnRpbCBhZnRlciB0aGUgd29ya2VyJiMzOTtzIGxhc3QgZmxvdyBhY2Nlc3MgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyB3aGVuIGhhcmR3YXJlIG9mZmxvYWQgaXMgZW5hYmxlZCBmb3IgYSBmbG93dGFibGUuIEZ1enppbmcgdGhpcyBhcmVhIGNhbiBoZWxwIGVuc3VyZSB0aGF0IHRoZSBjb25jdXJyZW5jeSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIHNldHRpbmcgb2YgdGhlIGBORl9GTE9XX0hXX0RFQURgIGJpdCBpbiBgb2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzYCBmcm9tIGBmbG93X29mZmxvYWRfd29ya19kZWwoKWAgdG8gdGhlIGVuZCBvZiBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcigpYCwgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgdG8gZW5zdXJlIGl0IGlzIHB1Ymxpc2hlZCBvbmx5IGFmdGVyIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBhY2Nlc3MgdG8gdGhlIGZsb3cuIFRoaXMgaXMgYSBmaXggZm9yIGEgY29uY3VycmVuY3kgaXNzdWUsIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIChVQUYpIGJ1ZyB3aGVyZSB0aGUgZmxvdyBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCB3aGlsZSB0aGUgd29ya2VyIHdhcyBzdGlsbCBhY2Nlc3NpbmcgaXQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIHJhY2UgY29uZGl0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKGxpa2UgS0NTQU4pLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWJmNzAzMzA5NGU3NTkxODA5YzY2YjJjOTgxOTAxZTBlYmVjNmIxYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDIyOjI2OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMKaW5kZXggODAxYTNkZDljZWVhMy4uNjc1N2ZkODljMWYxYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCkBAIC05OTUsNyAmIzQzOzk5NSw2IEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpCiAJZmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTsKIAlpZiAodGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCAmYW1wO29mZmxvYWQtJmd0O2Zsb3ctJmd0O2ZsYWdzKSkKIAkJZmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX1JFUExZKTsKLQlzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgJmFtcDtvZmZsb2FkLSZndDtmbG93LSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF90dXBsZV9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsCkBAIC0xMDU5LDYgJiM0MzsxMDU4LDEyIEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCX0KIAogCWNsZWFyX2JpdChORl9GTE9XX0hXX1BFTkRJTkcsICZhbXA7b2ZmbG9hZC0mZ3Q7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwlpZiAob2ZmbG9hZC0mZ3Q7Y21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHsKJiM0MzsJCS8qIFB1Ymxpc2ggYWZ0ZXIgdGhlIHdvcmtlciYjMzk7cyBsYXN0IGZsb3cgYWNjZXNzLiAqLwomIzQzOwkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiYjNDM7CQlzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgJmFtcDtvZmZsb2FkLSZndDtmbG93LSZndDtmbGFncyk7CiYjNDM7CX0KJiM0MzsKIAlrZnJlZShvZmZsb2FkKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNAoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA3NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIE9mZmxvYWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhleSYjMzk7dmUgbW92ZWQgdGhlIGBzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgJmFtcDtvZmZsb2FkLSZndDtmbG93LSZndDtmbGFncyk7YCBjYWxsIGZyb20gYGZsb3dfb2ZmbG9hZF93b3JrX2RlbCgpYCB0byB0aGUgZW5kIG9mIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKClgLCByaWdodCBhZnRlciBjbGVhcmluZyBgTkZfRkxPV19IV19QRU5ESU5HYCBhbmQgYmVmb3JlIGZyZWVpbmcgdGhlIGBvZmZsb2FkYCBzdHJ1Y3R1cmUuIFRoZXkmIzM5O3ZlIGFsc28gdGhyb3duIGluIGEgYHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO2AgbWVtb3J5IGJhcnJpZXIgYmVmb3JlIHNldHRpbmcgdGhlIGBORl9GTE9XX0hXX0RFQURgIGJpdC4KCk15IFNwaWRleS1TZW5zZSBpcyB0aW5nbGluZ+KAlHRoaXMgc2NyZWFtcyByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUuIEl0IGxvb2tzIGxpa2Ugc2V0dGluZyBgTkZfRkxPV19IV19ERUFEYCB0b28gZWFybHkgaW4gdGhlIGRlbGV0aW9uIHBhdGggKGBmbG93X29mZmxvYWRfd29ya19kZWwoKWApIG1pZ2h0IGhhdmUgYWxsb3dlZCBhbm90aGVyIHRocmVhZCwgbWF5YmUgc29tZSBzb3J0IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiBvciBzb21lIG90aGVyIHByb2Nlc3MsIHRvIGZyZWUgYG9mZmxvYWQtJmd0O2Zsb3dgIHdoaWxlIHRoZSB3b3JrZXIgdGhyZWFkIHdhcyBzdGlsbCB0cnlpbmcgdG8gYWNjZXNzIGl0LiBTbywgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlLiBMZXQmIzM5O3Mgc2VlLi4uCgpJIHdlbnQgdGhyb3VnaCBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcigpYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbCgpYCBpbiBteSBtaW5kLiBZZXMsIGBvZmZsb2FkLSZndDtmbG93YCBpcyBhY2Nlc3NlZCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aGluIGBmbG93X29mZmxvYWRfd29ya19kZWwoKWAsIGFuZCB0aGUgYml0IGJlaW5nIHNldCBtaWdodCBhbGxvdyBhIHByZW1hdHVyZSBmcmVlLiBUaGlzIGRlZmluaXRlbHkgaGFzIHRoZSBmaW5nZXJwcmludCBvZiBhIFVBRi4KCk5vdywgYSBrZXkgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgb3IgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBObywgbm90IHJlYWxseS4gSXQmIzM5O3MganVzdCByZWFycmFuZ2luZyBhIGJpdCBzZXR0aW5nIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gTm8gbmV3IHN0cnVjdHVyZXMsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm90aGluZyB0byBzdWdnZXN0IGluZm8tbGVha3MsIHNvIEkgc2hvdWxkIGJlIG9rYXkuCgpBZnRlciBhIHNlY29uZCBxdWljayByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyBhIGZpeCBmb3IgYSBVQUYuIENvbmN1cnJlbmN5IGlzIGRlZmluaXRlbHkgdGhlIHByb2JsZW0uIEtBU0FOIGlzIHRoZSB0b29sIGhlcmUsIG5vdCBLTVNBTi4gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCBteSByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBzZXR0aW5nIG9mIHRoZSBgTkZfRkxPV19IV19ERUFEYCBiaXQgaW4gYG9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VmbGFnc2AgZnJvbSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsKClgIHRvIHRoZSBlbmQgb2YgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoKWAsIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSBpdCBpcyBwdWJsaXNoZWQgb25seSBhZnRlciB0aGUgd29ya2VyJiMzOTtzIGxhc3QgYWNjZXNzIHRvIHRoZSBmbG93LiBUaGlzIGlzIGEgZml4IGZvciBhIGNvbmN1cnJlbmN5IGlzc3VlLCBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBidWcgd2hlcmUgdGhlIGZsb3cgY291bGQgYmUgZnJlZWQgYnkgYW5vdGhlciB0aHJlYWQgd2hpbGUgdGhlIHdvcmtlciB3YXMgc3RpbGwgYWNjZXNzaW5nIGl0LiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFuZCByYWNlIGNvbmRpdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChsaWtlIEtDU0FOKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgc2V0dGluZyBvZiB0aGUgYE5GX0ZMT1dfSFdfREVBRGAgYml0IGluIGBvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3NgIGZyb20gYGZsb3dfb2ZmbG9hZF93b3JrX2RlbCgpYCB0byB0aGUgZW5kIG9mIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKClgLCBhZGRpbmcgYSBtZW1vcnkgYmFycmllciB0byBlbnN1cmUgaXQgaXMgcHVibGlzaGVkIG9ubHkgYWZ0ZXIgdGhlIHdvcmtlciYjMzk7cyBsYXN0IGFjY2VzcyB0byB0aGUgZmxvdy4gVGhpcyBpcyBhIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVnIHdoZXJlIHRoZSBmbG93IGNvdWxkIGJlIGZyZWVkIGJ5IGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoZSB3b3JrZXIgd2FzIHN0aWxsIGFjY2Vzc2luZyBpdC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAobGlrZSBLQ1NBTikuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjozOS4yMjQyNjQ5ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NTkzNDAwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X29mZmxvYWRfYWRkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZGVsXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIixcbiAgICBcImZsb3dfb2ZmbG9hZF9hZGRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBzZXR0aW5nIG9mIHRoZSBgTkZfRkxPV19IV19ERUFEYCBiaXQgaW4gYG9mZmxvYWQtXFx1MDAzZWZsb3ctXFx1MDAzZWZsYWdzYCBmcm9tIGBmbG93X29mZmxvYWRfd29ya19kZWwoKWAgdG8gdGhlIGVuZCBvZiBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcigpYCwgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgdG8gZW5zdXJlIGl0IGlzIHB1Ymxpc2hlZCBvbmx5IGFmdGVyIHRoZSB3b3JrZXIncyBsYXN0IGFjY2VzcyB0byB0aGUgZmxvdy4gVGhpcyBpcyBhIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVnIHdoZXJlIHRoZSBmbG93IGNvdWxkIGJlIGZyZWVkIGJ5IGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoZSB3b3JrZXIgd2FzIHN0aWxsIGFjY2Vzc2luZyBpdC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAobGlrZSBLQ1NBTikuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhhcmR3YXJlIG9mZmxvYWQgd29ya3F1ZXVlIGhhbmRsZXIgYnkgZGVsYXlpbmcgdGhlIHNldHRpbmcgb2YgdGhlIE5GX0ZMT1dfSFdfREVBRCBmbGFnIHVudGlsIGFmdGVyIHRoZSB3b3JrZXIncyBsYXN0IGZsb3cgYWNjZXNzIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgd2hlbiBoYXJkd2FyZSBvZmZsb2FkIGlzIGVuYWJsZWQgZm9yIGEgZmxvd3RhYmxlLiBGdXp6aW5nIHRoaXMgYXJlYSBjYW4gaGVscCBlbnN1cmUgdGhhdCB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI2OjM5LjIyNDI3MTkxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0ODQwNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWJmNzAzMzA5NGU3NTkxODA5YzY2YjJjOTgxOTAxZTBlYmVjNmIxY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjoyNjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xcbmluZGV4IDgwMWEzZGQ5Y2VlYTMuLjY3NTdmZDg5YzFmMWEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcXG5AQCAtOTk1LDcgKzk5NSw2IEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXFxuIFxcdGZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XFxuIFxcdGlmICh0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdGZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7XFxuLVxcdHNldF9iaXQoTkZfRkxPV19IV19ERUFELCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfdHVwbGVfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxcbkBAIC0xMDU5LDYgKzEwNTgsMTIgQEAgc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdH1cXG4gXFxuIFxcdGNsZWFyX2JpdChORl9GTE9XX0hXX1BFTkRJTkcsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFncyk7XFxuK1xcdGlmIChvZmZsb2FkLVxcdTAwM2VjbWQgPT0gRkxPV19DTFNfREVTVFJPWSkge1xcbitcXHRcXHQvKiBQdWJsaXNoIGFmdGVyIHRoZSB3b3JrZXIncyBsYXN0IGZsb3cgYWNjZXNzLiAqL1xcbitcXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4rXFx0XFx0c2V0X2JpdChORl9GTE9XX0hXX0RFQUQsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFncyk7XFxuK1xcdH1cXG4rXFxuIFxcdGtmcmVlKG9mZmxvYWQpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjozOS45NTAxMzE4NzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDg1ODc2NTQwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X29mZmxvYWRfYWRkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZGVsXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIixcbiAgICBcImZsb3dfb2ZmbG9hZF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIHdvcmtxdWV1ZSBoYW5kbGVyIGJ5IGRlbGF5aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBORl9GTE9XX0hXX0RFQUQgZmxhZyB1bnRpbCBhZnRlciB0aGUgd29ya2VyJ3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkIGZvciBhIGZsb3d0YWJsZS4gRnV6emluZyB0aGlzIGFyZWEgY2FuIGhlbHAgZW5zdXJlIHRoYXQgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YmY3MDMzMDk0ZTc1OTE4MDljNjZiMmM5ODE5MDFlMGViZWM2YjFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjI6MjY6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuaW5kZXggODAxYTNkZDljZWVhMy4uNjc1N2ZkODljMWYxYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbkBAIC05OTUsNyArOTk1LDYgQEAgc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfZGVsKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcbiBcdGZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XG4gXHRpZiAodGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpKVxuIFx0XHRmbG93X29mZmxvYWRfdHVwbGVfZGVsKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xuLVx0c2V0X2JpdChORl9GTE9XX0hXX0RFQUQsIFx1MDAyNm9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF90dXBsZV9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXG5AQCAtMTA1OSw2ICsxMDU4LDEyIEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0fVxuIFxuIFx0Y2xlYXJfYml0KE5GX0ZMT1dfSFdfUEVORElORywgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKTtcbitcdGlmIChvZmZsb2FkLVx1MDAzZWNtZCA9PSBGTE9XX0NMU19ERVNUUk9ZKSB7XG4rXHRcdC8qIFB1Ymxpc2ggYWZ0ZXIgdGhlIHdvcmtlcidzIGxhc3QgZmxvdyBhY2Nlc3MuICovXG4rXHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuK1x0XHRzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKTtcbitcdH1cbitcbiBcdGtmcmVlKG9mZmxvYWQpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI2OjM5Ljk1MDEzNDA5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzQ3MjYwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZl9mbG93X3RhYmxlX29mZmxvYWQuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIHJlbG9jYXRpb24gb2YgYHNldF9iaXQoTkZfRkxPV19IV19ERUFELCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpO2AuIEl0IHNlZW1zIHRoZXkndmUgbW92ZWQgdGhhdCBiaXQtc2V0dGluZyBmcm9tIGBmbG93X29mZmxvYWRfd29ya19kZWxgIHRvIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGNvbW1hbmQgYG9mZmxvYWQtXHUwMDNlY21kYCBpcyBgRkxPV19DTFNfREVTVFJPWWAuIFRoYXQncyBpbnRlcmVzdGluZywgSSB3b25kZXIgYWJvdXQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBzaGlmdC4gUG90ZW50aWFsbHkgaXQncyByZWxhdGVkIHRvIHNvbWUgdGltaW5nIGlzc3VlIG9yIG1heWJlIGEgcmFjZSBjb25kaXRpb24gdGhleSdyZSB0cnlpbmcgdG8gcmVzb2x2ZS5cblxuVGhlIGFkZGl0aW9uIG9mIGBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKWAgaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdC4gQSBtZW1vcnkgYmFycmllciBoZXJlIHN1Z2dlc3RzIHRoZXkgYXJlIGNvbmNlcm5lZCBhYm91dCB0aGUgb3JkZXIgaW4gd2hpY2ggbWVtb3J5IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCwgbGlrZWx5IGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktY29yZSBlbnZpcm9ubWVudC4gVGhpcyBzdHJvbmdseSBpbmRpY2F0ZXMgdGhleSBhcmUgdHJ5aW5nIHRvIGVuc3VyZSB0aGF0IHRoZSBoYXJkd2FyZSBzZWVzIHRoZSBgTkZfRkxPV19IV19ERUFEYCBmbGFnIHNldCBiZWZvcmUgYSByZWxhdGVkIGF0b21pYyBvcGVyYXRpb24gb2NjdXJzLlxuXG5JJ20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AgYW5kIHVzZSBgZ3JlcHBlcmAgdG8gbG9jYXRlIGBmbG93X29mZmxvYWRfd29ya19kZWxgIGFuZCBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcmAuIENvbnRleHQgaXMga2luZy4gU2VlaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYWxsb3cgbWUgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyBvZiB0aGlzIGNoYW5nZS4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBvdGhlciBjb2RlIGludGVyYWN0cyB3aXRoIGBvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3NgIGFuZCBgRkxPV19DTFNfREVTVFJPWWAgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBMZXQncyBzZWUgaWYgdGhpcyBwYXRjaCBpcyBhIGJ1ZyBmaXgsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjo0NC42MjQ4NjM4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODA0MTE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbG93X29mZmxvYWRfd29ya19kZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk3Mz1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19hZGQoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTEtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5OTI6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfZGVsKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk5My17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwMzY9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNDgtXFx0XFx0Y2FzZSBGTE9XX0NMU19ERVNUUk9ZOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA0OTpcXHRcXHRcXHRmbG93X29mZmxvYWRfd29ya19kZWwob2ZmbG9hZCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDUwLVxcdFxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9ERUNfQVRPTUlDKG5ldCwgY291bnRfd3FfZGVsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MjY6NDQuNjkyOTA5NDAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyODQwNzI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB3aGVuIGBORl9GTE9XX0hXX0RFQURgIGdldHMgc2V0LiBUaGF0IHNvdW5kcyBsaWtlIGEgcHJldHR5IGNyaXRpY2FsIHRpbWluZyBjaGFuZ2UgaW4gdGhlIGZsb3cgdGFibGUgb2ZmbG9hZCBsb2dpYyB3aXRoaW4gbmV0ZmlsdGVyLiBJbW1lZGlhdGVseSwgbXkgaW50ZXJuYWwgcmFkYXIgcGluZ3Mg4oCTIGEgdGltaW5nIGNoYW5nZSBpbiB0aGF0IGFyZWEgb2Z0ZW4gcG9pbnRzIHRvIGNvbmN1cnJlbmN5IGJ1Z3MuIExpa2VseSBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBXZSBuZWVkIHRvIGFzc2VzcyB0aGlzIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBhIG5hc3R5IG1lbW9yeSBjb3JydXB0aW9uIGJ1ZywgYWJzb2x1dGVseSwgZnV6emluZyBpcyB3YXJyYW50ZWQgaGVyZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIHdlIG5lZWQgdG8gZW5hYmxlIHRvIGdldCBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgIGFjdGl2ZSBhbmQgZXhwb3NlIHRoZSByZWxldmFudCBjb2RlIHBhdGggZm9yIG91ciBmdXp6aW5nIGVmZm9ydHMuIExldCdzIGRpZyBpbnRvIHRoZSBjb25maWdzIGFuZCBnZXQgdGhlIGNvcnJlY3Qgc2V0IG9mIG9wdGlvbnMgdG8gcmVwcm9kdWNlIHRoZSBidWcgYW5kIGJlZ2luIG91ciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MjY6NDguMDIxMzIwNTA1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjIwMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQzPW5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ1OlxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0Ni1uZl9mbG93X3RhYmxlLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfUFJPQ0ZTKSArPSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI2OjQ4LjEwNDk0ODAzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4Nzg5Nzg5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBGbG93IFRhYmxlIE9iamVjdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWV0aGluZyB0aGF0J3MgY2xlYXJseSBwYXJ0IG9mIHRoZSBgbmZfZmxvd190YWJsZS1vYmpzYCBjb250ZXh0LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24uIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgbmZfZmxvd190YWJsZWAgbW9kdWxlIGlzIGNvbmZpZ3VyZWQuIFRoYXQgY29uZmlnIGlzIGdvaW5nIHRvIGRpY3RhdGUgZXZlcnl0aGluZyBhYm91dCBpdHMgYmVoYXZpb3Ig4oCTIHRoZSB0YWJsZSdzIHNpemUsIGl0cyBhZ2luZyBwYXJhbWV0ZXJzLCBwZXJoYXBzIGV2ZW4gdGhlIGhhc2hpbmcgYWxnb3JpdGhtIGl0J3MgdXNpbmcuIEknbGwgbmVlZCB0aGF0IHRvIHVuZGVyc3RhbmQgaXRzIGxpbWl0YXRpb25zIGFuZCBob3cgSSBtaWdodCBiZSBhYmxlIHRvIHR1bmUgaXQuIFRpbWUgdG8gdHJhY2sgZG93biB0aGF0IGNvbmZpZ3VyYXRpb24hIEknbGwgcHJvYmFibHkgc3RhcnQgbG9va2luZyBhdCBrZXJuZWwgY29uZmlnIGZpbGVzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MjY6NTAuOTgzOTI5MTk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDkxNTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzk9b2JqLSQoQ09ORklHX05GVF9GV0RfTkVUREVWKVxcdCs9IG5mdF9md2RfbmV0ZGV2Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcdCs9IG5mX2Zsb3dfdGFibGUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQzOm5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ1OlxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0Ni1uZl9mbG93X3RhYmxlLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfUFJPQ0ZTKSArPSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc0ND12b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc0OC1cXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZ2Nfd29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NDk6XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3d0YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NTAtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03NjM9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzY5LVxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlZ2Nfd29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NzA6XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3dfdGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzcxLVxcdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzMtXFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NzQ6XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzUtXFx0cmhhc2h0YWJsZV9kZXN0cm95KFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VyaGFzaHRhYmxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODI0PXN0YXRpYyBpbnQgX19pbml0IG5mX2Zsb3dfdGFibGVfbW9kdWxlX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODM1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODM2OlxcdHJldCA9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04MzctXFx0aWYgKHJldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODQ2LW91dF9icGY6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo4NDc6XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2V4aXQoKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg0OC1vdXRfb2ZmbG9hZDpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODU1PXN0YXRpYyB2b2lkIF9fZXhpdCBuZl9mbG93X3RhYmxlX21vZHVsZV9leGl0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NTYte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODU3OlxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NTgtXFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZuZl9mbG93X3RhYmxlX25ldF9vcHMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz02OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03MC1cXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NzE6XFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03Mi1cXHQuYWN0aW9uXFx0XFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaW5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Nzg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODAtXFx0LmluaXRcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjgxOlxcdC5zZXR1cFxcdFxcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODItXFx0LmFjdGlvblxcdFxcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkwLVxcdC5pbml0XFx0XFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MTpcXHQuc2V0dXBcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkyLVxcdC5hY3Rpb25cXHRcXHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTUzPXZvaWQgbmZfZmxvd19vZmZsb2FkX3N0YXRzKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE2OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzA6dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTcxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzg6dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3OS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyNDM9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX2luZHJfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNTUtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjU2OnN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNTctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNzQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjc1OmludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI3Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjg2LVxcdGlmIChkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90YylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyODc6XFx0XFx0ZXJyID0gbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChcXHUwMDI2Ym8sIGZsb3d0YWJsZSwgZGV2LCBjbWQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjg4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZleHRhY2spO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjk2LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyOTc6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjk5OmludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI1OnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2V4aXQodm9pZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjo1MS4wOTQ4NTAyMzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc1MTQ3MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgY29kZSdzIHJlZmVyZW5jaW5nIGBORl9GTE9XX1RBQkxFYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgbmV0ZmlsdGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZmVhdHVyZSBmbGFnIGFjdHVhbGx5ICpkb2VzKi4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHJpZ2h0IGF3YXkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTmV0ZmlsdGVyIGFyZSBkZWZpbmVkLCBhbmQgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBsaWZlYmxvb2Qgb2YgdW5kZXJzdGFuZGluZyBob3cgdGhlIExpbnV4IGtlcm5lbCBpcyBjb25maWd1cmVkLiBJIGtub3cgSSdtIGxvb2tpbmcgZm9yIHRoZSBzZWN0aW9uIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBORl9GTE9XX1RBQkxFYCBhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucyBvbiB0aGUgYnVpbGQuIFRoaXMgdGVsbHMgbWUgaWYgaXQncyBhIGNvbXBpbGUtdGltZSBvcHRpb24sIGEgbW9kdWxlLCBvciB3aGF0LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHR5cGljYWwgdGhpbmdzIEkgd2FudCB0byBsb29rIGZvcjogSXMgdGhlcmUgYSBkZWZhdWx0IHNldHRpbmc/IElzIGl0IGRlcGVuZGVudCBvbiBhbm90aGVyIGZlYXR1cmU/IEFyZSB0aGVyZSBhbnkgY29tbWVudHMgZGV0YWlsaW5nIHRoZSB1c2UgY2FzZSwgcGVyZm9ybWFuY2UgaW1wYWN0cywgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnM/IEknbSBob3BpbmcgaXQncyB3ZWxsLWRvY3VtZW50ZWQgYXMgdGhpcyBpcyBhIGNvcmUgcGllY2Ugb2YgbmV0d29yayBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MjY6NTQuNzcwMDAwMjQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODA2MjYzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjo1NC44NTgwNzAxMTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2Mjg4NjE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgTkZfRkxPV19UQUJMRWAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfRkxPV19UQUJMRWAuIEl0J3MgYSBrZXkgY29tcG9uZW50IGluIHRoZSBuZXRmaWx0ZXIgZWNvc3lzdGVtLCBidXQgYmVmb3JlIEkgZGlnIGludG8gaXRzIHNwZWNpZmljcywgSSB3YW50IHRvIGdldCBhIGJyb2FkZXIgdmlldy4gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmU/IFdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgY29tcG9uZW50cyBpcyBpdCB0aWdodGx5IGNvdXBsZWQgd2l0aD8gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgdHJhY2luZyBpdHMgaW5jbHVzaW9uIHBhdGhzIGFuZCBzZWUgd2hhdCBpbmNsdWRlcyBpdCwgdGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCBlc3BlY2lhbGx5IGlmIGFueSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIG9yIEFQSXMgZnJvbSBvdGhlciBjb21wb25lbnRzIGFyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiBpdHMgZGVmaW5pdGlvbnMuIEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGxpa2UgY29ubmVjdGlvbiB0cmFja2luZywgTkFULCBvciBvdGhlciBuZXRmaWx0ZXIgbW9kdWxlcz8gQXJlIHRoZXJlIGFueSBrZXJuZWwgc3Vic3lzdGVtcywgbWF5YmUgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgbG9ja2luZywgb3IgdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXRzZWxmLCB0aGF0IGl0IGNyaXRpY2FsbHkgcmVsaWVzIHVwb24/IFRoaXMgaW5pdGlhbCBkZXBlbmRlbmN5IHNjYW4gaXMgZXNzZW50aWFsIGZvciBhbnkgZGVlcCBkaXZlIG9yIG1vZGlmaWNhdGlvbiwgdG8gYXZvaWQgYnJlYWtpbmcgc29tZXRoaW5nIGRvd25zdHJlYW0gb3IgaW50cm9kdWNpbmcgc3VidGxlLCBoYXJkLXRvLWRlYnVnIGlzc3Vlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ3NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI2OjU4LjMyMDk1OTI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzc1OTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRSRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDM9Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzExOmNvbmZpZyBORl9GTE9XX1RBQkxFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjo1OC4zOTg3MjM5MTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNzY5NjEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDcxMS4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgW2luc2VydCB5b3VyIGFzc3VtcHRpb24gb2Ygd2hhdCB5b3UncmUgaW50ZXJlc3RlZCBpbiBiYXNlZCBvbiB0aGUgS2NvbmZpZyBmaWxlXS4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGRlcGVuZGVuY2llcywgb3B0aW9ucywgYW5kIHBvdGVudGlhbGx5IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gW2FnYWluLCBpbnNlcnQgeW91ciBlZHVjYXRlZCBndWVzc10uIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGZlYXR1cmUgc2VsZWN0aW9uIG9yIGV4Y2x1c2lvbiBsb2dpYyByZXNpZGVzIGZvciBbdGhlIGZlYXR1cmUgdGhlIHVzZXIgaXMgaW52ZXN0aWdhdGluZ10uIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBwb3NzaWJseSBpbnZvbHZpbmcgYGRlcGVuZHMgb25gIGNsYXVzZXMsIHRoYXQgZ292ZXJuIHdoZXRoZXIgb3Igbm90IGNlcnRhaW4gTmV0ZmlsdGVyIG1vZHVsZXMgb3IgZnVuY3Rpb25hbGl0aWVzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgc3BlY2lmaWMgZmVhdHVyZXMgcmVsYXRlZCB0byBbdGhlIGFzcGVjdCB0aGUgdXNlciBoYXMgaW4gbWluZF0sIGFuZCBob3cgdGhvc2UgY2hvaWNlcyBpbnRlcnJlbGF0ZSB3aXRoIG90aGVyIE5ldGZpbHRlciBjb21wb25lbnRzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCBbdGhlIGFzcGVjdCB0aGV5J3JlIGludGVyZXN0ZWQgaW5dLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MDEuNjE2NDIyOTc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcbiA3MDE6XFx0ZW5kaWYgIyBORl9UQUJMRVNcXG4gNzAyOlxcdFxcbiA3MDM6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbiA3MDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuIDcwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzA2OlxcdFxcdGhlbHBcXG4gNzA3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgc3VwcG9ydC5cXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiA3MTA6XFx0XFxuIDcxMTpcXHRjb25maWcgTkZfRkxPV19UQUJMRVxcbiA3MTI6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4gNzEzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcXG4gNzE0OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuIDcxNTpcXHRcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbiA3MTY6XFx0XFx0aGVscFxcbiA3MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXFxuIDcxODpcXHRcXG4gNzE5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNzIwOlxcdFxcbiA3MjE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxuIDcyMjpcXHRcXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG4gNzIzOlxcdFxcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxcbiA3MjQ6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDcyNTpcXHRcXHRoZWxwXFxuIDcyNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZm9yIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgc3RhdGlzdGljc1xcbiA3Mjc6XFx0XFx0ICB0byBiZSBzaG93biBpbiBwcm9jZnMgdW5kZXIgbmV0L25ldGZpbHRlci9uZl9mbG93dGFibGUuXFxuIDcyODpcXHRcXG4gNzI5OlxcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzowMS42MTY2ODA0MTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzMTUxMDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgTkZfRkxPV19UQUJMRWAgY29uZmlndXJhdGlvbi4gSXQncyBjbGVhciB0aGF0IGl0IHJlbGllcyBvbiBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBlbmFibGUgYE5GX0ZMT1dfVEFCTEVgLCBvYnZpb3VzbHkuXG5cbk5vdywgaWYgd2Ugd2FudCB0byBnZXQgaW50byB0aGUgcmVhbG0gb2YgaGFyZHdhcmUgb2ZmbG9hZCwgSSBiZXQgdGhlcmUgYXJlIGEgZmV3IG1vcmUgY29uZmlncyB3ZSBuZWVkIHRvIGNvbnNpZGVyLiBJJ2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gTGV0J3Mgc3RhcnQgYnkgaW5zcGVjdGluZyBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AgdG8gc2VlIGlmIHRoYXQgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIG5vdC4gQWgsIHdhaXQsIG5vIG5lZWQsIGl0IGxvb2tzIGxpa2UgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vYCAqaXMqIGFsd2F5cyBjb21waWxlZCB3aGVuIGBORl9GTE9XX1RBQkxFYCBpcyBlbmFibGVkLiBHb29kLCBnb29kLiBObyBnb3RjaGFzIHRoZXJlLlxuXG5BbHJpZ2h0LCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiB3aXRoaW4gdGhlIGhhcmR3YXJlIG9mZmxvYWQgbG9naWM/IEkgc2VlIHRoYXQgdGhlIHBhdGNoIHNlZW1zIHRvIG1vZGlmeSBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcmAgYW5kIGBmbG93X29mZmxvYWRfd29ya19kZWxgLiBUaGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggdXN1YWxseSBtZWFucyB0aGV5J3JlIGludGVybmFsIHRvIHRoZSBtb2R1bGUuIFNvLCB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBBaCwgaGVyZSB3ZSBnbywgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJgIGlzIGEgd29ya3F1ZXVlIGhhbmRsZXIuIEFuZCBpdCBsb29rcyBsaWtlIGl0IGlzIHNjaGVkdWxlZCBieSBgZmxvd19vZmZsb2FkX3dvcmtfYWRkYC4gT2theSwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQ3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MDcuMDQ4MTk0NzI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA1ODYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbG93X29mZmxvYWRfd29ya19hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk1Nz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ydWxlX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk3Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk3MzpzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19hZGQoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTc0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTAzNj1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0NC1cXHRcXHRjYXNlIEZMT1dfQ0xTX1JFUExBQ0U6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDQ1OlxcdFxcdFxcdGZsb3dfb2ZmbG9hZF93b3JrX2FkZChvZmZsb2FkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNDYtXFx0XFx0XFx0TkZfRkxPV19UQUJMRV9TVEFUX0RFQ19BVE9NSUMobmV0LCBjb3VudF93cV9hZGQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzowNy4wOTcyNTg1OTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NjEyNTg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyB0aGUgV29ya3F1ZXVlIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgY2hhaW4gaW52b2x2aW5nIGBmbG93X29mZmxvYWRfd29ya19hZGRgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIldoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/XCIgQnV0IHRoZW4gSSBoYWQgdG8gbWVudGFsbHkgY29ycmVjdCBteXNlbGYg4oCTIGhhbmcgb24sIGlzbid0IGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCBpbnZvbHZlZD8gQW5kIHRoZW4gaXQgaGl0IG1lLiBSaWdodCwgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJgICppcyogdGhlIHdvcmtxdWV1ZSBoYW5kbGVyLiBTbywgdGhlIHJlbGF0aW9uc2hpcCBpcyB0aGF0IHRoZSBoYW5kbGVyIGl0c2VsZiBsaWtlbHkgbWFrZXMgdGhlIGNhbGwgdG8gYGZsb3dfb2ZmbG9hZF93b3JrX2FkZGAsIG9yIHBvdGVudGlhbGx5IGl0cyBjb3VudGVycGFydCwgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbGAuIEkgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBob3cgYG9mZmxvYWQtXHUwMDNlY21kYCBmaWd1cmVzIGludG8gdGhlIGNob2ljZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgb2ZmbG9hZC1cdTAwM2VjbWRgIGRldGVybWluZXMgaWYgYGZsb3dfb2ZmbG9hZF93b3JrX2FkZGAgb3IgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbGAgYXJlIGNhbGxlZCwgYnV0IHRoYXQgZmVlbHMgcmlnaHQuIFRoZSBuZXh0IHF1ZXN0aW9uIGlzLCB3aGVyZSBleGFjdGx5IHdpdGhpbiB0aGUgc3lzdGVtIGlzIHRoaXMgd29yayBiZWluZyBxdWV1ZWQ/IFRoYXQncyB0aGUga2V5IG5leHQgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHdob2xlIHRoaW5nIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDY4LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MTEuMDUzMzg3MTMxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk1MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJTklUX1dPUksuKmZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwODc9bmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2Moc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTAzLVxcdG9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZSA9IGZsb3d0YWJsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMDQ6XFx0SU5JVF9XT1JLKFxcdTAwMjZvZmZsb2FkLVxcdTAwM2V3b3JrLCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjExLjA5NjM0NDI2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU1ODA4NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBbGxvY2F0aW5nIHRoZSBPZmZsb2FkIFdvcmsqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGZsb3cgb2ZmbG9hZCB3b3JrIGFsbG9jYXRpb24gcHJvY2VzcyDigJMgc3BlY2lmaWNhbGx5LCBgbmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2NgLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSwgYXMgYWx3YXlzLCBpcyByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJ20gdmlzdWFsaXppbmcgaG93IHRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IG1hbmFnZXMgdGhlIGFsbG9jYXRpb24gb2YgdGhlIHdvcmsgaXRzZWxmLiBJdCdzIHRoZSBwb2ludCB3aGVyZSB3ZSdyZSBhY3R1YWxseSBzZXR0aW5nIHVwIHRoZSBzdHJ1Y3R1cmVzLCB0aGUgbWVtb3J5LCB0aGUgbWV0YWRhdGEsIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlcHJlc2VudCBhIHBhcnRpY3VsYXIgZmxvdyB0aGF0J3MgYmVpbmcgb2ZmbG9hZGVkLiBUaGUgc3BlY2lmaWMgaW50ZXJuYWxzIG9mICpob3cqIGl0J3MgZG9uZeKAlHRoZSBhbGdvcml0aG1zLCB0aGUgcG90ZW50aWFsIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMsIGFsbCBvZiB0aGF0IGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgb2ZmbG9hZCBhcmNoaXRlY3R1cmUsIHdoaWNoIEknbGwgbmVlZCB0byBrbm93LiBUaGUgZnVuY3Rpb24gaXMgZ29pbmcgdG8gbmVlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlbiByZXNvdXJjZXMgYXJlbid0IGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgYW5kIGFsc28gd2lsbCBoYW5kbGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZG9uZSBjb3JyZWN0bHksIGFuZCB0aGUgcmlnaHQgc3RydWN0dXJlcyBhcmUgY29ycmVjdGx5IGluIHBsYWNlLiBJdCB3aWxsIHRha2UgdGltZSB0byBlbnN1cmUgdGhhdCBhbGwgdGhlIHdvcmsgYWxsb2NhdGVkIGlzIGRvbmUgaW4gYSB0aW1lbHkgbWFubmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDEwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MTQuMjUyMTU1NjY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIyNzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfd29ya19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA4Nj1zdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwODc6bmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2Moc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA4OC1cXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTE4PXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTIyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEyMzpcXHRvZmZsb2FkID0gbmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2MoZmxvd3RhYmxlLCBmbG93LCBGTE9XX0NMU19SRVBMQUNFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMjQtXFx0aWYgKCFvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTQwPXZvaWQgbmZfZmxvd19vZmZsb2FkX2RlbChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNDQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTQ1OlxcdG9mZmxvYWQgPSBuZl9mbG93X29mZmxvYWRfd29ya19hbGxvYyhmbG93dGFibGUsIGZsb3csIEZMT1dfQ0xTX0RFU1RST1kpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE0Ni1cXHRpZiAoIW9mZmxvYWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNTM9dm9pZCBuZl9mbG93X29mZmxvYWRfc3RhdHMoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTYyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2MzpcXHRvZmZsb2FkID0gbmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2MoZmxvd3RhYmxlLCBmbG93LCBGTE9XX0NMU19TVEFUUyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTY0LVxcdGlmICghb2ZmbG9hZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MTQuMjk1Mzg0NzgyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzY5MjI3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyB5b3UgYXNrZWQ6XG5cbioqQW5hbHl6aW5nIEZsb3cgT2ZmbG9hZCBFbnRyeSBQb2ludHMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgLCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9zdGF0c2AuIFRoZXNlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgbWFuYWdpbmcgZmxvdyBvZmZsb2FkLCBmcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgZGVwZW5kZW5jaWVzIGhlcmUuIEFyZSB0aGVzZSBmdW5jdGlvbnMgcHVyZWx5IGludGVybmFsIHRvIHRoaXMgc3BlY2lmaWMgbW9kdWxlLCBvciBhcmUgdGhleSBleHBvcnRlZCBhbmQgdXRpbGl6ZWQgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGV5J3JlIHB1YmxpYyBpbnRlcmZhY2VzLCBvciBpZiB0aGV5J3JlIHRpZ2h0bHkgY291cGxlZCB3aXRoaW4gYSBzcGVjaWZpYyBzdWJzeXN0ZW0uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgc2lnbmlmaWNhbnQgYW55IGNoYW5nZXMgdG8gdGhlbSBtaWdodCBiZSwgYW5kIHdoYXQgaW1wYWN0IHRoYXQgd291bGQgaGF2ZSBvbiB0aGUgc3lzdGVtLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGVyZSB0aGV5J3JlIHJlZmVyZW5jZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzoxNy45MzIzMTAzMTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzY3ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfb2ZmbG9hZF9kZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01Njg9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTg2LVxcdFxcdFxcdGlmICghdGVzdF9iaXQoTkZfRkxPV19IV19EWUlORywgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU4NzpcXHRcXHRcXHRcXHRuZl9mbG93X29mZmxvYWRfZGVsKGZsb3dfdGFibGUsIGZsb3cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTg4LVxcdFxcdFxcdGVsc2UgaWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfREVBRCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTk1LVxcdFxcdCAgICF0ZXN0X2JpdChORl9GTE9XX0hXX0RZSU5HLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1OTY6XFx0XFx0bmZfZmxvd19vZmZsb2FkX2RlbChmbG93X3RhYmxlLCBmbG93KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU5Ny1cXHR9IGVsc2UgaWYgKHRlc3RfYml0KE5GX0ZMT1dfSFcsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MjA9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfYWRkX3dxO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjE6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfZGVsX3dxO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjItc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfc3RhdHNfd3E7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNzA9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc4LVxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfZGVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzk6XFx0XFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfZGVsX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDgwLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMzA9dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEzOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNDA6dm9pZCBuZl9mbG93X29mZmxvYWRfZGVsKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNDEtXFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzA9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzItXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzM6XFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3NC1cXHRcXHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93dGFibGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTc4PXZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE4MS1cXHRcXHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgyOlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExODMtXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9zdGF0c193cSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyOTk9aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMDUtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzA2OlxcdG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJuZl9mdF9vZmZsb2FkX2RlbFxcXCIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzA3LVxcdFxcdFxcdFxcdFxcdFxcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDg6XFx0aWYgKCFuZl9mbG93X29mZmxvYWRfZGVsX3dxKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwOS1cXHRcXHRnb3RvIGVycl9kZWxfd3E7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMTgtZXJyX3N0YXRzX3dxOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMxOTpcXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjAtZXJyX2RlbF93cTpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTMyNT12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjctXFx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI4OlxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyOS1cXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfc3RhdHNfd3EpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzoxNy45Nzg2ODM4MzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1Nzg5NjI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIHNlZWluZyB0aGF0IGBuZl9mbG93X29mZmxvYWRfZGVsYCBpcyBiZWluZyB0cmlnZ2VyZWQgZnJvbSBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIG9yIGNsZWFudXAgb2YgZmxvdyBvZmZsb2FkIGVudHJpZXMsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gSXQncyB0cmlnZ2VyZWQgYnkgYSBHQyBwcm9jZXNzLCBzbyBpdCBtYWtlcyBzZW5zZS5cblxuT24gdGhlIG90aGVyIGhhbmQsIHRoZSBhZGRpdGlvbiBzaWRlIG9mIHRoaW5ncyBhcHBlYXJzIGhhbmRsZWQgYnkgYG5mX2Zsb3dfb2ZmbG9hZF9hZGRgLCB3aGljaCBvcmlnaW5hdGVzIGZyb20gYGZsb3dfb2ZmbG9hZF9hZGRgIHdpdGhpbiBgbmZfZmxvd190YWJsZV9jb3JlLmNgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYG5mX2Zsb3dfb2ZmbG9hZF9hZGRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBhZGRpbmcgbmV3IGZsb3dzIHRvIHRoZSBvZmZsb2FkIHRhYmxlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGZpbGUgbmFtZSBhcyB3ZWxsLiBUaGVzZSBhcmUgdGhlIHR3byBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBoZXJlLiBMb29rcyBsaWtlIHRoZSBjb3JlIGFkZGl0aW9uIGlzIGdvaW5nIG9uIGluIHRoZSBjb3JlIGZpbGUsIGFuZCB0aGVuIHRoZSBHQyBhbmQgRGVsZXRpb24gaXMgZ29pbmcgb24gaW4gdGhlIG9mZmxvYWQgZmlsZS4gSXQgbG9va3MgdG8gYmUgYSBnb29kLCBjbGVhbiwgbW9kdWxhciBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MjEuMzM2NTg0Mjc3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUzMTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzI4PWludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1My1cXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNTQ6XFx0XFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyMDpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3E7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMS1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNzA9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc1LVxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzY6XFx0XFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc3LVxcdH0gZWxzZSBpZiAob2ZmbG9hZC1cXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTExOD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMzA6dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMzEtXFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgwLVxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgxOlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExODItXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjk5PWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzAxOlxcdG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJuZl9mdF9vZmZsb2FkX2FkZFxcXCIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDM6XFx0aWYgKCFuZl9mbG93X29mZmxvYWRfYWRkX3dxKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMC1lcnJfZGVsX3dxOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyMTpcXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjItXFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEzMjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyNi17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI3OlxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyOC1cXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MjEuMzgyMTIxMDMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjYzNzA1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgaW5pdGlhbCB0aGlua2luZyBpcyB0aGF0IGBmbG93X29mZmxvYWRfYWRkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBsb29rIGxpa2Ugc3Ryb25nIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBCdXQsIGhvbGQgb24gYSBzZWNvbmTigKYgYGZsb3dfb2ZmbG9hZF9hZGRgLCB0aGF0J3MgdGhlICpjb3JlKiBmdW5jdGlvbiwgaXNuJ3QgaXQ/IE9rYXksIHJpZ2h0LCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBMZXQgbWUgc2VlLCBsZXQncyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hlcmUgZXhhY3RseSBgZmxvd19vZmZsb2FkX2FkZGAgaXMgYWN0dWFsbHkgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGNhbGwgY2hhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTUxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MjQuODA4NDk0NTI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ3MjY2MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd19vZmZsb2FkX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTMwOT11bnNpZ25lZCBsb25nIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zMjctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozMjg6aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMyOS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1My1cXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNTQ6XFx0XFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzU3LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM1ODpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyMDpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3E7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMS1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNzA9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc1LVxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzY6XFx0XFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc3LVxcdH0gZWxzZSBpZiAob2ZmbG9hZC1cXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTExOD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMzA6dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMzEtXFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgwLVxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgxOlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExODItXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjk5PWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzAxOlxcdG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJuZl9mdF9vZmZsb2FkX2FkZFxcXCIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDM6XFx0aWYgKCFuZl9mbG93X29mZmxvYWRfYWRkX3dxKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMC1lcnJfZGVsX3dxOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyMTpcXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjItXFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEzMjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyNi17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI3OlxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyOC1cXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTUwPXN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMjAtXFx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMjE6XFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEyMi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MjQuOTkzMjI2NDQ1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzIzMTM0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRGVlcCBEaXZlIGludG8gdGhlIEZsb3cgT2ZmbG9hZCBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGl0IGxvb2tzIGxpa2UgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgY2FsbGluZyBgZmxvd19vZmZsb2FkX2FkZGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBgbmZfZmxvd19vZmZsb2FkX2FkZGAgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBxdWV1ZWluZyB0aGUgYWN0dWFsIHdvcmsuIE1ha2VzIG1lIHdvbmRlciBob3cgdGhlIHJlbW92YWwgcHJvY2VzcyB3b3Jrcywgc28gSSdsbCBjaGVjayBgbmZfZmxvd19vZmZsb2FkX2RlbGAgYW5kIGBuZl9mbG93X29mZmxvYWRfYWRkYCB3aGlsZSBJJ20gYXQgaXQuIEhvbGQgb24sIGBuZl9mbG93X29mZmxvYWRfYWRkYCBpcyAqY29uZGl0aW9uYWxseSogY2FsbGVkIGZyb20gYGZsb3dfb2ZmbG9hZF9hZGRg4oCUb25seSBpZiBgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSlgIGV2YWx1YXRlcyB0byB0cnVlLiBBaGEhIE5vdyB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiB3aGF0IHRyaWdnZXJzIGBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZGA/IFNlZW1zIHRvIGJlIHRpZWQgdG8gdGhlIGBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAgZmxhZy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCBzb3VyY2UgY29kZSB0byBzZWUgaG93IGl0IHVzZXMgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgdG8gZW5hYmxlIHRoaXMgaGFyZHdhcmUgb2ZmbG9hZCBmbGFnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgzOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzoyOS4yMjU1NDE5OTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTY3Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9mbG93X29mZmxvYWRfZXZhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz00MT1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfY3RfdGNwKHN0cnVjdCBuZl9jb25uICpjdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTQ5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjUwOnN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNTEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMjAtXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfZmxvd19vZmZsb2FkKSksXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjIxOlxcdC5ldmFsXFx0XFx0PSBuZnRfZmxvd19vZmZsb2FkX2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjIyLVxcdC5pbml0XFx0XFx0PSBuZnRfZmxvd19vZmZsb2FkX2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjI5LjI3MTExMzY1OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzExMzk5MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgdGhpcyB0aHJvdWdoOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZGAgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAsIGFuZCBpdCdzIGNsZWFyIHRoaXMgaXMgKnRoZSogZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBldmFsdWF0aW9uIHdvcmsgZm9yIHRoZSBgZmxvd19vZmZsb2FkYCBleHByZXNzaW9uIHdpdGhpbiB0aGUgbmZ0YWJsZXMgZnJhbWV3b3JrLiBObyBhbWJpZ3VpdHkgdGhlcmUuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGlzIGEgcGF0aCB0aGF0J3MgZGVmaW5pdGVseSBiZWluZyB0cmF2ZWxlZCwgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLi4uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHRoYXQgZ292ZXJucyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYE5GVF9GTE9XX09GRkxPQURgLiBUaGF04oCZcyBteSBrZXkgdG8gdGhlIGBuZnRfZmxvd19vZmZsb2FkLmNgIHNvdXJjZSBjb2RlIGFuZCBpdHMgc2V0dGluZ3MuIEkgY2FuIHVzZSB0aGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBpcyBiZWluZyB1c2VkIGFuZCBob3cgdG8gYWNjZXNzIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTY2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MzIuNTgyNTE2MDQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ2MjY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZmxvd19vZmZsb2FkLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTI9b2JqLSQoQ09ORklHX05GVF9DVClcXHRcXHQrPSBuZnRfY3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEzOm9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVxcdCs9IG5mdF9mbG93X29mZmxvYWQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTE0LW9iai0kKENPTkZJR19ORlRfTElNSVQpXFx0XFx0Kz0gbmZ0X2xpbWl0Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTIxNz1zdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2Zsb3dfb2ZmbG9hZF90eXBlO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIxODpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfZmxvd19vZmZsb2FkX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMTktXFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfZmxvd19vZmZsb2FkX3R5cGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMzA9c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9mbG93X29mZmxvYWRfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIzMS1cXHQubmFtZVxcdFxcdD0gXFxcImZsb3dfb2ZmbG9hZFxcXCIsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjMyOlxcdC5vcHNcXHRcXHQ9IFxcdTAwMjZuZnRfZmxvd19vZmZsb2FkX29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzMtXFx0LnBvbGljeVxcdFxcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9wb2xpY3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjMyLjYyOTk4Mjk4OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY4MjIxNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgRmxvdyBPZmZsb2FkKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0YXR1cyBvZiBgTkZUX0ZMT1dfT0ZGTE9BRGAuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIG5ldGZpbHRlciBjb25maWd1cmF0aW9uIG9wdGlvbiwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0ZmlsdGVyLCBhbmQgbGlrZWx5IGFueSByZWxhdGVkIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LCBzaG91bGQgYmUgZGVmaW5lZC4gTGV0J3Mgc2VlIGlmIGl0J3MgdGhlcmUsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MgbG9vayBsaWtlLiBHb3R0YSB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbi4gTXkgZXhwZXJ0aXNlIGluIG5ldGZpbHRlciB0ZWxscyBtZSB0aGlzIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBnaXZlcyBtZSB0aGUgaW5mb3JtYXRpb24gb24gd2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHRoaXMgb2ZmbG9hZCByZWxpZXMgb24sIGFuZCBpZiBpdCBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE4MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjM1LjY5ODIwNjk2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTYxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9GTE9XX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNS1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjM1Ljc0MzgwNzQ1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQwMjk2NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5GVF9GTE9XX09GRkxPQURgIOKAkyB0aGF0J3MgdGhlIHByaW1hcnkgY29uZmlnIEkgbmVlZCB0byBmb2N1cyBvbi4gTXkgbmV4dCBzdGVwIGlzIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBUaGUgY29yZSBsb2dpYyBmb3IgdGhpcyBzZWVtcyB0byBiZSBuZXN0bGVkIHdpdGhpbiBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLCBhbmQgdGhhdCBjb2RlIGlzIG9ubHkgY29tcGlsZWQgaWYgYE5GX0ZMT1dfVEFCTEVgIGlzIGVuYWJsZWQuIFRoYXQncyBnb29kOyBpdCBjb25maXJtcyB0aGF0IGJvdGggYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgYXJlIGV4YWN0bHkgd2hhdCBJIHN1c3BlY3RlZC4gSSBrbm93IHRoYXQgYE5GX1RBQkxFU2AgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBlc3NlbnRpYWwgZGVwZW5kZW5jaWVzIGhlcmUsIHNvIHRob3NlIGFyZSBhdXRvbWF0aWNhbGx5IGFjY291bnRlZCBmb3IsIG5vIGZ1cnRoZXIgYWN0aW9uIHJlcXVpcmVkLiBMZXQgbWUganVzdCBjaGVjayBpZiB0aG9zZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBsaWtlIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZfRkxPV19UQUJMRV9JUFY0YCwgYW5kIGBORl9GTE9XX1RBQkxFX0lQVjZgIGFyZSByZWxldmFudCBpbiB0aGlzIGNvbnRleHQg4oCTIGFoLCB3YWl0IGEgbWludXRlLCBJIHNwb3R0ZWQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgZWFybGllciwgc28gaXQncyBjbGVhcmx5IGFjdGl2ZSBhbmQgcmVsZXZhbnQuIFJpZ2h0LCB0aGF0IGNvbmZpcm1zIHRoZSBjb3JlIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzo0MS40ODQxMDY2MDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjk5MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MTE9Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzo0MS41Mjc4MTMwOTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTUwNTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZsb3cgdGFibGUgY29uZmlndXJhdGlvbnMgd2l0aGluIE5ldGZpbHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBvcHRpb25zIGZvciBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgdHVuaW5nIGZsb3cgdGFibGUgYmVoYXZpb3IgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiB0cmFmZmljLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjQ0LjQxOTMyMTEwOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNTIzMTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzo0NC40NjU1ODIwMjNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjExNjM4MjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjE3MzExLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzo0Ni41ODE5NjcxODJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ3NzI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6NDYuNjI2NDIyMDc3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjg3MDE1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgY29uZmlndXJhdGlvbnM6IGBORl9GTE9XX1RBQkxFYCBhbmQgYE5GVF9GTE9XX09GRkxPQURgLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfTkVURklMVEVSX0lOR1JFU1NgIGlzIGEgZGVwZW5kZW5jeSBvZiBgTkZfRkxPV19UQUJMRWAsIHNvIEknbGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyB3ZWxsLiBJJ20gdHJ5aW5nIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcuXG5cbk5vdywgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpY3MsIEknbGwgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbGAgYXJlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGJlaW5nIHR3ZWFrZWQuIFRoZSByZWFsIGVudHJ5IHBvaW50cywgdGhlIG9uZXMgSSBuZWVkIHRvIGV4YW1pbmUgaW4gZGV0YWlsLCBhcmU6IGBuZl9mbG93X29mZmxvYWRfYWRkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgLCBgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2hgLCBgbmZfZmxvd19vZmZsb2FkX3N0YXRzYCwgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaGAsIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cGAsIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBgLCBgZmxvd19vZmZsb2FkX2FkZGAsIGFuZCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYC5cblxuRmlyc3QsIEkgc2hvdWxkIGNoZWNrIGlmIGBuZl9mbG93X29mZmxvYWRfYWRkYCBpcyBleHBvcnRlZC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQga25vd2luZyBpdHMgdmlzaWJpbGl0eSB3aWxsIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzYxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjUwLjg5NTEyNjA5MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5MjYyNjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChuZl9mbG93X29mZmxvYWRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzo1MC45NDUwNjAzMDZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxNzMxNjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIGBuZl9mbG93X29mZmxvYWRfYWRkYCBTeW1ib2wqKlxuXG5Pa2F5LCBzbyBJJ20gZW5jb3VudGVyaW5nIGEgc25hZy4gSSB3YXMgZXhwZWN0aW5nIGBuZl9mbG93X29mZmxvYWRfYWRkYCB0byBiZSBleHBvcnRlZCwgYnV0IHRoZSBsaW5rZXIncyBjb21wbGFpbmluZy4gVGltZSB0byBkaWcgaW4uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIHNwZWNpZmljYWxseSBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiwgb3IgYXQgbGVhc3QgdGhlIGRlY2xhcmF0aW9uLCBvZiB0aGlzIGNydWNpYWwgZnVuY3Rpb24gcmVsYXRlZCB0byBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgaXQncyBub3QgdmlzaWJsZSBhbmQgd2hhdCdzIHByZXZlbnRpbmcgaXRzIHVzZS4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpdHNlbGYgd2lsbCBwcm92aWRlIHNvbWUgY2x1ZXMgYXMgdG8gdGhlIGludGVuZGVkIHNjb3BlIG9yIGFueSBpbnRlcm5hbCBsaW1pdGF0aW9ucy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuLi4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkzMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjU1LjE2MjM3OTI3NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MTg4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyMDpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3E7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMS1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNzA9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc1LVxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzY6XFx0XFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc3LVxcdH0gZWxzZSBpZiAob2ZmbG9hZC1cXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTExOD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMzA6dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMzEtXFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgwLVxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgxOlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExODItXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjk5PWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzAxOlxcdG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJuZl9mdF9vZmZsb2FkX2FkZFxcXCIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDM6XFx0aWYgKCFuZl9mbG93X29mZmxvYWRfYWRkX3dxKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMC1lcnJfZGVsX3dxOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyMTpcXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjItXFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEzMjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyNi17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI3OlxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyOC1cXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6NTUuMjA2OTAyNDcxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzgwNzIzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGbG93IE9mZmxvYWQgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmbG93IG9mZmxvYWQgc2l0dWF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgc29tZXRoaW5nIGlzbid0IGV4cG9ydGVkIGJ1dCAqYWxzbyogaXNuJ3Qgc3RhdGljLiBJdCdzIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGBuZl9mbG93X3RhYmxlYCBtb2R1bGUuIFRoZW4gYGZsb3dfb2ZmbG9hZF9hZGRgICppcyogZXhwb3J0ZWQsIHNvIGl0J3MgYSB2aXNpYmxlIGludGVyZmFjZS4gQW5kIEkndmUgZ290IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLCB3aGljaCBpcyAqc3RhdGljKi4gSG1tLCBidXQgaG9sZCBvbiDigJMgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBzZWVtcyB0byBhY3QgYXMgYW4gZW50cnkgcG9pbnQgZm9yIHRoZSBuZnRhYmxlcyBleHByZXNzaW9uLiBUaGF0J3MgYSBrZXkgZGV0YWlsISBOb3csIHdoYXQgYWJvdXQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGA/IEFoLCB5ZXMsICp0aGF0KiBpcyBleHBvcnRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGhvdyBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6NTkuMTg0OTc3NDQ2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyNjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz02OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03MC1cXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NzE6XFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03Mi1cXHQuYWN0aW9uXFx0XFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaW5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Nzg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODAtXFx0LmluaXRcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjgxOlxcdC5zZXR1cFxcdFxcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODItXFx0LmFjdGlvblxcdFxcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkwLVxcdC5pbml0XFx0XFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MTpcXHQuc2V0dXBcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkyLVxcdC5hY3Rpb25cXHRcXHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjU2PXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI3NC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyNzU6aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjc2LVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTYtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI5NzpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI5OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6NTkuMjMyMjExMzAxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDk3ODkxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gRmxvdyBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gc29tZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBmb2N1cy4gTm93LCBsZXQncyBzZWUsIHdoYXQgZWxzZSBpcyByZWxldmFudC4uLiBJJ20gYWxzbyBjb25zaWRlcmluZyBgZmxvd19vZmZsb2FkX2FkZGAuIEl0J3MgZXhwb3J0ZWQsIGFuZCBpdCdzIHVzZWQgd2l0aGluIGBuZnRfZmxvd19vZmZsb2FkLmNgLCBzbyBpdCB3YXJyYW50cyBhIGxvb2suIE1vdmluZyBvbiwgd2hhdCBhYm91dCBgbmZfZmxvd19vZmZsb2FkX2FkZGA/IFNpbmNlIGl0J3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB0aGF0IG9wZW5zIGl0IHVwIGFzIGEgcG90ZW50aWFsIHN5bWJvbCB0byBleGFtaW5lIGNsb3NlbHkuIEFuZCwgYWxvbmcgdGhlIHNhbWUgbGluZXMsIGBuZl9mbG93X29mZmxvYWRfZGVsYCBsb29rcyBwcm9taXNpbmcgdG9vLCBhcyBpdCdzIGFsc28gbm9uLXN0YXRpYy4gVG8gbWFrZSBzdXJlIG15IHNjb3BlIGlzIGNvcnJlY3QsIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBib3RoIGBuZl9mbG93X29mZmxvYWRfYWRkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgIGFyZSBpbmRlZWQgZGVmaW5lZCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIzMywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyODowMy40ODIwMDM3MzhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODk2NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTExOD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMzA6dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMzEtXFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI4OjAzLjUyNTkwNjEzM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODY1Mzk5NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgc29tZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIE5ldGZpbHRlciBmbG93IG9mZmxvYWQgdGhhdCBhcmUgcG90ZW50aWFsIGFyZWFzIGZvciBmdXp6aW5nOiBgbmZfZmxvd19vZmZsb2FkX2FkZGAsIGBuZl9mbG93X29mZmxvYWRfZGVsYCwgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAsIGFuZCBgZmxvd19vZmZsb2FkX2FkZGAuIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGVzZS5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGBuZl9mbG93X29mZmxvYWRfYWRkYCBpcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGguIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGl0J3MgdHJpZ2dlcmVkIHdoZW4gYSBmbG93IGlzIGFkZGVkIHRvIHRoZSBmbG93IHRhYmxlIGFuZCBoYXJkd2FyZSBvZmZsb2FkIGlzIGFjdGl2ZS4gSXQgcXVldWVzIGEgd29yayBpdGVtLiBTaW5jZSBpdCdzIHBlci1mbG93LCBub3QgcGVyLXBhY2tldCwgZnV6emluZyBpdCBzaG91bGRuJ3QgaW50cm9kdWNlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGNvbmNlcm5zLiBUaGF0J3MgZ29vZCB0byBrbm93LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSB3b25kZXJpbmcgaWYganVzdCBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBhcmUgc3VmZmljaWVudCBmb3IgZW5hYmxpbmcgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkuIEFmdGVyIHJldmlld2luZyB0aGUgZGVwZW5kZW5jaWVzLCBpdCBhcHBlYXJzIHRoYXQgYE5GX0ZMT1dfVEFCTEVgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYCwgd2hpbGUgYE5GVF9GTE9XX09GRkxPQURgIGRlcGVuZHMgb24gYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9GTE9XX1RBQkxFYC4gU28sIHllcywgZW5hYmxpbmcgYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgc2hvdWxkIGNvdmVyIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MuIEFoLCBgTkZfRkxPV19UQUJMRV9JTkVUYCBsb29rcyBsaWtlIGEgZ29vZCBhZGRpdGlvbi4gSSdsbCBhZGQgdGhhdCB0byB0aGUgbGlzdCBvZiBjb25maWdzLlxuXG5XYWl0LCB0aGUgY29kZSBpbiBxdWVzdGlvbiwgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCwgaXMgcGFydCBvZiB0aGUgZmxvdyBvZmZsb2FkIHN5c3RlbS4gU28gaXMgaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBgTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZD8gTG9va2luZyBhdCB0aGUgYnVpbGQgb3V0cHV0LCBgbmZfZmxvd190YWJsZV9vZmZsb2FkLm9gIGlzIGluZGVlZCB3aXRoaW4gYG5mX2Zsb3dfdGFibGUtb2Jqc2AuIEhvd2V2ZXIsIEkgbmVlZCB0byBjaGVjayBob3cgdG8gYWN0dWFsbHkgdHJpZ2dlciB0aGUgaGFyZHdhcmUgb2ZmbG9hZC4gVG8gZG8gdGhhdCwgSSBuZWVkIGBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKWAgdG8gcmV0dXJuIHRydWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIHNldCB0byBwcm9jZWVkIHdpdGggbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI4OjEwLjM5MTMwODEwNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNDAwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd3RhYmxlX2h3X29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zMjg9aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzUyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzUzOlxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1NC1cXHRcXHRuZl9mbG93X29mZmxvYWRfYWRkKGZsb3dfdGFibGUsIGZsb3cpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zNjA9dm9pZCBmbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNzAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNzE6XFx0aWYgKGxpa2VseSghbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpIHx8XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNzItXFx0ICAgIHRlc3RfYml0KE5GX0ZMT1dfQ0xPU0lORywgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE3MD12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzEte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE3MjpcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd3RhYmxlKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3My1cXHRcXHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3OS17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgwOlxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgxLVxcdFxcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTI3NT1pbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyODM6XFx0aWYgKCFuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4NC1cXHRcXHRyZXR1cm4gbmZfZmxvd19vZmZsb2FkX3hkcF9zZXR1cChmbG93dGFibGUsIGRldiwgY21kKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTA0PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE4OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjE5MDpcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoXFx1MDAyNmZ0LVxcdTAwM2VkYXRhKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMTkxLVxcdCAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tXFx1MDAzZWRldikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI4OjEwLjQzODU1Mzc1MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQxMjY3MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWRgIHRoaW5nLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIHNvbGlkIGRlZmluaXRpb24uIEl0J3MgY3J1Y2lhbCwgb2J2aW91c2x5LCB0byBidWlsZCBhIGNvbmNlcHR1YWwgZnJhbWV3b3JrIGZvciBob3cgdGhpcyBvZmZsb2FkaW5nIG1lY2hhbmlzbSB3b3JrcyB3aXRoaW4gdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gS25vd2luZyB0aGUgZXhhY3QgZGVmaW5pdGlvbiB3aWxsIGluZm9ybSB0aGUgbmV4dCBsZXZlbCBvZiBteSBpbnZlc3RpZ2F0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGFzc3VtcHRpb25zIG5lZWQgdG8gYmUgY2hlY2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1ODcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyODoxMy42Nzk4MjMwNjNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjA5NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3d0YWJsZV9od19vZmZsb2FkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD03Nj1zdHJ1Y3QgbmZfZmxvd3RhYmxlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtODgtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo4OTpzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtOTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyODoxMy43MjQwMzgwMjhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MTUwODM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBuZl9mbG93X3RhYmxlLmgqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDg5LiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBlcmhhcHMgc29tZSBjcnVjaWFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gc2VlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgbWFpbiBmbG93IHRhYmxlIHN0cnVjdHVyZSBpdHNlbGYsIG1heWJlIHRoZSBpbmRpdmlkdWFsIGZsb3cgZW50cnkgc3RydWN0dXJlLCBhbmQgcG90ZW50aWFsbHkgYW55IHJlbGF0ZWQgbG9ja2luZyBwcmltaXRpdmVzIG9yIGhlbHBlciBmdW5jdGlvbnMuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgd2UgY2FuIGRpZyB1cCB0aGVyZS4gUGVyaGFwcyBJIGNhbiBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgaW4gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg4MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI4OjE3LjExNTU0OTgwNFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcbiAgODE6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGxpc3Q7XFx0XFx0Lyogc2xvd3BhdGggcGFydHMgKi9cXG4gIDgyOlxcdFxcdGNvbnN0IHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZVxcdCp0eXBlO1xcbiAgODM6XFx0XFx0c3RydWN0IGRlbGF5ZWRfd29ya1xcdFxcdGdjX3dvcms7XFxuICA4NDpcXHRcXHRzdHJ1Y3QgZmxvd19ibG9ja1xcdFxcdGZsb3dfYmxvY2s7XFxuICA4NTpcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlXFx0XFx0Zmxvd19ibG9ja19sb2NrOyAvKiBHdWFyZHMgZmxvd19ibG9jayAqL1xcbiAgODY6XFx0XFx0cG9zc2libGVfbmV0X3RcXHRcXHRcXHRuZXQ7XFxuICA4NzpcXHR9O1xcbiAgODg6XFx0XFxuICA4OTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbiAgOTA6XFx0e1xcbiAgOTE6XFx0XFx0cmV0dXJuIGZsb3d0YWJsZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRDtcXG4gIDkyOlxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIHtcXG4gIDk1OlxcdFxcdEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwgPSBJUF9DVF9ESVJfT1JJR0lOQUwsXFxuICA5NjpcXHRcXHRGTE9XX09GRkxPQURfRElSX1JFUExZID0gSVBfQ1RfRElSX1JFUExZLFxcbiAgOTc6XFx0fTtcXG4gIDk4OlxcdCNkZWZpbmUgRkxPV19PRkZMT0FEX0RJUl9NQVhcXHRJUF9DVF9ESVJfTUFYXFxuICA5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MTcuMTE1NjI4MTc0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzQwNDczMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaGFyZHdhcmUgb2ZmbG9hZCBsb2dpYy4gTXkgaW5pdGlhbCBzY2FuIGNoZWNrcyBgZmxvd3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAuIFRoYXQgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZmxvd3RhYmxlIGlzIGNyZWF0ZWQgd2l0aCB0aGUgYG9mZmxvYWRgIGZsYWcgaW4gbmZ0YWJsZXMg4oCTIGl0J3MgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5UaGUgY29yZSBvZiB0aGUgZml4IGludm9sdmVzIHNldHRpbmcgdGhlIGBORl9GTE9XX0hXX0RFQURgIGZsYWcgKmFmdGVyKiB0aGUgd29ya2VyJ3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgdGhlIGNydWNpYWwgYWRkaXRpb24gb2YgYSBtZW1vcnkgYmFycmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaXJlY3RseSBhZGRyZXNzaW5nIGEgY29uY3VycmVuY3kgaXNzdWUuIEdpdmVuIHRoYXQgaXQncyBhIGNvbmN1cnJlbmN5IGZpeCwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBoZXJlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZml4IGFkZHJlc3NlcyB0aGUgcmFjZSBjb25kaXRpb24gd2l0aG91dCBpbnRyb2R1Y2luZyBuZXcgcHJvYmxlbXMuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlIGBuZl9mbG93X29mZmxvYWRfYWRkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgLCBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYCwgYW5kIGBmbG93X29mZmxvYWRfYWRkYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUsIGFuZCB0aGV5IGFyZSwgdGhyb3VnaCB0aGUgbmV0bGluayBjb25maWd1cmF0aW9uIG9mIG5mdGFibGVzIGZsb3d0YWJsZXMgd2l0aCB0aGUgYG9mZmxvYWRgIGZsYWcgYW5kIHRoZW4gd2hlbiB0cmFmZmljIG1hdGNoZXMgdGhlc2UgZmxvd3RhYmxlIHJ1bGVzLlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSBkZWZpbml0ZWx5IG5lZWQgYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGFuZCBgTkZfRkxPV19UQUJMRV9JTkVUYC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIEknZCBqdXN0IGluY2x1ZGUgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYCB0byBiZSBzYWZlLCBidXQgdGhlbiBJIHJlYWQgdGhlIGluc3RydWN0aW9ucyBhbmQgbmVlZCB0byBmb2xsb3cgdGhvc2UgaW5zdHJ1Y3Rpb25zIGFuZCBsb29rIGZvciBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBgS2NvbmZpZ2AuIFRoZXkgYXJlbid0IHNwZWNpZmljYWxseSBub24tc3RhbmRhcmQsIGJ1dCB0aGV5IGFyZSByZXF1aXJlZC4gSSdtIGdvaW5nIHRvIGluY2x1ZGUgYWxsIHRocmVlLlxuXG5NeSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaGFyZHdhcmUgb2ZmbG9hZCBoYW5kbGVyLiBJdCBkZWxheXMgc2V0dGluZyB0aGUgYE5GX0ZMT1dfSFdfREVBRGAgZmxhZyBhbmQgYWRkcyBhIG1lbW9yeSBiYXJyaWVyIHRvIGNvcnJlY3QgdGhlIGZsYXcuIFRoZSByZWxldmFudCBjb2RlIGlzIHRyaWdnZXJlZCBieSBuZnRhYmxlcyBoYXJkd2FyZSBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgZnV6emluZyBpcyBhbiBpbXBvcnRhbnQgc3RlcCB0byB2YWxpZGF0ZSB0aGUgZml4IGFuZCBydWxlIG91dCBuZXcgaXNzdWVzLiBJJ2xsIGZsYWcgaXQgYXMgc3VjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MjMsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MjguNDU2MTA0MTNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTY3OTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X29mZmxvYWRfYWRkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZGVsXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIixcbiAgICBcImZsb3dfb2ZmbG9hZF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIHdvcmtxdWV1ZSBoYW5kbGVyIGJ5IGRlbGF5aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBORl9GTE9XX0hXX0RFQUQgZmxhZyB1bnRpbCBhZnRlciB0aGUgd29ya2VyJ3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkIGZvciBhIGZsb3d0YWJsZS4gRnV6emluZyB0aGlzIGFyZWEgY2FuIGhlbHAgZW5zdXJlIHRoYXQgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVfSU5FVFwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd19vZmZsb2FkX2FkZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2RlbFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwXCIsXG4gICAgXCJmbG93X29mZmxvYWRfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaGFyZHdhcmUgb2ZmbG9hZCB3b3JrcXVldWUgaGFuZGxlciBieSBkZWxheWluZyB0aGUgc2V0dGluZyBvZiB0aGUgTkZfRkxPV19IV19ERUFEIGZsYWcgdW50aWwgYWZ0ZXIgdGhlIHdvcmtlcidzIGxhc3QgZmxvdyBhY2Nlc3MgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyB3aGVuIGhhcmR3YXJlIG9mZmxvYWQgaXMgZW5hYmxlZCBmb3IgYSBmbG93dGFibGUuIEZ1enppbmcgdGhpcyBhcmVhIGNhbiBoZWxwIGVuc3VyZSB0aGF0IHRoZSBjb25jdXJyZW5jeSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbmV3IGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MjguNTM3Nzg4ODEyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzQ1ODA3ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MjguNTM4MjE1MzcyWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzNDUzNzc1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBzZXR0aW5nIG9mIHRoZSBgTkZfRkxPV19IV19ERUFEYCBiaXQgaW4gYG9mZmxvYWQtXFx1MDAzZWZsb3ctXFx1MDAzZWZsYWdzYCBmcm9tIGBmbG93X29mZmxvYWRfd29ya19kZWwoKWAgdG8gdGhlIGVuZCBvZiBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcigpYCwgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgdG8gZW5zdXJlIGl0IGlzIHB1Ymxpc2hlZCBvbmx5IGFmdGVyIHRoZSB3b3JrZXIncyBsYXN0IGFjY2VzcyB0byB0aGUgZmxvdy4gVGhpcyBpcyBhIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVnIHdoZXJlIHRoZSBmbG93IGNvdWxkIGJlIGZyZWVkIGJ5IGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoZSB3b3JrZXIgd2FzIHN0aWxsIGFjY2Vzc2luZyBpdC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAobGlrZSBLQ1NBTikuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViZjcwMzMwOTRlNzU5MTgwOWM2NmIyYzk4MTkwMWUwZWJlYzZiMWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjoyNjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG5pbmRleCA4MDFhM2RkOWNlZWEzLi42NzU3ZmQ4OWMxZjFhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuQEAgLTk5NSw3ICs5OTUsNiBAQCBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19kZWwoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxuIFx0Zmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcbiBcdGlmICh0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNm9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VmbGFncykpXG4gXHRcdGZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7XG4tXHRzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3R1cGxlX3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbkBAIC0xMDU5LDYgKzEwNTgsMTIgQEAgc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR9XG4gXG4gXHRjbGVhcl9iaXQoTkZfRkxPV19IV19QRU5ESU5HLCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpO1xuK1x0aWYgKG9mZmxvYWQtXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcbitcdFx0LyogUHVibGlzaCBhZnRlciB0aGUgd29ya2VyJ3MgbGFzdCBmbG93IGFjY2Vzcy4gKi9cbitcdFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4rXHRcdHNldF9iaXQoTkZfRkxPV19IV19ERUFELCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpO1xuK1x0fVxuK1xuIFx0a2ZyZWUob2ZmbG9hZCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MjguNTM4MjE4NjMyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNDUzNTQ3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoZXkndmUgbW92ZWQgdGhlIGBzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKTtgIGNhbGwgZnJvbSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsKClgIHRvIHRoZSBlbmQgb2YgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoKWAsIHJpZ2h0IGFmdGVyIGNsZWFyaW5nIGBORl9GTE9XX0hXX1BFTkRJTkdgIGFuZCBiZWZvcmUgZnJlZWluZyB0aGUgYG9mZmxvYWRgIHN0cnVjdHVyZS4gVGhleSd2ZSBhbHNvIHRocm93biBpbiBhIGBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtgIG1lbW9yeSBiYXJyaWVyIGJlZm9yZSBzZXR0aW5nIHRoZSBgTkZfRkxPV19IV19ERUFEYCBiaXQuXG5cbk15IFNwaWRleS1TZW5zZSBpcyB0aW5nbGluZ+KAlHRoaXMgc2NyZWFtcyByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUuIEl0IGxvb2tzIGxpa2Ugc2V0dGluZyBgTkZfRkxPV19IV19ERUFEYCB0b28gZWFybHkgaW4gdGhlIGRlbGV0aW9uIHBhdGggKGBmbG93X29mZmxvYWRfd29ya19kZWwoKWApIG1pZ2h0IGhhdmUgYWxsb3dlZCBhbm90aGVyIHRocmVhZCwgbWF5YmUgc29tZSBzb3J0IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiBvciBzb21lIG90aGVyIHByb2Nlc3MsIHRvIGZyZWUgYG9mZmxvYWQtXHUwMDNlZmxvd2Agd2hpbGUgdGhlIHdvcmtlciB0aHJlYWQgd2FzIHN0aWxsIHRyeWluZyB0byBhY2Nlc3MgaXQuIFNvLCBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUuIExldCdzIHNlZS4uLlxuXG5JIHdlbnQgdGhyb3VnaCBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcigpYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbCgpYCBpbiBteSBtaW5kLiBZZXMsIGBvZmZsb2FkLVx1MDAzZWZsb3dgIGlzIGFjY2Vzc2VkIGluIG11bHRpcGxlIHBsYWNlcyB3aXRoaW4gYGZsb3dfb2ZmbG9hZF93b3JrX2RlbCgpYCwgYW5kIHRoZSBiaXQgYmVpbmcgc2V0IG1pZ2h0IGFsbG93IGEgcHJlbWF0dXJlIGZyZWUuIFRoaXMgZGVmaW5pdGVseSBoYXMgdGhlIGZpbmdlcnByaW50IG9mIGEgVUFGLlxuXG5Ob3csIGEga2V5IHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gTm8sIG5vdCByZWFsbHkuIEl0J3MganVzdCByZWFycmFuZ2luZyBhIGJpdCBzZXR0aW5nIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gTm8gbmV3IHN0cnVjdHVyZXMsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm90aGluZyB0byBzdWdnZXN0IGluZm8tbGVha3MsIHNvIEkgc2hvdWxkIGJlIG9rYXkuXG5cbkFmdGVyIGEgc2Vjb25kIHF1aWNrIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgYSBmaXggZm9yIGEgVUFGLiBDb25jdXJyZW5jeSBpcyBkZWZpbml0ZWx5IHRoZSBwcm9ibGVtLiBLQVNBTiBpcyB0aGUgdG9vbCBoZXJlLCBub3QgS01TQU4uIEknbGwgZ28gYWhlYWQgYW5kIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCBteSByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDQsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MzcuODgzNTc2MTU2WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgc2V0dGluZyBvZiB0aGUgYE5GX0ZMT1dfSFdfREVBRGAgYml0IGluIGBvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFnc2AgZnJvbSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsKClgIHRvIHRoZSBlbmQgb2YgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoKWAsIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSBpdCBpcyBwdWJsaXNoZWQgb25seSBhZnRlciB0aGUgd29ya2VyJ3MgbGFzdCBhY2Nlc3MgdG8gdGhlIGZsb3cuIFRoaXMgaXMgYSBmaXggZm9yIGEgY29uY3VycmVuY3kgaXNzdWUsIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIChVQUYpIGJ1ZyB3aGVyZSB0aGUgZmxvdyBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCB3aGlsZSB0aGUgd29ya2VyIHdhcyBzdGlsbCBhY2Nlc3NpbmcgaXQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIHJhY2UgY29uZGl0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKGxpa2UgS0NTQU4pLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgc2V0dGluZyBvZiB0aGUgYE5GX0ZMT1dfSFdfREVBRGAgYml0IGluIGBvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFnc2AgZnJvbSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsKClgIHRvIHRoZSBlbmQgb2YgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoKWAsIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSBpdCBpcyBwdWJsaXNoZWQgb25seSBhZnRlciB0aGUgd29ya2VyJ3MgbGFzdCBhY2Nlc3MgdG8gdGhlIGZsb3cuIFRoaXMgaXMgYSBmaXggZm9yIGEgY29uY3VycmVuY3kgaXNzdWUsIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIChVQUYpIGJ1ZyB3aGVyZSB0aGUgZmxvdyBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCB3aGlsZSB0aGUgd29ya2VyIHdhcyBzdGlsbCBhY2Nlc3NpbmcgaXQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIHJhY2UgY29uZGl0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKGxpa2UgS0NTQU4pLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrz5jg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 22:08:32 +0000 UTC FinishedAt: 2026-08-18 22:28:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e625a9477d12baaff4025c5f9989184a907ea8fc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NF_FLOW_TABLE_INET", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e625a9477d12baaff4025c5f9989184a907ea8fc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NF_FLOW_TABLE_INET", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "3283fd1d-6956-442c-aba8-e739fe08a624" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_flow_offload_add", "nf_flow_offload_del", "nf_flow_table_offload_setup", "flow_offload_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2RlbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkX2FkZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBzZXR0aW5nIG9mIHRoZSBgTkZfRkxPV19IV19ERUFEYCBiaXQgaW4gYG9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VmbGFnc2AgZnJvbSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsKClgIHRvIHRoZSBlbmQgb2YgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoKWAsIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSBpdCBpcyBwdWJsaXNoZWQgb25seSBhZnRlciB0aGUgd29ya2VyJiMzOTtzIGxhc3QgYWNjZXNzIHRvIHRoZSBmbG93LiBUaGlzIGlzIGEgZml4IGZvciBhIGNvbmN1cnJlbmN5IGlzc3VlLCBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBidWcgd2hlcmUgdGhlIGZsb3cgY291bGQgYmUgZnJlZWQgYnkgYW5vdGhlciB0aHJlYWQgd2hpbGUgdGhlIHdvcmtlciB3YXMgc3RpbGwgYWNjZXNzaW5nIGl0LiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFuZCByYWNlIGNvbmRpdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChsaWtlIEtDU0FOKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhhcmR3YXJlIG9mZmxvYWQgd29ya3F1ZXVlIGhhbmRsZXIgYnkgZGVsYXlpbmcgdGhlIHNldHRpbmcgb2YgdGhlIE5GX0ZMT1dfSFdfREVBRCBmbGFnIHVudGlsIGFmdGVyIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkIGZvciBhIGZsb3d0YWJsZS4gRnV6emluZyB0aGlzIGFyZWEgY2FuIGhlbHAgZW5zdXJlIHRoYXQgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDViZjcwMzMwOTRlNzU5MTgwOWM2NmIyYzk4MTkwMWUwZWJlYzZiMWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjoyNjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuaW5kZXggODAxYTNkZDljZWVhMy4uNjc1N2ZkODljMWYxYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbkBAIC05OTUsNyAmIzQzOzk5NSw2IEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4gXHRmbG93X29mZmxvYWRfdHVwbGVfZGVsKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xuIFx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKSlcbiBcdFx0Zmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbi1cdHNldF9iaXQoTkZfRkxPV19IV19ERUFELCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfdHVwbGVfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxuQEAgLTEwNTksNiAmIzQzOzEwNTgsMTIgQEAgc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR9XG4gXG4gXHRjbGVhcl9iaXQoTkZfRkxPV19IV19QRU5ESU5HLCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpO1xuJiM0MztcdGlmIChvZmZsb2FkLVx1MDAzZWNtZCA9PSBGTE9XX0NMU19ERVNUUk9ZKSB7XG4mIzQzO1x0XHQvKiBQdWJsaXNoIGFmdGVyIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBmbG93IGFjY2Vzcy4gKi9cbiYjNDM7XHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuJiM0MztcdFx0c2V0X2JpdChORl9GTE9XX0hXX0RFQUQsIFx1MDAyNm9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGtmcmVlKG9mZmxvYWQpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEVfSU5FVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2FkZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZGVsJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCYjMzQ7LAogICAgJiMzNDtmbG93X29mZmxvYWRfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhhcmR3YXJlIG9mZmxvYWQgd29ya3F1ZXVlIGhhbmRsZXIgYnkgZGVsYXlpbmcgdGhlIHNldHRpbmcgb2YgdGhlIE5GX0ZMT1dfSFdfREVBRCBmbGFnIHVudGlsIGFmdGVyIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkIGZvciBhIGZsb3d0YWJsZS4gRnV6emluZyB0aGlzIGFyZWEgY2FuIGhlbHAgZW5zdXJlIHRoYXQgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViZjcwMzMwOTRlNzU5MTgwOWM2NmIyYzk4MTkwMWUwZWJlYzZiMWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjoyNjozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCmluZGV4IDgwMWEzZGQ5Y2VlYTMuLjY3NTdmZDg5YzFmMWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYwpAQCAtOTk1LDcgJiM0Mzs5OTUsNiBAQCBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19kZWwoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKQogCWZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7CiAJaWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgJmFtcDtvZmZsb2FkLSZndDtmbG93LSZndDtmbGFncykpCiAJCWZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7Ci0Jc2V0X2JpdChORl9GTE9XX0hXX0RFQUQsICZhbXA7b2ZmbG9hZC0mZ3Q7Zmxvdy0mZ3Q7ZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfdHVwbGVfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLApAQCAtMTA1OSw2ICYjNDM7MTA1OCwxMiBAQCBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAl9CiAKIAljbGVhcl9iaXQoTkZfRkxPV19IV19QRU5ESU5HLCAmYW1wO29mZmxvYWQtJmd0O2Zsb3ctJmd0O2ZsYWdzKTsKJiM0MzsJaWYgKG9mZmxvYWQtJmd0O2NtZCA9PSBGTE9XX0NMU19ERVNUUk9ZKSB7CiYjNDM7CQkvKiBQdWJsaXNoIGFmdGVyIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBmbG93IGFjY2Vzcy4gKi8KJiM0MzsJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwomIzQzOwkJc2V0X2JpdChORl9GTE9XX0hXX0RFQUQsICZhbXA7b2ZmbG9hZC0mZ3Q7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiAJa2ZyZWUob2ZmbG9hZCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSByZWxvY2F0aW9uIG9mIGBzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgJmFtcDtvZmZsb2FkLSZndDtmbG93LSZndDtmbGFncyk7YC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgbW92ZWQgdGhhdCBiaXQtc2V0dGluZyBmcm9tIGBmbG93X29mZmxvYWRfd29ya19kZWxgIHRvIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGNvbW1hbmQgYG9mZmxvYWQtJmd0O2NtZGAgaXMgYEZMT1dfQ0xTX0RFU1RST1lgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBJIHdvbmRlciBhYm91dCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGF0IHNoaWZ0LiBQb3RlbnRpYWxseSBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUgdGltaW5nIGlzc3VlIG9yIG1heWJlIGEgcmFjZSBjb25kaXRpb24gdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHJlc29sdmUuCgpUaGUgYWRkaXRpb24gb2YgYHNtcF9tYl9fYmVmb3JlX2F0b21pYygpYCBpcyBhbm90aGVyIHBvaW50IG9mIGludGVyZXN0LiBBIG1lbW9yeSBiYXJyaWVyIGhlcmUgc3VnZ2VzdHMgdGhleSBhcmUgY29uY2VybmVkIGFib3V0IHRoZSBvcmRlciBpbiB3aGljaCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkLCBsaWtlbHkgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBtdWx0aS1jb3JlIGVudmlyb25tZW50LiBUaGlzIHN0cm9uZ2x5IGluZGljYXRlcyB0aGV5IGFyZSB0cnlpbmcgdG8gZW5zdXJlIHRoYXQgdGhlIGhhcmR3YXJlIHNlZXMgdGhlIGBORl9GTE9XX0hXX0RFQURgIGZsYWcgc2V0IGJlZm9yZSBhIHJlbGF0ZWQgYXRvbWljIG9wZXJhdGlvbiBvY2N1cnMuCgpJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgIGFuZCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJgLiBDb250ZXh0IGlzIGtpbmcuIFNlZWluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBlYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgdGhlIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IG90aGVyIGNvZGUgaW50ZXJhY3RzIHdpdGggYG9mZmxvYWQtJmd0O2Zsb3ctJmd0O2ZsYWdzYCBhbmQgYEZMT1dfQ0xTX0RFU1RST1lgIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhdGNoIGlzIGEgYnVnIGZpeCwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfd29ya19kZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTczPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk5MjpzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19kZWwoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTAzNj1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNDgtXHRcdGNhc2UgRkxPV19DTFNfREVTVFJPWTpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA0OTpcdFx0XHRmbG93X29mZmxvYWRfd29ya19kZWwob2ZmbG9hZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNTAtXHRcdFx0TkZfRkxPV19UQUJMRV9TVEFUX0RFQ19BVE9NSUMobmV0LCBjb3VudF93cV9kZWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgd2hlbiBgTkZfRkxPV19IV19ERUFEYCBnZXRzIHNldC4gVGhhdCBzb3VuZHMgbGlrZSBhIHByZXR0eSBjcml0aWNhbCB0aW1pbmcgY2hhbmdlIGluIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgbG9naWMgd2l0aGluIG5ldGZpbHRlci4gSW1tZWRpYXRlbHksIG15IGludGVybmFsIHJhZGFyIHBpbmdzIOKAkyBhIHRpbWluZyBjaGFuZ2UgaW4gdGhhdCBhcmVhIG9mdGVuIHBvaW50cyB0byBjb25jdXJyZW5jeSBidWdzLiBMaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbi4gV2UgbmVlZCB0byBhc3Nlc3MgdGhpcyBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgYSBuYXN0eSBtZW1vcnkgY29ycnVwdGlvbiBidWcsIGFic29sdXRlbHksIGZ1enppbmcgaXMgd2FycmFudGVkIGhlcmUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSBuZWVkIHRvIGVuYWJsZSB0byBnZXQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCBhY3RpdmUgYW5kIGV4cG9zZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRoIGZvciBvdXIgZnV6emluZyBlZmZvcnRzLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvbmZpZ3MgYW5kIGdldCB0aGUgY29ycmVjdCBzZXQgb2Ygb3B0aW9ucyB0byByZXByb2R1Y2UgdGhlIGJ1ZyBhbmQgYmVnaW4gb3VyIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd190YWJsZV9vZmZsb2FkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mz1uZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NTpcdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ2LW5mX2Zsb3dfdGFibGUtJChDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlMpICYjNDM7PSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBGbG93IFRhYmxlIE9iamVjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQmIzM5O3MgY2xlYXJseSBwYXJ0IG9mIHRoZSBgbmZfZmxvd190YWJsZS1vYmpzYCBjb250ZXh0LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24uIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgbmZfZmxvd190YWJsZWAgbW9kdWxlIGlzIGNvbmZpZ3VyZWQuIFRoYXQgY29uZmlnIGlzIGdvaW5nIHRvIGRpY3RhdGUgZXZlcnl0aGluZyBhYm91dCBpdHMgYmVoYXZpb3Ig4oCTIHRoZSB0YWJsZSYjMzk7cyBzaXplLCBpdHMgYWdpbmcgcGFyYW1ldGVycywgcGVyaGFwcyBldmVuIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBpdCYjMzk7cyB1c2luZy4gSSYjMzk7bGwgbmVlZCB0aGF0IHRvIHVuZGVyc3RhbmQgaXRzIGxpbWl0YXRpb25zIGFuZCBob3cgSSBtaWdodCBiZSBhYmxlIHRvIHR1bmUgaXQuIFRpbWUgdG8gdHJhY2sgZG93biB0aGF0IGNvbmZpZ3VyYXRpb24hIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGxvb2tpbmcgYXQga2VybmVsIGNvbmZpZyBmaWxlcyBvciBtb2R1bGUgcGFyYW1ldGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzOT1vYmotJChDT05GSUdfTkZUX0ZXRF9ORVRERVYpXHQmIzQzOz0gbmZ0X2Z3ZF9uZXRkZXYub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXHQmIzQzOz0gbmZfZmxvd190YWJsZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MzpuZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NTpcdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ2LW5mX2Zsb3dfdGFibGUtJChDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlMpICYjNDM7PSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03NDQ9dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzQ4LVx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VnY193b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzQ5Olx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3d0YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1MC19XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03NjM9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc2OS1cdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWdjX3dvcmspO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NzA6XHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goZmxvd190YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc3MS1cdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzczLVx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3NDpcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzUtXHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VyaGFzaHRhYmxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTgyND1zdGF0aWMgaW50IF9faW5pdCBuZl9mbG93X3RhYmxlX21vZHVsZV9pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04MzUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjgzNjpcdHJldCA9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTgzNy1cdGlmIChyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NDYtb3V0X2JwZjpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODQ3Olx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2V4aXQoKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODQ4LW91dF9vZmZsb2FkOlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODU1PXN0YXRpYyB2b2lkIF9fZXhpdCBuZl9mbG93X3RhYmxlX21vZHVsZV9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg1Ni17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjg1NzpcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg1OC1cdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZuZl9mbG93X3RhYmxlX25ldF9vcHMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Njg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaW5ldCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTcwLVx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjcxOlx0LnNldHVwXHRcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03Mi1cdC5hY3Rpb25cdFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaW5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTc4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy04MC1cdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo4MTpcdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODItXHQuYWN0aW9uXHRcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz04OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY2ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTAtXHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6OTE6XHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkyLVx0LmFjdGlvblx0XHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE1Mz12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTY5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTcwOnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTcxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzg6dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTc5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyNDM9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX2luZHJfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjU1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjU2OnN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI1Ny1cdFx0XHRcdCAgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI3NC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI3NTppbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI3Ni1cdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjg2LVx0aWYgKGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXR1cF90Yylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI4NzpcdFx0ZXJyID0gbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChcdTAwMjZibywgZmxvd3RhYmxlLCBkZXYsIGNtZCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4OC1cdFx0XHRcdFx0XHRcdTAwMjZleHRhY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI5Ni19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyOTc6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI5OC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI5OTppbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzI0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI1OnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2V4aXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk0NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29kZSYjMzk7cyByZWZlcmVuY2luZyBgTkZfRkxPV19UQUJMRWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIG5ldGZpbHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZlYXR1cmUgZmxhZyBhY3R1YWxseSAqZG9lcyouIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgcmlnaHQgYXdheS4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOZXRmaWx0ZXIgYXJlIGRlZmluZWQsIGFuZCB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTGludXgga2VybmVsIGlzIGNvbmZpZ3VyZWQuIEkga25vdyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzZWN0aW9uIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBORl9GTE9XX1RBQkxFYCBhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucyBvbiB0aGUgYnVpbGQuIFRoaXMgdGVsbHMgbWUgaWYgaXQmIzM5O3MgYSBjb21waWxlLXRpbWUgb3B0aW9uLCBhIG1vZHVsZSwgb3Igd2hhdC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgdHlwaWNhbCB0aGluZ3MgSSB3YW50IHRvIGxvb2sgZm9yOiBJcyB0aGVyZSBhIGRlZmF1bHQgc2V0dGluZz8gSXMgaXQgZGVwZW5kZW50IG9uIGFub3RoZXIgZmVhdHVyZT8gQXJlIHRoZXJlIGFueSBjb21tZW50cyBkZXRhaWxpbmcgdGhlIHVzZSBjYXNlLCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBvciBzZWN1cml0eSBjb25zaWRlcmF0aW9ucz8gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1kb2N1bWVudGVkIGFzIHRoaXMgaXMgYSBjb3JlIHBpZWNlIG9mIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzExOmNvbmZpZyBORl9GTE9XX1RBQkxFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVx0Ym9vbCBcJiMzNDtTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgTkZfRkxPV19UQUJMRWAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5GX0ZMT1dfVEFCTEVgLiBJdCYjMzk7cyBhIGtleSBjb21wb25lbnQgaW4gdGhlIG5ldGZpbHRlciBlY29zeXN0ZW0sIGJ1dCBiZWZvcmUgSSBkaWcgaW50byBpdHMgc3BlY2lmaWNzLCBJIHdhbnQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3LiBXaGVyZSBkb2VzIGl0IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZT8gV2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBjb21wb25lbnRzIGlzIGl0IHRpZ2h0bHkgY291cGxlZCB3aXRoPyBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGluY2x1c2lvbiBwYXRocyBhbmQgc2VlIHdoYXQgaW5jbHVkZXMgaXQsIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCwgZXNwZWNpYWxseSBpZiBhbnkga2V5IGRhdGEgc3RydWN0dXJlcyBvciBBUElzIGZyb20gb3RoZXIgY29tcG9uZW50cyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gaXRzIGRlZmluaXRpb25zLiBBcmUgdGhlcmUgYW55IG9idmlvdXMgY2FuZGlkYXRlcyBsaWtlIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgb3Igb3RoZXIgbmV0ZmlsdGVyIG1vZHVsZXM/IEFyZSB0aGVyZSBhbnkga2VybmVsIHN1YnN5c3RlbXMsIG1heWJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxvY2tpbmcsIG9yIHRoZSBuZXR3b3JraW5nIHN0YWNrIGl0c2VsZiwgdGhhdCBpdCBjcml0aWNhbGx5IHJlbGllcyB1cG9uPyBUaGlzIGluaXRpYWwgZGVwZW5kZW5jeSBzY2FuIGlzIGVzc2VudGlhbCBmb3IgYW55IGRlZXAgZGl2ZSBvciBtb2RpZmljYXRpb24sIHRvIGF2b2lkIGJyZWFraW5nIHNvbWV0aGluZyBkb3duc3RyZWFtIG9yIGludHJvZHVjaW5nIHN1YnRsZSwgaGFyZC10by1kZWJ1ZyBpc3N1ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRSQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMz1jb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDcxMS4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgW2luc2VydCB5b3VyIGFzc3VtcHRpb24gb2Ygd2hhdCB5b3UmIzM5O3JlIGludGVyZXN0ZWQgaW4gYmFzZWQgb24gdGhlIEtjb25maWcgZmlsZV0uIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBwb3RlbnRpYWxseSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIFthZ2FpbiwgaW5zZXJ0IHlvdXIgZWR1Y2F0ZWQgZ3Vlc3NdLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBmZWF0dXJlIHNlbGVjdGlvbiBvciBleGNsdXNpb24gbG9naWMgcmVzaWRlcyBmb3IgW3RoZSBmZWF0dXJlIHRoZSB1c2VyIGlzIGludmVzdGlnYXRpbmddLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIHBvc3NpYmx5IGludm9sdmluZyBgZGVwZW5kcyBvbmAgY2xhdXNlcywgdGhhdCBnb3Zlcm4gd2hldGhlciBvciBub3QgY2VydGFpbiBOZXRmaWx0ZXIgbW9kdWxlcyBvciBmdW5jdGlvbmFsaXRpZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgc3BlY2lmaWMgZmVhdHVyZXMgcmVsYXRlZCB0byBbdGhlIGFzcGVjdCB0aGUgdXNlciBoYXMgaW4gbWluZF0sIGFuZCBob3cgdGhvc2UgY2hvaWNlcyBpbnRlcnJlbGF0ZSB3aXRoIG90aGVyIE5ldGZpbHRlciBjb21wb25lbnRzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCBbdGhlIGFzcGVjdCB0aGV5JiMzOTtyZSBpbnRlcmVzdGVkIGluXS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFxuIDcwMTpcdGVuZGlmICMgTkZfVEFCTEVTXG4gNzAyOlx0XG4gNzAzOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxuIDcwNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuIDcwNTpcdFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IHN1cHBvcnQuXG4gNzA4Olx0XG4gNzA5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gNzEwOlx0XG4gNzExOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbiA3MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuIDcxMzpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfSU5HUkVTU1xuIDcxNDpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA3MTU6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gNzE2Olx0XHRoZWxwXG4gNzE3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgY29yZSBpbmZyYXN0cnVjdHVyZS5cbiA3MTg6XHRcbiA3MTk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiA3MjA6XHRcbiA3MjE6XHRjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbiA3MjI6XHRcdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiA3MjM6XHRcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxuIDcyNDpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gNzI1Olx0XHRoZWxwXG4gNzI2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZm9yIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgc3RhdGlzdGljc1xuIDcyNzpcdFx0ICB0byBiZSBzaG93biBpbiBwcm9jZnMgdW5kZXIgbmV0L25ldGZpbHRlci9uZl9mbG93dGFibGUuXG4gNzI4Olx0XG4gNzI5Olx0Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgTkZfRkxPV19UQUJMRWAgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCByZWxpZXMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZW5hYmxlIGBORl9GTE9XX1RBQkxFYCwgb2J2aW91c2x5LgoKTm93LCBpZiB3ZSB3YW50IHRvIGdldCBpbnRvIHRoZSByZWFsbSBvZiBoYXJkd2FyZSBvZmZsb2FkLCBJIGJldCB0aGVyZSBhcmUgYSBmZXcgbW9yZSBjb25maWdzIHdlIG5lZWQgdG8gY29uc2lkZXIuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGluc3BlY3RpbmcgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgIHRvIHNlZSBpZiB0aGF0IGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBub3QuIEFoLCB3YWl0LCBubyBuZWVkLCBpdCBsb29rcyBsaWtlIGBuZl9mbG93X3RhYmxlX29mZmxvYWQub2AgKmlzKiBhbHdheXMgY29tcGlsZWQgd2hlbiBgTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gR29vZCwgZ29vZC4gTm8gZ290Y2hhcyB0aGVyZS4KCkFscmlnaHQsIHdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIHdpdGhpbiB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBsb2dpYz8gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggc2VlbXMgdG8gbW9kaWZ5IGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbGAuIFRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCB1c3VhbGx5IG1lYW5zIHRoZXkmIzM5O3JlIGludGVybmFsIHRvIHRoZSBtb2R1bGUuIFNvLCB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBBaCwgaGVyZSB3ZSBnbywgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJgIGlzIGEgd29ya3F1ZXVlIGhhbmRsZXIuIEFuZCBpdCBsb29rcyBsaWtlIGl0IGlzIHNjaGVkdWxlZCBieSBgZmxvd19vZmZsb2FkX3dvcmtfYWRkYC4gT2theSwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfd29ya19hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTU3PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX3J1bGVfYWRkKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTczOnN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk3NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDM2PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0NC1cdFx0Y2FzZSBGTE9XX0NMU19SRVBMQUNFOlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDQ1Olx0XHRcdGZsb3dfb2ZmbG9hZF93b3JrX2FkZChvZmZsb2FkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0Ni1cdFx0XHRORl9GTE9XX1RBQkxFX1NUQVRfREVDX0FUT01JQyhuZXQsIGNvdW50X3dxX2FkZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NjgKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIHRoZSBXb3JrcXVldWUgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGNoYWluIGludm9sdmluZyBgZmxvd19vZmZsb2FkX3dvcmtfYWRkYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyYjMzQ7IEJ1dCB0aGVuIEkgaGFkIHRvIG1lbnRhbGx5IGNvcnJlY3QgbXlzZWxmIOKAkyBoYW5nIG9uLCBpc24mIzM5O3QgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJgIGludm9sdmVkPyBBbmQgdGhlbiBpdCBoaXQgbWUuIFJpZ2h0LCBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcmAgKmlzKiB0aGUgd29ya3F1ZXVlIGhhbmRsZXIuIFNvLCB0aGUgcmVsYXRpb25zaGlwIGlzIHRoYXQgdGhlIGhhbmRsZXIgaXRzZWxmIGxpa2VseSBtYWtlcyB0aGUgY2FsbCB0byBgZmxvd19vZmZsb2FkX3dvcmtfYWRkYCwgb3IgcG90ZW50aWFsbHkgaXRzIGNvdW50ZXJwYXJ0LCBgZmxvd19vZmZsb2FkX3dvcmtfZGVsYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyBgb2ZmbG9hZC0mZ3Q7Y21kYCBmaWd1cmVzIGludG8gdGhlIGNob2ljZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG9mZmxvYWQtJmd0O2NtZGAgZGV0ZXJtaW5lcyBpZiBgZmxvd19vZmZsb2FkX3dvcmtfYWRkYCBvciBgZmxvd19vZmZsb2FkX3dvcmtfZGVsYCBhcmUgY2FsbGVkLCBidXQgdGhhdCBmZWVscyByaWdodC4gVGhlIG5leHQgcXVlc3Rpb24gaXMsIHdoZXJlIGV4YWN0bHkgd2l0aGluIHRoZSBzeXN0ZW0gaXMgdGhpcyB3b3JrIGJlaW5nIHF1ZXVlZD8gVGhhdCYjMzk7cyB0aGUga2V5IG5leHQgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHdob2xlIHRoaW5nIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJTklUX1dPUksuKmZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA4Nz1uZl9mbG93X29mZmxvYWRfd29ya19hbGxvYyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTAzLVx0b2ZmbG9hZC1cdTAwM2VmbG93dGFibGUgPSBmbG93dGFibGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMDQ6XHRJTklUX1dPUksoXHUwMDI2b2ZmbG9hZC1cdTAwM2V3b3JrLCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFsbG9jYXRpbmcgdGhlIE9mZmxvYWQgV29yayoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mZmxvYWQgd29yayBhbGxvY2F0aW9uIHByb2Nlc3Mg4oCTIHNwZWNpZmljYWxseSwgYG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2FsbG9jYC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUsIGFzIGFsd2F5cywgaXMgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSYjMzk7bSB2aXN1YWxpemluZyBob3cgdGhpcyBmdW5jdGlvbiBjYXJlZnVsbHkgbWFuYWdlcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgd29yayBpdHNlbGYuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgc2V0dGluZyB1cCB0aGUgc3RydWN0dXJlcywgdGhlIG1lbW9yeSwgdGhlIG1ldGFkYXRhLCBldmVyeXRoaW5nIG5lZWRlZCB0byByZXByZXNlbnQgYSBwYXJ0aWN1bGFyIGZsb3cgdGhhdCYjMzk7cyBiZWluZyBvZmZsb2FkZWQuIFRoZSBzcGVjaWZpYyBpbnRlcm5hbHMgb2YgKmhvdyogaXQmIzM5O3MgZG9uZeKAlHRoZSBhbGdvcml0aG1zLCB0aGUgcG90ZW50aWFsIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMsIGFsbCBvZiB0aGF0IGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgb2ZmbG9hZCBhcmNoaXRlY3R1cmUsIHdoaWNoIEkmIzM5O2xsIG5lZWQgdG8ga25vdy4gVGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW4gcmVzb3VyY2VzIGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCBhbmQgYWxzbyB3aWxsIGhhbmRsZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb25lIGNvcnJlY3RseSwgYW5kIHRoZSByaWdodCBzdHJ1Y3R1cmVzIGFyZSBjb3JyZWN0bHkgaW4gcGxhY2UuIEl0IHdpbGwgdGFrZSB0aW1lIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUgd29yayBhbGxvY2F0ZWQgaXMgZG9uZSBpbiBhIHRpbWVseSBtYW5uZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfb2ZmbG9hZF93b3JrX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwODY9c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwODc6bmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2Moc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDg4LVx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHVuc2lnbmVkIGludCBjbWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTE4PXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyMi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEyMzpcdG9mZmxvYWQgPSBuZl9mbG93X29mZmxvYWRfd29ya19hbGxvYyhmbG93dGFibGUsIGZsb3csIEZMT1dfQ0xTX1JFUExBQ0UpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTI0LVx0aWYgKCFvZmZsb2FkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE0MD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9kZWwoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE0NC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE0NTpcdG9mZmxvYWQgPSBuZl9mbG93X29mZmxvYWRfd29ya19hbGxvYyhmbG93dGFibGUsIGZsb3csIEZMT1dfQ0xTX0RFU1RST1kpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTQ2LVx0aWYgKCFvZmZsb2FkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE1Mz12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTYyLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTYzOlx0b2ZmbG9hZCA9IG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2FsbG9jKGZsb3d0YWJsZSwgZmxvdywgRkxPV19DTFNfU1RBVFMpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTY0LVx0aWYgKCFvZmZsb2FkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODY0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRocm91Z2ggaXQgYXMgeW91IGFza2VkOgoKKipBbmFseXppbmcgRmxvdyBPZmZsb2FkIEVudHJ5IFBvaW50cyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZl9mbG93X29mZmxvYWRfcmVmcmVzaGAsIGBuZl9mbG93X29mZmxvYWRfZGVsYCwgYW5kIGBuZl9mbG93X29mZmxvYWRfc3RhdHNgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIG1hbmFnaW5nIGZsb3cgb2ZmbG9hZCwgZnJvbSB3aGF0IEkgY2FuIGdhdGhlci4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGRlcGVuZGVuY2llcyBoZXJlLiBBcmUgdGhlc2UgZnVuY3Rpb25zIHB1cmVseSBpbnRlcm5hbCB0byB0aGlzIHNwZWNpZmljIG1vZHVsZSwgb3IgYXJlIHRoZXkgZXhwb3J0ZWQgYW5kIHV0aWxpemVkIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhleSYjMzk7cmUgcHVibGljIGludGVyZmFjZXMsIG9yIGlmIHRoZXkmIzM5O3JlIHRpZ2h0bHkgY291cGxlZCB3aXRoaW4gYSBzcGVjaWZpYyBzdWJzeXN0ZW0uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgc2lnbmlmaWNhbnQgYW55IGNoYW5nZXMgdG8gdGhlbSBtaWdodCBiZSwgYW5kIHdoYXQgaW1wYWN0IHRoYXQgd291bGQgaGF2ZSBvbiB0aGUgc3lzdGVtLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSByZWZlcmVuY2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfZGVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01Njg9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU4Ni1cdFx0XHRpZiAoIXRlc3RfYml0KE5GX0ZMT1dfSFdfRFlJTkcsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1ODc6XHRcdFx0XHRuZl9mbG93X29mZmxvYWRfZGVsKGZsb3dfdGFibGUsIGZsb3cpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01ODgtXHRcdFx0ZWxzZSBpZiAodGVzdF9iaXQoTkZfRkxPV19IV19ERUFELCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU5NS1cdFx0ICAgIXRlc3RfYml0KE5GX0ZMT1dfSFdfRFlJTkcsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU5NjpcdFx0bmZfZmxvd19vZmZsb2FkX2RlbChmbG93X3RhYmxlLCBmbG93KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTk3LVx0fSBlbHNlIGlmICh0ZXN0X2JpdChORl9GTE9XX0hXLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MjA9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfYWRkX3dxO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyMTpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTIyLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZfZmxvd19vZmZsb2FkX3N0YXRzX3dxO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA3MD1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc4LVx0XHRORl9GTE9XX1RBQkxFX1NUQVRfSU5DX0FUT01JQyhuZXQsIGNvdW50X3dxX2RlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzk6XHRcdHF1ZXVlX3dvcmsobmZfZmxvd19vZmZsb2FkX2RlbF93cSwgXHUwMDI2b2ZmbG9hZC1cdTAwM2V3b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA4MC1cdH0gZWxzZSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTMwPXZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTM5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTQwOnZvaWQgbmZfZmxvd19vZmZsb2FkX2RlbChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNDEtXHRcdFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTcwPXZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3Mi1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzM6XHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3NC1cdFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd3RhYmxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE4MS1cdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgyOlx0XHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExODMtXHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfc3RhdHNfd3EpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTI5OT1pbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMDUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDY6XHRuZl9mbG93X29mZmxvYWRfZGVsX3dxICA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtuZl9mdF9vZmZsb2FkX2RlbFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNy1cdFx0XHRcdFx0XHQgIFdRX1VOQk9VTkQgfCBXUV9TWVNGUywgMCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDg6XHRpZiAoIW5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMDktXHRcdGdvdG8gZXJyX2RlbF93cTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMTgtZXJyX3N0YXRzX3dxOlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzE5Olx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjAtZXJyX2RlbF93cTpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEzMjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyNy1cdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI4Olx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjktXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfc3RhdHNfd3EpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY0MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgbmZfZmxvd19vZmZsb2FkX2RlbGAgaXMgYmVpbmcgdHJpZ2dlcmVkIGZyb20gYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYC4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbiBvciBjbGVhbnVwIG9mIGZsb3cgb2ZmbG9hZCBlbnRyaWVzLCB3aGljaCBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBJdCYjMzk7cyB0cmlnZ2VyZWQgYnkgYSBHQyBwcm9jZXNzLCBzbyBpdCBtYWtlcyBzZW5zZS4KCk9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYWRkaXRpb24gc2lkZSBvZiB0aGluZ3MgYXBwZWFycyBoYW5kbGVkIGJ5IGBuZl9mbG93X29mZmxvYWRfYWRkYCwgd2hpY2ggb3JpZ2luYXRlcyBmcm9tIGBmbG93X29mZmxvYWRfYWRkYCB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfY29yZS5jYC4gVGhpcyBzdWdnZXN0cyB0aGF0IGBuZl9mbG93X29mZmxvYWRfYWRkYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgYWRkaW5nIG5ldyBmbG93cyB0byB0aGUgb2ZmbG9hZCB0YWJsZS4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBmaWxlIG5hbWUgYXMgd2VsbC4gVGhlc2UgYXJlIHRoZSB0d28gcHJpbWFyeSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgaGVyZS4gTG9va3MgbGlrZSB0aGUgY29yZSBhZGRpdGlvbiBpcyBnb2luZyBvbiBpbiB0aGUgY29yZSBmaWxlLCBhbmQgdGhlbiB0aGUgR0MgYW5kIERlbGV0aW9uIGlzIGdvaW5nIG9uIGluIHRoZSBvZmZsb2FkIGZpbGUuIEl0IGxvb2tzIHRvIGJlIGEgZ29vZCwgY2xlYW4sIG1vZHVsYXIgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zMjg9aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1My1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzU0Olx0XHRuZl9mbG93X29mZmxvYWRfYWRkKGZsb3dfdGFibGUsIGZsb3cpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTUtXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjA6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfYWRkX3dxO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMS1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDcwPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9xdWV1ZV93b3JrKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNzUtXHRcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA3NjpcdFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcdTAwMjZvZmZsb2FkLVx1MDAzZXdvcmspO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc3LVx0fSBlbHNlIGlmIChvZmZsb2FkLVx1MDAzZWNtZCA9PSBGTE9XX0NMU19ERVNUUk9ZKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTE4PXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEzMDp2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTMxLVx0XHRcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE3OD12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgwLVx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE4MTpcdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgyLVx0XHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjk5PWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMwMTpcdG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O25mX2Z0X29mZmxvYWRfYWRkXCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAyLVx0XHRcdFx0XHRcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMwMzpcdGlmICghbmZfZmxvd19vZmZsb2FkX2FkZF93cSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzIwLWVycl9kZWxfd3E6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMjE6XHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMi1cdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTMyNT12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjYte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI3Olx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjgtXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCB0aGlua2luZyBpcyB0aGF0IGBmbG93X29mZmxvYWRfYWRkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBsb29rIGxpa2Ugc3Ryb25nIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBCdXQsIGhvbGQgb24gYSBzZWNvbmTigKYgYGZsb3dfb2ZmbG9hZF9hZGRgLCB0aGF0JiMzOTtzIHRoZSAqY29yZSogZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8gT2theSwgcmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBMZXQgbWUgc2VlLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoZXJlIGV4YWN0bHkgYGZsb3dfb2ZmbG9hZF9hZGRgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0IG1lIGNoZWNrIHRoZSBjYWxsIGNoYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zMDk9dW5zaWduZWQgbG9uZyBmbG93X29mZmxvYWRfZ2V0X3RpbWVvdXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMyNy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzI4OmludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMyOS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTMtXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM1NDpcdFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzU1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzU3LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzU4OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hZGQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNTktXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjA6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfYWRkX3dxO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMS1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDcwPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9xdWV1ZV93b3JrKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNzUtXHRcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA3NjpcdFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcdTAwMjZvZmZsb2FkLVx1MDAzZXdvcmspO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc3LVx0fSBlbHNlIGlmIChvZmZsb2FkLVx1MDAzZWNtZCA9PSBGTE9XX0NMU19ERVNUUk9ZKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTE4PXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEzMDp2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTMxLVx0XHRcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE3OD12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgwLVx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE4MTpcdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgyLVx0XHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjk5PWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMwMTpcdG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O25mX2Z0X29mZmxvYWRfYWRkXCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAyLVx0XHRcdFx0XHRcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMwMzpcdGlmICghbmZfZmxvd19vZmZsb2FkX2FkZF93cSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzIwLWVycl9kZWxfd3E6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMjE6XHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMi1cdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTMyNT12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjYte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI3Olx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjgtXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz01MD1zdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEyMC1cdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTIxOlx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTIyLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRGVlcCBEaXZlIGludG8gdGhlIEZsb3cgT2ZmbG9hZCBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaXQgbG9va3MgbGlrZSBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBpcyBjYWxsaW5nIGBmbG93X29mZmxvYWRfYWRkYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIGBuZl9mbG93X29mZmxvYWRfYWRkYCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHF1ZXVlaW5nIHRoZSBhY3R1YWwgd29yay4gTWFrZXMgbWUgd29uZGVyIGhvdyB0aGUgcmVtb3ZhbCBwcm9jZXNzIHdvcmtzLCBzbyBJJiMzOTtsbCBjaGVjayBgbmZfZmxvd19vZmZsb2FkX2RlbGAgYW5kIGBuZl9mbG93X29mZmxvYWRfYWRkYCB3aGlsZSBJJiMzOTttIGF0IGl0LiBIb2xkIG9uLCBgbmZfZmxvd19vZmZsb2FkX2FkZGAgaXMgKmNvbmRpdGlvbmFsbHkqIGNhbGxlZCBmcm9tIGBmbG93X29mZmxvYWRfYWRkYOKAlG9ubHkgaWYgYG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpYCBldmFsdWF0ZXMgdG8gdHJ1ZS4gQWhhISBOb3cgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogd2hhdCB0cmlnZ2VycyBgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWRgPyBTZWVtcyB0byBiZSB0aWVkIHRvIHRoZSBgTkZfRkxPV1RBQkxFX0hXX09GRkxPQURgIGZsYWcuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYG5mdF9mbG93X29mZmxvYWQuY2Agc291cmNlIGNvZGUgdG8gc2VlIGhvdyBpdCB1c2VzIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIHRvIGVuYWJsZSB0aGlzIGhhcmR3YXJlIG9mZmxvYWQgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NDE9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2N0X3RjcChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNDktXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzo1MDpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNTEtXHRcdFx0XHQgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjIwLVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCkpLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjIxOlx0LmV2YWxcdFx0PSBuZnRfZmxvd19vZmZsb2FkX2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMjItXHQuaW5pdFx0XHQ9IG5mdF9mbG93X29mZmxvYWRfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGlzIHRocm91Z2g6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZGAgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgKnRoZSogZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBldmFsdWF0aW9uIHdvcmsgZm9yIHRoZSBgZmxvd19vZmZsb2FkYCBleHByZXNzaW9uIHdpdGhpbiB0aGUgbmZ0YWJsZXMgZnJhbWV3b3JrLiBObyBhbWJpZ3VpdHkgdGhlcmUuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGlzIGEgcGF0aCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYmVpbmcgdHJhdmVsZWQsIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucy4uLiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0aGF0IGdvdmVybnMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGBORlRfRkxPV19PRkZMT0FEYC4gVGhhdOKAmXMgbXkga2V5IHRvIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCBzb3VyY2UgY29kZSBhbmQgaXRzIHNldHRpbmdzLiBJIGNhbiB1c2UgdGhpcyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgaXMgYmVpbmcgdXNlZCBhbmQgaG93IHRvIGFjY2VzcyByZWxldmFudCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19vZmZsb2FkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMj1vYmotJChDT05GSUdfTkZUX0NUKVx0XHQmIzQzOz0gbmZ0X2N0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEzOm9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVx0JiM0Mzs9IG5mdF9mbG93X29mZmxvYWQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTQtb2JqLSQoQ09ORklHX05GVF9MSU1JVClcdFx0JiM0Mzs9IG5mdF9saW1pdC5vXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9MjE3PXN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmxvd19vZmZsb2FkX3R5cGU7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMTg6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMTktXHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9mbG93X29mZmxvYWRfdHlwZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMzA9c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9mbG93X29mZmxvYWRfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMxLVx0Lm5hbWVcdFx0PSBcJiMzNDtmbG93X29mZmxvYWRcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzI6XHQub3BzXHRcdD0gXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzMtXHQucG9saWN5XHRcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9wb2xpY3ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTgxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIEZsb3cgT2ZmbG9hZCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIGBORlRfRkxPV19PRkZMT0FEYC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBuZXRmaWx0ZXIsIGFuZCBsaWtlbHkgYW55IHJlbGF0ZWQgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHksIHNob3VsZCBiZSBkZWZpbmVkLiBMZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIHRoZXJlLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHNldHRpbmdzIGxvb2sgbGlrZS4gR290dGEgdW5kZXJzdGFuZCBpdHMgaW50ZWdyYXRpb24uIE15IGV4cGVydGlzZSBpbiBuZXRmaWx0ZXIgdGVsbHMgbWUgdGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZ2l2ZXMgbWUgdGhlIGluZm9ybWF0aW9uIG9uIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyB0aGlzIG9mZmxvYWQgcmVsaWVzIG9uLCBhbmQgaWYgaXQgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9GTE9XX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5GVF9GTE9XX09GRkxPQURgIOKAkyB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGNvbmZpZyBJIG5lZWQgdG8gZm9jdXMgb24uIE15IG5leHQgc3RlcCBpcyB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcuIFRoZSBjb3JlIGxvZ2ljIGZvciB0aGlzIHNlZW1zIHRvIGJlIG5lc3RsZWQgd2l0aGluIGBuZl9mbG93X3RhYmxlX29mZmxvYWQuY2AsIGFuZCB0aGF0IGNvZGUgaXMgb25seSBjb21waWxlZCBpZiBgTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kOyBpdCBjb25maXJtcyB0aGF0IGJvdGggYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgYXJlIGV4YWN0bHkgd2hhdCBJIHN1c3BlY3RlZC4gSSBrbm93IHRoYXQgYE5GX1RBQkxFU2AgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBlc3NlbnRpYWwgZGVwZW5kZW5jaWVzIGhlcmUsIHNvIHRob3NlIGFyZSBhdXRvbWF0aWNhbGx5IGFjY291bnRlZCBmb3IsIG5vIGZ1cnRoZXIgYWN0aW9uIHJlcXVpcmVkLiBMZXQgbWUganVzdCBjaGVjayBpZiB0aG9zZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBsaWtlIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZfRkxPV19UQUJMRV9JUFY0YCwgYW5kIGBORl9GTE9XX1RBQkxFX0lQVjZgIGFyZSByZWxldmFudCBpbiB0aGlzIGNvbnRleHQg4oCTIGFoLCB3YWl0IGEgbWludXRlLCBJIHNwb3R0ZWQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgZWFybGllciwgc28gaXQmIzM5O3MgY2xlYXJseSBhY3RpdmUgYW5kIHJlbGV2YW50LiBSaWdodCwgdGhhdCBjb25maXJtcyB0aGUgY29yZSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEVfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTcxMT1jb25maWcgTkZfRkxPV19UQUJMRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwOTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZsb3cgdGFibGUgY29uZmlndXJhdGlvbnMgd2l0aGluIE5ldGZpbHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgb3B0aW9ucyBmb3IgZW5hYmxpbmcsIGRpc2FibGluZywgYW5kIHR1bmluZyBmbG93IHRhYmxlIGJlaGF2aW9yIGZvciBib3RoIElQdjQgYW5kIElQdjYgdHJhZmZpYy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzExCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNjEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY29yZSBjb25maWd1cmF0aW9uczogYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19ORVRGSUxURVJfSU5HUkVTU2AgaXMgYSBkZXBlbmRlbmN5IG9mIGBORl9GTE9XX1RBQkxFYCwgc28gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyB3ZWxsLiBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGNoYW5naW5nLgoKTm93LCB0byBuYWlsIGRvd24gdGhlIHNwZWNpZmljcywgSSYjMzk7bGwgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbGAgYXJlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGJlaW5nIHR3ZWFrZWQuIFRoZSByZWFsIGVudHJ5IHBvaW50cywgdGhlIG9uZXMgSSBuZWVkIHRvIGV4YW1pbmUgaW4gZGV0YWlsLCBhcmU6IGBuZl9mbG93X29mZmxvYWRfYWRkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgLCBgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2hgLCBgbmZfZmxvd19vZmZsb2FkX3N0YXRzYCwgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaGAsIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cGAsIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBgLCBgZmxvd19vZmZsb2FkX2FkZGAsIGFuZCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYC4KCkZpcnN0LCBJIHNob3VsZCBjaGVjayBpZiBgbmZfZmxvd19vZmZsb2FkX2FkZGAgaXMgZXhwb3J0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGtub3dpbmcgaXRzIHZpc2liaWxpdHkgd2lsbCBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwobmZfZmxvd19vZmZsb2FkX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MzIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIE1pc3NpbmcgYG5mX2Zsb3dfb2ZmbG9hZF9hZGRgIFN5bWJvbCoqCgpPa2F5LCBzbyBJJiMzOTttIGVuY291bnRlcmluZyBhIHNuYWcuIEkgd2FzIGV4cGVjdGluZyBgbmZfZmxvd19vZmZsb2FkX2FkZGAgdG8gYmUgZXhwb3J0ZWQsIGJ1dCB0aGUgbGlua2VyJiMzOTtzIGNvbXBsYWluaW5nLiBUaW1lIHRvIGRpZyBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBuZl9mbG93X3RhYmxlX29mZmxvYWQuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24sIG9yIGF0IGxlYXN0IHRoZSBkZWNsYXJhdGlvbiwgb2YgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIG5vdCB2aXNpYmxlIGFuZCB3aGF0JiMzOTtzIHByZXZlbnRpbmcgaXRzIHVzZS4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpdHNlbGYgd2lsbCBwcm92aWRlIHNvbWUgY2x1ZXMgYXMgdG8gdGhlIGludGVuZGVkIHNjb3BlIG9yIGFueSBpbnRlcm5hbCBsaW1pdGF0aW9ucy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuLi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIwOnN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZfZmxvd19vZmZsb2FkX2FkZF93cTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjEtc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfZGVsX3dxO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA3MD1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc1LVx0XHRORl9GTE9XX1RBQkxFX1NUQVRfSU5DX0FUT01JQyhuZXQsIGNvdW50X3dxX2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzY6XHRcdHF1ZXVlX3dvcmsobmZfZmxvd19vZmZsb2FkX2FkZF93cSwgXHUwMDI2b2ZmbG9hZC1cdTAwM2V3b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA3Ny1cdH0gZWxzZSBpZiAob2ZmbG9hZC1cdTAwM2VjbWQgPT0gRkxPV19DTFNfREVTVFJPWSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTExOD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMjktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMzA6dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEzMS1cdFx0XHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE4MC1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExODE6XHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE4Mi1cdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTI5OT1pbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDE6XHRuZl9mbG93X29mZmxvYWRfYWRkX3dxICA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtuZl9mdF9vZmZsb2FkX2FkZFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMi1cdFx0XHRcdFx0XHQgIFdRX1VOQk9VTkQgfCBXUV9TWVNGUywgMCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDM6XHRpZiAoIW5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMDQtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMC1lcnJfZGVsX3dxOlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzIxOlx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjItXHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEzMjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzI2LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyNzpcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzI4LVx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmbG93IG9mZmxvYWQgc2l0dWF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgc29tZXRoaW5nIGlzbiYjMzk7dCBleHBvcnRlZCBidXQgKmFsc28qIGlzbiYjMzk7dCBzdGF0aWMuIEl0JiMzOTtzIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGBuZl9mbG93X3RhYmxlYCBtb2R1bGUuIFRoZW4gYGZsb3dfb2ZmbG9hZF9hZGRgICppcyogZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIGEgdmlzaWJsZSBpbnRlcmZhY2UuIEFuZCBJJiMzOTt2ZSBnb3QgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAsIHdoaWNoIGlzICpzdGF0aWMqLiBIbW0sIGJ1dCBob2xkIG9uIOKAkyBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IHNlZW1zIHRvIGFjdCBhcyBhbiBlbnRyeSBwb2ludCBmb3IgdGhlIG5mdGFibGVzIGV4cHJlc3Npb24uIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsISBOb3csIHdoYXQgYWJvdXQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGA/IEFoLCB5ZXMsICp0aGF0KiBpcyBleHBvcnRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Njg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaW5ldCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTcwLVx0LmluaXRcdFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjcxOlx0LnNldHVwXHRcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03Mi1cdC5hY3Rpb25cdFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaW5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTc4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjQgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy04MC1cdC5pbml0XHRcdD0gbmZfZmxvd190YWJsZV9pbml0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo4MTpcdC5zZXR1cFx0XHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODItXHQuYWN0aW9uXHRcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz04OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY2ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTAtXHQuaW5pdFx0XHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6OTE6XHQuc2V0dXBcdFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkyLVx0LmFjdGlvblx0XHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTI1Nj1zdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjc0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjc1OmludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjc2LVx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTYtfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjk3OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjMzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEZsb3cgT2ZmbG9hZCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gc29tZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBmb2N1cy4gTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQuLi4gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIGBmbG93X29mZmxvYWRfYWRkYC4gSXQmIzM5O3MgZXhwb3J0ZWQsIGFuZCBpdCYjMzk7cyB1c2VkIHdpdGhpbiBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCwgc28gaXQgd2FycmFudHMgYSBsb29rLiBNb3Zpbmcgb24sIHdoYXQgYWJvdXQgYG5mX2Zsb3dfb2ZmbG9hZF9hZGRgPyBTaW5jZSBpdCYjMzk7cyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHRoYXQgb3BlbnMgaXQgdXAgYXMgYSBwb3RlbnRpYWwgc3ltYm9sIHRvIGV4YW1pbmUgY2xvc2VseS4gQW5kLCBhbG9uZyB0aGUgc2FtZSBsaW5lcywgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgIGxvb2tzIHByb21pc2luZyB0b28sIGFzIGl0JiMzOTtzIGFsc28gbm9uLXN0YXRpYy4gVG8gbWFrZSBzdXJlIG15IHNjb3BlIGlzIGNvcnJlY3QsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYm90aCBgbmZfZmxvd19vZmZsb2FkX2FkZGAgYW5kIGBuZl9mbG93X29mZmxvYWRfZGVsYCBhcmUgaW5kZWVkIGRlZmluZWQgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMTg9dm9pZCBuZl9mbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTI5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTMwOnZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMzEtXHRcdFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCBzb21lIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCB0aGF0IGFyZSBwb3RlbnRpYWwgYXJlYXMgZm9yIGZ1enppbmc6IGBuZl9mbG93X29mZmxvYWRfYWRkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgLCBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYCwgYW5kIGBmbG93X29mZmxvYWRfYWRkYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGVzZS4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBgbmZfZmxvd19vZmZsb2FkX2FkZGAgaXMgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBpdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBhIGZsb3cgaXMgYWRkZWQgdG8gdGhlIGZsb3cgdGFibGUgYW5kIGhhcmR3YXJlIG9mZmxvYWQgaXMgYWN0aXZlLiBJdCBxdWV1ZXMgYSB3b3JrIGl0ZW0uIFNpbmNlIGl0JiMzOTtzIHBlci1mbG93LCBub3QgcGVyLXBhY2tldCwgZnV6emluZyBpdCBzaG91bGRuJiMzOTt0IGludHJvZHVjZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBjb25jZXJucy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHdvbmRlcmluZyBpZiBqdXN0IGBORl9GTE9XX1RBQkxFYCBhbmQgYE5GVF9GTE9XX09GRkxPQURgIGFyZSBzdWZmaWNpZW50IGZvciBlbmFibGluZyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4gQWZ0ZXIgcmV2aWV3aW5nIHRoZSBkZXBlbmRlbmNpZXMsIGl0IGFwcGVhcnMgdGhhdCBgTkZfRkxPV19UQUJMRWAgZGVwZW5kcyBvbiBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLCB3aGlsZSBgTkZUX0ZMT1dfT0ZGTE9BRGAgZGVwZW5kcyBvbiBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBTbywgeWVzLCBlbmFibGluZyBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBzaG91bGQgY292ZXIgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MuIEFoLCBgTkZfRkxPV19UQUJMRV9JTkVUYCBsb29rcyBsaWtlIGEgZ29vZCBhZGRpdGlvbi4gSSYjMzk7bGwgYWRkIHRoYXQgdG8gdGhlIGxpc3Qgb2YgY29uZmlncy4KCldhaXQsIHRoZSBjb2RlIGluIHF1ZXN0aW9uLCBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLCBpcyBwYXJ0IG9mIHRoZSBmbG93IG9mZmxvYWQgc3lzdGVtLiBTbyBpcyBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGBORl9GTE9XX1RBQkxFYCBpcyBlbmFibGVkPyBMb29raW5nIGF0IHRoZSBidWlsZCBvdXRwdXQsIGBuZl9mbG93X3RhYmxlX29mZmxvYWQub2AgaXMgaW5kZWVkIHdpdGhpbiBgbmZfZmxvd190YWJsZS1vYmpzYC4gSG93ZXZlciwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0byBhY3R1YWxseSB0cmlnZ2VyIHRoZSBoYXJkd2FyZSBvZmZsb2FkLiBUbyBkbyB0aGF0LCBJIG5lZWQgYG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpYCB0byByZXR1cm4gdHJ1ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgc2V0IHRvIHByb2NlZWQgd2l0aCBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd3RhYmxlX2h3X29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTMyOD1pbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzUyLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNTM6XHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1NC1cdFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTM2MD12b2lkIGZsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNzAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM3MTpcdGlmIChsaWtlbHkoIW5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKSB8fFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNzItXHQgICAgdGVzdF9iaXQoTkZfRkxPV19DTE9TSU5HLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzA9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzEte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTcyOlx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3My1cdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE3OD12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzkte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgwOlx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE4MS1cdFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTI3NT1pbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyODItXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyODM6XHRpZiAoIW5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyODQtXHRcdHJldHVybiBuZl9mbG93X29mZmxvYWRfeGRwX3NldHVwKGZsb3d0YWJsZSwgZGV2LCBjbWQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTA0PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xODktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjE5MDpcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMTkxLVx0ICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby1cdTAwM2VkZXYpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWRgIHRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBzb2xpZCBkZWZpbml0aW9uLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIHRvIGJ1aWxkIGEgY29uY2VwdHVhbCBmcmFtZXdvcmsgZm9yIGhvdyB0aGlzIG9mZmxvYWRpbmcgbWVjaGFuaXNtIHdvcmtzIHdpdGhpbiB0aGUgYnJvYWRlciBOZXRmaWx0ZXIgZWNvc3lzdGVtLiBLbm93aW5nIHRoZSBleGFjdCBkZWZpbml0aW9uIHdpbGwgaW5mb3JtIHRoZSBuZXh0IGxldmVsIG9mIG15IGludmVzdGlnYXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBhbnkgYXNzdW1wdGlvbnMgbmVlZCB0byBiZSBjaGVja2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93dGFibGVfaHdfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD03Nj1zdHJ1Y3QgbmZfZmxvd3RhYmxlIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTg4LVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo4OTpzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC05MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODgwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBuZl9mbG93X3RhYmxlLmgqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgODkuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGNydWNpYWwgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIE5ldGZpbHRlciBmbG93IHRhYmxlIGltcGxlbWVudGF0aW9uIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBzZWUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBtYWluIGZsb3cgdGFibGUgc3RydWN0dXJlIGl0c2VsZiwgbWF5YmUgdGhlIGluZGl2aWR1YWwgZmxvdyBlbnRyeSBzdHJ1Y3R1cmUsIGFuZCBwb3RlbnRpYWxseSBhbnkgcmVsYXRlZCBsb2NraW5nIHByaW1pdGl2ZXMgb3IgaGVscGVyIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgd2UgY2FuIGRpZyB1cCB0aGVyZS4gUGVyaGFwcyBJIGNhbiBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgaW4gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XG4gIDgxOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XHRcdC8qIHNsb3dwYXRoIHBhcnRzICovXG4gIDgyOlx0XHRjb25zdCBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGVcdCp0eXBlO1xuICA4MzpcdFx0c3RydWN0IGRlbGF5ZWRfd29ya1x0XHRnY193b3JrO1xuICA4NDpcdFx0c3RydWN0IGZsb3dfYmxvY2tcdFx0Zmxvd19ibG9jaztcbiAgODU6XHRcdHN0cnVjdCByd19zZW1hcGhvcmVcdFx0Zmxvd19ibG9ja19sb2NrOyAvKiBHdWFyZHMgZmxvd19ibG9jayAqL1xuICA4NjpcdFx0cG9zc2libGVfbmV0X3RcdFx0XHRuZXQ7XG4gIDg3Olx0fTtcbiAgODg6XHRcbiAgODk6XHRzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuICA5MDpcdHtcbiAgOTE6XHRcdHJldHVybiBmbG93dGFibGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIge1xuICA5NTpcdFx0RkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCA9IElQX0NUX0RJUl9PUklHSU5BTCxcbiAgOTY6XHRcdEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkgPSBJUF9DVF9ESVJfUkVQTFksXG4gIDk3Olx0fTtcbiAgOTg6XHQjZGVmaW5lIEZMT1dfT0ZGTE9BRF9ESVJfTUFYXHRJUF9DVF9ESVJfTUFYXG4gIDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDIzCgkJCQkJCQlvdXRwdXQ6IDIyNAoJCQkJCQkJdGhvdWdodHM6IDU3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaGFyZHdhcmUgb2ZmbG9hZCBsb2dpYy4gTXkgaW5pdGlhbCBzY2FuIGNoZWNrcyBgZmxvd3RhYmxlLSZndDtmbGFncyAmYW1wOyBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAuIFRoYXQgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZmxvd3RhYmxlIGlzIGNyZWF0ZWQgd2l0aCB0aGUgYG9mZmxvYWRgIGZsYWcgaW4gbmZ0YWJsZXMg4oCTIGl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS4KClRoZSBjb3JlIG9mIHRoZSBmaXggaW52b2x2ZXMgc2V0dGluZyB0aGUgYE5GX0ZMT1dfSFdfREVBRGAgZmxhZyAqYWZ0ZXIqIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgdGhlIGNydWNpYWwgYWRkaXRpb24gb2YgYSBtZW1vcnkgYmFycmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaXJlY3RseSBhZGRyZXNzaW5nIGEgY29uY3VycmVuY3kgaXNzdWUuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBjb25jdXJyZW5jeSBmaXgsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQgaGVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGZpeCBhZGRyZXNzZXMgdGhlIHJhY2UgY29uZGl0aW9uIHdpdGhvdXQgaW50cm9kdWNpbmcgbmV3IHByb2JsZW1zLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgYG5mX2Zsb3dfb2ZmbG9hZF9hZGRgLCBgbmZfZmxvd19vZmZsb2FkX2RlbGAsIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBgLCBhbmQgYGZsb3dfb2ZmbG9hZF9hZGRgLiBJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSwgYW5kIHRoZXkgYXJlLCB0aHJvdWdoIHRoZSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gb2YgbmZ0YWJsZXMgZmxvd3RhYmxlcyB3aXRoIHRoZSBgb2ZmbG9hZGAgZmxhZyBhbmQgdGhlbiB3aGVuIHRyYWZmaWMgbWF0Y2hlcyB0aGVzZSBmbG93dGFibGUgcnVsZXMuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgZGVmaW5pdGVseSBuZWVkIGBORl9GTE9XX1RBQkxFYCwgYE5GVF9GTE9XX09GRkxPQURgLCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBJJiMzOTtkIGp1c3QgaW5jbHVkZSBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgIHRvIGJlIHNhZmUsIGJ1dCB0aGVuIEkgcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBuZWVkIHRvIGZvbGxvdyB0aG9zZSBpbnN0cnVjdGlvbnMgYW5kIGxvb2sgZm9yICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIGBLY29uZmlnYC4gVGhleSBhcmVuJiMzOTt0IHNwZWNpZmljYWxseSBub24tc3RhbmRhcmQsIGJ1dCB0aGV5IGFyZSByZXF1aXJlZC4gSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGFsbCB0aHJlZS4KCk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIGhhbmRsZXIuIEl0IGRlbGF5cyBzZXR0aW5nIHRoZSBgTkZfRkxPV19IV19ERUFEYCBmbGFnIGFuZCBhZGRzIGEgbWVtb3J5IGJhcnJpZXIgdG8gY29ycmVjdCB0aGUgZmxhdy4gVGhlIHJlbGV2YW50IGNvZGUgaXMgdHJpZ2dlcmVkIGJ5IG5mdGFibGVzIGhhcmR3YXJlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBmdXp6aW5nIGlzIGFuIGltcG9ydGFudCBzdGVwIHRvIHZhbGlkYXRlIHRoZSBmaXggYW5kIHJ1bGUgb3V0IG5ldyBpc3N1ZXMuIEkmIzM5O2xsIGZsYWcgaXQgYXMgc3VjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2RlbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIHdvcmtxdWV1ZSBoYW5kbGVyIGJ5IGRlbGF5aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBORl9GTE9XX0hXX0RFQUQgZmxhZyB1bnRpbCBhZnRlciB0aGUgd29ya2VyJiMzOTtzIGxhc3QgZmxvdyBhY2Nlc3MgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyB3aGVuIGhhcmR3YXJlIG9mZmxvYWQgaXMgZW5hYmxlZCBmb3IgYSBmbG93dGFibGUuIEZ1enppbmcgdGhpcyBhcmVhIGNhbiBoZWxwIGVuc3VyZSB0aGF0IHRoZSBjb25jdXJyZW5jeSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9hZGQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2RlbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIHdvcmtxdWV1ZSBoYW5kbGVyIGJ5IGRlbGF5aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBORl9GTE9XX0hXX0RFQUQgZmxhZyB1bnRpbCBhZnRlciB0aGUgd29ya2VyJiMzOTtzIGxhc3QgZmxvdyBhY2Nlc3MgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyB3aGVuIGhhcmR3YXJlIG9mZmxvYWQgaXMgZW5hYmxlZCBmb3IgYSBmbG93dGFibGUuIEZ1enppbmcgdGhpcyBhcmVhIGNhbiBoZWxwIGVuc3VyZSB0aGF0IHRoZSBjb25jdXJyZW5jeSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIHNldHRpbmcgb2YgdGhlIGBORl9GTE9XX0hXX0RFQURgIGJpdCBpbiBgb2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzYCBmcm9tIGBmbG93X29mZmxvYWRfd29ya19kZWwoKWAgdG8gdGhlIGVuZCBvZiBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcigpYCwgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgdG8gZW5zdXJlIGl0IGlzIHB1Ymxpc2hlZCBvbmx5IGFmdGVyIHRoZSB3b3JrZXImIzM5O3MgbGFzdCBhY2Nlc3MgdG8gdGhlIGZsb3cuIFRoaXMgaXMgYSBmaXggZm9yIGEgY29uY3VycmVuY3kgaXNzdWUsIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIChVQUYpIGJ1ZyB3aGVyZSB0aGUgZmxvdyBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCB3aGlsZSB0aGUgd29ya2VyIHdhcyBzdGlsbCBhY2Nlc3NpbmcgaXQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIHJhY2UgY29uZGl0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKGxpa2UgS0NTQU4pLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWJmNzAzMzA5NGU3NTkxODA5YzY2YjJjOTgxOTAxZTBlYmVjNmIxYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDIyOjI2OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMKaW5kZXggODAxYTNkZDljZWVhMy4uNjc1N2ZkODljMWYxYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCkBAIC05OTUsNyAmIzQzOzk5NSw2IEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpCiAJZmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTsKIAlpZiAodGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCAmYW1wO29mZmxvYWQtJmd0O2Zsb3ctJmd0O2ZsYWdzKSkKIAkJZmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX1JFUExZKTsKLQlzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgJmFtcDtvZmZsb2FkLSZndDtmbG93LSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF90dXBsZV9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsCkBAIC0xMDU5LDYgJiM0MzsxMDU4LDEyIEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCX0KIAogCWNsZWFyX2JpdChORl9GTE9XX0hXX1BFTkRJTkcsICZhbXA7b2ZmbG9hZC0mZ3Q7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwlpZiAob2ZmbG9hZC0mZ3Q7Y21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHsKJiM0MzsJCS8qIFB1Ymxpc2ggYWZ0ZXIgdGhlIHdvcmtlciYjMzk7cyBsYXN0IGZsb3cgYWNjZXNzLiAqLwomIzQzOwkJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiYjNDM7CQlzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgJmFtcDtvZmZsb2FkLSZndDtmbG93LSZndDtmbGFncyk7CiYjNDM7CX0KJiM0MzsKIAlrZnJlZShvZmZsb2FkKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNAoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA3NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIE9mZmxvYWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhleSYjMzk7dmUgbW92ZWQgdGhlIGBzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgJmFtcDtvZmZsb2FkLSZndDtmbG93LSZndDtmbGFncyk7YCBjYWxsIGZyb20gYGZsb3dfb2ZmbG9hZF93b3JrX2RlbCgpYCB0byB0aGUgZW5kIG9mIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKClgLCByaWdodCBhZnRlciBjbGVhcmluZyBgTkZfRkxPV19IV19QRU5ESU5HYCBhbmQgYmVmb3JlIGZyZWVpbmcgdGhlIGBvZmZsb2FkYCBzdHJ1Y3R1cmUuIFRoZXkmIzM5O3ZlIGFsc28gdGhyb3duIGluIGEgYHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO2AgbWVtb3J5IGJhcnJpZXIgYmVmb3JlIHNldHRpbmcgdGhlIGBORl9GTE9XX0hXX0RFQURgIGJpdC4KCk15IFNwaWRleS1TZW5zZSBpcyB0aW5nbGluZ+KAlHRoaXMgc2NyZWFtcyByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUuIEl0IGxvb2tzIGxpa2Ugc2V0dGluZyBgTkZfRkxPV19IV19ERUFEYCB0b28gZWFybHkgaW4gdGhlIGRlbGV0aW9uIHBhdGggKGBmbG93X29mZmxvYWRfd29ya19kZWwoKWApIG1pZ2h0IGhhdmUgYWxsb3dlZCBhbm90aGVyIHRocmVhZCwgbWF5YmUgc29tZSBzb3J0IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiBvciBzb21lIG90aGVyIHByb2Nlc3MsIHRvIGZyZWUgYG9mZmxvYWQtJmd0O2Zsb3dgIHdoaWxlIHRoZSB3b3JrZXIgdGhyZWFkIHdhcyBzdGlsbCB0cnlpbmcgdG8gYWNjZXNzIGl0LiBTbywgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlLiBMZXQmIzM5O3Mgc2VlLi4uCgpJIHdlbnQgdGhyb3VnaCBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcigpYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbCgpYCBpbiBteSBtaW5kLiBZZXMsIGBvZmZsb2FkLSZndDtmbG93YCBpcyBhY2Nlc3NlZCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aGluIGBmbG93X29mZmxvYWRfd29ya19kZWwoKWAsIGFuZCB0aGUgYml0IGJlaW5nIHNldCBtaWdodCBhbGxvdyBhIHByZW1hdHVyZSBmcmVlLiBUaGlzIGRlZmluaXRlbHkgaGFzIHRoZSBmaW5nZXJwcmludCBvZiBhIFVBRi4KCk5vdywgYSBrZXkgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgb3IgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBObywgbm90IHJlYWxseS4gSXQmIzM5O3MganVzdCByZWFycmFuZ2luZyBhIGJpdCBzZXR0aW5nIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gTm8gbmV3IHN0cnVjdHVyZXMsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm90aGluZyB0byBzdWdnZXN0IGluZm8tbGVha3MsIHNvIEkgc2hvdWxkIGJlIG9rYXkuCgpBZnRlciBhIHNlY29uZCBxdWljayByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyBhIGZpeCBmb3IgYSBVQUYuIENvbmN1cnJlbmN5IGlzIGRlZmluaXRlbHkgdGhlIHByb2JsZW0uIEtBU0FOIGlzIHRoZSB0b29sIGhlcmUsIG5vdCBLTVNBTi4gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCBteSByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBzZXR0aW5nIG9mIHRoZSBgTkZfRkxPV19IV19ERUFEYCBiaXQgaW4gYG9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VmbGFnc2AgZnJvbSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsKClgIHRvIHRoZSBlbmQgb2YgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoKWAsIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSBpdCBpcyBwdWJsaXNoZWQgb25seSBhZnRlciB0aGUgd29ya2VyJiMzOTtzIGxhc3QgYWNjZXNzIHRvIHRoZSBmbG93LiBUaGlzIGlzIGEgZml4IGZvciBhIGNvbmN1cnJlbmN5IGlzc3VlLCBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBidWcgd2hlcmUgdGhlIGZsb3cgY291bGQgYmUgZnJlZWQgYnkgYW5vdGhlciB0aHJlYWQgd2hpbGUgdGhlIHdvcmtlciB3YXMgc3RpbGwgYWNjZXNzaW5nIGl0LiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFuZCByYWNlIGNvbmRpdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChsaWtlIEtDU0FOKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgc2V0dGluZyBvZiB0aGUgYE5GX0ZMT1dfSFdfREVBRGAgYml0IGluIGBvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3NgIGZyb20gYGZsb3dfb2ZmbG9hZF93b3JrX2RlbCgpYCB0byB0aGUgZW5kIG9mIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKClgLCBhZGRpbmcgYSBtZW1vcnkgYmFycmllciB0byBlbnN1cmUgaXQgaXMgcHVibGlzaGVkIG9ubHkgYWZ0ZXIgdGhlIHdvcmtlciYjMzk7cyBsYXN0IGFjY2VzcyB0byB0aGUgZmxvdy4gVGhpcyBpcyBhIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVnIHdoZXJlIHRoZSBmbG93IGNvdWxkIGJlIGZyZWVkIGJ5IGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoZSB3b3JrZXIgd2FzIHN0aWxsIGFjY2Vzc2luZyBpdC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAobGlrZSBLQ1NBTikuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjozOS4yMjQyNjQ5ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NTkzNDAwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X29mZmxvYWRfYWRkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZGVsXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIixcbiAgICBcImZsb3dfb2ZmbG9hZF9hZGRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBzZXR0aW5nIG9mIHRoZSBgTkZfRkxPV19IV19ERUFEYCBiaXQgaW4gYG9mZmxvYWQtXFx1MDAzZWZsb3ctXFx1MDAzZWZsYWdzYCBmcm9tIGBmbG93X29mZmxvYWRfd29ya19kZWwoKWAgdG8gdGhlIGVuZCBvZiBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcigpYCwgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgdG8gZW5zdXJlIGl0IGlzIHB1Ymxpc2hlZCBvbmx5IGFmdGVyIHRoZSB3b3JrZXIncyBsYXN0IGFjY2VzcyB0byB0aGUgZmxvdy4gVGhpcyBpcyBhIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVnIHdoZXJlIHRoZSBmbG93IGNvdWxkIGJlIGZyZWVkIGJ5IGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoZSB3b3JrZXIgd2FzIHN0aWxsIGFjY2Vzc2luZyBpdC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAobGlrZSBLQ1NBTikuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhhcmR3YXJlIG9mZmxvYWQgd29ya3F1ZXVlIGhhbmRsZXIgYnkgZGVsYXlpbmcgdGhlIHNldHRpbmcgb2YgdGhlIE5GX0ZMT1dfSFdfREVBRCBmbGFnIHVudGlsIGFmdGVyIHRoZSB3b3JrZXIncyBsYXN0IGZsb3cgYWNjZXNzIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgd2hlbiBoYXJkd2FyZSBvZmZsb2FkIGlzIGVuYWJsZWQgZm9yIGEgZmxvd3RhYmxlLiBGdXp6aW5nIHRoaXMgYXJlYSBjYW4gaGVscCBlbnN1cmUgdGhhdCB0aGUgY29uY3VycmVuY3kgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI2OjM5LjIyNDI3MTkxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0ODQwNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWJmNzAzMzA5NGU3NTkxODA5YzY2YjJjOTgxOTAxZTBlYmVjNmIxY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjoyNjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xcbmluZGV4IDgwMWEzZGQ5Y2VlYTMuLjY3NTdmZDg5YzFmMWEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcXG5AQCAtOTk1LDcgKzk5NSw2IEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXFxuIFxcdGZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XFxuIFxcdGlmICh0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdGZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7XFxuLVxcdHNldF9iaXQoTkZfRkxPV19IV19ERUFELCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfdHVwbGVfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxcbkBAIC0xMDU5LDYgKzEwNTgsMTIgQEAgc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdH1cXG4gXFxuIFxcdGNsZWFyX2JpdChORl9GTE9XX0hXX1BFTkRJTkcsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFncyk7XFxuK1xcdGlmIChvZmZsb2FkLVxcdTAwM2VjbWQgPT0gRkxPV19DTFNfREVTVFJPWSkge1xcbitcXHRcXHQvKiBQdWJsaXNoIGFmdGVyIHRoZSB3b3JrZXIncyBsYXN0IGZsb3cgYWNjZXNzLiAqL1xcbitcXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4rXFx0XFx0c2V0X2JpdChORl9GTE9XX0hXX0RFQUQsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFncyk7XFxuK1xcdH1cXG4rXFxuIFxcdGtmcmVlKG9mZmxvYWQpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjozOS45NTAxMzE4NzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDg1ODc2NTQwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X29mZmxvYWRfYWRkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZGVsXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIixcbiAgICBcImZsb3dfb2ZmbG9hZF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIHdvcmtxdWV1ZSBoYW5kbGVyIGJ5IGRlbGF5aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBORl9GTE9XX0hXX0RFQUQgZmxhZyB1bnRpbCBhZnRlciB0aGUgd29ya2VyJ3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkIGZvciBhIGZsb3d0YWJsZS4gRnV6emluZyB0aGlzIGFyZWEgY2FuIGhlbHAgZW5zdXJlIHRoYXQgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YmY3MDMzMDk0ZTc1OTE4MDljNjZiMmM5ODE5MDFlMGViZWM2YjFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjI6MjY6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuaW5kZXggODAxYTNkZDljZWVhMy4uNjc1N2ZkODljMWYxYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbkBAIC05OTUsNyArOTk1LDYgQEAgc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfZGVsKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcbiBcdGZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XG4gXHRpZiAodGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpKVxuIFx0XHRmbG93X29mZmxvYWRfdHVwbGVfZGVsKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xuLVx0c2V0X2JpdChORl9GTE9XX0hXX0RFQUQsIFx1MDAyNm9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF90dXBsZV9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXG5AQCAtMTA1OSw2ICsxMDU4LDEyIEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0fVxuIFxuIFx0Y2xlYXJfYml0KE5GX0ZMT1dfSFdfUEVORElORywgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKTtcbitcdGlmIChvZmZsb2FkLVx1MDAzZWNtZCA9PSBGTE9XX0NMU19ERVNUUk9ZKSB7XG4rXHRcdC8qIFB1Ymxpc2ggYWZ0ZXIgdGhlIHdvcmtlcidzIGxhc3QgZmxvdyBhY2Nlc3MuICovXG4rXHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuK1x0XHRzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKTtcbitcdH1cbitcbiBcdGtmcmVlKG9mZmxvYWQpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI2OjM5Ljk1MDEzNDA5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzQ3MjYwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZl9mbG93X3RhYmxlX29mZmxvYWQuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIHJlbG9jYXRpb24gb2YgYHNldF9iaXQoTkZfRkxPV19IV19ERUFELCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpO2AuIEl0IHNlZW1zIHRoZXkndmUgbW92ZWQgdGhhdCBiaXQtc2V0dGluZyBmcm9tIGBmbG93X29mZmxvYWRfd29ya19kZWxgIHRvIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGNvbW1hbmQgYG9mZmxvYWQtXHUwMDNlY21kYCBpcyBgRkxPV19DTFNfREVTVFJPWWAuIFRoYXQncyBpbnRlcmVzdGluZywgSSB3b25kZXIgYWJvdXQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBzaGlmdC4gUG90ZW50aWFsbHkgaXQncyByZWxhdGVkIHRvIHNvbWUgdGltaW5nIGlzc3VlIG9yIG1heWJlIGEgcmFjZSBjb25kaXRpb24gdGhleSdyZSB0cnlpbmcgdG8gcmVzb2x2ZS5cblxuVGhlIGFkZGl0aW9uIG9mIGBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKWAgaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdC4gQSBtZW1vcnkgYmFycmllciBoZXJlIHN1Z2dlc3RzIHRoZXkgYXJlIGNvbmNlcm5lZCBhYm91dCB0aGUgb3JkZXIgaW4gd2hpY2ggbWVtb3J5IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCwgbGlrZWx5IGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktY29yZSBlbnZpcm9ubWVudC4gVGhpcyBzdHJvbmdseSBpbmRpY2F0ZXMgdGhleSBhcmUgdHJ5aW5nIHRvIGVuc3VyZSB0aGF0IHRoZSBoYXJkd2FyZSBzZWVzIHRoZSBgTkZfRkxPV19IV19ERUFEYCBmbGFnIHNldCBiZWZvcmUgYSByZWxhdGVkIGF0b21pYyBvcGVyYXRpb24gb2NjdXJzLlxuXG5JJ20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AgYW5kIHVzZSBgZ3JlcHBlcmAgdG8gbG9jYXRlIGBmbG93X29mZmxvYWRfd29ya19kZWxgIGFuZCBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcmAuIENvbnRleHQgaXMga2luZy4gU2VlaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYWxsb3cgbWUgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyBvZiB0aGlzIGNoYW5nZS4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBvdGhlciBjb2RlIGludGVyYWN0cyB3aXRoIGBvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3NgIGFuZCBgRkxPV19DTFNfREVTVFJPWWAgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBMZXQncyBzZWUgaWYgdGhpcyBwYXRjaCBpcyBhIGJ1ZyBmaXgsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjo0NC42MjQ4NjM4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODA0MTE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbG93X29mZmxvYWRfd29ya19kZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk3Mz1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19hZGQoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTEtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5OTI6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfZGVsKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk5My17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwMzY9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNDgtXFx0XFx0Y2FzZSBGTE9XX0NMU19ERVNUUk9ZOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA0OTpcXHRcXHRcXHRmbG93X29mZmxvYWRfd29ya19kZWwob2ZmbG9hZCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDUwLVxcdFxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9ERUNfQVRPTUlDKG5ldCwgY291bnRfd3FfZGVsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MjY6NDQuNjkyOTA5NDAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyODQwNzI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB3aGVuIGBORl9GTE9XX0hXX0RFQURgIGdldHMgc2V0LiBUaGF0IHNvdW5kcyBsaWtlIGEgcHJldHR5IGNyaXRpY2FsIHRpbWluZyBjaGFuZ2UgaW4gdGhlIGZsb3cgdGFibGUgb2ZmbG9hZCBsb2dpYyB3aXRoaW4gbmV0ZmlsdGVyLiBJbW1lZGlhdGVseSwgbXkgaW50ZXJuYWwgcmFkYXIgcGluZ3Mg4oCTIGEgdGltaW5nIGNoYW5nZSBpbiB0aGF0IGFyZWEgb2Z0ZW4gcG9pbnRzIHRvIGNvbmN1cnJlbmN5IGJ1Z3MuIExpa2VseSBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBXZSBuZWVkIHRvIGFzc2VzcyB0aGlzIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBhIG5hc3R5IG1lbW9yeSBjb3JydXB0aW9uIGJ1ZywgYWJzb2x1dGVseSwgZnV6emluZyBpcyB3YXJyYW50ZWQgaGVyZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIHdlIG5lZWQgdG8gZW5hYmxlIHRvIGdldCBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgIGFjdGl2ZSBhbmQgZXhwb3NlIHRoZSByZWxldmFudCBjb2RlIHBhdGggZm9yIG91ciBmdXp6aW5nIGVmZm9ydHMuIExldCdzIGRpZyBpbnRvIHRoZSBjb25maWdzIGFuZCBnZXQgdGhlIGNvcnJlY3Qgc2V0IG9mIG9wdGlvbnMgdG8gcmVwcm9kdWNlIHRoZSBidWcgYW5kIGJlZ2luIG91ciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MjY6NDguMDIxMzIwNTA1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjIwMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQzPW5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ1OlxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0Ni1uZl9mbG93X3RhYmxlLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfUFJPQ0ZTKSArPSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI2OjQ4LjEwNDk0ODAzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4Nzg5Nzg5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBGbG93IFRhYmxlIE9iamVjdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWV0aGluZyB0aGF0J3MgY2xlYXJseSBwYXJ0IG9mIHRoZSBgbmZfZmxvd190YWJsZS1vYmpzYCBjb250ZXh0LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24uIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgbmZfZmxvd190YWJsZWAgbW9kdWxlIGlzIGNvbmZpZ3VyZWQuIFRoYXQgY29uZmlnIGlzIGdvaW5nIHRvIGRpY3RhdGUgZXZlcnl0aGluZyBhYm91dCBpdHMgYmVoYXZpb3Ig4oCTIHRoZSB0YWJsZSdzIHNpemUsIGl0cyBhZ2luZyBwYXJhbWV0ZXJzLCBwZXJoYXBzIGV2ZW4gdGhlIGhhc2hpbmcgYWxnb3JpdGhtIGl0J3MgdXNpbmcuIEknbGwgbmVlZCB0aGF0IHRvIHVuZGVyc3RhbmQgaXRzIGxpbWl0YXRpb25zIGFuZCBob3cgSSBtaWdodCBiZSBhYmxlIHRvIHR1bmUgaXQuIFRpbWUgdG8gdHJhY2sgZG93biB0aGF0IGNvbmZpZ3VyYXRpb24hIEknbGwgcHJvYmFibHkgc3RhcnQgbG9va2luZyBhdCBrZXJuZWwgY29uZmlnIGZpbGVzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MjY6NTAuOTgzOTI5MTk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDkxNTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzk9b2JqLSQoQ09ORklHX05GVF9GV0RfTkVUREVWKVxcdCs9IG5mdF9md2RfbmV0ZGV2Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcdCs9IG5mX2Zsb3dfdGFibGUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQzOm5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ1OlxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0Ni1uZl9mbG93X3RhYmxlLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfUFJPQ0ZTKSArPSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc0ND12b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc0OC1cXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZ2Nfd29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NDk6XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3d0YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NTAtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03NjM9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzY5LVxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlZ2Nfd29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NzA6XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3dfdGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzcxLVxcdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzMtXFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NzQ6XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NzUtXFx0cmhhc2h0YWJsZV9kZXN0cm95KFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VyaGFzaHRhYmxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODI0PXN0YXRpYyBpbnQgX19pbml0IG5mX2Zsb3dfdGFibGVfbW9kdWxlX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODM1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODM2OlxcdHJldCA9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04MzctXFx0aWYgKHJldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODQ2LW91dF9icGY6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo4NDc6XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2V4aXQoKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg0OC1vdXRfb2ZmbG9hZDpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODU1PXN0YXRpYyB2b2lkIF9fZXhpdCBuZl9mbG93X3RhYmxlX21vZHVsZV9leGl0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NTYte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODU3OlxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04NTgtXFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZuZl9mbG93X3RhYmxlX25ldF9vcHMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz02OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03MC1cXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NzE6XFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03Mi1cXHQuYWN0aW9uXFx0XFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaW5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Nzg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODAtXFx0LmluaXRcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjgxOlxcdC5zZXR1cFxcdFxcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODItXFx0LmFjdGlvblxcdFxcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkwLVxcdC5pbml0XFx0XFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MTpcXHQuc2V0dXBcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkyLVxcdC5hY3Rpb25cXHRcXHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTUzPXZvaWQgbmZfZmxvd19vZmZsb2FkX3N0YXRzKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE2OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzA6dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTcxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzg6dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3OS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyNDM9c3RhdGljIGludCBuZl9mbG93X3RhYmxlX2luZHJfb2ZmbG9hZF9jbWQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNTUtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjU2OnN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNTctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyNzQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjc1OmludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI3Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjg2LVxcdGlmIChkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90YylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyODc6XFx0XFx0ZXJyID0gbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChcXHUwMDI2Ym8sIGZsb3d0YWJsZSwgZGV2LCBjbWQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjg4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZleHRhY2spO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjk2LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyOTc6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMjk5OmludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI1OnZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2V4aXQodm9pZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjo1MS4wOTQ4NTAyMzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc1MTQ3MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgY29kZSdzIHJlZmVyZW5jaW5nIGBORl9GTE9XX1RBQkxFYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgbmV0ZmlsdGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZmVhdHVyZSBmbGFnIGFjdHVhbGx5ICpkb2VzKi4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHJpZ2h0IGF3YXkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTmV0ZmlsdGVyIGFyZSBkZWZpbmVkLCBhbmQgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBsaWZlYmxvb2Qgb2YgdW5kZXJzdGFuZGluZyBob3cgdGhlIExpbnV4IGtlcm5lbCBpcyBjb25maWd1cmVkLiBJIGtub3cgSSdtIGxvb2tpbmcgZm9yIHRoZSBzZWN0aW9uIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBORl9GTE9XX1RBQkxFYCBhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucyBvbiB0aGUgYnVpbGQuIFRoaXMgdGVsbHMgbWUgaWYgaXQncyBhIGNvbXBpbGUtdGltZSBvcHRpb24sIGEgbW9kdWxlLCBvciB3aGF0LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHR5cGljYWwgdGhpbmdzIEkgd2FudCB0byBsb29rIGZvcjogSXMgdGhlcmUgYSBkZWZhdWx0IHNldHRpbmc/IElzIGl0IGRlcGVuZGVudCBvbiBhbm90aGVyIGZlYXR1cmU/IEFyZSB0aGVyZSBhbnkgY29tbWVudHMgZGV0YWlsaW5nIHRoZSB1c2UgY2FzZSwgcGVyZm9ybWFuY2UgaW1wYWN0cywgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnM/IEknbSBob3BpbmcgaXQncyB3ZWxsLWRvY3VtZW50ZWQgYXMgdGhpcyBpcyBhIGNvcmUgcGllY2Ugb2YgbmV0d29yayBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6MjY6NTQuNzcwMDAwMjQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODA2MjYzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjo1NC44NTgwNzAxMTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2Mjg4NjE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgTkZfRkxPV19UQUJMRWAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfRkxPV19UQUJMRWAuIEl0J3MgYSBrZXkgY29tcG9uZW50IGluIHRoZSBuZXRmaWx0ZXIgZWNvc3lzdGVtLCBidXQgYmVmb3JlIEkgZGlnIGludG8gaXRzIHNwZWNpZmljcywgSSB3YW50IHRvIGdldCBhIGJyb2FkZXIgdmlldy4gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmU/IFdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgY29tcG9uZW50cyBpcyBpdCB0aWdodGx5IGNvdXBsZWQgd2l0aD8gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgdHJhY2luZyBpdHMgaW5jbHVzaW9uIHBhdGhzIGFuZCBzZWUgd2hhdCBpbmNsdWRlcyBpdCwgdGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCBlc3BlY2lhbGx5IGlmIGFueSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIG9yIEFQSXMgZnJvbSBvdGhlciBjb21wb25lbnRzIGFyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiBpdHMgZGVmaW5pdGlvbnMuIEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGxpa2UgY29ubmVjdGlvbiB0cmFja2luZywgTkFULCBvciBvdGhlciBuZXRmaWx0ZXIgbW9kdWxlcz8gQXJlIHRoZXJlIGFueSBrZXJuZWwgc3Vic3lzdGVtcywgbWF5YmUgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgbG9ja2luZywgb3IgdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXRzZWxmLCB0aGF0IGl0IGNyaXRpY2FsbHkgcmVsaWVzIHVwb24/IFRoaXMgaW5pdGlhbCBkZXBlbmRlbmN5IHNjYW4gaXMgZXNzZW50aWFsIGZvciBhbnkgZGVlcCBkaXZlIG9yIG1vZGlmaWNhdGlvbiwgdG8gYXZvaWQgYnJlYWtpbmcgc29tZXRoaW5nIGRvd25zdHJlYW0gb3IgaW50cm9kdWNpbmcgc3VidGxlLCBoYXJkLXRvLWRlYnVnIGlzc3Vlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ3NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI2OjU4LjMyMDk1OTI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzc1OTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRSRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDM9Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzExOmNvbmZpZyBORl9GTE9XX1RBQkxFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNjo1OC4zOTg3MjM5MTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNzY5NjEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDcxMS4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgW2luc2VydCB5b3VyIGFzc3VtcHRpb24gb2Ygd2hhdCB5b3UncmUgaW50ZXJlc3RlZCBpbiBiYXNlZCBvbiB0aGUgS2NvbmZpZyBmaWxlXS4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGRlcGVuZGVuY2llcywgb3B0aW9ucywgYW5kIHBvdGVudGlhbGx5IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gW2FnYWluLCBpbnNlcnQgeW91ciBlZHVjYXRlZCBndWVzc10uIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGZlYXR1cmUgc2VsZWN0aW9uIG9yIGV4Y2x1c2lvbiBsb2dpYyByZXNpZGVzIGZvciBbdGhlIGZlYXR1cmUgdGhlIHVzZXIgaXMgaW52ZXN0aWdhdGluZ10uIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBwb3NzaWJseSBpbnZvbHZpbmcgYGRlcGVuZHMgb25gIGNsYXVzZXMsIHRoYXQgZ292ZXJuIHdoZXRoZXIgb3Igbm90IGNlcnRhaW4gTmV0ZmlsdGVyIG1vZHVsZXMgb3IgZnVuY3Rpb25hbGl0aWVzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgc3BlY2lmaWMgZmVhdHVyZXMgcmVsYXRlZCB0byBbdGhlIGFzcGVjdCB0aGUgdXNlciBoYXMgaW4gbWluZF0sIGFuZCBob3cgdGhvc2UgY2hvaWNlcyBpbnRlcnJlbGF0ZSB3aXRoIG90aGVyIE5ldGZpbHRlciBjb21wb25lbnRzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCBbdGhlIGFzcGVjdCB0aGV5J3JlIGludGVyZXN0ZWQgaW5dLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MDEuNjE2NDIyOTc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcbiA3MDE6XFx0ZW5kaWYgIyBORl9UQUJMRVNcXG4gNzAyOlxcdFxcbiA3MDM6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbiA3MDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuIDcwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzA2OlxcdFxcdGhlbHBcXG4gNzA3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgc3VwcG9ydC5cXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiA3MTA6XFx0XFxuIDcxMTpcXHRjb25maWcgTkZfRkxPV19UQUJMRVxcbiA3MTI6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4gNzEzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcXG4gNzE0OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuIDcxNTpcXHRcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbiA3MTY6XFx0XFx0aGVscFxcbiA3MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXFxuIDcxODpcXHRcXG4gNzE5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNzIwOlxcdFxcbiA3MjE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxuIDcyMjpcXHRcXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG4gNzIzOlxcdFxcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxcbiA3MjQ6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDcyNTpcXHRcXHRoZWxwXFxuIDcyNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZm9yIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgc3RhdGlzdGljc1xcbiA3Mjc6XFx0XFx0ICB0byBiZSBzaG93biBpbiBwcm9jZnMgdW5kZXIgbmV0L25ldGZpbHRlci9uZl9mbG93dGFibGUuXFxuIDcyODpcXHRcXG4gNzI5OlxcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzowMS42MTY2ODA0MTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzMTUxMDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgTkZfRkxPV19UQUJMRWAgY29uZmlndXJhdGlvbi4gSXQncyBjbGVhciB0aGF0IGl0IHJlbGllcyBvbiBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBlbmFibGUgYE5GX0ZMT1dfVEFCTEVgLCBvYnZpb3VzbHkuXG5cbk5vdywgaWYgd2Ugd2FudCB0byBnZXQgaW50byB0aGUgcmVhbG0gb2YgaGFyZHdhcmUgb2ZmbG9hZCwgSSBiZXQgdGhlcmUgYXJlIGEgZmV3IG1vcmUgY29uZmlncyB3ZSBuZWVkIHRvIGNvbnNpZGVyLiBJJ2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gTGV0J3Mgc3RhcnQgYnkgaW5zcGVjdGluZyBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AgdG8gc2VlIGlmIHRoYXQgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIG5vdC4gQWgsIHdhaXQsIG5vIG5lZWQsIGl0IGxvb2tzIGxpa2UgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vYCAqaXMqIGFsd2F5cyBjb21waWxlZCB3aGVuIGBORl9GTE9XX1RBQkxFYCBpcyBlbmFibGVkLiBHb29kLCBnb29kLiBObyBnb3RjaGFzIHRoZXJlLlxuXG5BbHJpZ2h0LCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiB3aXRoaW4gdGhlIGhhcmR3YXJlIG9mZmxvYWQgbG9naWM/IEkgc2VlIHRoYXQgdGhlIHBhdGNoIHNlZW1zIHRvIG1vZGlmeSBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcmAgYW5kIGBmbG93X29mZmxvYWRfd29ya19kZWxgLiBUaGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggdXN1YWxseSBtZWFucyB0aGV5J3JlIGludGVybmFsIHRvIHRoZSBtb2R1bGUuIFNvLCB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBBaCwgaGVyZSB3ZSBnbywgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJgIGlzIGEgd29ya3F1ZXVlIGhhbmRsZXIuIEFuZCBpdCBsb29rcyBsaWtlIGl0IGlzIHNjaGVkdWxlZCBieSBgZmxvd19vZmZsb2FkX3dvcmtfYWRkYC4gT2theSwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQ3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MDcuMDQ4MTk0NzI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA1ODYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbG93X29mZmxvYWRfd29ya19hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk1Nz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ydWxlX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk3Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk3MzpzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19hZGQoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTc0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTAzNj1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA0NC1cXHRcXHRjYXNlIEZMT1dfQ0xTX1JFUExBQ0U6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDQ1OlxcdFxcdFxcdGZsb3dfb2ZmbG9hZF93b3JrX2FkZChvZmZsb2FkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNDYtXFx0XFx0XFx0TkZfRkxPV19UQUJMRV9TVEFUX0RFQ19BVE9NSUMobmV0LCBjb3VudF93cV9hZGQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzowNy4wOTcyNTg1OTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NjEyNTg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyB0aGUgV29ya3F1ZXVlIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgY2hhaW4gaW52b2x2aW5nIGBmbG93X29mZmxvYWRfd29ya19hZGRgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIldoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/XCIgQnV0IHRoZW4gSSBoYWQgdG8gbWVudGFsbHkgY29ycmVjdCBteXNlbGYg4oCTIGhhbmcgb24sIGlzbid0IGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCBpbnZvbHZlZD8gQW5kIHRoZW4gaXQgaGl0IG1lLiBSaWdodCwgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJgICppcyogdGhlIHdvcmtxdWV1ZSBoYW5kbGVyLiBTbywgdGhlIHJlbGF0aW9uc2hpcCBpcyB0aGF0IHRoZSBoYW5kbGVyIGl0c2VsZiBsaWtlbHkgbWFrZXMgdGhlIGNhbGwgdG8gYGZsb3dfb2ZmbG9hZF93b3JrX2FkZGAsIG9yIHBvdGVudGlhbGx5IGl0cyBjb3VudGVycGFydCwgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbGAuIEkgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBob3cgYG9mZmxvYWQtXHUwMDNlY21kYCBmaWd1cmVzIGludG8gdGhlIGNob2ljZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgb2ZmbG9hZC1cdTAwM2VjbWRgIGRldGVybWluZXMgaWYgYGZsb3dfb2ZmbG9hZF93b3JrX2FkZGAgb3IgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbGAgYXJlIGNhbGxlZCwgYnV0IHRoYXQgZmVlbHMgcmlnaHQuIFRoZSBuZXh0IHF1ZXN0aW9uIGlzLCB3aGVyZSBleGFjdGx5IHdpdGhpbiB0aGUgc3lzdGVtIGlzIHRoaXMgd29yayBiZWluZyBxdWV1ZWQ/IFRoYXQncyB0aGUga2V5IG5leHQgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHdob2xlIHRoaW5nIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDY4LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MTEuMDUzMzg3MTMxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk1MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJTklUX1dPUksuKmZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwODc9bmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2Moc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTAzLVxcdG9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZSA9IGZsb3d0YWJsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMDQ6XFx0SU5JVF9XT1JLKFxcdTAwMjZvZmZsb2FkLVxcdTAwM2V3b3JrLCBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjExLjA5NjM0NDI2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU1ODA4NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBbGxvY2F0aW5nIHRoZSBPZmZsb2FkIFdvcmsqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGZsb3cgb2ZmbG9hZCB3b3JrIGFsbG9jYXRpb24gcHJvY2VzcyDigJMgc3BlY2lmaWNhbGx5LCBgbmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2NgLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSwgYXMgYWx3YXlzLCBpcyByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJ20gdmlzdWFsaXppbmcgaG93IHRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IG1hbmFnZXMgdGhlIGFsbG9jYXRpb24gb2YgdGhlIHdvcmsgaXRzZWxmLiBJdCdzIHRoZSBwb2ludCB3aGVyZSB3ZSdyZSBhY3R1YWxseSBzZXR0aW5nIHVwIHRoZSBzdHJ1Y3R1cmVzLCB0aGUgbWVtb3J5LCB0aGUgbWV0YWRhdGEsIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlcHJlc2VudCBhIHBhcnRpY3VsYXIgZmxvdyB0aGF0J3MgYmVpbmcgb2ZmbG9hZGVkLiBUaGUgc3BlY2lmaWMgaW50ZXJuYWxzIG9mICpob3cqIGl0J3MgZG9uZeKAlHRoZSBhbGdvcml0aG1zLCB0aGUgcG90ZW50aWFsIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMsIGFsbCBvZiB0aGF0IGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgb2ZmbG9hZCBhcmNoaXRlY3R1cmUsIHdoaWNoIEknbGwgbmVlZCB0byBrbm93LiBUaGUgZnVuY3Rpb24gaXMgZ29pbmcgdG8gbmVlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlbiByZXNvdXJjZXMgYXJlbid0IGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgYW5kIGFsc28gd2lsbCBoYW5kbGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZG9uZSBjb3JyZWN0bHksIGFuZCB0aGUgcmlnaHQgc3RydWN0dXJlcyBhcmUgY29ycmVjdGx5IGluIHBsYWNlLiBJdCB3aWxsIHRha2UgdGltZSB0byBlbnN1cmUgdGhhdCBhbGwgdGhlIHdvcmsgYWxsb2NhdGVkIGlzIGRvbmUgaW4gYSB0aW1lbHkgbWFubmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDEwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MTQuMjUyMTU1NjY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIyNzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfd29ya19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA4Nj1zdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwODc6bmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2Moc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA4OC1cXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTE4PXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTIyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEyMzpcXHRvZmZsb2FkID0gbmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2MoZmxvd3RhYmxlLCBmbG93LCBGTE9XX0NMU19SRVBMQUNFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMjQtXFx0aWYgKCFvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTQwPXZvaWQgbmZfZmxvd19vZmZsb2FkX2RlbChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNDQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTQ1OlxcdG9mZmxvYWQgPSBuZl9mbG93X29mZmxvYWRfd29ya19hbGxvYyhmbG93dGFibGUsIGZsb3csIEZMT1dfQ0xTX0RFU1RST1kpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE0Ni1cXHRpZiAoIW9mZmxvYWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNTM9dm9pZCBuZl9mbG93X29mZmxvYWRfc3RhdHMoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTYyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2MzpcXHRvZmZsb2FkID0gbmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2MoZmxvd3RhYmxlLCBmbG93LCBGTE9XX0NMU19TVEFUUyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTY0LVxcdGlmICghb2ZmbG9hZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MTQuMjk1Mzg0NzgyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzY5MjI3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyB5b3UgYXNrZWQ6XG5cbioqQW5hbHl6aW5nIEZsb3cgT2ZmbG9hZCBFbnRyeSBQb2ludHMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgLCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9zdGF0c2AuIFRoZXNlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgbWFuYWdpbmcgZmxvdyBvZmZsb2FkLCBmcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgZGVwZW5kZW5jaWVzIGhlcmUuIEFyZSB0aGVzZSBmdW5jdGlvbnMgcHVyZWx5IGludGVybmFsIHRvIHRoaXMgc3BlY2lmaWMgbW9kdWxlLCBvciBhcmUgdGhleSBleHBvcnRlZCBhbmQgdXRpbGl6ZWQgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGV5J3JlIHB1YmxpYyBpbnRlcmZhY2VzLCBvciBpZiB0aGV5J3JlIHRpZ2h0bHkgY291cGxlZCB3aXRoaW4gYSBzcGVjaWZpYyBzdWJzeXN0ZW0uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgc2lnbmlmaWNhbnQgYW55IGNoYW5nZXMgdG8gdGhlbSBtaWdodCBiZSwgYW5kIHdoYXQgaW1wYWN0IHRoYXQgd291bGQgaGF2ZSBvbiB0aGUgc3lzdGVtLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGVyZSB0aGV5J3JlIHJlZmVyZW5jZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzoxNy45MzIzMTAzMTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzY3ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfb2ZmbG9hZF9kZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01Njg9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTg2LVxcdFxcdFxcdGlmICghdGVzdF9iaXQoTkZfRkxPV19IV19EWUlORywgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU4NzpcXHRcXHRcXHRcXHRuZl9mbG93X29mZmxvYWRfZGVsKGZsb3dfdGFibGUsIGZsb3cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTg4LVxcdFxcdFxcdGVsc2UgaWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfREVBRCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTk1LVxcdFxcdCAgICF0ZXN0X2JpdChORl9GTE9XX0hXX0RZSU5HLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1OTY6XFx0XFx0bmZfZmxvd19vZmZsb2FkX2RlbChmbG93X3RhYmxlLCBmbG93KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU5Ny1cXHR9IGVsc2UgaWYgKHRlc3RfYml0KE5GX0ZMT1dfSFcsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MjA9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfYWRkX3dxO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjE6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfZGVsX3dxO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjItc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZl9mbG93X29mZmxvYWRfc3RhdHNfd3E7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNzA9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc4LVxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfZGVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzk6XFx0XFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfZGVsX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDgwLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMzA9dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEzOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNDA6dm9pZCBuZl9mbG93X29mZmxvYWRfZGVsKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNDEtXFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzA9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzItXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNzM6XFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3NC1cXHRcXHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93dGFibGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTc4PXZvaWQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE4MS1cXHRcXHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgyOlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExODMtXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9zdGF0c193cSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyOTk9aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMDUtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzA2OlxcdG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJuZl9mdF9vZmZsb2FkX2RlbFxcXCIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzA3LVxcdFxcdFxcdFxcdFxcdFxcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDg6XFx0aWYgKCFuZl9mbG93X29mZmxvYWRfZGVsX3dxKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwOS1cXHRcXHRnb3RvIGVycl9kZWxfd3E7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMTgtZXJyX3N0YXRzX3dxOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMxOTpcXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjAtZXJyX2RlbF93cTpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTMyNT12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9leGl0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjctXFx0ZGVzdHJveV93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2FkZF93cSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI4OlxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyOS1cXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfc3RhdHNfd3EpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzoxNy45Nzg2ODM4MzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1Nzg5NjI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIHNlZWluZyB0aGF0IGBuZl9mbG93X29mZmxvYWRfZGVsYCBpcyBiZWluZyB0cmlnZ2VyZWQgZnJvbSBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIG9yIGNsZWFudXAgb2YgZmxvdyBvZmZsb2FkIGVudHJpZXMsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gSXQncyB0cmlnZ2VyZWQgYnkgYSBHQyBwcm9jZXNzLCBzbyBpdCBtYWtlcyBzZW5zZS5cblxuT24gdGhlIG90aGVyIGhhbmQsIHRoZSBhZGRpdGlvbiBzaWRlIG9mIHRoaW5ncyBhcHBlYXJzIGhhbmRsZWQgYnkgYG5mX2Zsb3dfb2ZmbG9hZF9hZGRgLCB3aGljaCBvcmlnaW5hdGVzIGZyb20gYGZsb3dfb2ZmbG9hZF9hZGRgIHdpdGhpbiBgbmZfZmxvd190YWJsZV9jb3JlLmNgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYG5mX2Zsb3dfb2ZmbG9hZF9hZGRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBhZGRpbmcgbmV3IGZsb3dzIHRvIHRoZSBvZmZsb2FkIHRhYmxlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGZpbGUgbmFtZSBhcyB3ZWxsLiBUaGVzZSBhcmUgdGhlIHR3byBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBoZXJlLiBMb29rcyBsaWtlIHRoZSBjb3JlIGFkZGl0aW9uIGlzIGdvaW5nIG9uIGluIHRoZSBjb3JlIGZpbGUsIGFuZCB0aGVuIHRoZSBHQyBhbmQgRGVsZXRpb24gaXMgZ29pbmcgb24gaW4gdGhlIG9mZmxvYWQgZmlsZS4gSXQgbG9va3MgdG8gYmUgYSBnb29kLCBjbGVhbiwgbW9kdWxhciBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MjEuMzM2NTg0Mjc3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUzMTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzI4PWludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1My1cXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNTQ6XFx0XFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyMDpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3E7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMS1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNzA9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc1LVxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzY6XFx0XFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc3LVxcdH0gZWxzZSBpZiAob2ZmbG9hZC1cXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTExOD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMzA6dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMzEtXFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgwLVxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgxOlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExODItXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjk5PWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzAxOlxcdG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJuZl9mdF9vZmZsb2FkX2FkZFxcXCIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDM6XFx0aWYgKCFuZl9mbG93X29mZmxvYWRfYWRkX3dxKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMC1lcnJfZGVsX3dxOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyMTpcXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjItXFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEzMjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyNi17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI3OlxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyOC1cXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MjEuMzgyMTIxMDMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjYzNzA1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgaW5pdGlhbCB0aGlua2luZyBpcyB0aGF0IGBmbG93X29mZmxvYWRfYWRkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBsb29rIGxpa2Ugc3Ryb25nIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBCdXQsIGhvbGQgb24gYSBzZWNvbmTigKYgYGZsb3dfb2ZmbG9hZF9hZGRgLCB0aGF0J3MgdGhlICpjb3JlKiBmdW5jdGlvbiwgaXNuJ3QgaXQ/IE9rYXksIHJpZ2h0LCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBMZXQgbWUgc2VlLCBsZXQncyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hlcmUgZXhhY3RseSBgZmxvd19vZmZsb2FkX2FkZGAgaXMgYWN0dWFsbHkgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGNhbGwgY2hhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTUxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MjQuODA4NDk0NTI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ3MjY2MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd19vZmZsb2FkX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTMwOT11bnNpZ25lZCBsb25nIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zMjctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozMjg6aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMyOS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1My1cXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNTQ6XFx0XFx0bmZfZmxvd19vZmZsb2FkX2FkZChmbG93X3RhYmxlLCBmbG93KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzU3LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM1ODpFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyMDpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3E7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMS1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNzA9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc1LVxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzY6XFx0XFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc3LVxcdH0gZWxzZSBpZiAob2ZmbG9hZC1cXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTExOD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMzA6dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMzEtXFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgwLVxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgxOlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExODItXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjk5PWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzAxOlxcdG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJuZl9mdF9vZmZsb2FkX2FkZFxcXCIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDM6XFx0aWYgKCFuZl9mbG93X29mZmxvYWRfYWRkX3dxKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMC1lcnJfZGVsX3dxOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyMTpcXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjItXFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEzMjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyNi17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI3OlxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyOC1cXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTUwPXN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMjAtXFx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMjE6XFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEyMi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MjQuOTkzMjI2NDQ1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzIzMTM0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRGVlcCBEaXZlIGludG8gdGhlIEZsb3cgT2ZmbG9hZCBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGl0IGxvb2tzIGxpa2UgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgY2FsbGluZyBgZmxvd19vZmZsb2FkX2FkZGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBgbmZfZmxvd19vZmZsb2FkX2FkZGAgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBxdWV1ZWluZyB0aGUgYWN0dWFsIHdvcmsuIE1ha2VzIG1lIHdvbmRlciBob3cgdGhlIHJlbW92YWwgcHJvY2VzcyB3b3Jrcywgc28gSSdsbCBjaGVjayBgbmZfZmxvd19vZmZsb2FkX2RlbGAgYW5kIGBuZl9mbG93X29mZmxvYWRfYWRkYCB3aGlsZSBJJ20gYXQgaXQuIEhvbGQgb24sIGBuZl9mbG93X29mZmxvYWRfYWRkYCBpcyAqY29uZGl0aW9uYWxseSogY2FsbGVkIGZyb20gYGZsb3dfb2ZmbG9hZF9hZGRg4oCUb25seSBpZiBgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSlgIGV2YWx1YXRlcyB0byB0cnVlLiBBaGEhIE5vdyB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiB3aGF0IHRyaWdnZXJzIGBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZGA/IFNlZW1zIHRvIGJlIHRpZWQgdG8gdGhlIGBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAgZmxhZy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCBzb3VyY2UgY29kZSB0byBzZWUgaG93IGl0IHVzZXMgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgdG8gZW5hYmxlIHRoaXMgaGFyZHdhcmUgb2ZmbG9hZCBmbGFnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgzOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzoyOS4yMjU1NDE5OTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTY3Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9mbG93X29mZmxvYWRfZXZhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz00MT1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfY3RfdGNwKHN0cnVjdCBuZl9jb25uICpjdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTQ5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjUwOnN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNTEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMjAtXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfZmxvd19vZmZsb2FkKSksXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjIxOlxcdC5ldmFsXFx0XFx0PSBuZnRfZmxvd19vZmZsb2FkX2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjIyLVxcdC5pbml0XFx0XFx0PSBuZnRfZmxvd19vZmZsb2FkX2luaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjI5LjI3MTExMzY1OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzExMzk5MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgdGhpcyB0aHJvdWdoOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZGAgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAsIGFuZCBpdCdzIGNsZWFyIHRoaXMgaXMgKnRoZSogZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBldmFsdWF0aW9uIHdvcmsgZm9yIHRoZSBgZmxvd19vZmZsb2FkYCBleHByZXNzaW9uIHdpdGhpbiB0aGUgbmZ0YWJsZXMgZnJhbWV3b3JrLiBObyBhbWJpZ3VpdHkgdGhlcmUuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGlzIGEgcGF0aCB0aGF0J3MgZGVmaW5pdGVseSBiZWluZyB0cmF2ZWxlZCwgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLi4uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHRoYXQgZ292ZXJucyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYE5GVF9GTE9XX09GRkxPQURgLiBUaGF04oCZcyBteSBrZXkgdG8gdGhlIGBuZnRfZmxvd19vZmZsb2FkLmNgIHNvdXJjZSBjb2RlIGFuZCBpdHMgc2V0dGluZ3MuIEkgY2FuIHVzZSB0aGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBpcyBiZWluZyB1c2VkIGFuZCBob3cgdG8gYWNjZXNzIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTY2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6MzIuNTgyNTE2MDQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ2MjY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZmxvd19vZmZsb2FkLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTI9b2JqLSQoQ09ORklHX05GVF9DVClcXHRcXHQrPSBuZnRfY3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEzOm9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVxcdCs9IG5mdF9mbG93X29mZmxvYWQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTE0LW9iai0kKENPTkZJR19ORlRfTElNSVQpXFx0XFx0Kz0gbmZ0X2xpbWl0Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTIxNz1zdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2Zsb3dfb2ZmbG9hZF90eXBlO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIxODpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfZmxvd19vZmZsb2FkX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMTktXFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfZmxvd19vZmZsb2FkX3R5cGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMzA9c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9mbG93X29mZmxvYWRfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIzMS1cXHQubmFtZVxcdFxcdD0gXFxcImZsb3dfb2ZmbG9hZFxcXCIsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjMyOlxcdC5vcHNcXHRcXHQ9IFxcdTAwMjZuZnRfZmxvd19vZmZsb2FkX29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzMtXFx0LnBvbGljeVxcdFxcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9wb2xpY3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjMyLjYyOTk4Mjk4OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY4MjIxNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgRmxvdyBPZmZsb2FkKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0YXR1cyBvZiBgTkZUX0ZMT1dfT0ZGTE9BRGAuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIG5ldGZpbHRlciBjb25maWd1cmF0aW9uIG9wdGlvbiwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0ZmlsdGVyLCBhbmQgbGlrZWx5IGFueSByZWxhdGVkIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LCBzaG91bGQgYmUgZGVmaW5lZC4gTGV0J3Mgc2VlIGlmIGl0J3MgdGhlcmUsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MgbG9vayBsaWtlLiBHb3R0YSB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbi4gTXkgZXhwZXJ0aXNlIGluIG5ldGZpbHRlciB0ZWxscyBtZSB0aGlzIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBnaXZlcyBtZSB0aGUgaW5mb3JtYXRpb24gb24gd2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHRoaXMgb2ZmbG9hZCByZWxpZXMgb24sIGFuZCBpZiBpdCBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE4MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjM1LjY5ODIwNjk2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTYxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9GTE9XX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNS1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjM1Ljc0MzgwNzQ1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQwMjk2NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5GVF9GTE9XX09GRkxPQURgIOKAkyB0aGF0J3MgdGhlIHByaW1hcnkgY29uZmlnIEkgbmVlZCB0byBmb2N1cyBvbi4gTXkgbmV4dCBzdGVwIGlzIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBUaGUgY29yZSBsb2dpYyBmb3IgdGhpcyBzZWVtcyB0byBiZSBuZXN0bGVkIHdpdGhpbiBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLCBhbmQgdGhhdCBjb2RlIGlzIG9ubHkgY29tcGlsZWQgaWYgYE5GX0ZMT1dfVEFCTEVgIGlzIGVuYWJsZWQuIFRoYXQncyBnb29kOyBpdCBjb25maXJtcyB0aGF0IGJvdGggYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgYXJlIGV4YWN0bHkgd2hhdCBJIHN1c3BlY3RlZC4gSSBrbm93IHRoYXQgYE5GX1RBQkxFU2AgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBlc3NlbnRpYWwgZGVwZW5kZW5jaWVzIGhlcmUsIHNvIHRob3NlIGFyZSBhdXRvbWF0aWNhbGx5IGFjY291bnRlZCBmb3IsIG5vIGZ1cnRoZXIgYWN0aW9uIHJlcXVpcmVkLiBMZXQgbWUganVzdCBjaGVjayBpZiB0aG9zZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBsaWtlIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZfRkxPV19UQUJMRV9JUFY0YCwgYW5kIGBORl9GTE9XX1RBQkxFX0lQVjZgIGFyZSByZWxldmFudCBpbiB0aGlzIGNvbnRleHQg4oCTIGFoLCB3YWl0IGEgbWludXRlLCBJIHNwb3R0ZWQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgZWFybGllciwgc28gaXQncyBjbGVhcmx5IGFjdGl2ZSBhbmQgcmVsZXZhbnQuIFJpZ2h0LCB0aGF0IGNvbmZpcm1zIHRoZSBjb3JlIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzo0MS40ODQxMDY2MDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjk5MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MTE9Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzo0MS41Mjc4MTMwOTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTUwNTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZsb3cgdGFibGUgY29uZmlndXJhdGlvbnMgd2l0aGluIE5ldGZpbHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBvcHRpb25zIGZvciBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgdHVuaW5nIGZsb3cgdGFibGUgYmVoYXZpb3IgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiB0cmFmZmljLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjQ0LjQxOTMyMTEwOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNTIzMTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzo0NC40NjU1ODIwMjNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjExNjM4MjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjE3MzExLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzo0Ni41ODE5NjcxODJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ3NzI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6NDYuNjI2NDIyMDc3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjg3MDE1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgY29uZmlndXJhdGlvbnM6IGBORl9GTE9XX1RBQkxFYCBhbmQgYE5GVF9GTE9XX09GRkxPQURgLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfTkVURklMVEVSX0lOR1JFU1NgIGlzIGEgZGVwZW5kZW5jeSBvZiBgTkZfRkxPV19UQUJMRWAsIHNvIEknbGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyB3ZWxsLiBJJ20gdHJ5aW5nIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcuXG5cbk5vdywgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpY3MsIEknbGwgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGBmbG93X29mZmxvYWRfd29ya19oYW5kbGVyYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbGAgYXJlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGJlaW5nIHR3ZWFrZWQuIFRoZSByZWFsIGVudHJ5IHBvaW50cywgdGhlIG9uZXMgSSBuZWVkIHRvIGV4YW1pbmUgaW4gZGV0YWlsLCBhcmU6IGBuZl9mbG93X29mZmxvYWRfYWRkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgLCBgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2hgLCBgbmZfZmxvd19vZmZsb2FkX3N0YXRzYCwgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaGAsIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cGAsIGBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBgLCBgZmxvd19vZmZsb2FkX2FkZGAsIGFuZCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYC5cblxuRmlyc3QsIEkgc2hvdWxkIGNoZWNrIGlmIGBuZl9mbG93X29mZmxvYWRfYWRkYCBpcyBleHBvcnRlZC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQga25vd2luZyBpdHMgdmlzaWJpbGl0eSB3aWxsIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzYxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjUwLjg5NTEyNjA5MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5MjYyNjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChuZl9mbG93X29mZmxvYWRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyNzo1MC45NDUwNjAzMDZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxNzMxNjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIGBuZl9mbG93X29mZmxvYWRfYWRkYCBTeW1ib2wqKlxuXG5Pa2F5LCBzbyBJJ20gZW5jb3VudGVyaW5nIGEgc25hZy4gSSB3YXMgZXhwZWN0aW5nIGBuZl9mbG93X29mZmxvYWRfYWRkYCB0byBiZSBleHBvcnRlZCwgYnV0IHRoZSBsaW5rZXIncyBjb21wbGFpbmluZy4gVGltZSB0byBkaWcgaW4uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIHNwZWNpZmljYWxseSBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiwgb3IgYXQgbGVhc3QgdGhlIGRlY2xhcmF0aW9uLCBvZiB0aGlzIGNydWNpYWwgZnVuY3Rpb24gcmVsYXRlZCB0byBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgaXQncyBub3QgdmlzaWJsZSBhbmQgd2hhdCdzIHByZXZlbnRpbmcgaXRzIHVzZS4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpdHNlbGYgd2lsbCBwcm92aWRlIHNvbWUgY2x1ZXMgYXMgdG8gdGhlIGludGVuZGVkIHNjb3BlIG9yIGFueSBpbnRlcm5hbCBsaW1pdGF0aW9ucy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuLi4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkzMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI3OjU1LjE2MjM3OTI3NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MTg4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyMDpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3E7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMS1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3E7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNzA9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc1LVxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNzY6XFx0XFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDc3LVxcdH0gZWxzZSBpZiAob2ZmbG9hZC1cXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTExOD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMzA6dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMzEtXFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgwLVxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgxOlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExODItXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjk5PWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwMC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzAxOlxcdG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EgID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJuZl9mdF9vZmZsb2FkX2FkZFxcXCIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMzAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgV1FfVU5CT1VORCB8IFdRX1NZU0ZTLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEzMDM6XFx0aWYgKCFuZl9mbG93X29mZmxvYWRfYWRkX3dxKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMwNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyMC1lcnJfZGVsX3dxOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTMyMTpcXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEzMjItXFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEzMjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyNi17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMzI3OlxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTMyOC1cXHRkZXN0cm95X3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6NTUuMjA2OTAyNDcxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzgwNzIzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGbG93IE9mZmxvYWQgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmbG93IG9mZmxvYWQgc2l0dWF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgc29tZXRoaW5nIGlzbid0IGV4cG9ydGVkIGJ1dCAqYWxzbyogaXNuJ3Qgc3RhdGljLiBJdCdzIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGBuZl9mbG93X3RhYmxlYCBtb2R1bGUuIFRoZW4gYGZsb3dfb2ZmbG9hZF9hZGRgICppcyogZXhwb3J0ZWQsIHNvIGl0J3MgYSB2aXNpYmxlIGludGVyZmFjZS4gQW5kIEkndmUgZ290IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLCB3aGljaCBpcyAqc3RhdGljKi4gSG1tLCBidXQgaG9sZCBvbiDigJMgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBzZWVtcyB0byBhY3QgYXMgYW4gZW50cnkgcG9pbnQgZm9yIHRoZSBuZnRhYmxlcyBleHByZXNzaW9uLiBUaGF0J3MgYSBrZXkgZGV0YWlsISBOb3csIHdoYXQgYWJvdXQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGA/IEFoLCB5ZXMsICp0aGF0KiBpcyBleHBvcnRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGhvdyBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6NTkuMTg0OTc3NDQ2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyNjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz02OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pbmV0ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03MC1cXHQuaW5pdFxcdFxcdD0gbmZfZmxvd190YWJsZV9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NzE6XFx0LnNldHVwXFx0XFx0PSBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy03Mi1cXHQuYWN0aW9uXFx0XFx0PSBuZl9mbG93X3J1bGVfcm91dGVfaW5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Nzg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODAtXFx0LmluaXRcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjgxOlxcdC5zZXR1cFxcdFxcdD0gbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODItXFx0LmFjdGlvblxcdFxcdD0gbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkwLVxcdC5pbml0XFx0XFx0PSBuZl9mbG93X3RhYmxlX2luaXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5MTpcXHQuc2V0dXBcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkyLVxcdC5hY3Rpb25cXHRcXHQ9IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMjU2PXN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX2NtZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI3NC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyNzU6aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjc2LVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyOTYtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTI5NzpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI5OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjc6NTkuMjMyMjExMzAxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDk3ODkxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gRmxvdyBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gc29tZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBmb2N1cy4gTm93LCBsZXQncyBzZWUsIHdoYXQgZWxzZSBpcyByZWxldmFudC4uLiBJJ20gYWxzbyBjb25zaWRlcmluZyBgZmxvd19vZmZsb2FkX2FkZGAuIEl0J3MgZXhwb3J0ZWQsIGFuZCBpdCdzIHVzZWQgd2l0aGluIGBuZnRfZmxvd19vZmZsb2FkLmNgLCBzbyBpdCB3YXJyYW50cyBhIGxvb2suIE1vdmluZyBvbiwgd2hhdCBhYm91dCBgbmZfZmxvd19vZmZsb2FkX2FkZGA/IFNpbmNlIGl0J3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB0aGF0IG9wZW5zIGl0IHVwIGFzIGEgcG90ZW50aWFsIHN5bWJvbCB0byBleGFtaW5lIGNsb3NlbHkuIEFuZCwgYWxvbmcgdGhlIHNhbWUgbGluZXMsIGBuZl9mbG93X29mZmxvYWRfZGVsYCBsb29rcyBwcm9taXNpbmcgdG9vLCBhcyBpdCdzIGFsc28gbm9uLXN0YXRpYy4gVG8gbWFrZSBzdXJlIG15IHNjb3BlIGlzIGNvcnJlY3QsIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBib3RoIGBuZl9mbG93X29mZmxvYWRfYWRkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgIGFyZSBpbmRlZWQgZGVmaW5lZCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIzMywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyODowMy40ODIwMDM3MzhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODk2NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTExOD12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEyOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMzA6dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMzEtXFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI4OjAzLjUyNTkwNjEzM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODY1Mzk5NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgc29tZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIE5ldGZpbHRlciBmbG93IG9mZmxvYWQgdGhhdCBhcmUgcG90ZW50aWFsIGFyZWFzIGZvciBmdXp6aW5nOiBgbmZfZmxvd19vZmZsb2FkX2FkZGAsIGBuZl9mbG93X29mZmxvYWRfZGVsYCwgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cGAsIGFuZCBgZmxvd19vZmZsb2FkX2FkZGAuIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGVzZS5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGBuZl9mbG93X29mZmxvYWRfYWRkYCBpcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGguIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGl0J3MgdHJpZ2dlcmVkIHdoZW4gYSBmbG93IGlzIGFkZGVkIHRvIHRoZSBmbG93IHRhYmxlIGFuZCBoYXJkd2FyZSBvZmZsb2FkIGlzIGFjdGl2ZS4gSXQgcXVldWVzIGEgd29yayBpdGVtLiBTaW5jZSBpdCdzIHBlci1mbG93LCBub3QgcGVyLXBhY2tldCwgZnV6emluZyBpdCBzaG91bGRuJ3QgaW50cm9kdWNlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGNvbmNlcm5zLiBUaGF0J3MgZ29vZCB0byBrbm93LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSB3b25kZXJpbmcgaWYganVzdCBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBhcmUgc3VmZmljaWVudCBmb3IgZW5hYmxpbmcgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkuIEFmdGVyIHJldmlld2luZyB0aGUgZGVwZW5kZW5jaWVzLCBpdCBhcHBlYXJzIHRoYXQgYE5GX0ZMT1dfVEFCTEVgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYCwgd2hpbGUgYE5GVF9GTE9XX09GRkxPQURgIGRlcGVuZHMgb24gYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9GTE9XX1RBQkxFYC4gU28sIHllcywgZW5hYmxpbmcgYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgc2hvdWxkIGNvdmVyIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MuIEFoLCBgTkZfRkxPV19UQUJMRV9JTkVUYCBsb29rcyBsaWtlIGEgZ29vZCBhZGRpdGlvbi4gSSdsbCBhZGQgdGhhdCB0byB0aGUgbGlzdCBvZiBjb25maWdzLlxuXG5XYWl0LCB0aGUgY29kZSBpbiBxdWVzdGlvbiwgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCwgaXMgcGFydCBvZiB0aGUgZmxvdyBvZmZsb2FkIHN5c3RlbS4gU28gaXMgaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBgTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZD8gTG9va2luZyBhdCB0aGUgYnVpbGQgb3V0cHV0LCBgbmZfZmxvd190YWJsZV9vZmZsb2FkLm9gIGlzIGluZGVlZCB3aXRoaW4gYG5mX2Zsb3dfdGFibGUtb2Jqc2AuIEhvd2V2ZXIsIEkgbmVlZCB0byBjaGVjayBob3cgdG8gYWN0dWFsbHkgdHJpZ2dlciB0aGUgaGFyZHdhcmUgb2ZmbG9hZC4gVG8gZG8gdGhhdCwgSSBuZWVkIGBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKWAgdG8gcmV0dXJuIHRydWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIHNldCB0byBwcm9jZWVkIHdpdGggbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI4OjEwLjM5MTMwODEwNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNDAwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd3RhYmxlX2h3X29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zMjg9aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzUyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzUzOlxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93X3RhYmxlKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM1NC1cXHRcXHRuZl9mbG93X29mZmxvYWRfYWRkKGZsb3dfdGFibGUsIGZsb3cpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zNjA9dm9pZCBmbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNzAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozNzE6XFx0aWYgKGxpa2VseSghbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpIHx8XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNzItXFx0ICAgIHRlc3RfYml0KE5GX0ZMT1dfQ0xPU0lORywgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE3MD12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNzEte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE3MjpcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd3RhYmxlKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3My1cXHRcXHRmbHVzaF93b3JrcXVldWUobmZfZmxvd19vZmZsb2FkX2RlbF93cSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNzg9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3OS17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTgwOlxcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTgxLVxcdFxcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfYWRkX3dxKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTI3NT1pbnQgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEyODM6XFx0aWYgKCFuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTI4NC1cXHRcXHRyZXR1cm4gbmZfZmxvd19vZmZsb2FkX3hkcF9zZXR1cChmbG93dGFibGUsIGRldiwgY21kKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTA0PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE4OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjE5MDpcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoXFx1MDAyNmZ0LVxcdTAwM2VkYXRhKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMTkxLVxcdCAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tXFx1MDAzZWRldikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI4OjEwLjQzODU1Mzc1MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQxMjY3MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWRgIHRoaW5nLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIHNvbGlkIGRlZmluaXRpb24uIEl0J3MgY3J1Y2lhbCwgb2J2aW91c2x5LCB0byBidWlsZCBhIGNvbmNlcHR1YWwgZnJhbWV3b3JrIGZvciBob3cgdGhpcyBvZmZsb2FkaW5nIG1lY2hhbmlzbSB3b3JrcyB3aXRoaW4gdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gS25vd2luZyB0aGUgZXhhY3QgZGVmaW5pdGlvbiB3aWxsIGluZm9ybSB0aGUgbmV4dCBsZXZlbCBvZiBteSBpbnZlc3RpZ2F0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGFzc3VtcHRpb25zIG5lZWQgdG8gYmUgY2hlY2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1ODcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyODoxMy42Nzk4MjMwNjNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjA5NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3d0YWJsZV9od19vZmZsb2FkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD03Nj1zdHJ1Y3QgbmZfZmxvd3RhYmxlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtODgtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo4OTpzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtOTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjoyODoxMy43MjQwMzgwMjhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MTUwODM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBuZl9mbG93X3RhYmxlLmgqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDg5LiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBlcmhhcHMgc29tZSBjcnVjaWFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gc2VlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgbWFpbiBmbG93IHRhYmxlIHN0cnVjdHVyZSBpdHNlbGYsIG1heWJlIHRoZSBpbmRpdmlkdWFsIGZsb3cgZW50cnkgc3RydWN0dXJlLCBhbmQgcG90ZW50aWFsbHkgYW55IHJlbGF0ZWQgbG9ja2luZyBwcmltaXRpdmVzIG9yIGhlbHBlciBmdW5jdGlvbnMuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgd2UgY2FuIGRpZyB1cCB0aGVyZS4gUGVyaGFwcyBJIGNhbiBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgaW4gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg4MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjI4OjE3LjExNTU0OTgwNFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcbiAgODE6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGxpc3Q7XFx0XFx0Lyogc2xvd3BhdGggcGFydHMgKi9cXG4gIDgyOlxcdFxcdGNvbnN0IHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZVxcdCp0eXBlO1xcbiAgODM6XFx0XFx0c3RydWN0IGRlbGF5ZWRfd29ya1xcdFxcdGdjX3dvcms7XFxuICA4NDpcXHRcXHRzdHJ1Y3QgZmxvd19ibG9ja1xcdFxcdGZsb3dfYmxvY2s7XFxuICA4NTpcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlXFx0XFx0Zmxvd19ibG9ja19sb2NrOyAvKiBHdWFyZHMgZmxvd19ibG9jayAqL1xcbiAgODY6XFx0XFx0cG9zc2libGVfbmV0X3RcXHRcXHRcXHRuZXQ7XFxuICA4NzpcXHR9O1xcbiAgODg6XFx0XFxuICA4OTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbiAgOTA6XFx0e1xcbiAgOTE6XFx0XFx0cmV0dXJuIGZsb3d0YWJsZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRDtcXG4gIDkyOlxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIHtcXG4gIDk1OlxcdFxcdEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwgPSBJUF9DVF9ESVJfT1JJR0lOQUwsXFxuICA5NjpcXHRcXHRGTE9XX09GRkxPQURfRElSX1JFUExZID0gSVBfQ1RfRElSX1JFUExZLFxcbiAgOTc6XFx0fTtcXG4gIDk4OlxcdCNkZWZpbmUgRkxPV19PRkZMT0FEX0RJUl9NQVhcXHRJUF9DVF9ESVJfTUFYXFxuICA5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MTcuMTE1NjI4MTc0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzQwNDczMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaGFyZHdhcmUgb2ZmbG9hZCBsb2dpYy4gTXkgaW5pdGlhbCBzY2FuIGNoZWNrcyBgZmxvd3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAuIFRoYXQgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZmxvd3RhYmxlIGlzIGNyZWF0ZWQgd2l0aCB0aGUgYG9mZmxvYWRgIGZsYWcgaW4gbmZ0YWJsZXMg4oCTIGl0J3MgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5UaGUgY29yZSBvZiB0aGUgZml4IGludm9sdmVzIHNldHRpbmcgdGhlIGBORl9GTE9XX0hXX0RFQURgIGZsYWcgKmFmdGVyKiB0aGUgd29ya2VyJ3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgdGhlIGNydWNpYWwgYWRkaXRpb24gb2YgYSBtZW1vcnkgYmFycmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaXJlY3RseSBhZGRyZXNzaW5nIGEgY29uY3VycmVuY3kgaXNzdWUuIEdpdmVuIHRoYXQgaXQncyBhIGNvbmN1cnJlbmN5IGZpeCwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBoZXJlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZml4IGFkZHJlc3NlcyB0aGUgcmFjZSBjb25kaXRpb24gd2l0aG91dCBpbnRyb2R1Y2luZyBuZXcgcHJvYmxlbXMuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlIGBuZl9mbG93X29mZmxvYWRfYWRkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9kZWxgLCBgbmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwYCwgYW5kIGBmbG93X29mZmxvYWRfYWRkYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUsIGFuZCB0aGV5IGFyZSwgdGhyb3VnaCB0aGUgbmV0bGluayBjb25maWd1cmF0aW9uIG9mIG5mdGFibGVzIGZsb3d0YWJsZXMgd2l0aCB0aGUgYG9mZmxvYWRgIGZsYWcgYW5kIHRoZW4gd2hlbiB0cmFmZmljIG1hdGNoZXMgdGhlc2UgZmxvd3RhYmxlIHJ1bGVzLlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSBkZWZpbml0ZWx5IG5lZWQgYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGFuZCBgTkZfRkxPV19UQUJMRV9JTkVUYC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIEknZCBqdXN0IGluY2x1ZGUgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYCB0byBiZSBzYWZlLCBidXQgdGhlbiBJIHJlYWQgdGhlIGluc3RydWN0aW9ucyBhbmQgbmVlZCB0byBmb2xsb3cgdGhvc2UgaW5zdHJ1Y3Rpb25zIGFuZCBsb29rIGZvciBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBgS2NvbmZpZ2AuIFRoZXkgYXJlbid0IHNwZWNpZmljYWxseSBub24tc3RhbmRhcmQsIGJ1dCB0aGV5IGFyZSByZXF1aXJlZC4gSSdtIGdvaW5nIHRvIGluY2x1ZGUgYWxsIHRocmVlLlxuXG5NeSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaGFyZHdhcmUgb2ZmbG9hZCBoYW5kbGVyLiBJdCBkZWxheXMgc2V0dGluZyB0aGUgYE5GX0ZMT1dfSFdfREVBRGAgZmxhZyBhbmQgYWRkcyBhIG1lbW9yeSBiYXJyaWVyIHRvIGNvcnJlY3QgdGhlIGZsYXcuIFRoZSByZWxldmFudCBjb2RlIGlzIHRyaWdnZXJlZCBieSBuZnRhYmxlcyBoYXJkd2FyZSBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgZnV6emluZyBpcyBhbiBpbXBvcnRhbnQgc3RlcCB0byB2YWxpZGF0ZSB0aGUgZml4IGFuZCBydWxlIG91dCBuZXcgaXNzdWVzLiBJJ2xsIGZsYWcgaXQgYXMgc3VjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MjMsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MjguNDU2MTA0MTNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTY3OTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X29mZmxvYWRfYWRkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZGVsXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXBcIixcbiAgICBcImZsb3dfb2ZmbG9hZF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIHdvcmtxdWV1ZSBoYW5kbGVyIGJ5IGRlbGF5aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBORl9GTE9XX0hXX0RFQUQgZmxhZyB1bnRpbCBhZnRlciB0aGUgd29ya2VyJ3MgbGFzdCBmbG93IGFjY2VzcyBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkIGZvciBhIGZsb3d0YWJsZS4gRnV6emluZyB0aGlzIGFyZWEgY2FuIGhlbHAgZW5zdXJlIHRoYXQgdGhlIGNvbmN1cnJlbmN5IGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVfSU5FVFwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd19vZmZsb2FkX2FkZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2RlbFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9vZmZsb2FkX3NldHVwXCIsXG4gICAgXCJmbG93X29mZmxvYWRfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaGFyZHdhcmUgb2ZmbG9hZCB3b3JrcXVldWUgaGFuZGxlciBieSBkZWxheWluZyB0aGUgc2V0dGluZyBvZiB0aGUgTkZfRkxPV19IV19ERUFEIGZsYWcgdW50aWwgYWZ0ZXIgdGhlIHdvcmtlcidzIGxhc3QgZmxvdyBhY2Nlc3MgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyB3aGVuIGhhcmR3YXJlIG9mZmxvYWQgaXMgZW5hYmxlZCBmb3IgYSBmbG93dGFibGUuIEZ1enppbmcgdGhpcyBhcmVhIGNhbiBoZWxwIGVuc3VyZSB0aGF0IHRoZSBjb25jdXJyZW5jeSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbmV3IGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MjguNTM3Nzg4ODEyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzQ1ODA3ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MjguNTM4MjE1MzcyWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzNDUzNzc1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBzZXR0aW5nIG9mIHRoZSBgTkZfRkxPV19IV19ERUFEYCBiaXQgaW4gYG9mZmxvYWQtXFx1MDAzZWZsb3ctXFx1MDAzZWZsYWdzYCBmcm9tIGBmbG93X29mZmxvYWRfd29ya19kZWwoKWAgdG8gdGhlIGVuZCBvZiBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcigpYCwgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgdG8gZW5zdXJlIGl0IGlzIHB1Ymxpc2hlZCBvbmx5IGFmdGVyIHRoZSB3b3JrZXIncyBsYXN0IGFjY2VzcyB0byB0aGUgZmxvdy4gVGhpcyBpcyBhIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVnIHdoZXJlIHRoZSBmbG93IGNvdWxkIGJlIGZyZWVkIGJ5IGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoZSB3b3JrZXIgd2FzIHN0aWxsIGFjY2Vzc2luZyBpdC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAobGlrZSBLQ1NBTikuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViZjcwMzMwOTRlNzU5MTgwOWM2NmIyYzk4MTkwMWUwZWJlYzZiMWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjoyNjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG5pbmRleCA4MDFhM2RkOWNlZWEzLi42NzU3ZmQ4OWMxZjFhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuQEAgLTk5NSw3ICs5OTUsNiBAQCBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19kZWwoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxuIFx0Zmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcbiBcdGlmICh0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNm9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VmbGFncykpXG4gXHRcdGZsb3dfb2ZmbG9hZF90dXBsZV9kZWwob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7XG4tXHRzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3R1cGxlX3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbkBAIC0xMDU5LDYgKzEwNTgsMTIgQEAgc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR9XG4gXG4gXHRjbGVhcl9iaXQoTkZfRkxPV19IV19QRU5ESU5HLCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpO1xuK1x0aWYgKG9mZmxvYWQtXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcbitcdFx0LyogUHVibGlzaCBhZnRlciB0aGUgd29ya2VyJ3MgbGFzdCBmbG93IGFjY2Vzcy4gKi9cbitcdFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4rXHRcdHNldF9iaXQoTkZfRkxPV19IV19ERUFELCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpO1xuK1x0fVxuK1xuIFx0a2ZyZWUob2ZmbG9hZCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MjguNTM4MjE4NjMyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNDUzNTQ3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoZXkndmUgbW92ZWQgdGhlIGBzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKTtgIGNhbGwgZnJvbSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsKClgIHRvIHRoZSBlbmQgb2YgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoKWAsIHJpZ2h0IGFmdGVyIGNsZWFyaW5nIGBORl9GTE9XX0hXX1BFTkRJTkdgIGFuZCBiZWZvcmUgZnJlZWluZyB0aGUgYG9mZmxvYWRgIHN0cnVjdHVyZS4gVGhleSd2ZSBhbHNvIHRocm93biBpbiBhIGBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtgIG1lbW9yeSBiYXJyaWVyIGJlZm9yZSBzZXR0aW5nIHRoZSBgTkZfRkxPV19IV19ERUFEYCBiaXQuXG5cbk15IFNwaWRleS1TZW5zZSBpcyB0aW5nbGluZ+KAlHRoaXMgc2NyZWFtcyByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUuIEl0IGxvb2tzIGxpa2Ugc2V0dGluZyBgTkZfRkxPV19IV19ERUFEYCB0b28gZWFybHkgaW4gdGhlIGRlbGV0aW9uIHBhdGggKGBmbG93X29mZmxvYWRfd29ya19kZWwoKWApIG1pZ2h0IGhhdmUgYWxsb3dlZCBhbm90aGVyIHRocmVhZCwgbWF5YmUgc29tZSBzb3J0IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiBvciBzb21lIG90aGVyIHByb2Nlc3MsIHRvIGZyZWUgYG9mZmxvYWQtXHUwMDNlZmxvd2Agd2hpbGUgdGhlIHdvcmtlciB0aHJlYWQgd2FzIHN0aWxsIHRyeWluZyB0byBhY2Nlc3MgaXQuIFNvLCBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUuIExldCdzIHNlZS4uLlxuXG5JIHdlbnQgdGhyb3VnaCBgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcigpYCBhbmQgYGZsb3dfb2ZmbG9hZF93b3JrX2RlbCgpYCBpbiBteSBtaW5kLiBZZXMsIGBvZmZsb2FkLVx1MDAzZWZsb3dgIGlzIGFjY2Vzc2VkIGluIG11bHRpcGxlIHBsYWNlcyB3aXRoaW4gYGZsb3dfb2ZmbG9hZF93b3JrX2RlbCgpYCwgYW5kIHRoZSBiaXQgYmVpbmcgc2V0IG1pZ2h0IGFsbG93IGEgcHJlbWF0dXJlIGZyZWUuIFRoaXMgZGVmaW5pdGVseSBoYXMgdGhlIGZpbmdlcnByaW50IG9mIGEgVUFGLlxuXG5Ob3csIGEga2V5IHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gTm8sIG5vdCByZWFsbHkuIEl0J3MganVzdCByZWFycmFuZ2luZyBhIGJpdCBzZXR0aW5nIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gTm8gbmV3IHN0cnVjdHVyZXMsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm90aGluZyB0byBzdWdnZXN0IGluZm8tbGVha3MsIHNvIEkgc2hvdWxkIGJlIG9rYXkuXG5cbkFmdGVyIGEgc2Vjb25kIHF1aWNrIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgYSBmaXggZm9yIGEgVUFGLiBDb25jdXJyZW5jeSBpcyBkZWZpbml0ZWx5IHRoZSBwcm9ibGVtLiBLQVNBTiBpcyB0aGUgdG9vbCBoZXJlLCBub3QgS01TQU4uIEknbGwgZ28gYWhlYWQgYW5kIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCBteSByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDQsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6Mjg6MzcuODgzNTc2MTU2WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgc2V0dGluZyBvZiB0aGUgYE5GX0ZMT1dfSFdfREVBRGAgYml0IGluIGBvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFnc2AgZnJvbSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsKClgIHRvIHRoZSBlbmQgb2YgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoKWAsIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSBpdCBpcyBwdWJsaXNoZWQgb25seSBhZnRlciB0aGUgd29ya2VyJ3MgbGFzdCBhY2Nlc3MgdG8gdGhlIGZsb3cuIFRoaXMgaXMgYSBmaXggZm9yIGEgY29uY3VycmVuY3kgaXNzdWUsIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIChVQUYpIGJ1ZyB3aGVyZSB0aGUgZmxvdyBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCB3aGlsZSB0aGUgd29ya2VyIHdhcyBzdGlsbCBhY2Nlc3NpbmcgaXQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIHJhY2UgY29uZGl0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKGxpa2UgS0NTQU4pLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgc2V0dGluZyBvZiB0aGUgYE5GX0ZMT1dfSFdfREVBRGAgYml0IGluIGBvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFnc2AgZnJvbSBgZmxvd19vZmZsb2FkX3dvcmtfZGVsKClgIHRvIHRoZSBlbmQgb2YgYGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoKWAsIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSBpdCBpcyBwdWJsaXNoZWQgb25seSBhZnRlciB0aGUgd29ya2VyJ3MgbGFzdCBhY2Nlc3MgdG8gdGhlIGZsb3cuIFRoaXMgaXMgYSBmaXggZm9yIGEgY29uY3VycmVuY3kgaXNzdWUsIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIChVQUYpIGJ1ZyB3aGVyZSB0aGUgZmxvdyBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCB3aGlsZSB0aGUgd29ya2VyIHdhcyBzdGlsbCBhY2Nlc3NpbmcgaXQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIHJhY2UgY29uZGl0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKGxpa2UgS0NTQU4pLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrz5jg[1] Phase: Succeeded StartedAt: 2026-08-18 22:29:04 +0000 UTC FinishedAt: 2026-08-18 22:29:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 22:29:04 +0000 UTC FinishedAt: 2026-08-18 22:29:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2] Phase: Succeeded StartedAt: 2026-08-18 22:29:04 +0000 UTC FinishedAt: 2026-08-19 02:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 22:29:04 +0000 UTC FinishedAt: 2026-08-19 02:13:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 22:29:04 +0000 UTC FinishedAt: 2026-08-18 22:29:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 22:29:04 +0000 UTC FinishedAt: 2026-08-18 22:29:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrz5jg/series-workflowrz5jg-convert-artifact-3279012983/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 22:29:14 +0000 UTC FinishedAt: 2026-08-18 22:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 22:29:14 +0000 UTC FinishedAt: 2026-08-18 22:49:45 +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:*05e17973-3eba-4ffd-ab11-37ab21822211,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-workflowrz5jg/series-workflowrz5jg-convert-artifact-3279012983/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": "9932f28f-aaf2-44db-b1be-49c20c603131", "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-workflowrz5jg/series-workflowrz5jg-build-action-4279719629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 22:29:14 +0000 UTC FinishedAt: 2026-08-18 22:49:20 +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:*05e17973-3eba-4ffd-ab11-37ab21822211,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-workflowrz5jg/series-workflowrz5jg-convert-artifact-3279012983/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": "9932f28f-aaf2-44db-b1be-49c20c603131", "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-workflowrz5jg/series-workflowrz5jg-build-action-4279719629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 22:49:45 +0000 UTC FinishedAt: 2026-08-18 22:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 22:49:45 +0000 UTC FinishedAt: 2026-08-18 22:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 22:49:45 +0000 UTC FinishedAt: 2026-08-18 22:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 22:49:45 +0000 UTC FinishedAt: 2026-08-18 22:49:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrz5jg/series-workflowrz5jg-convert-artifact-1584279718/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 22:50:13 +0000 UTC FinishedAt: 2026-08-18 22:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 22:50:13 +0000 UTC FinishedAt: 2026-08-18 22:52:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9932f28f-aaf2-44db-b1be-49c20c603131,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-workflowrz5jg/series-workflowrz5jg-build-action-4279719629/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-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 22:52:22 +0000 UTC FinishedAt: 2026-08-18 22:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 22:52:22 +0000 UTC FinishedAt: 2026-08-18 22:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 22:52:22 +0000 UTC FinishedAt: 2026-08-18 23:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 22:52:22 +0000 UTC FinishedAt: 2026-08-18 23:08:45 +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:*05e17973-3eba-4ffd-ab11-37ab21822211,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-workflowrz5jg/series-workflowrz5jg-convert-artifact-1584279718/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": "99f2b1c7-8488-4aa2-acd3-5ea1662c37d6", "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-workflowrz5jg/series-workflowrz5jg-build-action-2403159658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 22:52:22 +0000 UTC FinishedAt: 2026-08-18 23:08:35 +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:*05e17973-3eba-4ffd-ab11-37ab21822211,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-workflowrz5jg/series-workflowrz5jg-convert-artifact-1584279718/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": "99f2b1c7-8488-4aa2-acd3-5ea1662c37d6", "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-workflowrz5jg/series-workflowrz5jg-build-action-2403159658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 23:08:45 +0000 UTC FinishedAt: 2026-08-18 23:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 23:08:45 +0000 UTC FinishedAt: 2026-08-18 23:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 23:08:45 +0000 UTC FinishedAt: 2026-08-18 23:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 23:08:45 +0000 UTC FinishedAt: 2026-08-18 23:10:31 +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:*99f2b1c7-8488-4aa2-acd3-5ea1662c37d6,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-workflowrz5jg/series-workflowrz5jg-build-action-2403159658/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-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 23:10:41 +0000 UTC FinishedAt: 2026-08-19 02:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 23:10:41 +0000 UTC FinishedAt: 2026-08-19 02:13:40 +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":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"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:*9932f28f-aaf2-44db-b1be-49c20c603131,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*99f2b1c7-8488-4aa2-acd3-5ea1662c37d6,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-workflowrz5jg/series-workflowrz5jg-build-action-4279719629/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-workflowrz5jg/series-workflowrz5jg-build-action-2403159658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 23:10:41 +0000 UTC FinishedAt: 2026-08-18 23:10:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 23:10:41 +0000 UTC FinishedAt: 2026-08-18 23:10:46 +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":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"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-workflowrz5jg/series-workflowrz5jg-convert-artifact-2026209003/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 23:10:41 +0000 UTC FinishedAt: 2026-08-18 23:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 23:10:41 +0000 UTC FinishedAt: 2026-08-18 23:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 23:10:41 +0000 UTC FinishedAt: 2026-08-18 23:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 23:10:51 +0000 UTC FinishedAt: 2026-08-19 02:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrz5jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_add","nf_flow_offload_del","nf_flow_table_offload_setup","flow_offload_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NF_FLOW_TABLE_INET","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"3283fd1d-6956-442c-aba8-e739fe08a624","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 23:10:51 +0000 UTC FinishedAt: 2026-08-19 02:13:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9932f28f-aaf2-44db-b1be-49c20c603131,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*99f2b1c7-8488-4aa2-acd3-5ea1662c37d6,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-workflowrz5jg/series-workflowrz5jg-build-action-4279719629/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-workflowrz5jg/series-workflowrz5jg-build-action-2403159658/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-workflowrz5jg/series-workflowrz5jg-convert-artifact-2026209003/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,}