Name: series-workflowr4xm7 Phase: Succeeded StartedAt: 2026-09-15 00:27:02 +0000 UTC FinishedAt: 2026-09-15 02:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[0] Phase: Succeeded StartedAt: 2026-09-15 00:27:02 +0000 UTC FinishedAt: 2026-09-15 00:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 00:27:02 +0000 UTC FinishedAt: 2026-09-15 00:30:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c297ed90fbba72d32b7759aae362b36d15b2db1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CATC", "USB_NET_DRIVERS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c297ed90fbba72d32b7759aae362b36d15b2db1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CATC", "USB_NET_DRIVERS" ], "series_id": "d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "catc_rx_done" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "c297ed90fbba72d32b7759aae362b36d15b2db1f", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DQVRDJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NhdGNfcnhfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMgaW4gY2F0Y19yeF9kb25lKCkgdG8gZml4IGJvdW5kcyBjaGVja2luZyBvbiBpbmNvbWluZyBVU0IgbmV0d29yayBwYWNrZXRzLiBTcGVjaWZpY2FsbHksIGl0IGNvbXB1dGVzIHRoZSByZW1haW5pbmcgYnVmZmVyIHNpemUgKCYjMzk7cmVtYWluaW5nJiMzOTspIGFuZCBlbnN1cmVzIHRoYXQgcGt0X29mZnNldCBieXRlcyBhcmUgYXZhaWxhYmxlIGJlZm9yZSByZWFkaW5nIHRoZSBwYWNrZXQgbGVuZ3RoIGhlYWRlciwgYW5kIHZlcmlmaWVzIHRoYXQgcGt0X2xlbiBpcyBhdCBsZWFzdCBFVEhfSExFTiBhbmQgcGt0X2xlbiAmIzQzOyBwa3Rfb2Zmc2V0IGRvZXMgbm90IGV4Y2VlZCByZW1haW5pbmcgYnVmZmVyIGJ5dGVzIGJlZm9yZSBjb3B5aW5nIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHNrYi5cblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIG9uIHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXIgYW5kIGltcHJvcGVyIHBhY2tldCBsZW5ndGggaGFuZGxpbmcuIEFsbCB2YXJpYWJsZXMgKHJlbWFpbmluZywgcGt0X2xlbiwgcGt0X29mZnNldCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBieXRlcyBjb3BpZWQgaW50byBza2IgY29tZSBzdHJpY3RseSBmcm9tIHRoZSB2YWxpZCByZWNlaXZlZCBidWZmZXIgd2l0aGluIGFjdHVhbF9sZW5ndGgsIGFuZCB0aGUgZnVsbCBza2IgcGF5bG9hZCBpcyBwb3B1bGF0ZWQsIGxlYXZpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZSBza2IuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgc3RydWN0dXJlcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHJlbWFpbmluZyBib3VuZGFyeSBvciBidWZmZXItb3ZlcmZsb3cgcmlza3Mgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IGxlbmd0aCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgbG9naWMgaW4gY2F0Y19yeF9kb25lKCkgaW4gZHJpdmVycy9uZXQvdXNiL2NhdGMuYy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgUlggVVJCIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhlIENBVEMgVVNCIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gKGUuZy4gRHVtbXkgSENEIC8gcmF3LWdhZGdldCkuIEZ1enppbmcgVVNCIHBhY2tldCByZWNlcHRpb24gY2FuIHZlcmlmeSBib3VuZHMgY2hlY2tzIGFuZCB1bmNvdmVyIHJlZ3Jlc3Npb25zIG9yIHBhcnNpbmcgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0YjgwNDZkNGY1MDkxYzM0MTMzOGM3MTI4MmY1ZDA1MmE5NWVlZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMDoyODoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuY1xuaW5kZXggOTZlODJmOTRlZGNmOC4uMzliNjc4ZjE3NWRkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcbkBAIC0yMzMsMTcgJiM0MzsyMzMsMjYgQEAgc3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYilcbiBcdH1cbiBcbiBcdGRvIHtcbi1cdFx0aWYoIWNhdGMtXHUwMDNlaXNfZjV1MDExKSB7XG4tXHRcdFx0cGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2Kilwa3Rfc3RhcnQpO1xuLVx0XHRcdGlmIChwa3RfbGVuIFx1MDAzZSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCkge1xuJiM0MztcdFx0aW50IHJlbWFpbmluZyA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIC1cbiYjNDM7XHRcdFx0XHQocGt0X3N0YXJ0IC0gKHU4ICopdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFjYXRjLVx1MDAzZWlzX2Y1dTAxMSkge1xuJiM0MztcdFx0XHRpZiAocmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0KSB7XG4gXHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbiBcdFx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4mIzQzO1x0XHRcdHBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKXBrdF9zdGFydCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cGt0X2xlbiA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAocGt0X2xlbiBcdTAwM2MgRVRIX0hMRU4gfHwgcGt0X2xlbiAmIzQzOyBwa3Rfb2Zmc2V0IFx1MDAzZSByZW1haW5pbmcpIHtcbiYjNDM7XHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKSkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DQVRDJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NhdGNfcnhfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgbGVuZ3RoIHZhbGlkYXRpb24gYW5kIGJvdW5kcyBjaGVja2luZyBsb2dpYyBpbiBjYXRjX3J4X2RvbmUoKSBpbiBkcml2ZXJzL25ldC91c2IvY2F0Yy5jLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBSWCBVUkIgY29tcGxldGlvbiBoYW5kbGVyIGZvciB0aGUgQ0FUQyBVU0IgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZS5nLiBEdW1teSBIQ0QgLyByYXctZ2FkZ2V0KS4gRnV6emluZyBVU0IgcGFja2V0IHJlY2VwdGlvbiBjYW4gdmVyaWZ5IGJvdW5kcyBjaGVja3MgYW5kIHVuY292ZXIgcmVncmVzc2lvbnMgb3IgcGFyc2luZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDRiODA0NmQ0ZjUwOTFjMzQxMzM4YzcxMjgyZjVkMDUyYTk1ZWVlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDAwOjI4OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKaW5kZXggOTZlODJmOTRlZGNmOC4uMzliNjc4ZjE3NWRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCkBAIC0yMzMsMTcgJiM0MzsyMzMsMjYgQEAgc3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYikKIAl9CiAKIAlkbyB7Ci0JCWlmKCFjYXRjLSZndDtpc19mNXUwMTEpIHsKLQkJCXBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiopcGt0X3N0YXJ0KTsKLQkJCWlmIChwa3RfbGVuICZndDsgdXJiLSZndDthY3R1YWxfbGVuZ3RoKSB7CiYjNDM7CQlpbnQgcmVtYWluaW5nID0gdXJiLSZndDthY3R1YWxfbGVuZ3RoIC0KJiM0MzsJCQkJKHBrdF9zdGFydCAtICh1OCAqKXVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyKTsKJiM0MzsKJiM0MzsJCWlmICghY2F0Yy0mZ3Q7aXNfZjV1MDExKSB7CiYjNDM7CQkJaWYgKHJlbWFpbmluZyAmbHQ7IHBrdF9vZmZzZXQpIHsKIAkJCQljYXRjLSZndDtuZXRkZXYtJmd0O3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7OwogCQkJCWNhdGMtJmd0O25ldGRldi0mZ3Q7c3RhdHMucnhfZXJyb3JzJiM0MzsmIzQzOzsKIAkJCQlicmVhazsKIAkJCX0KJiM0MzsJCQlwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilwa3Rfc3RhcnQpOwogCQl9IGVsc2UgewogCQkJcGt0X2xlbiA9IHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aDsKIAkJfQogCiYjNDM7CQlpZiAocGt0X2xlbiAmbHQ7IEVUSF9ITEVOIHx8IHBrdF9sZW4gJiM0MzsgcGt0X29mZnNldCAmZ3Q7IHJlbWFpbmluZykgewomIzQzOwkJCWNhdGMtJmd0O25ldGRldi0mZ3Q7c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQkJY2F0Yy0mZ3Q7bmV0ZGV2LSZndDtzdGF0cy5yeF9lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwogCQlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSkKIAkJCXJldHVybjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDQVRDIFVTQiBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBwb2ludGVkIHRvIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgQ0FUQyBVU0IgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBpbiBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBkaWZmIGFuZCB0aGUgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBoYXMgY2hhbmdlZCwgYW5kIHdoYXQgaXTigJlzIGludGVuZGVkIHRvIGFjY29tcGxpc2guIEkgc2VlIHRoYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBjYXRjX3J4X2RvbmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGdldCBhIGJyb2FkZXIgdmlldyBhcm91bmQgbGluZSAyMzMgaW4gdGhhdCBmaWxlLiBJIGNhbiBxdWlja2x5IHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBnb29kIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3VzYi9jYXRjLmNgIGFuZCBiZWdpbiB0byByZWNvbnN0cnVjdCB0aGUgY2hhbmdlcyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2F0Yy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHQjZGVmaW5lIGNhdGNfd3JpdGVfbWVtX2FzeW5jKGNhdGMsIGFkZHIsIGJ1Ziwgc2l6ZSlcdGNhdGNfY3RybF9hc3luYyhjYXRjLCBVU0JfRElSX09VVCwgV3JpdGVNZW0sIDAsIGFkZHIsIGJ1Ziwgc2l6ZSwgTlVMTClcbiAyMTE6XHRcbiAyMTI6XHQvKlxuIDIxMzpcdCAqIFJlY2VpdmUgcm91dGluZXMuXG4gMjE0Olx0ICovXG4gMjE1Olx0XG4gMjE2Olx0c3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYilcbiAyMTc6XHR7XG4gMjE4Olx0XHRzdHJ1Y3QgY2F0YyAqY2F0YyA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuIDIxOTpcdFx0dTggKnBrdF9zdGFydCA9IHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXI7XG4gMjIwOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDIyMTpcdFx0aW50IHBrdF9sZW4sIHBrdF9vZmZzZXQgPSAwO1xuIDIyMjpcdFx0aW50IHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG4gMjIzOlx0XG4gMjI0Olx0XHRpZiAoIWNhdGMtXHUwMDNlaXNfZjV1MDExKSB7XG4gMjI1Olx0XHRcdGNsZWFyX2JpdChSWF9SVU5OSU5HLCBcdTAwMjZjYXRjLVx1MDAzZWZsYWdzKTtcbiAyMjY6XHRcdFx0cGt0X29mZnNldCA9IDI7XG4gMjI3Olx0XHR9XG4gMjI4Olx0XG4gMjI5Olx0XHRpZiAoc3RhdHVzKSB7XG4gMjMwOlx0XHRcdGRldl9kYmcoXHUwMDI2dXJiLVx1MDAzZWRldi1cdTAwM2VkZXYsIFwmIzM0O3J4X2RvbmUsIHN0YXR1cyAlZCwgbGVuZ3RoICVkXFxuXCYjMzQ7LFxuIDIzMTpcdFx0XHRcdHN0YXR1cywgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuIDIzMjpcdFx0XHRyZXR1cm47XG4gMjMzOlx0XHR9XG4gMjM0Olx0XG4gMjM1Olx0XHRkbyB7XG4gMjM2Olx0XHRcdGludCByZW1haW5pbmcgPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCAtXG4gMjM3Olx0XHRcdFx0XHQocGt0X3N0YXJ0IC0gKHU4ICopdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcik7XG4gMjM4Olx0XG4gMjM5Olx0XHRcdGlmICghY2F0Yy1cdTAwM2Vpc19mNXUwMTEpIHtcbiAyNDA6XHRcdFx0XHRpZiAocmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0KSB7XG4gMjQxOlx0XHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbiAyNDI6XHRcdFx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7XG4gMjQzOlx0XHRcdFx0XHRicmVhaztcbiAyNDQ6XHRcdFx0XHR9XG4gMjQ1Olx0XHRcdFx0cGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopcGt0X3N0YXJ0KTtcbiAyNDY6XHRcdFx0fSBlbHNlIHtcbiAyNDc6XHRcdFx0XHRwa3RfbGVuID0gdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGg7XG4gMjQ4Olx0XHRcdH1cbiAyNDk6XHRcbiAyNTA6XHRcdFx0aWYgKHBrdF9sZW4gXHUwMDNjIEVUSF9ITEVOIHx8IHBrdF9sZW4gJiM0MzsgcGt0X29mZnNldCBcdTAwM2UgcmVtYWluaW5nKSB7XG4gMjUxOlx0XHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7XG4gMjUyOlx0XHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfZXJyb3JzJiM0MzsmIzQzOztcbiAyNTM6XHRcdFx0XHRicmVhaztcbiAyNTQ6XHRcdFx0fVxuIDI1NTpcdFxuIDI1NjpcdFx0XHRpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSlcbiAyNTc6XHRcdFx0XHRyZXR1cm47XG4gMjU4Olx0XG4gMjU5Olx0XHRcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgcGt0X3N0YXJ0ICYjNDM7IHBrdF9vZmZzZXQsIHBrdF9sZW4pO1xuIDI2MDpcdFx0XHRza2JfcHV0KHNrYiwgcGt0X2xlbik7XG4gMjYxOlx0XG4gMjYyOlx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgY2F0Yy1cdTAwM2VuZXRkZXYpO1xuIDI2MzpcdFx0XHRuZXRpZl9yeChza2IpO1xuIDI2NDpcdFxuIDI2NTpcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9wYWNrZXRzJiM0MzsmIzQzOztcbiAyNjY6XHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfYnl0ZXMgJiM0Mzs9IHBrdF9sZW47XG4gMjY3Olx0XG4gMjY4Olx0XHRcdC8qIEY1VTAxMSBvbmx5IGRvZXMgb25lIHBhY2tldCBwZXIgUlggKi9cbiAyNjk6XHRcdFx0aWYgKGNhdGMtXHUwMDNlaXNfZjV1MDExKVxuIDI3MDpcdFx0XHRcdGJyZWFrO1xuIDI3MTpcdFx0XHRwa3Rfc3RhcnQgJiM0Mzs9ICgoKHBrdF9sZW4gJiM0MzsgMSkgXHUwMDNlXHUwMDNlIDYpICYjNDM7IDEpIFx1MDAzY1x1MDAzYyA2O1xuIDI3MjpcdFxuIDI3MzpcdFx0fSB3aGlsZSAocGt0X3N0YXJ0IC0gKHU4ICopIHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXIgXHUwMDNjIHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoKTtcbiAyNzQ6XHRcbiAyNzU6XHRcdGlmIChjYXRjLVx1MDAzZWlzX2Y1dTAxMSkge1xuIDI3NjpcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2Y2F0Yy1cdTAwM2VyZWNxX3N6KSkge1xuIDI3NzpcdFx0XHRcdGludCBzdGF0ZTtcbiAyNzg6XHRcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmNhdGMtXHUwMDNlcmVjcV9zeik7XG4gMjc5Olx0XHRcdFx0bmV0ZGV2X2RiZyhjYXRjLVx1MDAzZW5ldGRldiwgXCYjMzQ7Z2V0dGluZyBleHRyYSBwYWNrZXRcXG5cJiMzNDspO1xuIDI4MDpcdFx0XHRcdHVyYi1cdTAwM2VkZXYgPSBjYXRjLVx1MDAzZXVzYmRldjtcbiAyODE6XHRcdFx0XHRpZiAoKHN0YXRlID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgXHUwMDNjIDApIHtcbiAyODI6XHRcdFx0XHRcdG5ldGRldl9kYmcoY2F0Yy1cdTAwM2VuZXRkZXYsXG4gMjgzOlx0XHRcdFx0XHRcdCAgIFwmIzM0O3N1Ym1pdChyeF91cmIpIHN0YXR1cyAlZFxcblwmIzM0Oywgc3RhdGUpO1xuIDI4NDpcdFx0XHRcdH1cbiAyODU6XHRcdFx0fSBlbHNlIHtcbiAyODY6XHRcdFx0XHRjbGVhcl9iaXQoUlhfUlVOTklORywgXHUwMDI2Y2F0Yy1cdTAwM2VmbGFncyk7XG4gMjg3Olx0XHRcdH1cbiAyODg6XHRcdH1cbiAyODk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgY2F0Yy5jYCBVU0IgRXRoZXJuZXQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjYXRjLmNgIGZpbGUsIGl0JiMzOTtzIHRoZSBVU0IgRXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgQ0FUQyBFTDEyMTBBIE5ldE1hdGUgYW5kIEJlbGtpbiBGNVUwMTEuIE5hdHVyYWxseSwgbXkgbWluZCBnb2VzIHRvIGZ1enppbmcgcG9zc2liaWxpdGllcy4gQ2FuIEkgYWN0dWFsbHkgZnV6eiBVU0IgZHJpdmVycyBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBUaGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBpcyB5ZXMhIFN5emthbGxlciBoYXMgVVNCIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMgdXNpbmcgYHJhdy1nYWRnZXRgIGFuZCB0aGUgRHVtbXkgSENELCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgL2Rldi9yYXctZ2FkZ2V0YCBhbmQgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIHN5c3RlbSBjYWxsLgoKVGhpcyBpcyBleGNlbGxlbnQgbmV3cyBiZWNhdXNlIFVTQiBkcml2ZXJzLCBlc3BlY2lhbGx5IG5ldHdvcmsgZHJpdmVycyBsaWtlIGBjYXRjYCwgYGNkY19ldGhlcmAsIGFuZCBgcjgxNTJgLCBhcmUgcHJhY3RpY2FsbHkgc3RhbmRhcmQgZnV6emluZyB0YXJnZXRzIGZvciBTeXprYWxsZXIuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIENBVEMgZHJpdmVyIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoaXMgVVNCIGVtdWxhdGlvbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbjogY2FuIFN5emthbGxlciBzdWNjZXNzZnVsbHkgY29ubmVjdCBhIENBVEMgVVNCIGRldmljZT8gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byB2ZXJpZnkuIFRvIG1ha2Ugc3VyZSwgSSBzaG91bGQgY2hlY2sgdGhlIFVTQiB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzIGZvciB0aGUgQ0FUQyBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2F0Y19pZF90YWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NhdGMuYz05NzI9c3RhdGljIHZvaWQgY2F0Y19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtOTkwLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo5OTE6c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNhdGNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtOTkyLVx0eyBVU0JfREVWSUNFKDB4MDQyMywgMHhhKSB9LFx0LyogQ0FUQyBOZXRtYXRlLCBCZWxraW4gRjVVMDExICovXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05OTctXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjk5ODpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2F0Y19pZF90YWJsZSk7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTk5OS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9MTAwMD1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2F0Y19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0xMDAzLVx0LmRpc2Nvbm5lY3QgPVx0Y2F0Y19kaXNjb25uZWN0LFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzoxMDA0Olx0LmlkX3RhYmxlID1cdGNhdGNfaWRfdGFibGUsXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTEwMDUtXHQuZGlzYWJsZV9odWJfaW5pdGlhdGVkX2xwbSA9IDEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYGNhdGNgIFVTQiBkcml2ZXIsIGFuZCBpbW1lZGlhdGVseSBJIHJlY29nbml6ZSB0aGF0IGBjYXRjYCBpcyBpbmRlZWQgYSBVU0IgZHJpdmVyLCBsaWtlbHkgZm9yIGEgbmV0d29yayBjYXJkIG9yIHNpbWlsYXIgZGV2aWNlLiBJIGtub3cgdGhhdCBTeXprYWxsZXIgaXMgYSBmYW50YXN0aWMgdG9vbCBmb3IgZmluZGluZyB0aGVzZSBraW5kcyBvZiBidWdzLiBJdCBvZnRlbiBmaW5kcyBpc3N1ZXMgaW4gVVNCIGRyaXZlcnMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbXBsZXRpb24gaGFuZGxlcnMgZm9yIHJlY2VpdmUgKFJYKSBhbmQgdHJhbnNtaXQgKFRYKSBVUkJzLCBhbmQgaW4gdGhlIHByb2JlIGhhbmRsZXJzLiBUaGVzZSBidWdzIG9mdGVuIGludm9sdmUgbWFsZm9ybWVkIFVTQiBkZXNjcmlwdG9ycyBvciBwYWNrZXRzIHRoYXQgYXJlIGludGVudGlvbmFsbHkgY3JhZnRlZCB0byB0cmlnZ2VyIHZ1bG5lcmFiaWxpdGllcy4KCk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgYGNhdGNfcnhfZG9uZWAgZnVuY3Rpb24gYmVjYXVzZSBpdOKAmXMgYSBjbGFzc2ljIHBsYWNlIHRvIGZpbmQgaXNzdWVzIOKAkyBpdCBoYW5kbGVzIHRoZSByZWNlaXZlZCBkYXRhLCBhbmQgdGhlIGNvZGUgc25pcHBldCBmb2N1c2VzIG9uIHZhbGlkYXRpbmcgcGFja2V0IGxlbmd0aHMuIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGlzc3VlIHNlZW1zIHRvIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgdHJpZ2dlcmVkIGJ5IGFuIGluY29ycmVjdCBjaGVjayBvZiB0aGUgcGFja2V0IGxlbmd0aCBhZ2FpbnN0IHRoZSByZWNlaXZlZCBkYXRhIGJ1ZmZlci4KClRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQgc2hvd2VkIGFuIGlzc3VlIHdpdGggaG93IGBwa3RfbGVuYCB3YXMgY2hlY2tlZCBhZ2FpbnN0IGB1cmItJmd0O2FjdHVhbF9sZW5ndGhgLiBCYXNpY2FsbHksIGlmIGBwa3RfbGVuYCAodGhlIGV4cGVjdGVkIHBhY2tldCBsZW5ndGgpIHdhcyBncmVhdGVyIHRoYW4gYHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aGAgKHRoZSBhY3R1YWwgZGF0YSByZWNlaXZlZCksIGl0IHdhcyBmbGFnZ2VkIGFzIGFuIGVycm9yLCBhbmQgdGhlIHBhY2tldCB3YXMgZHJvcHBlZC4gQnV0LCB0aGlzIGNoZWNrIHdhcyBub3QgZW50aXJlbHkgY29ycmVjdC4gVGhlIG5ldyBjb2RlIHNlZW1zIHRvIGFkZHJlc3MgdGhpcyBieSBjYWxjdWxhdGluZyBhIGByZW1haW5pbmdgIHZhbHVlIHRoYXQgaW5kaWNhdGVzIGhvdyBtdWNoIG9mIHRoZSBidWZmZXIgaXMgdW5yZWFkLiBUaGVuLCBpdCBjb3JyZWN0bHkgdmFsaWRhdGVzIGBwa3RfbGVuYCBhZ2FpbnN0IGByZW1haW5pbmdgLCBjb25zaWRlcmluZyBhbiBvZmZzZXQuCgpUaGUgY29uZGl0aW9uIGluIHRoZSBgaWZgIHN0YXRlbWVudCBub3cgY2hlY2tzIGlmIGByZW1haW5pbmcgJmx0OyBwa3Rfb2Zmc2V0YC4gYHBrdF9vZmZzZXRgIGlzIGEgdmFyaWFibGUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBwYWNrZXQgdGhhdCBpcyByZWFkIGZyb20gdGhlIFVTQiBidWZmZXIuIFRoZSBzZWNvbmQgY2hlY2sgZW5zdXJlcyB0aGF0IHRoZSBwYWNrZXQgaXMgb2Ygc3VmZmljaWVudCBsZW5ndGguIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGNoZWNrcyB0aGF0IHRoZSBwYWNrZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBFdGhlcm5ldCBoZWFkZXIgc2l6ZSBhbmQgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgYHJlbWFpbmluZ2AgbGVuZ3RoLiBUaGUgY29ycmVjdGVkIHZlcnNpb24gaGFzIGltcHJvdmVkIHNhZmV0eS4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCByZWFjaGFiaWxpdHkuIENhbiB0aGlzIGNvZGUgcGF0aCBiZSB0cmlnZ2VyZWQ/IEFic29sdXRlbHkuIEkga25vdyB0aGF0IFN5emthbGxlciBpcyBvZnRlbiB1c2VkIGluIHRoaXMgdmVyeSBjb250ZXh0IHZpYSB2aXJ0dWFsIFVTQiBnYWRnZXQgZW11bGF0aW9uIOKAkyBzcGVjaWZpY2FsbHkgdGhlIGByYXctZ2FkZ2V0YCBhbmQgYGR1bW15X2hjZGAgY29uZmlndXJhdGlvbnMuIFRoZXNlIGVtdWxhdGlvbnMgYWxsb3cgU3l6a2FsbGVyIHRvIGluamVjdCBjcmFmdGVkIFVSQiBkYXRhIGFuZCB0cmlnZ2VyIGNhbGxiYWNrcyBsaWtlIGBjYXRjX3J4X2RvbmVgLgoKVGhlIGZpbmFsIHN0ZXAgZm9yIG1lIHdvdWxkIGJlIHRvIGNvbmZpcm0gdGhhdCBgY2F0Y2AgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIGNhdGMgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGEgY29uZmlndXJhYmxlIG9wdGlvbiBhbmQgdGhhdCBpdCYjMzk7cyBsaWtlbHkgdG8gYmUgcHJlc2VudCBpbiB0aGUgdGFyZ2V0IGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfQ0FUQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTM9aWYgVVNCX05FVF9EUklWRVJTXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE1OmNvbmZpZyBVU0JfQ0FUQ1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDtVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIFVTQiBOZXR3b3JraW5nIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgVVNCIG5ldHdvcmtpbmcgZHJpdmVyLiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gY2hlY2sgb3V0IHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNS4gVGhhdCBzaG91bGQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0IHVucmF2ZWxpbmcgd2hhdCBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgdGhpcyB0byBmdW5jdGlvbiBwcm9wZXJseS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgY29ycmVjdGx5IGJlZm9yZSBJIHN0YXJ0IG1ha2luZyBhbnkgY2hhbmdlcywgZG9uJiMzOTt0IHdhbnQgdG8gYnJlYWsgYW55dGhpbmcgaW1wb3J0YW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbW1lbnQgXCYjMzQ7SG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XCYjMzQ7XG4gICA2Olx0XHRkZXBlbmRzIG9uICFVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAgNzpcdFxuICAgODpcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgTmV0d29yayBBZGFwdGVyc1wmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCBVU0IgaWYgVVNCXG4gIDExOlx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gIDEyOlx0XG4gIDEzOlx0aWYgVVNCX05FVF9EUklWRVJTXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIFVTQl9DQVRDXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcbiAgMjA6XHRcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcbiAgMjE6XHRcdCAgQmVsa2luIEY1VTAxMVxuICAyMjpcdFx0ICBCZWxraW4gRjVVMTExXG4gIDIzOlx0XHQgIENBVEMgTmV0TWF0ZVxuICAyNDpcdFx0ICBDQVRDIE5ldE1hdGUgSUlcbiAgMjU6XHRcdCAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDXG4gIDI2Olx0XG4gIDI3Olx0XHQgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsXG4gIDI4Olx0XHQgIHR5cGljYWxseSBvbiBldGgwLCBpZiBpdCBpcyB0aGUgb25seSBldGhlcm5ldCBkZXZpY2UsIG9yIHBlcmhhcHMgb25cbiAgMjk6XHRcdCAgZXRoMSwgaWYgeW91IGhhdmUgYSBQQ0kgb3IgSVNBIGV0aGVybmV0IGNhcmQgaW5zdGFsbGVkLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIFVTQl9LQVdFVEhcbiAgMzU6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBLTFNJIEtMNVVTQjEwMS1iYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAzNjpcdFx0aGVscFxuICAzNzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxuICAzODpcdFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcbiAgMzk6XHRcdCAgM0NvbSAzQzE5MjUwXG4gIDQwOlx0XHQgIEFEUyBVU0ItMTBCVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzA3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFVTQl9DQVRDIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgVVNCX0NBVENgIGNvbmZpZ3VyYXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBzZWUgdGhhdCBpdCYjMzk7cyByZWxpYW50IG9uIGBVU0JfTkVUX0RSSVZFUlNgLCB3aGljaCBpbiB0dXJuIGhpbmdlcyBvbiBib3RoIGBVU0JgIGFuZCBgTkVUYCBiZWluZyBlbmFibGVkLiBTZWVtcyBsb2dpY2FsLCBhIG5ldHdvcmstb3Zlci1VU0Igc2V0dXAsIHJpZ2h0PyBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGlmIHRoaXMgY29uZmlndXJhdGlvbiBoYXMgYW55IG90aGVyIGltcGxpY2F0aW9ucywgYnV0IHRob3NlIGxvb2sgdG8gYmUgdGhlIGNvcmUgZGVwZW5kZW5jaWVzLiBBbHNvIGBVU0JfQ0FUQ2Agc2VsZWN0cyBgQ1JDMzJgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZGF0YSBpbnRlZ3JpdHkgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBnb29kIHRoYXQgaXQmIzM5O3MgYSBkaXJlY3Qgc2VsZWN0aW9uOyBubyBzdXJwcmlzZXMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBicmluZyBpbiB0aGUgZnV6emluZyBjb25zaWRlcmF0aW9uLiBGb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucywgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IHNlZW1zIHRvIGFwcGx5IGJlY2F1c2UgdGhpcyBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEFuZCwgYXMgc3VzcGVjdGVkLCBgQ0FUQ2AgaXMgYWNjZXNzaWJsZSB2aWEgVVNCIGdhZGdldCwgc28gaXQgZml0cyB0aGUgJiMzNDtSZWFjaGFibGUgRHJpdmVycyYjMzQ7IGNyaXRlcmlhLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4KClJlZ2FyZGluZyBmdXp6aW5nIHRhcmdldHMsIHRoZSBpbnN0cnVjdGlvbnMgcG9pbnQgbWUgdG93YXJkcyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzOiBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgaW1wbGVtZW50IHRoZSBjb3JlIGxvZ2ljLiBJbiB0aGlzIGNhc2UsIGBjYXRjX3J4X2RvbmVgIHN0YW5kcyBvdXQuIE9rYXksIHNvIEkgc2hvdWxkIGxvb2sgaW50byBgY2F0Y19yeF9kb25lYC4gVHVybnMgb3V0LCBpdCYjMzk7cyBhbiBVUkIgY29tcGxldGlvbiBjYWxsYmFjaywgd2hpY2ggc3VnZ2VzdHMgaXRzIHJvbGUgaW4gZGF0YSByZWNlcHRpb24uIEkgc2hvdWxkIHJlYWxseSBjaGVjayB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHJlZmVyZW5jZWQgYmVjYXVzZSBpZiBpdCYjMzk7cyBhbiBVUkIgY29tcGxldGlvbiBjYWxsYmFjayBpdCBpcyBwcm9iYWJseSBub3QgZGlyZWN0bHkgY2FsbGVkIGJ1dCB3aWxsIGJlIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGFuIFVSQi4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5IGZvciBGdXp6aW5nLgoKTmV4dCwgSSYjMzk7bGwgYW5hbHl6ZSBgY2F0Yy5jYCBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBjYXRjX3J4X2RvbmVgIG9yIHJlbGF0ZWQgdG8gdGhlIFJYIHByb2Nlc3MuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2F0Y19yeF9kb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NhdGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2F0Yy5jPTE1Mz1zdHJ1Y3QgY2F0YyB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0yMTUtXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjIxNjpzdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0yMTcte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9Nzc4PXN0YXRpYyBpbnQgY2F0Y19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODYxLVx0dXNiX2ZpbGxfYnVsa191cmIoY2F0Yy1cdTAwM2VyeF91cmIsIHVzYmRldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYmRldiwgQ0FUQ19VU0JfRVBfQlVMSyksXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjg2MjpcdFx0XHQgIGNhdGMtXHUwMDNlcnhfYnVmLCBwa3RzeiwgY2F0Y19yeF9kb25lLCBjYXRjKTtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGNhdGNfcnhfZG9uZWAgVVJCIENvbXBsZXRpb24gSGFuZGxlcioqCgpPa2F5LCBzbyBgY2F0Y19yeF9kb25lYCBpcyB0aGUgVVJCIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgYHJ4X3VyYmAuIExldCYjMzk7cyBzZWUsIGZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCBpcywgZ2l2ZW4gdGhlIGBzdGF0aWMgdm9pZGAgZGVjbGFyYXRpb24uIEkgY2FuIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBpZiBpdCBoYXMgYSBzeW1ib2wuIEl0IGRvZXMsIHNvIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBpbmxpbmUuIEkmIzM5O20gc2VlaW5nIGZyb20gdGhlIHByb3ZpZGVkIGRpZmYgdGhhdCBgY2F0Y19yeF9kb25lYCBpcyBiZWluZyBtb2RpZmllZCwgYnV0IG5vdGhpbmcgZWxzZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBoYW5kbGluZyBwYWNrZXQgbGVuZ3RoIGNoZWNrcy4gSXQmIzM5O3MgbG9va2luZyBsaWtlIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXItcmVhZCBvciB1bmRlci1yZWFkIGlzc3VlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZWx5IGRvaW5nIGEgc2ltcGxlIGxlbmd0aCBjaGVjayBhbmQgbm93IHRoZXJlJiMzOTtzIGByZW1haW5pbmdgIGNoZWNrIHRvIGFjY291bnQgZm9yIHBrdF9vZmZzZXQgY2FsY3VsYXRpb24gd2l0aCBgcGt0X2xlbmAuIEl0IGFsc28gY2hlY2tzIGlmIHRoZSBwYWNrZXQgbGVuZ3RoIGlzIHdpdGhpbiBhY2NlcHRhYmxlIGJvdW5kcywgZXNwZWNpYWxseSBpbiB0aGUgYCFjYXRjLSZndDtpc19mNXUwMTFgIGNhc2UuIEl0IHNlZW1zIGxpa2UgdGhlIHByZXZpb3VzIGxvZ2ljIGhhZCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHRoZXJlIHRoYXQgaXMgYmVpbmcgYWRkcmVzc2VkLgoKVGhlIGNvZGUgc2VlbXMgdG8gaGFuZGxlIGEgc3BlY2lmaWMgY2FzZSBmb3IgYCFjYXRjLSZndDtpc19mNXUwMTFgLCB3aGljaCBsaWtlbHkgcmVwcmVzZW50cyBkaWZmZXJlbnQgcGFja2V0IHN0cnVjdHVyZXMuIEl0IGNhbGN1bGF0ZXMgdGhlIHJlbWFpbmluZyBhbW91bnQgb2YgZGF0YSBhZnRlciBgcGt0X29mZnNldGAgaXMgYXBwbGllZCBpbiB0aGUgYnVmZmVyIGFuZCBpdCB1c2VzIGBFVEhfSExFTmAuCgpMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaG93IGBjYXRjLm9gIGlzIGJ1aWx0IHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNvbnRleHQuIFRoaXMgd2lsbCBwcm9iYWJseSBwcm92aWRlIG1vcmUgY2x1ZXMgYWJvdXQgd2hhdCBgcGt0X29mZnNldGAgaXMuIEFsc28sIHRoZSBjb25maWd1cmF0aW9uIHN5bWJvbHMgKGBVU0JfQ0FUQ2AsIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCYCwgYE5FVGApIGFyZSByZWxldmFudC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzIHRvIGVuc3VyZSBhbGwgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LiBUaGlzIGNoYW5nZSBzZWVtcyByZWxhdGVkIHRvIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgcmVjZWl2ZSBwYXRoLCBsaWtlbHkgdG8gbWl0aWdhdGUgc29tZSBraW5kIG9mIGJ1ZmZlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cgdnVsbmVyYWJpbGl0eS4gSSBjYW4gcHJvYmFibHkgY29ycmVsYXRlIHRoaXMgd2l0aCBhIHJlcG9ydGVkIGJ1ZyBvciB2dWxuZXJhYmlsaXR5IHJlcG9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2F0YyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19VU0JfQ0FUQylcdFx0JiM0Mzs9IGNhdGMub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1VTQl9LQVdFVEgpXHQmIzQzOz0ga2F3ZXRoLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3MwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBidWlsZCBzeXN0ZW0uLi4KCioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgSW5jbHVzaW9uKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlYCBoZXJlLiBUaGUgbGluZSBgb2JqLSQoQ09ORklHX1VTQl9DQVRDKSAmIzQzOz0gY2F0Yy5vYCBpcyBjYXRjaGluZyBteSBleWUuIFNvLCB0aGUgYGNhdGMub2AgbW9kdWxlIGZvciB0aGUgQ0FUQyBVU0IgZXRoZXJuZXQgYWRhcHRlciBpcyBiZWluZyBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX1VTQl9DQVRDYCBLY29uZmlnIG9wdGlvbi4gQ2xhc3NpYy4gCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIEkgc2hvdWxkIGNoZWNrIGhvdyBgZHJpdmVycy9uZXQvdXNiYCBpdHNlbGYgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZC4gVGltZSB0byBwZWVrIGludG8gdGhlIG1haW4gYGRyaXZlcnMvbmV0L01ha2VmaWxlYCBhbmQgc2VlIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiBVU0IgbmV0d29yayBkcml2ZXJzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIGJhY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfWEVOX05FVERFVl9CQUNLRU5EKSAmIzQzOz0geGVuLW5ldGJhY2svXG5kcml2ZXJzL25ldC9NYWtlZmlsZS03OS1cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjgwOm9iai0kKENPTkZJR19VU0JfTkVUX0RSSVZFUlMpICYjNDM7PSB1c2IvXG5kcml2ZXJzL25ldC9NYWtlZmlsZS04MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyNAoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiAzMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIFVTQiBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIGBDT05GSUdfVVNCX05FVF9EUklWRVJTYCBhbmQgYENPTkZJR19VU0JfQ0FUQ2AuIEkgbmVlZCB0byBlbnN1cmUgVVNCIGhvc3QgYW5kIGVpdGhlciByYXcgZ2FkZ2V0IG9yIGBkdW1teV9oY2RgIGVtdWxhdGlvbiBhcmUgZW5hYmxlZC4gU3RhbmRhcmQga2VybmVscyB1c3VhbGx5IHRha2UgY2FyZSBvZiBgVVNCYCBhbmQgYE5FVGAsIHNvIHRob3NlIGFyZSBsaWtlbHkgY292ZXJlZC4gVG8gYmUgc3VyZSwgSSYjMzk7bGwgbGlzdCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOiBgVVNCX0NBVENgIGFuZCBgVVNCX05FVF9EUklWRVJTYC4KCk5vdywgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIFdvcnRoRnV6emluZyBhbmFseXNpcy4KCiogICAqKlJlYWNoYWJpbGl0eToqKiBUaGUgVVNCIGRyaXZlcnMsIHBhcnRpY3VsYXJseSB0aGUgYGNhdGNfcnhfZG9uZSgpYCBmdW5jdGlvbuKAlHRoZSBSWCBVUkIgY29tcGxldGlvbiBoYW5kbGVy4oCUYXJlIGVhc2lseSByZWFjaGFibGUgdGhyb3VnaCBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gVXNpbmcgZWl0aGVyIGBkdW1teV9oY2RgIG9yIHJhdyBnYWRnZXQgd2l0aGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgbWFrZXMgdGhpcyB0cml2aWFsLiBUaGUgbW9kaWZpY2F0aW9uIGZvY3VzZWQgb24gYWRkaW5nIGJvdW5kcyBjaGVja3Mgd2l0aGluIHRoaXMgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtYWxmb3JtZWQgcGFja2V0IHByb2Nlc3NpbmcsIHdpdGggdGhlIG5ldyBjaGVja3M6IGByZW1haW5pbmcgJmx0OyBwa3Rfb2Zmc2V0YCBhbmQgYHBrdF9sZW4gJmx0OyBFVEhfSExFTiB8fCBwa3RfbGVuICYjNDM7IHBrdF9vZmZzZXQgJmd0OyByZW1haW5pbmdgLiBUaGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgaW4gYSBkcml2ZXIgc3VwcG9ydGVkIGJ5IHZpcnR1YWwgZW11bGF0aW9uLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KKiAgICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCwgdGhlIHRhcmdldCBmdW5jdGlvbiBpcyBgWyYjMzQ7Y2F0Y19yeF9kb25lJiMzNDtdYC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQsIHRoZXNlIGFyZSB0aGUgY29uZmlncyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgaXQ6IGBbJiMzNDtVU0JfQ0FUQyYjMzQ7LCAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7XWAuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiwgYW5kIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIEl0JiMzOTtzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0NBVEMmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2F0Y19yeF9kb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGluIGNhdGNfcnhfZG9uZSgpIGluIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFJYIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChlLmcuIER1bW15IEhDRCAvIHJhdy1nYWRnZXQpLiBGdXp6aW5nIFVTQiBwYWNrZXQgcmVjZXB0aW9uIGNhbiB2ZXJpZnkgYm91bmRzIGNoZWNrcyBhbmQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBwYXJzaW5nIGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DQVRDJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NhdGNfcnhfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgbGVuZ3RoIHZhbGlkYXRpb24gYW5kIGJvdW5kcyBjaGVja2luZyBsb2dpYyBpbiBjYXRjX3J4X2RvbmUoKSBpbiBkcml2ZXJzL25ldC91c2IvY2F0Yy5jLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBSWCBVUkIgY29tcGxldGlvbiBoYW5kbGVyIGZvciB0aGUgQ0FUQyBVU0IgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZS5nLiBEdW1teSBIQ0QgLyByYXctZ2FkZ2V0KS4gRnV6emluZyBVU0IgcGFja2V0IHJlY2VwdGlvbiBjYW4gdmVyaWZ5IGJvdW5kcyBjaGVja3MgYW5kIHVuY292ZXIgcmVncmVzc2lvbnMgb3IgcGFyc2luZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJiMzOTtyZW1haW5pbmcmIzM5OykgYW5kIGVuc3VyZXMgdGhhdCBwa3Rfb2Zmc2V0IGJ5dGVzIGFyZSBhdmFpbGFibGUgYmVmb3JlIHJlYWRpbmcgdGhlIHBhY2tldCBsZW5ndGggaGVhZGVyLCBhbmQgdmVyaWZpZXMgdGhhdCBwa3RfbGVuIGlzIGF0IGxlYXN0IEVUSF9ITEVOIGFuZCBwa3RfbGVuICYjNDM7IHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgb24gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDRiODA0NmQ0ZjUwOTFjMzQxMzM4YzcxMjgyZjVkMDUyYTk1ZWVlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDAwOjI4OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKaW5kZXggOTZlODJmOTRlZGNmOC4uMzliNjc4ZjE3NWRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCkBAIC0yMzMsMTcgJiM0MzsyMzMsMjYgQEAgc3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYikKIAl9CiAKIAlkbyB7Ci0JCWlmKCFjYXRjLSZndDtpc19mNXUwMTEpIHsKLQkJCXBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiopcGt0X3N0YXJ0KTsKLQkJCWlmIChwa3RfbGVuICZndDsgdXJiLSZndDthY3R1YWxfbGVuZ3RoKSB7CiYjNDM7CQlpbnQgcmVtYWluaW5nID0gdXJiLSZndDthY3R1YWxfbGVuZ3RoIC0KJiM0MzsJCQkJKHBrdF9zdGFydCAtICh1OCAqKXVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyKTsKJiM0MzsKJiM0MzsJCWlmICghY2F0Yy0mZ3Q7aXNfZjV1MDExKSB7CiYjNDM7CQkJaWYgKHJlbWFpbmluZyAmbHQ7IHBrdF9vZmZzZXQpIHsKIAkJCQljYXRjLSZndDtuZXRkZXYtJmd0O3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7OwogCQkJCWNhdGMtJmd0O25ldGRldi0mZ3Q7c3RhdHMucnhfZXJyb3JzJiM0MzsmIzQzOzsKIAkJCQlicmVhazsKIAkJCX0KJiM0MzsJCQlwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilwa3Rfc3RhcnQpOwogCQl9IGVsc2UgewogCQkJcGt0X2xlbiA9IHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aDsKIAkJfQogCiYjNDM7CQlpZiAocGt0X2xlbiAmbHQ7IEVUSF9ITEVOIHx8IHBrdF9sZW4gJiM0MzsgcGt0X29mZnNldCAmZ3Q7IHJlbWFpbmluZykgewomIzQzOwkJCWNhdGMtJmd0O25ldGRldi0mZ3Q7c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQkJY2F0Yy0mZ3Q7bmV0ZGV2LSZndDtzdGF0cy5yeF9lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwogCQlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSkKIAkJCXJldHVybjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AgZm9yIEtNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSBzaG91bGQgcnVuIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIG9uIGEgcGF0Y2ggcmVsYXRlZCB0byBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUuIE15IGZpcnN0IHN0ZXAgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYsIG9mIGNvdXJzZSwgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIzMyBpbiBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eSBiZWluZyBtb2RpZmllZC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgY2hhbmNlIG9mIGZpZ3VyaW5nIG91dCBpZiBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyB3YXJyYW50ZWQ7IEkgbmVlZCB0byBsb29rIGZvciBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBmdXp6aW5nIGNhbiB1bmNvdmVyLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdCNkZWZpbmUgY2F0Y193cml0ZV9tZW1fYXN5bmMoY2F0YywgYWRkciwgYnVmLCBzaXplKVx0Y2F0Y19jdHJsX2FzeW5jKGNhdGMsIFVTQl9ESVJfT1VULCBXcml0ZU1lbSwgMCwgYWRkciwgYnVmLCBzaXplLCBOVUxMKVxuIDIxMTpcdFxuIDIxMjpcdC8qXG4gMjEzOlx0ICogUmVjZWl2ZSByb3V0aW5lcy5cbiAyMTQ6XHQgKi9cbiAyMTU6XHRcbiAyMTY6XHRzdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiKVxuIDIxNzpcdHtcbiAyMTg6XHRcdHN0cnVjdCBjYXRjICpjYXRjID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4gMjE5Olx0XHR1OCAqcGt0X3N0YXJ0ID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcjtcbiAyMjA6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMjIxOlx0XHRpbnQgcGt0X2xlbiwgcGt0X29mZnNldCA9IDA7XG4gMjIyOlx0XHRpbnQgc3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbiAyMjM6XHRcbiAyMjQ6XHRcdGlmICghY2F0Yy1cdTAwM2Vpc19mNXUwMTEpIHtcbiAyMjU6XHRcdFx0Y2xlYXJfYml0KFJYX1JVTk5JTkcsIFx1MDAyNmNhdGMtXHUwMDNlZmxhZ3MpO1xuIDIyNjpcdFx0XHRwa3Rfb2Zmc2V0ID0gMjtcbiAyMjc6XHRcdH1cbiAyMjg6XHRcbiAyMjk6XHRcdGlmIChzdGF0dXMpIHtcbiAyMzA6XHRcdFx0ZGV2X2RiZyhcdTAwMjZ1cmItXHUwMDNlZGV2LVx1MDAzZWRldiwgXCYjMzQ7cnhfZG9uZSwgc3RhdHVzICVkLCBsZW5ndGggJWRcXG5cJiMzNDssXG4gMjMxOlx0XHRcdFx0c3RhdHVzLCB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCk7XG4gMjMyOlx0XHRcdHJldHVybjtcbiAyMzM6XHRcdH1cbiAyMzQ6XHRcbiAyMzU6XHRcdGRvIHtcbiAyMzY6XHRcdFx0aW50IHJlbWFpbmluZyA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIC1cbiAyMzc6XHRcdFx0XHRcdChwa3Rfc3RhcnQgLSAodTggKil1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyKTtcbiAyMzg6XHRcbiAyMzk6XHRcdFx0aWYgKCFjYXRjLVx1MDAzZWlzX2Y1dTAxMSkge1xuIDI0MDpcdFx0XHRcdGlmIChyZW1haW5pbmcgXHUwMDNjIHBrdF9vZmZzZXQpIHtcbiAyNDE6XHRcdFx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7O1xuIDI0MjpcdFx0XHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfZXJyb3JzJiM0MzsmIzQzOztcbiAyNDM6XHRcdFx0XHRcdGJyZWFrO1xuIDI0NDpcdFx0XHRcdH1cbiAyNDU6XHRcdFx0XHRwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilwa3Rfc3RhcnQpO1xuIDI0NjpcdFx0XHR9IGVsc2Uge1xuIDI0NzpcdFx0XHRcdHBrdF9sZW4gPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiAyNDg6XHRcdFx0fVxuIDI0OTpcdFxuIDI1MDpcdFx0XHRpZiAocGt0X2xlbiBcdTAwM2MgRVRIX0hMRU4gfHwgcGt0X2xlbiAmIzQzOyBwa3Rfb2Zmc2V0IFx1MDAzZSByZW1haW5pbmcpIHtcbiAyNTE6XHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbiAyNTI6XHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9lcnJvcnMmIzQzOyYjNDM7O1xuIDI1MzpcdFx0XHRcdGJyZWFrO1xuIDI1NDpcdFx0XHR9XG4gMjU1Olx0XG4gMjU2Olx0XHRcdGlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKVxuIDI1NzpcdFx0XHRcdHJldHVybjtcbiAyNTg6XHRcbiAyNTk6XHRcdFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBwa3Rfc3RhcnQgJiM0MzsgcGt0X29mZnNldCwgcGt0X2xlbik7XG4gMjYwOlx0XHRcdHNrYl9wdXQoc2tiLCBwa3RfbGVuKTtcbiAyNjE6XHRcbiAyNjI6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBjYXRjLVx1MDAzZW5ldGRldik7XG4gMjYzOlx0XHRcdG5ldGlmX3J4KHNrYik7XG4gMjY0Olx0XG4gMjY1Olx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X3BhY2tldHMmIzQzOyYjNDM7O1xuIDI2NjpcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9ieXRlcyAmIzQzOz0gcGt0X2xlbjtcbiAyNjc6XHRcbiAyNjg6XHRcdFx0LyogRjVVMDExIG9ubHkgZG9lcyBvbmUgcGFja2V0IHBlciBSWCAqL1xuIDI2OTpcdFx0XHRpZiAoY2F0Yy1cdTAwM2Vpc19mNXUwMTEpXG4gMjcwOlx0XHRcdFx0YnJlYWs7XG4gMjcxOlx0XHRcdHBrdF9zdGFydCAmIzQzOz0gKCgocGt0X2xlbiAmIzQzOyAxKSBcdTAwM2VcdTAwM2UgNikgJiM0MzsgMSkgXHUwMDNjXHUwMDNjIDY7XG4gMjcyOlx0XG4gMjczOlx0XHR9IHdoaWxlIChwa3Rfc3RhcnQgLSAodTggKikgdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlciBcdTAwM2MgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuIDI3NDpcdFxuIDI3NTpcdFx0aWYgKGNhdGMtXHUwMDNlaXNfZjV1MDExKSB7XG4gMjc2Olx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZjYXRjLVx1MDAzZXJlY3Ffc3opKSB7XG4gMjc3Olx0XHRcdFx0aW50IHN0YXRlO1xuIDI3ODpcdFx0XHRcdGF0b21pY19kZWMoXHUwMDI2Y2F0Yy1cdTAwM2VyZWNxX3N6KTtcbiAyNzk6XHRcdFx0XHRuZXRkZXZfZGJnKGNhdGMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtnZXR0aW5nIGV4dHJhIHBhY2tldFxcblwmIzM0Oyk7XG4gMjgwOlx0XHRcdFx0dXJiLVx1MDAzZWRldiA9IGNhdGMtXHUwMDNldXNiZGV2O1xuIDI4MTpcdFx0XHRcdGlmICgoc3RhdGUgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSBcdTAwM2MgMCkge1xuIDI4MjpcdFx0XHRcdFx0bmV0ZGV2X2RiZyhjYXRjLVx1MDAzZW5ldGRldixcbiAyODM6XHRcdFx0XHRcdFx0ICAgXCYjMzQ7c3VibWl0KHJ4X3VyYikgc3RhdHVzICVkXFxuXCYjMzQ7LCBzdGF0ZSk7XG4gMjg0Olx0XHRcdFx0fVxuIDI4NTpcdFx0XHR9IGVsc2Uge1xuIDI4NjpcdFx0XHRcdGNsZWFyX2JpdChSWF9SVU5OSU5HLCBcdTAwMjZjYXRjLVx1MDAzZWZsYWdzKTtcbiAyODc6XHRcdFx0fVxuIDI4ODpcdFx0fVxuIDI4OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgYGNhdGNgIFVTQiBuZXR3b3JrIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG9yaWdpbmFsIGlzc3VlIGFuZCBob3cgdGhpcyBwcm9wb3NlZCBmaXggYWRkcmVzc2VzIGl0LiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBiZWZvcmUgYW5kIGFmdGVyIGNvZGUgaW4gdGhlIGBjYXRjX3J4X2RvbmVgIGZ1bmN0aW9uLgoKVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgbG9naWMgaGFzIGEgZmxhdy4gV2hlbiBgY2F0Yy0mZ3Q7aXNfZjV1MDExYCBpcyBmYWxzZSwgaXQgcmVhZHMgYSBwYWNrZXQgbGVuZ3RoIChgcGt0X2xlbmApIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVjZWl2ZWQgZGF0YS4gSG93ZXZlciwgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHdpdGggaG93IGl0IHZhbGlkYXRlcyB0aGlzIGxlbmd0aCBhZ2FpbnN0IHRoZSByZWNlaXZlZCBkYXRhIHNpemUgKGB1cmItJmd0O2FjdHVhbF9sZW5ndGhgKS4gQSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGNhbiBoYXBwZW4gd2l0aCBhIHNtYWxsIGB1cmItJmd0O2FjdHVhbF9sZW5ndGhgIGlmIGl0IGlzIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYF9fbGUxNmAgYmVpbmcgcmVhZCAodHdvIGJ5dGVzKSBkdXJpbmcgdGhlIGBsZTE2X3RvX2NwdXBgIGNhbGwsIHdoaWNoIHJlYWRzIHBhc3QgdGhlIGFsbG9jYXRlZCBidWZmZXIuIEFsc28gdGhlIGN1cnJlbnQgY2hlY2ssIGBwa3RfbGVuICZndDsgdXJiLSZndDthY3R1YWxfbGVuZ3RoYCBpc24mIzM5O3Qgc3VmZmljaWVudC4gSWYgYHBrdF9sZW4gJiM0MzsgcGt0X29mZnNldGAgY2FuIGV4Y2VlZCBgdXJiLSZndDthY3R1YWxfbGVuZ3RoYC4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHJlbWFpbmluZ2AgdmFyaWFibGUgdG8gYWRkcmVzcyB0aGlzIGFuZCBkb2VzIGEgYmV0dGVyIGpvYiBvZiBjaGVja2luZyB0aGUgcGFja2V0IGxlbmd0aCwgbm93LCB1c2luZyBgcmVtYWluaW5nYCwgaXQgaXMgc2FmZS4KCkZ1cnRoZXJtb3JlLCBldmVuIGlmIHRoZSBsZW5ndGggdmFsaWRhdGlvbiBwYXNzZXMsIHRoZSBgc2tiX2NvcHlfdG9fbGluZWFyX2RhdGFgIGZ1bmN0aW9uIGNvdWxkIHN0aWxsIGJlIHZ1bG5lcmFibGUuIEl0IGNvcGllcyBgcGt0X2xlbmAgYnl0ZXMgc3RhcnRpbmcgZnJvbSBgcGt0X3N0YXJ0ICYjNDM7IHBrdF9vZmZzZXRgLiBUaGUgb3JpZ2luYWwgY29kZSBkb2VzbiYjMzk7dCBlbnN1cmUgdGhhdCBgcGt0X3N0YXJ0ICYjNDM7IHBrdF9vZmZzZXQgJiM0MzsgcGt0X2xlbmAgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgYHVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyYCBvciB0aGUgYWN0dWFsIHJlY2VpdmVkIGRhdGEsIGFub3RoZXIgYnVmZmVyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuCgpJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgdXJiLSZndDt0cmFuc2Zlcl9idWZmZXJgIGlzIGFsbG9jYXRlZCBpbiB0aGUgYGNhdGMuY2AgZmlsZSB0byBjb21wbGV0ZWx5IGNvbmZpcm0gdGhpcyBhbmFseXNpcyBhbmQgaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4X3VyYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NhdGMuYz0xNTM9c3RydWN0IGNhdGMge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTg1LVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzoxODY6XHRzdHJ1Y3QgdXJiICp0eF91cmIsICpyeF91cmIsICppcnFfdXJiLCAqY3RybF91cmI7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTE4Ny1cbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTIxNj1zdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMjgyLVx0XHRcdFx0bmV0ZGV2X2RiZyhjYXRjLVx1MDAzZW5ldGRldixcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM6MjgzOlx0XHRcdFx0XHQgICBcJiMzNDtzdWJtaXQocnhfdXJiKSBzdGF0dXMgJWRcXG5cJiMzNDssIHN0YXRlKTtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMjg0LVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTI5MT1zdGF0aWMgdm9pZCBjYXRjX2lycV9kb25lKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTM0Mi1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM6MzQzOlx0XHRcdGNhdGMtXHUwMDNlcnhfdXJiLVx1MDAzZWRldiA9IGNhdGMtXHUwMDNldXNiZGV2O1xuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzozNDQ6XHRcdFx0aWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihjYXRjLVx1MDAzZXJ4X3VyYiwgR0ZQX0FUT01JQykpIFx1MDAzYyAwKSB7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTM0NS1cdFx0XHRcdGRldl9lcnIoXHUwMDI2Y2F0Yy1cdTAwM2V1c2JkZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzozNDY6XHRcdFx0XHRcdFwmIzM0O3N1Ym1pdChyeF91cmIpIHN0YXR1cyAlZFxcblwmIzM0OywgcmVzKTtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMzQ3LVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTc0Nj1zdGF0aWMgaW50IGNhdGNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtNzU0LVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo3NTU6XHR1c2Jfa2lsbF91cmIoY2F0Yy1cdTAwM2VyeF91cmIpO1xuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy03NTYtXHR1c2Jfa2lsbF91cmIoY2F0Yy1cdTAwM2V0eF91cmIpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9Nzc4PXN0YXRpYyBpbnQgY2F0Y19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODMzLVx0Y2F0Yy1cdTAwM2V0eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo4MzQ6XHRjYXRjLVx1MDAzZXJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTgzNS1cdGNhdGMtXHUwMDNlaXJxX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTgzNi1cdGlmICgoIWNhdGMtXHUwMDNlY3RybF91cmIpIHx8ICghY2F0Yy1cdTAwM2V0eF91cmIpIHx8XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjgzNzpcdCAgICAoIWNhdGMtXHUwMDNlcnhfdXJiKSB8fCAoIWNhdGMtXHUwMDNlaXJxX3VyYikpIHtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODM4LVx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtObyBmcmVlIHVyYnMgYXZhaWxhYmxlLlxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04NjAtXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjg2MTpcdHVzYl9maWxsX2J1bGtfdXJiKGNhdGMtXHUwMDNlcnhfdXJiLCB1c2JkZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JkZXYsIENBVENfVVNCX0VQX0JVTEspLFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04NjItXHRcdFx0ICBjYXRjLVx1MDAzZXJ4X2J1ZiwgcGt0c3osIGNhdGNfcnhfZG9uZSwgY2F0Yyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05NjItXHR1c2JfZnJlZV91cmIoY2F0Yy1cdTAwM2V0eF91cmIpO1xuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo5NjM6XHR1c2JfZnJlZV91cmIoY2F0Yy1cdTAwM2VyeF91cmIpO1xuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05NjQtXHR1c2JfZnJlZV91cmIoY2F0Yy1cdTAwM2VpcnFfdXJiKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTk3Mj1zdGF0aWMgdm9pZCBjYXRjX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05ODAtXHRcdHVzYl9mcmVlX3VyYihjYXRjLVx1MDAzZXR4X3VyYik7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjk4MTpcdFx0dXNiX2ZyZWVfdXJiKGNhdGMtXHUwMDNlcnhfdXJiKTtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtOTgyLVx0XHR1c2JfZnJlZV91cmIoY2F0Yy1cdTAwM2VpcnFfdXJiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFJlY2VpdmUgQnVmZmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY2F0Yy0mZ3Q7cnhfYnVmYC4gIFRoYXQmIzM5O3MgdGhlIHJlY2VpdmUgYnVmZmVyLCBjbGVhcmx5LiAgQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGJldHRlci4gIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBrbm93IGhvdyB0aGlzIHRoaW5nIGlzIGRlZmluZWQgYW5kLCBjcml0aWNhbGx5LCBob3cgYW5kIHdoZXJlIGl0JiMzOTtzIGFsbG9jYXRlZC4gIElzIGl0IGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYXJyYXk/IEEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlcj8gV2hhdCYjMzk7cyBpdHMgc2l6ZT8gV2hhdCYjMzk7cyBpdHMgbGlmZXRpbWU/IEFsbCB0aGVzZSBkZXRhaWxzIGFyZSBjcnVjaWFsLiBXaXRob3V0IGtub3dpbmcgaG93IHRoZSBtZW1vcnkgZm9yIGBjYXRjLSZndDtyeF9idWZgIGlzIG1hbmFnZWQsIEkgY2FuJiMzOTt0IHBvc3NpYmx5IHJlYXNvbiBlZmZlY3RpdmVseSBhYm91dCBpdHMgdXNhZ2UsIHBvdGVudGlhbCBmb3IgZXJyb3JzIChsaWtlIG92ZXJmbG93cyBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIGl0cyBlZmZpY2llbmN5LiAgVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgZGVmaW5pdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhfYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NhdGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2F0Yy5jPTE1Mz1zdHJ1Y3QgY2F0YyB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0xNjMtXHR1OCB0eF9idWZbMl1bVFhfTUFYX0JVUlNUICogKFBLVF9TWiAmIzQzOyAyKV07XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjE2NDpcdHU4IHJ4X2J1ZltSWF9NQVhfQlVSU1QgKiAoUEtUX1NaICYjNDM7IDIpXTtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTY1LVx0dTggaXJxX2J1ZlsyXTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTc3OD1zdGF0aWMgaW50IGNhdGNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTg2MS1cdHVzYl9maWxsX2J1bGtfdXJiKGNhdGMtXHUwMDNlcnhfdXJiLCB1c2JkZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JkZXYsIENBVENfVVNCX0VQX0JVTEspLFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo4NjI6XHRcdFx0ICBjYXRjLVx1MDAzZXJ4X2J1ZiwgcGt0c3osIGNhdGNfcnhfZG9uZSwgY2F0Yyk7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTg2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk3NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKlZlcmlmeWluZyBgY2F0Y2AgQWxsb2NhdGlvbiBpbiBQcm9iZSoqCgpPa2F5LCBzbyB0aGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBgc3RydWN0IGNhdGNgIGlzIGt6YWxsb2NhdGVkIGR1cmluZyB0aGUgcHJvYmUgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBzcGVjaWZpY3Mgb2YgKmhvdyogdGhpcyBhbGxvY2F0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgdGhlIGt6YWxsb2NhdGlvbiBwcm9jZXNzLiBUaGlzIGlzIGZ1bmRhbWVudGFsOyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBoZXJlIGNvdWxkIGxlYWQgdG8gY2FzY2FkaW5nIGlzc3Vlcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb25lIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NhdGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHJlcXVlc3QsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBjYXRjLmMgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiBsaW5lcyA3NzggdGhyb3VnaCA4MzAgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvY2F0Yy5jYC4gVGhpcyBzZWN0aW9uIGxpa2VseSBjb250YWlucyBzb21lIGNydWNpYWwgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBhZGFwdGVyIGRyaXZlciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0LiBJJiMzOTttIGd1ZXNzaW5nIGl0IGhhbmRsZXMgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIGRldmljZSYjMzk7cyBvcGVyYXRpb24sIG1heWJlIHBhY2tldCBoYW5kbGluZywgaW50ZXJydXB0IG1hbmFnZW1lbnQsIG9yIHBvdGVudGlhbGx5IGRldmljZSBpbml0aWFsaXphdGlvbiBvciBzaHV0ZG93biBzZXF1ZW5jZSwganVkZ2luZyBieSB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgbG9naWNhbCBmbG93IGFuZCB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkIHdpdGhpbiB0aGF0IHNlZ21lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyJiMzOTtzIHJlc3BvbnNpYmlsaXRpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGJ1Z3MgdGhhdCBtaWdodCBiZSBoaWRpbmcgd2l0aGluIHRoYXQgYmxvY2sgb2YgY29kZS4gVGhpcyBzZWdtZW50IGNvdWxkIHBvdGVudGlhbGx5IG9mZmVyIGluc2lnaHRzIGludG8gYXNwZWN0cyBzdWNoIGFzLCB0aGUgZHJpdmVy4oCZcyBhYmlsaXR5IHRvIGhhbmRsZSBkaWZmZXJlbnQgVVNCIHRyYW5zZmVyIHR5cGVzLCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsIG5ldHdvcmtpbmcgc3RhY2sgb3IgbWF5YmUgaXTigJlzIGFiaWxpdHkgdG8gaGFuZGxlIHRoZSBudWFuY2VzIG9mIHRoZSBDQVRDIGhhcmR3YXJlIGl0c2VsZi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIHRoaXMgc2VjdGlvbiBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2F0Yy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3Nzg6XHRzdGF0aWMgaW50IGNhdGNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbiA3Nzk6XHR7XG4gNzgwOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZpbnRmLVx1MDAzZWRldjtcbiA3ODE6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIDc4MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiA3ODM6XHRcdHN0cnVjdCBjYXRjICpjYXRjO1xuIDc4NDpcdFx0dTggYnJvYWRjYXN0W0VUSF9BTEVOXTtcbiA3ODU6XHRcdHU4ICptYWNidWY7XG4gNzg2Olx0XHRpbnQgcGt0c3osIHJldCA9IC1FTk9NRU07XG4gNzg3Olx0XHRzdGF0aWMgY29uc3QgdTggYnVsa19lcF9hZGRyW10gPSB7XG4gNzg4Olx0XHRcdENBVENfVVNCX0VQX0JVTEsgfCBVU0JfRElSX09VVCxcbiA3ODk6XHRcdFx0Q0FUQ19VU0JfRVBfQlVMSyB8IFVTQl9ESVJfSU4sXG4gNzkwOlx0XHRcdDB9O1xuIDc5MTpcdFx0c3RhdGljIGNvbnN0IHU4IGludF9lcF9hZGRyW10gPSB7XG4gNzkyOlx0XHRcdENBVENfVVNCX0VQX0lOVF9JTiB8IFVTQl9ESVJfSU4sXG4gNzkzOlx0XHRcdDB9O1xuIDc5NDpcdFxuIDc5NTpcdFx0bWFjYnVmID0ga21hbGxvYyhFVEhfQUxFTiwgR0ZQX0tFUk5FTCk7XG4gNzk2Olx0XHRpZiAoIW1hY2J1ZilcbiA3OTc6XHRcdFx0Z290byBlcnJvcjtcbiA3OTg6XHRcbiA3OTk6XHRcdGlmICh1c2Jfc2V0X2ludGVyZmFjZSh1c2JkZXYsXG4gODAwOlx0XHRcdFx0aW50Zi1cdTAwM2VhbHRzZXR0aW5nLVx1MDAzZWRlc2MuYkludGVyZmFjZU51bWJlciwgMSkpIHtcbiA4MDE6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0NhbiYjMzk7dCBzZXQgYWx0c2V0dGluZyAxLlxcblwmIzM0Oyk7XG4gODAyOlx0XHRcdHJldCA9IC1FSU87XG4gODAzOlx0XHRcdGdvdG8gZmFpbF9tZW07XG4gODA0Olx0XHR9XG4gODA1Olx0XG4gODA2Olx0XHQvKiBWZXJpZnkgdGhhdCBhbGwgcmVxdWlyZWQgZW5kcG9pbnRzIGFyZSBwcmVzZW50ICovXG4gODA3Olx0XHRpZiAoIXVzYl9jaGVja19idWxrX2VuZHBvaW50cyhpbnRmLCBidWxrX2VwX2FkZHIpIHx8XG4gODA4Olx0XHQgICAgIXVzYl9jaGVja19pbnRfZW5kcG9pbnRzKGludGYsIGludF9lcF9hZGRyKSkge1xuIDgwOTpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7TWlzc2luZyBvciBpbnZhbGlkIGVuZHBvaW50c1xcblwmIzM0Oyk7XG4gODEwOlx0XHRcdHJldCA9IC1FTk9ERVY7XG4gODExOlx0XHRcdGdvdG8gZmFpbF9tZW07XG4gODEyOlx0XHR9XG4gODEzOlx0XG4gODE0Olx0XHRuZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGNhdGMpKTtcbiA4MTU6XHRcdGlmICghbmV0ZGV2KVxuIDgxNjpcdFx0XHRnb3RvIGZhaWxfbWVtO1xuIDgxNzpcdFxuIDgxODpcdFx0Y2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gODE5Olx0XG4gODIwOlx0XHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmNhdGNfbmV0ZGV2X29wcztcbiA4MjE6XHRcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7XG4gODIyOlx0XHRuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZvcHM7XG4gODIzOlx0XG4gODI0Olx0XHRjYXRjLVx1MDAzZXVzYmRldiA9IHVzYmRldjtcbiA4MjU6XHRcdGNhdGMtXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xuIDgyNjpcdFxuIDgyNzpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y2F0Yy1cdTAwM2V0eF9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI3MQoJCQkJCQkJb3V0cHV0OiAyNTMKCQkJCQkJCXRob3VnaHRzOiAyMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBDQVRDIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdy4gVGhlIGBhbGxvY19ldGhlcmRldmAgZnVuY3Rpb24gdXNlcyBgYWxsb2NfbmV0ZGV2X21xc2Agd2hpY2gga3phbGxvY3MgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcHJpdmF0ZSBkYXRhLiBUaGF0IHBhcnQgaXMgcHJldHR5IHN0YW5kYXJkLiAgQ3J1Y2lhbGx5LCBgY2F0Yy0mZ3Q7cnhfYnVmYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBnb29kIGZvciBhdm9pZGluZyBzb21lIGlzc3Vlcy4gIFRoZSBVU0IgY29udHJvbGxlciBmaWxscyBgcnhfYnVmYCB3aXRoIGluY29taW5nIGRhdGEgdXAgdG8gYHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aGAuIFRoYXQgdmFyaWFibGUsIGB1cmItJmd0O2FjdHVhbF9sZW5ndGhgLCBpcyBrZXkgaGVyZS4KCk5vdywgZm9jdXNpbmcgb24gdGhlIHBhdGNoOiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdGhlIGBjYXRjX3J4X2RvbmVgIGZ1bmN0aW9uLCB3aGljaCBoYW5kbGVzIHJlY2VpdmVkIHBhY2tldHMuICBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBjaGVjaywgYGlmIChwa3RfbGVuICZndDsgdXJiLSZndDthY3R1YWxfbGVuZ3RoKWAsIHdoaWNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgbWVhbnQgdG8gcHJldmVudCByZWFkaW5nIGJleW9uZCB0aGUgcmVjZWl2ZWQgZGF0YS4gSG93ZXZlciwgdGhlcmUmIzM5O3MgYSBwcm9ibGVtLCBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIG9yIG92ZXJmbG93LCBjb3VsZCBvY2N1ciB3aXRoIHRoZSBwcmV2aW91cyBjaGVjay4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBgcmVtYWluaW5nYCB2YXJpYWJsZSB0byBjaGVjayBob3cgbXVjaCBkYXRhIGlzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyLiBUaGUgY3JpdGljYWwgY2hlY2sgbm93IGludm9sdmVzIHRoaXMgYHJlbWFpbmluZ2AgdmFyaWFibGUgY29tYmluZWQgd2l0aCB0aGUgYHBrdF9sZW5gIChwYWNrZXQgbGVuZ3RoKS4gIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIGFkZGl0aW9uYWwgY2hlY2tzOgoKMS4gIGBpZiAocmVtYWluaW5nICZsdDsgcGt0X29mZnNldClgOiBUaGlzIGF2b2lkcyByZWFkaW5nIHBhc3QgdGhlIGJ1ZmZlciB3aGVuIGNhbGN1bGF0aW5nIGBwa3RfbGVuYC4KMi4gYGlmIChwa3RfbGVuICZsdDsgRVRIX0hMRU4gfHwgcGt0X2xlbiAmIzQzOyBwa3Rfb2Zmc2V0ICZndDsgcmVtYWluaW5nKWA6IFRoaXMgbm93IGNoZWNrcyB0aGUgbWluaW11bSBwYWNrZXQgc2l6ZSBhbmQgZW5zdXJlcyB0aGF0IHRoZSBwYWNrZXQgbGVuZ3RoLCBwbHVzIGFueSBvZmZzZXQsIGRvZXMgbm90IGV4Y2VlZCB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlci4KClRoZSBlc3NlbmNlIG9mIHRoZSBmaXggaXMgdGhhdCBpdCBoYXJkZW5zIHRoZSBib3VuZHMgY2hlY2tzLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byBvdXQtb2YtYm91bmRzIHJlYWRzIGlmIHRoZSBgcGt0X2xlbmAgZmllbGQgd2FzIG1hbmlwdWxhdGVkLCBvciB0aGUgZGF0YSByZWNlaXZlZCB3YXMgY29ycnVwdC4gSXQgZGlkbiYjMzk7dCBhY2NvdW50IGZvciB0aGUgcG9zc2liaWxpdHkgb2YgYSBzbWFsbGVyLXRoYW4tZXhwZWN0ZWQgb3IgbWFsZm9ybWVkIHBhY2tldC4KClRoZSBwcmltYXJ5IGJ1ZyBiZWluZyBmaXhlZCBpcyBwcmVjaXNlbHkgYW4gKm91dC1vZi1ib3VuZHMgcmVhZCogaW4gdGhlIFVTQiB0cmFuc2ZlciBidWZmZXIsIHBvdGVudGlhbGx5IGNhdXNlZCBieSBjb3JydXB0ZWQgVVNCIHRyYW5zZmVyIGRhdGEuIFNwZWNpZmljYWxseSwgYGxlMTZfdG9fY3B1cGAgY291bGQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aGAgaWYgYHBrdF9zdGFydGAgd2FzIG5lYXIgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBvciB0aGUgb3ZlcmFsbCBwYWNrZXQgYHBrdF9sZW5gIGRpZCBub3QgYWNjb3VudCBmb3IgdGhlIHRvdGFsIGJ5dGVzIHdpdGhpbiBgdXJiLSZndDthY3R1YWxfbGVuZ3RoYC4KCk5vdywgZG9lcyB0aGlzIHBhdGNoICppbnRyb2R1Y2UqIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhhdCYjMzk7cyB0aGUgS01TQU4gcXVlc3Rpb24uICBMZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoZSBLTVNBTiBydWxlcyBhbmQgY29uZGl0aW9ucy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBJdCBkb2VzbiYjMzk7dCBhbGxvY2F0ZSBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gIEl0IGFjdHVhbGx5ICp0aWdodGVucyogYm91bmRzIGNoZWNrcy4gVGhlIG5ldyBib3VuZHMgY2hlY2tzIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIGEgcmVjZWl2ZWQgVVNCIHBhY2tldC4KCkNvbnNpZGVyaW5nIHRoZSBjb25kaXRpb25zIGZvciBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgOiBUaGlzIHBhdGNoIGRvZXMgbm90IG1vZGlmeSBvciBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIHJpc2tzLiBBbGwgdmFyaWFibGVzIGFuZCBkYXRhIGludm9sdmVkIGFyZSBpbml0aWFsaXplZDogYHJlbWFpbmluZ2AgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgcG9pbnRlciBzdWJ0cmFjdGlvbiwgYW5kIGBwa3RfbGVuYCBpcyBpbml0aWFsaXplZCB1c2luZyBlaXRoZXIgYSByZWFkIGZyb20gbWVtb3J5IG9yIHRoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIGJ1ZmZlci4gVGhlIGNvZGUgZW5zdXJlcyB0aGF0IHRoZSBieXRlcyBjb3BpZWQgaW50byB0aGUgc2tiLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgdGhlIGtlcm5lbCwgY29tZSBmcm9tIGluaXRpYWxpemVkIHJlY2VpdmVkIGRhdGEgd2l0aGluIGB1cmItJmd0O2FjdHVhbF9sZW5ndGhgLiAgVGhlIHBhdGNoIHByaW1hcmlseSBtaXRpZ2F0ZXMgKm91dC1vZi1ib3VuZHMgYWNjZXNzKiB2dWxuZXJhYmlsaXRpZXMsIHdoaWNoIGFyZSB3aGF0IEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gS01TQU4gaXMgZm9yIGRldGVjdGluZyAqcmVhZHMqIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiB3aWxsIGNhdGNoIGFueSBidWdzIGludHJvZHVjZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gIFRoZSBwcmltYXJ5IGdvYWwgb2YgdGhlIHBhdGNoIGlzIHRvIGltcGxlbWVudCBib3VuZHMgY2hlY2tzIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJiMzOTtyZW1haW5pbmcmIzM5OykgYW5kIGVuc3VyZXMgdGhhdCBwa3Rfb2Zmc2V0IGJ5dGVzIGFyZSBhdmFpbGFibGUgYmVmb3JlIHJlYWRpbmcgdGhlIHBhY2tldCBsZW5ndGggaGVhZGVyLCBhbmQgdmVyaWZpZXMgdGhhdCBwa3RfbGVuIGlzIGF0IGxlYXN0IEVUSF9ITEVOIGFuZCBwa3RfbGVuICYjNDM7IHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgb24gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJiMzOTtyZW1haW5pbmcmIzM5OykgYW5kIGVuc3VyZXMgdGhhdCBwa3Rfb2Zmc2V0IGJ5dGVzIGFyZSBhdmFpbGFibGUgYmVmb3JlIHJlYWRpbmcgdGhlIHBhY2tldCBsZW5ndGggaGVhZGVyLCBhbmQgdmVyaWZpZXMgdGhhdCBwa3RfbGVuIGlzIGF0IGxlYXN0IEVUSF9ITEVOIGFuZCBwa3RfbGVuICYjNDM7IHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgb24gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyODoyNi43NDA5MzExMDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI1MDgyOTk1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0NBVENcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNhdGNfcnhfZG9uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJ3JlbWFpbmluZycpIGFuZCBlbnN1cmVzIHRoYXQgcGt0X29mZnNldCBieXRlcyBhcmUgYXZhaWxhYmxlIGJlZm9yZSByZWFkaW5nIHRoZSBwYWNrZXQgbGVuZ3RoIGhlYWRlciwgYW5kIHZlcmlmaWVzIHRoYXQgcGt0X2xlbiBpcyBhdCBsZWFzdCBFVEhfSExFTiBhbmQgcGt0X2xlbiArIHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBvbiB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGluIGNhdGNfcnhfZG9uZSgpIGluIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFJYIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChlLmcuIER1bW15IEhDRCAvIHJhdy1nYWRnZXQpLiBGdXp6aW5nIFVTQiBwYWNrZXQgcmVjZXB0aW9uIGNhbiB2ZXJpZnkgYm91bmRzIGNoZWNrcyBhbmQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBwYXJzaW5nIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI4OjI2Ljc0MDkzNjMwN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMzEyMjMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0YjgwNDZkNGY1MDkxYzM0MTMzOGM3MTI4MmY1ZDA1MmE5NWVlZWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDA6Mjg6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcXG5pbmRleCA5NmU4MmY5NGVkY2Y4Li4zOWI2NzhmMTc1ZGQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jXFxuQEAgLTIzMywxNyArMjMzLDI2IEBAIHN0YXRpYyB2b2lkIGNhdGNfcnhfZG9uZShzdHJ1Y3QgdXJiICp1cmIpXFxuIFxcdH1cXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0aWYoIWNhdGMtXFx1MDAzZWlzX2Y1dTAxMSkge1xcbi1cXHRcXHRcXHRwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYqKXBrdF9zdGFydCk7XFxuLVxcdFxcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2UgdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoKSB7XFxuK1xcdFxcdGludCByZW1haW5pbmcgPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGggLVxcbitcXHRcXHRcXHRcXHQocGt0X3N0YXJ0IC0gKHU4ICopdXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXIpO1xcbitcXG4rXFx0XFx0aWYgKCFjYXRjLVxcdTAwM2Vpc19mNXUwMTEpIHtcXG4rXFx0XFx0XFx0aWYgKHJlbWFpbmluZyBcXHUwMDNjIHBrdF9vZmZzZXQpIHtcXG4gXFx0XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuIFxcdFxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKXBrdF9zdGFydCk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHBrdF9sZW4gPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGg7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2MgRVRIX0hMRU4gfHwgcGt0X2xlbiArIHBrdF9vZmZzZXQgXFx1MDAzZSByZW1haW5pbmcpIHtcXG4rXFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6Mjg6MjguMzY0Njk0OTg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Mjg0NjkwODM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfQ0FUQ1wiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2F0Y19yeF9kb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IGxlbmd0aCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgbG9naWMgaW4gY2F0Y19yeF9kb25lKCkgaW4gZHJpdmVycy9uZXQvdXNiL2NhdGMuYy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgUlggVVJCIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhlIENBVEMgVVNCIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gKGUuZy4gRHVtbXkgSENEIC8gcmF3LWdhZGdldCkuIEZ1enppbmcgVVNCIHBhY2tldCByZWNlcHRpb24gY2FuIHZlcmlmeSBib3VuZHMgY2hlY2tzIGFuZCB1bmNvdmVyIHJlZ3Jlc3Npb25zIG9yIHBhcnNpbmcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGI4MDQ2ZDRmNTA5MWMzNDEzMzhjNzEyODJmNWQwNTJhOTVlZWVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDA6Mjg6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuY1xuaW5kZXggOTZlODJmOTRlZGNmOC4uMzliNjc4ZjE3NWRkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcbkBAIC0yMzMsMTcgKzIzMywyNiBAQCBzdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiKVxuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZighY2F0Yy1cdTAwM2Vpc19mNXUwMTEpIHtcbi1cdFx0XHRwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYqKXBrdF9zdGFydCk7XG4tXHRcdFx0aWYgKHBrdF9sZW4gXHUwMDNlIHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoKSB7XG4rXHRcdGludCByZW1haW5pbmcgPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCAtXG4rXHRcdFx0XHQocGt0X3N0YXJ0IC0gKHU4ICopdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcik7XG4rXG4rXHRcdGlmICghY2F0Yy1cdTAwM2Vpc19mNXUwMTEpIHtcbitcdFx0XHRpZiAocmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0KSB7XG4gXHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XG4gXHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbitcdFx0XHRwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilwa3Rfc3RhcnQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHBrdF9sZW4gPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiBcdFx0fVxuIFxuK1x0XHRpZiAocGt0X2xlbiBcdTAwM2MgRVRIX0hMRU4gfHwgcGt0X2xlbiArIHBrdF9vZmZzZXQgXHUwMDNlIHJlbWFpbmluZykge1xuK1x0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcbitcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuIFx0XHRpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSlcbiBcdFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyODoyOC4zNjQ2OTY2ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODQ2NzMwNzU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENBVEMgVVNCIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBwb2ludGVkIHRvIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgQ0FUQyBVU0IgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBpbiBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGRpZmYgYW5kIHRoZSBmaWxlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFzIGNoYW5nZWQsIGFuZCB3aGF0IGl04oCZcyBpbnRlbmRlZCB0byBhY2NvbXBsaXNoLiBJIHNlZSB0aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgY2F0Y19yeF9kb25lYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGdldCBhIGJyb2FkZXIgdmlldyBhcm91bmQgbGluZSAyMzMgaW4gdGhhdCBmaWxlLiBJIGNhbiBxdWlja2x5IHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBnb29kIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3VzYi9jYXRjLmNgIGFuZCBiZWdpbiB0byByZWNvbnN0cnVjdCB0aGUgY2hhbmdlcyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI4OjU2LjgzMjAwNjg5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdCNkZWZpbmUgY2F0Y193cml0ZV9tZW1fYXN5bmMoY2F0YywgYWRkciwgYnVmLCBzaXplKVxcdGNhdGNfY3RybF9hc3luYyhjYXRjLCBVU0JfRElSX09VVCwgV3JpdGVNZW0sIDAsIGFkZHIsIGJ1Ziwgc2l6ZSwgTlVMTClcXG4gMjExOlxcdFxcbiAyMTI6XFx0LypcXG4gMjEzOlxcdCAqIFJlY2VpdmUgcm91dGluZXMuXFxuIDIxNDpcXHQgKi9cXG4gMjE1OlxcdFxcbiAyMTY6XFx0c3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYilcXG4gMjE3OlxcdHtcXG4gMjE4OlxcdFxcdHN0cnVjdCBjYXRjICpjYXRjID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbiAyMTk6XFx0XFx0dTggKnBrdF9zdGFydCA9IHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xcbiAyMjA6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMjIxOlxcdFxcdGludCBwa3RfbGVuLCBwa3Rfb2Zmc2V0ID0gMDtcXG4gMjIyOlxcdFxcdGludCBzdGF0dXMgPSB1cmItXFx1MDAzZXN0YXR1cztcXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0aWYgKCFjYXRjLVxcdTAwM2Vpc19mNXUwMTEpIHtcXG4gMjI1OlxcdFxcdFxcdGNsZWFyX2JpdChSWF9SVU5OSU5HLCBcXHUwMDI2Y2F0Yy1cXHUwMDNlZmxhZ3MpO1xcbiAyMjY6XFx0XFx0XFx0cGt0X29mZnNldCA9IDI7XFxuIDIyNzpcXHRcXHR9XFxuIDIyODpcXHRcXG4gMjI5OlxcdFxcdGlmIChzdGF0dXMpIHtcXG4gMjMwOlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnVyYi1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsIFxcXCJyeF9kb25lLCBzdGF0dXMgJWQsIGxlbmd0aCAlZFxcXFxuXFxcIixcXG4gMjMxOlxcdFxcdFxcdFxcdHN0YXR1cywgdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoKTtcXG4gMjMyOlxcdFxcdFxcdHJldHVybjtcXG4gMjMzOlxcdFxcdH1cXG4gMjM0OlxcdFxcbiAyMzU6XFx0XFx0ZG8ge1xcbiAyMzY6XFx0XFx0XFx0aW50IHJlbWFpbmluZyA9IHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCAtXFxuIDIzNzpcXHRcXHRcXHRcXHRcXHQocGt0X3N0YXJ0IC0gKHU4ICopdXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXIpO1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRcXHRpZiAoIWNhdGMtXFx1MDAzZWlzX2Y1dTAxMSkge1xcbiAyNDA6XFx0XFx0XFx0XFx0aWYgKHJlbWFpbmluZyBcXHUwMDNjIHBrdF9vZmZzZXQpIHtcXG4gMjQxOlxcdFxcdFxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xcbiAyNDI6XFx0XFx0XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcXG4gMjQzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNDQ6XFx0XFx0XFx0XFx0fVxcbiAyNDU6XFx0XFx0XFx0XFx0cGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopcGt0X3N0YXJ0KTtcXG4gMjQ2OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDI0NzpcXHRcXHRcXHRcXHRwa3RfbGVuID0gdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoO1xcbiAyNDg6XFx0XFx0XFx0fVxcbiAyNDk6XFx0XFxuIDI1MDpcXHRcXHRcXHRpZiAocGt0X2xlbiBcXHUwMDNjIEVUSF9ITEVOIHx8IHBrdF9sZW4gKyBwa3Rfb2Zmc2V0IFxcdTAwM2UgcmVtYWluaW5nKSB7XFxuIDI1MTpcXHRcXHRcXHRcXHRjYXRjLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcXG4gMjUyOlxcdFxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XFxuIDI1MzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjU0OlxcdFxcdFxcdH1cXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0XFx0aWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKSkpXFxuIDI1NzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDI1ODpcXHRcXG4gMjU5OlxcdFxcdFxcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgcGt0X3N0YXJ0ICsgcGt0X29mZnNldCwgcGt0X2xlbik7XFxuIDI2MDpcXHRcXHRcXHRza2JfcHV0KHNrYiwgcGt0X2xlbik7XFxuIDI2MTpcXHRcXG4gMjYyOlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGNhdGMtXFx1MDAzZW5ldGRldik7XFxuIDI2MzpcXHRcXHRcXHRuZXRpZl9yeChza2IpO1xcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRcXHRjYXRjLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnJ4X3BhY2tldHMrKztcXG4gMjY2OlxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjtcXG4gMjY3OlxcdFxcbiAyNjg6XFx0XFx0XFx0LyogRjVVMDExIG9ubHkgZG9lcyBvbmUgcGFja2V0IHBlciBSWCAqL1xcbiAyNjk6XFx0XFx0XFx0aWYgKGNhdGMtXFx1MDAzZWlzX2Y1dTAxMSlcXG4gMjcwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNzE6XFx0XFx0XFx0cGt0X3N0YXJ0ICs9ICgoKHBrdF9sZW4gKyAxKSBcXHUwMDNlXFx1MDAzZSA2KSArIDEpIFxcdTAwM2NcXHUwMDNjIDY7XFxuIDI3MjpcXHRcXG4gMjczOlxcdFxcdH0gd2hpbGUgKHBrdF9zdGFydCAtICh1OCAqKSB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlciBcXHUwMDNjIHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCk7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdGlmIChjYXRjLVxcdTAwM2Vpc19mNXUwMTEpIHtcXG4gMjc2OlxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2Y2F0Yy1cXHUwMDNlcmVjcV9zeikpIHtcXG4gMjc3OlxcdFxcdFxcdFxcdGludCBzdGF0ZTtcXG4gMjc4OlxcdFxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmNhdGMtXFx1MDAzZXJlY3Ffc3opO1xcbiAyNzk6XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhjYXRjLVxcdTAwM2VuZXRkZXYsIFxcXCJnZXR0aW5nIGV4dHJhIHBhY2tldFxcXFxuXFxcIik7XFxuIDI4MDpcXHRcXHRcXHRcXHR1cmItXFx1MDAzZWRldiA9IGNhdGMtXFx1MDAzZXVzYmRldjtcXG4gMjgxOlxcdFxcdFxcdFxcdGlmICgoc3RhdGUgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSBcXHUwMDNjIDApIHtcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdG5ldGRldl9kYmcoY2F0Yy1cXHUwMDNlbmV0ZGV2LFxcbiAyODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcInN1Ym1pdChyeF91cmIpIHN0YXR1cyAlZFxcXFxuXFxcIiwgc3RhdGUpO1xcbiAyODQ6XFx0XFx0XFx0XFx0fVxcbiAyODU6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjg2OlxcdFxcdFxcdFxcdGNsZWFyX2JpdChSWF9SVU5OSU5HLCBcXHUwMDI2Y2F0Yy1cXHUwMDNlZmxhZ3MpO1xcbiAyODc6XFx0XFx0XFx0fVxcbiAyODg6XFx0XFx0fVxcbiAyODk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyODo1Ni44MzIxMDM3ODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDMwMzI2ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGBjYXRjLmNgIFVTQiBFdGhlcm5ldCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjYXRjLmNgIGZpbGUsIGl0J3MgdGhlIFVTQiBFdGhlcm5ldCBkcml2ZXIgZm9yIHRoZSBDQVRDIEVMMTIxMEEgTmV0TWF0ZSBhbmQgQmVsa2luIEY1VTAxMS4gTmF0dXJhbGx5LCBteSBtaW5kIGdvZXMgdG8gZnV6emluZyBwb3NzaWJpbGl0aWVzLiBDYW4gSSBhY3R1YWxseSBmdXp6IFVTQiBkcml2ZXJzIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAsIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IFRoZSBhbnN3ZXIsIHRoYW5rZnVsbHksIGlzIHllcyEgU3l6a2FsbGVyIGhhcyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcyB1c2luZyBgcmF3LWdhZGdldGAgYW5kIHRoZSBEdW1teSBIQ0QsIHNwZWNpZmljYWxseSB0aHJvdWdoIGAvZGV2L3Jhdy1nYWRnZXRgIGFuZCB0aGUgYHN5el91c2JfY29ubmVjdGAgc3lzdGVtIGNhbGwuXG5cblRoaXMgaXMgZXhjZWxsZW50IG5ld3MgYmVjYXVzZSBVU0IgZHJpdmVycywgZXNwZWNpYWxseSBuZXR3b3JrIGRyaXZlcnMgbGlrZSBgY2F0Y2AsIGBjZGNfZXRoZXJgLCBhbmQgYHI4MTUyYCwgYXJlIHByYWN0aWNhbGx5IHN0YW5kYXJkIGZ1enppbmcgdGFyZ2V0cyBmb3IgU3l6a2FsbGVyLiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBDQVRDIGRyaXZlciBpcyBhY3R1YWxseSByZWFjaGFibGUgdGhyb3VnaCB0aGlzIFVTQiBlbXVsYXRpb24uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb246IGNhbiBTeXprYWxsZXIgc3VjY2Vzc2Z1bGx5IGNvbm5lY3QgYSBDQVRDIFVTQiBkZXZpY2U/IFRoYXQncyB3aGF0IEkgd2FudCB0byB2ZXJpZnkuIFRvIG1ha2Ugc3VyZSwgSSBzaG91bGQgY2hlY2sgdGhlIFVTQiB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzIGZvciB0aGUgQ0FUQyBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyODo1OS4yNjI0MzM3NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUzNzA4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYXRjX2lkX3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NhdGMuYz05NzI9c3RhdGljIHZvaWQgY2F0Y19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05OTAtXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo5OTE6c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNhdGNfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTk5Mi1cXHR7IFVTQl9ERVZJQ0UoMHgwNDIzLCAweGEpIH0sXFx0LyogQ0FUQyBOZXRtYXRlLCBCZWxraW4gRjVVMDExICovXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTk5Ny1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjk5ODpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2F0Y19pZF90YWJsZSk7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05OTktXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYz0xMDAwPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjYXRjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTAwMy1cXHQuZGlzY29ubmVjdCA9XFx0Y2F0Y19kaXNjb25uZWN0LFxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM6MTAwNDpcXHQuaWRfdGFibGUgPVxcdGNhdGNfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0xMDA1LVxcdC5kaXNhYmxlX2h1Yl9pbml0aWF0ZWRfbHBtID0gMSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6Mjg6NTkuMzEwOTc3MzYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTAwOTUzMjA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVU0IgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBjYXRjYCBVU0IgZHJpdmVyLCBhbmQgaW1tZWRpYXRlbHkgSSByZWNvZ25pemUgdGhhdCBgY2F0Y2AgaXMgaW5kZWVkIGEgVVNCIGRyaXZlciwgbGlrZWx5IGZvciBhIG5ldHdvcmsgY2FyZCBvciBzaW1pbGFyIGRldmljZS4gSSBrbm93IHRoYXQgU3l6a2FsbGVyIGlzIGEgZmFudGFzdGljIHRvb2wgZm9yIGZpbmRpbmcgdGhlc2Uga2luZHMgb2YgYnVncy4gSXQgb2Z0ZW4gZmluZHMgaXNzdWVzIGluIFVTQiBkcml2ZXJzLCBlc3BlY2lhbGx5IGluIHRoZSBjb21wbGV0aW9uIGhhbmRsZXJzIGZvciByZWNlaXZlIChSWCkgYW5kIHRyYW5zbWl0IChUWCkgVVJCcywgYW5kIGluIHRoZSBwcm9iZSBoYW5kbGVycy4gVGhlc2UgYnVncyBvZnRlbiBpbnZvbHZlIG1hbGZvcm1lZCBVU0IgZGVzY3JpcHRvcnMgb3IgcGFja2V0cyB0aGF0IGFyZSBpbnRlbnRpb25hbGx5IGNyYWZ0ZWQgdG8gdHJpZ2dlciB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgYGNhdGNfcnhfZG9uZWAgZnVuY3Rpb24gYmVjYXVzZSBpdOKAmXMgYSBjbGFzc2ljIHBsYWNlIHRvIGZpbmQgaXNzdWVzIOKAkyBpdCBoYW5kbGVzIHRoZSByZWNlaXZlZCBkYXRhLCBhbmQgdGhlIGNvZGUgc25pcHBldCBmb2N1c2VzIG9uIHZhbGlkYXRpbmcgcGFja2V0IGxlbmd0aHMuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgaXNzdWUgc2VlbXMgdG8gYmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCB0cmlnZ2VyZWQgYnkgYW4gaW5jb3JyZWN0IGNoZWNrIG9mIHRoZSBwYWNrZXQgbGVuZ3RoIGFnYWluc3QgdGhlIHJlY2VpdmVkIGRhdGEgYnVmZmVyLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0IHNob3dlZCBhbiBpc3N1ZSB3aXRoIGhvdyBgcGt0X2xlbmAgd2FzIGNoZWNrZWQgYWdhaW5zdCBgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGhgLiBCYXNpY2FsbHksIGlmIGBwa3RfbGVuYCAodGhlIGV4cGVjdGVkIHBhY2tldCBsZW5ndGgpIHdhcyBncmVhdGVyIHRoYW4gYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCAodGhlIGFjdHVhbCBkYXRhIHJlY2VpdmVkKSwgaXQgd2FzIGZsYWdnZWQgYXMgYW4gZXJyb3IsIGFuZCB0aGUgcGFja2V0IHdhcyBkcm9wcGVkLiBCdXQsIHRoaXMgY2hlY2sgd2FzIG5vdCBlbnRpcmVseSBjb3JyZWN0LiBUaGUgbmV3IGNvZGUgc2VlbXMgdG8gYWRkcmVzcyB0aGlzIGJ5IGNhbGN1bGF0aW5nIGEgYHJlbWFpbmluZ2AgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciBpcyB1bnJlYWQuIFRoZW4sIGl0IGNvcnJlY3RseSB2YWxpZGF0ZXMgYHBrdF9sZW5gIGFnYWluc3QgYHJlbWFpbmluZ2AsIGNvbnNpZGVyaW5nIGFuIG9mZnNldC5cblxuVGhlIGNvbmRpdGlvbiBpbiB0aGUgYGlmYCBzdGF0ZW1lbnQgbm93IGNoZWNrcyBpZiBgcmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0YC4gYHBrdF9vZmZzZXRgIGlzIGEgdmFyaWFibGUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBwYWNrZXQgdGhhdCBpcyByZWFkIGZyb20gdGhlIFVTQiBidWZmZXIuIFRoZSBzZWNvbmQgY2hlY2sgZW5zdXJlcyB0aGF0IHRoZSBwYWNrZXQgaXMgb2Ygc3VmZmljaWVudCBsZW5ndGguIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGNoZWNrcyB0aGF0IHRoZSBwYWNrZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBFdGhlcm5ldCBoZWFkZXIgc2l6ZSBhbmQgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgYHJlbWFpbmluZ2AgbGVuZ3RoLiBUaGUgY29ycmVjdGVkIHZlcnNpb24gaGFzIGltcHJvdmVkIHNhZmV0eS5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgcmVhY2hhYmlsaXR5LiBDYW4gdGhpcyBjb2RlIHBhdGggYmUgdHJpZ2dlcmVkPyBBYnNvbHV0ZWx5LiBJIGtub3cgdGhhdCBTeXprYWxsZXIgaXMgb2Z0ZW4gdXNlZCBpbiB0aGlzIHZlcnkgY29udGV4dCB2aWEgdmlydHVhbCBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiDigJMgc3BlY2lmaWNhbGx5IHRoZSBgcmF3LWdhZGdldGAgYW5kIGBkdW1teV9oY2RgIGNvbmZpZ3VyYXRpb25zLiBUaGVzZSBlbXVsYXRpb25zIGFsbG93IFN5emthbGxlciB0byBpbmplY3QgY3JhZnRlZCBVUkIgZGF0YSBhbmQgdHJpZ2dlciBjYWxsYmFja3MgbGlrZSBgY2F0Y19yeF9kb25lYC5cblxuVGhlIGZpbmFsIHN0ZXAgZm9yIG1lIHdvdWxkIGJlIHRvIGNvbmZpcm0gdGhhdCBgY2F0Y2AgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgY2F0YyB0byBtYWtlIHN1cmUgaXQncyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24gYW5kIHRoYXQgaXQncyBsaWtlbHkgdG8gYmUgcHJlc2VudCBpbiB0aGUgdGFyZ2V0IGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjA0LjMyMDUxMTQ2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA0MTc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0NBVENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMz1pZiBVU0JfTkVUX0RSSVZFUlNcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoxNTpjb25maWcgVVNCX0NBVENcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6Mjk6MDQuMzY4NTYwMjk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjExMDI3NzA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgVVNCIE5ldHdvcmtpbmcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIFVTQiBuZXR3b3JraW5nIGRyaXZlci4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGNoZWNrIG91dCB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTUuIFRoYXQgc2hvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydCB1bnJhdmVsaW5nIHdoYXQgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIHRoaXMgdG8gZnVuY3Rpb24gcHJvcGVybHkuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwIGNvcnJlY3RseSBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGNoYW5nZXMsIGRvbid0IHdhbnQgdG8gYnJlYWsgYW55dGhpbmcgaW1wb3J0YW50LiBMZXQncyBzZWUgd2hhdCBLY29uZmlnIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTowNi40Nzg4Mzk2OTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxcbiAgMjg6XFx0XFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXFxuICAyOTpcXHRcXHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDMyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBVU0JfS0FXRVRIXFxuICAzNTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxcbiAgMzg6XFx0XFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcXG4gIDM5OlxcdFxcdCAgM0NvbSAzQzE5MjUwXFxuICA0MDpcXHRcXHQgIEFEUyBVU0ItMTBCVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTowNi40Nzg5MTU3MDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU2NDI3Nzk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBVU0JfQ0FUQyBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBVU0JfQ0FUQ2AgY29uZmlndXJhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHNlZSB0aGF0IGl0J3MgcmVsaWFudCBvbiBgVVNCX05FVF9EUklWRVJTYCwgd2hpY2ggaW4gdHVybiBoaW5nZXMgb24gYm90aCBgVVNCYCBhbmQgYE5FVGAgYmVpbmcgZW5hYmxlZC4gU2VlbXMgbG9naWNhbCwgYSBuZXR3b3JrLW92ZXItVVNCIHNldHVwLCByaWdodD8gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyBvciBpZiB0aGlzIGNvbmZpZ3VyYXRpb24gaGFzIGFueSBvdGhlciBpbXBsaWNhdGlvbnMsIGJ1dCB0aG9zZSBsb29rIHRvIGJlIHRoZSBjb3JlIGRlcGVuZGVuY2llcy4gQWxzbyBgVVNCX0NBVENgIHNlbGVjdHMgYENSQzMyYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgY29udGV4dC4gSXQncyBnb29kIHRoYXQgaXQncyBhIGRpcmVjdCBzZWxlY3Rpb247IG5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCBsZXQncyBicmluZyBpbiB0aGUgZnV6emluZyBjb25zaWRlcmF0aW9uLiBGb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucywgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIHNlZW1zIHRvIGFwcGx5IGJlY2F1c2UgdGhpcyBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEFuZCwgYXMgc3VzcGVjdGVkLCBgQ0FUQ2AgaXMgYWNjZXNzaWJsZSB2aWEgVVNCIGdhZGdldCwgc28gaXQgZml0cyB0aGUgXCJSZWFjaGFibGUgRHJpdmVyc1wiIGNyaXRlcmlhLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG5SZWdhcmRpbmcgZnV6emluZyB0YXJnZXRzLCB0aGUgaW5zdHJ1Y3Rpb25zIHBvaW50IG1lIHRvd2FyZHMgc3BlY2lmaWMgZm9jdXMgc3ltYm9sczogZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkIG9yIGltcGxlbWVudCB0aGUgY29yZSBsb2dpYy4gSW4gdGhpcyBjYXNlLCBgY2F0Y19yeF9kb25lYCBzdGFuZHMgb3V0LiBPa2F5LCBzbyBJIHNob3VsZCBsb29rIGludG8gYGNhdGNfcnhfZG9uZWAuIFR1cm5zIG91dCwgaXQncyBhbiBVUkIgY29tcGxldGlvbiBjYWxsYmFjaywgd2hpY2ggc3VnZ2VzdHMgaXRzIHJvbGUgaW4gZGF0YSByZWNlcHRpb24uIEkgc2hvdWxkIHJlYWxseSBjaGVjayB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHJlZmVyZW5jZWQgYmVjYXVzZSBpZiBpdCdzIGFuIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrIGl0IGlzIHByb2JhYmx5IG5vdCBkaXJlY3RseSBjYWxsZWQgYnV0IHdpbGwgYmUgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYW4gVVJCLiBUaGlzIGlzIGltcG9ydGFudCB0byB2ZXJpZnkgZm9yIEZ1enppbmcuXG5cbk5leHQsIEknbGwgYW5hbHl6ZSBgY2F0Yy5jYCBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBjYXRjX3J4X2RvbmVgIG9yIHJlbGF0ZWQgdG8gdGhlIFJYIHByb2Nlc3MuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMwNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjEwLjA0MzE5NTk0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMjQ3OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2F0Y19yeF9kb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NhdGMuYz0xNTM9c3RydWN0IGNhdGMge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0yMTUtXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzoyMTY6c3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTIxNy17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTc3OD1zdGF0aWMgaW50IGNhdGNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODYxLVxcdHVzYl9maWxsX2J1bGtfdXJiKGNhdGMtXFx1MDAzZXJ4X3VyYiwgdXNiZGV2LCB1c2JfcmN2YnVsa3BpcGUodXNiZGV2LCBDQVRDX1VTQl9FUF9CVUxLKSxcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjg2MjpcXHRcXHRcXHQgIGNhdGMtXFx1MDAzZXJ4X2J1ZiwgcGt0c3osIGNhdGNfcnhfZG9uZSwgY2F0Yyk7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjEwLjA4OTUyNTU5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzcxNTI3MTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBjYXRjX3J4X2RvbmVgIFVSQiBDb21wbGV0aW9uIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBgY2F0Y19yeF9kb25lYCBpcyB0aGUgVVJCIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgYHJ4X3VyYmAuIExldCdzIHNlZSwgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQgaXMsIGdpdmVuIHRoZSBgc3RhdGljIHZvaWRgIGRlY2xhcmF0aW9uLiBJIGNhbiBjb25maXJtIHRoaXMgYnkgY2hlY2tpbmcgaWYgaXQgaGFzIGEgc3ltYm9sLiBJdCBkb2VzLCBzbyBpdCdzIG5vdCBhIHN0YXRpYyBpbmxpbmUuIEknbSBzZWVpbmcgZnJvbSB0aGUgcHJvdmlkZWQgZGlmZiB0aGF0IGBjYXRjX3J4X2RvbmVgIGlzIGJlaW5nIG1vZGlmaWVkLCBidXQgbm90aGluZyBlbHNlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGhhbmRsaW5nIHBhY2tldCBsZW5ndGggY2hlY2tzLiBJdCdzIGxvb2tpbmcgbGlrZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyLXJlYWQgb3IgdW5kZXItcmVhZCBpc3N1ZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGxpa2VseSBkb2luZyBhIHNpbXBsZSBsZW5ndGggY2hlY2sgYW5kIG5vdyB0aGVyZSdzIGByZW1haW5pbmdgIGNoZWNrIHRvIGFjY291bnQgZm9yIHBrdF9vZmZzZXQgY2FsY3VsYXRpb24gd2l0aCBgcGt0X2xlbmAuIEl0IGFsc28gY2hlY2tzIGlmIHRoZSBwYWNrZXQgbGVuZ3RoIGlzIHdpdGhpbiBhY2NlcHRhYmxlIGJvdW5kcywgZXNwZWNpYWxseSBpbiB0aGUgYCFjYXRjLVx1MDAzZWlzX2Y1dTAxMWAgY2FzZS4gSXQgc2VlbXMgbGlrZSB0aGUgcHJldmlvdXMgbG9naWMgaGFkIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgdGhlcmUgdGhhdCBpcyBiZWluZyBhZGRyZXNzZWQuXG5cblRoZSBjb2RlIHNlZW1zIHRvIGhhbmRsZSBhIHNwZWNpZmljIGNhc2UgZm9yIGAhY2F0Yy1cdTAwM2Vpc19mNXUwMTFgLCB3aGljaCBsaWtlbHkgcmVwcmVzZW50cyBkaWZmZXJlbnQgcGFja2V0IHN0cnVjdHVyZXMuIEl0IGNhbGN1bGF0ZXMgdGhlIHJlbWFpbmluZyBhbW91bnQgb2YgZGF0YSBhZnRlciBgcGt0X29mZnNldGAgaXMgYXBwbGllZCBpbiB0aGUgYnVmZmVyIGFuZCBpdCB1c2VzIGBFVEhfSExFTmAuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSBob3cgYGNhdGMub2AgaXMgYnVpbHQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udGV4dC4gVGhpcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgbW9yZSBjbHVlcyBhYm91dCB3aGF0IGBwa3Rfb2Zmc2V0YCBpcy4gQWxzbywgdGhlIGNvbmZpZ3VyYXRpb24gc3ltYm9scyAoYFVTQl9DQVRDYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBgTkVUYCkgYXJlIHJlbGV2YW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlcyB0byBlbnN1cmUgYWxsIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4gVGhpcyBjaGFuZ2Ugc2VlbXMgcmVsYXRlZCB0byBwYWNrZXQgbGVuZ3RoIHZhbGlkYXRpb24gaW4gdGhlIHJlY2VpdmUgcGF0aCwgbGlrZWx5IHRvIG1pdGlnYXRlIHNvbWUga2luZCBvZiBidWZmZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHZ1bG5lcmFiaWxpdHkuIEkgY2FuIHByb2JhYmx5IGNvcnJlbGF0ZSB0aGlzIHdpdGggYSByZXBvcnRlZCBidWcgb3IgdnVsbmVyYWJpbGl0eSByZXBvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6Mjk6MzMuODA0ODAwMjIxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU1NjgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYXRjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVVNCX0NBVEMpXFx0XFx0Kz0gY2F0Yy5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1VTQl9LQVdFVEgpXFx0Kz0ga2F3ZXRoLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6Mjk6MzMuODUxMzYzODkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5MzUzMzEzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgYnVpbGQgc3lzdGVtLi4uXG5cbioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgSW5jbHVzaW9uKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZWAgaGVyZS4gVGhlIGxpbmUgYG9iai0kKENPTkZJR19VU0JfQ0FUQykgKz0gY2F0Yy5vYCBpcyBjYXRjaGluZyBteSBleWUuIFNvLCB0aGUgYGNhdGMub2AgbW9kdWxlIGZvciB0aGUgQ0FUQyBVU0IgZXRoZXJuZXQgYWRhcHRlciBpcyBiZWluZyBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX1VTQl9DQVRDYCBLY29uZmlnIG9wdGlvbi4gQ2xhc3NpYy4gXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gSSBzaG91bGQgY2hlY2sgaG93IGBkcml2ZXJzL25ldC91c2JgIGl0c2VsZiBpcyBicm91Z2h0IGludG8gdGhlIGJ1aWxkLiBUaW1lIHRvIHBlZWsgaW50byB0aGUgbWFpbiBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIGFuZCBzZWUgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIFVTQiBuZXR3b3JrIGRyaXZlcnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGhlbHAgbWUgdHJhY2UgYmFjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NzMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTozNS43ODY2OTk1NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzgzMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfWEVOX05FVERFVl9CQUNLRU5EKSArPSB4ZW4tbmV0YmFjay9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS03OS1cXG5kcml2ZXJzL25ldC9NYWtlZmlsZTo4MDpvYmotJChDT05GSUdfVVNCX05FVF9EUklWRVJTKSArPSB1c2IvXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjM1LjgzNjA4OTM4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjkzNzgxMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdvcnRoRnV6emluZyBVU0IgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBhcmUgYENPTkZJR19VU0JfTkVUX0RSSVZFUlNgIGFuZCBgQ09ORklHX1VTQl9DQVRDYC4gSSBuZWVkIHRvIGVuc3VyZSBVU0IgaG9zdCBhbmQgZWl0aGVyIHJhdyBnYWRnZXQgb3IgYGR1bW15X2hjZGAgZW11bGF0aW9uIGFyZSBlbmFibGVkLiBTdGFuZGFyZCBrZXJuZWxzIHVzdWFsbHkgdGFrZSBjYXJlIG9mIGBVU0JgIGFuZCBgTkVUYCwgc28gdGhvc2UgYXJlIGxpa2VseSBjb3ZlcmVkLiBUbyBiZSBzdXJlLCBJJ2xsIGxpc3QgdGhlIGtleSBjb25maWd1cmF0aW9uczogYFVTQl9DQVRDYCBhbmQgYFVTQl9ORVRfRFJJVkVSU2AuXG5cbk5vdywgbGV0J3MgZXhhbWluZSB0aGUgV29ydGhGdXp6aW5nIGFuYWx5c2lzLlxuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogVGhlIFVTQiBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgdGhlIGBjYXRjX3J4X2RvbmUoKWAgZnVuY3Rpb27igJR0aGUgUlggVVJCIGNvbXBsZXRpb24gaGFuZGxlcuKAlGFyZSBlYXNpbHkgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBlbXVsYXRpb24uIFVzaW5nIGVpdGhlciBgZHVtbXlfaGNkYCBvciByYXcgZ2FkZ2V0IHdpdGhpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG1ha2VzIHRoaXMgdHJpdmlhbC4gVGhlIG1vZGlmaWNhdGlvbiBmb2N1c2VkIG9uIGFkZGluZyBib3VuZHMgY2hlY2tzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgbWFsZm9ybWVkIHBhY2tldCBwcm9jZXNzaW5nLCB3aXRoIHRoZSBuZXcgY2hlY2tzOiBgcmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0YCBhbmQgYHBrdF9sZW4gXHUwMDNjIEVUSF9ITEVOIHx8IHBrdF9sZW4gKyBwa3Rfb2Zmc2V0IFx1MDAzZSByZW1haW5pbmdgLiBUaGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgaW4gYSBkcml2ZXIgc3VwcG9ydGVkIGJ5IHZpcnR1YWwgZW11bGF0aW9uLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBDb25maXJtZWQsIHRoZSB0YXJnZXQgZnVuY3Rpb24gaXMgYFtcImNhdGNfcnhfZG9uZVwiXWAuXG4qICAgKipFbmFibGVDb25maWdzOioqIENvbmZpcm1lZCwgdGhlc2UgYXJlIHRoZSBjb25maWdzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciBpdDogYFtcIlVTQl9DQVRDXCIsIFwiVVNCX05FVF9EUklWRVJTXCJdYC5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24sIGFuZCBldmVyeXRoaW5nIGlzIGluIG9yZGVyLiBJdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODI0LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTo0MS4xMjk4NzMzMDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTcyNTA1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0NBVENcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNhdGNfcnhfZG9uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGluIGNhdGNfcnhfZG9uZSgpIGluIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFJYIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChlLmcuIER1bW15IEhDRCAvIHJhdy1nYWRnZXQpLiBGdXp6aW5nIFVTQiBwYWNrZXQgcmVjZXB0aW9uIGNhbiB2ZXJpZnkgYm91bmRzIGNoZWNrcyBhbmQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBwYXJzaW5nIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0NBVENcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNhdGNfcnhfZG9uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGluIGNhdGNfcnhfZG9uZSgpIGluIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFJYIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChlLmcuIER1bW15IEhDRCAvIHJhdy1nYWRnZXQpLiBGdXp6aW5nIFVTQiBwYWNrZXQgcmVjZXB0aW9uIGNhbiB2ZXJpZnkgYm91bmRzIGNoZWNrcyBhbmQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBwYXJzaW5nIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjQxLjIxMTYwNzc2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMzc2MTMwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTo0MS4yMTIxNTMyMjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODAzNzA2MzQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJ3JlbWFpbmluZycpIGFuZCBlbnN1cmVzIHRoYXQgcGt0X29mZnNldCBieXRlcyBhcmUgYXZhaWxhYmxlIGJlZm9yZSByZWFkaW5nIHRoZSBwYWNrZXQgbGVuZ3RoIGhlYWRlciwgYW5kIHZlcmlmaWVzIHRoYXQgcGt0X2xlbiBpcyBhdCBsZWFzdCBFVEhfSExFTiBhbmQgcGt0X2xlbiArIHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBvbiB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0YjgwNDZkNGY1MDkxYzM0MTMzOGM3MTI4MmY1ZDA1MmE5NWVlZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMDoyODoyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jXG5pbmRleCA5NmU4MmY5NGVkY2Y4Li4zOWI2NzhmMTc1ZGQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuY1xuQEAgLTIzMywxNyArMjMzLDI2IEBAIHN0YXRpYyB2b2lkIGNhdGNfcnhfZG9uZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmKCFjYXRjLVx1MDAzZWlzX2Y1dTAxMSkge1xuLVx0XHRcdHBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiopcGt0X3N0YXJ0KTtcbi1cdFx0XHRpZiAocGt0X2xlbiBcdTAwM2UgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpIHtcbitcdFx0aW50IHJlbWFpbmluZyA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIC1cbitcdFx0XHRcdChwa3Rfc3RhcnQgLSAodTggKil1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyKTtcbitcbitcdFx0aWYgKCFjYXRjLVx1MDAzZWlzX2Y1dTAxMSkge1xuK1x0XHRcdGlmIChyZW1haW5pbmcgXHUwMDNjIHBrdF9vZmZzZXQpIHtcbiBcdFx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcbiBcdFx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycysrO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuK1x0XHRcdHBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKXBrdF9zdGFydCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cGt0X2xlbiA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChwa3RfbGVuIFx1MDAzYyBFVEhfSExFTiB8fCBwa3RfbGVuICsgcGt0X29mZnNldCBcdTAwM2UgcmVtYWluaW5nKSB7XG4rXHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xuK1x0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycysrO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4gXHRcdGlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKVxuIFx0XHRcdHJldHVybjtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjQxLjIxMjE1NDI1MloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDMwMzIzNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AgZm9yIEtNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIHNob3VsZCBydW4gYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb24gYSBwYXRjaCByZWxhdGVkIHRvIGBkcml2ZXJzL25ldC91c2IvY2F0Yy5jYC4gUmlnaHQsIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZS4gTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZiwgb2YgY291cnNlLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGJlaW5nIGNoYW5nZWQuIFRoZW4sIEknbGwgbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIzMyBpbiBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eSBiZWluZyBtb2RpZmllZC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgY2hhbmNlIG9mIGZpZ3VyaW5nIG91dCBpZiBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyB3YXJyYW50ZWQ7IEkgbmVlZCB0byBsb29rIGZvciBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBmdXp6aW5nIGNhbiB1bmNvdmVyLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjQ3LjY0MjQ5NjEwOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NhdGMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0I2RlZmluZSBjYXRjX3dyaXRlX21lbV9hc3luYyhjYXRjLCBhZGRyLCBidWYsIHNpemUpXFx0Y2F0Y19jdHJsX2FzeW5jKGNhdGMsIFVTQl9ESVJfT1VULCBXcml0ZU1lbSwgMCwgYWRkciwgYnVmLCBzaXplLCBOVUxMKVxcbiAyMTE6XFx0XFxuIDIxMjpcXHQvKlxcbiAyMTM6XFx0ICogUmVjZWl2ZSByb3V0aW5lcy5cXG4gMjE0OlxcdCAqL1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRzdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiKVxcbiAyMTc6XFx0e1xcbiAyMTg6XFx0XFx0c3RydWN0IGNhdGMgKmNhdGMgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuIDIxOTpcXHRcXHR1OCAqcGt0X3N0YXJ0ID0gdXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXI7XFxuIDIyMDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAyMjE6XFx0XFx0aW50IHBrdF9sZW4sIHBrdF9vZmZzZXQgPSAwO1xcbiAyMjI6XFx0XFx0aW50IHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAoIWNhdGMtXFx1MDAzZWlzX2Y1dTAxMSkge1xcbiAyMjU6XFx0XFx0XFx0Y2xlYXJfYml0KFJYX1JVTk5JTkcsIFxcdTAwMjZjYXRjLVxcdTAwM2VmbGFncyk7XFxuIDIyNjpcXHRcXHRcXHRwa3Rfb2Zmc2V0ID0gMjtcXG4gMjI3OlxcdFxcdH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0aWYgKHN0YXR1cykge1xcbiAyMzA6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2dXJiLVxcdTAwM2VkZXYtXFx1MDAzZWRldiwgXFxcInJ4X2RvbmUsIHN0YXR1cyAlZCwgbGVuZ3RoICVkXFxcXG5cXFwiLFxcbiAyMzE6XFx0XFx0XFx0XFx0c3RhdHVzLCB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGgpO1xcbiAyMzI6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMzM6XFx0XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHRkbyB7XFxuIDIzNjpcXHRcXHRcXHRpbnQgcmVtYWluaW5nID0gdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoIC1cXG4gMjM3OlxcdFxcdFxcdFxcdFxcdChwa3Rfc3RhcnQgLSAodTggKil1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlcik7XFxuIDIzODpcXHRcXG4gMjM5OlxcdFxcdFxcdGlmICghY2F0Yy1cXHUwMDNlaXNfZjV1MDExKSB7XFxuIDI0MDpcXHRcXHRcXHRcXHRpZiAocmVtYWluaW5nIFxcdTAwM2MgcGt0X29mZnNldCkge1xcbiAyNDE6XFx0XFx0XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuIDI0MjpcXHRcXHRcXHRcXHRcXHRjYXRjLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnJ4X2Vycm9ycysrO1xcbiAyNDM6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI0NDpcXHRcXHRcXHRcXHR9XFxuIDI0NTpcXHRcXHRcXHRcXHRwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilwa3Rfc3RhcnQpO1xcbiAyNDY6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjQ3OlxcdFxcdFxcdFxcdHBrdF9sZW4gPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGg7XFxuIDI0ODpcXHRcXHRcXHR9XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2MgRVRIX0hMRU4gfHwgcGt0X2xlbiArIHBrdF9vZmZzZXQgXFx1MDAzZSByZW1haW5pbmcpIHtcXG4gMjUxOlxcdFxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xcbiAyNTI6XFx0XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcXG4gMjUzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNTQ6XFx0XFx0XFx0fVxcbiAyNTU6XFx0XFxuIDI1NjpcXHRcXHRcXHRpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSlcXG4gMjU3OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0XFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBwa3Rfc3RhcnQgKyBwa3Rfb2Zmc2V0LCBwa3RfbGVuKTtcXG4gMjYwOlxcdFxcdFxcdHNrYl9wdXQoc2tiLCBwa3RfbGVuKTtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgY2F0Yy1cXHUwMDNlbmV0ZGV2KTtcXG4gMjYzOlxcdFxcdFxcdG5ldGlmX3J4KHNrYik7XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfcGFja2V0cysrO1xcbiAyNjY6XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRcXHQvKiBGNVUwMTEgb25seSBkb2VzIG9uZSBwYWNrZXQgcGVyIFJYICovXFxuIDI2OTpcXHRcXHRcXHRpZiAoY2F0Yy1cXHUwMDNlaXNfZjV1MDExKVxcbiAyNzA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI3MTpcXHRcXHRcXHRwa3Rfc3RhcnQgKz0gKCgocGt0X2xlbiArIDEpIFxcdTAwM2VcXHUwMDNlIDYpICsgMSkgXFx1MDAzY1xcdTAwM2MgNjtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0fSB3aGlsZSAocGt0X3N0YXJ0IC0gKHU4ICopIHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyIFxcdTAwM2MgdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoKTtcXG4gMjc0OlxcdFxcbiAyNzU6XFx0XFx0aWYgKGNhdGMtXFx1MDAzZWlzX2Y1dTAxMSkge1xcbiAyNzY6XFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZjYXRjLVxcdTAwM2VyZWNxX3N6KSkge1xcbiAyNzc6XFx0XFx0XFx0XFx0aW50IHN0YXRlO1xcbiAyNzg6XFx0XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2Y2F0Yy1cXHUwMDNlcmVjcV9zeik7XFxuIDI3OTpcXHRcXHRcXHRcXHRuZXRkZXZfZGJnKGNhdGMtXFx1MDAzZW5ldGRldiwgXFxcImdldHRpbmcgZXh0cmEgcGFja2V0XFxcXG5cXFwiKTtcXG4gMjgwOlxcdFxcdFxcdFxcdHVyYi1cXHUwMDNlZGV2ID0gY2F0Yy1cXHUwMDNldXNiZGV2O1xcbiAyODE6XFx0XFx0XFx0XFx0aWYgKChzdGF0ZSA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpIFxcdTAwM2MgMCkge1xcbiAyODI6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhjYXRjLVxcdTAwM2VuZXRkZXYsXFxuIDI4MzpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwic3VibWl0KHJ4X3VyYikgc3RhdHVzICVkXFxcXG5cXFwiLCBzdGF0ZSk7XFxuIDI4NDpcXHRcXHRcXHRcXHR9XFxuIDI4NTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyODY6XFx0XFx0XFx0XFx0Y2xlYXJfYml0KFJYX1JVTk5JTkcsIFxcdTAwMjZjYXRjLVxcdTAwM2VmbGFncyk7XFxuIDI4NzpcXHRcXHRcXHR9XFxuIDI4ODpcXHRcXHR9XFxuIDI4OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjQ3LjY0MjYyMzE3OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDIyODMxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgYGNhdGNgIFVTQiBuZXR3b3JrIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG9yaWdpbmFsIGlzc3VlIGFuZCBob3cgdGhpcyBwcm9wb3NlZCBmaXggYWRkcmVzc2VzIGl0LiBGaXJzdCwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgY29kZSBpbiB0aGUgYGNhdGNfcnhfZG9uZWAgZnVuY3Rpb24uXG5cblRoZSBvcmlnaW5hbCBjb2RlJ3MgbG9naWMgaGFzIGEgZmxhdy4gV2hlbiBgY2F0Yy1cdTAwM2Vpc19mNXUwMTFgIGlzIGZhbHNlLCBpdCByZWFkcyBhIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWNlaXZlZCBkYXRhLiBIb3dldmVyLCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGhvdyBpdCB2YWxpZGF0ZXMgdGhpcyBsZW5ndGggYWdhaW5zdCB0aGUgcmVjZWl2ZWQgZGF0YSBzaXplIChgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGhgKS4gQSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGNhbiBoYXBwZW4gd2l0aCBhIHNtYWxsIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAgaWYgaXQgaXMgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSBgX19sZTE2YCBiZWluZyByZWFkICh0d28gYnl0ZXMpIGR1cmluZyB0aGUgYGxlMTZfdG9fY3B1cGAgY2FsbCwgd2hpY2ggcmVhZHMgcGFzdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gQWxzbyB0aGUgY3VycmVudCBjaGVjaywgYHBrdF9sZW4gXHUwMDNlIHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCBpc24ndCBzdWZmaWNpZW50LiBJZiBgcGt0X2xlbiArIHBrdF9vZmZzZXRgIGNhbiBleGNlZWQgYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYC5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgcmVtYWluaW5nYCB2YXJpYWJsZSB0byBhZGRyZXNzIHRoaXMgYW5kIGRvZXMgYSBiZXR0ZXIgam9iIG9mIGNoZWNraW5nIHRoZSBwYWNrZXQgbGVuZ3RoLCBub3csIHVzaW5nIGByZW1haW5pbmdgLCBpdCBpcyBzYWZlLlxuXG5GdXJ0aGVybW9yZSwgZXZlbiBpZiB0aGUgbGVuZ3RoIHZhbGlkYXRpb24gcGFzc2VzLCB0aGUgYHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhYCBmdW5jdGlvbiBjb3VsZCBzdGlsbCBiZSB2dWxuZXJhYmxlLiBJdCBjb3BpZXMgYHBrdF9sZW5gIGJ5dGVzIHN0YXJ0aW5nIGZyb20gYHBrdF9zdGFydCArIHBrdF9vZmZzZXRgLiBUaGUgb3JpZ2luYWwgY29kZSBkb2Vzbid0IGVuc3VyZSB0aGF0IGBwa3Rfc3RhcnQgKyBwa3Rfb2Zmc2V0ICsgcGt0X2xlbmAgZG9lc24ndCBleGNlZWQgdGhlIGJvdW5kcyBvZiBgdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcmAgb3IgdGhlIGFjdHVhbCByZWNlaXZlZCBkYXRhLCBhbm90aGVyIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcmAgaXMgYWxsb2NhdGVkIGluIHRoZSBgY2F0Yy5jYCBmaWxlIHRvIGNvbXBsZXRlbHkgY29uZmlybSB0aGlzIGFuYWx5c2lzIGFuZCBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjUyLjY2NTQ1NjYxOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MDYzMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhfdXJiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NhdGMuYz0xNTM9c3RydWN0IGNhdGMge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0xODUtXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzoxODY6XFx0c3RydWN0IHVyYiAqdHhfdXJiLCAqcnhfdXJiLCAqaXJxX3VyYiwgKmN0cmxfdXJiO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYz0yMTY9c3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMjgyLVxcdFxcdFxcdFxcdG5ldGRldl9kYmcoY2F0Yy1cXHUwMDNlbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM6MjgzOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJzdWJtaXQocnhfdXJiKSBzdGF0dXMgJWRcXFxcblxcXCIsIHN0YXRlKTtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTI4NC1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTI5MT1zdGF0aWMgdm9pZCBjYXRjX2lycV9kb25lKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMzQyLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzozNDM6XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlcnhfdXJiLVxcdTAwM2VkZXYgPSBjYXRjLVxcdTAwM2V1c2JkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzozNDQ6XFx0XFx0XFx0aWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihjYXRjLVxcdTAwM2VyeF91cmIsIEdGUF9BVE9NSUMpKSBcXHUwMDNjIDApIHtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTM0NS1cXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZjYXRjLVxcdTAwM2V1c2JkZXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjM0NjpcXHRcXHRcXHRcXHRcXHRcXFwic3VibWl0KHJ4X3VyYikgc3RhdHVzICVkXFxcXG5cXFwiLCByZXMpO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMzQ3LVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9NzQ2PXN0YXRpYyBpbnQgY2F0Y19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTc1NC1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjc1NTpcXHR1c2Jfa2lsbF91cmIoY2F0Yy1cXHUwMDNlcnhfdXJiKTtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTc1Ni1cXHR1c2Jfa2lsbF91cmIoY2F0Yy1cXHUwMDNldHhfdXJiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9Nzc4PXN0YXRpYyBpbnQgY2F0Y19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04MzMtXFx0Y2F0Yy1cXHUwMDNldHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjgzNDpcXHRjYXRjLVxcdTAwM2VyeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODM1LVxcdGNhdGMtXFx1MDAzZWlycV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODM2LVxcdGlmICgoIWNhdGMtXFx1MDAzZWN0cmxfdXJiKSB8fCAoIWNhdGMtXFx1MDAzZXR4X3VyYikgfHxcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjgzNzpcXHQgICAgKCFjYXRjLVxcdTAwM2VyeF91cmIpIHx8ICghY2F0Yy1cXHUwMDNlaXJxX3VyYikpIHtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTgzOC1cXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlLlxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTg2MC1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjg2MTpcXHR1c2JfZmlsbF9idWxrX3VyYihjYXRjLVxcdTAwM2VyeF91cmIsIHVzYmRldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYmRldiwgQ0FUQ19VU0JfRVBfQlVMSyksXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04NjItXFx0XFx0XFx0ICBjYXRjLVxcdTAwM2VyeF9idWYsIHBrdHN6LCBjYXRjX3J4X2RvbmUsIGNhdGMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05NjItXFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZXR4X3VyYik7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo5NjM6XFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZXJ4X3VyYik7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05NjQtXFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZWlycV91cmIpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYz05NzI9c3RhdGljIHZvaWQgY2F0Y19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05ODAtXFx0XFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZXR4X3VyYik7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo5ODE6XFx0XFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZXJ4X3VyYik7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05ODItXFx0XFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZWlycV91cmIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTo1Mi43MTUxNzA1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDc2MjExMTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgUmVjZWl2ZSBCdWZmZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgY2F0Yy1cdTAwM2VyeF9idWZgLiAgVGhhdCdzIHRoZSByZWNlaXZlIGJ1ZmZlciwgY2xlYXJseS4gIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBiZXR0ZXIuICBJIGltbWVkaWF0ZWx5IG5lZWQgdG8ga25vdyBob3cgdGhpcyB0aGluZyBpcyBkZWZpbmVkIGFuZCwgY3JpdGljYWxseSwgaG93IGFuZCB3aGVyZSBpdCdzIGFsbG9jYXRlZC4gIElzIGl0IGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYXJyYXk/IEEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlcj8gV2hhdCdzIGl0cyBzaXplPyBXaGF0J3MgaXRzIGxpZmV0aW1lPyBBbGwgdGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbC4gV2l0aG91dCBrbm93aW5nIGhvdyB0aGUgbWVtb3J5IGZvciBgY2F0Yy1cdTAwM2VyeF9idWZgIGlzIG1hbmFnZWQsIEkgY2FuJ3QgcG9zc2libHkgcmVhc29uIGVmZmVjdGl2ZWx5IGFib3V0IGl0cyB1c2FnZSwgcG90ZW50aWFsIGZvciBlcnJvcnMgKGxpa2Ugb3ZlcmZsb3dzIG9yIHVzZS1hZnRlci1mcmVlKSwgb3IgaXRzIGVmZmljaWVuY3kuICBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIHRoZSBkZWZpbml0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDU2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6MzA6MDcuNDc3Mjg1MjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODEwMzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4X2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvY2F0Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9MTUzPXN0cnVjdCBjYXRjIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTYzLVxcdHU4IHR4X2J1ZlsyXVtUWF9NQVhfQlVSU1QgKiAoUEtUX1NaICsgMildO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM6MTY0OlxcdHU4IHJ4X2J1ZltSWF9NQVhfQlVSU1QgKiAoUEtUX1NaICsgMildO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTY1LVxcdHU4IGlycV9idWZbMl07XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTc3OD1zdGF0aWMgaW50IGNhdGNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODYxLVxcdHVzYl9maWxsX2J1bGtfdXJiKGNhdGMtXFx1MDAzZXJ4X3VyYiwgdXNiZGV2LCB1c2JfcmN2YnVsa3BpcGUodXNiZGV2LCBDQVRDX1VTQl9FUF9CVUxLKSxcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjg2MjpcXHRcXHRcXHQgIGNhdGMtXFx1MDAzZXJ4X2J1ZiwgcGt0c3osIGNhdGNfcnhfZG9uZSwgY2F0Yyk7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjMwOjA3LjUyNTEwMTM3M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODAyMTM4MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipWZXJpZnlpbmcgYGNhdGNgIEFsbG9jYXRpb24gaW4gUHJvYmUqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBgc3RydWN0IGNhdGNgIGlzIGt6YWxsb2NhdGVkIGR1cmluZyB0aGUgcHJvYmUgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBzcGVjaWZpY3Mgb2YgKmhvdyogdGhpcyBhbGxvY2F0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgdGhlIGt6YWxsb2NhdGlvbiBwcm9jZXNzLiBUaGlzIGlzIGZ1bmRhbWVudGFsOyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBoZXJlIGNvdWxkIGxlYWQgdG8gY2FzY2FkaW5nIGlzc3Vlcy4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgZG9uZSBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDozMDoxMi4zMjcyNDMxMDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDUxNDUzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjMwOjEyLjM3MzMwNjQyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MzM3ODUzNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBjYXRjLmMgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiBsaW5lcyA3NzggdGhyb3VnaCA4MzAgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvY2F0Yy5jYC4gVGhpcyBzZWN0aW9uIGxpa2VseSBjb250YWlucyBzb21lIGNydWNpYWwgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBhZGFwdGVyIGRyaXZlciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0LiBJJ20gZ3Vlc3NpbmcgaXQgaGFuZGxlcyBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgZGV2aWNlJ3Mgb3BlcmF0aW9uLCBtYXliZSBwYWNrZXQgaGFuZGxpbmcsIGludGVycnVwdCBtYW5hZ2VtZW50LCBvciBwb3RlbnRpYWxseSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gb3Igc2h1dGRvd24gc2VxdWVuY2UsIGp1ZGdpbmcgYnkgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGxvZ2ljYWwgZmxvdyBhbmQgdGhlIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCB3aXRoaW4gdGhhdCBzZWdtZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXRpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgYnVncyB0aGF0IG1pZ2h0IGJlIGhpZGluZyB3aXRoaW4gdGhhdCBibG9jayBvZiBjb2RlLiBUaGlzIHNlZ21lbnQgY291bGQgcG90ZW50aWFsbHkgb2ZmZXIgaW5zaWdodHMgaW50byBhc3BlY3RzIHN1Y2ggYXMsIHRoZSBkcml2ZXLigJlzIGFiaWxpdHkgdG8gaGFuZGxlIGRpZmZlcmVudCBVU0IgdHJhbnNmZXIgdHlwZXMsIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwgbmV0d29ya2luZyBzdGFjayBvciBtYXliZSBpdOKAmXMgYWJpbGl0eSB0byBoYW5kbGUgdGhlIG51YW5jZXMgb2YgdGhlIENBVEMgaGFyZHdhcmUgaXRzZWxmLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGlzIHNlY3Rpb24gaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDozMDoxNy43MTExNjIyNzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NhdGMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3Nzg6XFx0c3RhdGljIGludCBjYXRjX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuIDc3OTpcXHR7XFxuIDc4MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2aW50Zi1cXHUwMDNlZGV2O1xcbiA3ODE6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIDc4MjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbiA3ODM6XFx0XFx0c3RydWN0IGNhdGMgKmNhdGM7XFxuIDc4NDpcXHRcXHR1OCBicm9hZGNhc3RbRVRIX0FMRU5dO1xcbiA3ODU6XFx0XFx0dTggKm1hY2J1ZjtcXG4gNzg2OlxcdFxcdGludCBwa3RzeiwgcmV0ID0gLUVOT01FTTtcXG4gNzg3OlxcdFxcdHN0YXRpYyBjb25zdCB1OCBidWxrX2VwX2FkZHJbXSA9IHtcXG4gNzg4OlxcdFxcdFxcdENBVENfVVNCX0VQX0JVTEsgfCBVU0JfRElSX09VVCxcXG4gNzg5OlxcdFxcdFxcdENBVENfVVNCX0VQX0JVTEsgfCBVU0JfRElSX0lOLFxcbiA3OTA6XFx0XFx0XFx0MH07XFxuIDc5MTpcXHRcXHRzdGF0aWMgY29uc3QgdTggaW50X2VwX2FkZHJbXSA9IHtcXG4gNzkyOlxcdFxcdFxcdENBVENfVVNCX0VQX0lOVF9JTiB8IFVTQl9ESVJfSU4sXFxuIDc5MzpcXHRcXHRcXHQwfTtcXG4gNzk0OlxcdFxcbiA3OTU6XFx0XFx0bWFjYnVmID0ga21hbGxvYyhFVEhfQUxFTiwgR0ZQX0tFUk5FTCk7XFxuIDc5NjpcXHRcXHRpZiAoIW1hY2J1ZilcXG4gNzk3OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDc5ODpcXHRcXG4gNzk5OlxcdFxcdGlmICh1c2Jfc2V0X2ludGVyZmFjZSh1c2JkZXYsXFxuIDgwMDpcXHRcXHRcXHRcXHRpbnRmLVxcdTAwM2VhbHRzZXR0aW5nLVxcdTAwM2VkZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDEpKSB7XFxuIDgwMTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkNhbid0IHNldCBhbHRzZXR0aW5nIDEuXFxcXG5cXFwiKTtcXG4gODAyOlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDgwMzpcXHRcXHRcXHRnb3RvIGZhaWxfbWVtO1xcbiA4MDQ6XFx0XFx0fVxcbiA4MDU6XFx0XFxuIDgwNjpcXHRcXHQvKiBWZXJpZnkgdGhhdCBhbGwgcmVxdWlyZWQgZW5kcG9pbnRzIGFyZSBwcmVzZW50ICovXFxuIDgwNzpcXHRcXHRpZiAoIXVzYl9jaGVja19idWxrX2VuZHBvaW50cyhpbnRmLCBidWxrX2VwX2FkZHIpIHx8XFxuIDgwODpcXHRcXHQgICAgIXVzYl9jaGVja19pbnRfZW5kcG9pbnRzKGludGYsIGludF9lcF9hZGRyKSkge1xcbiA4MDk6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJNaXNzaW5nIG9yIGludmFsaWQgZW5kcG9pbnRzXFxcXG5cXFwiKTtcXG4gODEwOlxcdFxcdFxcdHJldCA9IC1FTk9ERVY7XFxuIDgxMTpcXHRcXHRcXHRnb3RvIGZhaWxfbWVtO1xcbiA4MTI6XFx0XFx0fVxcbiA4MTM6XFx0XFxuIDgxNDpcXHRcXHRuZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGNhdGMpKTtcXG4gODE1OlxcdFxcdGlmICghbmV0ZGV2KVxcbiA4MTY6XFx0XFx0XFx0Z290byBmYWlsX21lbTtcXG4gODE3OlxcdFxcbiA4MTg6XFx0XFx0Y2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIDgxOTpcXHRcXG4gODIwOlxcdFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZjYXRjX25ldGRldl9vcHM7XFxuIDgyMTpcXHRcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDtcXG4gODIyOlxcdFxcdG5ldGRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2b3BzO1xcbiA4MjM6XFx0XFxuIDgyNDpcXHRcXHRjYXRjLVxcdTAwM2V1c2JkZXYgPSB1c2JkZXY7XFxuIDgyNTpcXHRcXHRjYXRjLVxcdTAwM2VuZXRkZXYgPSBuZXRkZXY7XFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZjYXRjLVxcdTAwM2V0eF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6MzA6MTcuNzExMjU3MDcxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNTM3OTM4ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDQVRDIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cuIFRoZSBgYWxsb2NfZXRoZXJkZXZgIGZ1bmN0aW9uIHVzZXMgYGFsbG9jX25ldGRldl9tcXNgIHdoaWNoIGt6YWxsb2NzIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHByaXZhdGUgZGF0YS4gVGhhdCBwYXJ0IGlzIHByZXR0eSBzdGFuZGFyZC4gIENydWNpYWxseSwgYGNhdGMtXHUwMDNlcnhfYnVmYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBnb29kIGZvciBhdm9pZGluZyBzb21lIGlzc3Vlcy4gIFRoZSBVU0IgY29udHJvbGxlciBmaWxscyBgcnhfYnVmYCB3aXRoIGluY29taW5nIGRhdGEgdXAgdG8gYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYC4gVGhhdCB2YXJpYWJsZSwgYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCwgaXMga2V5IGhlcmUuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIHBhdGNoOiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdGhlIGBjYXRjX3J4X2RvbmVgIGZ1bmN0aW9uLCB3aGljaCBoYW5kbGVzIHJlY2VpdmVkIHBhY2tldHMuICBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBjaGVjaywgYGlmIChwa3RfbGVuIFx1MDAzZSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aClgLCB3aGljaCBsb29rcyBsaWtlIGl0J3MgbWVhbnQgdG8gcHJldmVudCByZWFkaW5nIGJleW9uZCB0aGUgcmVjZWl2ZWQgZGF0YS4gSG93ZXZlciwgdGhlcmUncyBhIHByb2JsZW0sIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgb3Igb3ZlcmZsb3csIGNvdWxkIG9jY3VyIHdpdGggdGhlIHByZXZpb3VzIGNoZWNrLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYHJlbWFpbmluZ2AgdmFyaWFibGUgdG8gY2hlY2sgaG93IG11Y2ggZGF0YSBpcyByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlci4gVGhlIGNyaXRpY2FsIGNoZWNrIG5vdyBpbnZvbHZlcyB0aGlzIGByZW1haW5pbmdgIHZhcmlhYmxlIGNvbWJpbmVkIHdpdGggdGhlIGBwa3RfbGVuYCAocGFja2V0IGxlbmd0aCkuICBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBhZGRpdGlvbmFsIGNoZWNrczpcblxuMS4gIGBpZiAocmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0KWA6IFRoaXMgYXZvaWRzIHJlYWRpbmcgcGFzdCB0aGUgYnVmZmVyIHdoZW4gY2FsY3VsYXRpbmcgYHBrdF9sZW5gLlxuMi4gYGlmIChwa3RfbGVuIFx1MDAzYyBFVEhfSExFTiB8fCBwa3RfbGVuICsgcGt0X29mZnNldCBcdTAwM2UgcmVtYWluaW5nKWA6IFRoaXMgbm93IGNoZWNrcyB0aGUgbWluaW11bSBwYWNrZXQgc2l6ZSBhbmQgZW5zdXJlcyB0aGF0IHRoZSBwYWNrZXQgbGVuZ3RoLCBwbHVzIGFueSBvZmZzZXQsIGRvZXMgbm90IGV4Y2VlZCB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlci5cblxuVGhlIGVzc2VuY2Ugb2YgdGhlIGZpeCBpcyB0aGF0IGl0IGhhcmRlbnMgdGhlIGJvdW5kcyBjaGVja3MuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgaWYgdGhlIGBwa3RfbGVuYCBmaWVsZCB3YXMgbWFuaXB1bGF0ZWQsIG9yIHRoZSBkYXRhIHJlY2VpdmVkIHdhcyBjb3JydXB0LiBJdCBkaWRuJ3QgYWNjb3VudCBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgc21hbGxlci10aGFuLWV4cGVjdGVkIG9yIG1hbGZvcm1lZCBwYWNrZXQuXG5cblRoZSBwcmltYXJ5IGJ1ZyBiZWluZyBmaXhlZCBpcyBwcmVjaXNlbHkgYW4gKm91dC1vZi1ib3VuZHMgcmVhZCogaW4gdGhlIFVTQiB0cmFuc2ZlciBidWZmZXIsIHBvdGVudGlhbGx5IGNhdXNlZCBieSBjb3JydXB0ZWQgVVNCIHRyYW5zZmVyIGRhdGEuIFNwZWNpZmljYWxseSwgYGxlMTZfdG9fY3B1cGAgY291bGQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCBpZiBgcGt0X3N0YXJ0YCB3YXMgbmVhciB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIG9yIHRoZSBvdmVyYWxsIHBhY2tldCBgcGt0X2xlbmAgZGlkIG5vdCBhY2NvdW50IGZvciB0aGUgdG90YWwgYnl0ZXMgd2l0aGluIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAuXG5cbk5vdywgZG9lcyB0aGlzIHBhdGNoICppbnRyb2R1Y2UqIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhhdCdzIHRoZSBLTVNBTiBxdWVzdGlvbi4gIExldCdzIHdhbGsgdGhyb3VnaCB0aGUgS01TQU4gcnVsZXMgYW5kIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2Vzbid0IGludm9sdmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gSXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEl0IGRvZXNuJ3QgYWxsb2NhdGUgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuICBJdCBhY3R1YWxseSAqdGlnaHRlbnMqIGJvdW5kcyBjaGVja3MuIFRoZSBuZXcgYm91bmRzIGNoZWNrcyBtYWtlIHN1cmUgd2UgYXJlIG5vdCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhIHJlY2VpdmVkIFVTQiBwYWNrZXQuXG5cbkNvbnNpZGVyaW5nIHRoZSBjb25kaXRpb25zIGZvciBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgOiBUaGlzIHBhdGNoIGRvZXMgbm90IG1vZGlmeSBvciBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIHJpc2tzLiBBbGwgdmFyaWFibGVzIGFuZCBkYXRhIGludm9sdmVkIGFyZSBpbml0aWFsaXplZDogYHJlbWFpbmluZ2AgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgcG9pbnRlciBzdWJ0cmFjdGlvbiwgYW5kIGBwa3RfbGVuYCBpcyBpbml0aWFsaXplZCB1c2luZyBlaXRoZXIgYSByZWFkIGZyb20gbWVtb3J5IG9yIHRoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIGJ1ZmZlci4gVGhlIGNvZGUgZW5zdXJlcyB0aGF0IHRoZSBieXRlcyBjb3BpZWQgaW50byB0aGUgc2tiLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgdGhlIGtlcm5lbCwgY29tZSBmcm9tIGluaXRpYWxpemVkIHJlY2VpdmVkIGRhdGEgd2l0aGluIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAuICBUaGUgcGF0Y2ggcHJpbWFyaWx5IG1pdGlnYXRlcyAqb3V0LW9mLWJvdW5kcyBhY2Nlc3MqIHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggYXJlIHdoYXQgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nICpyZWFkcyogb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIHdpbGwgY2F0Y2ggYW55IGJ1Z3MgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuICBUaGUgcHJpbWFyeSBnb2FsIG9mIHRoZSBwYXRjaCBpcyB0byBpbXBsZW1lbnQgYm91bmRzIGNoZWNrcyBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNzEsIk91dHB1dFRva2VucyI6MjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjMwOjI5LjI0OTE5ODUxNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJ3JlbWFpbmluZycpIGFuZCBlbnN1cmVzIHRoYXQgcGt0X29mZnNldCBieXRlcyBhcmUgYXZhaWxhYmxlIGJlZm9yZSByZWFkaW5nIHRoZSBwYWNrZXQgbGVuZ3RoIGhlYWRlciwgYW5kIHZlcmlmaWVzIHRoYXQgcGt0X2xlbiBpcyBhdCBsZWFzdCBFVEhfSExFTiBhbmQgcGt0X2xlbiArIHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBvbiB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMgaW4gY2F0Y19yeF9kb25lKCkgdG8gZml4IGJvdW5kcyBjaGVja2luZyBvbiBpbmNvbWluZyBVU0IgbmV0d29yayBwYWNrZXRzLiBTcGVjaWZpY2FsbHksIGl0IGNvbXB1dGVzIHRoZSByZW1haW5pbmcgYnVmZmVyIHNpemUgKCdyZW1haW5pbmcnKSBhbmQgZW5zdXJlcyB0aGF0IHBrdF9vZmZzZXQgYnl0ZXMgYXJlIGF2YWlsYWJsZSBiZWZvcmUgcmVhZGluZyB0aGUgcGFja2V0IGxlbmd0aCBoZWFkZXIsIGFuZCB2ZXJpZmllcyB0aGF0IHBrdF9sZW4gaXMgYXQgbGVhc3QgRVRIX0hMRU4gYW5kIHBrdF9sZW4gKyBwa3Rfb2Zmc2V0IGRvZXMgbm90IGV4Y2VlZCByZW1haW5pbmcgYnVmZmVyIGJ5dGVzIGJlZm9yZSBjb3B5aW5nIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHNrYi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgb24gdXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXIgYW5kIGltcHJvcGVyIHBhY2tldCBsZW5ndGggaGFuZGxpbmcuIEFsbCB2YXJpYWJsZXMgKHJlbWFpbmluZywgcGt0X2xlbiwgcGt0X29mZnNldCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBieXRlcyBjb3BpZWQgaW50byBza2IgY29tZSBzdHJpY3RseSBmcm9tIHRoZSB2YWxpZCByZWNlaXZlZCBidWZmZXIgd2l0aGluIGFjdHVhbF9sZW5ndGgsIGFuZCB0aGUgZnVsbCBza2IgcGF5bG9hZCBpcyBwb3B1bGF0ZWQsIGxlYXZpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZSBza2IuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgc3RydWN0dXJlcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHJlbWFpbmluZyBib3VuZGFyeSBvciBidWZmZXItb3ZlcmZsb3cgcmlza3Mgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowr4xm7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 00:27:02 +0000 UTC FinishedAt: 2026-09-15 00:30:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c297ed90fbba72d32b7759aae362b36d15b2db1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CATC", "USB_NET_DRIVERS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c297ed90fbba72d32b7759aae362b36d15b2db1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CATC", "USB_NET_DRIVERS" ], "series_id": "d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "catc_rx_done" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "c297ed90fbba72d32b7759aae362b36d15b2db1f", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DQVRDJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NhdGNfcnhfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMgaW4gY2F0Y19yeF9kb25lKCkgdG8gZml4IGJvdW5kcyBjaGVja2luZyBvbiBpbmNvbWluZyBVU0IgbmV0d29yayBwYWNrZXRzLiBTcGVjaWZpY2FsbHksIGl0IGNvbXB1dGVzIHRoZSByZW1haW5pbmcgYnVmZmVyIHNpemUgKCYjMzk7cmVtYWluaW5nJiMzOTspIGFuZCBlbnN1cmVzIHRoYXQgcGt0X29mZnNldCBieXRlcyBhcmUgYXZhaWxhYmxlIGJlZm9yZSByZWFkaW5nIHRoZSBwYWNrZXQgbGVuZ3RoIGhlYWRlciwgYW5kIHZlcmlmaWVzIHRoYXQgcGt0X2xlbiBpcyBhdCBsZWFzdCBFVEhfSExFTiBhbmQgcGt0X2xlbiAmIzQzOyBwa3Rfb2Zmc2V0IGRvZXMgbm90IGV4Y2VlZCByZW1haW5pbmcgYnVmZmVyIGJ5dGVzIGJlZm9yZSBjb3B5aW5nIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHNrYi5cblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIG9uIHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXIgYW5kIGltcHJvcGVyIHBhY2tldCBsZW5ndGggaGFuZGxpbmcuIEFsbCB2YXJpYWJsZXMgKHJlbWFpbmluZywgcGt0X2xlbiwgcGt0X29mZnNldCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBieXRlcyBjb3BpZWQgaW50byBza2IgY29tZSBzdHJpY3RseSBmcm9tIHRoZSB2YWxpZCByZWNlaXZlZCBidWZmZXIgd2l0aGluIGFjdHVhbF9sZW5ndGgsIGFuZCB0aGUgZnVsbCBza2IgcGF5bG9hZCBpcyBwb3B1bGF0ZWQsIGxlYXZpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZSBza2IuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgc3RydWN0dXJlcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHJlbWFpbmluZyBib3VuZGFyeSBvciBidWZmZXItb3ZlcmZsb3cgcmlza3Mgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IGxlbmd0aCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgbG9naWMgaW4gY2F0Y19yeF9kb25lKCkgaW4gZHJpdmVycy9uZXQvdXNiL2NhdGMuYy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgUlggVVJCIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhlIENBVEMgVVNCIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gKGUuZy4gRHVtbXkgSENEIC8gcmF3LWdhZGdldCkuIEZ1enppbmcgVVNCIHBhY2tldCByZWNlcHRpb24gY2FuIHZlcmlmeSBib3VuZHMgY2hlY2tzIGFuZCB1bmNvdmVyIHJlZ3Jlc3Npb25zIG9yIHBhcnNpbmcgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0YjgwNDZkNGY1MDkxYzM0MTMzOGM3MTI4MmY1ZDA1MmE5NWVlZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMDoyODoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuY1xuaW5kZXggOTZlODJmOTRlZGNmOC4uMzliNjc4ZjE3NWRkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcbkBAIC0yMzMsMTcgJiM0MzsyMzMsMjYgQEAgc3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYilcbiBcdH1cbiBcbiBcdGRvIHtcbi1cdFx0aWYoIWNhdGMtXHUwMDNlaXNfZjV1MDExKSB7XG4tXHRcdFx0cGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2Kilwa3Rfc3RhcnQpO1xuLVx0XHRcdGlmIChwa3RfbGVuIFx1MDAzZSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCkge1xuJiM0MztcdFx0aW50IHJlbWFpbmluZyA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIC1cbiYjNDM7XHRcdFx0XHQocGt0X3N0YXJ0IC0gKHU4ICopdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFjYXRjLVx1MDAzZWlzX2Y1dTAxMSkge1xuJiM0MztcdFx0XHRpZiAocmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0KSB7XG4gXHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbiBcdFx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4mIzQzO1x0XHRcdHBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKXBrdF9zdGFydCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cGt0X2xlbiA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAocGt0X2xlbiBcdTAwM2MgRVRIX0hMRU4gfHwgcGt0X2xlbiAmIzQzOyBwa3Rfb2Zmc2V0IFx1MDAzZSByZW1haW5pbmcpIHtcbiYjNDM7XHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKSkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DQVRDJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NhdGNfcnhfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgbGVuZ3RoIHZhbGlkYXRpb24gYW5kIGJvdW5kcyBjaGVja2luZyBsb2dpYyBpbiBjYXRjX3J4X2RvbmUoKSBpbiBkcml2ZXJzL25ldC91c2IvY2F0Yy5jLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBSWCBVUkIgY29tcGxldGlvbiBoYW5kbGVyIGZvciB0aGUgQ0FUQyBVU0IgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZS5nLiBEdW1teSBIQ0QgLyByYXctZ2FkZ2V0KS4gRnV6emluZyBVU0IgcGFja2V0IHJlY2VwdGlvbiBjYW4gdmVyaWZ5IGJvdW5kcyBjaGVja3MgYW5kIHVuY292ZXIgcmVncmVzc2lvbnMgb3IgcGFyc2luZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDRiODA0NmQ0ZjUwOTFjMzQxMzM4YzcxMjgyZjVkMDUyYTk1ZWVlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDAwOjI4OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKaW5kZXggOTZlODJmOTRlZGNmOC4uMzliNjc4ZjE3NWRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCkBAIC0yMzMsMTcgJiM0MzsyMzMsMjYgQEAgc3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYikKIAl9CiAKIAlkbyB7Ci0JCWlmKCFjYXRjLSZndDtpc19mNXUwMTEpIHsKLQkJCXBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiopcGt0X3N0YXJ0KTsKLQkJCWlmIChwa3RfbGVuICZndDsgdXJiLSZndDthY3R1YWxfbGVuZ3RoKSB7CiYjNDM7CQlpbnQgcmVtYWluaW5nID0gdXJiLSZndDthY3R1YWxfbGVuZ3RoIC0KJiM0MzsJCQkJKHBrdF9zdGFydCAtICh1OCAqKXVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyKTsKJiM0MzsKJiM0MzsJCWlmICghY2F0Yy0mZ3Q7aXNfZjV1MDExKSB7CiYjNDM7CQkJaWYgKHJlbWFpbmluZyAmbHQ7IHBrdF9vZmZzZXQpIHsKIAkJCQljYXRjLSZndDtuZXRkZXYtJmd0O3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7OwogCQkJCWNhdGMtJmd0O25ldGRldi0mZ3Q7c3RhdHMucnhfZXJyb3JzJiM0MzsmIzQzOzsKIAkJCQlicmVhazsKIAkJCX0KJiM0MzsJCQlwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilwa3Rfc3RhcnQpOwogCQl9IGVsc2UgewogCQkJcGt0X2xlbiA9IHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aDsKIAkJfQogCiYjNDM7CQlpZiAocGt0X2xlbiAmbHQ7IEVUSF9ITEVOIHx8IHBrdF9sZW4gJiM0MzsgcGt0X29mZnNldCAmZ3Q7IHJlbWFpbmluZykgewomIzQzOwkJCWNhdGMtJmd0O25ldGRldi0mZ3Q7c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQkJY2F0Yy0mZ3Q7bmV0ZGV2LSZndDtzdGF0cy5yeF9lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwogCQlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSkKIAkJCXJldHVybjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDQVRDIFVTQiBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBwb2ludGVkIHRvIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgQ0FUQyBVU0IgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBpbiBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBkaWZmIGFuZCB0aGUgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBoYXMgY2hhbmdlZCwgYW5kIHdoYXQgaXTigJlzIGludGVuZGVkIHRvIGFjY29tcGxpc2guIEkgc2VlIHRoYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBjYXRjX3J4X2RvbmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGdldCBhIGJyb2FkZXIgdmlldyBhcm91bmQgbGluZSAyMzMgaW4gdGhhdCBmaWxlLiBJIGNhbiBxdWlja2x5IHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBnb29kIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3VzYi9jYXRjLmNgIGFuZCBiZWdpbiB0byByZWNvbnN0cnVjdCB0aGUgY2hhbmdlcyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2F0Yy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHQjZGVmaW5lIGNhdGNfd3JpdGVfbWVtX2FzeW5jKGNhdGMsIGFkZHIsIGJ1Ziwgc2l6ZSlcdGNhdGNfY3RybF9hc3luYyhjYXRjLCBVU0JfRElSX09VVCwgV3JpdGVNZW0sIDAsIGFkZHIsIGJ1Ziwgc2l6ZSwgTlVMTClcbiAyMTE6XHRcbiAyMTI6XHQvKlxuIDIxMzpcdCAqIFJlY2VpdmUgcm91dGluZXMuXG4gMjE0Olx0ICovXG4gMjE1Olx0XG4gMjE2Olx0c3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYilcbiAyMTc6XHR7XG4gMjE4Olx0XHRzdHJ1Y3QgY2F0YyAqY2F0YyA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuIDIxOTpcdFx0dTggKnBrdF9zdGFydCA9IHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXI7XG4gMjIwOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDIyMTpcdFx0aW50IHBrdF9sZW4sIHBrdF9vZmZzZXQgPSAwO1xuIDIyMjpcdFx0aW50IHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG4gMjIzOlx0XG4gMjI0Olx0XHRpZiAoIWNhdGMtXHUwMDNlaXNfZjV1MDExKSB7XG4gMjI1Olx0XHRcdGNsZWFyX2JpdChSWF9SVU5OSU5HLCBcdTAwMjZjYXRjLVx1MDAzZWZsYWdzKTtcbiAyMjY6XHRcdFx0cGt0X29mZnNldCA9IDI7XG4gMjI3Olx0XHR9XG4gMjI4Olx0XG4gMjI5Olx0XHRpZiAoc3RhdHVzKSB7XG4gMjMwOlx0XHRcdGRldl9kYmcoXHUwMDI2dXJiLVx1MDAzZWRldi1cdTAwM2VkZXYsIFwmIzM0O3J4X2RvbmUsIHN0YXR1cyAlZCwgbGVuZ3RoICVkXFxuXCYjMzQ7LFxuIDIzMTpcdFx0XHRcdHN0YXR1cywgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuIDIzMjpcdFx0XHRyZXR1cm47XG4gMjMzOlx0XHR9XG4gMjM0Olx0XG4gMjM1Olx0XHRkbyB7XG4gMjM2Olx0XHRcdGludCByZW1haW5pbmcgPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCAtXG4gMjM3Olx0XHRcdFx0XHQocGt0X3N0YXJ0IC0gKHU4ICopdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcik7XG4gMjM4Olx0XG4gMjM5Olx0XHRcdGlmICghY2F0Yy1cdTAwM2Vpc19mNXUwMTEpIHtcbiAyNDA6XHRcdFx0XHRpZiAocmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0KSB7XG4gMjQxOlx0XHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbiAyNDI6XHRcdFx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7XG4gMjQzOlx0XHRcdFx0XHRicmVhaztcbiAyNDQ6XHRcdFx0XHR9XG4gMjQ1Olx0XHRcdFx0cGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopcGt0X3N0YXJ0KTtcbiAyNDY6XHRcdFx0fSBlbHNlIHtcbiAyNDc6XHRcdFx0XHRwa3RfbGVuID0gdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGg7XG4gMjQ4Olx0XHRcdH1cbiAyNDk6XHRcbiAyNTA6XHRcdFx0aWYgKHBrdF9sZW4gXHUwMDNjIEVUSF9ITEVOIHx8IHBrdF9sZW4gJiM0MzsgcGt0X29mZnNldCBcdTAwM2UgcmVtYWluaW5nKSB7XG4gMjUxOlx0XHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7XG4gMjUyOlx0XHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfZXJyb3JzJiM0MzsmIzQzOztcbiAyNTM6XHRcdFx0XHRicmVhaztcbiAyNTQ6XHRcdFx0fVxuIDI1NTpcdFxuIDI1NjpcdFx0XHRpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSlcbiAyNTc6XHRcdFx0XHRyZXR1cm47XG4gMjU4Olx0XG4gMjU5Olx0XHRcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgcGt0X3N0YXJ0ICYjNDM7IHBrdF9vZmZzZXQsIHBrdF9sZW4pO1xuIDI2MDpcdFx0XHRza2JfcHV0KHNrYiwgcGt0X2xlbik7XG4gMjYxOlx0XG4gMjYyOlx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgY2F0Yy1cdTAwM2VuZXRkZXYpO1xuIDI2MzpcdFx0XHRuZXRpZl9yeChza2IpO1xuIDI2NDpcdFxuIDI2NTpcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9wYWNrZXRzJiM0MzsmIzQzOztcbiAyNjY6XHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfYnl0ZXMgJiM0Mzs9IHBrdF9sZW47XG4gMjY3Olx0XG4gMjY4Olx0XHRcdC8qIEY1VTAxMSBvbmx5IGRvZXMgb25lIHBhY2tldCBwZXIgUlggKi9cbiAyNjk6XHRcdFx0aWYgKGNhdGMtXHUwMDNlaXNfZjV1MDExKVxuIDI3MDpcdFx0XHRcdGJyZWFrO1xuIDI3MTpcdFx0XHRwa3Rfc3RhcnQgJiM0Mzs9ICgoKHBrdF9sZW4gJiM0MzsgMSkgXHUwMDNlXHUwMDNlIDYpICYjNDM7IDEpIFx1MDAzY1x1MDAzYyA2O1xuIDI3MjpcdFxuIDI3MzpcdFx0fSB3aGlsZSAocGt0X3N0YXJ0IC0gKHU4ICopIHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXIgXHUwMDNjIHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoKTtcbiAyNzQ6XHRcbiAyNzU6XHRcdGlmIChjYXRjLVx1MDAzZWlzX2Y1dTAxMSkge1xuIDI3NjpcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2Y2F0Yy1cdTAwM2VyZWNxX3N6KSkge1xuIDI3NzpcdFx0XHRcdGludCBzdGF0ZTtcbiAyNzg6XHRcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmNhdGMtXHUwMDNlcmVjcV9zeik7XG4gMjc5Olx0XHRcdFx0bmV0ZGV2X2RiZyhjYXRjLVx1MDAzZW5ldGRldiwgXCYjMzQ7Z2V0dGluZyBleHRyYSBwYWNrZXRcXG5cJiMzNDspO1xuIDI4MDpcdFx0XHRcdHVyYi1cdTAwM2VkZXYgPSBjYXRjLVx1MDAzZXVzYmRldjtcbiAyODE6XHRcdFx0XHRpZiAoKHN0YXRlID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgXHUwMDNjIDApIHtcbiAyODI6XHRcdFx0XHRcdG5ldGRldl9kYmcoY2F0Yy1cdTAwM2VuZXRkZXYsXG4gMjgzOlx0XHRcdFx0XHRcdCAgIFwmIzM0O3N1Ym1pdChyeF91cmIpIHN0YXR1cyAlZFxcblwmIzM0Oywgc3RhdGUpO1xuIDI4NDpcdFx0XHRcdH1cbiAyODU6XHRcdFx0fSBlbHNlIHtcbiAyODY6XHRcdFx0XHRjbGVhcl9iaXQoUlhfUlVOTklORywgXHUwMDI2Y2F0Yy1cdTAwM2VmbGFncyk7XG4gMjg3Olx0XHRcdH1cbiAyODg6XHRcdH1cbiAyODk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgY2F0Yy5jYCBVU0IgRXRoZXJuZXQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjYXRjLmNgIGZpbGUsIGl0JiMzOTtzIHRoZSBVU0IgRXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgQ0FUQyBFTDEyMTBBIE5ldE1hdGUgYW5kIEJlbGtpbiBGNVUwMTEuIE5hdHVyYWxseSwgbXkgbWluZCBnb2VzIHRvIGZ1enppbmcgcG9zc2liaWxpdGllcy4gQ2FuIEkgYWN0dWFsbHkgZnV6eiBVU0IgZHJpdmVycyBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBUaGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBpcyB5ZXMhIFN5emthbGxlciBoYXMgVVNCIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMgdXNpbmcgYHJhdy1nYWRnZXRgIGFuZCB0aGUgRHVtbXkgSENELCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgL2Rldi9yYXctZ2FkZ2V0YCBhbmQgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIHN5c3RlbSBjYWxsLgoKVGhpcyBpcyBleGNlbGxlbnQgbmV3cyBiZWNhdXNlIFVTQiBkcml2ZXJzLCBlc3BlY2lhbGx5IG5ldHdvcmsgZHJpdmVycyBsaWtlIGBjYXRjYCwgYGNkY19ldGhlcmAsIGFuZCBgcjgxNTJgLCBhcmUgcHJhY3RpY2FsbHkgc3RhbmRhcmQgZnV6emluZyB0YXJnZXRzIGZvciBTeXprYWxsZXIuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIENBVEMgZHJpdmVyIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoaXMgVVNCIGVtdWxhdGlvbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbjogY2FuIFN5emthbGxlciBzdWNjZXNzZnVsbHkgY29ubmVjdCBhIENBVEMgVVNCIGRldmljZT8gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byB2ZXJpZnkuIFRvIG1ha2Ugc3VyZSwgSSBzaG91bGQgY2hlY2sgdGhlIFVTQiB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzIGZvciB0aGUgQ0FUQyBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2F0Y19pZF90YWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NhdGMuYz05NzI9c3RhdGljIHZvaWQgY2F0Y19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtOTkwLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo5OTE6c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNhdGNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtOTkyLVx0eyBVU0JfREVWSUNFKDB4MDQyMywgMHhhKSB9LFx0LyogQ0FUQyBOZXRtYXRlLCBCZWxraW4gRjVVMDExICovXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05OTctXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjk5ODpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2F0Y19pZF90YWJsZSk7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTk5OS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9MTAwMD1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2F0Y19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0xMDAzLVx0LmRpc2Nvbm5lY3QgPVx0Y2F0Y19kaXNjb25uZWN0LFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzoxMDA0Olx0LmlkX3RhYmxlID1cdGNhdGNfaWRfdGFibGUsXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTEwMDUtXHQuZGlzYWJsZV9odWJfaW5pdGlhdGVkX2xwbSA9IDEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYGNhdGNgIFVTQiBkcml2ZXIsIGFuZCBpbW1lZGlhdGVseSBJIHJlY29nbml6ZSB0aGF0IGBjYXRjYCBpcyBpbmRlZWQgYSBVU0IgZHJpdmVyLCBsaWtlbHkgZm9yIGEgbmV0d29yayBjYXJkIG9yIHNpbWlsYXIgZGV2aWNlLiBJIGtub3cgdGhhdCBTeXprYWxsZXIgaXMgYSBmYW50YXN0aWMgdG9vbCBmb3IgZmluZGluZyB0aGVzZSBraW5kcyBvZiBidWdzLiBJdCBvZnRlbiBmaW5kcyBpc3N1ZXMgaW4gVVNCIGRyaXZlcnMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbXBsZXRpb24gaGFuZGxlcnMgZm9yIHJlY2VpdmUgKFJYKSBhbmQgdHJhbnNtaXQgKFRYKSBVUkJzLCBhbmQgaW4gdGhlIHByb2JlIGhhbmRsZXJzLiBUaGVzZSBidWdzIG9mdGVuIGludm9sdmUgbWFsZm9ybWVkIFVTQiBkZXNjcmlwdG9ycyBvciBwYWNrZXRzIHRoYXQgYXJlIGludGVudGlvbmFsbHkgY3JhZnRlZCB0byB0cmlnZ2VyIHZ1bG5lcmFiaWxpdGllcy4KCk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgYGNhdGNfcnhfZG9uZWAgZnVuY3Rpb24gYmVjYXVzZSBpdOKAmXMgYSBjbGFzc2ljIHBsYWNlIHRvIGZpbmQgaXNzdWVzIOKAkyBpdCBoYW5kbGVzIHRoZSByZWNlaXZlZCBkYXRhLCBhbmQgdGhlIGNvZGUgc25pcHBldCBmb2N1c2VzIG9uIHZhbGlkYXRpbmcgcGFja2V0IGxlbmd0aHMuIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGlzc3VlIHNlZW1zIHRvIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgdHJpZ2dlcmVkIGJ5IGFuIGluY29ycmVjdCBjaGVjayBvZiB0aGUgcGFja2V0IGxlbmd0aCBhZ2FpbnN0IHRoZSByZWNlaXZlZCBkYXRhIGJ1ZmZlci4KClRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQgc2hvd2VkIGFuIGlzc3VlIHdpdGggaG93IGBwa3RfbGVuYCB3YXMgY2hlY2tlZCBhZ2FpbnN0IGB1cmItJmd0O2FjdHVhbF9sZW5ndGhgLiBCYXNpY2FsbHksIGlmIGBwa3RfbGVuYCAodGhlIGV4cGVjdGVkIHBhY2tldCBsZW5ndGgpIHdhcyBncmVhdGVyIHRoYW4gYHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aGAgKHRoZSBhY3R1YWwgZGF0YSByZWNlaXZlZCksIGl0IHdhcyBmbGFnZ2VkIGFzIGFuIGVycm9yLCBhbmQgdGhlIHBhY2tldCB3YXMgZHJvcHBlZC4gQnV0LCB0aGlzIGNoZWNrIHdhcyBub3QgZW50aXJlbHkgY29ycmVjdC4gVGhlIG5ldyBjb2RlIHNlZW1zIHRvIGFkZHJlc3MgdGhpcyBieSBjYWxjdWxhdGluZyBhIGByZW1haW5pbmdgIHZhbHVlIHRoYXQgaW5kaWNhdGVzIGhvdyBtdWNoIG9mIHRoZSBidWZmZXIgaXMgdW5yZWFkLiBUaGVuLCBpdCBjb3JyZWN0bHkgdmFsaWRhdGVzIGBwa3RfbGVuYCBhZ2FpbnN0IGByZW1haW5pbmdgLCBjb25zaWRlcmluZyBhbiBvZmZzZXQuCgpUaGUgY29uZGl0aW9uIGluIHRoZSBgaWZgIHN0YXRlbWVudCBub3cgY2hlY2tzIGlmIGByZW1haW5pbmcgJmx0OyBwa3Rfb2Zmc2V0YC4gYHBrdF9vZmZzZXRgIGlzIGEgdmFyaWFibGUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBwYWNrZXQgdGhhdCBpcyByZWFkIGZyb20gdGhlIFVTQiBidWZmZXIuIFRoZSBzZWNvbmQgY2hlY2sgZW5zdXJlcyB0aGF0IHRoZSBwYWNrZXQgaXMgb2Ygc3VmZmljaWVudCBsZW5ndGguIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGNoZWNrcyB0aGF0IHRoZSBwYWNrZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBFdGhlcm5ldCBoZWFkZXIgc2l6ZSBhbmQgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgYHJlbWFpbmluZ2AgbGVuZ3RoLiBUaGUgY29ycmVjdGVkIHZlcnNpb24gaGFzIGltcHJvdmVkIHNhZmV0eS4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCByZWFjaGFiaWxpdHkuIENhbiB0aGlzIGNvZGUgcGF0aCBiZSB0cmlnZ2VyZWQ/IEFic29sdXRlbHkuIEkga25vdyB0aGF0IFN5emthbGxlciBpcyBvZnRlbiB1c2VkIGluIHRoaXMgdmVyeSBjb250ZXh0IHZpYSB2aXJ0dWFsIFVTQiBnYWRnZXQgZW11bGF0aW9uIOKAkyBzcGVjaWZpY2FsbHkgdGhlIGByYXctZ2FkZ2V0YCBhbmQgYGR1bW15X2hjZGAgY29uZmlndXJhdGlvbnMuIFRoZXNlIGVtdWxhdGlvbnMgYWxsb3cgU3l6a2FsbGVyIHRvIGluamVjdCBjcmFmdGVkIFVSQiBkYXRhIGFuZCB0cmlnZ2VyIGNhbGxiYWNrcyBsaWtlIGBjYXRjX3J4X2RvbmVgLgoKVGhlIGZpbmFsIHN0ZXAgZm9yIG1lIHdvdWxkIGJlIHRvIGNvbmZpcm0gdGhhdCBgY2F0Y2AgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIGNhdGMgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGEgY29uZmlndXJhYmxlIG9wdGlvbiBhbmQgdGhhdCBpdCYjMzk7cyBsaWtlbHkgdG8gYmUgcHJlc2VudCBpbiB0aGUgdGFyZ2V0IGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfQ0FUQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTM9aWYgVVNCX05FVF9EUklWRVJTXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE1OmNvbmZpZyBVU0JfQ0FUQ1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDtVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIFVTQiBOZXR3b3JraW5nIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgVVNCIG5ldHdvcmtpbmcgZHJpdmVyLiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gY2hlY2sgb3V0IHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNS4gVGhhdCBzaG91bGQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0IHVucmF2ZWxpbmcgd2hhdCBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgdGhpcyB0byBmdW5jdGlvbiBwcm9wZXJseS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgY29ycmVjdGx5IGJlZm9yZSBJIHN0YXJ0IG1ha2luZyBhbnkgY2hhbmdlcywgZG9uJiMzOTt0IHdhbnQgdG8gYnJlYWsgYW55dGhpbmcgaW1wb3J0YW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbW1lbnQgXCYjMzQ7SG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XCYjMzQ7XG4gICA2Olx0XHRkZXBlbmRzIG9uICFVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAgNzpcdFxuICAgODpcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgTmV0d29yayBBZGFwdGVyc1wmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCBVU0IgaWYgVVNCXG4gIDExOlx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gIDEyOlx0XG4gIDEzOlx0aWYgVVNCX05FVF9EUklWRVJTXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIFVTQl9DQVRDXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcbiAgMjA6XHRcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcbiAgMjE6XHRcdCAgQmVsa2luIEY1VTAxMVxuICAyMjpcdFx0ICBCZWxraW4gRjVVMTExXG4gIDIzOlx0XHQgIENBVEMgTmV0TWF0ZVxuICAyNDpcdFx0ICBDQVRDIE5ldE1hdGUgSUlcbiAgMjU6XHRcdCAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDXG4gIDI2Olx0XG4gIDI3Olx0XHQgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsXG4gIDI4Olx0XHQgIHR5cGljYWxseSBvbiBldGgwLCBpZiBpdCBpcyB0aGUgb25seSBldGhlcm5ldCBkZXZpY2UsIG9yIHBlcmhhcHMgb25cbiAgMjk6XHRcdCAgZXRoMSwgaWYgeW91IGhhdmUgYSBQQ0kgb3IgSVNBIGV0aGVybmV0IGNhcmQgaW5zdGFsbGVkLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIFVTQl9LQVdFVEhcbiAgMzU6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBLTFNJIEtMNVVTQjEwMS1iYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAzNjpcdFx0aGVscFxuICAzNzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxuICAzODpcdFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcbiAgMzk6XHRcdCAgM0NvbSAzQzE5MjUwXG4gIDQwOlx0XHQgIEFEUyBVU0ItMTBCVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzA3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFVTQl9DQVRDIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgVVNCX0NBVENgIGNvbmZpZ3VyYXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBzZWUgdGhhdCBpdCYjMzk7cyByZWxpYW50IG9uIGBVU0JfTkVUX0RSSVZFUlNgLCB3aGljaCBpbiB0dXJuIGhpbmdlcyBvbiBib3RoIGBVU0JgIGFuZCBgTkVUYCBiZWluZyBlbmFibGVkLiBTZWVtcyBsb2dpY2FsLCBhIG5ldHdvcmstb3Zlci1VU0Igc2V0dXAsIHJpZ2h0PyBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGlmIHRoaXMgY29uZmlndXJhdGlvbiBoYXMgYW55IG90aGVyIGltcGxpY2F0aW9ucywgYnV0IHRob3NlIGxvb2sgdG8gYmUgdGhlIGNvcmUgZGVwZW5kZW5jaWVzLiBBbHNvIGBVU0JfQ0FUQ2Agc2VsZWN0cyBgQ1JDMzJgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZGF0YSBpbnRlZ3JpdHkgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBnb29kIHRoYXQgaXQmIzM5O3MgYSBkaXJlY3Qgc2VsZWN0aW9uOyBubyBzdXJwcmlzZXMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBicmluZyBpbiB0aGUgZnV6emluZyBjb25zaWRlcmF0aW9uLiBGb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucywgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IHNlZW1zIHRvIGFwcGx5IGJlY2F1c2UgdGhpcyBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEFuZCwgYXMgc3VzcGVjdGVkLCBgQ0FUQ2AgaXMgYWNjZXNzaWJsZSB2aWEgVVNCIGdhZGdldCwgc28gaXQgZml0cyB0aGUgJiMzNDtSZWFjaGFibGUgRHJpdmVycyYjMzQ7IGNyaXRlcmlhLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4KClJlZ2FyZGluZyBmdXp6aW5nIHRhcmdldHMsIHRoZSBpbnN0cnVjdGlvbnMgcG9pbnQgbWUgdG93YXJkcyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzOiBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgaW1wbGVtZW50IHRoZSBjb3JlIGxvZ2ljLiBJbiB0aGlzIGNhc2UsIGBjYXRjX3J4X2RvbmVgIHN0YW5kcyBvdXQuIE9rYXksIHNvIEkgc2hvdWxkIGxvb2sgaW50byBgY2F0Y19yeF9kb25lYC4gVHVybnMgb3V0LCBpdCYjMzk7cyBhbiBVUkIgY29tcGxldGlvbiBjYWxsYmFjaywgd2hpY2ggc3VnZ2VzdHMgaXRzIHJvbGUgaW4gZGF0YSByZWNlcHRpb24uIEkgc2hvdWxkIHJlYWxseSBjaGVjayB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHJlZmVyZW5jZWQgYmVjYXVzZSBpZiBpdCYjMzk7cyBhbiBVUkIgY29tcGxldGlvbiBjYWxsYmFjayBpdCBpcyBwcm9iYWJseSBub3QgZGlyZWN0bHkgY2FsbGVkIGJ1dCB3aWxsIGJlIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGFuIFVSQi4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5IGZvciBGdXp6aW5nLgoKTmV4dCwgSSYjMzk7bGwgYW5hbHl6ZSBgY2F0Yy5jYCBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBjYXRjX3J4X2RvbmVgIG9yIHJlbGF0ZWQgdG8gdGhlIFJYIHByb2Nlc3MuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2F0Y19yeF9kb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NhdGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2F0Yy5jPTE1Mz1zdHJ1Y3QgY2F0YyB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0yMTUtXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjIxNjpzdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0yMTcte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9Nzc4PXN0YXRpYyBpbnQgY2F0Y19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODYxLVx0dXNiX2ZpbGxfYnVsa191cmIoY2F0Yy1cdTAwM2VyeF91cmIsIHVzYmRldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYmRldiwgQ0FUQ19VU0JfRVBfQlVMSyksXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjg2MjpcdFx0XHQgIGNhdGMtXHUwMDNlcnhfYnVmLCBwa3RzeiwgY2F0Y19yeF9kb25lLCBjYXRjKTtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGNhdGNfcnhfZG9uZWAgVVJCIENvbXBsZXRpb24gSGFuZGxlcioqCgpPa2F5LCBzbyBgY2F0Y19yeF9kb25lYCBpcyB0aGUgVVJCIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgYHJ4X3VyYmAuIExldCYjMzk7cyBzZWUsIGZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCBpcywgZ2l2ZW4gdGhlIGBzdGF0aWMgdm9pZGAgZGVjbGFyYXRpb24uIEkgY2FuIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBpZiBpdCBoYXMgYSBzeW1ib2wuIEl0IGRvZXMsIHNvIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBpbmxpbmUuIEkmIzM5O20gc2VlaW5nIGZyb20gdGhlIHByb3ZpZGVkIGRpZmYgdGhhdCBgY2F0Y19yeF9kb25lYCBpcyBiZWluZyBtb2RpZmllZCwgYnV0IG5vdGhpbmcgZWxzZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBoYW5kbGluZyBwYWNrZXQgbGVuZ3RoIGNoZWNrcy4gSXQmIzM5O3MgbG9va2luZyBsaWtlIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXItcmVhZCBvciB1bmRlci1yZWFkIGlzc3VlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZWx5IGRvaW5nIGEgc2ltcGxlIGxlbmd0aCBjaGVjayBhbmQgbm93IHRoZXJlJiMzOTtzIGByZW1haW5pbmdgIGNoZWNrIHRvIGFjY291bnQgZm9yIHBrdF9vZmZzZXQgY2FsY3VsYXRpb24gd2l0aCBgcGt0X2xlbmAuIEl0IGFsc28gY2hlY2tzIGlmIHRoZSBwYWNrZXQgbGVuZ3RoIGlzIHdpdGhpbiBhY2NlcHRhYmxlIGJvdW5kcywgZXNwZWNpYWxseSBpbiB0aGUgYCFjYXRjLSZndDtpc19mNXUwMTFgIGNhc2UuIEl0IHNlZW1zIGxpa2UgdGhlIHByZXZpb3VzIGxvZ2ljIGhhZCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHRoZXJlIHRoYXQgaXMgYmVpbmcgYWRkcmVzc2VkLgoKVGhlIGNvZGUgc2VlbXMgdG8gaGFuZGxlIGEgc3BlY2lmaWMgY2FzZSBmb3IgYCFjYXRjLSZndDtpc19mNXUwMTFgLCB3aGljaCBsaWtlbHkgcmVwcmVzZW50cyBkaWZmZXJlbnQgcGFja2V0IHN0cnVjdHVyZXMuIEl0IGNhbGN1bGF0ZXMgdGhlIHJlbWFpbmluZyBhbW91bnQgb2YgZGF0YSBhZnRlciBgcGt0X29mZnNldGAgaXMgYXBwbGllZCBpbiB0aGUgYnVmZmVyIGFuZCBpdCB1c2VzIGBFVEhfSExFTmAuCgpMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaG93IGBjYXRjLm9gIGlzIGJ1aWx0IHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNvbnRleHQuIFRoaXMgd2lsbCBwcm9iYWJseSBwcm92aWRlIG1vcmUgY2x1ZXMgYWJvdXQgd2hhdCBgcGt0X29mZnNldGAgaXMuIEFsc28sIHRoZSBjb25maWd1cmF0aW9uIHN5bWJvbHMgKGBVU0JfQ0FUQ2AsIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCYCwgYE5FVGApIGFyZSByZWxldmFudC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzIHRvIGVuc3VyZSBhbGwgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LiBUaGlzIGNoYW5nZSBzZWVtcyByZWxhdGVkIHRvIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgcmVjZWl2ZSBwYXRoLCBsaWtlbHkgdG8gbWl0aWdhdGUgc29tZSBraW5kIG9mIGJ1ZmZlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cgdnVsbmVyYWJpbGl0eS4gSSBjYW4gcHJvYmFibHkgY29ycmVsYXRlIHRoaXMgd2l0aCBhIHJlcG9ydGVkIGJ1ZyBvciB2dWxuZXJhYmlsaXR5IHJlcG9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2F0YyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19VU0JfQ0FUQylcdFx0JiM0Mzs9IGNhdGMub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1VTQl9LQVdFVEgpXHQmIzQzOz0ga2F3ZXRoLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3MwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBidWlsZCBzeXN0ZW0uLi4KCioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgSW5jbHVzaW9uKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlYCBoZXJlLiBUaGUgbGluZSBgb2JqLSQoQ09ORklHX1VTQl9DQVRDKSAmIzQzOz0gY2F0Yy5vYCBpcyBjYXRjaGluZyBteSBleWUuIFNvLCB0aGUgYGNhdGMub2AgbW9kdWxlIGZvciB0aGUgQ0FUQyBVU0IgZXRoZXJuZXQgYWRhcHRlciBpcyBiZWluZyBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX1VTQl9DQVRDYCBLY29uZmlnIG9wdGlvbi4gQ2xhc3NpYy4gCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIEkgc2hvdWxkIGNoZWNrIGhvdyBgZHJpdmVycy9uZXQvdXNiYCBpdHNlbGYgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZC4gVGltZSB0byBwZWVrIGludG8gdGhlIG1haW4gYGRyaXZlcnMvbmV0L01ha2VmaWxlYCBhbmQgc2VlIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiBVU0IgbmV0d29yayBkcml2ZXJzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIGJhY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfWEVOX05FVERFVl9CQUNLRU5EKSAmIzQzOz0geGVuLW5ldGJhY2svXG5kcml2ZXJzL25ldC9NYWtlZmlsZS03OS1cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjgwOm9iai0kKENPTkZJR19VU0JfTkVUX0RSSVZFUlMpICYjNDM7PSB1c2IvXG5kcml2ZXJzL25ldC9NYWtlZmlsZS04MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyNAoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiAzMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIFVTQiBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIGBDT05GSUdfVVNCX05FVF9EUklWRVJTYCBhbmQgYENPTkZJR19VU0JfQ0FUQ2AuIEkgbmVlZCB0byBlbnN1cmUgVVNCIGhvc3QgYW5kIGVpdGhlciByYXcgZ2FkZ2V0IG9yIGBkdW1teV9oY2RgIGVtdWxhdGlvbiBhcmUgZW5hYmxlZC4gU3RhbmRhcmQga2VybmVscyB1c3VhbGx5IHRha2UgY2FyZSBvZiBgVVNCYCBhbmQgYE5FVGAsIHNvIHRob3NlIGFyZSBsaWtlbHkgY292ZXJlZC4gVG8gYmUgc3VyZSwgSSYjMzk7bGwgbGlzdCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOiBgVVNCX0NBVENgIGFuZCBgVVNCX05FVF9EUklWRVJTYC4KCk5vdywgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIFdvcnRoRnV6emluZyBhbmFseXNpcy4KCiogICAqKlJlYWNoYWJpbGl0eToqKiBUaGUgVVNCIGRyaXZlcnMsIHBhcnRpY3VsYXJseSB0aGUgYGNhdGNfcnhfZG9uZSgpYCBmdW5jdGlvbuKAlHRoZSBSWCBVUkIgY29tcGxldGlvbiBoYW5kbGVy4oCUYXJlIGVhc2lseSByZWFjaGFibGUgdGhyb3VnaCBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gVXNpbmcgZWl0aGVyIGBkdW1teV9oY2RgIG9yIHJhdyBnYWRnZXQgd2l0aGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgbWFrZXMgdGhpcyB0cml2aWFsLiBUaGUgbW9kaWZpY2F0aW9uIGZvY3VzZWQgb24gYWRkaW5nIGJvdW5kcyBjaGVja3Mgd2l0aGluIHRoaXMgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBtYWxmb3JtZWQgcGFja2V0IHByb2Nlc3NpbmcsIHdpdGggdGhlIG5ldyBjaGVja3M6IGByZW1haW5pbmcgJmx0OyBwa3Rfb2Zmc2V0YCBhbmQgYHBrdF9sZW4gJmx0OyBFVEhfSExFTiB8fCBwa3RfbGVuICYjNDM7IHBrdF9vZmZzZXQgJmd0OyByZW1haW5pbmdgLiBUaGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgaW4gYSBkcml2ZXIgc3VwcG9ydGVkIGJ5IHZpcnR1YWwgZW11bGF0aW9uLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KKiAgICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCwgdGhlIHRhcmdldCBmdW5jdGlvbiBpcyBgWyYjMzQ7Y2F0Y19yeF9kb25lJiMzNDtdYC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQsIHRoZXNlIGFyZSB0aGUgY29uZmlncyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgaXQ6IGBbJiMzNDtVU0JfQ0FUQyYjMzQ7LCAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7XWAuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiwgYW5kIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIEl0JiMzOTtzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0NBVEMmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2F0Y19yeF9kb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGluIGNhdGNfcnhfZG9uZSgpIGluIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFJYIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChlLmcuIER1bW15IEhDRCAvIHJhdy1nYWRnZXQpLiBGdXp6aW5nIFVTQiBwYWNrZXQgcmVjZXB0aW9uIGNhbiB2ZXJpZnkgYm91bmRzIGNoZWNrcyBhbmQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBwYXJzaW5nIGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DQVRDJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NhdGNfcnhfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgbGVuZ3RoIHZhbGlkYXRpb24gYW5kIGJvdW5kcyBjaGVja2luZyBsb2dpYyBpbiBjYXRjX3J4X2RvbmUoKSBpbiBkcml2ZXJzL25ldC91c2IvY2F0Yy5jLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBSWCBVUkIgY29tcGxldGlvbiBoYW5kbGVyIGZvciB0aGUgQ0FUQyBVU0IgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZS5nLiBEdW1teSBIQ0QgLyByYXctZ2FkZ2V0KS4gRnV6emluZyBVU0IgcGFja2V0IHJlY2VwdGlvbiBjYW4gdmVyaWZ5IGJvdW5kcyBjaGVja3MgYW5kIHVuY292ZXIgcmVncmVzc2lvbnMgb3IgcGFyc2luZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJiMzOTtyZW1haW5pbmcmIzM5OykgYW5kIGVuc3VyZXMgdGhhdCBwa3Rfb2Zmc2V0IGJ5dGVzIGFyZSBhdmFpbGFibGUgYmVmb3JlIHJlYWRpbmcgdGhlIHBhY2tldCBsZW5ndGggaGVhZGVyLCBhbmQgdmVyaWZpZXMgdGhhdCBwa3RfbGVuIGlzIGF0IGxlYXN0IEVUSF9ITEVOIGFuZCBwa3RfbGVuICYjNDM7IHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgb24gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDRiODA0NmQ0ZjUwOTFjMzQxMzM4YzcxMjgyZjVkMDUyYTk1ZWVlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDAwOjI4OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKaW5kZXggOTZlODJmOTRlZGNmOC4uMzliNjc4ZjE3NWRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCkBAIC0yMzMsMTcgJiM0MzsyMzMsMjYgQEAgc3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYikKIAl9CiAKIAlkbyB7Ci0JCWlmKCFjYXRjLSZndDtpc19mNXUwMTEpIHsKLQkJCXBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiopcGt0X3N0YXJ0KTsKLQkJCWlmIChwa3RfbGVuICZndDsgdXJiLSZndDthY3R1YWxfbGVuZ3RoKSB7CiYjNDM7CQlpbnQgcmVtYWluaW5nID0gdXJiLSZndDthY3R1YWxfbGVuZ3RoIC0KJiM0MzsJCQkJKHBrdF9zdGFydCAtICh1OCAqKXVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyKTsKJiM0MzsKJiM0MzsJCWlmICghY2F0Yy0mZ3Q7aXNfZjV1MDExKSB7CiYjNDM7CQkJaWYgKHJlbWFpbmluZyAmbHQ7IHBrdF9vZmZzZXQpIHsKIAkJCQljYXRjLSZndDtuZXRkZXYtJmd0O3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7OwogCQkJCWNhdGMtJmd0O25ldGRldi0mZ3Q7c3RhdHMucnhfZXJyb3JzJiM0MzsmIzQzOzsKIAkJCQlicmVhazsKIAkJCX0KJiM0MzsJCQlwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilwa3Rfc3RhcnQpOwogCQl9IGVsc2UgewogCQkJcGt0X2xlbiA9IHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aDsKIAkJfQogCiYjNDM7CQlpZiAocGt0X2xlbiAmbHQ7IEVUSF9ITEVOIHx8IHBrdF9sZW4gJiM0MzsgcGt0X29mZnNldCAmZ3Q7IHJlbWFpbmluZykgewomIzQzOwkJCWNhdGMtJmd0O25ldGRldi0mZ3Q7c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQkJY2F0Yy0mZ3Q7bmV0ZGV2LSZndDtzdGF0cy5yeF9lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwogCQlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSkKIAkJCXJldHVybjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AgZm9yIEtNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSBzaG91bGQgcnVuIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIG9uIGEgcGF0Y2ggcmVsYXRlZCB0byBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUuIE15IGZpcnN0IHN0ZXAgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYsIG9mIGNvdXJzZSwgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIzMyBpbiBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eSBiZWluZyBtb2RpZmllZC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgY2hhbmNlIG9mIGZpZ3VyaW5nIG91dCBpZiBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyB3YXJyYW50ZWQ7IEkgbmVlZCB0byBsb29rIGZvciBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBmdXp6aW5nIGNhbiB1bmNvdmVyLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdCNkZWZpbmUgY2F0Y193cml0ZV9tZW1fYXN5bmMoY2F0YywgYWRkciwgYnVmLCBzaXplKVx0Y2F0Y19jdHJsX2FzeW5jKGNhdGMsIFVTQl9ESVJfT1VULCBXcml0ZU1lbSwgMCwgYWRkciwgYnVmLCBzaXplLCBOVUxMKVxuIDIxMTpcdFxuIDIxMjpcdC8qXG4gMjEzOlx0ICogUmVjZWl2ZSByb3V0aW5lcy5cbiAyMTQ6XHQgKi9cbiAyMTU6XHRcbiAyMTY6XHRzdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiKVxuIDIxNzpcdHtcbiAyMTg6XHRcdHN0cnVjdCBjYXRjICpjYXRjID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4gMjE5Olx0XHR1OCAqcGt0X3N0YXJ0ID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcjtcbiAyMjA6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMjIxOlx0XHRpbnQgcGt0X2xlbiwgcGt0X29mZnNldCA9IDA7XG4gMjIyOlx0XHRpbnQgc3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbiAyMjM6XHRcbiAyMjQ6XHRcdGlmICghY2F0Yy1cdTAwM2Vpc19mNXUwMTEpIHtcbiAyMjU6XHRcdFx0Y2xlYXJfYml0KFJYX1JVTk5JTkcsIFx1MDAyNmNhdGMtXHUwMDNlZmxhZ3MpO1xuIDIyNjpcdFx0XHRwa3Rfb2Zmc2V0ID0gMjtcbiAyMjc6XHRcdH1cbiAyMjg6XHRcbiAyMjk6XHRcdGlmIChzdGF0dXMpIHtcbiAyMzA6XHRcdFx0ZGV2X2RiZyhcdTAwMjZ1cmItXHUwMDNlZGV2LVx1MDAzZWRldiwgXCYjMzQ7cnhfZG9uZSwgc3RhdHVzICVkLCBsZW5ndGggJWRcXG5cJiMzNDssXG4gMjMxOlx0XHRcdFx0c3RhdHVzLCB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCk7XG4gMjMyOlx0XHRcdHJldHVybjtcbiAyMzM6XHRcdH1cbiAyMzQ6XHRcbiAyMzU6XHRcdGRvIHtcbiAyMzY6XHRcdFx0aW50IHJlbWFpbmluZyA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIC1cbiAyMzc6XHRcdFx0XHRcdChwa3Rfc3RhcnQgLSAodTggKil1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyKTtcbiAyMzg6XHRcbiAyMzk6XHRcdFx0aWYgKCFjYXRjLVx1MDAzZWlzX2Y1dTAxMSkge1xuIDI0MDpcdFx0XHRcdGlmIChyZW1haW5pbmcgXHUwMDNjIHBrdF9vZmZzZXQpIHtcbiAyNDE6XHRcdFx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7O1xuIDI0MjpcdFx0XHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfZXJyb3JzJiM0MzsmIzQzOztcbiAyNDM6XHRcdFx0XHRcdGJyZWFrO1xuIDI0NDpcdFx0XHRcdH1cbiAyNDU6XHRcdFx0XHRwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilwa3Rfc3RhcnQpO1xuIDI0NjpcdFx0XHR9IGVsc2Uge1xuIDI0NzpcdFx0XHRcdHBrdF9sZW4gPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiAyNDg6XHRcdFx0fVxuIDI0OTpcdFxuIDI1MDpcdFx0XHRpZiAocGt0X2xlbiBcdTAwM2MgRVRIX0hMRU4gfHwgcGt0X2xlbiAmIzQzOyBwa3Rfb2Zmc2V0IFx1MDAzZSByZW1haW5pbmcpIHtcbiAyNTE6XHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbiAyNTI6XHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9lcnJvcnMmIzQzOyYjNDM7O1xuIDI1MzpcdFx0XHRcdGJyZWFrO1xuIDI1NDpcdFx0XHR9XG4gMjU1Olx0XG4gMjU2Olx0XHRcdGlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKVxuIDI1NzpcdFx0XHRcdHJldHVybjtcbiAyNTg6XHRcbiAyNTk6XHRcdFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBwa3Rfc3RhcnQgJiM0MzsgcGt0X29mZnNldCwgcGt0X2xlbik7XG4gMjYwOlx0XHRcdHNrYl9wdXQoc2tiLCBwa3RfbGVuKTtcbiAyNjE6XHRcbiAyNjI6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBjYXRjLVx1MDAzZW5ldGRldik7XG4gMjYzOlx0XHRcdG5ldGlmX3J4KHNrYik7XG4gMjY0Olx0XG4gMjY1Olx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X3BhY2tldHMmIzQzOyYjNDM7O1xuIDI2NjpcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9ieXRlcyAmIzQzOz0gcGt0X2xlbjtcbiAyNjc6XHRcbiAyNjg6XHRcdFx0LyogRjVVMDExIG9ubHkgZG9lcyBvbmUgcGFja2V0IHBlciBSWCAqL1xuIDI2OTpcdFx0XHRpZiAoY2F0Yy1cdTAwM2Vpc19mNXUwMTEpXG4gMjcwOlx0XHRcdFx0YnJlYWs7XG4gMjcxOlx0XHRcdHBrdF9zdGFydCAmIzQzOz0gKCgocGt0X2xlbiAmIzQzOyAxKSBcdTAwM2VcdTAwM2UgNikgJiM0MzsgMSkgXHUwMDNjXHUwMDNjIDY7XG4gMjcyOlx0XG4gMjczOlx0XHR9IHdoaWxlIChwa3Rfc3RhcnQgLSAodTggKikgdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlciBcdTAwM2MgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuIDI3NDpcdFxuIDI3NTpcdFx0aWYgKGNhdGMtXHUwMDNlaXNfZjV1MDExKSB7XG4gMjc2Olx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZjYXRjLVx1MDAzZXJlY3Ffc3opKSB7XG4gMjc3Olx0XHRcdFx0aW50IHN0YXRlO1xuIDI3ODpcdFx0XHRcdGF0b21pY19kZWMoXHUwMDI2Y2F0Yy1cdTAwM2VyZWNxX3N6KTtcbiAyNzk6XHRcdFx0XHRuZXRkZXZfZGJnKGNhdGMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtnZXR0aW5nIGV4dHJhIHBhY2tldFxcblwmIzM0Oyk7XG4gMjgwOlx0XHRcdFx0dXJiLVx1MDAzZWRldiA9IGNhdGMtXHUwMDNldXNiZGV2O1xuIDI4MTpcdFx0XHRcdGlmICgoc3RhdGUgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSBcdTAwM2MgMCkge1xuIDI4MjpcdFx0XHRcdFx0bmV0ZGV2X2RiZyhjYXRjLVx1MDAzZW5ldGRldixcbiAyODM6XHRcdFx0XHRcdFx0ICAgXCYjMzQ7c3VibWl0KHJ4X3VyYikgc3RhdHVzICVkXFxuXCYjMzQ7LCBzdGF0ZSk7XG4gMjg0Olx0XHRcdFx0fVxuIDI4NTpcdFx0XHR9IGVsc2Uge1xuIDI4NjpcdFx0XHRcdGNsZWFyX2JpdChSWF9SVU5OSU5HLCBcdTAwMjZjYXRjLVx1MDAzZWZsYWdzKTtcbiAyODc6XHRcdFx0fVxuIDI4ODpcdFx0fVxuIDI4OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgYGNhdGNgIFVTQiBuZXR3b3JrIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG9yaWdpbmFsIGlzc3VlIGFuZCBob3cgdGhpcyBwcm9wb3NlZCBmaXggYWRkcmVzc2VzIGl0LiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBiZWZvcmUgYW5kIGFmdGVyIGNvZGUgaW4gdGhlIGBjYXRjX3J4X2RvbmVgIGZ1bmN0aW9uLgoKVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgbG9naWMgaGFzIGEgZmxhdy4gV2hlbiBgY2F0Yy0mZ3Q7aXNfZjV1MDExYCBpcyBmYWxzZSwgaXQgcmVhZHMgYSBwYWNrZXQgbGVuZ3RoIChgcGt0X2xlbmApIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVjZWl2ZWQgZGF0YS4gSG93ZXZlciwgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHdpdGggaG93IGl0IHZhbGlkYXRlcyB0aGlzIGxlbmd0aCBhZ2FpbnN0IHRoZSByZWNlaXZlZCBkYXRhIHNpemUgKGB1cmItJmd0O2FjdHVhbF9sZW5ndGhgKS4gQSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGNhbiBoYXBwZW4gd2l0aCBhIHNtYWxsIGB1cmItJmd0O2FjdHVhbF9sZW5ndGhgIGlmIGl0IGlzIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYF9fbGUxNmAgYmVpbmcgcmVhZCAodHdvIGJ5dGVzKSBkdXJpbmcgdGhlIGBsZTE2X3RvX2NwdXBgIGNhbGwsIHdoaWNoIHJlYWRzIHBhc3QgdGhlIGFsbG9jYXRlZCBidWZmZXIuIEFsc28gdGhlIGN1cnJlbnQgY2hlY2ssIGBwa3RfbGVuICZndDsgdXJiLSZndDthY3R1YWxfbGVuZ3RoYCBpc24mIzM5O3Qgc3VmZmljaWVudC4gSWYgYHBrdF9sZW4gJiM0MzsgcGt0X29mZnNldGAgY2FuIGV4Y2VlZCBgdXJiLSZndDthY3R1YWxfbGVuZ3RoYC4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHJlbWFpbmluZ2AgdmFyaWFibGUgdG8gYWRkcmVzcyB0aGlzIGFuZCBkb2VzIGEgYmV0dGVyIGpvYiBvZiBjaGVja2luZyB0aGUgcGFja2V0IGxlbmd0aCwgbm93LCB1c2luZyBgcmVtYWluaW5nYCwgaXQgaXMgc2FmZS4KCkZ1cnRoZXJtb3JlLCBldmVuIGlmIHRoZSBsZW5ndGggdmFsaWRhdGlvbiBwYXNzZXMsIHRoZSBgc2tiX2NvcHlfdG9fbGluZWFyX2RhdGFgIGZ1bmN0aW9uIGNvdWxkIHN0aWxsIGJlIHZ1bG5lcmFibGUuIEl0IGNvcGllcyBgcGt0X2xlbmAgYnl0ZXMgc3RhcnRpbmcgZnJvbSBgcGt0X3N0YXJ0ICYjNDM7IHBrdF9vZmZzZXRgLiBUaGUgb3JpZ2luYWwgY29kZSBkb2VzbiYjMzk7dCBlbnN1cmUgdGhhdCBgcGt0X3N0YXJ0ICYjNDM7IHBrdF9vZmZzZXQgJiM0MzsgcGt0X2xlbmAgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgYHVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyYCBvciB0aGUgYWN0dWFsIHJlY2VpdmVkIGRhdGEsIGFub3RoZXIgYnVmZmVyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuCgpJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgdXJiLSZndDt0cmFuc2Zlcl9idWZmZXJgIGlzIGFsbG9jYXRlZCBpbiB0aGUgYGNhdGMuY2AgZmlsZSB0byBjb21wbGV0ZWx5IGNvbmZpcm0gdGhpcyBhbmFseXNpcyBhbmQgaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4X3VyYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NhdGMuYz0xNTM9c3RydWN0IGNhdGMge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTg1LVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzoxODY6XHRzdHJ1Y3QgdXJiICp0eF91cmIsICpyeF91cmIsICppcnFfdXJiLCAqY3RybF91cmI7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTE4Ny1cbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTIxNj1zdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMjgyLVx0XHRcdFx0bmV0ZGV2X2RiZyhjYXRjLVx1MDAzZW5ldGRldixcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM6MjgzOlx0XHRcdFx0XHQgICBcJiMzNDtzdWJtaXQocnhfdXJiKSBzdGF0dXMgJWRcXG5cJiMzNDssIHN0YXRlKTtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMjg0LVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTI5MT1zdGF0aWMgdm9pZCBjYXRjX2lycV9kb25lKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTM0Mi1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM6MzQzOlx0XHRcdGNhdGMtXHUwMDNlcnhfdXJiLVx1MDAzZWRldiA9IGNhdGMtXHUwMDNldXNiZGV2O1xuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzozNDQ6XHRcdFx0aWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihjYXRjLVx1MDAzZXJ4X3VyYiwgR0ZQX0FUT01JQykpIFx1MDAzYyAwKSB7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTM0NS1cdFx0XHRcdGRldl9lcnIoXHUwMDI2Y2F0Yy1cdTAwM2V1c2JkZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzozNDY6XHRcdFx0XHRcdFwmIzM0O3N1Ym1pdChyeF91cmIpIHN0YXR1cyAlZFxcblwmIzM0OywgcmVzKTtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMzQ3LVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTc0Nj1zdGF0aWMgaW50IGNhdGNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtNzU0LVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo3NTU6XHR1c2Jfa2lsbF91cmIoY2F0Yy1cdTAwM2VyeF91cmIpO1xuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy03NTYtXHR1c2Jfa2lsbF91cmIoY2F0Yy1cdTAwM2V0eF91cmIpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9Nzc4PXN0YXRpYyBpbnQgY2F0Y19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODMzLVx0Y2F0Yy1cdTAwM2V0eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo4MzQ6XHRjYXRjLVx1MDAzZXJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTgzNS1cdGNhdGMtXHUwMDNlaXJxX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTgzNi1cdGlmICgoIWNhdGMtXHUwMDNlY3RybF91cmIpIHx8ICghY2F0Yy1cdTAwM2V0eF91cmIpIHx8XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjgzNzpcdCAgICAoIWNhdGMtXHUwMDNlcnhfdXJiKSB8fCAoIWNhdGMtXHUwMDNlaXJxX3VyYikpIHtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODM4LVx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtObyBmcmVlIHVyYnMgYXZhaWxhYmxlLlxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04NjAtXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjg2MTpcdHVzYl9maWxsX2J1bGtfdXJiKGNhdGMtXHUwMDNlcnhfdXJiLCB1c2JkZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JkZXYsIENBVENfVVNCX0VQX0JVTEspLFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04NjItXHRcdFx0ICBjYXRjLVx1MDAzZXJ4X2J1ZiwgcGt0c3osIGNhdGNfcnhfZG9uZSwgY2F0Yyk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05NjItXHR1c2JfZnJlZV91cmIoY2F0Yy1cdTAwM2V0eF91cmIpO1xuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo5NjM6XHR1c2JfZnJlZV91cmIoY2F0Yy1cdTAwM2VyeF91cmIpO1xuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05NjQtXHR1c2JfZnJlZV91cmIoY2F0Yy1cdTAwM2VpcnFfdXJiKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTk3Mj1zdGF0aWMgdm9pZCBjYXRjX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05ODAtXHRcdHVzYl9mcmVlX3VyYihjYXRjLVx1MDAzZXR4X3VyYik7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjk4MTpcdFx0dXNiX2ZyZWVfdXJiKGNhdGMtXHUwMDNlcnhfdXJiKTtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtOTgyLVx0XHR1c2JfZnJlZV91cmIoY2F0Yy1cdTAwM2VpcnFfdXJiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFJlY2VpdmUgQnVmZmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY2F0Yy0mZ3Q7cnhfYnVmYC4gIFRoYXQmIzM5O3MgdGhlIHJlY2VpdmUgYnVmZmVyLCBjbGVhcmx5LiAgQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGJldHRlci4gIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBrbm93IGhvdyB0aGlzIHRoaW5nIGlzIGRlZmluZWQgYW5kLCBjcml0aWNhbGx5LCBob3cgYW5kIHdoZXJlIGl0JiMzOTtzIGFsbG9jYXRlZC4gIElzIGl0IGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYXJyYXk/IEEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlcj8gV2hhdCYjMzk7cyBpdHMgc2l6ZT8gV2hhdCYjMzk7cyBpdHMgbGlmZXRpbWU/IEFsbCB0aGVzZSBkZXRhaWxzIGFyZSBjcnVjaWFsLiBXaXRob3V0IGtub3dpbmcgaG93IHRoZSBtZW1vcnkgZm9yIGBjYXRjLSZndDtyeF9idWZgIGlzIG1hbmFnZWQsIEkgY2FuJiMzOTt0IHBvc3NpYmx5IHJlYXNvbiBlZmZlY3RpdmVseSBhYm91dCBpdHMgdXNhZ2UsIHBvdGVudGlhbCBmb3IgZXJyb3JzIChsaWtlIG92ZXJmbG93cyBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIGl0cyBlZmZpY2llbmN5LiAgVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgZGVmaW5pdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhfYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NhdGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2F0Yy5jPTE1Mz1zdHJ1Y3QgY2F0YyB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0xNjMtXHR1OCB0eF9idWZbMl1bVFhfTUFYX0JVUlNUICogKFBLVF9TWiAmIzQzOyAyKV07XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjE2NDpcdHU4IHJ4X2J1ZltSWF9NQVhfQlVSU1QgKiAoUEtUX1NaICYjNDM7IDIpXTtcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTY1LVx0dTggaXJxX2J1ZlsyXTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTc3OD1zdGF0aWMgaW50IGNhdGNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTg2MS1cdHVzYl9maWxsX2J1bGtfdXJiKGNhdGMtXHUwMDNlcnhfdXJiLCB1c2JkZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JkZXYsIENBVENfVVNCX0VQX0JVTEspLFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo4NjI6XHRcdFx0ICBjYXRjLVx1MDAzZXJ4X2J1ZiwgcGt0c3osIGNhdGNfcnhfZG9uZSwgY2F0Yyk7XG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTg2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk3NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKlZlcmlmeWluZyBgY2F0Y2AgQWxsb2NhdGlvbiBpbiBQcm9iZSoqCgpPa2F5LCBzbyB0aGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBgc3RydWN0IGNhdGNgIGlzIGt6YWxsb2NhdGVkIGR1cmluZyB0aGUgcHJvYmUgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBzcGVjaWZpY3Mgb2YgKmhvdyogdGhpcyBhbGxvY2F0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgdGhlIGt6YWxsb2NhdGlvbiBwcm9jZXNzLiBUaGlzIGlzIGZ1bmRhbWVudGFsOyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBoZXJlIGNvdWxkIGxlYWQgdG8gY2FzY2FkaW5nIGlzc3Vlcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb25lIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NhdGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHJlcXVlc3QsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBjYXRjLmMgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiBsaW5lcyA3NzggdGhyb3VnaCA4MzAgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvY2F0Yy5jYC4gVGhpcyBzZWN0aW9uIGxpa2VseSBjb250YWlucyBzb21lIGNydWNpYWwgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBhZGFwdGVyIGRyaXZlciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0LiBJJiMzOTttIGd1ZXNzaW5nIGl0IGhhbmRsZXMgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIGRldmljZSYjMzk7cyBvcGVyYXRpb24sIG1heWJlIHBhY2tldCBoYW5kbGluZywgaW50ZXJydXB0IG1hbmFnZW1lbnQsIG9yIHBvdGVudGlhbGx5IGRldmljZSBpbml0aWFsaXphdGlvbiBvciBzaHV0ZG93biBzZXF1ZW5jZSwganVkZ2luZyBieSB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgbG9naWNhbCBmbG93IGFuZCB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkIHdpdGhpbiB0aGF0IHNlZ21lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZHJpdmVyJiMzOTtzIHJlc3BvbnNpYmlsaXRpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGJ1Z3MgdGhhdCBtaWdodCBiZSBoaWRpbmcgd2l0aGluIHRoYXQgYmxvY2sgb2YgY29kZS4gVGhpcyBzZWdtZW50IGNvdWxkIHBvdGVudGlhbGx5IG9mZmVyIGluc2lnaHRzIGludG8gYXNwZWN0cyBzdWNoIGFzLCB0aGUgZHJpdmVy4oCZcyBhYmlsaXR5IHRvIGhhbmRsZSBkaWZmZXJlbnQgVVNCIHRyYW5zZmVyIHR5cGVzLCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsIG5ldHdvcmtpbmcgc3RhY2sgb3IgbWF5YmUgaXTigJlzIGFiaWxpdHkgdG8gaGFuZGxlIHRoZSBudWFuY2VzIG9mIHRoZSBDQVRDIGhhcmR3YXJlIGl0c2VsZi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIHRoaXMgc2VjdGlvbiBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2F0Yy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3Nzg6XHRzdGF0aWMgaW50IGNhdGNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbiA3Nzk6XHR7XG4gNzgwOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZpbnRmLVx1MDAzZWRldjtcbiA3ODE6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIDc4MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiA3ODM6XHRcdHN0cnVjdCBjYXRjICpjYXRjO1xuIDc4NDpcdFx0dTggYnJvYWRjYXN0W0VUSF9BTEVOXTtcbiA3ODU6XHRcdHU4ICptYWNidWY7XG4gNzg2Olx0XHRpbnQgcGt0c3osIHJldCA9IC1FTk9NRU07XG4gNzg3Olx0XHRzdGF0aWMgY29uc3QgdTggYnVsa19lcF9hZGRyW10gPSB7XG4gNzg4Olx0XHRcdENBVENfVVNCX0VQX0JVTEsgfCBVU0JfRElSX09VVCxcbiA3ODk6XHRcdFx0Q0FUQ19VU0JfRVBfQlVMSyB8IFVTQl9ESVJfSU4sXG4gNzkwOlx0XHRcdDB9O1xuIDc5MTpcdFx0c3RhdGljIGNvbnN0IHU4IGludF9lcF9hZGRyW10gPSB7XG4gNzkyOlx0XHRcdENBVENfVVNCX0VQX0lOVF9JTiB8IFVTQl9ESVJfSU4sXG4gNzkzOlx0XHRcdDB9O1xuIDc5NDpcdFxuIDc5NTpcdFx0bWFjYnVmID0ga21hbGxvYyhFVEhfQUxFTiwgR0ZQX0tFUk5FTCk7XG4gNzk2Olx0XHRpZiAoIW1hY2J1ZilcbiA3OTc6XHRcdFx0Z290byBlcnJvcjtcbiA3OTg6XHRcbiA3OTk6XHRcdGlmICh1c2Jfc2V0X2ludGVyZmFjZSh1c2JkZXYsXG4gODAwOlx0XHRcdFx0aW50Zi1cdTAwM2VhbHRzZXR0aW5nLVx1MDAzZWRlc2MuYkludGVyZmFjZU51bWJlciwgMSkpIHtcbiA4MDE6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0NhbiYjMzk7dCBzZXQgYWx0c2V0dGluZyAxLlxcblwmIzM0Oyk7XG4gODAyOlx0XHRcdHJldCA9IC1FSU87XG4gODAzOlx0XHRcdGdvdG8gZmFpbF9tZW07XG4gODA0Olx0XHR9XG4gODA1Olx0XG4gODA2Olx0XHQvKiBWZXJpZnkgdGhhdCBhbGwgcmVxdWlyZWQgZW5kcG9pbnRzIGFyZSBwcmVzZW50ICovXG4gODA3Olx0XHRpZiAoIXVzYl9jaGVja19idWxrX2VuZHBvaW50cyhpbnRmLCBidWxrX2VwX2FkZHIpIHx8XG4gODA4Olx0XHQgICAgIXVzYl9jaGVja19pbnRfZW5kcG9pbnRzKGludGYsIGludF9lcF9hZGRyKSkge1xuIDgwOTpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7TWlzc2luZyBvciBpbnZhbGlkIGVuZHBvaW50c1xcblwmIzM0Oyk7XG4gODEwOlx0XHRcdHJldCA9IC1FTk9ERVY7XG4gODExOlx0XHRcdGdvdG8gZmFpbF9tZW07XG4gODEyOlx0XHR9XG4gODEzOlx0XG4gODE0Olx0XHRuZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGNhdGMpKTtcbiA4MTU6XHRcdGlmICghbmV0ZGV2KVxuIDgxNjpcdFx0XHRnb3RvIGZhaWxfbWVtO1xuIDgxNzpcdFxuIDgxODpcdFx0Y2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gODE5Olx0XG4gODIwOlx0XHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmNhdGNfbmV0ZGV2X29wcztcbiA4MjE6XHRcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7XG4gODIyOlx0XHRuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZvcHM7XG4gODIzOlx0XG4gODI0Olx0XHRjYXRjLVx1MDAzZXVzYmRldiA9IHVzYmRldjtcbiA4MjU6XHRcdGNhdGMtXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xuIDgyNjpcdFxuIDgyNzpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y2F0Yy1cdTAwM2V0eF9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI3MQoJCQkJCQkJb3V0cHV0OiAyNTMKCQkJCQkJCXRob3VnaHRzOiAyMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBDQVRDIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdy4gVGhlIGBhbGxvY19ldGhlcmRldmAgZnVuY3Rpb24gdXNlcyBgYWxsb2NfbmV0ZGV2X21xc2Agd2hpY2gga3phbGxvY3MgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcHJpdmF0ZSBkYXRhLiBUaGF0IHBhcnQgaXMgcHJldHR5IHN0YW5kYXJkLiAgQ3J1Y2lhbGx5LCBgY2F0Yy0mZ3Q7cnhfYnVmYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBnb29kIGZvciBhdm9pZGluZyBzb21lIGlzc3Vlcy4gIFRoZSBVU0IgY29udHJvbGxlciBmaWxscyBgcnhfYnVmYCB3aXRoIGluY29taW5nIGRhdGEgdXAgdG8gYHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aGAuIFRoYXQgdmFyaWFibGUsIGB1cmItJmd0O2FjdHVhbF9sZW5ndGhgLCBpcyBrZXkgaGVyZS4KCk5vdywgZm9jdXNpbmcgb24gdGhlIHBhdGNoOiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdGhlIGBjYXRjX3J4X2RvbmVgIGZ1bmN0aW9uLCB3aGljaCBoYW5kbGVzIHJlY2VpdmVkIHBhY2tldHMuICBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBjaGVjaywgYGlmIChwa3RfbGVuICZndDsgdXJiLSZndDthY3R1YWxfbGVuZ3RoKWAsIHdoaWNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgbWVhbnQgdG8gcHJldmVudCByZWFkaW5nIGJleW9uZCB0aGUgcmVjZWl2ZWQgZGF0YS4gSG93ZXZlciwgdGhlcmUmIzM5O3MgYSBwcm9ibGVtLCBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIG9yIG92ZXJmbG93LCBjb3VsZCBvY2N1ciB3aXRoIHRoZSBwcmV2aW91cyBjaGVjay4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBgcmVtYWluaW5nYCB2YXJpYWJsZSB0byBjaGVjayBob3cgbXVjaCBkYXRhIGlzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyLiBUaGUgY3JpdGljYWwgY2hlY2sgbm93IGludm9sdmVzIHRoaXMgYHJlbWFpbmluZ2AgdmFyaWFibGUgY29tYmluZWQgd2l0aCB0aGUgYHBrdF9sZW5gIChwYWNrZXQgbGVuZ3RoKS4gIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIGFkZGl0aW9uYWwgY2hlY2tzOgoKMS4gIGBpZiAocmVtYWluaW5nICZsdDsgcGt0X29mZnNldClgOiBUaGlzIGF2b2lkcyByZWFkaW5nIHBhc3QgdGhlIGJ1ZmZlciB3aGVuIGNhbGN1bGF0aW5nIGBwa3RfbGVuYC4KMi4gYGlmIChwa3RfbGVuICZsdDsgRVRIX0hMRU4gfHwgcGt0X2xlbiAmIzQzOyBwa3Rfb2Zmc2V0ICZndDsgcmVtYWluaW5nKWA6IFRoaXMgbm93IGNoZWNrcyB0aGUgbWluaW11bSBwYWNrZXQgc2l6ZSBhbmQgZW5zdXJlcyB0aGF0IHRoZSBwYWNrZXQgbGVuZ3RoLCBwbHVzIGFueSBvZmZzZXQsIGRvZXMgbm90IGV4Y2VlZCB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlci4KClRoZSBlc3NlbmNlIG9mIHRoZSBmaXggaXMgdGhhdCBpdCBoYXJkZW5zIHRoZSBib3VuZHMgY2hlY2tzLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byBvdXQtb2YtYm91bmRzIHJlYWRzIGlmIHRoZSBgcGt0X2xlbmAgZmllbGQgd2FzIG1hbmlwdWxhdGVkLCBvciB0aGUgZGF0YSByZWNlaXZlZCB3YXMgY29ycnVwdC4gSXQgZGlkbiYjMzk7dCBhY2NvdW50IGZvciB0aGUgcG9zc2liaWxpdHkgb2YgYSBzbWFsbGVyLXRoYW4tZXhwZWN0ZWQgb3IgbWFsZm9ybWVkIHBhY2tldC4KClRoZSBwcmltYXJ5IGJ1ZyBiZWluZyBmaXhlZCBpcyBwcmVjaXNlbHkgYW4gKm91dC1vZi1ib3VuZHMgcmVhZCogaW4gdGhlIFVTQiB0cmFuc2ZlciBidWZmZXIsIHBvdGVudGlhbGx5IGNhdXNlZCBieSBjb3JydXB0ZWQgVVNCIHRyYW5zZmVyIGRhdGEuIFNwZWNpZmljYWxseSwgYGxlMTZfdG9fY3B1cGAgY291bGQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aGAgaWYgYHBrdF9zdGFydGAgd2FzIG5lYXIgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBvciB0aGUgb3ZlcmFsbCBwYWNrZXQgYHBrdF9sZW5gIGRpZCBub3QgYWNjb3VudCBmb3IgdGhlIHRvdGFsIGJ5dGVzIHdpdGhpbiBgdXJiLSZndDthY3R1YWxfbGVuZ3RoYC4KCk5vdywgZG9lcyB0aGlzIHBhdGNoICppbnRyb2R1Y2UqIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhhdCYjMzk7cyB0aGUgS01TQU4gcXVlc3Rpb24uICBMZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoZSBLTVNBTiBydWxlcyBhbmQgY29uZGl0aW9ucy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBJdCBkb2VzbiYjMzk7dCBhbGxvY2F0ZSBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gIEl0IGFjdHVhbGx5ICp0aWdodGVucyogYm91bmRzIGNoZWNrcy4gVGhlIG5ldyBib3VuZHMgY2hlY2tzIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIGEgcmVjZWl2ZWQgVVNCIHBhY2tldC4KCkNvbnNpZGVyaW5nIHRoZSBjb25kaXRpb25zIGZvciBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgOiBUaGlzIHBhdGNoIGRvZXMgbm90IG1vZGlmeSBvciBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIHJpc2tzLiBBbGwgdmFyaWFibGVzIGFuZCBkYXRhIGludm9sdmVkIGFyZSBpbml0aWFsaXplZDogYHJlbWFpbmluZ2AgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgcG9pbnRlciBzdWJ0cmFjdGlvbiwgYW5kIGBwa3RfbGVuYCBpcyBpbml0aWFsaXplZCB1c2luZyBlaXRoZXIgYSByZWFkIGZyb20gbWVtb3J5IG9yIHRoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIGJ1ZmZlci4gVGhlIGNvZGUgZW5zdXJlcyB0aGF0IHRoZSBieXRlcyBjb3BpZWQgaW50byB0aGUgc2tiLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgdGhlIGtlcm5lbCwgY29tZSBmcm9tIGluaXRpYWxpemVkIHJlY2VpdmVkIGRhdGEgd2l0aGluIGB1cmItJmd0O2FjdHVhbF9sZW5ndGhgLiAgVGhlIHBhdGNoIHByaW1hcmlseSBtaXRpZ2F0ZXMgKm91dC1vZi1ib3VuZHMgYWNjZXNzKiB2dWxuZXJhYmlsaXRpZXMsIHdoaWNoIGFyZSB3aGF0IEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gS01TQU4gaXMgZm9yIGRldGVjdGluZyAqcmVhZHMqIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiB3aWxsIGNhdGNoIGFueSBidWdzIGludHJvZHVjZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gIFRoZSBwcmltYXJ5IGdvYWwgb2YgdGhlIHBhdGNoIGlzIHRvIGltcGxlbWVudCBib3VuZHMgY2hlY2tzIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJiMzOTtyZW1haW5pbmcmIzM5OykgYW5kIGVuc3VyZXMgdGhhdCBwa3Rfb2Zmc2V0IGJ5dGVzIGFyZSBhdmFpbGFibGUgYmVmb3JlIHJlYWRpbmcgdGhlIHBhY2tldCBsZW5ndGggaGVhZGVyLCBhbmQgdmVyaWZpZXMgdGhhdCBwa3RfbGVuIGlzIGF0IGxlYXN0IEVUSF9ITEVOIGFuZCBwa3RfbGVuICYjNDM7IHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgb24gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJiMzOTtyZW1haW5pbmcmIzM5OykgYW5kIGVuc3VyZXMgdGhhdCBwa3Rfb2Zmc2V0IGJ5dGVzIGFyZSBhdmFpbGFibGUgYmVmb3JlIHJlYWRpbmcgdGhlIHBhY2tldCBsZW5ndGggaGVhZGVyLCBhbmQgdmVyaWZpZXMgdGhhdCBwa3RfbGVuIGlzIGF0IGxlYXN0IEVUSF9ITEVOIGFuZCBwa3RfbGVuICYjNDM7IHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgb24gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyODoyNi43NDA5MzExMDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI1MDgyOTk1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0NBVENcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNhdGNfcnhfZG9uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJ3JlbWFpbmluZycpIGFuZCBlbnN1cmVzIHRoYXQgcGt0X29mZnNldCBieXRlcyBhcmUgYXZhaWxhYmxlIGJlZm9yZSByZWFkaW5nIHRoZSBwYWNrZXQgbGVuZ3RoIGhlYWRlciwgYW5kIHZlcmlmaWVzIHRoYXQgcGt0X2xlbiBpcyBhdCBsZWFzdCBFVEhfSExFTiBhbmQgcGt0X2xlbiArIHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBvbiB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGluIGNhdGNfcnhfZG9uZSgpIGluIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFJYIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChlLmcuIER1bW15IEhDRCAvIHJhdy1nYWRnZXQpLiBGdXp6aW5nIFVTQiBwYWNrZXQgcmVjZXB0aW9uIGNhbiB2ZXJpZnkgYm91bmRzIGNoZWNrcyBhbmQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBwYXJzaW5nIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI4OjI2Ljc0MDkzNjMwN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMzEyMjMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0YjgwNDZkNGY1MDkxYzM0MTMzOGM3MTI4MmY1ZDA1MmE5NWVlZWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDA6Mjg6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcXG5pbmRleCA5NmU4MmY5NGVkY2Y4Li4zOWI2NzhmMTc1ZGQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jXFxuQEAgLTIzMywxNyArMjMzLDI2IEBAIHN0YXRpYyB2b2lkIGNhdGNfcnhfZG9uZShzdHJ1Y3QgdXJiICp1cmIpXFxuIFxcdH1cXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0aWYoIWNhdGMtXFx1MDAzZWlzX2Y1dTAxMSkge1xcbi1cXHRcXHRcXHRwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYqKXBrdF9zdGFydCk7XFxuLVxcdFxcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2UgdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoKSB7XFxuK1xcdFxcdGludCByZW1haW5pbmcgPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGggLVxcbitcXHRcXHRcXHRcXHQocGt0X3N0YXJ0IC0gKHU4ICopdXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXIpO1xcbitcXG4rXFx0XFx0aWYgKCFjYXRjLVxcdTAwM2Vpc19mNXUwMTEpIHtcXG4rXFx0XFx0XFx0aWYgKHJlbWFpbmluZyBcXHUwMDNjIHBrdF9vZmZzZXQpIHtcXG4gXFx0XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuIFxcdFxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKXBrdF9zdGFydCk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHBrdF9sZW4gPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGg7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2MgRVRIX0hMRU4gfHwgcGt0X2xlbiArIHBrdF9vZmZzZXQgXFx1MDAzZSByZW1haW5pbmcpIHtcXG4rXFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6Mjg6MjguMzY0Njk0OTg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Mjg0NjkwODM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfQ0FUQ1wiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2F0Y19yeF9kb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IGxlbmd0aCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgbG9naWMgaW4gY2F0Y19yeF9kb25lKCkgaW4gZHJpdmVycy9uZXQvdXNiL2NhdGMuYy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgUlggVVJCIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhlIENBVEMgVVNCIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gKGUuZy4gRHVtbXkgSENEIC8gcmF3LWdhZGdldCkuIEZ1enppbmcgVVNCIHBhY2tldCByZWNlcHRpb24gY2FuIHZlcmlmeSBib3VuZHMgY2hlY2tzIGFuZCB1bmNvdmVyIHJlZ3Jlc3Npb25zIG9yIHBhcnNpbmcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGI4MDQ2ZDRmNTA5MWMzNDEzMzhjNzEyODJmNWQwNTJhOTVlZWVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDA6Mjg6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuY1xuaW5kZXggOTZlODJmOTRlZGNmOC4uMzliNjc4ZjE3NWRkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmNcbkBAIC0yMzMsMTcgKzIzMywyNiBAQCBzdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiKVxuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZighY2F0Yy1cdTAwM2Vpc19mNXUwMTEpIHtcbi1cdFx0XHRwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYqKXBrdF9zdGFydCk7XG4tXHRcdFx0aWYgKHBrdF9sZW4gXHUwMDNlIHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoKSB7XG4rXHRcdGludCByZW1haW5pbmcgPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCAtXG4rXHRcdFx0XHQocGt0X3N0YXJ0IC0gKHU4ICopdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcik7XG4rXG4rXHRcdGlmICghY2F0Yy1cdTAwM2Vpc19mNXUwMTEpIHtcbitcdFx0XHRpZiAocmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0KSB7XG4gXHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XG4gXHRcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbitcdFx0XHRwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilwa3Rfc3RhcnQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHBrdF9sZW4gPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiBcdFx0fVxuIFxuK1x0XHRpZiAocGt0X2xlbiBcdTAwM2MgRVRIX0hMRU4gfHwgcGt0X2xlbiArIHBrdF9vZmZzZXQgXHUwMDNlIHJlbWFpbmluZykge1xuK1x0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcbitcdFx0XHRjYXRjLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuIFx0XHRpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSlcbiBcdFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyODoyOC4zNjQ2OTY2ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODQ2NzMwNzU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENBVEMgVVNCIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBwb2ludGVkIHRvIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgQ0FUQyBVU0IgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBpbiBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGRpZmYgYW5kIHRoZSBmaWxlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFzIGNoYW5nZWQsIGFuZCB3aGF0IGl04oCZcyBpbnRlbmRlZCB0byBhY2NvbXBsaXNoLiBJIHNlZSB0aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgY2F0Y19yeF9kb25lYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGdldCBhIGJyb2FkZXIgdmlldyBhcm91bmQgbGluZSAyMzMgaW4gdGhhdCBmaWxlLiBJIGNhbiBxdWlja2x5IHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBnb29kIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3VzYi9jYXRjLmNgIGFuZCBiZWdpbiB0byByZWNvbnN0cnVjdCB0aGUgY2hhbmdlcyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI4OjU2LjgzMjAwNjg5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdCNkZWZpbmUgY2F0Y193cml0ZV9tZW1fYXN5bmMoY2F0YywgYWRkciwgYnVmLCBzaXplKVxcdGNhdGNfY3RybF9hc3luYyhjYXRjLCBVU0JfRElSX09VVCwgV3JpdGVNZW0sIDAsIGFkZHIsIGJ1Ziwgc2l6ZSwgTlVMTClcXG4gMjExOlxcdFxcbiAyMTI6XFx0LypcXG4gMjEzOlxcdCAqIFJlY2VpdmUgcm91dGluZXMuXFxuIDIxNDpcXHQgKi9cXG4gMjE1OlxcdFxcbiAyMTY6XFx0c3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYilcXG4gMjE3OlxcdHtcXG4gMjE4OlxcdFxcdHN0cnVjdCBjYXRjICpjYXRjID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbiAyMTk6XFx0XFx0dTggKnBrdF9zdGFydCA9IHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xcbiAyMjA6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMjIxOlxcdFxcdGludCBwa3RfbGVuLCBwa3Rfb2Zmc2V0ID0gMDtcXG4gMjIyOlxcdFxcdGludCBzdGF0dXMgPSB1cmItXFx1MDAzZXN0YXR1cztcXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0aWYgKCFjYXRjLVxcdTAwM2Vpc19mNXUwMTEpIHtcXG4gMjI1OlxcdFxcdFxcdGNsZWFyX2JpdChSWF9SVU5OSU5HLCBcXHUwMDI2Y2F0Yy1cXHUwMDNlZmxhZ3MpO1xcbiAyMjY6XFx0XFx0XFx0cGt0X29mZnNldCA9IDI7XFxuIDIyNzpcXHRcXHR9XFxuIDIyODpcXHRcXG4gMjI5OlxcdFxcdGlmIChzdGF0dXMpIHtcXG4gMjMwOlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnVyYi1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsIFxcXCJyeF9kb25lLCBzdGF0dXMgJWQsIGxlbmd0aCAlZFxcXFxuXFxcIixcXG4gMjMxOlxcdFxcdFxcdFxcdHN0YXR1cywgdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoKTtcXG4gMjMyOlxcdFxcdFxcdHJldHVybjtcXG4gMjMzOlxcdFxcdH1cXG4gMjM0OlxcdFxcbiAyMzU6XFx0XFx0ZG8ge1xcbiAyMzY6XFx0XFx0XFx0aW50IHJlbWFpbmluZyA9IHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCAtXFxuIDIzNzpcXHRcXHRcXHRcXHRcXHQocGt0X3N0YXJ0IC0gKHU4ICopdXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXIpO1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRcXHRpZiAoIWNhdGMtXFx1MDAzZWlzX2Y1dTAxMSkge1xcbiAyNDA6XFx0XFx0XFx0XFx0aWYgKHJlbWFpbmluZyBcXHUwMDNjIHBrdF9vZmZzZXQpIHtcXG4gMjQxOlxcdFxcdFxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xcbiAyNDI6XFx0XFx0XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcXG4gMjQzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNDQ6XFx0XFx0XFx0XFx0fVxcbiAyNDU6XFx0XFx0XFx0XFx0cGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopcGt0X3N0YXJ0KTtcXG4gMjQ2OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDI0NzpcXHRcXHRcXHRcXHRwa3RfbGVuID0gdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoO1xcbiAyNDg6XFx0XFx0XFx0fVxcbiAyNDk6XFx0XFxuIDI1MDpcXHRcXHRcXHRpZiAocGt0X2xlbiBcXHUwMDNjIEVUSF9ITEVOIHx8IHBrdF9sZW4gKyBwa3Rfb2Zmc2V0IFxcdTAwM2UgcmVtYWluaW5nKSB7XFxuIDI1MTpcXHRcXHRcXHRcXHRjYXRjLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcXG4gMjUyOlxcdFxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XFxuIDI1MzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjU0OlxcdFxcdFxcdH1cXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0XFx0aWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKSkpXFxuIDI1NzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDI1ODpcXHRcXG4gMjU5OlxcdFxcdFxcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgcGt0X3N0YXJ0ICsgcGt0X29mZnNldCwgcGt0X2xlbik7XFxuIDI2MDpcXHRcXHRcXHRza2JfcHV0KHNrYiwgcGt0X2xlbik7XFxuIDI2MTpcXHRcXG4gMjYyOlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGNhdGMtXFx1MDAzZW5ldGRldik7XFxuIDI2MzpcXHRcXHRcXHRuZXRpZl9yeChza2IpO1xcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRcXHRjYXRjLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnJ4X3BhY2tldHMrKztcXG4gMjY2OlxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjtcXG4gMjY3OlxcdFxcbiAyNjg6XFx0XFx0XFx0LyogRjVVMDExIG9ubHkgZG9lcyBvbmUgcGFja2V0IHBlciBSWCAqL1xcbiAyNjk6XFx0XFx0XFx0aWYgKGNhdGMtXFx1MDAzZWlzX2Y1dTAxMSlcXG4gMjcwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNzE6XFx0XFx0XFx0cGt0X3N0YXJ0ICs9ICgoKHBrdF9sZW4gKyAxKSBcXHUwMDNlXFx1MDAzZSA2KSArIDEpIFxcdTAwM2NcXHUwMDNjIDY7XFxuIDI3MjpcXHRcXG4gMjczOlxcdFxcdH0gd2hpbGUgKHBrdF9zdGFydCAtICh1OCAqKSB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlciBcXHUwMDNjIHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCk7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdGlmIChjYXRjLVxcdTAwM2Vpc19mNXUwMTEpIHtcXG4gMjc2OlxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2Y2F0Yy1cXHUwMDNlcmVjcV9zeikpIHtcXG4gMjc3OlxcdFxcdFxcdFxcdGludCBzdGF0ZTtcXG4gMjc4OlxcdFxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmNhdGMtXFx1MDAzZXJlY3Ffc3opO1xcbiAyNzk6XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhjYXRjLVxcdTAwM2VuZXRkZXYsIFxcXCJnZXR0aW5nIGV4dHJhIHBhY2tldFxcXFxuXFxcIik7XFxuIDI4MDpcXHRcXHRcXHRcXHR1cmItXFx1MDAzZWRldiA9IGNhdGMtXFx1MDAzZXVzYmRldjtcXG4gMjgxOlxcdFxcdFxcdFxcdGlmICgoc3RhdGUgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSBcXHUwMDNjIDApIHtcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdG5ldGRldl9kYmcoY2F0Yy1cXHUwMDNlbmV0ZGV2LFxcbiAyODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcInN1Ym1pdChyeF91cmIpIHN0YXR1cyAlZFxcXFxuXFxcIiwgc3RhdGUpO1xcbiAyODQ6XFx0XFx0XFx0XFx0fVxcbiAyODU6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjg2OlxcdFxcdFxcdFxcdGNsZWFyX2JpdChSWF9SVU5OSU5HLCBcXHUwMDI2Y2F0Yy1cXHUwMDNlZmxhZ3MpO1xcbiAyODc6XFx0XFx0XFx0fVxcbiAyODg6XFx0XFx0fVxcbiAyODk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyODo1Ni44MzIxMDM3ODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDMwMzI2ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGBjYXRjLmNgIFVTQiBFdGhlcm5ldCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjYXRjLmNgIGZpbGUsIGl0J3MgdGhlIFVTQiBFdGhlcm5ldCBkcml2ZXIgZm9yIHRoZSBDQVRDIEVMMTIxMEEgTmV0TWF0ZSBhbmQgQmVsa2luIEY1VTAxMS4gTmF0dXJhbGx5LCBteSBtaW5kIGdvZXMgdG8gZnV6emluZyBwb3NzaWJpbGl0aWVzLiBDYW4gSSBhY3R1YWxseSBmdXp6IFVTQiBkcml2ZXJzIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAsIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IFRoZSBhbnN3ZXIsIHRoYW5rZnVsbHksIGlzIHllcyEgU3l6a2FsbGVyIGhhcyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcyB1c2luZyBgcmF3LWdhZGdldGAgYW5kIHRoZSBEdW1teSBIQ0QsIHNwZWNpZmljYWxseSB0aHJvdWdoIGAvZGV2L3Jhdy1nYWRnZXRgIGFuZCB0aGUgYHN5el91c2JfY29ubmVjdGAgc3lzdGVtIGNhbGwuXG5cblRoaXMgaXMgZXhjZWxsZW50IG5ld3MgYmVjYXVzZSBVU0IgZHJpdmVycywgZXNwZWNpYWxseSBuZXR3b3JrIGRyaXZlcnMgbGlrZSBgY2F0Y2AsIGBjZGNfZXRoZXJgLCBhbmQgYHI4MTUyYCwgYXJlIHByYWN0aWNhbGx5IHN0YW5kYXJkIGZ1enppbmcgdGFyZ2V0cyBmb3IgU3l6a2FsbGVyLiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBDQVRDIGRyaXZlciBpcyBhY3R1YWxseSByZWFjaGFibGUgdGhyb3VnaCB0aGlzIFVTQiBlbXVsYXRpb24uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb246IGNhbiBTeXprYWxsZXIgc3VjY2Vzc2Z1bGx5IGNvbm5lY3QgYSBDQVRDIFVTQiBkZXZpY2U/IFRoYXQncyB3aGF0IEkgd2FudCB0byB2ZXJpZnkuIFRvIG1ha2Ugc3VyZSwgSSBzaG91bGQgY2hlY2sgdGhlIFVTQiB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzIGZvciB0aGUgQ0FUQyBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyODo1OS4yNjI0MzM3NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUzNzA4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYXRjX2lkX3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NhdGMuYz05NzI9c3RhdGljIHZvaWQgY2F0Y19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05OTAtXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo5OTE6c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNhdGNfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTk5Mi1cXHR7IFVTQl9ERVZJQ0UoMHgwNDIzLCAweGEpIH0sXFx0LyogQ0FUQyBOZXRtYXRlLCBCZWxraW4gRjVVMDExICovXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTk5Ny1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjk5ODpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2F0Y19pZF90YWJsZSk7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05OTktXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYz0xMDAwPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjYXRjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTAwMy1cXHQuZGlzY29ubmVjdCA9XFx0Y2F0Y19kaXNjb25uZWN0LFxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM6MTAwNDpcXHQuaWRfdGFibGUgPVxcdGNhdGNfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0xMDA1LVxcdC5kaXNhYmxlX2h1Yl9pbml0aWF0ZWRfbHBtID0gMSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6Mjg6NTkuMzEwOTc3MzYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTAwOTUzMjA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVU0IgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBjYXRjYCBVU0IgZHJpdmVyLCBhbmQgaW1tZWRpYXRlbHkgSSByZWNvZ25pemUgdGhhdCBgY2F0Y2AgaXMgaW5kZWVkIGEgVVNCIGRyaXZlciwgbGlrZWx5IGZvciBhIG5ldHdvcmsgY2FyZCBvciBzaW1pbGFyIGRldmljZS4gSSBrbm93IHRoYXQgU3l6a2FsbGVyIGlzIGEgZmFudGFzdGljIHRvb2wgZm9yIGZpbmRpbmcgdGhlc2Uga2luZHMgb2YgYnVncy4gSXQgb2Z0ZW4gZmluZHMgaXNzdWVzIGluIFVTQiBkcml2ZXJzLCBlc3BlY2lhbGx5IGluIHRoZSBjb21wbGV0aW9uIGhhbmRsZXJzIGZvciByZWNlaXZlIChSWCkgYW5kIHRyYW5zbWl0IChUWCkgVVJCcywgYW5kIGluIHRoZSBwcm9iZSBoYW5kbGVycy4gVGhlc2UgYnVncyBvZnRlbiBpbnZvbHZlIG1hbGZvcm1lZCBVU0IgZGVzY3JpcHRvcnMgb3IgcGFja2V0cyB0aGF0IGFyZSBpbnRlbnRpb25hbGx5IGNyYWZ0ZWQgdG8gdHJpZ2dlciB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgYGNhdGNfcnhfZG9uZWAgZnVuY3Rpb24gYmVjYXVzZSBpdOKAmXMgYSBjbGFzc2ljIHBsYWNlIHRvIGZpbmQgaXNzdWVzIOKAkyBpdCBoYW5kbGVzIHRoZSByZWNlaXZlZCBkYXRhLCBhbmQgdGhlIGNvZGUgc25pcHBldCBmb2N1c2VzIG9uIHZhbGlkYXRpbmcgcGFja2V0IGxlbmd0aHMuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgaXNzdWUgc2VlbXMgdG8gYmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCB0cmlnZ2VyZWQgYnkgYW4gaW5jb3JyZWN0IGNoZWNrIG9mIHRoZSBwYWNrZXQgbGVuZ3RoIGFnYWluc3QgdGhlIHJlY2VpdmVkIGRhdGEgYnVmZmVyLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0IHNob3dlZCBhbiBpc3N1ZSB3aXRoIGhvdyBgcGt0X2xlbmAgd2FzIGNoZWNrZWQgYWdhaW5zdCBgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGhgLiBCYXNpY2FsbHksIGlmIGBwa3RfbGVuYCAodGhlIGV4cGVjdGVkIHBhY2tldCBsZW5ndGgpIHdhcyBncmVhdGVyIHRoYW4gYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCAodGhlIGFjdHVhbCBkYXRhIHJlY2VpdmVkKSwgaXQgd2FzIGZsYWdnZWQgYXMgYW4gZXJyb3IsIGFuZCB0aGUgcGFja2V0IHdhcyBkcm9wcGVkLiBCdXQsIHRoaXMgY2hlY2sgd2FzIG5vdCBlbnRpcmVseSBjb3JyZWN0LiBUaGUgbmV3IGNvZGUgc2VlbXMgdG8gYWRkcmVzcyB0aGlzIGJ5IGNhbGN1bGF0aW5nIGEgYHJlbWFpbmluZ2AgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciBpcyB1bnJlYWQuIFRoZW4sIGl0IGNvcnJlY3RseSB2YWxpZGF0ZXMgYHBrdF9sZW5gIGFnYWluc3QgYHJlbWFpbmluZ2AsIGNvbnNpZGVyaW5nIGFuIG9mZnNldC5cblxuVGhlIGNvbmRpdGlvbiBpbiB0aGUgYGlmYCBzdGF0ZW1lbnQgbm93IGNoZWNrcyBpZiBgcmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0YC4gYHBrdF9vZmZzZXRgIGlzIGEgdmFyaWFibGUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBwYWNrZXQgdGhhdCBpcyByZWFkIGZyb20gdGhlIFVTQiBidWZmZXIuIFRoZSBzZWNvbmQgY2hlY2sgZW5zdXJlcyB0aGF0IHRoZSBwYWNrZXQgaXMgb2Ygc3VmZmljaWVudCBsZW5ndGguIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGNoZWNrcyB0aGF0IHRoZSBwYWNrZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBFdGhlcm5ldCBoZWFkZXIgc2l6ZSBhbmQgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgYHJlbWFpbmluZ2AgbGVuZ3RoLiBUaGUgY29ycmVjdGVkIHZlcnNpb24gaGFzIGltcHJvdmVkIHNhZmV0eS5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgcmVhY2hhYmlsaXR5LiBDYW4gdGhpcyBjb2RlIHBhdGggYmUgdHJpZ2dlcmVkPyBBYnNvbHV0ZWx5LiBJIGtub3cgdGhhdCBTeXprYWxsZXIgaXMgb2Z0ZW4gdXNlZCBpbiB0aGlzIHZlcnkgY29udGV4dCB2aWEgdmlydHVhbCBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiDigJMgc3BlY2lmaWNhbGx5IHRoZSBgcmF3LWdhZGdldGAgYW5kIGBkdW1teV9oY2RgIGNvbmZpZ3VyYXRpb25zLiBUaGVzZSBlbXVsYXRpb25zIGFsbG93IFN5emthbGxlciB0byBpbmplY3QgY3JhZnRlZCBVUkIgZGF0YSBhbmQgdHJpZ2dlciBjYWxsYmFja3MgbGlrZSBgY2F0Y19yeF9kb25lYC5cblxuVGhlIGZpbmFsIHN0ZXAgZm9yIG1lIHdvdWxkIGJlIHRvIGNvbmZpcm0gdGhhdCBgY2F0Y2AgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgY2F0YyB0byBtYWtlIHN1cmUgaXQncyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24gYW5kIHRoYXQgaXQncyBsaWtlbHkgdG8gYmUgcHJlc2VudCBpbiB0aGUgdGFyZ2V0IGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjA0LjMyMDUxMTQ2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA0MTc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0NBVENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMz1pZiBVU0JfTkVUX0RSSVZFUlNcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoxNTpjb25maWcgVVNCX0NBVENcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6Mjk6MDQuMzY4NTYwMjk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjExMDI3NzA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgVVNCIE5ldHdvcmtpbmcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIFVTQiBuZXR3b3JraW5nIGRyaXZlci4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGNoZWNrIG91dCB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTUuIFRoYXQgc2hvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydCB1bnJhdmVsaW5nIHdoYXQgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIHRoaXMgdG8gZnVuY3Rpb24gcHJvcGVybHkuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwIGNvcnJlY3RseSBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGNoYW5nZXMsIGRvbid0IHdhbnQgdG8gYnJlYWsgYW55dGhpbmcgaW1wb3J0YW50LiBMZXQncyBzZWUgd2hhdCBLY29uZmlnIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTowNi40Nzg4Mzk2OTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxcbiAgMjg6XFx0XFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXFxuICAyOTpcXHRcXHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDMyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBVU0JfS0FXRVRIXFxuICAzNTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxcbiAgMzg6XFx0XFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcXG4gIDM5OlxcdFxcdCAgM0NvbSAzQzE5MjUwXFxuICA0MDpcXHRcXHQgIEFEUyBVU0ItMTBCVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTowNi40Nzg5MTU3MDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU2NDI3Nzk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBVU0JfQ0FUQyBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBVU0JfQ0FUQ2AgY29uZmlndXJhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHNlZSB0aGF0IGl0J3MgcmVsaWFudCBvbiBgVVNCX05FVF9EUklWRVJTYCwgd2hpY2ggaW4gdHVybiBoaW5nZXMgb24gYm90aCBgVVNCYCBhbmQgYE5FVGAgYmVpbmcgZW5hYmxlZC4gU2VlbXMgbG9naWNhbCwgYSBuZXR3b3JrLW92ZXItVVNCIHNldHVwLCByaWdodD8gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyBvciBpZiB0aGlzIGNvbmZpZ3VyYXRpb24gaGFzIGFueSBvdGhlciBpbXBsaWNhdGlvbnMsIGJ1dCB0aG9zZSBsb29rIHRvIGJlIHRoZSBjb3JlIGRlcGVuZGVuY2llcy4gQWxzbyBgVVNCX0NBVENgIHNlbGVjdHMgYENSQzMyYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgY29udGV4dC4gSXQncyBnb29kIHRoYXQgaXQncyBhIGRpcmVjdCBzZWxlY3Rpb247IG5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCBsZXQncyBicmluZyBpbiB0aGUgZnV6emluZyBjb25zaWRlcmF0aW9uLiBGb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucywgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIHNlZW1zIHRvIGFwcGx5IGJlY2F1c2UgdGhpcyBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEFuZCwgYXMgc3VzcGVjdGVkLCBgQ0FUQ2AgaXMgYWNjZXNzaWJsZSB2aWEgVVNCIGdhZGdldCwgc28gaXQgZml0cyB0aGUgXCJSZWFjaGFibGUgRHJpdmVyc1wiIGNyaXRlcmlhLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG5SZWdhcmRpbmcgZnV6emluZyB0YXJnZXRzLCB0aGUgaW5zdHJ1Y3Rpb25zIHBvaW50IG1lIHRvd2FyZHMgc3BlY2lmaWMgZm9jdXMgc3ltYm9sczogZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkIG9yIGltcGxlbWVudCB0aGUgY29yZSBsb2dpYy4gSW4gdGhpcyBjYXNlLCBgY2F0Y19yeF9kb25lYCBzdGFuZHMgb3V0LiBPa2F5LCBzbyBJIHNob3VsZCBsb29rIGludG8gYGNhdGNfcnhfZG9uZWAuIFR1cm5zIG91dCwgaXQncyBhbiBVUkIgY29tcGxldGlvbiBjYWxsYmFjaywgd2hpY2ggc3VnZ2VzdHMgaXRzIHJvbGUgaW4gZGF0YSByZWNlcHRpb24uIEkgc2hvdWxkIHJlYWxseSBjaGVjayB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHJlZmVyZW5jZWQgYmVjYXVzZSBpZiBpdCdzIGFuIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrIGl0IGlzIHByb2JhYmx5IG5vdCBkaXJlY3RseSBjYWxsZWQgYnV0IHdpbGwgYmUgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYW4gVVJCLiBUaGlzIGlzIGltcG9ydGFudCB0byB2ZXJpZnkgZm9yIEZ1enppbmcuXG5cbk5leHQsIEknbGwgYW5hbHl6ZSBgY2F0Yy5jYCBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBjYXRjX3J4X2RvbmVgIG9yIHJlbGF0ZWQgdG8gdGhlIFJYIHByb2Nlc3MuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMwNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjEwLjA0MzE5NTk0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMjQ3OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2F0Y19yeF9kb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NhdGMuYz0xNTM9c3RydWN0IGNhdGMge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0yMTUtXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzoyMTY6c3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTIxNy17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTc3OD1zdGF0aWMgaW50IGNhdGNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODYxLVxcdHVzYl9maWxsX2J1bGtfdXJiKGNhdGMtXFx1MDAzZXJ4X3VyYiwgdXNiZGV2LCB1c2JfcmN2YnVsa3BpcGUodXNiZGV2LCBDQVRDX1VTQl9FUF9CVUxLKSxcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjg2MjpcXHRcXHRcXHQgIGNhdGMtXFx1MDAzZXJ4X2J1ZiwgcGt0c3osIGNhdGNfcnhfZG9uZSwgY2F0Yyk7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjEwLjA4OTUyNTU5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzcxNTI3MTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBjYXRjX3J4X2RvbmVgIFVSQiBDb21wbGV0aW9uIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBgY2F0Y19yeF9kb25lYCBpcyB0aGUgVVJCIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgYHJ4X3VyYmAuIExldCdzIHNlZSwgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQgaXMsIGdpdmVuIHRoZSBgc3RhdGljIHZvaWRgIGRlY2xhcmF0aW9uLiBJIGNhbiBjb25maXJtIHRoaXMgYnkgY2hlY2tpbmcgaWYgaXQgaGFzIGEgc3ltYm9sLiBJdCBkb2VzLCBzbyBpdCdzIG5vdCBhIHN0YXRpYyBpbmxpbmUuIEknbSBzZWVpbmcgZnJvbSB0aGUgcHJvdmlkZWQgZGlmZiB0aGF0IGBjYXRjX3J4X2RvbmVgIGlzIGJlaW5nIG1vZGlmaWVkLCBidXQgbm90aGluZyBlbHNlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGhhbmRsaW5nIHBhY2tldCBsZW5ndGggY2hlY2tzLiBJdCdzIGxvb2tpbmcgbGlrZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyLXJlYWQgb3IgdW5kZXItcmVhZCBpc3N1ZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGxpa2VseSBkb2luZyBhIHNpbXBsZSBsZW5ndGggY2hlY2sgYW5kIG5vdyB0aGVyZSdzIGByZW1haW5pbmdgIGNoZWNrIHRvIGFjY291bnQgZm9yIHBrdF9vZmZzZXQgY2FsY3VsYXRpb24gd2l0aCBgcGt0X2xlbmAuIEl0IGFsc28gY2hlY2tzIGlmIHRoZSBwYWNrZXQgbGVuZ3RoIGlzIHdpdGhpbiBhY2NlcHRhYmxlIGJvdW5kcywgZXNwZWNpYWxseSBpbiB0aGUgYCFjYXRjLVx1MDAzZWlzX2Y1dTAxMWAgY2FzZS4gSXQgc2VlbXMgbGlrZSB0aGUgcHJldmlvdXMgbG9naWMgaGFkIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgdGhlcmUgdGhhdCBpcyBiZWluZyBhZGRyZXNzZWQuXG5cblRoZSBjb2RlIHNlZW1zIHRvIGhhbmRsZSBhIHNwZWNpZmljIGNhc2UgZm9yIGAhY2F0Yy1cdTAwM2Vpc19mNXUwMTFgLCB3aGljaCBsaWtlbHkgcmVwcmVzZW50cyBkaWZmZXJlbnQgcGFja2V0IHN0cnVjdHVyZXMuIEl0IGNhbGN1bGF0ZXMgdGhlIHJlbWFpbmluZyBhbW91bnQgb2YgZGF0YSBhZnRlciBgcGt0X29mZnNldGAgaXMgYXBwbGllZCBpbiB0aGUgYnVmZmVyIGFuZCBpdCB1c2VzIGBFVEhfSExFTmAuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSBob3cgYGNhdGMub2AgaXMgYnVpbHQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udGV4dC4gVGhpcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgbW9yZSBjbHVlcyBhYm91dCB3aGF0IGBwa3Rfb2Zmc2V0YCBpcy4gQWxzbywgdGhlIGNvbmZpZ3VyYXRpb24gc3ltYm9scyAoYFVTQl9DQVRDYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBgTkVUYCkgYXJlIHJlbGV2YW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlcyB0byBlbnN1cmUgYWxsIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4gVGhpcyBjaGFuZ2Ugc2VlbXMgcmVsYXRlZCB0byBwYWNrZXQgbGVuZ3RoIHZhbGlkYXRpb24gaW4gdGhlIHJlY2VpdmUgcGF0aCwgbGlrZWx5IHRvIG1pdGlnYXRlIHNvbWUga2luZCBvZiBidWZmZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHZ1bG5lcmFiaWxpdHkuIEkgY2FuIHByb2JhYmx5IGNvcnJlbGF0ZSB0aGlzIHdpdGggYSByZXBvcnRlZCBidWcgb3IgdnVsbmVyYWJpbGl0eSByZXBvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6Mjk6MzMuODA0ODAwMjIxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU1NjgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYXRjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVVNCX0NBVEMpXFx0XFx0Kz0gY2F0Yy5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1VTQl9LQVdFVEgpXFx0Kz0ga2F3ZXRoLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6Mjk6MzMuODUxMzYzODkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5MzUzMzEzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgYnVpbGQgc3lzdGVtLi4uXG5cbioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgSW5jbHVzaW9uKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZWAgaGVyZS4gVGhlIGxpbmUgYG9iai0kKENPTkZJR19VU0JfQ0FUQykgKz0gY2F0Yy5vYCBpcyBjYXRjaGluZyBteSBleWUuIFNvLCB0aGUgYGNhdGMub2AgbW9kdWxlIGZvciB0aGUgQ0FUQyBVU0IgZXRoZXJuZXQgYWRhcHRlciBpcyBiZWluZyBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX1VTQl9DQVRDYCBLY29uZmlnIG9wdGlvbi4gQ2xhc3NpYy4gXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gSSBzaG91bGQgY2hlY2sgaG93IGBkcml2ZXJzL25ldC91c2JgIGl0c2VsZiBpcyBicm91Z2h0IGludG8gdGhlIGJ1aWxkLiBUaW1lIHRvIHBlZWsgaW50byB0aGUgbWFpbiBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIGFuZCBzZWUgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIFVTQiBuZXR3b3JrIGRyaXZlcnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGhlbHAgbWUgdHJhY2UgYmFjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NzMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTozNS43ODY2OTk1NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzgzMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfWEVOX05FVERFVl9CQUNLRU5EKSArPSB4ZW4tbmV0YmFjay9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS03OS1cXG5kcml2ZXJzL25ldC9NYWtlZmlsZTo4MDpvYmotJChDT05GSUdfVVNCX05FVF9EUklWRVJTKSArPSB1c2IvXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjM1LjgzNjA4OTM4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjkzNzgxMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdvcnRoRnV6emluZyBVU0IgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBhcmUgYENPTkZJR19VU0JfTkVUX0RSSVZFUlNgIGFuZCBgQ09ORklHX1VTQl9DQVRDYC4gSSBuZWVkIHRvIGVuc3VyZSBVU0IgaG9zdCBhbmQgZWl0aGVyIHJhdyBnYWRnZXQgb3IgYGR1bW15X2hjZGAgZW11bGF0aW9uIGFyZSBlbmFibGVkLiBTdGFuZGFyZCBrZXJuZWxzIHVzdWFsbHkgdGFrZSBjYXJlIG9mIGBVU0JgIGFuZCBgTkVUYCwgc28gdGhvc2UgYXJlIGxpa2VseSBjb3ZlcmVkLiBUbyBiZSBzdXJlLCBJJ2xsIGxpc3QgdGhlIGtleSBjb25maWd1cmF0aW9uczogYFVTQl9DQVRDYCBhbmQgYFVTQl9ORVRfRFJJVkVSU2AuXG5cbk5vdywgbGV0J3MgZXhhbWluZSB0aGUgV29ydGhGdXp6aW5nIGFuYWx5c2lzLlxuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogVGhlIFVTQiBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgdGhlIGBjYXRjX3J4X2RvbmUoKWAgZnVuY3Rpb27igJR0aGUgUlggVVJCIGNvbXBsZXRpb24gaGFuZGxlcuKAlGFyZSBlYXNpbHkgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBlbXVsYXRpb24uIFVzaW5nIGVpdGhlciBgZHVtbXlfaGNkYCBvciByYXcgZ2FkZ2V0IHdpdGhpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG1ha2VzIHRoaXMgdHJpdmlhbC4gVGhlIG1vZGlmaWNhdGlvbiBmb2N1c2VkIG9uIGFkZGluZyBib3VuZHMgY2hlY2tzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgbWFsZm9ybWVkIHBhY2tldCBwcm9jZXNzaW5nLCB3aXRoIHRoZSBuZXcgY2hlY2tzOiBgcmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0YCBhbmQgYHBrdF9sZW4gXHUwMDNjIEVUSF9ITEVOIHx8IHBrdF9sZW4gKyBwa3Rfb2Zmc2V0IFx1MDAzZSByZW1haW5pbmdgLiBUaGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgaW4gYSBkcml2ZXIgc3VwcG9ydGVkIGJ5IHZpcnR1YWwgZW11bGF0aW9uLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBDb25maXJtZWQsIHRoZSB0YXJnZXQgZnVuY3Rpb24gaXMgYFtcImNhdGNfcnhfZG9uZVwiXWAuXG4qICAgKipFbmFibGVDb25maWdzOioqIENvbmZpcm1lZCwgdGhlc2UgYXJlIHRoZSBjb25maWdzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciBpdDogYFtcIlVTQl9DQVRDXCIsIFwiVVNCX05FVF9EUklWRVJTXCJdYC5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24sIGFuZCBldmVyeXRoaW5nIGlzIGluIG9yZGVyLiBJdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODI0LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTo0MS4xMjk4NzMzMDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTcyNTA1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0NBVENcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNhdGNfcnhfZG9uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGluIGNhdGNfcnhfZG9uZSgpIGluIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFJYIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChlLmcuIER1bW15IEhDRCAvIHJhdy1nYWRnZXQpLiBGdXp6aW5nIFVTQiBwYWNrZXQgcmVjZXB0aW9uIGNhbiB2ZXJpZnkgYm91bmRzIGNoZWNrcyBhbmQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBwYXJzaW5nIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0NBVENcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNhdGNfcnhfZG9uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGluIGNhdGNfcnhfZG9uZSgpIGluIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFJYIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChlLmcuIER1bW15IEhDRCAvIHJhdy1nYWRnZXQpLiBGdXp6aW5nIFVTQiBwYWNrZXQgcmVjZXB0aW9uIGNhbiB2ZXJpZnkgYm91bmRzIGNoZWNrcyBhbmQgdW5jb3ZlciByZWdyZXNzaW9ucyBvciBwYXJzaW5nIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjQxLjIxMTYwNzc2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMzc2MTMwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTo0MS4yMTIxNTMyMjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODAzNzA2MzQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJ3JlbWFpbmluZycpIGFuZCBlbnN1cmVzIHRoYXQgcGt0X29mZnNldCBieXRlcyBhcmUgYXZhaWxhYmxlIGJlZm9yZSByZWFkaW5nIHRoZSBwYWNrZXQgbGVuZ3RoIGhlYWRlciwgYW5kIHZlcmlmaWVzIHRoYXQgcGt0X2xlbiBpcyBhdCBsZWFzdCBFVEhfSExFTiBhbmQgcGt0X2xlbiArIHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBvbiB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0YjgwNDZkNGY1MDkxYzM0MTMzOGM3MTI4MmY1ZDA1MmE5NWVlZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMDoyODoyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jXG5pbmRleCA5NmU4MmY5NGVkY2Y4Li4zOWI2NzhmMTc1ZGQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuY1xuQEAgLTIzMywxNyArMjMzLDI2IEBAIHN0YXRpYyB2b2lkIGNhdGNfcnhfZG9uZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmKCFjYXRjLVx1MDAzZWlzX2Y1dTAxMSkge1xuLVx0XHRcdHBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiopcGt0X3N0YXJ0KTtcbi1cdFx0XHRpZiAocGt0X2xlbiBcdTAwM2UgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpIHtcbitcdFx0aW50IHJlbWFpbmluZyA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoIC1cbitcdFx0XHRcdChwa3Rfc3RhcnQgLSAodTggKil1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyKTtcbitcbitcdFx0aWYgKCFjYXRjLVx1MDAzZWlzX2Y1dTAxMSkge1xuK1x0XHRcdGlmIChyZW1haW5pbmcgXHUwMDNjIHBrdF9vZmZzZXQpIHtcbiBcdFx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcbiBcdFx0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycysrO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuK1x0XHRcdHBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKXBrdF9zdGFydCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cGt0X2xlbiA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChwa3RfbGVuIFx1MDAzYyBFVEhfSExFTiB8fCBwa3RfbGVuICsgcGt0X29mZnNldCBcdTAwM2UgcmVtYWluaW5nKSB7XG4rXHRcdFx0Y2F0Yy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xuK1x0XHRcdGNhdGMtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycysrO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4gXHRcdGlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKVxuIFx0XHRcdHJldHVybjtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjQxLjIxMjE1NDI1MloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDMwMzIzNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AgZm9yIEtNU0FOIEZ1enppbmcgSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIHNob3VsZCBydW4gYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb24gYSBwYXRjaCByZWxhdGVkIHRvIGBkcml2ZXJzL25ldC91c2IvY2F0Yy5jYC4gUmlnaHQsIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZS4gTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZiwgb2YgY291cnNlLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGJlaW5nIGNoYW5nZWQuIFRoZW4sIEknbGwgbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIzMyBpbiBgZHJpdmVycy9uZXQvdXNiL2NhdGMuY2AuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eSBiZWluZyBtb2RpZmllZC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgY2hhbmNlIG9mIGZpZ3VyaW5nIG91dCBpZiBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyB3YXJyYW50ZWQ7IEkgbmVlZCB0byBsb29rIGZvciBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBmdXp6aW5nIGNhbiB1bmNvdmVyLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjQ3LjY0MjQ5NjEwOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NhdGMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0I2RlZmluZSBjYXRjX3dyaXRlX21lbV9hc3luYyhjYXRjLCBhZGRyLCBidWYsIHNpemUpXFx0Y2F0Y19jdHJsX2FzeW5jKGNhdGMsIFVTQl9ESVJfT1VULCBXcml0ZU1lbSwgMCwgYWRkciwgYnVmLCBzaXplLCBOVUxMKVxcbiAyMTE6XFx0XFxuIDIxMjpcXHQvKlxcbiAyMTM6XFx0ICogUmVjZWl2ZSByb3V0aW5lcy5cXG4gMjE0OlxcdCAqL1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRzdGF0aWMgdm9pZCBjYXRjX3J4X2RvbmUoc3RydWN0IHVyYiAqdXJiKVxcbiAyMTc6XFx0e1xcbiAyMTg6XFx0XFx0c3RydWN0IGNhdGMgKmNhdGMgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuIDIxOTpcXHRcXHR1OCAqcGt0X3N0YXJ0ID0gdXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXI7XFxuIDIyMDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAyMjE6XFx0XFx0aW50IHBrdF9sZW4sIHBrdF9vZmZzZXQgPSAwO1xcbiAyMjI6XFx0XFx0aW50IHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAoIWNhdGMtXFx1MDAzZWlzX2Y1dTAxMSkge1xcbiAyMjU6XFx0XFx0XFx0Y2xlYXJfYml0KFJYX1JVTk5JTkcsIFxcdTAwMjZjYXRjLVxcdTAwM2VmbGFncyk7XFxuIDIyNjpcXHRcXHRcXHRwa3Rfb2Zmc2V0ID0gMjtcXG4gMjI3OlxcdFxcdH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0aWYgKHN0YXR1cykge1xcbiAyMzA6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2dXJiLVxcdTAwM2VkZXYtXFx1MDAzZWRldiwgXFxcInJ4X2RvbmUsIHN0YXR1cyAlZCwgbGVuZ3RoICVkXFxcXG5cXFwiLFxcbiAyMzE6XFx0XFx0XFx0XFx0c3RhdHVzLCB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGgpO1xcbiAyMzI6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMzM6XFx0XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHRkbyB7XFxuIDIzNjpcXHRcXHRcXHRpbnQgcmVtYWluaW5nID0gdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoIC1cXG4gMjM3OlxcdFxcdFxcdFxcdFxcdChwa3Rfc3RhcnQgLSAodTggKil1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlcik7XFxuIDIzODpcXHRcXG4gMjM5OlxcdFxcdFxcdGlmICghY2F0Yy1cXHUwMDNlaXNfZjV1MDExKSB7XFxuIDI0MDpcXHRcXHRcXHRcXHRpZiAocmVtYWluaW5nIFxcdTAwM2MgcGt0X29mZnNldCkge1xcbiAyNDE6XFx0XFx0XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuIDI0MjpcXHRcXHRcXHRcXHRcXHRjYXRjLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnJ4X2Vycm9ycysrO1xcbiAyNDM6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI0NDpcXHRcXHRcXHRcXHR9XFxuIDI0NTpcXHRcXHRcXHRcXHRwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilwa3Rfc3RhcnQpO1xcbiAyNDY6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjQ3OlxcdFxcdFxcdFxcdHBrdF9sZW4gPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGg7XFxuIDI0ODpcXHRcXHRcXHR9XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2MgRVRIX0hMRU4gfHwgcGt0X2xlbiArIHBrdF9vZmZzZXQgXFx1MDAzZSByZW1haW5pbmcpIHtcXG4gMjUxOlxcdFxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xcbiAyNTI6XFx0XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcXG4gMjUzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNTQ6XFx0XFx0XFx0fVxcbiAyNTU6XFx0XFxuIDI1NjpcXHRcXHRcXHRpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSlcXG4gMjU3OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0XFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBwa3Rfc3RhcnQgKyBwa3Rfb2Zmc2V0LCBwa3RfbGVuKTtcXG4gMjYwOlxcdFxcdFxcdHNrYl9wdXQoc2tiLCBwa3RfbGVuKTtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgY2F0Yy1cXHUwMDNlbmV0ZGV2KTtcXG4gMjYzOlxcdFxcdFxcdG5ldGlmX3J4KHNrYik7XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdFxcdGNhdGMtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfcGFja2V0cysrO1xcbiAyNjY6XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRcXHQvKiBGNVUwMTEgb25seSBkb2VzIG9uZSBwYWNrZXQgcGVyIFJYICovXFxuIDI2OTpcXHRcXHRcXHRpZiAoY2F0Yy1cXHUwMDNlaXNfZjV1MDExKVxcbiAyNzA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI3MTpcXHRcXHRcXHRwa3Rfc3RhcnQgKz0gKCgocGt0X2xlbiArIDEpIFxcdTAwM2VcXHUwMDNlIDYpICsgMSkgXFx1MDAzY1xcdTAwM2MgNjtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0fSB3aGlsZSAocGt0X3N0YXJ0IC0gKHU4ICopIHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyIFxcdTAwM2MgdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoKTtcXG4gMjc0OlxcdFxcbiAyNzU6XFx0XFx0aWYgKGNhdGMtXFx1MDAzZWlzX2Y1dTAxMSkge1xcbiAyNzY6XFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZjYXRjLVxcdTAwM2VyZWNxX3N6KSkge1xcbiAyNzc6XFx0XFx0XFx0XFx0aW50IHN0YXRlO1xcbiAyNzg6XFx0XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2Y2F0Yy1cXHUwMDNlcmVjcV9zeik7XFxuIDI3OTpcXHRcXHRcXHRcXHRuZXRkZXZfZGJnKGNhdGMtXFx1MDAzZW5ldGRldiwgXFxcImdldHRpbmcgZXh0cmEgcGFja2V0XFxcXG5cXFwiKTtcXG4gMjgwOlxcdFxcdFxcdFxcdHVyYi1cXHUwMDNlZGV2ID0gY2F0Yy1cXHUwMDNldXNiZGV2O1xcbiAyODE6XFx0XFx0XFx0XFx0aWYgKChzdGF0ZSA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpIFxcdTAwM2MgMCkge1xcbiAyODI6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhjYXRjLVxcdTAwM2VuZXRkZXYsXFxuIDI4MzpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwic3VibWl0KHJ4X3VyYikgc3RhdHVzICVkXFxcXG5cXFwiLCBzdGF0ZSk7XFxuIDI4NDpcXHRcXHRcXHRcXHR9XFxuIDI4NTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyODY6XFx0XFx0XFx0XFx0Y2xlYXJfYml0KFJYX1JVTk5JTkcsIFxcdTAwMjZjYXRjLVxcdTAwM2VmbGFncyk7XFxuIDI4NzpcXHRcXHRcXHR9XFxuIDI4ODpcXHRcXHR9XFxuIDI4OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjQ3LjY0MjYyMzE3OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDIyODMxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgYGNhdGNgIFVTQiBuZXR3b3JrIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG9yaWdpbmFsIGlzc3VlIGFuZCBob3cgdGhpcyBwcm9wb3NlZCBmaXggYWRkcmVzc2VzIGl0LiBGaXJzdCwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgY29kZSBpbiB0aGUgYGNhdGNfcnhfZG9uZWAgZnVuY3Rpb24uXG5cblRoZSBvcmlnaW5hbCBjb2RlJ3MgbG9naWMgaGFzIGEgZmxhdy4gV2hlbiBgY2F0Yy1cdTAwM2Vpc19mNXUwMTFgIGlzIGZhbHNlLCBpdCByZWFkcyBhIHBhY2tldCBsZW5ndGggKGBwa3RfbGVuYCkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWNlaXZlZCBkYXRhLiBIb3dldmVyLCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGhvdyBpdCB2YWxpZGF0ZXMgdGhpcyBsZW5ndGggYWdhaW5zdCB0aGUgcmVjZWl2ZWQgZGF0YSBzaXplIChgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGhgKS4gQSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGNhbiBoYXBwZW4gd2l0aCBhIHNtYWxsIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAgaWYgaXQgaXMgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSBgX19sZTE2YCBiZWluZyByZWFkICh0d28gYnl0ZXMpIGR1cmluZyB0aGUgYGxlMTZfdG9fY3B1cGAgY2FsbCwgd2hpY2ggcmVhZHMgcGFzdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gQWxzbyB0aGUgY3VycmVudCBjaGVjaywgYHBrdF9sZW4gXHUwMDNlIHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCBpc24ndCBzdWZmaWNpZW50LiBJZiBgcGt0X2xlbiArIHBrdF9vZmZzZXRgIGNhbiBleGNlZWQgYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYC5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgcmVtYWluaW5nYCB2YXJpYWJsZSB0byBhZGRyZXNzIHRoaXMgYW5kIGRvZXMgYSBiZXR0ZXIgam9iIG9mIGNoZWNraW5nIHRoZSBwYWNrZXQgbGVuZ3RoLCBub3csIHVzaW5nIGByZW1haW5pbmdgLCBpdCBpcyBzYWZlLlxuXG5GdXJ0aGVybW9yZSwgZXZlbiBpZiB0aGUgbGVuZ3RoIHZhbGlkYXRpb24gcGFzc2VzLCB0aGUgYHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhYCBmdW5jdGlvbiBjb3VsZCBzdGlsbCBiZSB2dWxuZXJhYmxlLiBJdCBjb3BpZXMgYHBrdF9sZW5gIGJ5dGVzIHN0YXJ0aW5nIGZyb20gYHBrdF9zdGFydCArIHBrdF9vZmZzZXRgLiBUaGUgb3JpZ2luYWwgY29kZSBkb2Vzbid0IGVuc3VyZSB0aGF0IGBwa3Rfc3RhcnQgKyBwa3Rfb2Zmc2V0ICsgcGt0X2xlbmAgZG9lc24ndCBleGNlZWQgdGhlIGJvdW5kcyBvZiBgdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcmAgb3IgdGhlIGFjdHVhbCByZWNlaXZlZCBkYXRhLCBhbm90aGVyIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcmAgaXMgYWxsb2NhdGVkIGluIHRoZSBgY2F0Yy5jYCBmaWxlIHRvIGNvbXBsZXRlbHkgY29uZmlybSB0aGlzIGFuYWx5c2lzIGFuZCBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjI5OjUyLjY2NTQ1NjYxOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MDYzMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhfdXJiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NhdGMuYz0xNTM9c3RydWN0IGNhdGMge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy0xODUtXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzoxODY6XFx0c3RydWN0IHVyYiAqdHhfdXJiLCAqcnhfdXJiLCAqaXJxX3VyYiwgKmN0cmxfdXJiO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYz0yMTY9c3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMjgyLVxcdFxcdFxcdFxcdG5ldGRldl9kYmcoY2F0Yy1cXHUwMDNlbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM6MjgzOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJzdWJtaXQocnhfdXJiKSBzdGF0dXMgJWRcXFxcblxcXCIsIHN0YXRlKTtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTI4NC1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTI5MT1zdGF0aWMgdm9pZCBjYXRjX2lycV9kb25lKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMzQyLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzozNDM6XFx0XFx0XFx0Y2F0Yy1cXHUwMDNlcnhfdXJiLVxcdTAwM2VkZXYgPSBjYXRjLVxcdTAwM2V1c2JkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzozNDQ6XFx0XFx0XFx0aWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihjYXRjLVxcdTAwM2VyeF91cmIsIEdGUF9BVE9NSUMpKSBcXHUwMDNjIDApIHtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTM0NS1cXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZjYXRjLVxcdTAwM2V1c2JkZXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjM0NjpcXHRcXHRcXHRcXHRcXHRcXFwic3VibWl0KHJ4X3VyYikgc3RhdHVzICVkXFxcXG5cXFwiLCByZXMpO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMzQ3LVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9NzQ2PXN0YXRpYyBpbnQgY2F0Y19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTc1NC1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjc1NTpcXHR1c2Jfa2lsbF91cmIoY2F0Yy1cXHUwMDNlcnhfdXJiKTtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTc1Ni1cXHR1c2Jfa2lsbF91cmIoY2F0Yy1cXHUwMDNldHhfdXJiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9Nzc4PXN0YXRpYyBpbnQgY2F0Y19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04MzMtXFx0Y2F0Yy1cXHUwMDNldHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjgzNDpcXHRjYXRjLVxcdTAwM2VyeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODM1LVxcdGNhdGMtXFx1MDAzZWlycV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODM2LVxcdGlmICgoIWNhdGMtXFx1MDAzZWN0cmxfdXJiKSB8fCAoIWNhdGMtXFx1MDAzZXR4X3VyYikgfHxcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjgzNzpcXHQgICAgKCFjYXRjLVxcdTAwM2VyeF91cmIpIHx8ICghY2F0Yy1cXHUwMDNlaXJxX3VyYikpIHtcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTgzOC1cXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlLlxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jLTg2MC1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjg2MTpcXHR1c2JfZmlsbF9idWxrX3VyYihjYXRjLVxcdTAwM2VyeF91cmIsIHVzYmRldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYmRldiwgQ0FUQ19VU0JfRVBfQlVMSyksXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04NjItXFx0XFx0XFx0ICBjYXRjLVxcdTAwM2VyeF9idWYsIHBrdHN6LCBjYXRjX3J4X2RvbmUsIGNhdGMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05NjItXFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZXR4X3VyYik7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo5NjM6XFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZXJ4X3VyYik7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05NjQtXFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZWlycV91cmIpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYz05NzI9c3RhdGljIHZvaWQgY2F0Y19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05ODAtXFx0XFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZXR4X3VyYik7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYzo5ODE6XFx0XFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZXJ4X3VyYik7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy05ODItXFx0XFx0dXNiX2ZyZWVfdXJiKGNhdGMtXFx1MDAzZWlycV91cmIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDoyOTo1Mi43MTUxNzA1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDc2MjExMTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgUmVjZWl2ZSBCdWZmZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgY2F0Yy1cdTAwM2VyeF9idWZgLiAgVGhhdCdzIHRoZSByZWNlaXZlIGJ1ZmZlciwgY2xlYXJseS4gIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBiZXR0ZXIuICBJIGltbWVkaWF0ZWx5IG5lZWQgdG8ga25vdyBob3cgdGhpcyB0aGluZyBpcyBkZWZpbmVkIGFuZCwgY3JpdGljYWxseSwgaG93IGFuZCB3aGVyZSBpdCdzIGFsbG9jYXRlZC4gIElzIGl0IGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYXJyYXk/IEEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlcj8gV2hhdCdzIGl0cyBzaXplPyBXaGF0J3MgaXRzIGxpZmV0aW1lPyBBbGwgdGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbC4gV2l0aG91dCBrbm93aW5nIGhvdyB0aGUgbWVtb3J5IGZvciBgY2F0Yy1cdTAwM2VyeF9idWZgIGlzIG1hbmFnZWQsIEkgY2FuJ3QgcG9zc2libHkgcmVhc29uIGVmZmVjdGl2ZWx5IGFib3V0IGl0cyB1c2FnZSwgcG90ZW50aWFsIGZvciBlcnJvcnMgKGxpa2Ugb3ZlcmZsb3dzIG9yIHVzZS1hZnRlci1mcmVlKSwgb3IgaXRzIGVmZmljaWVuY3kuICBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIHRoZSBkZWZpbml0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDU2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6MzA6MDcuNDc3Mjg1MjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODEwMzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4X2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvY2F0Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmM9MTUzPXN0cnVjdCBjYXRjIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTYzLVxcdHU4IHR4X2J1ZlsyXVtUWF9NQVhfQlVSU1QgKiAoUEtUX1NaICsgMildO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmM6MTY0OlxcdHU4IHJ4X2J1ZltSWF9NQVhfQlVSU1QgKiAoUEtUX1NaICsgMildO1xcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtMTY1LVxcdHU4IGlycV9idWZbMl07XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jPTc3OD1zdGF0aWMgaW50IGNhdGNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jYXRjLmMtODYxLVxcdHVzYl9maWxsX2J1bGtfdXJiKGNhdGMtXFx1MDAzZXJ4X3VyYiwgdXNiZGV2LCB1c2JfcmN2YnVsa3BpcGUodXNiZGV2LCBDQVRDX1VTQl9FUF9CVUxLKSxcXG5kcml2ZXJzL25ldC91c2IvY2F0Yy5jOjg2MjpcXHRcXHRcXHQgIGNhdGMtXFx1MDAzZXJ4X2J1ZiwgcGt0c3osIGNhdGNfcnhfZG9uZSwgY2F0Yyk7XFxuZHJpdmVycy9uZXQvdXNiL2NhdGMuYy04NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjMwOjA3LjUyNTEwMTM3M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODAyMTM4MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipWZXJpZnlpbmcgYGNhdGNgIEFsbG9jYXRpb24gaW4gUHJvYmUqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBgc3RydWN0IGNhdGNgIGlzIGt6YWxsb2NhdGVkIGR1cmluZyB0aGUgcHJvYmUgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBzcGVjaWZpY3Mgb2YgKmhvdyogdGhpcyBhbGxvY2F0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgdGhlIGt6YWxsb2NhdGlvbiBwcm9jZXNzLiBUaGlzIGlzIGZ1bmRhbWVudGFsOyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBoZXJlIGNvdWxkIGxlYWQgdG8gY2FzY2FkaW5nIGlzc3Vlcy4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgZG9uZSBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDozMDoxMi4zMjcyNDMxMDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDUxNDUzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9jYXRjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjMwOjEyLjM3MzMwNjQyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MzM3ODUzNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBjYXRjLmMgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiBsaW5lcyA3NzggdGhyb3VnaCA4MzAgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvY2F0Yy5jYC4gVGhpcyBzZWN0aW9uIGxpa2VseSBjb250YWlucyBzb21lIGNydWNpYWwgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIHRoZSBDQVRDIFVTQiBFdGhlcm5ldCBhZGFwdGVyIGRyaXZlciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0LiBJJ20gZ3Vlc3NpbmcgaXQgaGFuZGxlcyBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgZGV2aWNlJ3Mgb3BlcmF0aW9uLCBtYXliZSBwYWNrZXQgaGFuZGxpbmcsIGludGVycnVwdCBtYW5hZ2VtZW50LCBvciBwb3RlbnRpYWxseSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gb3Igc2h1dGRvd24gc2VxdWVuY2UsIGp1ZGdpbmcgYnkgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGxvZ2ljYWwgZmxvdyBhbmQgdGhlIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCB3aXRoaW4gdGhhdCBzZWdtZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXRpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgYnVncyB0aGF0IG1pZ2h0IGJlIGhpZGluZyB3aXRoaW4gdGhhdCBibG9jayBvZiBjb2RlLiBUaGlzIHNlZ21lbnQgY291bGQgcG90ZW50aWFsbHkgb2ZmZXIgaW5zaWdodHMgaW50byBhc3BlY3RzIHN1Y2ggYXMsIHRoZSBkcml2ZXLigJlzIGFiaWxpdHkgdG8gaGFuZGxlIGRpZmZlcmVudCBVU0IgdHJhbnNmZXIgdHlwZXMsIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwgbmV0d29ya2luZyBzdGFjayBvciBtYXliZSBpdOKAmXMgYWJpbGl0eSB0byBoYW5kbGUgdGhlIG51YW5jZXMgb2YgdGhlIENBVEMgaGFyZHdhcmUgaXRzZWxmLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGlzIHNlY3Rpb24gaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMDozMDoxNy43MTExNjIyNzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NhdGMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3Nzg6XFx0c3RhdGljIGludCBjYXRjX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuIDc3OTpcXHR7XFxuIDc4MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2aW50Zi1cXHUwMDNlZGV2O1xcbiA3ODE6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIDc4MjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbiA3ODM6XFx0XFx0c3RydWN0IGNhdGMgKmNhdGM7XFxuIDc4NDpcXHRcXHR1OCBicm9hZGNhc3RbRVRIX0FMRU5dO1xcbiA3ODU6XFx0XFx0dTggKm1hY2J1ZjtcXG4gNzg2OlxcdFxcdGludCBwa3RzeiwgcmV0ID0gLUVOT01FTTtcXG4gNzg3OlxcdFxcdHN0YXRpYyBjb25zdCB1OCBidWxrX2VwX2FkZHJbXSA9IHtcXG4gNzg4OlxcdFxcdFxcdENBVENfVVNCX0VQX0JVTEsgfCBVU0JfRElSX09VVCxcXG4gNzg5OlxcdFxcdFxcdENBVENfVVNCX0VQX0JVTEsgfCBVU0JfRElSX0lOLFxcbiA3OTA6XFx0XFx0XFx0MH07XFxuIDc5MTpcXHRcXHRzdGF0aWMgY29uc3QgdTggaW50X2VwX2FkZHJbXSA9IHtcXG4gNzkyOlxcdFxcdFxcdENBVENfVVNCX0VQX0lOVF9JTiB8IFVTQl9ESVJfSU4sXFxuIDc5MzpcXHRcXHRcXHQwfTtcXG4gNzk0OlxcdFxcbiA3OTU6XFx0XFx0bWFjYnVmID0ga21hbGxvYyhFVEhfQUxFTiwgR0ZQX0tFUk5FTCk7XFxuIDc5NjpcXHRcXHRpZiAoIW1hY2J1ZilcXG4gNzk3OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDc5ODpcXHRcXG4gNzk5OlxcdFxcdGlmICh1c2Jfc2V0X2ludGVyZmFjZSh1c2JkZXYsXFxuIDgwMDpcXHRcXHRcXHRcXHRpbnRmLVxcdTAwM2VhbHRzZXR0aW5nLVxcdTAwM2VkZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDEpKSB7XFxuIDgwMTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkNhbid0IHNldCBhbHRzZXR0aW5nIDEuXFxcXG5cXFwiKTtcXG4gODAyOlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDgwMzpcXHRcXHRcXHRnb3RvIGZhaWxfbWVtO1xcbiA4MDQ6XFx0XFx0fVxcbiA4MDU6XFx0XFxuIDgwNjpcXHRcXHQvKiBWZXJpZnkgdGhhdCBhbGwgcmVxdWlyZWQgZW5kcG9pbnRzIGFyZSBwcmVzZW50ICovXFxuIDgwNzpcXHRcXHRpZiAoIXVzYl9jaGVja19idWxrX2VuZHBvaW50cyhpbnRmLCBidWxrX2VwX2FkZHIpIHx8XFxuIDgwODpcXHRcXHQgICAgIXVzYl9jaGVja19pbnRfZW5kcG9pbnRzKGludGYsIGludF9lcF9hZGRyKSkge1xcbiA4MDk6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJNaXNzaW5nIG9yIGludmFsaWQgZW5kcG9pbnRzXFxcXG5cXFwiKTtcXG4gODEwOlxcdFxcdFxcdHJldCA9IC1FTk9ERVY7XFxuIDgxMTpcXHRcXHRcXHRnb3RvIGZhaWxfbWVtO1xcbiA4MTI6XFx0XFx0fVxcbiA4MTM6XFx0XFxuIDgxNDpcXHRcXHRuZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGNhdGMpKTtcXG4gODE1OlxcdFxcdGlmICghbmV0ZGV2KVxcbiA4MTY6XFx0XFx0XFx0Z290byBmYWlsX21lbTtcXG4gODE3OlxcdFxcbiA4MTg6XFx0XFx0Y2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIDgxOTpcXHRcXG4gODIwOlxcdFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZjYXRjX25ldGRldl9vcHM7XFxuIDgyMTpcXHRcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDtcXG4gODIyOlxcdFxcdG5ldGRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2b3BzO1xcbiA4MjM6XFx0XFxuIDgyNDpcXHRcXHRjYXRjLVxcdTAwM2V1c2JkZXYgPSB1c2JkZXY7XFxuIDgyNTpcXHRcXHRjYXRjLVxcdTAwM2VuZXRkZXYgPSBuZXRkZXY7XFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZjYXRjLVxcdTAwM2V0eF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDA6MzA6MTcuNzExMjU3MDcxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNTM3OTM4ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDQVRDIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cuIFRoZSBgYWxsb2NfZXRoZXJkZXZgIGZ1bmN0aW9uIHVzZXMgYGFsbG9jX25ldGRldl9tcXNgIHdoaWNoIGt6YWxsb2NzIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHByaXZhdGUgZGF0YS4gVGhhdCBwYXJ0IGlzIHByZXR0eSBzdGFuZGFyZC4gIENydWNpYWxseSwgYGNhdGMtXHUwMDNlcnhfYnVmYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBnb29kIGZvciBhdm9pZGluZyBzb21lIGlzc3Vlcy4gIFRoZSBVU0IgY29udHJvbGxlciBmaWxscyBgcnhfYnVmYCB3aXRoIGluY29taW5nIGRhdGEgdXAgdG8gYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYC4gVGhhdCB2YXJpYWJsZSwgYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCwgaXMga2V5IGhlcmUuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIHBhdGNoOiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdGhlIGBjYXRjX3J4X2RvbmVgIGZ1bmN0aW9uLCB3aGljaCBoYW5kbGVzIHJlY2VpdmVkIHBhY2tldHMuICBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBjaGVjaywgYGlmIChwa3RfbGVuIFx1MDAzZSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aClgLCB3aGljaCBsb29rcyBsaWtlIGl0J3MgbWVhbnQgdG8gcHJldmVudCByZWFkaW5nIGJleW9uZCB0aGUgcmVjZWl2ZWQgZGF0YS4gSG93ZXZlciwgdGhlcmUncyBhIHByb2JsZW0sIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgb3Igb3ZlcmZsb3csIGNvdWxkIG9jY3VyIHdpdGggdGhlIHByZXZpb3VzIGNoZWNrLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYHJlbWFpbmluZ2AgdmFyaWFibGUgdG8gY2hlY2sgaG93IG11Y2ggZGF0YSBpcyByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlci4gVGhlIGNyaXRpY2FsIGNoZWNrIG5vdyBpbnZvbHZlcyB0aGlzIGByZW1haW5pbmdgIHZhcmlhYmxlIGNvbWJpbmVkIHdpdGggdGhlIGBwa3RfbGVuYCAocGFja2V0IGxlbmd0aCkuICBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBhZGRpdGlvbmFsIGNoZWNrczpcblxuMS4gIGBpZiAocmVtYWluaW5nIFx1MDAzYyBwa3Rfb2Zmc2V0KWA6IFRoaXMgYXZvaWRzIHJlYWRpbmcgcGFzdCB0aGUgYnVmZmVyIHdoZW4gY2FsY3VsYXRpbmcgYHBrdF9sZW5gLlxuMi4gYGlmIChwa3RfbGVuIFx1MDAzYyBFVEhfSExFTiB8fCBwa3RfbGVuICsgcGt0X29mZnNldCBcdTAwM2UgcmVtYWluaW5nKWA6IFRoaXMgbm93IGNoZWNrcyB0aGUgbWluaW11bSBwYWNrZXQgc2l6ZSBhbmQgZW5zdXJlcyB0aGF0IHRoZSBwYWNrZXQgbGVuZ3RoLCBwbHVzIGFueSBvZmZzZXQsIGRvZXMgbm90IGV4Y2VlZCB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlci5cblxuVGhlIGVzc2VuY2Ugb2YgdGhlIGZpeCBpcyB0aGF0IGl0IGhhcmRlbnMgdGhlIGJvdW5kcyBjaGVja3MuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgaWYgdGhlIGBwa3RfbGVuYCBmaWVsZCB3YXMgbWFuaXB1bGF0ZWQsIG9yIHRoZSBkYXRhIHJlY2VpdmVkIHdhcyBjb3JydXB0LiBJdCBkaWRuJ3QgYWNjb3VudCBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgc21hbGxlci10aGFuLWV4cGVjdGVkIG9yIG1hbGZvcm1lZCBwYWNrZXQuXG5cblRoZSBwcmltYXJ5IGJ1ZyBiZWluZyBmaXhlZCBpcyBwcmVjaXNlbHkgYW4gKm91dC1vZi1ib3VuZHMgcmVhZCogaW4gdGhlIFVTQiB0cmFuc2ZlciBidWZmZXIsIHBvdGVudGlhbGx5IGNhdXNlZCBieSBjb3JydXB0ZWQgVVNCIHRyYW5zZmVyIGRhdGEuIFNwZWNpZmljYWxseSwgYGxlMTZfdG9fY3B1cGAgY291bGQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCBpZiBgcGt0X3N0YXJ0YCB3YXMgbmVhciB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIG9yIHRoZSBvdmVyYWxsIHBhY2tldCBgcGt0X2xlbmAgZGlkIG5vdCBhY2NvdW50IGZvciB0aGUgdG90YWwgYnl0ZXMgd2l0aGluIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAuXG5cbk5vdywgZG9lcyB0aGlzIHBhdGNoICppbnRyb2R1Y2UqIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhhdCdzIHRoZSBLTVNBTiBxdWVzdGlvbi4gIExldCdzIHdhbGsgdGhyb3VnaCB0aGUgS01TQU4gcnVsZXMgYW5kIGNvbmRpdGlvbnMuIFRoZSBwYXRjaCBkb2Vzbid0IGludm9sdmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gSXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEl0IGRvZXNuJ3QgYWxsb2NhdGUgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuICBJdCBhY3R1YWxseSAqdGlnaHRlbnMqIGJvdW5kcyBjaGVja3MuIFRoZSBuZXcgYm91bmRzIGNoZWNrcyBtYWtlIHN1cmUgd2UgYXJlIG5vdCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhIHJlY2VpdmVkIFVTQiBwYWNrZXQuXG5cbkNvbnNpZGVyaW5nIHRoZSBjb25kaXRpb25zIGZvciBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgOiBUaGlzIHBhdGNoIGRvZXMgbm90IG1vZGlmeSBvciBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIHJpc2tzLiBBbGwgdmFyaWFibGVzIGFuZCBkYXRhIGludm9sdmVkIGFyZSBpbml0aWFsaXplZDogYHJlbWFpbmluZ2AgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgcG9pbnRlciBzdWJ0cmFjdGlvbiwgYW5kIGBwa3RfbGVuYCBpcyBpbml0aWFsaXplZCB1c2luZyBlaXRoZXIgYSByZWFkIGZyb20gbWVtb3J5IG9yIHRoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIGJ1ZmZlci4gVGhlIGNvZGUgZW5zdXJlcyB0aGF0IHRoZSBieXRlcyBjb3BpZWQgaW50byB0aGUgc2tiLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgdGhlIGtlcm5lbCwgY29tZSBmcm9tIGluaXRpYWxpemVkIHJlY2VpdmVkIGRhdGEgd2l0aGluIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAuICBUaGUgcGF0Y2ggcHJpbWFyaWx5IG1pdGlnYXRlcyAqb3V0LW9mLWJvdW5kcyBhY2Nlc3MqIHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggYXJlIHdoYXQgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nICpyZWFkcyogb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIHdpbGwgY2F0Y2ggYW55IGJ1Z3MgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuICBUaGUgcHJpbWFyeSBnb2FsIG9mIHRoZSBwYXRjaCBpcyB0byBpbXBsZW1lbnQgYm91bmRzIGNoZWNrcyBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNzEsIk91dHB1dFRva2VucyI6MjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAwOjMwOjI5LjI0OTE5ODUxNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBpbiBjYXRjX3J4X2RvbmUoKSB0byBmaXggYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIFVTQiBuZXR3b3JrIHBhY2tldHMuIFNwZWNpZmljYWxseSwgaXQgY29tcHV0ZXMgdGhlIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAoJ3JlbWFpbmluZycpIGFuZCBlbnN1cmVzIHRoYXQgcGt0X29mZnNldCBieXRlcyBhcmUgYXZhaWxhYmxlIGJlZm9yZSByZWFkaW5nIHRoZSBwYWNrZXQgbGVuZ3RoIGhlYWRlciwgYW5kIHZlcmlmaWVzIHRoYXQgcGt0X2xlbiBpcyBhdCBsZWFzdCBFVEhfSExFTiBhbmQgcGt0X2xlbiArIHBrdF9vZmZzZXQgZG9lcyBub3QgZXhjZWVkIHJlbWFpbmluZyBidWZmZXIgYnl0ZXMgYmVmb3JlIGNvcHlpbmcgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc2tiLlxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBvbiB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlciBhbmQgaW1wcm9wZXIgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gQWxsIHZhcmlhYmxlcyAocmVtYWluaW5nLCBwa3RfbGVuLCBwa3Rfb2Zmc2V0KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGJ5dGVzIGNvcGllZCBpbnRvIHNrYiBjb21lIHN0cmljdGx5IGZyb20gdGhlIHZhbGlkIHJlY2VpdmVkIGJ1ZmZlciB3aXRoaW4gYWN0dWFsX2xlbmd0aCwgYW5kIHRoZSBmdWxsIHNrYiBwYXlsb2FkIGlzIHBvcHVsYXRlZCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNrYi4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcmVtYWluaW5nIGJvdW5kYXJ5IG9yIGJ1ZmZlci1vdmVyZmxvdyByaXNrcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvbmV0L3VzYi9jYXRjLmMgaW4gY2F0Y19yeF9kb25lKCkgdG8gZml4IGJvdW5kcyBjaGVja2luZyBvbiBpbmNvbWluZyBVU0IgbmV0d29yayBwYWNrZXRzLiBTcGVjaWZpY2FsbHksIGl0IGNvbXB1dGVzIHRoZSByZW1haW5pbmcgYnVmZmVyIHNpemUgKCdyZW1haW5pbmcnKSBhbmQgZW5zdXJlcyB0aGF0IHBrdF9vZmZzZXQgYnl0ZXMgYXJlIGF2YWlsYWJsZSBiZWZvcmUgcmVhZGluZyB0aGUgcGFja2V0IGxlbmd0aCBoZWFkZXIsIGFuZCB2ZXJpZmllcyB0aGF0IHBrdF9sZW4gaXMgYXQgbGVhc3QgRVRIX0hMRU4gYW5kIHBrdF9sZW4gKyBwa3Rfb2Zmc2V0IGRvZXMgbm90IGV4Y2VlZCByZW1haW5pbmcgYnVmZmVyIGJ5dGVzIGJlZm9yZSBjb3B5aW5nIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHNrYi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgb24gdXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXIgYW5kIGltcHJvcGVyIHBhY2tldCBsZW5ndGggaGFuZGxpbmcuIEFsbCB2YXJpYWJsZXMgKHJlbWFpbmluZywgcGt0X2xlbiwgcGt0X29mZnNldCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBieXRlcyBjb3BpZWQgaW50byBza2IgY29tZSBzdHJpY3RseSBmcm9tIHRoZSB2YWxpZCByZWNlaXZlZCBidWZmZXIgd2l0aGluIGFjdHVhbF9sZW5ndGgsIGFuZCB0aGUgZnVsbCBza2IgcGF5bG9hZCBpcyBwb3B1bGF0ZWQsIGxlYXZpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZSBza2IuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgc3RydWN0dXJlcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHJlbWFpbmluZyBib3VuZGFyeSBvciBidWZmZXItb3ZlcmZsb3cgcmlza3Mgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowr4xm7[1] Phase: Succeeded StartedAt: 2026-09-15 00:30:40 +0000 UTC FinishedAt: 2026-09-15 00:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 00:30:40 +0000 UTC FinishedAt: 2026-09-15 00:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2] Phase: Succeeded StartedAt: 2026-09-15 00:30:40 +0000 UTC FinishedAt: 2026-09-15 02:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 00:30:40 +0000 UTC FinishedAt: 2026-09-15 02:07:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 00:30:40 +0000 UTC FinishedAt: 2026-09-15 00:30:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 00:30:40 +0000 UTC FinishedAt: 2026-09-15 00:30:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4xm7/series-workflowr4xm7-convert-artifact-2889144293/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 00:30:50 +0000 UTC FinishedAt: 2026-09-15 00:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 00:30:50 +0000 UTC FinishedAt: 2026-09-15 00:47:13 +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:*dfbe0bd4-8884-461b-ab0f-0d27032f87b1,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-workflowr4xm7/series-workflowr4xm7-convert-artifact-2889144293/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": "a289f8be-33c2-47fb-bac2-f316f4bf4001", "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-workflowr4xm7/series-workflowr4xm7-build-action-3669480459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 00:30:50 +0000 UTC FinishedAt: 2026-09-15 00:47:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dfbe0bd4-8884-461b-ab0f-0d27032f87b1,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-workflowr4xm7/series-workflowr4xm7-convert-artifact-2889144293/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": "a289f8be-33c2-47fb-bac2-f316f4bf4001", "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-workflowr4xm7/series-workflowr4xm7-build-action-3669480459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 00:47:13 +0000 UTC FinishedAt: 2026-09-15 00:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 00:47:13 +0000 UTC FinishedAt: 2026-09-15 00:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 00:47:13 +0000 UTC FinishedAt: 2026-09-15 00:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 00:47:13 +0000 UTC FinishedAt: 2026-09-15 00:47:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr4xm7/series-workflowr4xm7-convert-artifact-3337197504/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 00:47:23 +0000 UTC FinishedAt: 2026-09-15 00:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 00:47:23 +0000 UTC FinishedAt: 2026-09-15 00:49:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a289f8be-33c2-47fb-bac2-f316f4bf4001,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-workflowr4xm7/series-workflowr4xm7-build-action-3669480459/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-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 00:49:18 +0000 UTC FinishedAt: 2026-09-15 00:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 00:49:18 +0000 UTC FinishedAt: 2026-09-15 00:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 00:49:18 +0000 UTC FinishedAt: 2026-09-15 01:06:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 00:49:18 +0000 UTC FinishedAt: 2026-09-15 01:06:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dfbe0bd4-8884-461b-ab0f-0d27032f87b1,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-workflowr4xm7/series-workflowr4xm7-convert-artifact-3337197504/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": "4eca31e9-2efe-46c1-bf73-65fb83004af5", "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-workflowr4xm7/series-workflowr4xm7-build-action-361039228/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 00:49:18 +0000 UTC FinishedAt: 2026-09-15 01:06:02 +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:*dfbe0bd4-8884-461b-ab0f-0d27032f87b1,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-workflowr4xm7/series-workflowr4xm7-convert-artifact-3337197504/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": "4eca31e9-2efe-46c1-bf73-65fb83004af5", "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-workflowr4xm7/series-workflowr4xm7-build-action-361039228/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 01:06:12 +0000 UTC FinishedAt: 2026-09-15 01:06:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 01:06:12 +0000 UTC FinishedAt: 2026-09-15 01:06:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 01:06:12 +0000 UTC FinishedAt: 2026-09-15 01:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 01:06:12 +0000 UTC FinishedAt: 2026-09-15 01:08:01 +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:*4eca31e9-2efe-46c1-bf73-65fb83004af5,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-workflowr4xm7/series-workflowr4xm7-build-action-361039228/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-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 01:08:11 +0000 UTC FinishedAt: 2026-09-15 02:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 01:08:11 +0000 UTC FinishedAt: 2026-09-15 02:07:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"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:*a289f8be-33c2-47fb-bac2-f316f4bf4001,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4eca31e9-2efe-46c1-bf73-65fb83004af5,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-workflowr4xm7/series-workflowr4xm7-build-action-3669480459/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-workflowr4xm7/series-workflowr4xm7-build-action-361039228/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 01:08:11 +0000 UTC FinishedAt: 2026-09-15 01:08:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 01:08:11 +0000 UTC FinishedAt: 2026-09-15 01:08:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"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-workflowr4xm7/series-workflowr4xm7-convert-artifact-2904567833/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 01:08:11 +0000 UTC FinishedAt: 2026-09-15 01:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 01:08:11 +0000 UTC FinishedAt: 2026-09-15 01:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 01:08:11 +0000 UTC FinishedAt: 2026-09-15 01:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 01:08:21 +0000 UTC FinishedAt: 2026-09-15 02:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4xm7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"c297ed90fbba72d32b7759aae362b36d15b2db1f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["catc_rx_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CATC","USB_NET_DRIVERS"],"series_id":"d5b46e5d-9317-4bb8-b44d-f63bc4d9cee6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 01:08:21 +0000 UTC FinishedAt: 2026-09-15 02:07:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a289f8be-33c2-47fb-bac2-f316f4bf4001,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4eca31e9-2efe-46c1-bf73-65fb83004af5,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-workflowr4xm7/series-workflowr4xm7-build-action-3669480459/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-workflowr4xm7/series-workflowr4xm7-build-action-361039228/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-workflowr4xm7/series-workflowr4xm7-convert-artifact-2904567833/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,}