Name: series-workflowms9kh Phase: Succeeded StartedAt: 2026-09-14 23:15:58 +0000 UTC FinishedAt: 2026-09-15 00:53:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[0] Phase: Succeeded StartedAt: 2026-09-14 23:15:58 +0000 UTC FinishedAt: 2026-09-14 23:18:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 23:15:58 +0000 UTC FinishedAt: 2026-09-14 23:18:59 +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_NET_AX8817X", "USB_USBNET" ], "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_NET_AX8817X", "USB_USBNET" ], "series_id": "3ab3aade-eace-4bbc-80ba-90f0694d8855" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "asix_rx_fixup_internal" ], "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+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXNpeF9yeF9maXh1cF9pbnRlcm5hbCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgKGBvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNlIHNrYi1cdTAwM2VsZW5gKSBpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHBhcnNpbmcgdGhlIDMyLWJpdCBwYWNrZXQgZGF0YSBoZWFkZXIgZnJvbSBhbiBpbmNvbWluZyBza2IuIFxuXG5UaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAvIGJ1ZmZlciBvdmVycmVhZCwgd2hpY2ggaXMgZnVuZGFtZW50YWxseSBpbiB0aGUgZG9tYWluIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFsbCBtb2RpZmllZCBjb250cm9sIGZsb3cgb3BlcmF0ZXMgc3RyaWN0bHkgb24gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgaW50ZWdlciBsZW5ndGhzIGFuZCByZXR1cm5zIGVhcmx5IG9uIGludmFsaWQgaW5wdXQgYWZ0ZXIgcmVzZXR0aW5nIHN0YXRlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIHNob3J0IFJYIGRhdGEgaGVhZGVycy4gVGhlIEFTSVggVVNCIEV0aGVybmV0IGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChzdWNoIGFzIGR1bW15X2hjZC9yYXctZ2FkZ2V0KSwgbWFraW5nIHRoaXMgUlggcGF0aCBhY2Nlc3NpYmxlIHRvIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYzUzMWVlNDNkZDhjYmQ5NWVhOWQ0ZjQ4YWQ4OGEwNzAyOWJiODBlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6MTc6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1xuaW5kZXggNGYwM2Y0ZTU3NjU1ZC4uOGM1Zjg2M2VmZTdkNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1xuQEAgLTE3OSw2ICYjNDM7MTc5LDEzIEBAIGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcbiBcdFx0XHRcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKHUxNik7XG4gXHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRpZiAob2Zmc2V0ICYjNDM7IHNpemVvZih1MzIpIFx1MDAzZSBza2ItXHUwMDNlbGVuKSB7XG4mIzQzO1x0XHRcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBTaG9ydCBEYXRhIGhlYWRlciwgb2Zmc2V0ICVkLCBsZW4gJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgIG9mZnNldCwgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuJiM0MztcdFx0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcbiBcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXHUwMDNlZGF0YSAmIzQzO1xuIFx0XHRcdFx0XHRcdFx0XHRvZmZzZXQpO1xuIFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YodTMyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0FYODgxN1gmIzM0OywKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FzaXhfcnhfZml4dXBfaW50ZXJuYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcHJvY2Vzc2luZyBzaG9ydCBSWCBkYXRhIGhlYWRlcnMuIFRoZSBBU0lYIFVTQiBFdGhlcm5ldCBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoc3VjaCBhcyBkdW1teV9oY2QvcmF3LWdhZGdldCksIG1ha2luZyB0aGlzIFJYIHBhdGggYWNjZXNzaWJsZSB0byBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM1MzFlZTQzZGQ4Y2JkOTVlYTlkNGY0OGFkODhhMDcwMjliYjgwZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDIzOjE3OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwppbmRleCA0ZjAzZjRlNTc2NTVkLi44YzVmODYzZWZlN2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwpAQCAtMTc5LDYgJiM0MzsxNzksMTMgQEAgaW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXJ4LSZndDtzcGxpdF9oZWFkID0gZmFsc2U7CiAJCQkJb2Zmc2V0ICYjNDM7PSBzaXplb2YodTE2KTsKIAkJCX0gZWxzZSB7CiYjNDM7CQkJCWlmIChvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUzMikgJmd0OyBza2ItJmd0O2xlbikgewomIzQzOwkJCQkJbmV0ZGV2X2VycihkZXYtJmd0O25ldCwgJiMzNDthc2l4X3J4X2ZpeHVwKCkgU2hvcnQgRGF0YSBoZWFkZXIsIG9mZnNldCAlZCwgbGVuICVkXG4mIzM0OywKJiM0MzsJCQkJCQkgICBvZmZzZXQsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQkJCXJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7CiYjNDM7CQkJCQlyZXR1cm4gMDsKJiM0MzsJCQkJfQomIzQzOwogCQkJCXJ4LSZndDtoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLSZndDtkYXRhICYjNDM7CiAJCQkJCQkJCW9mZnNldCk7CiAJCQkJb2Zmc2V0ICYjNDM7PSBzaXplb2YodTMyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1OAoJCQkJCQkJb3V0cHV0OiA3MQoJCQkJCQkJdGhvdWdodHM6IDMxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgQVNJWCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIGFuYWx5c2lzIG9mIHRoZSBjb2RlLiBJdCBhcHBlYXJzIHdlJiMzOTtyZSBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIFRoZSBkaWZmIGhpZ2hsaWdodHMgYSBuZXcgY29uZGl0aW9uYWwgYmxvY2sgcmVsYXRlZCB0byBoYW5kbGluZyByZWNlaXZlZCBkYXRhIGluIHRoZSBSWCBwYXRoLgoKSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgd2UgaGF2ZSBhIGZ1bGwgYHUzMmAgaGVhZGVyIGJlZm9yZSBhY2Nlc3NpbmcgaXQgYXQgYSBzcGVjaWZpYyBvZmZzZXQuIFNwZWNpZmljYWxseSwgaXQgZ3VhcmRzIGFnYWluc3QgdGhlIHNjZW5hcmlvIHdoZXJlIGBvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUzMilgIGV4Y2VlZHMgdGhlIHBhY2tldCBsZW5ndGggYHNrYi0mZ3Q7bGVuYC4gSWYgdGhpcyBjb25kaXRpb24gaG9sZHMsIHdlIGxvZyBhbiBlcnJvciB3aXRoIGBuZXRkZXZfZXJyYCwgcmVzZXQgUlggZml4dXAgaW5mb3JtYXRpb24gdXNpbmcgYHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mb2AsIGFuZCByZXR1cm4sIGVzc2VudGlhbGx5IGRyb3BwaW5nIHRoZSBwYWNrZXQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBmcmFnbWVudGVkIG9yIHRydW5jYXRlZCBwYWNrZXRzIGluIHRoZSBSWCBwYXRoLiBUaGUgY29tbWVudCBpbmRpY2F0ZXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoICYjMzQ7U2hvcnQgRGF0YSBIZWFkZXImIzM0OyB3aGljaCBpbmRpY2F0ZXMgdGhlIGlzc3VlLgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIHNpdHVhdGlvbiwgSSYjMzk7bGwgbmVlZCBhIGJpdCBtb3JlIGNvbnRleHQuIEkmIzM5O2xsIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGFzaXhfY29tbW9uLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIHBvdGVudGlhbGx5IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgdXNpbmcgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNvbmZpcm0gdGhhdCB0aGUgVVNCIEFTSVggZHJpdmVyIGlzIGVuYWJsZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBkcml2ZXIgZm9yIHRoZSBVU0IgQVNJWCBjaGlwLCB0aGF0IHN1cHBvcnRzIG5ldHdvcmsgY29ubmVjdGl2aXR5IHVzaW5nIHRoZSBVU0IgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFx0ICovXG4gMTUxOlx0XHRpZiAocngtXHUwMDNlcmVtYWluaW5nIFx1MDAyNlx1MDAyNiAocngtXHUwMDNlcmVtYWluaW5nICYjNDM7IHNpemVvZih1MzIpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikpIHtcbiAxNTI6XHRcdFx0b2Zmc2V0ID0gKChyeC1cdTAwM2VyZW1haW5pbmcgJiM0MzsgMSkgXHUwMDI2IDB4ZmZmZSk7XG4gMTUzOlx0XHRcdHJ4LVx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQpO1xuIDE1NDpcdFx0XHRvZmZzZXQgPSAwO1xuIDE1NTpcdFxuIDE1NjpcdFx0XHRzaXplID0gKHUxNikocngtXHUwMDNlaGVhZGVyIFx1MDAyNiAweDdmZik7XG4gMTU3Olx0XHRcdGlmIChzaXplICE9ICgofnJ4LVx1MDAzZWhlYWRlciBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmZikpIHtcbiAxNTg6XHRcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBEYXRhIEhlYWRlciBzeW5jaHJvbmlzYXRpb24gd2FzIGxvc3QsIHJlbWFpbmluZyAlZFxcblwmIzM0OyxcbiAxNTk6XHRcdFx0XHRcdCAgIHJ4LVx1MDAzZXJlbWFpbmluZyk7XG4gMTYwOlx0XHRcdFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcbiAxNjE6XHRcdFx0fVxuIDE2MjpcdFx0fVxuIDE2MzpcdFxuIDE2NDpcdFx0d2hpbGUgKG9mZnNldCAmIzQzOyBzaXplb2YodTE2KSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pIHtcbiAxNjU6XHRcdFx0dTE2IGNvcHlfbGVuZ3RoO1xuIDE2NjpcdFxuIDE2NzpcdFx0XHRpZiAoIXJ4LVx1MDAzZXJlbWFpbmluZykge1xuIDE2ODpcdFx0XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0ID09IHNpemVvZih1MTYpKSB7XG4gMTY5Olx0XHRcdFx0XHRyeC1cdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXG4gMTcwOlx0XHRcdFx0XHRcdFx0c2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0KTtcbiAxNzE6XHRcdFx0XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSB0cnVlO1xuIDE3MjpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YodTE2KTtcbiAxNzM6XHRcdFx0XHRcdGJyZWFrO1xuIDE3NDpcdFx0XHRcdH1cbiAxNzU6XHRcbiAxNzY6XHRcdFx0XHRpZiAocngtXHUwMDNlc3BsaXRfaGVhZCA9PSB0cnVlKSB7XG4gMTc3Olx0XHRcdFx0XHRyeC1cdTAwM2VoZWFkZXIgfD0gKGdldF91bmFsaWduZWRfbGUxNihcbiAxNzg6XHRcdFx0XHRcdFx0XHRza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQpIFx1MDAzY1x1MDAzYyAxNik7XG4gMTc5Olx0XHRcdFx0XHRyeC1cdTAwM2VzcGxpdF9oZWFkID0gZmFsc2U7XG4gMTgwOlx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZih1MTYpO1xuIDE4MTpcdFx0XHRcdH0gZWxzZSB7XG4gMTgyOlx0XHRcdFx0XHRpZiAob2Zmc2V0ICYjNDM7IHNpemVvZih1MzIpIFx1MDAzZSBza2ItXHUwMDNlbGVuKSB7XG4gMTgzOlx0XHRcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxcblwmIzM0OyxcbiAxODQ6XHRcdFx0XHRcdFx0XHQgICBvZmZzZXQsIHNrYi1cdTAwM2VsZW4pO1xuIDE4NTpcdFx0XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuIDE4NjpcdFx0XHRcdFx0XHRyZXR1cm4gMDtcbiAxODc6XHRcdFx0XHRcdH1cbiAxODg6XHRcbiAxODk6XHRcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXHUwMDNlZGF0YSAmIzQzO1xuIDE5MDpcdFx0XHRcdFx0XHRcdFx0XHRvZmZzZXQpO1xuIDE5MTpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YodTMyKTtcbiAxOTI6XHRcdFx0XHR9XG4gMTkzOlx0XG4gMTk0Olx0XHRcdFx0LyogdGFrZSBmcmFtZSBsZW5ndGggZnJvbSBEYXRhIGhlYWRlciAzMi1iaXQgd29yZCAqL1xuIDE5NTpcdFx0XHRcdHNpemUgPSAodTE2KShyeC1cdTAwM2VoZWFkZXIgXHUwMDI2IDB4N2ZmKTtcbiAxOTY6XHRcdFx0XHRpZiAoc2l6ZSAhPSAoKH5yeC1cdTAwM2VoZWFkZXIgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHg3ZmYpKSB7XG4gMTk3Olx0XHRcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBCYWQgSGVhZGVyIExlbmd0aCAweCV4LCBvZmZzZXQgJWRcXG5cJiMzNDssXG4gMTk4Olx0XHRcdFx0XHRcdCAgIHJ4LVx1MDAzZWhlYWRlciwgb2Zmc2V0KTtcbiAxOTk6XHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4gMjAwOlx0XHRcdFx0XHRyZXR1cm4gMDtcbiAyMDE6XHRcdFx0XHR9XG4gMjAyOlx0XHRcdFx0aWYgKHNpemUgXHUwMDNlIGRldi1cdTAwM2VuZXQtXHUwMDNlbXR1ICYjNDM7IEVUSF9ITEVOICYjNDM7IFZMQU5fSExFTikge1xuIDIwMzpcdFx0XHRcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDthc2l4X3J4X2ZpeHVwKCkgQmFkIFJYIExlbmd0aCAlZFxcblwmIzM0OyxcbiAyMDQ6XHRcdFx0XHRcdFx0ICAgc2l6ZSk7XG4gMjA1Olx0XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuIDIwNjpcdFx0XHRcdFx0cmV0dXJuIDA7XG4gMjA3Olx0XHRcdFx0fVxuIDIwODpcdFxuIDIwOTpcdFx0XHRcdC8qIFNvbWV0aW1lcyBtYXkgZmFpbCB0byBnZXQgYSBuZXRkZXYgc29ja2V0IGJ1ZmZlciBidXRcbiAyMTA6XHRcdFx0XHQgKiBjb250aW51ZSB0byBwcm9jZXNzIHRoZSBVUkIgc29ja2V0IGJ1ZmZlciBzbyB0aGF0XG4gMjExOlx0XHRcdFx0ICogc3luY2hyb25pc2F0aW9uIG9mIHRoZSBFdGhlcm5ldCBmcmFtZSBEYXRhIGhlYWRlclxuIDIxMjpcdFx0XHRcdCAqIHdvcmQgaXMgbWFpbnRhaW5lZC5cbiAyMTM6XHRcdFx0XHQgKi9cbiAyMTQ6XHRcdFx0XHRyeC1cdTAwM2VheF9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKGRldi1cdTAwM2VuZXQsIHNpemUpO1xuIDIxNTpcdFxuIDIxNjpcdFx0XHRcdHJ4LVx1MDAzZXJlbWFpbmluZyA9IHNpemU7XG4gMjE3Olx0XHRcdH1cbiAyMTg6XHRcbiAyMTk6XHRcdFx0aWYgKHJ4LVx1MDAzZXJlbWFpbmluZyBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIG9mZnNldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FzaXhfY29tbW9uLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXHQmIzQzOz0gYXNpeC5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6MTQ6YXNpeC15IDo9IGFzaXhfZGV2aWNlcy5vIGFzaXhfY29tbW9uLm8gYXg4ODE3MmEub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxNzlfMTc4QSkgICAgICAmIzQzOz0gYXg4ODE3OV8xNzhhLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTgxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKktjb25maWcgRGl2ZSBUaW1lISoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGZvciB0aGUgQVg4ODE3WCBVU0IgbmV0d29yayBhZGFwdGVyLCBzbyBteSBmaXJzdCBzdGVwIGlzIGNsZWFyOiBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYFVTQl9ORVRfQVg4ODE3WGAuIFRoYXQgc2hvdWxkIGJlIHRoZSBrZXkgZW50cnkgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgdGllZCB0byBpdC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIHdvcms/IEFyZSB0aGVyZSBzcGVjaWZpYyBVU0Igc3RhY2sgcmVxdWlyZW1lbnRzPwoqICAgKipEZWZhdWx0IFZhbHVlczoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdHMgZm9yIHJlbGF0ZWQgcGFyYW1ldGVycyBhbmQgYXJlIHRoZXJlIGFueSByZWFzb25hYmxlIGRlZmF1bHRzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aG91dCBjaGFuZ2VzPwoqICAgKipNZW51IFN0cnVjdHVyZToqKiBIb3cgaXMgaXQgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyBjb25maWd1cmF0aW9uPyBJcyBpdCBuZXN0ZWQsIGhpZGRlbiBiZWhpbmQgb3RoZXIgb3B0aW9ucywgb3Igc3RyYWlnaHRmb3J3YXJkPwoqICAgKipDb25kaXRpb25hbCBDb21waWxhdGlvbjoqKiBVbmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXMgdGhpcyBkcml2ZXIgZXZlbiAqYXZhaWxhYmxlKj8gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIG9yIGtlcm5lbCB2ZXJzaW9uIHJlcXVpcmVtZW50cz8KClRoaXMgS2NvbmZpZyBhbmFseXNpcyBpcyBnb2luZyB0byBzZXQgdGhlIHN0YWdlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIFVTQiBuZXR3b3JrIGRyaXZlciBlY29zeXN0ZW0gYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIGZvciBjdXN0b21pemF0aW9uIHJlbGF0ZWQgdG8gdGhlIEFYODgxN1ggY2hpcC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtVU0JfTkVUX0FYODgxN1gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTMyPWNvbmZpZyBVU0JfVVNCTkVUXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY1LVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY2OmNvbmZpZyBVU0JfTkVUX0FYODgxN1hcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2Ny1cdHRyaXN0YXRlIFwmIzM0O0FTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19VU0JfTEFONzhYWClcdCYjNDM7PSBsYW43OHh4Lm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfVVNCX05FVF9BWDg4MTdYKVx0JiM0Mzs9IGFzaXgub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE0LWFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgVVNCIE5ldHdvcmtpbmcgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIFVTQiBuZXR3b3JraW5nIGRyaXZlcnMuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCB6ZXJvIGluIGFyb3VuZCBsaW5lIDE2Ni4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoZXRoZXIgb3Igbm90IHNwZWNpZmljIFVTQiBuZXR3b3JrIGRyaXZlciBmZWF0dXJlcyBhcmUgZXZlbiAqYXZhaWxhYmxlKiB0byBiZSBjb25maWd1cmVkIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHdob2xlIHN5c3RlbSB3b3JrcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjA6XHRcbiAxNjE6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXHUwMDNlLlxuIDE2MjpcdFxuIDE2MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxNjQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cbiAxNjU6XHRcbiAxNjY6XHRjb25maWcgVVNCX05FVF9BWDg4MTdYXG4gMTY3Olx0XHR0cmlzdGF0ZSBcJiMzNDtBU0lYIEFYODh4eHggQmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBBZGFwdGVyc1wmIzM0O1xuIDE2ODpcdFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG4gMTY5Olx0XHRzZWxlY3QgQ1JDMzJcbiAxNzA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gMTcxOlx0XHRzZWxlY3QgQVg4ODc5NkJfUEhZXG4gMTcyOlx0XHRpbXBseSBORVRfU0VMRlRFU1RTXG4gMTczOlx0XHRkZWZhdWx0IHlcbiAxNzQ6XHRcdGhlbHBcbiAxNzU6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBBU0lYIEFYODh4eHggYmFzZWQgVVNCIDIuMFxuIDE3NjpcdFx0ICAxMC8xMDAgRXRoZXJuZXQgYWRhcHRlcnMuXG4gMTc3Olx0XG4gMTc4Olx0XHQgIFRoaXMgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBkZXZpY2VzOlxuIDE3OTpcdFx0ICAgICogQXRlbiBVQzIxMFRcbiAxODA6XHRcdCAgICAqIEFTSVggQVg4ODE3MlxuIDE4MTpcdFx0ICAgICogQmlsbGlvbnRvbiBTeXN0ZW1zLCBVU0IyQVJcbiAxODI6XHRcdCAgICAqIEJpbGxpb250b24gU3lzdGVtcywgR1VTQjJBTS0xRy1CXG4gMTgzOlx0XHQgICAgKiBCdWZmYWxvIExVQS1VMi1LVFhcbiAxODQ6XHRcdCAgICAqIENvcmVnYSBGRXRoZXIgVVNCMi1UWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTM3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBOZXR3b3JrIERldmljZSBSZWFjaGFiaWxpdHkgYW5kIFN5emthbGxlciBFbXVsYXRpb24qKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBhY3R1YWxseSByZWFjaCB0aGlzIFVTQiBuZXR3b3JrIGRldmljZSB0aHJvdWdoIHN5emthbGxlciYjMzk7cyBlbXVsYXRpb24/IEdvb2QgbmV3cyEgSXQmIzM5O3MgZGVmaW5pdGVseSBwb3NzaWJsZS4gSW4gZmFjdCwgVVNCIGRldmljZXMsIHNwZWNpZmljYWxseSB0aGUgb25lcyB0aGF0IHVzZSBuZXR3b3JrIGRyaXZlcnMgbGlrZSBBU0lYIG9yIENEQy1FdGhlciwgYXJlIGZyZXF1ZW50bHkgZnV6emVkIGJ5IHN5emthbGxlciB1c2luZyB0aGUgUmF3IEdhZGdldCAvIGR1bW15X2hjZCBlbXVsYXRpb24sIHdoaWNoIHdvcmtzIHZpYSB0aGUgYHN5el91c2JfY29ubmVjdGAgc3lzdGVtIGNhbGwuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgKmhvdyogc3l6a2FsbGVyIGlzIGhhbmRsaW5nIHRoaXMsIGFuZCB3aGV0aGVyIGl0IGhhcyBzcGVjaWZpYyBVU0IgZGVzY3JpcHRpb25zIGZvciBBU0lYIG9yIHNpbXBseSB1c2VzIHJhdyBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhlIFVTQiBmdXp6aW5nIGluIHN5emthbGxlciBoaW5nZXMgb24gdGhlIGAvZGV2L3Jhdy1nYWRnZXRgIGRldmljZSBhbmQgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIGNhbGwuIEJhc2ljYWxseSwgYW55IFVTQiBkcml2ZXIgc2hvdWxkIGJlIGFibGUgdG8gYmluZCB0byBhbiBlbXVsYXRlZCBVU0IgZGV2aWNlIGFzIGxvbmcgYXMgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMgbWF0Y2guIE9uY2UgYm91bmQsIHN5emthbGxlciBjYW4gaW5qZWN0IFVTQiBwYWNrZXRzLCBvciBVUkJzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNwZWNpZmljYWxseSBpbnZlc3RpZ2F0ZSB0aGUgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FzaXhfcnhfZml4dXBfaW50ZXJuYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXguaD0yMDY9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDk6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTAtXHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTExNT1zdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE3LVx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMTg6XHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTktXHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjEzNjppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzctXHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9MjQ5PWludCBhc2l4X3J4X2ZpeHVwX2NvbW1vbihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjUzLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjU0Olx0cmV0dXJuIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoZGV2LCBza2IsIHJ4KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI1NS19XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MzM5PXN0YXRpYyBpbnQgYXg4ODE3MmFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0My1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0NDpcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQVNJWCBVU0IgTmV0d29yayBEcml2ZXIgUlggRml4dXAgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBBU0lYIFVTQiBuZXR3b3JrIGRyaXZlciBpc3N1ZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXggZm9yIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gdGhlIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCBmdW5jdGlvbi4gIEl0JiMzOTtzIHByZXR0eSBjbGVhciB3aGF0IHRoZSBwcm9ibGVtIHdhczogIGluIHRoZSBvcmlnaW5hbCBjb2RlLCB3aXRoaW4gdGhlIGB3aGlsZWAgbG9vcCwgdGhlcmUgd2FzIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHJlbWFpbmluZyBkYXRhIGluIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgd2FzIG9ubHkgdGhyZWUgYnl0ZXMsIGJ1dCB0aGUgY29kZSB3YXMgYXR0ZW1wdGluZyB0byByZWFkIGZvdXIgYnl0ZXMgdXNpbmcgYGdldF91bmFsaWduZWRfbGUzMmAuICBUaGlzIHBhdGNoIGFkZHMgYSBjcnVjaWFsIGJvdW5kcyBjaGVjayB0byBwcmV2ZW50IHRoYXQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGZ1enphYmxlLiAgQmFzZWQgb24gbXkga25vd2xlZGdlLCBhbmQgY29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhLCBpdCBkZWZpbml0ZWx5IGlzLiAgVGhlIGZpeCBvY2N1cnMgd2l0aGluIGEgYGRyaXZlcl9pbmZvYCYjMzk7cyBgLnJ4X2ZpeHVwYCBjYWxsYmFjayBpbiBVU0JuZXQuIFNwZWNpZmljYWxseSwgYW4gZW11bGF0ZWQgVVNCIGRldmljZSB3aXRoIGEgc3VwcG9ydGVkIFZJRC9QSUQgKGxpa2UgdGhlIGBheDg4MTcyYCBmYW1pbHkpIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiAgV2hlbiBzeXprYWxsZXIgc2VuZHMgZGF0YSB0byB0aGUgZGV2aWNlJiMzOTtzIGVuZHBvaW50LCBgdXNibmV0X2JoYCBpcyBzY2hlZHVsZWQsIHdoaWNoIGluIHR1cm4gaW52b2tlcyBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAuICBUaGlzIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIGZ1enppbmcgd2l0aCBVU0IgcmF3LWdhZGdldCAvIGR1bW15X2hjZC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuCgpSZWdhcmRpbmcgdGhlIGBGb2N1c1N5bWJvbHNgLCB0aGUgZXhhY3QgZnVuY3Rpb24gbW9kaWZpZWQgaXMgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgLiBJdCYjMzk7cyBub3QgaW5saW5lZCBhbmQgaXMgZXhwb3J0ZWQgaW4gYGFzaXguaGAuICBgYXNpeF9yeF9maXh1cF9jb21tb25gIGNhbGxzIGl0LCBhcyBkb2VzIGBheDg4MTcyYV9yeF9maXh1cGAuIFNvIHRoZSBtb3N0IHNwZWNpZmljIHdvdWxkIGJlIGBbJiMzNDthc2l4X3J4X2ZpeHVwX2ludGVybmFsJiMzNDtdYCwgYnV0IGl0IGNvdWxkIGFsc28gaW5jbHVkZSBgYXNpeF9yeF9maXh1cF9jb21tb25gLiBUaGUgZnVuY3Rpb24gaXMgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgYSBkaXN0aW5jdCBzeW1ib2wuCgpGaW5hbGx5LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IENoZWNraW5nIGBkcml2ZXJzL25ldC91c2IvTWFrZWZpbGVgLCB0aGUgYGFzaXgub2AgbW9kdWxlIGlzIGJ1aWx0IGlmIGBDT05GSUdfVVNCX05FVF9BWDg4MTdYYCBpcyBlbmFibGVkLiAgTG9va2luZyBpbnRvIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AsIGBVU0JfTkVUX0FYODgxN1hgIGRlcGVuZHMgb24gYFVTQl9VU0JORVRgLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYE5FVERFVklDRVNgIGFuZCBgVVNCX05FVF9EUklWRVJTYC4gVGhlcmVmb3JlLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYENPTkZJR19VU0JfTkVUX0FYODgxN1g9eWAgKG9yIGBtYCkgYW5kIGl0cyBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29tbWVudCBcJiMzNDtIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gIVVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcbiAgIDk6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBOZXR3b3JrIEFkYXB0ZXJzXCYjMzQ7XG4gIDEwOlx0XHRkZWZhdWx0IFVTQiBpZiBVU0JcbiAgMTE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgMTI6XHRcbiAgMTM6XHRpZiBVU0JfTkVUX0RSSVZFUlNcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgVVNCX0NBVENcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMTc6XHRcdHNlbGVjdCBDUkMzMlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxuICAyMDpcdFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxuICAyMTpcdFx0ICBCZWxraW4gRjVVMDExXG4gIDIyOlx0XHQgIEJlbGtpbiBGNVUxMTFcbiAgMjM6XHRcdCAgQ0FUQyBOZXRNYXRlXG4gIDI0Olx0XHQgIENBVEMgTmV0TWF0ZSBJSVxuICAyNTpcdFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcbiAgMjY6XHRcbiAgMjc6XHRcdCAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSxcbiAgMjg6XHRcdCAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvblxuICAyOTpcdFx0ICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy5cbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVVNCX0tBV0VUSFxuICAzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5XG4gIDM4Olx0XHQgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OlxuICAzOTpcdFx0ICAzQ29tIDNDMTkyNTBcbiAgNDA6XHRcdCAgQURTIFVTQi0xMEJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODgKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFTSVggQVg4OHh4eCBFdGhlcm5ldCBBZGFwdGVyIERyaXZlciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGxldCBtZSBsYXkgdGhpcyBvdXQgY2xlYXJseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBmb3IgdGhlIEFTSVggQVg4OHh4eCBFdGhlcm5ldCBhZGFwdGVyIGRyaXZlci4gSSBzZWUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSBhcmUgYFVTQl9ORVRfQVg4ODE3WGAsIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBhbmQgYE5FVGAuIEkmIzM5O2xsIGtlZXAgdGhvc2UgaW4gbWluZC4KCkkmIzM5O20gY2hlY2tpbmcgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJiMzOTt2ZSBtaXNzZWQuIGBVU0JfTkVUX0FYODgxN1hgIGxvb2tzIGxpa2UgdGhlIGRpcmVjdCBjb25maWd1cmF0aW9uIGZsYWcgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyIGFuZCBgVVNCX1VTQk5FVGAgaXMgdGhlIGJyb2FkZXIgZnJhbWV3b3JrIGl0IGJlbG9uZ3MgdG8uCgpOb3csIGxldCYjMzk7cyBjb25maXJtIGV2ZXJ5dGhpbmcgZWxzZTogaXQmIzM5O3MgbWFya2VkIGFzIGBXb3J0aEZ1enppbmdgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGdvb2QgdGFyZ2V0LiBUaGUgcmVhc29uaW5nIGlzIGNvbmNpc2UgYW5kIG9uIHBvaW50OiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgYm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdHkgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAuIFRoaXMgaXMgaGFwcGVuaW5nIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBpbmNvbWluZyBuZXR3b3JrIHBhY2tldHMgYW5kIHRoZSBkcml2ZXIgaXRzZWxmIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgYXMgaXQgc2ltcGxpZmllcyB0ZXN0aW5nLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0IC0gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbi4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYXMgZXhwZWN0ZWQ6IGBVU0JfTkVUX0FYODgxN1hgIGFuZCBgVVNCX1VTQk5FVGAuCgpZZXMsIGl0JiMzOTtzIGFsbCBjbGVhci4gSSBjYW4gdmVyaWZ5IGFsbCBvZiB0aGlzLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXNpeF9yeF9maXh1cF9pbnRlcm5hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIHNob3J0IFJYIGRhdGEgaGVhZGVycy4gVGhlIEFTSVggVVNCIEV0aGVybmV0IGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChzdWNoIGFzIGR1bW15X2hjZC9yYXctZ2FkZ2V0KSwgbWFraW5nIHRoaXMgUlggcGF0aCBhY2Nlc3NpYmxlIHRvIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXNpeF9yeF9maXh1cF9pbnRlcm5hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIHNob3J0IFJYIGRhdGEgaGVhZGVycy4gVGhlIEFTSVggVVNCIEV0aGVybmV0IGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChzdWNoIGFzIGR1bW15X2hjZC9yYXctZ2FkZ2V0KSwgbWFraW5nIHRoaXMgUlggcGF0aCBhY2Nlc3NpYmxlIHRvIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgb2Zmc2V0ICYjNDM7IHNpemVvZih1MzIpIFx1MDAzZSBza2ItXHUwMDNlbGVuYCkgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIHRoZSAzMi1iaXQgcGFja2V0IGRhdGEgaGVhZGVyIGZyb20gYW4gaW5jb21pbmcgc2tiLiBcblxuVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgLyBidWZmZXIgb3ZlcnJlYWQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsbHkgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgbW9kaWZpZWQgY29udHJvbCBmbG93IG9wZXJhdGVzIHN0cmljdGx5IG9uIGV4aXN0aW5nIGluaXRpYWxpemVkIGludGVnZXIgbGVuZ3RocyBhbmQgcmV0dXJucyBlYXJseSBvbiBpbnZhbGlkIGlucHV0IGFmdGVyIHJlc2V0dGluZyBzdGF0ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRjNTMxZWU0M2RkOGNiZDk1ZWE5ZDRmNDhhZDg4YTA3MDI5YmI4MGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAyMzoxNzoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMKaW5kZXggNGYwM2Y0ZTU3NjU1ZC4uOGM1Zjg2M2VmZTdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDEzIEBAIGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlyeC0mZ3Q7c3BsaXRfaGVhZCA9IGZhbHNlOwogCQkJCW9mZnNldCAmIzQzOz0gc2l6ZW9mKHUxNik7CiAJCQl9IGVsc2UgewomIzQzOwkJCQlpZiAob2Zmc2V0ICYjNDM7IHNpemVvZih1MzIpICZndDsgc2tiLSZndDtsZW4pIHsKJiM0MzsJCQkJCW5ldGRldl9lcnIoZGV2LSZndDtuZXQsICYjMzQ7YXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxuJiMzNDssCiYjNDM7CQkJCQkJICAgb2Zmc2V0LCBza2ItJmd0O2xlbik7CiYjNDM7CQkJCQlyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpOwomIzQzOwkJCQkJcmV0dXJuIDA7CiYjNDM7CQkJCX0KJiM0MzsKIAkJCQlyeC0mZ3Q7aGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi0mZ3Q7ZGF0YSAmIzQzOwogCQkJCQkJCQlvZmZzZXQpOwogCQkJCW9mZnNldCAmIzQzOz0gc2l6ZW9mKHUzMik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYXNpeF9jb21tb24uYyBQYXRjaCBmb3IgS01TQU4gSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgIGFuZCBmaWd1cmUgb3V0IHdoZXRoZXIgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gTXkgYXBwcm9hY2ggd2lsbCBiZSBtZXRob2RpY2FsLiBGaXJzdCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgZGlmZiBpdHNlbGYsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyBsaW5lcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkLiBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgY2hhbmdlcy4gVGhhdCBtZWFucyByZWFkaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AgdG8gZ3Jhc3AgdGhlIGxhcmdlciBwaWN0dXJlLiBJJiMzOTtsbCB1c2UgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gbG9vayBhdCB0aGUgY29kZSBhcm91bmQgbGluZSAxNzkgdG8gZ2V0IGEgZmVlbCBmb3Igd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEJhc2VkIG9uIG15IGV4cGVydGlzZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2guIFRoaXMgd2lsbCBoZWxwIG1lIGRldGVybWluZSB3aGV0aGVyIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFueXRoaW5nIG5ldyB0aGF0IG5lY2Vzc2l0YXRlcyBhIGBOZWVkc0tNU0FOPXRydWVgIHNldHRpbmcsIG9yIGlmIGEgc3RhbmRhcmQgdGVzdGluZyByZWdpbWUgaXMgc3VmZmljaWVudCAoaW1wbHlpbmcgYE5lZWRzS01TQU49ZmFsc2VgKS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0dTE2IHNpemU7XG4gMTQxOlx0XG4gMTQyOlx0XHQvKiBXaGVuIGFuIEV0aGVybmV0IGZyYW1lIHNwYW5zIG11bHRpcGxlIFVSQiBzb2NrZXQgYnVmZmVycyxcbiAxNDM6XHRcdCAqIGRvIGEgc2FuaXR5IHRlc3QgZm9yIHRoZSBEYXRhIGhlYWRlciBzeW5jaHJvbmlzYXRpb24uXG4gMTQ0Olx0XHQgKiBBdHRlbXB0IHRvIGRldGVjdCB0aGUgc2l0dWF0aW9uIG9mIHRoZSBwcmV2aW91cyBzb2NrZXQgYnVmZmVyIGhhdmluZ1xuIDE0NTpcdFx0ICogYmVlbiB0cnVuY2F0ZWQgb3IgYSBzb2NrZXQgYnVmZmVyIHdhcyBtaXNzaW5nLiBUaGVzZSBzaXR1YXRpb25zXG4gMTQ2Olx0XHQgKiBjYXVzZSBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIGRhdGEgc3RyZWFtIGFuZCB0aGVyZWZvcmUgbmVlZCB0byBhdm9pZFxuIDE0NzpcdFx0ICogYXBwZW5kaW5nIGJhZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbmV0ZGV2IHNvY2tldCBidWZmZXIuXG4gMTQ4Olx0XHQgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0XG4gMTQ5Olx0XHQgKiBidWZmZXIuXG4gMTUwOlx0XHQgKi9cbiAxNTE6XHRcdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2IChyeC1cdTAwM2VyZW1haW5pbmcgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuKSkge1xuIDE1MjpcdFx0XHRvZmZzZXQgPSAoKHJ4LVx1MDAzZXJlbWFpbmluZyAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlKTtcbiAxNTM6XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCk7XG4gMTU0Olx0XHRcdG9mZnNldCA9IDA7XG4gMTU1Olx0XG4gMTU2Olx0XHRcdHNpemUgPSAodTE2KShyeC1cdTAwM2VoZWFkZXIgXHUwMDI2IDB4N2ZmKTtcbiAxNTc6XHRcdFx0aWYgKHNpemUgIT0gKCh+cngtXHUwMDNlaGVhZGVyIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4N2ZmKSkge1xuIDE1ODpcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIERhdGEgSGVhZGVyIHN5bmNocm9uaXNhdGlvbiB3YXMgbG9zdCwgcmVtYWluaW5nICVkXFxuXCYjMzQ7LFxuIDE1OTpcdFx0XHRcdFx0ICAgcngtXHUwMDNlcmVtYWluaW5nKTtcbiAxNjA6XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuIDE2MTpcdFx0XHR9XG4gMTYyOlx0XHR9XG4gMTYzOlx0XG4gMTY0Olx0XHR3aGlsZSAob2Zmc2V0ICYjNDM7IHNpemVvZih1MTYpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikge1xuIDE2NTpcdFx0XHR1MTYgY29weV9sZW5ndGg7XG4gMTY2Olx0XG4gMTY3Olx0XHRcdGlmICghcngtXHUwMDNlcmVtYWluaW5nKSB7XG4gMTY4Olx0XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQgPT0gc2l6ZW9mKHUxNikpIHtcbiAxNjk6XHRcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUxNihcbiAxNzA6XHRcdFx0XHRcdFx0XHRza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQpO1xuIDE3MTpcdFx0XHRcdFx0cngtXHUwMDNlc3BsaXRfaGVhZCA9IHRydWU7XG4gMTcyOlx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZih1MTYpO1xuIDE3MzpcdFx0XHRcdFx0YnJlYWs7XG4gMTc0Olx0XHRcdFx0fVxuIDE3NTpcdFxuIDE3NjpcdFx0XHRcdGlmIChyeC1cdTAwM2VzcGxpdF9oZWFkID09IHRydWUpIHtcbiAxNzc6XHRcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciB8PSAoZ2V0X3VuYWxpZ25lZF9sZTE2KFxuIDE3ODpcdFx0XHRcdFx0XHRcdHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCkgXHUwMDNjXHUwMDNjIDE2KTtcbiAxNzk6XHRcdFx0XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcbiAxODA6XHRcdFx0XHRcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKHUxNik7XG4gMTgxOlx0XHRcdFx0fSBlbHNlIHtcbiAxODI6XHRcdFx0XHRcdGlmIChvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbiAxODM6XHRcdFx0XHRcdFx0bmV0ZGV2X2VycihkZXYtXHUwMDNlbmV0LCBcJiMzNDthc2l4X3J4X2ZpeHVwKCkgU2hvcnQgRGF0YSBoZWFkZXIsIG9mZnNldCAlZCwgbGVuICVkXFxuXCYjMzQ7LFxuIDE4NDpcdFx0XHRcdFx0XHRcdCAgIG9mZnNldCwgc2tiLVx1MDAzZWxlbik7XG4gMTg1Olx0XHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4gMTg2Olx0XHRcdFx0XHRcdHJldHVybiAwO1xuIDE4NzpcdFx0XHRcdFx0fVxuIDE4ODpcdFxuIDE4OTpcdFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICYjNDM7XG4gMTkwOlx0XHRcdFx0XHRcdFx0XHRcdG9mZnNldCk7XG4gMTkxOlx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZih1MzIpO1xuIDE5MjpcdFx0XHRcdH1cbiAxOTM6XHRcbiAxOTQ6XHRcdFx0XHQvKiB0YWtlIGZyYW1lIGxlbmd0aCBmcm9tIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkICovXG4gMTk1Olx0XHRcdFx0c2l6ZSA9ICh1MTYpKHJ4LVx1MDAzZWhlYWRlciBcdTAwMjYgMHg3ZmYpO1xuIDE5NjpcdFx0XHRcdGlmIChzaXplICE9ICgofnJ4LVx1MDAzZWhlYWRlciBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmZikpIHtcbiAxOTc6XHRcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcblwmIzM0OyxcbiAxOTg6XHRcdFx0XHRcdFx0ICAgcngtXHUwMDNlaGVhZGVyLCBvZmZzZXQpO1xuIDE5OTpcdFx0XHRcdFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcbiAyMDA6XHRcdFx0XHRcdHJldHVybiAwO1xuIDIwMTpcdFx0XHRcdH1cbiAyMDI6XHRcdFx0XHRpZiAoc2l6ZSBcdTAwM2UgZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgRVRIX0hMRU4gJiM0MzsgVkxBTl9ITEVOKSB7XG4gMjAzOlx0XHRcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxuXCYjMzQ7LFxuIDIwNDpcdFx0XHRcdFx0XHQgICBzaXplKTtcbiAyMDU6XHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4gMjA2Olx0XHRcdFx0XHRyZXR1cm4gMDtcbiAyMDc6XHRcdFx0XHR9XG4gMjA4Olx0XG4gMjA5Olx0XHRcdFx0LyogU29tZXRpbWVzIG1heSBmYWlsIHRvIGdldCBhIG5ldGRldiBzb2NrZXQgYnVmZmVyIGJ1dFxuIDIxMDpcdFx0XHRcdCAqIGNvbnRpbnVlIHRvIHByb2Nlc3MgdGhlIFVSQiBzb2NrZXQgYnVmZmVyIHNvIHRoYXRcbiAyMTE6XHRcdFx0XHQgKiBzeW5jaHJvbmlzYXRpb24gb2YgdGhlIEV0aGVybmV0IGZyYW1lIERhdGEgaGVhZGVyXG4gMjEyOlx0XHRcdFx0ICogd29yZCBpcyBtYWludGFpbmVkLlxuIDIxMzpcdFx0XHRcdCAqL1xuIDIxNDpcdFx0XHRcdHJ4LVx1MDAzZWF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVx1MDAzZW5ldCwgc2l6ZSk7XG4gMjE1Olx0XG4gMjE2Olx0XHRcdFx0cngtXHUwMDNlcmVtYWluaW5nID0gc2l6ZTtcbiAyMTc6XHRcdFx0fVxuIDIxODpcdFxuIDIxOTpcdFx0XHRpZiAocngtXHUwMDNlcmVtYWluaW5nIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0KSB7XG4gMjIwOlx0XHRcdFx0Y29weV9sZW5ndGggPSBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0O1xuIDIyMTpcdFx0XHRcdHJ4LVx1MDAzZXJlbWFpbmluZyAtPSBjb3B5X2xlbmd0aDtcbiAyMjI6XHRcdFx0fSBlbHNlIHtcbiAyMjM6XHRcdFx0XHRjb3B5X2xlbmd0aCA9IHJ4LVx1MDAzZXJlbWFpbmluZztcbiAyMjQ6XHRcdFx0XHRyeC1cdTAwM2VyZW1haW5pbmcgPSAwO1xuIDIyNTpcdFx0XHR9XG4gMjI2Olx0XG4gMjI3Olx0XHRcdGlmIChyeC1cdTAwM2VheF9za2IpIHtcbiAyMjg6XHRcdFx0XHRza2JfcHV0X2RhdGEocngtXHUwMDNlYXhfc2tiLCBza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQsXG4gMjI5Olx0XHRcdFx0XHQgICAgIGNvcHlfbGVuZ3RoKTtcbiAyMzA6XHRcdFx0XHRpZiAoIXJ4LVx1MDAzZXJlbWFpbmluZykge1xuIDIzMTpcdFx0XHRcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCByeC1cdTAwM2VheF9za2IpO1xuIDIzMjpcdFx0XHRcdFx0cngtXHUwMDNlYXhfc2tiID0gTlVMTDtcbiAyMzM6XHRcdFx0XHR9XG4gMjM0Olx0XHRcdH1cbiAyMzU6XHRcbiAyMzY6XHRcdFx0b2Zmc2V0ICYjNDM7PSAoY29weV9sZW5ndGggJiM0MzsgMSkgXHUwMDI2IDB4ZmZmZTtcbiAyMzc6XHRcdH1cbiAyMzg6XHRcbiAyMzk6XHRcdGlmIChza2ItXHUwMDNlbGVuICE9IG9mZnNldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTU1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1ZyBGaXggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHdoYXQgd2FzIHRoZSBvcmlnaW5hbCBidWcgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3Nlcz8gSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgd2l0aGluIHRoZSBgYXNpeF9yeF9maXh1cGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaW5zaWRlIHRoYXQgYHdoaWxlYCBsb29wLCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgZGVhbHMgd2l0aCBoZWFkZXIgaGFuZGxpbmcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgaWYgdGhlIHJlbWFpbmluZyBkYXRhIGluIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgaXMgMiBvciAzIGJ5dGVzLCB0aGUgZXhpc3RpbmcgbG9naWMgbWlnaHQgYXR0ZW1wdCB0byByZWFkIGEgNC1ieXRlIChgdTMyYCkgaGVhZGVyLCBsZWFkaW5nIHRvIGFuIG92ZXJyZWFkIHBhc3QgdGhlIGFsbG9jYXRlZCBidWZmZXIuCgpUaGUgd2hpbGUgbG9vcCBjb25kaXRpb24gaXRzZWxmOiBgb2Zmc2V0ICYjNDM7IHNpemVvZih1MTYpICZsdDs9IHNrYi0mZ3Q7bGVuYCBpcyB0cnVlLCBldmVuIHdoZW4gdGhlcmUgYXJlIG9ubHkgMiBvciAzIGJ5dGVzIGxlZnQuIFRoZSBjb25kaXRpb25hbCBgc2tiLSZndDtsZW4gLSBvZmZzZXQgPT0gc2l6ZW9mKHUxNilgIHdpbGwgYmUgdHJ1ZSBvbmx5IGlmIHRoZXJlIGFyZSB0d28gYnl0ZXMgcmVtYWluaW5nLiBTbywgaWYgd2UgZW5kIHVwIGluIHRoZSBgZWxzZWAgYnJhbmNoLCBhbmQgdGhlcmUgYXJlIG9ubHkgMyBieXRlcyBsZWZ0LCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtIGFyaXNlczogaXQgdHJpZXMgdG8gcmVhZCA0IGJ5dGVzIHdpdGggYGdldF91bmFsaWduZWRfbGUzMihza2ItJmd0O2RhdGEgJiM0Mzsgb2Zmc2V0KWAuIFRoaXMgaXMgYSBjbGFzc2ljIGJ1ZmZlciBvdmVycmVhZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byByZWFkaW5nIHVuYWxsb2NhdGVkIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGJ1ZyByZXF1aXJlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgb3IgaXMgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgc3VmZmljaWVudD8gS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG90aGVyIG1lbW9yeSBhY2Nlc3MgZXJyb3JzLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGUgb3ZlcnJlYWQgaXMgcHJlY2lzZWx5IHdoYXQgS0FTQU4gaXMgbWVhbnQgdG8gY2F0Y2guIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgc2xhYi1vdXQtb2YtYm91bmRzIHJlYWQuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGV0ZWN0cyByZWFkcyBvZiAqdW5pbml0aWFsaXplZCogbWVtb3J5LCBsaWtlIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zLCBhbmQgY2FuIGNhdGNoIG1lbW9yeSBsZWFrcy4KCkFjY29yZGluZyB0byB0aGUgcnVsZXMsIHdlIHNob3VsZG4mIzM5O3QgdXNlIEtNU0FOIGlmIEtBU0FOIChvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKSBjYW4gY2F0Y2ggdGhlIHByb2JsZW0uIFdlIG9ubHkgdXNlIEtNU0FOIGlmIHRoZSBwYXRjaCAqaW50cm9kdWNlcyogb3IgKmV4cG9zZXMqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgYXBwbHkgdGhvc2Ugc3BlY2lmaWMgcnVsZXMsIHBvaW50IGJ5IHBvaW50LgoKVGhpcyBwYXRjaCBhZGRzIHRoaXMgY2hlY2s6CmBgYGMKJiM0MzsJCQkJaWYgKG9mZnNldCAmIzQzOyBzaXplb2YodTMyKSAmZ3Q7IHNrYi0mZ3Q7bGVuKSB7CiYjNDM7CQkJCQluZXRkZXZfZXJyKGRldi0mZ3Q7bmV0LCAmIzM0O2FzaXhfcnhfZml4dXAoKSBTaG9ydCBEYXRhIGhlYWRlciwgb2Zmc2V0ICVkLCBsZW4gJWRcbiYjMzQ7LAomIzQzOwkJCQkJCSAgIG9mZnNldCwgc2tiLSZndDtsZW4pOwomIzQzOwkJCQkJcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTsKJiM0MzsJCQkJCXJldHVybiAwOwomIzQzOwkJCQl9CmBgYAoKVGhlIHBhdGNoIGZpeGVzIGEgYnVnISBJdCBpcyBhIGJvdW5kcyBjaGVjayB0aGF0IGFkZHMgYSBjaGVjayBmb3IgaWYgYG9mZnNldCAmIzQzOyBzaXplb2YodTMyKSAmZ3Q7IHNrYi0mZ3Q7bGVuYC4KCkRvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTm8sIHF1aXRlIHRoZSBvcHBvc2l0ZSEgVGhlIHBhdGNoICpwcmV2ZW50cyogb3V0LW9mLWJvdW5kcyByZWFkcyBieSBhZGRpbmcgYSBib3VuZCBjaGVjay4gSXQgKnJlc3RyaWN0cyogYWNjZXNzLCBtYWtpbmcgaXQgKm1vcmUqIHNhZmUuCgpEb2VzIGl0IG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8gTm8uIERvZXMgaXQgaW50cm9kdWNlIG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLCBiZWNhdXNlIGl0IHVzZXMgaW50ZWdlciB2YXJpYWJsZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQuIERvZXMgaXQgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm8uIERvZXMgaXQgbW9kaWZ5IHRoZSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCAqYWxsb3dzKiBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzPyBObyEgSXQgcmVzdHJpY3RzIHRoZSBib3VuZHMgdG8gcHJldmVudCBvdmVycmVhZHMuCgpUaGVyZWZvcmUsIHNpbmNlIHRoaXMgcGF0Y2ggKnByZXZlbnRzKiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcywgd2UgY2FuIGNvbmZpZGVudGx5IGNvbmNsdWRlIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgb3JpZ2luYWwgYnVmZmVyIG92ZXJyZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc2l4X3J4X2ZpeHVwX2ludGVybmFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjA2PXZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIwOC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjA5OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjEwLVx0XHRcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0xMTU9c3RhdGljIHZvaWQgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTExNy1cdC8qIFJlc2V0IHRoZSB2YXJpYWJsZXMgdGhhdCBoYXZlIGEgbGlmZXRpbWUgb3V0c2lkZSBvZlxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTE4Olx0ICogYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHNvIHRoYXQgZnV0dXJlIHByb2Nlc3Npbmcgc3RhcnRzIGZyb20gYVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE5LVx0ICoga25vd24gc2V0IG9mIGluaXRpYWwgY29uZGl0aW9ucy5cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzUtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMzY6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTM3LVx0XHRcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTI0OT1pbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI1My1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1NDpcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTUtfVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTMzOT1zdGF0aWMgaW50IGF4ODgxNzJhX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDMtXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzozNDQ6XHRyZXR1cm4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbChkZXYsIHNrYiwgcngpO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzQ1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgc3BlY2lmaWMgcm91dGluZS4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyByZWxhdGVkIHRvIGhhbmRsaW5nIHBvdGVudGlhbCBpc3N1ZXMgb3IgZXJyb3JzIGR1cmluZyB0aGUgcmVjZWl2ZSBwcm9jZXNzIHdpdGhpbiB0aGUgQVNJWCBkcml2ZXIuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIHB1cnBvc2UgaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBjYWxsZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBhbnkgcG90ZW50aWFsIHdlYWtuZXNzZXMgb3IgYXJlYXMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGV2ZW4gY29udHJpYnV0aW5nIHRvIHN0YWJpbGl0eSBwcm9ibGVtcy4gQSBkZWVwIGRpdmUgaXMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgc3RyZWFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTU6XHRzdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4gMTE2Olx0e1xuIDExNzpcdFx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXG4gMTE4Olx0XHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXG4gMTE5Olx0XHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxuIDEyMDpcdFx0ICovXG4gMTIxOlx0XG4gMTIyOlx0XHRpZiAocngtXHUwMDNlYXhfc2tiKSB7XG4gMTIzOlx0XHRcdC8qIERpc2NhcmQgYW55IGluY29tcGxldGUgRXRoZXJuZXQgZnJhbWUgaW4gdGhlIG5ldGRldiBidWZmZXIgKi9cbiAxMjQ6XHRcdFx0a2ZyZWVfc2tiKHJ4LVx1MDAzZWF4X3NrYik7XG4gMTI1Olx0XHRcdHJ4LVx1MDAzZWF4X3NrYiA9IE5VTEw7XG4gMTI2Olx0XHR9XG4gMTI3Olx0XG4gMTI4Olx0XHQvKiBBc3N1bWUgdGhlIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkIGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudFxuIDEyOTpcdFx0ICogb3IgbmV4dCBVUkIgc29ja2V0IGJ1ZmZlciBzbyByZXNldCBhbGwgdGhlIHN0YXRlIHZhcmlhYmxlcy5cbiAxMzA6XHRcdCAqL1xuIDEzMTpcdFx0cngtXHUwMDNlcmVtYWluaW5nID0gMDtcbiAxMzI6XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcbiAxMzM6XHRcdHJ4LVx1MDAzZWhlYWRlciA9IDA7XG4gMTM0Olx0fVxuIDEzNTpcdFxuIDEzNjpcdGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxMzc6XHRcdFx0XHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcbiAxMzg6XHR7XG4gMTM5Olx0XHRpbnQgb2Zmc2V0ID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczMgoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiA2MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UgZm9yIHRoaXMgcGF0Y2gsIGFuZCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGF0IGNvbmNsdXNpb24uIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzOgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCwgb3IgbW9yZSBwcmVjaXNlbHkgYSBzaG9ydC1wYWNrZXQgb3ZlcnJlYWQsIHdoZW4gaGFuZGxpbmcgbmV0d29yayBkYXRhIGluIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQgcHJldmVudHMgdGhlIGNvZGUgZnJvbSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhIHJlY2VpdmVkIGJ1ZmZlci4gVGhlIGZpeCBpbnZvbHZlcyBhIGJvdW5kcyBjaGVjayAoYGlmIChvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUzMikgJmd0OyBza2ItJmd0O2xlbilgKSBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkIGEgNC1ieXRlIHZhbHVlLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIEtNU0FOIGNyaXRlcmlhLiBNeSBleHBlcnQgZXllcyB0ZWxsIG1lIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBvZiB0aGUgcmlza3MgdGhhdCAqd291bGQqIHdhcnJhbnQgYE5lZWRzS01TQU49dHJ1ZWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGU6CgoqICAgRG9lc24mIzM5O3QgaW52b2x2ZSB0cmFuc2ZlcnJpbmcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSBpbiBhIHdheSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgYSBjb25jZXJuLiBUaGVyZSYjMzk7cyBubyBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgcHV0X3VzZXIgY2FsbHMsIG5ldGxpbmsgdXNhZ2UsIGlvY3Rscywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzIGludm9sdmVkLgoqICAgRG9lc24mIzM5O3QgcmVseSBvbiBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy4gVGhlIGNydWNpYWwgY2hlY2sgcmVsaWVzIG9uIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMgKGBvZmZzZXRgLCBgc2l6ZW9mKHUzMilgLCBhbmQgYHNrYi0mZ3Q7bGVuYCkuCiogICBEb2VzbiYjMzk7dCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGEgc291cmNlIG9mIHByb2JsZW1zIGxhdGVyIG9uIGluIHJlYWNoYWJsZSBjb2RlLgoqICAgQ29ycmVjdGx5IGFkanVzdHMgYm91bmRzIGNoZWNrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuCgpMb29raW5nIGF0IHRoZSBhbHRlcm5hdGl2ZSwgd2hpY2ggaXMgYE5lZWRzS01TQU49ZmFsc2VgLCB0aGUgcmF0aW9uYWxlIGFsaWducyBwZXJmZWN0bHk6CgoqICAgVGhlIGNvZGUgYWRkcmVzc2VzIGEgY2xhc3Mgb2YgYnVncyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MpIGFscmVhZHkgY2F1Z2h0IGJ5IEtBU0FOLgoqICAgVGhlIHN0cnVjdHVyZXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBjb2RlIGFyZSBjb21wbGV0ZWx5IGluaXRpYWxpemVkOiBgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KWAgY2xlYXJzIGFsbCByZWxldmFudCBmaWVsZHMgYW5kIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCByZXR1cm5zIDAuCiogICBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4KClRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgdGhlIHBvdGVudGlhbCBpc3N1ZSwgYW5kIHRoZSBLTVNBTiBjcml0ZXJpYSwgSSYjMzk7bSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIGV4aXN0aW5nIGtlcm5lbCBzYW5pdGl6ZXJzIHNob3VsZCBhZGVxdWF0ZWx5IGhhbmRsZSBhbnkgcmVtYWluaW5nIGJ1ZmZlci1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayAoYG9mZnNldCAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2Ugc2tiLVx1MDAzZWxlbmApIGluIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gcGFyc2luZyB0aGUgMzItYml0IHBhY2tldCBkYXRhIGhlYWRlciBmcm9tIGFuIGluY29taW5nIHNrYi4gXG5cblRoZSBidWcgYmVpbmcgYWRkcmVzc2VkIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIC8gYnVmZmVyIG92ZXJyZWFkLCB3aGljaCBpcyBmdW5kYW1lbnRhbGx5IGluIHRoZSBkb21haW4gb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gQWxsIG1vZGlmaWVkIGNvbnRyb2wgZmxvdyBvcGVyYXRlcyBzdHJpY3RseSBvbiBleGlzdGluZyBpbml0aWFsaXplZCBpbnRlZ2VyIGxlbmd0aHMgYW5kIHJldHVybnMgZWFybHkgb24gaW52YWxpZCBpbnB1dCBhZnRlciByZXNldHRpbmcgc3RhdGUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgb2Zmc2V0ICYjNDM7IHNpemVvZih1MzIpIFx1MDAzZSBza2ItXHUwMDNlbGVuYCkgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIHRoZSAzMi1iaXQgcGFja2V0IGRhdGEgaGVhZGVyIGZyb20gYW4gaW5jb21pbmcgc2tiLiBcblxuVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgLyBidWZmZXIgb3ZlcnJlYWQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsbHkgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgbW9kaWZpZWQgY29udHJvbCBmbG93IG9wZXJhdGVzIHN0cmljdGx5IG9uIGV4aXN0aW5nIGluaXRpYWxpemVkIGludGVnZXIgbGVuZ3RocyBhbmQgcmV0dXJucyBlYXJseSBvbiBpbnZhbGlkIGlucHV0IGFmdGVyIHJlc2V0dGluZyBzdGF0ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTc6MTguNDMzNTk1NDk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAxNTAxNTIzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9BWDg4MTdYXCIsXG4gICAgXCJVU0JfVVNCTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayAoYG9mZnNldCArIHNpemVvZih1MzIpIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW5gKSBpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHBhcnNpbmcgdGhlIDMyLWJpdCBwYWNrZXQgZGF0YSBoZWFkZXIgZnJvbSBhbiBpbmNvbWluZyBza2IuIFxcblxcblRoZSBidWcgYmVpbmcgYWRkcmVzc2VkIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIC8gYnVmZmVyIG92ZXJyZWFkLCB3aGljaCBpcyBmdW5kYW1lbnRhbGx5IGluIHRoZSBkb21haW4gb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gQWxsIG1vZGlmaWVkIGNvbnRyb2wgZmxvdyBvcGVyYXRlcyBzdHJpY3RseSBvbiBleGlzdGluZyBpbml0aWFsaXplZCBpbnRlZ2VyIGxlbmd0aHMgYW5kIHJldHVybnMgZWFybHkgb24gaW52YWxpZCBpbnB1dCBhZnRlciByZXNldHRpbmcgc3RhdGUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcHJvY2Vzc2luZyBzaG9ydCBSWCBkYXRhIGhlYWRlcnMuIFRoZSBBU0lYIFVTQiBFdGhlcm5ldCBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoc3VjaCBhcyBkdW1teV9oY2QvcmF3LWdhZGdldCksIG1ha2luZyB0aGlzIFJYIHBhdGggYWNjZXNzaWJsZSB0byBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxNzoxOC40MzM2MDA1OThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTEwNjQ3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYzUzMWVlNDNkZDhjYmQ5NWVhOWQ0ZjQ4YWQ4OGEwNzAyOWJiODBlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDIzOjE3OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcXG5pbmRleCA0ZjAzZjRlNTc2NTVkLi44YzVmODYzZWZlN2Q2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcXG5AQCAtMTc5LDYgKzE3OSwxMyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VzcGxpdF9oZWFkID0gZmFsc2U7XFxuIFxcdFxcdFxcdFxcdG9mZnNldCArPSBzaXplb2YodTE2KTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0aWYgKG9mZnNldCArIHNpemVvZih1MzIpIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pIHtcXG4rXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBTaG9ydCBEYXRhIGhlYWRlciwgb2Zmc2V0ICVkLCBsZW4gJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXG4gXFx0XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXFx1MDAzZWRhdGEgK1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvZmZzZXQpO1xcbiBcXHRcXHRcXHRcXHRvZmZzZXQgKz0gc2l6ZW9mKHUzMik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjE5LjkyNTMwOTUxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTY5MDk5MjU3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9BWDg4MTdYXCIsXG4gICAgXCJVU0JfVVNCTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHByb2Nlc3Npbmcgc2hvcnQgUlggZGF0YSBoZWFkZXJzLiBUaGUgQVNJWCBVU0IgRXRoZXJuZXQgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKHN1Y2ggYXMgZHVtbXlfaGNkL3Jhdy1nYWRnZXQpLCBtYWtpbmcgdGhpcyBSWCBwYXRoIGFjY2Vzc2libGUgdG8gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYzUzMWVlNDNkZDhjYmQ5NWVhOWQ0ZjQ4YWQ4OGEwNzAyOWJiODBlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6MTc6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5pbmRleCA0ZjAzZjRlNTc2NTVkLi44YzVmODYzZWZlN2Q2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5AQCAtMTc5LDYgKzE3OSwxMyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRyeC1cdTAwM2VzcGxpdF9oZWFkID0gZmFsc2U7XG4gXHRcdFx0XHRvZmZzZXQgKz0gc2l6ZW9mKHUxNik7XG4gXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGlmIChvZmZzZXQgKyBzaXplb2YodTMyKSBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuK1x0XHRcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwiYXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxcblwiLFxuK1x0XHRcdFx0XHRcdCAgIG9mZnNldCwgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4rXHRcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdFx0fVxuK1xuIFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICtcbiBcdFx0XHRcdFx0XHRcdFx0b2Zmc2V0KTtcbiBcdFx0XHRcdG9mZnNldCArPSBzaXplb2YodTMyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjE5LjkyNTMxMTA5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNTcwMTU0MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBBU0lYIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBzbyBJJ2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgYW5hbHlzaXMgb2YgdGhlIGNvZGUuIEl0IGFwcGVhcnMgd2UncmUgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AsIHNwZWNpZmljYWxseSB0aGUgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIGZ1bmN0aW9uLiBUaGUgZGlmZiBoaWdobGlnaHRzIGEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrIHJlbGF0ZWQgdG8gaGFuZGxpbmcgcmVjZWl2ZWQgZGF0YSBpbiB0aGUgUlggcGF0aC5cblxuSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgd2UgaGF2ZSBhIGZ1bGwgYHUzMmAgaGVhZGVyIGJlZm9yZSBhY2Nlc3NpbmcgaXQgYXQgYSBzcGVjaWZpYyBvZmZzZXQuIFNwZWNpZmljYWxseSwgaXQgZ3VhcmRzIGFnYWluc3QgdGhlIHNjZW5hcmlvIHdoZXJlIGBvZmZzZXQgKyBzaXplb2YodTMyKWAgZXhjZWVkcyB0aGUgcGFja2V0IGxlbmd0aCBgc2tiLVx1MDAzZWxlbmAuIElmIHRoaXMgY29uZGl0aW9uIGhvbGRzLCB3ZSBsb2cgYW4gZXJyb3Igd2l0aCBgbmV0ZGV2X2VycmAsIHJlc2V0IFJYIGZpeHVwIGluZm9ybWF0aW9uIHVzaW5nIGByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm9gLCBhbmQgcmV0dXJuLCBlc3NlbnRpYWxseSBkcm9wcGluZyB0aGUgcGFja2V0LiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGlzc3VlIHdpdGggZnJhZ21lbnRlZCBvciB0cnVuY2F0ZWQgcGFja2V0cyBpbiB0aGUgUlggcGF0aC4gVGhlIGNvbW1lbnQgaW5kaWNhdGVzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIFwiU2hvcnQgRGF0YSBIZWFkZXJcIiB3aGljaCBpbmRpY2F0ZXMgdGhlIGlzc3VlLlxuXG5Ob3csIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgc2l0dWF0aW9uLCBJJ2xsIG5lZWQgYSBiaXQgbW9yZSBjb250ZXh0LiBJJ2xsIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGFzaXhfY29tbW9uLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIHBvdGVudGlhbGx5IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZSB1c2luZyBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY29uZmlybSB0aGF0IHRoZSBVU0IgQVNJWCBkcml2ZXIgaXMgZW5hYmxlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGRyaXZlciBmb3IgdGhlIFVTQiBBU0lYIGNoaXAsIHRoYXQgc3VwcG9ydHMgbmV0d29yayBjb25uZWN0aXZpdHkgdXNpbmcgdGhlIFVTQiBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTgsIk91dHB1dFRva2VucyI6NzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxNzozMC40OTU0NjcyNDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0ICovXFxuIDE1MTpcXHRcXHRpZiAocngtXFx1MDAzZXJlbWFpbmluZyBcXHUwMDI2XFx1MDAyNiAocngtXFx1MDAzZXJlbWFpbmluZyArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSkge1xcbiAxNTI6XFx0XFx0XFx0b2Zmc2V0ID0gKChyeC1cXHUwMDNlcmVtYWluaW5nICsgMSkgXFx1MDAyNiAweGZmZmUpO1xcbiAxNTM6XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQpO1xcbiAxNTQ6XFx0XFx0XFx0b2Zmc2V0ID0gMDtcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0XFx0c2l6ZSA9ICh1MTYpKHJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAyNiAweDdmZik7XFxuIDE1NzpcXHRcXHRcXHRpZiAoc2l6ZSAhPSAoKH5yeC1cXHUwMDNlaGVhZGVyIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4N2ZmKSkge1xcbiAxNTg6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBEYXRhIEhlYWRlciBzeW5jaHJvbmlzYXRpb24gd2FzIGxvc3QsIHJlbWFpbmluZyAlZFxcXFxuXFxcIixcXG4gMTU5OlxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VyZW1haW5pbmcpO1xcbiAxNjA6XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMTYxOlxcdFxcdFxcdH1cXG4gMTYyOlxcdFxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0d2hpbGUgKG9mZnNldCArIHNpemVvZih1MTYpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDE2NTpcXHRcXHRcXHR1MTYgY29weV9sZW5ndGg7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdFxcdGlmICghcngtXFx1MDAzZXJlbWFpbmluZykge1xcbiAxNjg6XFx0XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0ID09IHNpemVvZih1MTYpKSB7XFxuIDE2OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4gMTcxOlxcdFxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VzcGxpdF9oZWFkID0gdHJ1ZTtcXG4gMTcyOlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSBzaXplb2YodTE2KTtcXG4gMTczOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNzQ6XFx0XFx0XFx0XFx0fVxcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRcXHRcXHRpZiAocngtXFx1MDAzZXNwbGl0X2hlYWQgPT0gdHJ1ZSkge1xcbiAxNzc6XFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciB8PSAoZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KSBcXHUwMDNjXFx1MDAzYyAxNik7XFxuIDE3OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlc3BsaXRfaGVhZCA9IGZhbHNlO1xcbiAxODA6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZih1MTYpO1xcbiAxODE6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdGlmIChvZmZzZXQgKyBzaXplb2YodTMyKSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKSB7XFxuIDE4MzpcXHRcXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxcXFxuXFxcIixcXG4gMTg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCwgc2tiLVxcdTAwM2VsZW4pO1xcbiAxODU6XFx0XFx0XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMTg2OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAxODc6XFx0XFx0XFx0XFx0XFx0fVxcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cXHUwMDNlZGF0YSArXFxuIDE5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvZmZzZXQpO1xcbiAxOTE6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZih1MzIpO1xcbiAxOTI6XFx0XFx0XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRcXHRcXHQvKiB0YWtlIGZyYW1lIGxlbmd0aCBmcm9tIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkICovXFxuIDE5NTpcXHRcXHRcXHRcXHRzaXplID0gKHUxNikocngtXFx1MDAzZWhlYWRlciBcXHUwMDI2IDB4N2ZmKTtcXG4gMTk2OlxcdFxcdFxcdFxcdGlmIChzaXplICE9ICgofnJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHg3ZmYpKSB7XFxuIDE5NzpcXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcXFxuXFxcIixcXG4gMTk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VoZWFkZXIsIG9mZnNldCk7XFxuIDE5OTpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAyMDA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwMTpcXHRcXHRcXHRcXHR9XFxuIDIwMjpcXHRcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTikge1xcbiAyMDM6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxcXG5cXFwiLFxcbiAyMDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZSk7XFxuIDIwNTpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAyMDY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwNzpcXHRcXHRcXHRcXHR9XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdFxcdFxcdC8qIFNvbWV0aW1lcyBtYXkgZmFpbCB0byBnZXQgYSBuZXRkZXYgc29ja2V0IGJ1ZmZlciBidXRcXG4gMjEwOlxcdFxcdFxcdFxcdCAqIGNvbnRpbnVlIHRvIHByb2Nlc3MgdGhlIFVSQiBzb2NrZXQgYnVmZmVyIHNvIHRoYXRcXG4gMjExOlxcdFxcdFxcdFxcdCAqIHN5bmNocm9uaXNhdGlvbiBvZiB0aGUgRXRoZXJuZXQgZnJhbWUgRGF0YSBoZWFkZXJcXG4gMjEyOlxcdFxcdFxcdFxcdCAqIHdvcmQgaXMgbWFpbnRhaW5lZC5cXG4gMjEzOlxcdFxcdFxcdFxcdCAqL1xcbiAyMTQ6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVxcdTAwM2VuZXQsIHNpemUpO1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRcXHRcXHRyeC1cXHUwMDNlcmVtYWluaW5nID0gc2l6ZTtcXG4gMjE3OlxcdFxcdFxcdH1cXG4gMjE4OlxcdFxcbiAyMTk6XFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAzZSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxNzozMC40OTU1NDkwOTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1NTYyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXNpeF9jb21tb24ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXFx0Kz0gYXNpeC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjE0OmFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3OV8xNzhBKSAgICAgICs9IGF4ODgxNzlfMTc4YS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjMwLjU0OTEzMDYwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzNDQ4ODUzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipLY29uZmlnIERpdmUgVGltZSEqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGZvciB0aGUgQVg4ODE3WCBVU0IgbmV0d29yayBhZGFwdGVyLCBzbyBteSBmaXJzdCBzdGVwIGlzIGNsZWFyOiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGBVU0JfTkVUX0FYODgxN1hgLiBUaGF0IHNob3VsZCBiZSB0aGUga2V5IGVudHJ5IHBvaW50LiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hhdCBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSB0aWVkIHRvIGl0LiBJJ20gdGhpbmtpbmcgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgZHJpdmVycyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gd29yaz8gQXJlIHRoZXJlIHNwZWNpZmljIFVTQiBzdGFjayByZXF1aXJlbWVudHM/XG4qICAgKipEZWZhdWx0IFZhbHVlczoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdHMgZm9yIHJlbGF0ZWQgcGFyYW1ldGVycyBhbmQgYXJlIHRoZXJlIGFueSByZWFzb25hYmxlIGRlZmF1bHRzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aG91dCBjaGFuZ2VzP1xuKiAgICoqTWVudSBTdHJ1Y3R1cmU6KiogSG93IGlzIGl0IHByZXNlbnRlZCB0byB0aGUgdXNlciBkdXJpbmcgY29uZmlndXJhdGlvbj8gSXMgaXQgbmVzdGVkLCBoaWRkZW4gYmVoaW5kIG90aGVyIG9wdGlvbnMsIG9yIHN0cmFpZ2h0Zm9yd2FyZD9cbiogICAqKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uOioqIFVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpcyB0aGlzIGRyaXZlciBldmVuICphdmFpbGFibGUqPyBBcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgb3Iga2VybmVsIHZlcnNpb24gcmVxdWlyZW1lbnRzP1xuXG5UaGlzIEtjb25maWcgYW5hbHlzaXMgaXMgZ29pbmcgdG8gc2V0IHRoZSBzdGFnZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBVU0IgbmV0d29yayBkcml2ZXIgZWNvc3lzdGVtIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyBmb3IgY3VzdG9taXphdGlvbiByZWxhdGVkIHRvIHRoZSBBWDg4MTdYIGNoaXAuIExldCdzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjMzLjg5NDAxNzY0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA2MDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVU0JfTkVUX0FYODgxN1hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTEzMj1jb25maWcgVVNCX1VTQk5FVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY1LVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE2Njpjb25maWcgVVNCX05FVF9BWDg4MTdYXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY3LVxcdHRyaXN0YXRlIFxcXCJBU0lYIEFYODh4eHggQmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBBZGFwdGVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfVVNCX0xBTjc4WFgpXFx0Kz0gbGFuNzh4eC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXFx0Kz0gYXNpeC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE0LWFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTc6MzMuOTU3MDgzMTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTUzMjI5NjExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgVVNCIE5ldHdvcmtpbmcgRHJpdmVyIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UgVVNCIG5ldHdvcmtpbmcgZHJpdmVycy4gTGV0J3MgZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZS4gSSdsbCB6ZXJvIGluIGFyb3VuZCBsaW5lIDE2Ni4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoZXRoZXIgb3Igbm90IHNwZWNpZmljIFVTQiBuZXR3b3JrIGRyaXZlciBmZWF0dXJlcyBhcmUgZXZlbiAqYXZhaWxhYmxlKiB0byBiZSBjb25maWd1cmVkIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIHRoZSBjcnV4IG9mIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgd2hvbGUgc3lzdGVtIHdvcmtzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTc6NDUuNDg5MzgxMDQ1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcbiAxNjE6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgXFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXFx1MDAzZS5cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gMTY0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cXG4gMTY1OlxcdFxcbiAxNjY6XFx0Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxcbiAxNjc6XFx0XFx0dHJpc3RhdGUgXFxcIkFTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXFxcIlxcbiAxNjg6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuIDE2OTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTcwOlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuIDE3MTpcXHRcXHRzZWxlY3QgQVg4ODc5NkJfUEhZXFxuIDE3MjpcXHRcXHRpbXBseSBORVRfU0VMRlRFU1RTXFxuIDE3MzpcXHRcXHRkZWZhdWx0IHlcXG4gMTc0OlxcdFxcdGhlbHBcXG4gMTc1OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBBU0lYIEFYODh4eHggYmFzZWQgVVNCIDIuMFxcbiAxNzY6XFx0XFx0ICAxMC8xMDAgRXRoZXJuZXQgYWRhcHRlcnMuXFxuIDE3NzpcXHRcXG4gMTc4OlxcdFxcdCAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6XFxuIDE3OTpcXHRcXHQgICAgKiBBdGVuIFVDMjEwVFxcbiAxODA6XFx0XFx0ICAgICogQVNJWCBBWDg4MTcyXFxuIDE4MTpcXHRcXHQgICAgKiBCaWxsaW9udG9uIFN5c3RlbXMsIFVTQjJBUlxcbiAxODI6XFx0XFx0ICAgICogQmlsbGlvbnRvbiBTeXN0ZW1zLCBHVVNCMkFNLTFHLUJcXG4gMTgzOlxcdFxcdCAgICAqIEJ1ZmZhbG8gTFVBLVUyLUtUWFxcbiAxODQ6XFx0XFx0ICAgICogQ29yZWdhIEZFdGhlciBVU0IyLVRYXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjQ1LjQ4OTQ2MTE5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjgwODc3OTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVU0IgTmV0d29yayBEZXZpY2UgUmVhY2hhYmlsaXR5IGFuZCBTeXprYWxsZXIgRW11bGF0aW9uKipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBhY3R1YWxseSByZWFjaCB0aGlzIFVTQiBuZXR3b3JrIGRldmljZSB0aHJvdWdoIHN5emthbGxlcidzIGVtdWxhdGlvbj8gR29vZCBuZXdzISBJdCdzIGRlZmluaXRlbHkgcG9zc2libGUuIEluIGZhY3QsIFVTQiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgdGhhdCB1c2UgbmV0d29yayBkcml2ZXJzIGxpa2UgQVNJWCBvciBDREMtRXRoZXIsIGFyZSBmcmVxdWVudGx5IGZ1enplZCBieSBzeXprYWxsZXIgdXNpbmcgdGhlIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QgZW11bGF0aW9uLCB3aGljaCB3b3JrcyB2aWEgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIHN5c3RlbSBjYWxsLlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnkgKmhvdyogc3l6a2FsbGVyIGlzIGhhbmRsaW5nIHRoaXMsIGFuZCB3aGV0aGVyIGl0IGhhcyBzcGVjaWZpYyBVU0IgZGVzY3JpcHRpb25zIGZvciBBU0lYIG9yIHNpbXBseSB1c2VzIHJhdyBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhlIFVTQiBmdXp6aW5nIGluIHN5emthbGxlciBoaW5nZXMgb24gdGhlIGAvZGV2L3Jhdy1nYWRnZXRgIGRldmljZSBhbmQgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIGNhbGwuIEJhc2ljYWxseSwgYW55IFVTQiBkcml2ZXIgc2hvdWxkIGJlIGFibGUgdG8gYmluZCB0byBhbiBlbXVsYXRlZCBVU0IgZGV2aWNlIGFzIGxvbmcgYXMgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMgbWF0Y2guIE9uY2UgYm91bmQsIHN5emthbGxlciBjYW4gaW5qZWN0IFVTQiBwYWNrZXRzLCBvciBVUkJzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gc3BlY2lmaWNhbGx5IGludmVzdGlnYXRlIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjU4LjI5ODI0Mjk2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTA0NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2FzaXguaD0yMDY9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMDgtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDk6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjEwLVxcdFxcdFxcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTExNT1zdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTctXFx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTE4OlxcdCAqIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSBzbyB0aGF0IGZ1dHVyZSBwcm9jZXNzaW5nIHN0YXJ0cyBmcm9tIGFcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTktXFx0ICoga25vd24gc2V0IG9mIGluaXRpYWwgY29uZGl0aW9ucy5cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMzY6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNy1cXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTI0OT1pbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjUzLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1NDpcXHRyZXR1cm4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbChkZXYsIHNrYiwgcngpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI1NS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0zMzk9c3RhdGljIGludCBheDg4MTcyYV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDMtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzQ0OlxcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzQ1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTc6NTguMzQ1NzU5OTk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyMTYxMzQyMzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBBU0lYIFVTQiBOZXR3b3JrIERyaXZlciBSWCBGaXh1cCBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBBU0lYIFVTQiBuZXR3b3JrIGRyaXZlciBpc3N1ZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXggZm9yIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gdGhlIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCBmdW5jdGlvbi4gIEl0J3MgcHJldHR5IGNsZWFyIHdoYXQgdGhlIHByb2JsZW0gd2FzOiAgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIHdpdGhpbiB0aGUgYHdoaWxlYCBsb29wLCB0aGVyZSB3YXMgYSBzY2VuYXJpbyB3aGVyZSB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB3YXMgb25seSB0aHJlZSBieXRlcywgYnV0IHRoZSBjb2RlIHdhcyBhdHRlbXB0aW5nIHRvIHJlYWQgZm91ciBieXRlcyB1c2luZyBgZ2V0X3VuYWxpZ25lZF9sZTMyYC4gIFRoaXMgcGF0Y2ggYWRkcyBhIGNydWNpYWwgYm91bmRzIGNoZWNrIHRvIHByZXZlbnQgdGhhdC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBmdXp6YWJsZS4gIEJhc2VkIG9uIG15IGtub3dsZWRnZSwgYW5kIGNvbnNpZGVyaW5nIHRoZSBjcml0ZXJpYSwgaXQgZGVmaW5pdGVseSBpcy4gIFRoZSBmaXggb2NjdXJzIHdpdGhpbiBhIGBkcml2ZXJfaW5mb2AncyBgLnJ4X2ZpeHVwYCBjYWxsYmFjayBpbiBVU0JuZXQuIFNwZWNpZmljYWxseSwgYW4gZW11bGF0ZWQgVVNCIGRldmljZSB3aXRoIGEgc3VwcG9ydGVkIFZJRC9QSUQgKGxpa2UgdGhlIGBheDg4MTcyYCBmYW1pbHkpIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiAgV2hlbiBzeXprYWxsZXIgc2VuZHMgZGF0YSB0byB0aGUgZGV2aWNlJ3MgZW5kcG9pbnQsIGB1c2JuZXRfYmhgIGlzIHNjaGVkdWxlZCwgd2hpY2ggaW4gdHVybiBpbnZva2VzIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYC4gIFRoaXMgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIHRocm91Z2ggZnV6emluZyB3aXRoIFVTQiByYXctZ2FkZ2V0IC8gZHVtbXlfaGNkLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC5cblxuUmVnYXJkaW5nIHRoZSBgRm9jdXNTeW1ib2xzYCwgdGhlIGV4YWN0IGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYC4gSXQncyBub3QgaW5saW5lZCBhbmQgaXMgZXhwb3J0ZWQgaW4gYGFzaXguaGAuICBgYXNpeF9yeF9maXh1cF9jb21tb25gIGNhbGxzIGl0LCBhcyBkb2VzIGBheDg4MTcyYV9yeF9maXh1cGAuIFNvIHRoZSBtb3N0IHNwZWNpZmljIHdvdWxkIGJlIGBbXCJhc2l4X3J4X2ZpeHVwX2ludGVybmFsXCJdYCwgYnV0IGl0IGNvdWxkIGFsc28gaW5jbHVkZSBgYXNpeF9yeF9maXh1cF9jb21tb25gLiBUaGUgZnVuY3Rpb24gaXMgbm9uLXN0YXRpYywgc28gaXQncyBhIGRpc3RpbmN0IHN5bWJvbC5cblxuRmluYWxseSwgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zPyBDaGVja2luZyBgZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlYCwgdGhlIGBhc2l4Lm9gIG1vZHVsZSBpcyBidWlsdCBpZiBgQ09ORklHX1VTQl9ORVRfQVg4ODE3WGAgaXMgZW5hYmxlZC4gIExvb2tpbmcgaW50byBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLCBgVVNCX05FVF9BWDg4MTdYYCBkZXBlbmRzIG9uIGBVU0JfVVNCTkVUYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBORVRERVZJQ0VTYCBhbmQgYFVTQl9ORVRfRFJJVkVSU2AuIFRoZXJlZm9yZSwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBDT05GSUdfVVNCX05FVF9BWDg4MTdYPXlgIChvciBgbWApIGFuZCBpdHMgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjQwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxODoxMC41MDcxMDUyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxcbiAgMjg6XFx0XFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXFxuICAyOTpcXHRcXHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDMyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBVU0JfS0FXRVRIXFxuICAzNTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxcbiAgMzg6XFx0XFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcXG4gIDM5OlxcdFxcdCAgM0NvbSAzQzE5MjUwXFxuICA0MDpcXHRcXHQgIEFEUyBVU0ItMTBCVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxODoxMC41MDcyMTkyMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MjQ4NTg4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFTSVggQVg4OHh4eCBFdGhlcm5ldCBBZGFwdGVyIERyaXZlciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0IG1lIGxheSB0aGlzIG91dCBjbGVhcmx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGZvciB0aGUgQVNJWCBBWDg4eHh4IEV0aGVybmV0IGFkYXB0ZXIgZHJpdmVyLiBJIHNlZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlIGFyZSBgVVNCX05FVF9BWDg4MTdYYCwgYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGFuZCBgTkVUYC4gSSdsbCBrZWVwIHRob3NlIGluIG1pbmQuXG5cbkknbSBjaGVja2luZyB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSd2ZSBtaXNzZWQuIGBVU0JfTkVUX0FYODgxN1hgIGxvb2tzIGxpa2UgdGhlIGRpcmVjdCBjb25maWd1cmF0aW9uIGZsYWcgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyIGFuZCBgVVNCX1VTQk5FVGAgaXMgdGhlIGJyb2FkZXIgZnJhbWV3b3JrIGl0IGJlbG9uZ3MgdG8uXG5cbk5vdywgbGV0J3MgY29uZmlybSBldmVyeXRoaW5nIGVsc2U6IGl0J3MgbWFya2VkIGFzIGBXb3J0aEZ1enppbmdgLCB3aGljaCBtZWFucyBpdCdzIGEgZ29vZCB0YXJnZXQuIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgb24gcG9pbnQ6IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBib3VuZHMgY2hlY2sgdnVsbmVyYWJpbGl0eSBpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYC4gVGhpcyBpcyBoYXBwZW5pbmcgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mIGluY29taW5nIG5ldHdvcmsgcGFja2V0cyBhbmQgdGhlIGRyaXZlciBpdHNlbGYgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBhcyBpdCBzaW1wbGlmaWVzIHRlc3RpbmcuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29ycmVjdCAtIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCBpcyB0aGUgY3JpdGljYWwgZnVuY3Rpb24uIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGFzIGV4cGVjdGVkOiBgVVNCX05FVF9BWDg4MTdYYCBhbmQgYFVTQl9VU0JORVRgLlxuXG5ZZXMsIGl0J3MgYWxsIGNsZWFyLiBJIGNhbiB2ZXJpZnkgYWxsIG9mIHRoaXMuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5ODgsIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTg6MTYuNzU1ODExMjI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0MjA5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQVg4ODE3WFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFzaXhfcnhfZml4dXBfaW50ZXJuYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIHNob3J0IFJYIGRhdGEgaGVhZGVycy4gVGhlIEFTSVggVVNCIEV0aGVybmV0IGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChzdWNoIGFzIGR1bW15X2hjZC9yYXctZ2FkZ2V0KSwgbWFraW5nIHRoaXMgUlggcGF0aCBhY2Nlc3NpYmxlIHRvIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9BWDg4MTdYXCIsXG4gICAgXCJVU0JfVVNCTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHByb2Nlc3Npbmcgc2hvcnQgUlggZGF0YSBoZWFkZXJzLiBUaGUgQVNJWCBVU0IgRXRoZXJuZXQgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKHN1Y2ggYXMgZHVtbXlfaGNkL3Jhdy1nYWRnZXQpLCBtYWtpbmcgdGhpcyBSWCBwYXRoIGFjY2Vzc2libGUgdG8gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTg6MTYuODM1MjM5NDcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc0ODQ5OTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE4OjE2LjgzNTY4OTU1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxNzQ4MDQ1MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgb2Zmc2V0ICsgc2l6ZW9mKHUzMikgXFx1MDAzZSBza2ItXFx1MDAzZWxlbmApIGluIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gcGFyc2luZyB0aGUgMzItYml0IHBhY2tldCBkYXRhIGhlYWRlciBmcm9tIGFuIGluY29taW5nIHNrYi4gXFxuXFxuVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgLyBidWZmZXIgb3ZlcnJlYWQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsbHkgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgbW9kaWZpZWQgY29udHJvbCBmbG93IG9wZXJhdGVzIHN0cmljdGx5IG9uIGV4aXN0aW5nIGluaXRpYWxpemVkIGludGVnZXIgbGVuZ3RocyBhbmQgcmV0dXJucyBlYXJseSBvbiBpbnZhbGlkIGlucHV0IGFmdGVyIHJlc2V0dGluZyBzdGF0ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYzUzMWVlNDNkZDhjYmQ5NWVhOWQ0ZjQ4YWQ4OGEwNzAyOWJiODBlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6MTc6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5pbmRleCA0ZjAzZjRlNTc2NTVkLi44YzVmODYzZWZlN2Q2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5AQCAtMTc5LDYgKzE3OSwxMyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRyeC1cdTAwM2VzcGxpdF9oZWFkID0gZmFsc2U7XG4gXHRcdFx0XHRvZmZzZXQgKz0gc2l6ZW9mKHUxNik7XG4gXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGlmIChvZmZzZXQgKyBzaXplb2YodTMyKSBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuK1x0XHRcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwiYXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxcblwiLFxuK1x0XHRcdFx0XHRcdCAgIG9mZnNldCwgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4rXHRcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdFx0fVxuK1xuIFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICtcbiBcdFx0XHRcdFx0XHRcdFx0b2Zmc2V0KTtcbiBcdFx0XHRcdG9mZnNldCArPSBzaXplb2YodTMyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE4OjE2LjgzNTY5MDYxMloiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MTUwMzg1MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXNpeF9jb21tb24uYyBQYXRjaCBmb3IgS01TQU4gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AgYW5kIGZpZ3VyZSBvdXQgd2hldGhlciBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiBNeSBhcHByb2FjaCB3aWxsIGJlIG1ldGhvZGljYWwuIEZpcnN0LCBJJ2xsIGV4YW1pbmUgdGhlIGRpZmYgaXRzZWxmLCBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgbGluZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZC4gVGhlbiwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgY2hhbmdlcy4gVGhhdCBtZWFucyByZWFkaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AgdG8gZ3Jhc3AgdGhlIGxhcmdlciBwaWN0dXJlLiBJJ2xsIHVzZSB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBsb29rIGF0IHRoZSBjb2RlIGFyb3VuZCBsaW5lIDE3OSB0byBnZXQgYSBmZWVsIGZvciB3aGF0J3MgaGFwcGVuaW5nLiBCYXNlZCBvbiBteSBleHBlcnRpc2UsIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2guIFRoaXMgd2lsbCBoZWxwIG1lIGRldGVybWluZSB3aGV0aGVyIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFueXRoaW5nIG5ldyB0aGF0IG5lY2Vzc2l0YXRlcyBhIGBOZWVkc0tNU0FOPXRydWVgIHNldHRpbmcsIG9yIGlmIGEgc3RhbmRhcmQgdGVzdGluZyByZWdpbWUgaXMgc3VmZmljaWVudCAoaW1wbHlpbmcgYE5lZWRzS01TQU49ZmFsc2VgKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE4OjIyLjk4NjA3ODExMloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHR1MTYgc2l6ZTtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0LyogV2hlbiBhbiBFdGhlcm5ldCBmcmFtZSBzcGFucyBtdWx0aXBsZSBVUkIgc29ja2V0IGJ1ZmZlcnMsXFxuIDE0MzpcXHRcXHQgKiBkbyBhIHNhbml0eSB0ZXN0IGZvciB0aGUgRGF0YSBoZWFkZXIgc3luY2hyb25pc2F0aW9uLlxcbiAxNDQ6XFx0XFx0ICogQXR0ZW1wdCB0byBkZXRlY3QgdGhlIHNpdHVhdGlvbiBvZiB0aGUgcHJldmlvdXMgc29ja2V0IGJ1ZmZlciBoYXZpbmdcXG4gMTQ1OlxcdFxcdCAqIGJlZW4gdHJ1bmNhdGVkIG9yIGEgc29ja2V0IGJ1ZmZlciB3YXMgbWlzc2luZy4gVGhlc2Ugc2l0dWF0aW9uc1xcbiAxNDY6XFx0XFx0ICogY2F1c2UgYSBkaXNjb250aW51aXR5IGluIHRoZSBkYXRhIHN0cmVhbSBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gYXZvaWRcXG4gMTQ3OlxcdFxcdCAqIGFwcGVuZGluZyBiYWQgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG5ldGRldiBzb2NrZXQgYnVmZmVyLlxcbiAxNDg6XFx0XFx0ICogQWxzbyBhdm9pZCB1bm5lY2Vzc2FyaWx5IGRpc2NhcmRpbmcgYSBnb29kIGN1cnJlbnQgbmV0ZGV2IHNvY2tldFxcbiAxNDk6XFx0XFx0ICogYnVmZmVyLlxcbiAxNTA6XFx0XFx0ICovXFxuIDE1MTpcXHRcXHRpZiAocngtXFx1MDAzZXJlbWFpbmluZyBcXHUwMDI2XFx1MDAyNiAocngtXFx1MDAzZXJlbWFpbmluZyArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSkge1xcbiAxNTI6XFx0XFx0XFx0b2Zmc2V0ID0gKChyeC1cXHUwMDNlcmVtYWluaW5nICsgMSkgXFx1MDAyNiAweGZmZmUpO1xcbiAxNTM6XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQpO1xcbiAxNTQ6XFx0XFx0XFx0b2Zmc2V0ID0gMDtcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0XFx0c2l6ZSA9ICh1MTYpKHJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAyNiAweDdmZik7XFxuIDE1NzpcXHRcXHRcXHRpZiAoc2l6ZSAhPSAoKH5yeC1cXHUwMDNlaGVhZGVyIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4N2ZmKSkge1xcbiAxNTg6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBEYXRhIEhlYWRlciBzeW5jaHJvbmlzYXRpb24gd2FzIGxvc3QsIHJlbWFpbmluZyAlZFxcXFxuXFxcIixcXG4gMTU5OlxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VyZW1haW5pbmcpO1xcbiAxNjA6XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMTYxOlxcdFxcdFxcdH1cXG4gMTYyOlxcdFxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0d2hpbGUgKG9mZnNldCArIHNpemVvZih1MTYpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDE2NTpcXHRcXHRcXHR1MTYgY29weV9sZW5ndGg7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdFxcdGlmICghcngtXFx1MDAzZXJlbWFpbmluZykge1xcbiAxNjg6XFx0XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0ID09IHNpemVvZih1MTYpKSB7XFxuIDE2OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4gMTcxOlxcdFxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VzcGxpdF9oZWFkID0gdHJ1ZTtcXG4gMTcyOlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSBzaXplb2YodTE2KTtcXG4gMTczOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNzQ6XFx0XFx0XFx0XFx0fVxcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRcXHRcXHRpZiAocngtXFx1MDAzZXNwbGl0X2hlYWQgPT0gdHJ1ZSkge1xcbiAxNzc6XFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciB8PSAoZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KSBcXHUwMDNjXFx1MDAzYyAxNik7XFxuIDE3OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlc3BsaXRfaGVhZCA9IGZhbHNlO1xcbiAxODA6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZih1MTYpO1xcbiAxODE6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdGlmIChvZmZzZXQgKyBzaXplb2YodTMyKSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKSB7XFxuIDE4MzpcXHRcXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxcXFxuXFxcIixcXG4gMTg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCwgc2tiLVxcdTAwM2VsZW4pO1xcbiAxODU6XFx0XFx0XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMTg2OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAxODc6XFx0XFx0XFx0XFx0XFx0fVxcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cXHUwMDNlZGF0YSArXFxuIDE5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvZmZzZXQpO1xcbiAxOTE6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZih1MzIpO1xcbiAxOTI6XFx0XFx0XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRcXHRcXHQvKiB0YWtlIGZyYW1lIGxlbmd0aCBmcm9tIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkICovXFxuIDE5NTpcXHRcXHRcXHRcXHRzaXplID0gKHUxNikocngtXFx1MDAzZWhlYWRlciBcXHUwMDI2IDB4N2ZmKTtcXG4gMTk2OlxcdFxcdFxcdFxcdGlmIChzaXplICE9ICgofnJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHg3ZmYpKSB7XFxuIDE5NzpcXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcXFxuXFxcIixcXG4gMTk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VoZWFkZXIsIG9mZnNldCk7XFxuIDE5OTpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAyMDA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwMTpcXHRcXHRcXHRcXHR9XFxuIDIwMjpcXHRcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTikge1xcbiAyMDM6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxcXG5cXFwiLFxcbiAyMDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZSk7XFxuIDIwNTpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAyMDY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwNzpcXHRcXHRcXHRcXHR9XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdFxcdFxcdC8qIFNvbWV0aW1lcyBtYXkgZmFpbCB0byBnZXQgYSBuZXRkZXYgc29ja2V0IGJ1ZmZlciBidXRcXG4gMjEwOlxcdFxcdFxcdFxcdCAqIGNvbnRpbnVlIHRvIHByb2Nlc3MgdGhlIFVSQiBzb2NrZXQgYnVmZmVyIHNvIHRoYXRcXG4gMjExOlxcdFxcdFxcdFxcdCAqIHN5bmNocm9uaXNhdGlvbiBvZiB0aGUgRXRoZXJuZXQgZnJhbWUgRGF0YSBoZWFkZXJcXG4gMjEyOlxcdFxcdFxcdFxcdCAqIHdvcmQgaXMgbWFpbnRhaW5lZC5cXG4gMjEzOlxcdFxcdFxcdFxcdCAqL1xcbiAyMTQ6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVxcdTAwM2VuZXQsIHNpemUpO1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRcXHRcXHRyeC1cXHUwMDNlcmVtYWluaW5nID0gc2l6ZTtcXG4gMjE3OlxcdFxcdFxcdH1cXG4gMjE4OlxcdFxcbiAyMTk6XFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAzZSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCkge1xcbiAyMjA6XFx0XFx0XFx0XFx0Y29weV9sZW5ndGggPSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldDtcXG4gMjIxOlxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VyZW1haW5pbmcgLT0gY29weV9sZW5ndGg7XFxuIDIyMjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMjM6XFx0XFx0XFx0XFx0Y29weV9sZW5ndGggPSByeC1cXHUwMDNlcmVtYWluaW5nO1xcbiAyMjQ6XFx0XFx0XFx0XFx0cngtXFx1MDAzZXJlbWFpbmluZyA9IDA7XFxuIDIyNTpcXHRcXHRcXHR9XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdFxcdGlmIChyeC1cXHUwMDNlYXhfc2tiKSB7XFxuIDIyODpcXHRcXHRcXHRcXHRza2JfcHV0X2RhdGEocngtXFx1MDAzZWF4X3NrYiwgc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0LFxcbiAyMjk6XFx0XFx0XFx0XFx0XFx0ICAgICBjb3B5X2xlbmd0aCk7XFxuIDIzMDpcXHRcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VyZW1haW5pbmcpIHtcXG4gMjMxOlxcdFxcdFxcdFxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgcngtXFx1MDAzZWF4X3NrYik7XFxuIDIzMjpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlYXhfc2tiID0gTlVMTDtcXG4gMjMzOlxcdFxcdFxcdFxcdH1cXG4gMjM0OlxcdFxcdFxcdH1cXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0XFx0b2Zmc2V0ICs9IChjb3B5X2xlbmd0aCArIDEpIFxcdTAwMjYgMHhmZmZlO1xcbiAyMzc6XFx0XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gIT0gb2Zmc2V0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE4OjIyLjk4NjIwNzk1MloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTMxMjcxNjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZyBGaXggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB3aGF0IHdhcyB0aGUgb3JpZ2luYWwgYnVnIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXM/IEl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgd2l0aGluIHRoZSBgYXNpeF9yeF9maXh1cGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaW5zaWRlIHRoYXQgYHdoaWxlYCBsb29wLCB0aGVyZSdzIGEgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBkZWFscyB3aXRoIGhlYWRlciBoYW5kbGluZy4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBpZiB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBpcyAyIG9yIDMgYnl0ZXMsIHRoZSBleGlzdGluZyBsb2dpYyBtaWdodCBhdHRlbXB0IHRvIHJlYWQgYSA0LWJ5dGUgKGB1MzJgKSBoZWFkZXIsIGxlYWRpbmcgdG8gYW4gb3ZlcnJlYWQgcGFzdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlci5cblxuVGhlIHdoaWxlIGxvb3AgY29uZGl0aW9uIGl0c2VsZjogYG9mZnNldCArIHNpemVvZih1MTYpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbmAgaXMgdHJ1ZSwgZXZlbiB3aGVuIHRoZXJlIGFyZSBvbmx5IDIgb3IgMyBieXRlcyBsZWZ0LiBUaGUgY29uZGl0aW9uYWwgYHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQgPT0gc2l6ZW9mKHUxNilgIHdpbGwgYmUgdHJ1ZSBvbmx5IGlmIHRoZXJlIGFyZSB0d28gYnl0ZXMgcmVtYWluaW5nLiBTbywgaWYgd2UgZW5kIHVwIGluIHRoZSBgZWxzZWAgYnJhbmNoLCBhbmQgdGhlcmUgYXJlIG9ubHkgMyBieXRlcyBsZWZ0LCB0aGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gYXJpc2VzOiBpdCB0cmllcyB0byByZWFkIDQgYnl0ZXMgd2l0aCBgZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICsgb2Zmc2V0KWAuIFRoaXMgaXMgYSBjbGFzc2ljIGJ1ZmZlciBvdmVycmVhZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byByZWFkaW5nIHVuYWxsb2NhdGVkIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgYnVnIHJlcXVpcmUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBvciBpcyBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBzdWZmaWNpZW50PyBLQVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgb3RoZXIgbWVtb3J5IGFjY2VzcyBlcnJvcnMsIGFuZCBpbiB0aGlzIGNhc2UsIHRoZSBvdmVycmVhZCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiBpcyBtZWFudCB0byBjYXRjaC4gSXQncyBlc3NlbnRpYWxseSBhIHNsYWItb3V0LW9mLWJvdW5kcyByZWFkLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRldGVjdHMgcmVhZHMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgbGlrZSBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucywgYW5kIGNhbiBjYXRjaCBtZW1vcnkgbGVha3MuXG5cbkFjY29yZGluZyB0byB0aGUgcnVsZXMsIHdlIHNob3VsZG4ndCB1c2UgS01TQU4gaWYgS0FTQU4gKG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpIGNhbiBjYXRjaCB0aGUgcHJvYmxlbS4gV2Ugb25seSB1c2UgS01TQU4gaWYgdGhlIHBhdGNoICppbnRyb2R1Y2VzKiBvciAqZXhwb3NlcyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGFwcGx5IHRob3NlIHNwZWNpZmljIHJ1bGVzLCBwb2ludCBieSBwb2ludC5cblxuVGhpcyBwYXRjaCBhZGRzIHRoaXMgY2hlY2s6XG5gYGBjXG4rXHRcdFx0XHRpZiAob2Zmc2V0ICsgc2l6ZW9mKHUzMikgXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbitcdFx0XHRcdFx0bmV0ZGV2X2VycihkZXYtXHUwMDNlbmV0LCBcImFzaXhfcnhfZml4dXAoKSBTaG9ydCBEYXRhIGhlYWRlciwgb2Zmc2V0ICVkLCBsZW4gJWRcXG5cIixcbitcdFx0XHRcdFx0XHQgICBvZmZzZXQsIHNrYi1cdTAwM2VsZW4pO1xuK1x0XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuK1x0XHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHRcdH1cbmBgYFxuXG5UaGUgcGF0Y2ggZml4ZXMgYSBidWchIEl0IGlzIGEgYm91bmRzIGNoZWNrIHRoYXQgYWRkcyBhIGNoZWNrIGZvciBpZiBgb2Zmc2V0ICsgc2l6ZW9mKHUzMikgXHUwMDNlIHNrYi1cdTAwM2VsZW5gLlxuXG5Eb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLCBxdWl0ZSB0aGUgb3Bwb3NpdGUhIFRoZSBwYXRjaCAqcHJldmVudHMqIG91dC1vZi1ib3VuZHMgcmVhZHMgYnkgYWRkaW5nIGEgYm91bmQgY2hlY2suIEl0ICpyZXN0cmljdHMqIGFjY2VzcywgbWFraW5nIGl0ICptb3JlKiBzYWZlLlxuXG5Eb2VzIGl0IG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8gTm8uIERvZXMgaXQgaW50cm9kdWNlIG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLCBiZWNhdXNlIGl0IHVzZXMgaW50ZWdlciB2YXJpYWJsZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQuIERvZXMgaXQgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm8uIERvZXMgaXQgbW9kaWZ5IHRoZSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCAqYWxsb3dzKiBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzPyBObyEgSXQgcmVzdHJpY3RzIHRoZSBib3VuZHMgdG8gcHJldmVudCBvdmVycmVhZHMuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhpcyBwYXRjaCAqcHJldmVudHMqIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB3ZSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBvcmlnaW5hbCBidWZmZXIgb3ZlcnJlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTg6MzQuMjk4OTI1ODIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1NTM0NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFzaXhfcnhfZml4dXBfaW50ZXJuYWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2FzaXguaD0yMDY9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMDgtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDk6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjEwLVxcdFxcdFxcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTExNT1zdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTctXFx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTE4OlxcdCAqIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSBzbyB0aGF0IGZ1dHVyZSBwcm9jZXNzaW5nIHN0YXJ0cyBmcm9tIGFcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTktXFx0ICoga25vd24gc2V0IG9mIGluaXRpYWwgY29uZGl0aW9ucy5cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMzY6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNy1cXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTI0OT1pbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjUzLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1NDpcXHRyZXR1cm4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbChkZXYsIHNrYiwgcngpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI1NS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0zMzk9c3RhdGljIGludCBheDg4MTcyYV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDMtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzQ0OlxcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzQ1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTg6MzUuOTQ0NDY3MDI3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc3NDg1NjAyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm9gKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mb2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgc3BlY2lmaWMgcm91dGluZS4gSSdtIGFzc3VtaW5nIGl0J3MgcmVsYXRlZCB0byBoYW5kbGluZyBwb3RlbnRpYWwgaXNzdWVzIG9yIGVycm9ycyBkdXJpbmcgdGhlIHJlY2VpdmUgcHJvY2VzcyB3aXRoaW4gdGhlIEFTSVggZHJpdmVyLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQncyBjYWxsZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBhbnkgcG90ZW50aWFsIHdlYWtuZXNzZXMgb3IgYXJlYXMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGV2ZW4gY29udHJpYnV0aW5nIHRvIHN0YWJpbGl0eSBwcm9ibGVtcy4gQSBkZWVwIGRpdmUgaXMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgc3RyZWFtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTExLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTg6NDMuNjkzMDI5NDAxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0c3RhdGljIHZvaWQgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxcbiAxMTY6XFx0e1xcbiAxMTc6XFx0XFx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXFxuIDExODpcXHRcXHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXFxuIDExOTpcXHRcXHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxcbiAxMjA6XFx0XFx0ICovXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdGlmIChyeC1cXHUwMDNlYXhfc2tiKSB7XFxuIDEyMzpcXHRcXHRcXHQvKiBEaXNjYXJkIGFueSBpbmNvbXBsZXRlIEV0aGVybmV0IGZyYW1lIGluIHRoZSBuZXRkZXYgYnVmZmVyICovXFxuIDEyNDpcXHRcXHRcXHRrZnJlZV9za2IocngtXFx1MDAzZWF4X3NrYik7XFxuIDEyNTpcXHRcXHRcXHRyeC1cXHUwMDNlYXhfc2tiID0gTlVMTDtcXG4gMTI2OlxcdFxcdH1cXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0LyogQXNzdW1lIHRoZSBEYXRhIGhlYWRlciAzMi1iaXQgd29yZCBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnRcXG4gMTI5OlxcdFxcdCAqIG9yIG5leHQgVVJCIHNvY2tldCBidWZmZXIgc28gcmVzZXQgYWxsIHRoZSBzdGF0ZSB2YXJpYWJsZXMuXFxuIDEzMDpcXHRcXHQgKi9cXG4gMTMxOlxcdFxcdHJ4LVxcdTAwM2VyZW1haW5pbmcgPSAwO1xcbiAxMzI6XFx0XFx0cngtXFx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcXG4gMTMzOlxcdFxcdHJ4LVxcdTAwM2VoZWFkZXIgPSAwO1xcbiAxMzQ6XFx0fVxcbiAxMzU6XFx0XFxuIDEzNjpcXHRpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDEzNzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcXG4gMTM4OlxcdHtcXG4gMTM5OlxcdFxcdGludCBvZmZzZXQgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxODo0My42OTMxMzkxOTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDg5MDU3MzI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UgZm9yIHRoaXMgcGF0Y2gsIGFuZCBJJ20gY29uZmlkZW50IGluIHRoYXQgY29uY2x1c2lvbi4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzczpcblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCwgb3IgbW9yZSBwcmVjaXNlbHkgYSBzaG9ydC1wYWNrZXQgb3ZlcnJlYWQsIHdoZW4gaGFuZGxpbmcgbmV0d29yayBkYXRhIGluIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQgcHJldmVudHMgdGhlIGNvZGUgZnJvbSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhIHJlY2VpdmVkIGJ1ZmZlci4gVGhlIGZpeCBpbnZvbHZlcyBhIGJvdW5kcyBjaGVjayAoYGlmIChvZmZzZXQgKyBzaXplb2YodTMyKSBcdTAwM2Ugc2tiLVx1MDAzZWxlbilgKSBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkIGEgNC1ieXRlIHZhbHVlLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBLTVNBTiBjcml0ZXJpYS4gTXkgZXhwZXJ0IGV5ZXMgdGVsbCBtZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBvZiB0aGUgcmlza3MgdGhhdCAqd291bGQqIHdhcnJhbnQgYE5lZWRzS01TQU49dHJ1ZWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGU6XG5cbiogICBEb2Vzbid0IGludm9sdmUgdHJhbnNmZXJyaW5nIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UgaW4gYSB3YXkgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGEgY29uY2Vybi4gVGhlcmUncyBubyBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgcHV0X3VzZXIgY2FsbHMsIG5ldGxpbmsgdXNhZ2UsIGlvY3Rscywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzIGludm9sdmVkLlxuKiAgIERvZXNuJ3QgcmVseSBvbiBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy4gVGhlIGNydWNpYWwgY2hlY2sgcmVsaWVzIG9uIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMgKGBvZmZzZXRgLCBgc2l6ZW9mKHUzMilgLCBhbmQgYHNrYi1cdTAwM2VsZW5gKS5cbiogICBEb2Vzbid0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgYSBzb3VyY2Ugb2YgcHJvYmxlbXMgbGF0ZXIgb24gaW4gcmVhY2hhYmxlIGNvZGUuXG4qICAgQ29ycmVjdGx5IGFkanVzdHMgYm91bmRzIGNoZWNrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuXG5cbkxvb2tpbmcgYXQgdGhlIGFsdGVybmF0aXZlLCB3aGljaCBpcyBgTmVlZHNLTVNBTj1mYWxzZWAsIHRoZSByYXRpb25hbGUgYWxpZ25zIHBlcmZlY3RseTpcblxuKiAgIFRoZSBjb2RlIGFkZHJlc3NlcyBhIGNsYXNzIG9mIGJ1Z3MgKG91dC1vZi1ib3VuZHMgYWNjZXNzKSBhbHJlYWR5IGNhdWdodCBieSBLQVNBTi5cbiogICBUaGUgc3RydWN0dXJlcyBoYW5kbGVkIHdpdGhpbiB0aGlzIGNvZGUgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQ6IGByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpYCBjbGVhcnMgYWxsIHJlbGV2YW50IGZpZWxkcyBhbmQgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIHJldHVybnMgMC5cbiogICBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIHRoZSBwb3RlbnRpYWwgaXNzdWUsIGFuZCB0aGUgS01TQU4gY3JpdGVyaWEsIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIGV4aXN0aW5nIGtlcm5lbCBzYW5pdGl6ZXJzIHNob3VsZCBhZGVxdWF0ZWx5IGhhbmRsZSBhbnkgcmVtYWluaW5nIGJ1ZmZlci1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczMiwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxODo0OC41ODM3MTUyNjRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgKGBvZmZzZXQgKyBzaXplb2YodTMyKSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuYCkgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIHRoZSAzMi1iaXQgcGFja2V0IGRhdGEgaGVhZGVyIGZyb20gYW4gaW5jb21pbmcgc2tiLiBcXG5cXG5UaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAvIGJ1ZmZlciBvdmVycmVhZCwgd2hpY2ggaXMgZnVuZGFtZW50YWxseSBpbiB0aGUgZG9tYWluIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFsbCBtb2RpZmllZCBjb250cm9sIGZsb3cgb3BlcmF0ZXMgc3RyaWN0bHkgb24gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgaW50ZWdlciBsZW5ndGhzIGFuZCByZXR1cm5zIGVhcmx5IG9uIGludmFsaWQgaW5wdXQgYWZ0ZXIgcmVzZXR0aW5nIHN0YXRlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgKGBvZmZzZXQgKyBzaXplb2YodTMyKSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuYCkgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIHRoZSAzMi1iaXQgcGFja2V0IGRhdGEgaGVhZGVyIGZyb20gYW4gaW5jb21pbmcgc2tiLiBcXG5cXG5UaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAvIGJ1ZmZlciBvdmVycmVhZCwgd2hpY2ggaXMgZnVuZGFtZW50YWxseSBpbiB0aGUgZG9tYWluIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFsbCBtb2RpZmllZCBjb250cm9sIGZsb3cgb3BlcmF0ZXMgc3RyaWN0bHkgb24gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgaW50ZWdlciBsZW5ndGhzIGFuZCByZXR1cm5zIGVhcmx5IG9uIGludmFsaWQgaW5wdXQgYWZ0ZXIgcmVzZXR0aW5nIHN0YXRlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowms9kh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 23:15:58 +0000 UTC FinishedAt: 2026-09-14 23:18:49 +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_NET_AX8817X", "USB_USBNET" ], "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_NET_AX8817X", "USB_USBNET" ], "series_id": "3ab3aade-eace-4bbc-80ba-90f0694d8855" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "asix_rx_fixup_internal" ], "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+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXNpeF9yeF9maXh1cF9pbnRlcm5hbCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgKGBvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNlIHNrYi1cdTAwM2VsZW5gKSBpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHBhcnNpbmcgdGhlIDMyLWJpdCBwYWNrZXQgZGF0YSBoZWFkZXIgZnJvbSBhbiBpbmNvbWluZyBza2IuIFxuXG5UaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAvIGJ1ZmZlciBvdmVycmVhZCwgd2hpY2ggaXMgZnVuZGFtZW50YWxseSBpbiB0aGUgZG9tYWluIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFsbCBtb2RpZmllZCBjb250cm9sIGZsb3cgb3BlcmF0ZXMgc3RyaWN0bHkgb24gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgaW50ZWdlciBsZW5ndGhzIGFuZCByZXR1cm5zIGVhcmx5IG9uIGludmFsaWQgaW5wdXQgYWZ0ZXIgcmVzZXR0aW5nIHN0YXRlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIHNob3J0IFJYIGRhdGEgaGVhZGVycy4gVGhlIEFTSVggVVNCIEV0aGVybmV0IGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChzdWNoIGFzIGR1bW15X2hjZC9yYXctZ2FkZ2V0KSwgbWFraW5nIHRoaXMgUlggcGF0aCBhY2Nlc3NpYmxlIHRvIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYzUzMWVlNDNkZDhjYmQ5NWVhOWQ0ZjQ4YWQ4OGEwNzAyOWJiODBlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6MTc6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1xuaW5kZXggNGYwM2Y0ZTU3NjU1ZC4uOGM1Zjg2M2VmZTdkNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1xuQEAgLTE3OSw2ICYjNDM7MTc5LDEzIEBAIGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcbiBcdFx0XHRcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKHUxNik7XG4gXHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRpZiAob2Zmc2V0ICYjNDM7IHNpemVvZih1MzIpIFx1MDAzZSBza2ItXHUwMDNlbGVuKSB7XG4mIzQzO1x0XHRcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBTaG9ydCBEYXRhIGhlYWRlciwgb2Zmc2V0ICVkLCBsZW4gJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgIG9mZnNldCwgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuJiM0MztcdFx0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcbiBcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXHUwMDNlZGF0YSAmIzQzO1xuIFx0XHRcdFx0XHRcdFx0XHRvZmZzZXQpO1xuIFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YodTMyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0FYODgxN1gmIzM0OywKICAgICYjMzQ7VVNCX1VTQk5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FzaXhfcnhfZml4dXBfaW50ZXJuYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcHJvY2Vzc2luZyBzaG9ydCBSWCBkYXRhIGhlYWRlcnMuIFRoZSBBU0lYIFVTQiBFdGhlcm5ldCBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoc3VjaCBhcyBkdW1teV9oY2QvcmF3LWdhZGdldCksIG1ha2luZyB0aGlzIFJYIHBhdGggYWNjZXNzaWJsZSB0byBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM1MzFlZTQzZGQ4Y2JkOTVlYTlkNGY0OGFkODhhMDcwMjliYjgwZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDIzOjE3OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwppbmRleCA0ZjAzZjRlNTc2NTVkLi44YzVmODYzZWZlN2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYwpAQCAtMTc5LDYgJiM0MzsxNzksMTMgQEAgaW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXJ4LSZndDtzcGxpdF9oZWFkID0gZmFsc2U7CiAJCQkJb2Zmc2V0ICYjNDM7PSBzaXplb2YodTE2KTsKIAkJCX0gZWxzZSB7CiYjNDM7CQkJCWlmIChvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUzMikgJmd0OyBza2ItJmd0O2xlbikgewomIzQzOwkJCQkJbmV0ZGV2X2VycihkZXYtJmd0O25ldCwgJiMzNDthc2l4X3J4X2ZpeHVwKCkgU2hvcnQgRGF0YSBoZWFkZXIsIG9mZnNldCAlZCwgbGVuICVkXG4mIzM0OywKJiM0MzsJCQkJCQkgICBvZmZzZXQsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQkJCXJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7CiYjNDM7CQkJCQlyZXR1cm4gMDsKJiM0MzsJCQkJfQomIzQzOwogCQkJCXJ4LSZndDtoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiLSZndDtkYXRhICYjNDM7CiAJCQkJCQkJCW9mZnNldCk7CiAJCQkJb2Zmc2V0ICYjNDM7PSBzaXplb2YodTMyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1OAoJCQkJCQkJb3V0cHV0OiA3MQoJCQkJCQkJdGhvdWdodHM6IDMxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgQVNJWCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIGFuYWx5c2lzIG9mIHRoZSBjb2RlLiBJdCBhcHBlYXJzIHdlJiMzOTtyZSBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIFRoZSBkaWZmIGhpZ2hsaWdodHMgYSBuZXcgY29uZGl0aW9uYWwgYmxvY2sgcmVsYXRlZCB0byBoYW5kbGluZyByZWNlaXZlZCBkYXRhIGluIHRoZSBSWCBwYXRoLgoKSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgd2UgaGF2ZSBhIGZ1bGwgYHUzMmAgaGVhZGVyIGJlZm9yZSBhY2Nlc3NpbmcgaXQgYXQgYSBzcGVjaWZpYyBvZmZzZXQuIFNwZWNpZmljYWxseSwgaXQgZ3VhcmRzIGFnYWluc3QgdGhlIHNjZW5hcmlvIHdoZXJlIGBvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUzMilgIGV4Y2VlZHMgdGhlIHBhY2tldCBsZW5ndGggYHNrYi0mZ3Q7bGVuYC4gSWYgdGhpcyBjb25kaXRpb24gaG9sZHMsIHdlIGxvZyBhbiBlcnJvciB3aXRoIGBuZXRkZXZfZXJyYCwgcmVzZXQgUlggZml4dXAgaW5mb3JtYXRpb24gdXNpbmcgYHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mb2AsIGFuZCByZXR1cm4sIGVzc2VudGlhbGx5IGRyb3BwaW5nIHRoZSBwYWNrZXQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBmcmFnbWVudGVkIG9yIHRydW5jYXRlZCBwYWNrZXRzIGluIHRoZSBSWCBwYXRoLiBUaGUgY29tbWVudCBpbmRpY2F0ZXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoICYjMzQ7U2hvcnQgRGF0YSBIZWFkZXImIzM0OyB3aGljaCBpbmRpY2F0ZXMgdGhlIGlzc3VlLgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIHNpdHVhdGlvbiwgSSYjMzk7bGwgbmVlZCBhIGJpdCBtb3JlIGNvbnRleHQuIEkmIzM5O2xsIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGFzaXhfY29tbW9uLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIHBvdGVudGlhbGx5IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgdXNpbmcgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNvbmZpcm0gdGhhdCB0aGUgVVNCIEFTSVggZHJpdmVyIGlzIGVuYWJsZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBkcml2ZXIgZm9yIHRoZSBVU0IgQVNJWCBjaGlwLCB0aGF0IHN1cHBvcnRzIG5ldHdvcmsgY29ubmVjdGl2aXR5IHVzaW5nIHRoZSBVU0IgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFx0ICovXG4gMTUxOlx0XHRpZiAocngtXHUwMDNlcmVtYWluaW5nIFx1MDAyNlx1MDAyNiAocngtXHUwMDNlcmVtYWluaW5nICYjNDM7IHNpemVvZih1MzIpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikpIHtcbiAxNTI6XHRcdFx0b2Zmc2V0ID0gKChyeC1cdTAwM2VyZW1haW5pbmcgJiM0MzsgMSkgXHUwMDI2IDB4ZmZmZSk7XG4gMTUzOlx0XHRcdHJ4LVx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQpO1xuIDE1NDpcdFx0XHRvZmZzZXQgPSAwO1xuIDE1NTpcdFxuIDE1NjpcdFx0XHRzaXplID0gKHUxNikocngtXHUwMDNlaGVhZGVyIFx1MDAyNiAweDdmZik7XG4gMTU3Olx0XHRcdGlmIChzaXplICE9ICgofnJ4LVx1MDAzZWhlYWRlciBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmZikpIHtcbiAxNTg6XHRcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBEYXRhIEhlYWRlciBzeW5jaHJvbmlzYXRpb24gd2FzIGxvc3QsIHJlbWFpbmluZyAlZFxcblwmIzM0OyxcbiAxNTk6XHRcdFx0XHRcdCAgIHJ4LVx1MDAzZXJlbWFpbmluZyk7XG4gMTYwOlx0XHRcdFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcbiAxNjE6XHRcdFx0fVxuIDE2MjpcdFx0fVxuIDE2MzpcdFxuIDE2NDpcdFx0d2hpbGUgKG9mZnNldCAmIzQzOyBzaXplb2YodTE2KSBcdTAwM2M9IHNrYi1cdTAwM2VsZW4pIHtcbiAxNjU6XHRcdFx0dTE2IGNvcHlfbGVuZ3RoO1xuIDE2NjpcdFxuIDE2NzpcdFx0XHRpZiAoIXJ4LVx1MDAzZXJlbWFpbmluZykge1xuIDE2ODpcdFx0XHRcdGlmIChza2ItXHUwMDNlbGVuIC0gb2Zmc2V0ID09IHNpemVvZih1MTYpKSB7XG4gMTY5Olx0XHRcdFx0XHRyeC1cdTAwM2VoZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXG4gMTcwOlx0XHRcdFx0XHRcdFx0c2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0KTtcbiAxNzE6XHRcdFx0XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSB0cnVlO1xuIDE3MjpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YodTE2KTtcbiAxNzM6XHRcdFx0XHRcdGJyZWFrO1xuIDE3NDpcdFx0XHRcdH1cbiAxNzU6XHRcbiAxNzY6XHRcdFx0XHRpZiAocngtXHUwMDNlc3BsaXRfaGVhZCA9PSB0cnVlKSB7XG4gMTc3Olx0XHRcdFx0XHRyeC1cdTAwM2VoZWFkZXIgfD0gKGdldF91bmFsaWduZWRfbGUxNihcbiAxNzg6XHRcdFx0XHRcdFx0XHRza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQpIFx1MDAzY1x1MDAzYyAxNik7XG4gMTc5Olx0XHRcdFx0XHRyeC1cdTAwM2VzcGxpdF9oZWFkID0gZmFsc2U7XG4gMTgwOlx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZih1MTYpO1xuIDE4MTpcdFx0XHRcdH0gZWxzZSB7XG4gMTgyOlx0XHRcdFx0XHRpZiAob2Zmc2V0ICYjNDM7IHNpemVvZih1MzIpIFx1MDAzZSBza2ItXHUwMDNlbGVuKSB7XG4gMTgzOlx0XHRcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxcblwmIzM0OyxcbiAxODQ6XHRcdFx0XHRcdFx0XHQgICBvZmZzZXQsIHNrYi1cdTAwM2VsZW4pO1xuIDE4NTpcdFx0XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuIDE4NjpcdFx0XHRcdFx0XHRyZXR1cm4gMDtcbiAxODc6XHRcdFx0XHRcdH1cbiAxODg6XHRcbiAxODk6XHRcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXHUwMDNlZGF0YSAmIzQzO1xuIDE5MDpcdFx0XHRcdFx0XHRcdFx0XHRvZmZzZXQpO1xuIDE5MTpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YodTMyKTtcbiAxOTI6XHRcdFx0XHR9XG4gMTkzOlx0XG4gMTk0Olx0XHRcdFx0LyogdGFrZSBmcmFtZSBsZW5ndGggZnJvbSBEYXRhIGhlYWRlciAzMi1iaXQgd29yZCAqL1xuIDE5NTpcdFx0XHRcdHNpemUgPSAodTE2KShyeC1cdTAwM2VoZWFkZXIgXHUwMDI2IDB4N2ZmKTtcbiAxOTY6XHRcdFx0XHRpZiAoc2l6ZSAhPSAoKH5yeC1cdTAwM2VoZWFkZXIgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHg3ZmYpKSB7XG4gMTk3Olx0XHRcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBCYWQgSGVhZGVyIExlbmd0aCAweCV4LCBvZmZzZXQgJWRcXG5cJiMzNDssXG4gMTk4Olx0XHRcdFx0XHRcdCAgIHJ4LVx1MDAzZWhlYWRlciwgb2Zmc2V0KTtcbiAxOTk6XHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4gMjAwOlx0XHRcdFx0XHRyZXR1cm4gMDtcbiAyMDE6XHRcdFx0XHR9XG4gMjAyOlx0XHRcdFx0aWYgKHNpemUgXHUwMDNlIGRldi1cdTAwM2VuZXQtXHUwMDNlbXR1ICYjNDM7IEVUSF9ITEVOICYjNDM7IFZMQU5fSExFTikge1xuIDIwMzpcdFx0XHRcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDthc2l4X3J4X2ZpeHVwKCkgQmFkIFJYIExlbmd0aCAlZFxcblwmIzM0OyxcbiAyMDQ6XHRcdFx0XHRcdFx0ICAgc2l6ZSk7XG4gMjA1Olx0XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuIDIwNjpcdFx0XHRcdFx0cmV0dXJuIDA7XG4gMjA3Olx0XHRcdFx0fVxuIDIwODpcdFxuIDIwOTpcdFx0XHRcdC8qIFNvbWV0aW1lcyBtYXkgZmFpbCB0byBnZXQgYSBuZXRkZXYgc29ja2V0IGJ1ZmZlciBidXRcbiAyMTA6XHRcdFx0XHQgKiBjb250aW51ZSB0byBwcm9jZXNzIHRoZSBVUkIgc29ja2V0IGJ1ZmZlciBzbyB0aGF0XG4gMjExOlx0XHRcdFx0ICogc3luY2hyb25pc2F0aW9uIG9mIHRoZSBFdGhlcm5ldCBmcmFtZSBEYXRhIGhlYWRlclxuIDIxMjpcdFx0XHRcdCAqIHdvcmQgaXMgbWFpbnRhaW5lZC5cbiAyMTM6XHRcdFx0XHQgKi9cbiAyMTQ6XHRcdFx0XHRyeC1cdTAwM2VheF9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKGRldi1cdTAwM2VuZXQsIHNpemUpO1xuIDIxNTpcdFxuIDIxNjpcdFx0XHRcdHJ4LVx1MDAzZXJlbWFpbmluZyA9IHNpemU7XG4gMjE3Olx0XHRcdH1cbiAyMTg6XHRcbiAyMTk6XHRcdFx0aWYgKHJ4LVx1MDAzZXJlbWFpbmluZyBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIG9mZnNldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FzaXhfY29tbW9uLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXHQmIzQzOz0gYXNpeC5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6MTQ6YXNpeC15IDo9IGFzaXhfZGV2aWNlcy5vIGFzaXhfY29tbW9uLm8gYXg4ODE3MmEub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxNzlfMTc4QSkgICAgICAmIzQzOz0gYXg4ODE3OV8xNzhhLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTgxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKktjb25maWcgRGl2ZSBUaW1lISoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGZvciB0aGUgQVg4ODE3WCBVU0IgbmV0d29yayBhZGFwdGVyLCBzbyBteSBmaXJzdCBzdGVwIGlzIGNsZWFyOiBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYFVTQl9ORVRfQVg4ODE3WGAuIFRoYXQgc2hvdWxkIGJlIHRoZSBrZXkgZW50cnkgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgdGllZCB0byBpdC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIHdvcms/IEFyZSB0aGVyZSBzcGVjaWZpYyBVU0Igc3RhY2sgcmVxdWlyZW1lbnRzPwoqICAgKipEZWZhdWx0IFZhbHVlczoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdHMgZm9yIHJlbGF0ZWQgcGFyYW1ldGVycyBhbmQgYXJlIHRoZXJlIGFueSByZWFzb25hYmxlIGRlZmF1bHRzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aG91dCBjaGFuZ2VzPwoqICAgKipNZW51IFN0cnVjdHVyZToqKiBIb3cgaXMgaXQgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyBjb25maWd1cmF0aW9uPyBJcyBpdCBuZXN0ZWQsIGhpZGRlbiBiZWhpbmQgb3RoZXIgb3B0aW9ucywgb3Igc3RyYWlnaHRmb3J3YXJkPwoqICAgKipDb25kaXRpb25hbCBDb21waWxhdGlvbjoqKiBVbmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXMgdGhpcyBkcml2ZXIgZXZlbiAqYXZhaWxhYmxlKj8gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIG9yIGtlcm5lbCB2ZXJzaW9uIHJlcXVpcmVtZW50cz8KClRoaXMgS2NvbmZpZyBhbmFseXNpcyBpcyBnb2luZyB0byBzZXQgdGhlIHN0YWdlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIFVTQiBuZXR3b3JrIGRyaXZlciBlY29zeXN0ZW0gYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIGZvciBjdXN0b21pemF0aW9uIHJlbGF0ZWQgdG8gdGhlIEFYODgxN1ggY2hpcC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtVU0JfTkVUX0FYODgxN1gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTMyPWNvbmZpZyBVU0JfVVNCTkVUXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY1LVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY2OmNvbmZpZyBVU0JfTkVUX0FYODgxN1hcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2Ny1cdHRyaXN0YXRlIFwmIzM0O0FTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19VU0JfTEFONzhYWClcdCYjNDM7PSBsYW43OHh4Lm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfVVNCX05FVF9BWDg4MTdYKVx0JiM0Mzs9IGFzaXgub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE0LWFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgVVNCIE5ldHdvcmtpbmcgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIFVTQiBuZXR3b3JraW5nIGRyaXZlcnMuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCB6ZXJvIGluIGFyb3VuZCBsaW5lIDE2Ni4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoZXRoZXIgb3Igbm90IHNwZWNpZmljIFVTQiBuZXR3b3JrIGRyaXZlciBmZWF0dXJlcyBhcmUgZXZlbiAqYXZhaWxhYmxlKiB0byBiZSBjb25maWd1cmVkIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHdob2xlIHN5c3RlbSB3b3JrcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjA6XHRcbiAxNjE6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXHUwMDNlLlxuIDE2MjpcdFxuIDE2MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxNjQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cbiAxNjU6XHRcbiAxNjY6XHRjb25maWcgVVNCX05FVF9BWDg4MTdYXG4gMTY3Olx0XHR0cmlzdGF0ZSBcJiMzNDtBU0lYIEFYODh4eHggQmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBBZGFwdGVyc1wmIzM0O1xuIDE2ODpcdFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG4gMTY5Olx0XHRzZWxlY3QgQ1JDMzJcbiAxNzA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gMTcxOlx0XHRzZWxlY3QgQVg4ODc5NkJfUEhZXG4gMTcyOlx0XHRpbXBseSBORVRfU0VMRlRFU1RTXG4gMTczOlx0XHRkZWZhdWx0IHlcbiAxNzQ6XHRcdGhlbHBcbiAxNzU6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBBU0lYIEFYODh4eHggYmFzZWQgVVNCIDIuMFxuIDE3NjpcdFx0ICAxMC8xMDAgRXRoZXJuZXQgYWRhcHRlcnMuXG4gMTc3Olx0XG4gMTc4Olx0XHQgIFRoaXMgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBkZXZpY2VzOlxuIDE3OTpcdFx0ICAgICogQXRlbiBVQzIxMFRcbiAxODA6XHRcdCAgICAqIEFTSVggQVg4ODE3MlxuIDE4MTpcdFx0ICAgICogQmlsbGlvbnRvbiBTeXN0ZW1zLCBVU0IyQVJcbiAxODI6XHRcdCAgICAqIEJpbGxpb250b24gU3lzdGVtcywgR1VTQjJBTS0xRy1CXG4gMTgzOlx0XHQgICAgKiBCdWZmYWxvIExVQS1VMi1LVFhcbiAxODQ6XHRcdCAgICAqIENvcmVnYSBGRXRoZXIgVVNCMi1UWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTM3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBOZXR3b3JrIERldmljZSBSZWFjaGFiaWxpdHkgYW5kIFN5emthbGxlciBFbXVsYXRpb24qKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBhY3R1YWxseSByZWFjaCB0aGlzIFVTQiBuZXR3b3JrIGRldmljZSB0aHJvdWdoIHN5emthbGxlciYjMzk7cyBlbXVsYXRpb24/IEdvb2QgbmV3cyEgSXQmIzM5O3MgZGVmaW5pdGVseSBwb3NzaWJsZS4gSW4gZmFjdCwgVVNCIGRldmljZXMsIHNwZWNpZmljYWxseSB0aGUgb25lcyB0aGF0IHVzZSBuZXR3b3JrIGRyaXZlcnMgbGlrZSBBU0lYIG9yIENEQy1FdGhlciwgYXJlIGZyZXF1ZW50bHkgZnV6emVkIGJ5IHN5emthbGxlciB1c2luZyB0aGUgUmF3IEdhZGdldCAvIGR1bW15X2hjZCBlbXVsYXRpb24sIHdoaWNoIHdvcmtzIHZpYSB0aGUgYHN5el91c2JfY29ubmVjdGAgc3lzdGVtIGNhbGwuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgKmhvdyogc3l6a2FsbGVyIGlzIGhhbmRsaW5nIHRoaXMsIGFuZCB3aGV0aGVyIGl0IGhhcyBzcGVjaWZpYyBVU0IgZGVzY3JpcHRpb25zIGZvciBBU0lYIG9yIHNpbXBseSB1c2VzIHJhdyBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhlIFVTQiBmdXp6aW5nIGluIHN5emthbGxlciBoaW5nZXMgb24gdGhlIGAvZGV2L3Jhdy1nYWRnZXRgIGRldmljZSBhbmQgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIGNhbGwuIEJhc2ljYWxseSwgYW55IFVTQiBkcml2ZXIgc2hvdWxkIGJlIGFibGUgdG8gYmluZCB0byBhbiBlbXVsYXRlZCBVU0IgZGV2aWNlIGFzIGxvbmcgYXMgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMgbWF0Y2guIE9uY2UgYm91bmQsIHN5emthbGxlciBjYW4gaW5qZWN0IFVTQiBwYWNrZXRzLCBvciBVUkJzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNwZWNpZmljYWxseSBpbnZlc3RpZ2F0ZSB0aGUgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FzaXhfcnhfZml4dXBfaW50ZXJuYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXguaD0yMDY9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjA4LVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDk6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMTAtXHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTExNT1zdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE3LVx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMTg6XHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTktXHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjEzNjppbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzctXHRcdFx0ICAgc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9MjQ5PWludCBhc2l4X3J4X2ZpeHVwX2NvbW1vbihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjUzLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjU0Olx0cmV0dXJuIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoZGV2LCBza2IsIHJ4KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI1NS19XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MzM5PXN0YXRpYyBpbnQgYXg4ODE3MmFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTM0My1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjM0NDpcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQVNJWCBVU0IgTmV0d29yayBEcml2ZXIgUlggRml4dXAgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBBU0lYIFVTQiBuZXR3b3JrIGRyaXZlciBpc3N1ZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXggZm9yIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gdGhlIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCBmdW5jdGlvbi4gIEl0JiMzOTtzIHByZXR0eSBjbGVhciB3aGF0IHRoZSBwcm9ibGVtIHdhczogIGluIHRoZSBvcmlnaW5hbCBjb2RlLCB3aXRoaW4gdGhlIGB3aGlsZWAgbG9vcCwgdGhlcmUgd2FzIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHJlbWFpbmluZyBkYXRhIGluIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgd2FzIG9ubHkgdGhyZWUgYnl0ZXMsIGJ1dCB0aGUgY29kZSB3YXMgYXR0ZW1wdGluZyB0byByZWFkIGZvdXIgYnl0ZXMgdXNpbmcgYGdldF91bmFsaWduZWRfbGUzMmAuICBUaGlzIHBhdGNoIGFkZHMgYSBjcnVjaWFsIGJvdW5kcyBjaGVjayB0byBwcmV2ZW50IHRoYXQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGZ1enphYmxlLiAgQmFzZWQgb24gbXkga25vd2xlZGdlLCBhbmQgY29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhLCBpdCBkZWZpbml0ZWx5IGlzLiAgVGhlIGZpeCBvY2N1cnMgd2l0aGluIGEgYGRyaXZlcl9pbmZvYCYjMzk7cyBgLnJ4X2ZpeHVwYCBjYWxsYmFjayBpbiBVU0JuZXQuIFNwZWNpZmljYWxseSwgYW4gZW11bGF0ZWQgVVNCIGRldmljZSB3aXRoIGEgc3VwcG9ydGVkIFZJRC9QSUQgKGxpa2UgdGhlIGBheDg4MTcyYCBmYW1pbHkpIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiAgV2hlbiBzeXprYWxsZXIgc2VuZHMgZGF0YSB0byB0aGUgZGV2aWNlJiMzOTtzIGVuZHBvaW50LCBgdXNibmV0X2JoYCBpcyBzY2hlZHVsZWQsIHdoaWNoIGluIHR1cm4gaW52b2tlcyBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAuICBUaGlzIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIGZ1enppbmcgd2l0aCBVU0IgcmF3LWdhZGdldCAvIGR1bW15X2hjZC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuCgpSZWdhcmRpbmcgdGhlIGBGb2N1c1N5bWJvbHNgLCB0aGUgZXhhY3QgZnVuY3Rpb24gbW9kaWZpZWQgaXMgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgLiBJdCYjMzk7cyBub3QgaW5saW5lZCBhbmQgaXMgZXhwb3J0ZWQgaW4gYGFzaXguaGAuICBgYXNpeF9yeF9maXh1cF9jb21tb25gIGNhbGxzIGl0LCBhcyBkb2VzIGBheDg4MTcyYV9yeF9maXh1cGAuIFNvIHRoZSBtb3N0IHNwZWNpZmljIHdvdWxkIGJlIGBbJiMzNDthc2l4X3J4X2ZpeHVwX2ludGVybmFsJiMzNDtdYCwgYnV0IGl0IGNvdWxkIGFsc28gaW5jbHVkZSBgYXNpeF9yeF9maXh1cF9jb21tb25gLiBUaGUgZnVuY3Rpb24gaXMgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgYSBkaXN0aW5jdCBzeW1ib2wuCgpGaW5hbGx5LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IENoZWNraW5nIGBkcml2ZXJzL25ldC91c2IvTWFrZWZpbGVgLCB0aGUgYGFzaXgub2AgbW9kdWxlIGlzIGJ1aWx0IGlmIGBDT05GSUdfVVNCX05FVF9BWDg4MTdYYCBpcyBlbmFibGVkLiAgTG9va2luZyBpbnRvIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AsIGBVU0JfTkVUX0FYODgxN1hgIGRlcGVuZHMgb24gYFVTQl9VU0JORVRgLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYE5FVERFVklDRVNgIGFuZCBgVVNCX05FVF9EUklWRVJTYC4gVGhlcmVmb3JlLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYENPTkZJR19VU0JfTkVUX0FYODgxN1g9eWAgKG9yIGBtYCkgYW5kIGl0cyBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29tbWVudCBcJiMzNDtIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gIVVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcbiAgIDk6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBOZXR3b3JrIEFkYXB0ZXJzXCYjMzQ7XG4gIDEwOlx0XHRkZWZhdWx0IFVTQiBpZiBVU0JcbiAgMTE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgMTI6XHRcbiAgMTM6XHRpZiBVU0JfTkVUX0RSSVZFUlNcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgVVNCX0NBVENcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMTc6XHRcdHNlbGVjdCBDUkMzMlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxuICAyMDpcdFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxuICAyMTpcdFx0ICBCZWxraW4gRjVVMDExXG4gIDIyOlx0XHQgIEJlbGtpbiBGNVUxMTFcbiAgMjM6XHRcdCAgQ0FUQyBOZXRNYXRlXG4gIDI0Olx0XHQgIENBVEMgTmV0TWF0ZSBJSVxuICAyNTpcdFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcbiAgMjY6XHRcbiAgMjc6XHRcdCAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSxcbiAgMjg6XHRcdCAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvblxuICAyOTpcdFx0ICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy5cbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVVNCX0tBV0VUSFxuICAzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5XG4gIDM4Olx0XHQgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OlxuICAzOTpcdFx0ICAzQ29tIDNDMTkyNTBcbiAgNDA6XHRcdCAgQURTIFVTQi0xMEJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODgKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFTSVggQVg4OHh4eCBFdGhlcm5ldCBBZGFwdGVyIERyaXZlciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGxldCBtZSBsYXkgdGhpcyBvdXQgY2xlYXJseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBmb3IgdGhlIEFTSVggQVg4OHh4eCBFdGhlcm5ldCBhZGFwdGVyIGRyaXZlci4gSSBzZWUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSBhcmUgYFVTQl9ORVRfQVg4ODE3WGAsIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBhbmQgYE5FVGAuIEkmIzM5O2xsIGtlZXAgdGhvc2UgaW4gbWluZC4KCkkmIzM5O20gY2hlY2tpbmcgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJiMzOTt2ZSBtaXNzZWQuIGBVU0JfTkVUX0FYODgxN1hgIGxvb2tzIGxpa2UgdGhlIGRpcmVjdCBjb25maWd1cmF0aW9uIGZsYWcgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyIGFuZCBgVVNCX1VTQk5FVGAgaXMgdGhlIGJyb2FkZXIgZnJhbWV3b3JrIGl0IGJlbG9uZ3MgdG8uCgpOb3csIGxldCYjMzk7cyBjb25maXJtIGV2ZXJ5dGhpbmcgZWxzZTogaXQmIzM5O3MgbWFya2VkIGFzIGBXb3J0aEZ1enppbmdgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGdvb2QgdGFyZ2V0LiBUaGUgcmVhc29uaW5nIGlzIGNvbmNpc2UgYW5kIG9uIHBvaW50OiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgYm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdHkgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAuIFRoaXMgaXMgaGFwcGVuaW5nIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBpbmNvbWluZyBuZXR3b3JrIHBhY2tldHMgYW5kIHRoZSBkcml2ZXIgaXRzZWxmIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgYXMgaXQgc2ltcGxpZmllcyB0ZXN0aW5nLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0IC0gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbi4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYXMgZXhwZWN0ZWQ6IGBVU0JfTkVUX0FYODgxN1hgIGFuZCBgVVNCX1VTQk5FVGAuCgpZZXMsIGl0JiMzOTtzIGFsbCBjbGVhci4gSSBjYW4gdmVyaWZ5IGFsbCBvZiB0aGlzLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXNpeF9yeF9maXh1cF9pbnRlcm5hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIHNob3J0IFJYIGRhdGEgaGVhZGVycy4gVGhlIEFTSVggVVNCIEV0aGVybmV0IGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChzdWNoIGFzIGR1bW15X2hjZC9yYXctZ2FkZ2V0KSwgbWFraW5nIHRoaXMgUlggcGF0aCBhY2Nlc3NpYmxlIHRvIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3WCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXNpeF9yeF9maXh1cF9pbnRlcm5hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIHNob3J0IFJYIGRhdGEgaGVhZGVycy4gVGhlIEFTSVggVVNCIEV0aGVybmV0IGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChzdWNoIGFzIGR1bW15X2hjZC9yYXctZ2FkZ2V0KSwgbWFraW5nIHRoaXMgUlggcGF0aCBhY2Nlc3NpYmxlIHRvIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgb2Zmc2V0ICYjNDM7IHNpemVvZih1MzIpIFx1MDAzZSBza2ItXHUwMDNlbGVuYCkgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIHRoZSAzMi1iaXQgcGFja2V0IGRhdGEgaGVhZGVyIGZyb20gYW4gaW5jb21pbmcgc2tiLiBcblxuVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgLyBidWZmZXIgb3ZlcnJlYWQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsbHkgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgbW9kaWZpZWQgY29udHJvbCBmbG93IG9wZXJhdGVzIHN0cmljdGx5IG9uIGV4aXN0aW5nIGluaXRpYWxpemVkIGludGVnZXIgbGVuZ3RocyBhbmQgcmV0dXJucyBlYXJseSBvbiBpbnZhbGlkIGlucHV0IGFmdGVyIHJlc2V0dGluZyBzdGF0ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRjNTMxZWU0M2RkOGNiZDk1ZWE5ZDRmNDhhZDg4YTA3MDI5YmI4MGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAyMzoxNzoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMKaW5kZXggNGYwM2Y0ZTU3NjU1ZC4uOGM1Zjg2M2VmZTdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDEzIEBAIGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlyeC0mZ3Q7c3BsaXRfaGVhZCA9IGZhbHNlOwogCQkJCW9mZnNldCAmIzQzOz0gc2l6ZW9mKHUxNik7CiAJCQl9IGVsc2UgewomIzQzOwkJCQlpZiAob2Zmc2V0ICYjNDM7IHNpemVvZih1MzIpICZndDsgc2tiLSZndDtsZW4pIHsKJiM0MzsJCQkJCW5ldGRldl9lcnIoZGV2LSZndDtuZXQsICYjMzQ7YXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxuJiMzNDssCiYjNDM7CQkJCQkJICAgb2Zmc2V0LCBza2ItJmd0O2xlbik7CiYjNDM7CQkJCQlyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpOwomIzQzOwkJCQkJcmV0dXJuIDA7CiYjNDM7CQkJCX0KJiM0MzsKIAkJCQlyeC0mZ3Q7aGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi0mZ3Q7ZGF0YSAmIzQzOwogCQkJCQkJCQlvZmZzZXQpOwogCQkJCW9mZnNldCAmIzQzOz0gc2l6ZW9mKHUzMik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYXNpeF9jb21tb24uYyBQYXRjaCBmb3IgS01TQU4gSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNgIGFuZCBmaWd1cmUgb3V0IHdoZXRoZXIgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gTXkgYXBwcm9hY2ggd2lsbCBiZSBtZXRob2RpY2FsLiBGaXJzdCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgZGlmZiBpdHNlbGYsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyBsaW5lcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkLiBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgY2hhbmdlcy4gVGhhdCBtZWFucyByZWFkaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AgdG8gZ3Jhc3AgdGhlIGxhcmdlciBwaWN0dXJlLiBJJiMzOTtsbCB1c2UgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gbG9vayBhdCB0aGUgY29kZSBhcm91bmQgbGluZSAxNzkgdG8gZ2V0IGEgZmVlbCBmb3Igd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEJhc2VkIG9uIG15IGV4cGVydGlzZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2guIFRoaXMgd2lsbCBoZWxwIG1lIGRldGVybWluZSB3aGV0aGVyIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFueXRoaW5nIG5ldyB0aGF0IG5lY2Vzc2l0YXRlcyBhIGBOZWVkc0tNU0FOPXRydWVgIHNldHRpbmcsIG9yIGlmIGEgc3RhbmRhcmQgdGVzdGluZyByZWdpbWUgaXMgc3VmZmljaWVudCAoaW1wbHlpbmcgYE5lZWRzS01TQU49ZmFsc2VgKS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0dTE2IHNpemU7XG4gMTQxOlx0XG4gMTQyOlx0XHQvKiBXaGVuIGFuIEV0aGVybmV0IGZyYW1lIHNwYW5zIG11bHRpcGxlIFVSQiBzb2NrZXQgYnVmZmVycyxcbiAxNDM6XHRcdCAqIGRvIGEgc2FuaXR5IHRlc3QgZm9yIHRoZSBEYXRhIGhlYWRlciBzeW5jaHJvbmlzYXRpb24uXG4gMTQ0Olx0XHQgKiBBdHRlbXB0IHRvIGRldGVjdCB0aGUgc2l0dWF0aW9uIG9mIHRoZSBwcmV2aW91cyBzb2NrZXQgYnVmZmVyIGhhdmluZ1xuIDE0NTpcdFx0ICogYmVlbiB0cnVuY2F0ZWQgb3IgYSBzb2NrZXQgYnVmZmVyIHdhcyBtaXNzaW5nLiBUaGVzZSBzaXR1YXRpb25zXG4gMTQ2Olx0XHQgKiBjYXVzZSBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIGRhdGEgc3RyZWFtIGFuZCB0aGVyZWZvcmUgbmVlZCB0byBhdm9pZFxuIDE0NzpcdFx0ICogYXBwZW5kaW5nIGJhZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbmV0ZGV2IHNvY2tldCBidWZmZXIuXG4gMTQ4Olx0XHQgKiBBbHNvIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlzY2FyZGluZyBhIGdvb2QgY3VycmVudCBuZXRkZXYgc29ja2V0XG4gMTQ5Olx0XHQgKiBidWZmZXIuXG4gMTUwOlx0XHQgKi9cbiAxNTE6XHRcdGlmIChyeC1cdTAwM2VyZW1haW5pbmcgXHUwMDI2XHUwMDI2IChyeC1cdTAwM2VyZW1haW5pbmcgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNjPSBza2ItXHUwMDNlbGVuKSkge1xuIDE1MjpcdFx0XHRvZmZzZXQgPSAoKHJ4LVx1MDAzZXJlbWFpbmluZyAmIzQzOyAxKSBcdTAwMjYgMHhmZmZlKTtcbiAxNTM6XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCk7XG4gMTU0Olx0XHRcdG9mZnNldCA9IDA7XG4gMTU1Olx0XG4gMTU2Olx0XHRcdHNpemUgPSAodTE2KShyeC1cdTAwM2VoZWFkZXIgXHUwMDI2IDB4N2ZmKTtcbiAxNTc6XHRcdFx0aWYgKHNpemUgIT0gKCh+cngtXHUwMDNlaGVhZGVyIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4N2ZmKSkge1xuIDE1ODpcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIERhdGEgSGVhZGVyIHN5bmNocm9uaXNhdGlvbiB3YXMgbG9zdCwgcmVtYWluaW5nICVkXFxuXCYjMzQ7LFxuIDE1OTpcdFx0XHRcdFx0ICAgcngtXHUwMDNlcmVtYWluaW5nKTtcbiAxNjA6XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuIDE2MTpcdFx0XHR9XG4gMTYyOlx0XHR9XG4gMTYzOlx0XG4gMTY0Olx0XHR3aGlsZSAob2Zmc2V0ICYjNDM7IHNpemVvZih1MTYpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbikge1xuIDE2NTpcdFx0XHR1MTYgY29weV9sZW5ndGg7XG4gMTY2Olx0XG4gMTY3Olx0XHRcdGlmICghcngtXHUwMDNlcmVtYWluaW5nKSB7XG4gMTY4Olx0XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQgPT0gc2l6ZW9mKHUxNikpIHtcbiAxNjk6XHRcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUxNihcbiAxNzA6XHRcdFx0XHRcdFx0XHRza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQpO1xuIDE3MTpcdFx0XHRcdFx0cngtXHUwMDNlc3BsaXRfaGVhZCA9IHRydWU7XG4gMTcyOlx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZih1MTYpO1xuIDE3MzpcdFx0XHRcdFx0YnJlYWs7XG4gMTc0Olx0XHRcdFx0fVxuIDE3NTpcdFxuIDE3NjpcdFx0XHRcdGlmIChyeC1cdTAwM2VzcGxpdF9oZWFkID09IHRydWUpIHtcbiAxNzc6XHRcdFx0XHRcdHJ4LVx1MDAzZWhlYWRlciB8PSAoZ2V0X3VuYWxpZ25lZF9sZTE2KFxuIDE3ODpcdFx0XHRcdFx0XHRcdHNrYi1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCkgXHUwMDNjXHUwMDNjIDE2KTtcbiAxNzk6XHRcdFx0XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcbiAxODA6XHRcdFx0XHRcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKHUxNik7XG4gMTgxOlx0XHRcdFx0fSBlbHNlIHtcbiAxODI6XHRcdFx0XHRcdGlmIChvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbiAxODM6XHRcdFx0XHRcdFx0bmV0ZGV2X2VycihkZXYtXHUwMDNlbmV0LCBcJiMzNDthc2l4X3J4X2ZpeHVwKCkgU2hvcnQgRGF0YSBoZWFkZXIsIG9mZnNldCAlZCwgbGVuICVkXFxuXCYjMzQ7LFxuIDE4NDpcdFx0XHRcdFx0XHRcdCAgIG9mZnNldCwgc2tiLVx1MDAzZWxlbik7XG4gMTg1Olx0XHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4gMTg2Olx0XHRcdFx0XHRcdHJldHVybiAwO1xuIDE4NzpcdFx0XHRcdFx0fVxuIDE4ODpcdFxuIDE4OTpcdFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICYjNDM7XG4gMTkwOlx0XHRcdFx0XHRcdFx0XHRcdG9mZnNldCk7XG4gMTkxOlx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZih1MzIpO1xuIDE5MjpcdFx0XHRcdH1cbiAxOTM6XHRcbiAxOTQ6XHRcdFx0XHQvKiB0YWtlIGZyYW1lIGxlbmd0aCBmcm9tIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkICovXG4gMTk1Olx0XHRcdFx0c2l6ZSA9ICh1MTYpKHJ4LVx1MDAzZWhlYWRlciBcdTAwMjYgMHg3ZmYpO1xuIDE5NjpcdFx0XHRcdGlmIChzaXplICE9ICgofnJ4LVx1MDAzZWhlYWRlciBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmZikpIHtcbiAxOTc6XHRcdFx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7YXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcblwmIzM0OyxcbiAxOTg6XHRcdFx0XHRcdFx0ICAgcngtXHUwMDNlaGVhZGVyLCBvZmZzZXQpO1xuIDE5OTpcdFx0XHRcdFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcbiAyMDA6XHRcdFx0XHRcdHJldHVybiAwO1xuIDIwMTpcdFx0XHRcdH1cbiAyMDI6XHRcdFx0XHRpZiAoc2l6ZSBcdTAwM2UgZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgRVRIX0hMRU4gJiM0MzsgVkxBTl9ITEVOKSB7XG4gMjAzOlx0XHRcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2FzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxuXCYjMzQ7LFxuIDIwNDpcdFx0XHRcdFx0XHQgICBzaXplKTtcbiAyMDU6XHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4gMjA2Olx0XHRcdFx0XHRyZXR1cm4gMDtcbiAyMDc6XHRcdFx0XHR9XG4gMjA4Olx0XG4gMjA5Olx0XHRcdFx0LyogU29tZXRpbWVzIG1heSBmYWlsIHRvIGdldCBhIG5ldGRldiBzb2NrZXQgYnVmZmVyIGJ1dFxuIDIxMDpcdFx0XHRcdCAqIGNvbnRpbnVlIHRvIHByb2Nlc3MgdGhlIFVSQiBzb2NrZXQgYnVmZmVyIHNvIHRoYXRcbiAyMTE6XHRcdFx0XHQgKiBzeW5jaHJvbmlzYXRpb24gb2YgdGhlIEV0aGVybmV0IGZyYW1lIERhdGEgaGVhZGVyXG4gMjEyOlx0XHRcdFx0ICogd29yZCBpcyBtYWludGFpbmVkLlxuIDIxMzpcdFx0XHRcdCAqL1xuIDIxNDpcdFx0XHRcdHJ4LVx1MDAzZWF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVx1MDAzZW5ldCwgc2l6ZSk7XG4gMjE1Olx0XG4gMjE2Olx0XHRcdFx0cngtXHUwMDNlcmVtYWluaW5nID0gc2l6ZTtcbiAyMTc6XHRcdFx0fVxuIDIxODpcdFxuIDIxOTpcdFx0XHRpZiAocngtXHUwMDNlcmVtYWluaW5nIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0KSB7XG4gMjIwOlx0XHRcdFx0Y29weV9sZW5ndGggPSBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0O1xuIDIyMTpcdFx0XHRcdHJ4LVx1MDAzZXJlbWFpbmluZyAtPSBjb3B5X2xlbmd0aDtcbiAyMjI6XHRcdFx0fSBlbHNlIHtcbiAyMjM6XHRcdFx0XHRjb3B5X2xlbmd0aCA9IHJ4LVx1MDAzZXJlbWFpbmluZztcbiAyMjQ6XHRcdFx0XHRyeC1cdTAwM2VyZW1haW5pbmcgPSAwO1xuIDIyNTpcdFx0XHR9XG4gMjI2Olx0XG4gMjI3Olx0XHRcdGlmIChyeC1cdTAwM2VheF9za2IpIHtcbiAyMjg6XHRcdFx0XHRza2JfcHV0X2RhdGEocngtXHUwMDNlYXhfc2tiLCBza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQsXG4gMjI5Olx0XHRcdFx0XHQgICAgIGNvcHlfbGVuZ3RoKTtcbiAyMzA6XHRcdFx0XHRpZiAoIXJ4LVx1MDAzZXJlbWFpbmluZykge1xuIDIzMTpcdFx0XHRcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCByeC1cdTAwM2VheF9za2IpO1xuIDIzMjpcdFx0XHRcdFx0cngtXHUwMDNlYXhfc2tiID0gTlVMTDtcbiAyMzM6XHRcdFx0XHR9XG4gMjM0Olx0XHRcdH1cbiAyMzU6XHRcbiAyMzY6XHRcdFx0b2Zmc2V0ICYjNDM7PSAoY29weV9sZW5ndGggJiM0MzsgMSkgXHUwMDI2IDB4ZmZmZTtcbiAyMzc6XHRcdH1cbiAyMzg6XHRcbiAyMzk6XHRcdGlmIChza2ItXHUwMDNlbGVuICE9IG9mZnNldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTU1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1ZyBGaXggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHdoYXQgd2FzIHRoZSBvcmlnaW5hbCBidWcgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3Nlcz8gSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgd2l0aGluIHRoZSBgYXNpeF9yeF9maXh1cGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaW5zaWRlIHRoYXQgYHdoaWxlYCBsb29wLCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgZGVhbHMgd2l0aCBoZWFkZXIgaGFuZGxpbmcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgaWYgdGhlIHJlbWFpbmluZyBkYXRhIGluIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgaXMgMiBvciAzIGJ5dGVzLCB0aGUgZXhpc3RpbmcgbG9naWMgbWlnaHQgYXR0ZW1wdCB0byByZWFkIGEgNC1ieXRlIChgdTMyYCkgaGVhZGVyLCBsZWFkaW5nIHRvIGFuIG92ZXJyZWFkIHBhc3QgdGhlIGFsbG9jYXRlZCBidWZmZXIuCgpUaGUgd2hpbGUgbG9vcCBjb25kaXRpb24gaXRzZWxmOiBgb2Zmc2V0ICYjNDM7IHNpemVvZih1MTYpICZsdDs9IHNrYi0mZ3Q7bGVuYCBpcyB0cnVlLCBldmVuIHdoZW4gdGhlcmUgYXJlIG9ubHkgMiBvciAzIGJ5dGVzIGxlZnQuIFRoZSBjb25kaXRpb25hbCBgc2tiLSZndDtsZW4gLSBvZmZzZXQgPT0gc2l6ZW9mKHUxNilgIHdpbGwgYmUgdHJ1ZSBvbmx5IGlmIHRoZXJlIGFyZSB0d28gYnl0ZXMgcmVtYWluaW5nLiBTbywgaWYgd2UgZW5kIHVwIGluIHRoZSBgZWxzZWAgYnJhbmNoLCBhbmQgdGhlcmUgYXJlIG9ubHkgMyBieXRlcyBsZWZ0LCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtIGFyaXNlczogaXQgdHJpZXMgdG8gcmVhZCA0IGJ5dGVzIHdpdGggYGdldF91bmFsaWduZWRfbGUzMihza2ItJmd0O2RhdGEgJiM0Mzsgb2Zmc2V0KWAuIFRoaXMgaXMgYSBjbGFzc2ljIGJ1ZmZlciBvdmVycmVhZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byByZWFkaW5nIHVuYWxsb2NhdGVkIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGJ1ZyByZXF1aXJlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgb3IgaXMgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgc3VmZmljaWVudD8gS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIG90aGVyIG1lbW9yeSBhY2Nlc3MgZXJyb3JzLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGUgb3ZlcnJlYWQgaXMgcHJlY2lzZWx5IHdoYXQgS0FTQU4gaXMgbWVhbnQgdG8gY2F0Y2guIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgc2xhYi1vdXQtb2YtYm91bmRzIHJlYWQuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGV0ZWN0cyByZWFkcyBvZiAqdW5pbml0aWFsaXplZCogbWVtb3J5LCBsaWtlIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zLCBhbmQgY2FuIGNhdGNoIG1lbW9yeSBsZWFrcy4KCkFjY29yZGluZyB0byB0aGUgcnVsZXMsIHdlIHNob3VsZG4mIzM5O3QgdXNlIEtNU0FOIGlmIEtBU0FOIChvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKSBjYW4gY2F0Y2ggdGhlIHByb2JsZW0uIFdlIG9ubHkgdXNlIEtNU0FOIGlmIHRoZSBwYXRjaCAqaW50cm9kdWNlcyogb3IgKmV4cG9zZXMqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgYXBwbHkgdGhvc2Ugc3BlY2lmaWMgcnVsZXMsIHBvaW50IGJ5IHBvaW50LgoKVGhpcyBwYXRjaCBhZGRzIHRoaXMgY2hlY2s6CmBgYGMKJiM0MzsJCQkJaWYgKG9mZnNldCAmIzQzOyBzaXplb2YodTMyKSAmZ3Q7IHNrYi0mZ3Q7bGVuKSB7CiYjNDM7CQkJCQluZXRkZXZfZXJyKGRldi0mZ3Q7bmV0LCAmIzM0O2FzaXhfcnhfZml4dXAoKSBTaG9ydCBEYXRhIGhlYWRlciwgb2Zmc2V0ICVkLCBsZW4gJWRcbiYjMzQ7LAomIzQzOwkJCQkJCSAgIG9mZnNldCwgc2tiLSZndDtsZW4pOwomIzQzOwkJCQkJcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTsKJiM0MzsJCQkJCXJldHVybiAwOwomIzQzOwkJCQl9CmBgYAoKVGhlIHBhdGNoIGZpeGVzIGEgYnVnISBJdCBpcyBhIGJvdW5kcyBjaGVjayB0aGF0IGFkZHMgYSBjaGVjayBmb3IgaWYgYG9mZnNldCAmIzQzOyBzaXplb2YodTMyKSAmZ3Q7IHNrYi0mZ3Q7bGVuYC4KCkRvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTm8sIHF1aXRlIHRoZSBvcHBvc2l0ZSEgVGhlIHBhdGNoICpwcmV2ZW50cyogb3V0LW9mLWJvdW5kcyByZWFkcyBieSBhZGRpbmcgYSBib3VuZCBjaGVjay4gSXQgKnJlc3RyaWN0cyogYWNjZXNzLCBtYWtpbmcgaXQgKm1vcmUqIHNhZmUuCgpEb2VzIGl0IG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8gTm8uIERvZXMgaXQgaW50cm9kdWNlIG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLCBiZWNhdXNlIGl0IHVzZXMgaW50ZWdlciB2YXJpYWJsZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQuIERvZXMgaXQgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm8uIERvZXMgaXQgbW9kaWZ5IHRoZSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCAqYWxsb3dzKiBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzPyBObyEgSXQgcmVzdHJpY3RzIHRoZSBib3VuZHMgdG8gcHJldmVudCBvdmVycmVhZHMuCgpUaGVyZWZvcmUsIHNpbmNlIHRoaXMgcGF0Y2ggKnByZXZlbnRzKiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcywgd2UgY2FuIGNvbmZpZGVudGx5IGNvbmNsdWRlIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgb3JpZ2luYWwgYnVmZmVyIG92ZXJyZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthc2l4X3J4X2ZpeHVwX2ludGVybmFsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4Lmg9MjA2PXZvaWQgYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTIwOC1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MjA5OmludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjEwLVx0XHRcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz0xMTU9c3RhdGljIHZvaWQgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTExNy1cdC8qIFJlc2V0IHRoZSB2YXJpYWJsZXMgdGhhdCBoYXZlIGEgbGlmZXRpbWUgb3V0c2lkZSBvZlxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTE4Olx0ICogYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHNvIHRoYXQgZnV0dXJlIHByb2Nlc3Npbmcgc3RhcnRzIGZyb20gYVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTE5LVx0ICoga25vd24gc2V0IG9mIGluaXRpYWwgY29uZGl0aW9ucy5cbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMzUtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMzY6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMTM3LVx0XHRcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTI0OT1pbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI1My1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1NDpcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yNTUtfVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTMzOT1zdGF0aWMgaW50IGF4ODgxNzJhX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDMtXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzozNDQ6XHRyZXR1cm4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbChkZXYsIHNrYiwgcngpO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzQ1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgc3BlY2lmaWMgcm91dGluZS4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyByZWxhdGVkIHRvIGhhbmRsaW5nIHBvdGVudGlhbCBpc3N1ZXMgb3IgZXJyb3JzIGR1cmluZyB0aGUgcmVjZWl2ZSBwcm9jZXNzIHdpdGhpbiB0aGUgQVNJWCBkcml2ZXIuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIHB1cnBvc2UgaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBjYWxsZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBhbnkgcG90ZW50aWFsIHdlYWtuZXNzZXMgb3IgYXJlYXMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGV2ZW4gY29udHJpYnV0aW5nIHRvIHN0YWJpbGl0eSBwcm9ibGVtcy4gQSBkZWVwIGRpdmUgaXMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgc3RyZWFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTU6XHRzdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXG4gMTE2Olx0e1xuIDExNzpcdFx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXG4gMTE4Olx0XHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXG4gMTE5Olx0XHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxuIDEyMDpcdFx0ICovXG4gMTIxOlx0XG4gMTIyOlx0XHRpZiAocngtXHUwMDNlYXhfc2tiKSB7XG4gMTIzOlx0XHRcdC8qIERpc2NhcmQgYW55IGluY29tcGxldGUgRXRoZXJuZXQgZnJhbWUgaW4gdGhlIG5ldGRldiBidWZmZXIgKi9cbiAxMjQ6XHRcdFx0a2ZyZWVfc2tiKHJ4LVx1MDAzZWF4X3NrYik7XG4gMTI1Olx0XHRcdHJ4LVx1MDAzZWF4X3NrYiA9IE5VTEw7XG4gMTI2Olx0XHR9XG4gMTI3Olx0XG4gMTI4Olx0XHQvKiBBc3N1bWUgdGhlIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkIGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudFxuIDEyOTpcdFx0ICogb3IgbmV4dCBVUkIgc29ja2V0IGJ1ZmZlciBzbyByZXNldCBhbGwgdGhlIHN0YXRlIHZhcmlhYmxlcy5cbiAxMzA6XHRcdCAqL1xuIDEzMTpcdFx0cngtXHUwMDNlcmVtYWluaW5nID0gMDtcbiAxMzI6XHRcdHJ4LVx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcbiAxMzM6XHRcdHJ4LVx1MDAzZWhlYWRlciA9IDA7XG4gMTM0Olx0fVxuIDEzNTpcdFxuIDEzNjpcdGludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxMzc6XHRcdFx0XHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcbiAxMzg6XHR7XG4gMTM5Olx0XHRpbnQgb2Zmc2V0ID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczMgoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiA2MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UgZm9yIHRoaXMgcGF0Y2gsIGFuZCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGF0IGNvbmNsdXNpb24uIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzOgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCwgb3IgbW9yZSBwcmVjaXNlbHkgYSBzaG9ydC1wYWNrZXQgb3ZlcnJlYWQsIHdoZW4gaGFuZGxpbmcgbmV0d29yayBkYXRhIGluIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQgcHJldmVudHMgdGhlIGNvZGUgZnJvbSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhIHJlY2VpdmVkIGJ1ZmZlci4gVGhlIGZpeCBpbnZvbHZlcyBhIGJvdW5kcyBjaGVjayAoYGlmIChvZmZzZXQgJiM0Mzsgc2l6ZW9mKHUzMikgJmd0OyBza2ItJmd0O2xlbilgKSBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkIGEgNC1ieXRlIHZhbHVlLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIEtNU0FOIGNyaXRlcmlhLiBNeSBleHBlcnQgZXllcyB0ZWxsIG1lIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBvZiB0aGUgcmlza3MgdGhhdCAqd291bGQqIHdhcnJhbnQgYE5lZWRzS01TQU49dHJ1ZWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGU6CgoqICAgRG9lc24mIzM5O3QgaW52b2x2ZSB0cmFuc2ZlcnJpbmcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSBpbiBhIHdheSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgYSBjb25jZXJuLiBUaGVyZSYjMzk7cyBubyBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgcHV0X3VzZXIgY2FsbHMsIG5ldGxpbmsgdXNhZ2UsIGlvY3Rscywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzIGludm9sdmVkLgoqICAgRG9lc24mIzM5O3QgcmVseSBvbiBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy4gVGhlIGNydWNpYWwgY2hlY2sgcmVsaWVzIG9uIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMgKGBvZmZzZXRgLCBgc2l6ZW9mKHUzMilgLCBhbmQgYHNrYi0mZ3Q7bGVuYCkuCiogICBEb2VzbiYjMzk7dCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGEgc291cmNlIG9mIHByb2JsZW1zIGxhdGVyIG9uIGluIHJlYWNoYWJsZSBjb2RlLgoqICAgQ29ycmVjdGx5IGFkanVzdHMgYm91bmRzIGNoZWNrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuCgpMb29raW5nIGF0IHRoZSBhbHRlcm5hdGl2ZSwgd2hpY2ggaXMgYE5lZWRzS01TQU49ZmFsc2VgLCB0aGUgcmF0aW9uYWxlIGFsaWducyBwZXJmZWN0bHk6CgoqICAgVGhlIGNvZGUgYWRkcmVzc2VzIGEgY2xhc3Mgb2YgYnVncyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MpIGFscmVhZHkgY2F1Z2h0IGJ5IEtBU0FOLgoqICAgVGhlIHN0cnVjdHVyZXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBjb2RlIGFyZSBjb21wbGV0ZWx5IGluaXRpYWxpemVkOiBgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KWAgY2xlYXJzIGFsbCByZWxldmFudCBmaWVsZHMgYW5kIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCByZXR1cm5zIDAuCiogICBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4KClRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgdGhlIHBvdGVudGlhbCBpc3N1ZSwgYW5kIHRoZSBLTVNBTiBjcml0ZXJpYSwgSSYjMzk7bSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIGV4aXN0aW5nIGtlcm5lbCBzYW5pdGl6ZXJzIHNob3VsZCBhZGVxdWF0ZWx5IGhhbmRsZSBhbnkgcmVtYWluaW5nIGJ1ZmZlci1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayAoYG9mZnNldCAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2Ugc2tiLVx1MDAzZWxlbmApIGluIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gcGFyc2luZyB0aGUgMzItYml0IHBhY2tldCBkYXRhIGhlYWRlciBmcm9tIGFuIGluY29taW5nIHNrYi4gXG5cblRoZSBidWcgYmVpbmcgYWRkcmVzc2VkIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIC8gYnVmZmVyIG92ZXJyZWFkLCB3aGljaCBpcyBmdW5kYW1lbnRhbGx5IGluIHRoZSBkb21haW4gb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gQWxsIG1vZGlmaWVkIGNvbnRyb2wgZmxvdyBvcGVyYXRlcyBzdHJpY3RseSBvbiBleGlzdGluZyBpbml0aWFsaXplZCBpbnRlZ2VyIGxlbmd0aHMgYW5kIHJldHVybnMgZWFybHkgb24gaW52YWxpZCBpbnB1dCBhZnRlciByZXNldHRpbmcgc3RhdGUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgb2Zmc2V0ICYjNDM7IHNpemVvZih1MzIpIFx1MDAzZSBza2ItXHUwMDNlbGVuYCkgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIHRoZSAzMi1iaXQgcGFja2V0IGRhdGEgaGVhZGVyIGZyb20gYW4gaW5jb21pbmcgc2tiLiBcblxuVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgLyBidWZmZXIgb3ZlcnJlYWQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsbHkgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgbW9kaWZpZWQgY29udHJvbCBmbG93IG9wZXJhdGVzIHN0cmljdGx5IG9uIGV4aXN0aW5nIGluaXRpYWxpemVkIGludGVnZXIgbGVuZ3RocyBhbmQgcmV0dXJucyBlYXJseSBvbiBpbnZhbGlkIGlucHV0IGFmdGVyIHJlc2V0dGluZyBzdGF0ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTc6MTguNDMzNTk1NDk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAxNTAxNTIzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9BWDg4MTdYXCIsXG4gICAgXCJVU0JfVVNCTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayAoYG9mZnNldCArIHNpemVvZih1MzIpIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW5gKSBpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHBhcnNpbmcgdGhlIDMyLWJpdCBwYWNrZXQgZGF0YSBoZWFkZXIgZnJvbSBhbiBpbmNvbWluZyBza2IuIFxcblxcblRoZSBidWcgYmVpbmcgYWRkcmVzc2VkIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIC8gYnVmZmVyIG92ZXJyZWFkLCB3aGljaCBpcyBmdW5kYW1lbnRhbGx5IGluIHRoZSBkb21haW4gb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgYW5kIGRvZXMgbm90IGFsdGVyIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gQWxsIG1vZGlmaWVkIGNvbnRyb2wgZmxvdyBvcGVyYXRlcyBzdHJpY3RseSBvbiBleGlzdGluZyBpbml0aWFsaXplZCBpbnRlZ2VyIGxlbmd0aHMgYW5kIHJldHVybnMgZWFybHkgb24gaW52YWxpZCBpbnB1dCBhZnRlciByZXNldHRpbmcgc3RhdGUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBpbiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcHJvY2Vzc2luZyBzaG9ydCBSWCBkYXRhIGhlYWRlcnMuIFRoZSBBU0lYIFVTQiBFdGhlcm5ldCBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoc3VjaCBhcyBkdW1teV9oY2QvcmF3LWdhZGdldCksIG1ha2luZyB0aGlzIFJYIHBhdGggYWNjZXNzaWJsZSB0byBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxNzoxOC40MzM2MDA1OThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTEwNjQ3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYzUzMWVlNDNkZDhjYmQ5NWVhOWQ0ZjQ4YWQ4OGEwNzAyOWJiODBlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDIzOjE3OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcXG5pbmRleCA0ZjAzZjRlNTc2NTVkLi44YzVmODYzZWZlN2Q2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcXG5AQCAtMTc5LDYgKzE3OSwxMyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VzcGxpdF9oZWFkID0gZmFsc2U7XFxuIFxcdFxcdFxcdFxcdG9mZnNldCArPSBzaXplb2YodTE2KTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0aWYgKG9mZnNldCArIHNpemVvZih1MzIpIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pIHtcXG4rXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBTaG9ydCBEYXRhIGhlYWRlciwgb2Zmc2V0ICVkLCBsZW4gJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXG4gXFx0XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXFx1MDAzZWRhdGEgK1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvZmZzZXQpO1xcbiBcXHRcXHRcXHRcXHRvZmZzZXQgKz0gc2l6ZW9mKHUzMik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjE5LjkyNTMwOTUxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTY5MDk5MjU3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9BWDg4MTdYXCIsXG4gICAgXCJVU0JfVVNCTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHByb2Nlc3Npbmcgc2hvcnQgUlggZGF0YSBoZWFkZXJzLiBUaGUgQVNJWCBVU0IgRXRoZXJuZXQgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKHN1Y2ggYXMgZHVtbXlfaGNkL3Jhdy1nYWRnZXQpLCBtYWtpbmcgdGhpcyBSWCBwYXRoIGFjY2Vzc2libGUgdG8gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYzUzMWVlNDNkZDhjYmQ5NWVhOWQ0ZjQ4YWQ4OGEwNzAyOWJiODBlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6MTc6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5pbmRleCA0ZjAzZjRlNTc2NTVkLi44YzVmODYzZWZlN2Q2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5AQCAtMTc5LDYgKzE3OSwxMyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRyeC1cdTAwM2VzcGxpdF9oZWFkID0gZmFsc2U7XG4gXHRcdFx0XHRvZmZzZXQgKz0gc2l6ZW9mKHUxNik7XG4gXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGlmIChvZmZzZXQgKyBzaXplb2YodTMyKSBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuK1x0XHRcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwiYXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxcblwiLFxuK1x0XHRcdFx0XHRcdCAgIG9mZnNldCwgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4rXHRcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdFx0fVxuK1xuIFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICtcbiBcdFx0XHRcdFx0XHRcdFx0b2Zmc2V0KTtcbiBcdFx0XHRcdG9mZnNldCArPSBzaXplb2YodTMyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjE5LjkyNTMxMTA5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNTcwMTU0MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBBU0lYIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBzbyBJJ2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgYW5hbHlzaXMgb2YgdGhlIGNvZGUuIEl0IGFwcGVhcnMgd2UncmUgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AsIHNwZWNpZmljYWxseSB0aGUgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIGZ1bmN0aW9uLiBUaGUgZGlmZiBoaWdobGlnaHRzIGEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrIHJlbGF0ZWQgdG8gaGFuZGxpbmcgcmVjZWl2ZWQgZGF0YSBpbiB0aGUgUlggcGF0aC5cblxuSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgd2UgaGF2ZSBhIGZ1bGwgYHUzMmAgaGVhZGVyIGJlZm9yZSBhY2Nlc3NpbmcgaXQgYXQgYSBzcGVjaWZpYyBvZmZzZXQuIFNwZWNpZmljYWxseSwgaXQgZ3VhcmRzIGFnYWluc3QgdGhlIHNjZW5hcmlvIHdoZXJlIGBvZmZzZXQgKyBzaXplb2YodTMyKWAgZXhjZWVkcyB0aGUgcGFja2V0IGxlbmd0aCBgc2tiLVx1MDAzZWxlbmAuIElmIHRoaXMgY29uZGl0aW9uIGhvbGRzLCB3ZSBsb2cgYW4gZXJyb3Igd2l0aCBgbmV0ZGV2X2VycmAsIHJlc2V0IFJYIGZpeHVwIGluZm9ybWF0aW9uIHVzaW5nIGByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm9gLCBhbmQgcmV0dXJuLCBlc3NlbnRpYWxseSBkcm9wcGluZyB0aGUgcGFja2V0LiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGlzc3VlIHdpdGggZnJhZ21lbnRlZCBvciB0cnVuY2F0ZWQgcGFja2V0cyBpbiB0aGUgUlggcGF0aC4gVGhlIGNvbW1lbnQgaW5kaWNhdGVzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIFwiU2hvcnQgRGF0YSBIZWFkZXJcIiB3aGljaCBpbmRpY2F0ZXMgdGhlIGlzc3VlLlxuXG5Ob3csIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgc2l0dWF0aW9uLCBJJ2xsIG5lZWQgYSBiaXQgbW9yZSBjb250ZXh0LiBJJ2xsIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGFzaXhfY29tbW9uLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIHBvdGVudGlhbGx5IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZSB1c2luZyBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY29uZmlybSB0aGF0IHRoZSBVU0IgQVNJWCBkcml2ZXIgaXMgZW5hYmxlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGRyaXZlciBmb3IgdGhlIFVTQiBBU0lYIGNoaXAsIHRoYXQgc3VwcG9ydHMgbmV0d29yayBjb25uZWN0aXZpdHkgdXNpbmcgdGhlIFVTQiBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTgsIk91dHB1dFRva2VucyI6NzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxNzozMC40OTU0NjcyNDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0ICovXFxuIDE1MTpcXHRcXHRpZiAocngtXFx1MDAzZXJlbWFpbmluZyBcXHUwMDI2XFx1MDAyNiAocngtXFx1MDAzZXJlbWFpbmluZyArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSkge1xcbiAxNTI6XFx0XFx0XFx0b2Zmc2V0ID0gKChyeC1cXHUwMDNlcmVtYWluaW5nICsgMSkgXFx1MDAyNiAweGZmZmUpO1xcbiAxNTM6XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQpO1xcbiAxNTQ6XFx0XFx0XFx0b2Zmc2V0ID0gMDtcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0XFx0c2l6ZSA9ICh1MTYpKHJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAyNiAweDdmZik7XFxuIDE1NzpcXHRcXHRcXHRpZiAoc2l6ZSAhPSAoKH5yeC1cXHUwMDNlaGVhZGVyIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4N2ZmKSkge1xcbiAxNTg6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBEYXRhIEhlYWRlciBzeW5jaHJvbmlzYXRpb24gd2FzIGxvc3QsIHJlbWFpbmluZyAlZFxcXFxuXFxcIixcXG4gMTU5OlxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VyZW1haW5pbmcpO1xcbiAxNjA6XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMTYxOlxcdFxcdFxcdH1cXG4gMTYyOlxcdFxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0d2hpbGUgKG9mZnNldCArIHNpemVvZih1MTYpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDE2NTpcXHRcXHRcXHR1MTYgY29weV9sZW5ndGg7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdFxcdGlmICghcngtXFx1MDAzZXJlbWFpbmluZykge1xcbiAxNjg6XFx0XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0ID09IHNpemVvZih1MTYpKSB7XFxuIDE2OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4gMTcxOlxcdFxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VzcGxpdF9oZWFkID0gdHJ1ZTtcXG4gMTcyOlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSBzaXplb2YodTE2KTtcXG4gMTczOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNzQ6XFx0XFx0XFx0XFx0fVxcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRcXHRcXHRpZiAocngtXFx1MDAzZXNwbGl0X2hlYWQgPT0gdHJ1ZSkge1xcbiAxNzc6XFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciB8PSAoZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KSBcXHUwMDNjXFx1MDAzYyAxNik7XFxuIDE3OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlc3BsaXRfaGVhZCA9IGZhbHNlO1xcbiAxODA6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZih1MTYpO1xcbiAxODE6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdGlmIChvZmZzZXQgKyBzaXplb2YodTMyKSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKSB7XFxuIDE4MzpcXHRcXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxcXFxuXFxcIixcXG4gMTg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCwgc2tiLVxcdTAwM2VsZW4pO1xcbiAxODU6XFx0XFx0XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMTg2OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAxODc6XFx0XFx0XFx0XFx0XFx0fVxcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cXHUwMDNlZGF0YSArXFxuIDE5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvZmZzZXQpO1xcbiAxOTE6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZih1MzIpO1xcbiAxOTI6XFx0XFx0XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRcXHRcXHQvKiB0YWtlIGZyYW1lIGxlbmd0aCBmcm9tIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkICovXFxuIDE5NTpcXHRcXHRcXHRcXHRzaXplID0gKHUxNikocngtXFx1MDAzZWhlYWRlciBcXHUwMDI2IDB4N2ZmKTtcXG4gMTk2OlxcdFxcdFxcdFxcdGlmIChzaXplICE9ICgofnJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHg3ZmYpKSB7XFxuIDE5NzpcXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcXFxuXFxcIixcXG4gMTk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VoZWFkZXIsIG9mZnNldCk7XFxuIDE5OTpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAyMDA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwMTpcXHRcXHRcXHRcXHR9XFxuIDIwMjpcXHRcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTikge1xcbiAyMDM6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxcXG5cXFwiLFxcbiAyMDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZSk7XFxuIDIwNTpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAyMDY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwNzpcXHRcXHRcXHRcXHR9XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdFxcdFxcdC8qIFNvbWV0aW1lcyBtYXkgZmFpbCB0byBnZXQgYSBuZXRkZXYgc29ja2V0IGJ1ZmZlciBidXRcXG4gMjEwOlxcdFxcdFxcdFxcdCAqIGNvbnRpbnVlIHRvIHByb2Nlc3MgdGhlIFVSQiBzb2NrZXQgYnVmZmVyIHNvIHRoYXRcXG4gMjExOlxcdFxcdFxcdFxcdCAqIHN5bmNocm9uaXNhdGlvbiBvZiB0aGUgRXRoZXJuZXQgZnJhbWUgRGF0YSBoZWFkZXJcXG4gMjEyOlxcdFxcdFxcdFxcdCAqIHdvcmQgaXMgbWFpbnRhaW5lZC5cXG4gMjEzOlxcdFxcdFxcdFxcdCAqL1xcbiAyMTQ6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVxcdTAwM2VuZXQsIHNpemUpO1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRcXHRcXHRyeC1cXHUwMDNlcmVtYWluaW5nID0gc2l6ZTtcXG4gMjE3OlxcdFxcdFxcdH1cXG4gMjE4OlxcdFxcbiAyMTk6XFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAzZSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxNzozMC40OTU1NDkwOTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1NTYyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXNpeF9jb21tb24ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXFx0Kz0gYXNpeC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjE0OmFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3OV8xNzhBKSAgICAgICs9IGF4ODgxNzlfMTc4YS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjMwLjU0OTEzMDYwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzNDQ4ODUzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipLY29uZmlnIERpdmUgVGltZSEqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGZvciB0aGUgQVg4ODE3WCBVU0IgbmV0d29yayBhZGFwdGVyLCBzbyBteSBmaXJzdCBzdGVwIGlzIGNsZWFyOiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGBVU0JfTkVUX0FYODgxN1hgLiBUaGF0IHNob3VsZCBiZSB0aGUga2V5IGVudHJ5IHBvaW50LiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hhdCBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSB0aWVkIHRvIGl0LiBJJ20gdGhpbmtpbmcgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgZHJpdmVycyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gd29yaz8gQXJlIHRoZXJlIHNwZWNpZmljIFVTQiBzdGFjayByZXF1aXJlbWVudHM/XG4qICAgKipEZWZhdWx0IFZhbHVlczoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdHMgZm9yIHJlbGF0ZWQgcGFyYW1ldGVycyBhbmQgYXJlIHRoZXJlIGFueSByZWFzb25hYmxlIGRlZmF1bHRzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aG91dCBjaGFuZ2VzP1xuKiAgICoqTWVudSBTdHJ1Y3R1cmU6KiogSG93IGlzIGl0IHByZXNlbnRlZCB0byB0aGUgdXNlciBkdXJpbmcgY29uZmlndXJhdGlvbj8gSXMgaXQgbmVzdGVkLCBoaWRkZW4gYmVoaW5kIG90aGVyIG9wdGlvbnMsIG9yIHN0cmFpZ2h0Zm9yd2FyZD9cbiogICAqKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uOioqIFVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpcyB0aGlzIGRyaXZlciBldmVuICphdmFpbGFibGUqPyBBcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgb3Iga2VybmVsIHZlcnNpb24gcmVxdWlyZW1lbnRzP1xuXG5UaGlzIEtjb25maWcgYW5hbHlzaXMgaXMgZ29pbmcgdG8gc2V0IHRoZSBzdGFnZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBVU0IgbmV0d29yayBkcml2ZXIgZWNvc3lzdGVtIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyBmb3IgY3VzdG9taXphdGlvbiByZWxhdGVkIHRvIHRoZSBBWDg4MTdYIGNoaXAuIExldCdzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjMzLjg5NDAxNzY0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA2MDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVU0JfTkVUX0FYODgxN1hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTEzMj1jb25maWcgVVNCX1VTQk5FVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY1LVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE2Njpjb25maWcgVVNCX05FVF9BWDg4MTdYXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY3LVxcdHRyaXN0YXRlIFxcXCJBU0lYIEFYODh4eHggQmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBBZGFwdGVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfVVNCX0xBTjc4WFgpXFx0Kz0gbGFuNzh4eC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXFx0Kz0gYXNpeC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE0LWFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTc6MzMuOTU3MDgzMTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTUzMjI5NjExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgVVNCIE5ldHdvcmtpbmcgRHJpdmVyIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UgVVNCIG5ldHdvcmtpbmcgZHJpdmVycy4gTGV0J3MgZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZS4gSSdsbCB6ZXJvIGluIGFyb3VuZCBsaW5lIDE2Ni4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoZXRoZXIgb3Igbm90IHNwZWNpZmljIFVTQiBuZXR3b3JrIGRyaXZlciBmZWF0dXJlcyBhcmUgZXZlbiAqYXZhaWxhYmxlKiB0byBiZSBjb25maWd1cmVkIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIHRoZSBjcnV4IG9mIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgd2hvbGUgc3lzdGVtIHdvcmtzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTc6NDUuNDg5MzgxMDQ1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcbiAxNjE6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgXFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXFx1MDAzZS5cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gMTY0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cXG4gMTY1OlxcdFxcbiAxNjY6XFx0Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxcbiAxNjc6XFx0XFx0dHJpc3RhdGUgXFxcIkFTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IEFkYXB0ZXJzXFxcIlxcbiAxNjg6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuIDE2OTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTcwOlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuIDE3MTpcXHRcXHRzZWxlY3QgQVg4ODc5NkJfUEhZXFxuIDE3MjpcXHRcXHRpbXBseSBORVRfU0VMRlRFU1RTXFxuIDE3MzpcXHRcXHRkZWZhdWx0IHlcXG4gMTc0OlxcdFxcdGhlbHBcXG4gMTc1OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBBU0lYIEFYODh4eHggYmFzZWQgVVNCIDIuMFxcbiAxNzY6XFx0XFx0ICAxMC8xMDAgRXRoZXJuZXQgYWRhcHRlcnMuXFxuIDE3NzpcXHRcXG4gMTc4OlxcdFxcdCAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6XFxuIDE3OTpcXHRcXHQgICAgKiBBdGVuIFVDMjEwVFxcbiAxODA6XFx0XFx0ICAgICogQVNJWCBBWDg4MTcyXFxuIDE4MTpcXHRcXHQgICAgKiBCaWxsaW9udG9uIFN5c3RlbXMsIFVTQjJBUlxcbiAxODI6XFx0XFx0ICAgICogQmlsbGlvbnRvbiBTeXN0ZW1zLCBHVVNCMkFNLTFHLUJcXG4gMTgzOlxcdFxcdCAgICAqIEJ1ZmZhbG8gTFVBLVUyLUtUWFxcbiAxODQ6XFx0XFx0ICAgICogQ29yZWdhIEZFdGhlciBVU0IyLVRYXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjQ1LjQ4OTQ2MTE5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjgwODc3OTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVU0IgTmV0d29yayBEZXZpY2UgUmVhY2hhYmlsaXR5IGFuZCBTeXprYWxsZXIgRW11bGF0aW9uKipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBhY3R1YWxseSByZWFjaCB0aGlzIFVTQiBuZXR3b3JrIGRldmljZSB0aHJvdWdoIHN5emthbGxlcidzIGVtdWxhdGlvbj8gR29vZCBuZXdzISBJdCdzIGRlZmluaXRlbHkgcG9zc2libGUuIEluIGZhY3QsIFVTQiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgdGhhdCB1c2UgbmV0d29yayBkcml2ZXJzIGxpa2UgQVNJWCBvciBDREMtRXRoZXIsIGFyZSBmcmVxdWVudGx5IGZ1enplZCBieSBzeXprYWxsZXIgdXNpbmcgdGhlIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QgZW11bGF0aW9uLCB3aGljaCB3b3JrcyB2aWEgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIHN5c3RlbSBjYWxsLlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnkgKmhvdyogc3l6a2FsbGVyIGlzIGhhbmRsaW5nIHRoaXMsIGFuZCB3aGV0aGVyIGl0IGhhcyBzcGVjaWZpYyBVU0IgZGVzY3JpcHRpb25zIGZvciBBU0lYIG9yIHNpbXBseSB1c2VzIHJhdyBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhlIFVTQiBmdXp6aW5nIGluIHN5emthbGxlciBoaW5nZXMgb24gdGhlIGAvZGV2L3Jhdy1nYWRnZXRgIGRldmljZSBhbmQgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIGNhbGwuIEJhc2ljYWxseSwgYW55IFVTQiBkcml2ZXIgc2hvdWxkIGJlIGFibGUgdG8gYmluZCB0byBhbiBlbXVsYXRlZCBVU0IgZGV2aWNlIGFzIGxvbmcgYXMgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMgbWF0Y2guIE9uY2UgYm91bmQsIHN5emthbGxlciBjYW4gaW5qZWN0IFVTQiBwYWNrZXRzLCBvciBVUkJzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gc3BlY2lmaWNhbGx5IGludmVzdGlnYXRlIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE3OjU4LjI5ODI0Mjk2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTA0NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2FzaXguaD0yMDY9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMDgtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDk6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjEwLVxcdFxcdFxcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTExNT1zdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTctXFx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTE4OlxcdCAqIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSBzbyB0aGF0IGZ1dHVyZSBwcm9jZXNzaW5nIHN0YXJ0cyBmcm9tIGFcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTktXFx0ICoga25vd24gc2V0IG9mIGluaXRpYWwgY29uZGl0aW9ucy5cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMzY6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNy1cXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTI0OT1pbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjUzLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1NDpcXHRyZXR1cm4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbChkZXYsIHNrYiwgcngpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI1NS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0zMzk9c3RhdGljIGludCBheDg4MTcyYV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDMtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzQ0OlxcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzQ1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTc6NTguMzQ1NzU5OTk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyMTYxMzQyMzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBBU0lYIFVTQiBOZXR3b3JrIERyaXZlciBSWCBGaXh1cCBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBBU0lYIFVTQiBuZXR3b3JrIGRyaXZlciBpc3N1ZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXggZm9yIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gdGhlIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCBmdW5jdGlvbi4gIEl0J3MgcHJldHR5IGNsZWFyIHdoYXQgdGhlIHByb2JsZW0gd2FzOiAgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIHdpdGhpbiB0aGUgYHdoaWxlYCBsb29wLCB0aGVyZSB3YXMgYSBzY2VuYXJpbyB3aGVyZSB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB3YXMgb25seSB0aHJlZSBieXRlcywgYnV0IHRoZSBjb2RlIHdhcyBhdHRlbXB0aW5nIHRvIHJlYWQgZm91ciBieXRlcyB1c2luZyBgZ2V0X3VuYWxpZ25lZF9sZTMyYC4gIFRoaXMgcGF0Y2ggYWRkcyBhIGNydWNpYWwgYm91bmRzIGNoZWNrIHRvIHByZXZlbnQgdGhhdC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBmdXp6YWJsZS4gIEJhc2VkIG9uIG15IGtub3dsZWRnZSwgYW5kIGNvbnNpZGVyaW5nIHRoZSBjcml0ZXJpYSwgaXQgZGVmaW5pdGVseSBpcy4gIFRoZSBmaXggb2NjdXJzIHdpdGhpbiBhIGBkcml2ZXJfaW5mb2AncyBgLnJ4X2ZpeHVwYCBjYWxsYmFjayBpbiBVU0JuZXQuIFNwZWNpZmljYWxseSwgYW4gZW11bGF0ZWQgVVNCIGRldmljZSB3aXRoIGEgc3VwcG9ydGVkIFZJRC9QSUQgKGxpa2UgdGhlIGBheDg4MTcyYCBmYW1pbHkpIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiAgV2hlbiBzeXprYWxsZXIgc2VuZHMgZGF0YSB0byB0aGUgZGV2aWNlJ3MgZW5kcG9pbnQsIGB1c2JuZXRfYmhgIGlzIHNjaGVkdWxlZCwgd2hpY2ggaW4gdHVybiBpbnZva2VzIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYC4gIFRoaXMgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIHRocm91Z2ggZnV6emluZyB3aXRoIFVTQiByYXctZ2FkZ2V0IC8gZHVtbXlfaGNkLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC5cblxuUmVnYXJkaW5nIHRoZSBgRm9jdXNTeW1ib2xzYCwgdGhlIGV4YWN0IGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYC4gSXQncyBub3QgaW5saW5lZCBhbmQgaXMgZXhwb3J0ZWQgaW4gYGFzaXguaGAuICBgYXNpeF9yeF9maXh1cF9jb21tb25gIGNhbGxzIGl0LCBhcyBkb2VzIGBheDg4MTcyYV9yeF9maXh1cGAuIFNvIHRoZSBtb3N0IHNwZWNpZmljIHdvdWxkIGJlIGBbXCJhc2l4X3J4X2ZpeHVwX2ludGVybmFsXCJdYCwgYnV0IGl0IGNvdWxkIGFsc28gaW5jbHVkZSBgYXNpeF9yeF9maXh1cF9jb21tb25gLiBUaGUgZnVuY3Rpb24gaXMgbm9uLXN0YXRpYywgc28gaXQncyBhIGRpc3RpbmN0IHN5bWJvbC5cblxuRmluYWxseSwgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zPyBDaGVja2luZyBgZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlYCwgdGhlIGBhc2l4Lm9gIG1vZHVsZSBpcyBidWlsdCBpZiBgQ09ORklHX1VTQl9ORVRfQVg4ODE3WGAgaXMgZW5hYmxlZC4gIExvb2tpbmcgaW50byBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLCBgVVNCX05FVF9BWDg4MTdYYCBkZXBlbmRzIG9uIGBVU0JfVVNCTkVUYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBORVRERVZJQ0VTYCBhbmQgYFVTQl9ORVRfRFJJVkVSU2AuIFRoZXJlZm9yZSwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBDT05GSUdfVVNCX05FVF9BWDg4MTdYPXlgIChvciBgbWApIGFuZCBpdHMgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjQwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxODoxMC41MDcxMDUyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxcbiAgMjg6XFx0XFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXFxuICAyOTpcXHRcXHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDMyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBVU0JfS0FXRVRIXFxuICAzNTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEtMU0kgS0w1VVNCMTAxLWJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seVxcbiAgMzg6XFx0XFx0ICBVU0IgRXRoZXJuZXQgYWRhcHRlcnMgYmFzZWQgb24gdGhlIEtMU0kgS0w1S1VTQjEwMUIgY2hpcHNldDpcXG4gIDM5OlxcdFxcdCAgM0NvbSAzQzE5MjUwXFxuICA0MDpcXHRcXHQgIEFEUyBVU0ItMTBCVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxODoxMC41MDcyMTkyMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MjQ4NTg4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFTSVggQVg4OHh4eCBFdGhlcm5ldCBBZGFwdGVyIERyaXZlciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0IG1lIGxheSB0aGlzIG91dCBjbGVhcmx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGZvciB0aGUgQVNJWCBBWDg4eHh4IEV0aGVybmV0IGFkYXB0ZXIgZHJpdmVyLiBJIHNlZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlIGFyZSBgVVNCX05FVF9BWDg4MTdYYCwgYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGFuZCBgTkVUYC4gSSdsbCBrZWVwIHRob3NlIGluIG1pbmQuXG5cbkknbSBjaGVja2luZyB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSd2ZSBtaXNzZWQuIGBVU0JfTkVUX0FYODgxN1hgIGxvb2tzIGxpa2UgdGhlIGRpcmVjdCBjb25maWd1cmF0aW9uIGZsYWcgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyIGFuZCBgVVNCX1VTQk5FVGAgaXMgdGhlIGJyb2FkZXIgZnJhbWV3b3JrIGl0IGJlbG9uZ3MgdG8uXG5cbk5vdywgbGV0J3MgY29uZmlybSBldmVyeXRoaW5nIGVsc2U6IGl0J3MgbWFya2VkIGFzIGBXb3J0aEZ1enppbmdgLCB3aGljaCBtZWFucyBpdCdzIGEgZ29vZCB0YXJnZXQuIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgb24gcG9pbnQ6IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBib3VuZHMgY2hlY2sgdnVsbmVyYWJpbGl0eSBpbiBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpYC4gVGhpcyBpcyBoYXBwZW5pbmcgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mIGluY29taW5nIG5ldHdvcmsgcGFja2V0cyBhbmQgdGhlIGRyaXZlciBpdHNlbGYgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBhcyBpdCBzaW1wbGlmaWVzIHRlc3RpbmcuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29ycmVjdCAtIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsYCBpcyB0aGUgY3JpdGljYWwgZnVuY3Rpb24uIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGFzIGV4cGVjdGVkOiBgVVNCX05FVF9BWDg4MTdYYCBhbmQgYFVTQl9VU0JORVRgLlxuXG5ZZXMsIGl0J3MgYWxsIGNsZWFyLiBJIGNhbiB2ZXJpZnkgYWxsIG9mIHRoaXMuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5ODgsIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTg6MTYuNzU1ODExMjI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0MjA5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQVg4ODE3WFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFzaXhfcnhfZml4dXBfaW50ZXJuYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIGluIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwcm9jZXNzaW5nIHNob3J0IFJYIGRhdGEgaGVhZGVycy4gVGhlIEFTSVggVVNCIEV0aGVybmV0IGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChzdWNoIGFzIGR1bW15X2hjZC9yYXctZ2FkZ2V0KSwgbWFraW5nIHRoaXMgUlggcGF0aCBhY2Nlc3NpYmxlIHRvIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9BWDg4MTdYXCIsXG4gICAgXCJVU0JfVVNCTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXNpeF9yeF9maXh1cF9pbnRlcm5hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgaW4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHByb2Nlc3Npbmcgc2hvcnQgUlggZGF0YSBoZWFkZXJzLiBUaGUgQVNJWCBVU0IgRXRoZXJuZXQgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKHN1Y2ggYXMgZHVtbXlfaGNkL3Jhdy1nYWRnZXQpLCBtYWtpbmcgdGhpcyBSWCBwYXRoIGFjY2Vzc2libGUgdG8gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTg6MTYuODM1MjM5NDcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc0ODQ5OTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE4OjE2LjgzNTY4OTU1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxNzQ4MDQ1MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIChgb2Zmc2V0ICsgc2l6ZW9mKHUzMikgXFx1MDAzZSBza2ItXFx1MDAzZWxlbmApIGluIGBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gcGFyc2luZyB0aGUgMzItYml0IHBhY2tldCBkYXRhIGhlYWRlciBmcm9tIGFuIGluY29taW5nIHNrYi4gXFxuXFxuVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgLyBidWZmZXIgb3ZlcnJlYWQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsbHkgaW4gdGhlIGRvbWFpbiBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgbW9kaWZpZWQgY29udHJvbCBmbG93IG9wZXJhdGVzIHN0cmljdGx5IG9uIGV4aXN0aW5nIGluaXRpYWxpemVkIGludGVnZXIgbGVuZ3RocyBhbmQgcmV0dXJucyBlYXJseSBvbiBpbnZhbGlkIGlucHV0IGFmdGVyIHJlc2V0dGluZyBzdGF0ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYzUzMWVlNDNkZDhjYmQ5NWVhOWQ0ZjQ4YWQ4OGEwNzAyOWJiODBlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6MTc6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5pbmRleCA0ZjAzZjRlNTc2NTVkLi44YzVmODYzZWZlN2Q2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jXG5AQCAtMTc5LDYgKzE3OSwxMyBAQCBpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRyeC1cdTAwM2VzcGxpdF9oZWFkID0gZmFsc2U7XG4gXHRcdFx0XHRvZmZzZXQgKz0gc2l6ZW9mKHUxNik7XG4gXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGlmIChvZmZzZXQgKyBzaXplb2YodTMyKSBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuK1x0XHRcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwiYXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxcblwiLFxuK1x0XHRcdFx0XHRcdCAgIG9mZnNldCwgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0XHRcdHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mbyhyeCk7XG4rXHRcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdFx0fVxuK1xuIFx0XHRcdFx0cngtXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICtcbiBcdFx0XHRcdFx0XHRcdFx0b2Zmc2V0KTtcbiBcdFx0XHRcdG9mZnNldCArPSBzaXplb2YodTMyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE4OjE2LjgzNTY5MDYxMloiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MTUwMzg1MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXNpeF9jb21tb24uYyBQYXRjaCBmb3IgS01TQU4gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AgYW5kIGZpZ3VyZSBvdXQgd2hldGhlciBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiBNeSBhcHByb2FjaCB3aWxsIGJlIG1ldGhvZGljYWwuIEZpcnN0LCBJJ2xsIGV4YW1pbmUgdGhlIGRpZmYgaXRzZWxmLCBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgbGluZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZC4gVGhlbiwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgY2hhbmdlcy4gVGhhdCBtZWFucyByZWFkaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY2AgdG8gZ3Jhc3AgdGhlIGxhcmdlciBwaWN0dXJlLiBJJ2xsIHVzZSB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBsb29rIGF0IHRoZSBjb2RlIGFyb3VuZCBsaW5lIDE3OSB0byBnZXQgYSBmZWVsIGZvciB3aGF0J3MgaGFwcGVuaW5nLiBCYXNlZCBvbiBteSBleHBlcnRpc2UsIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2guIFRoaXMgd2lsbCBoZWxwIG1lIGRldGVybWluZSB3aGV0aGVyIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFueXRoaW5nIG5ldyB0aGF0IG5lY2Vzc2l0YXRlcyBhIGBOZWVkc0tNU0FOPXRydWVgIHNldHRpbmcsIG9yIGlmIGEgc3RhbmRhcmQgdGVzdGluZyByZWdpbWUgaXMgc3VmZmljaWVudCAoaW1wbHlpbmcgYE5lZWRzS01TQU49ZmFsc2VgKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE4OjIyLjk4NjA3ODExMloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHR1MTYgc2l6ZTtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0LyogV2hlbiBhbiBFdGhlcm5ldCBmcmFtZSBzcGFucyBtdWx0aXBsZSBVUkIgc29ja2V0IGJ1ZmZlcnMsXFxuIDE0MzpcXHRcXHQgKiBkbyBhIHNhbml0eSB0ZXN0IGZvciB0aGUgRGF0YSBoZWFkZXIgc3luY2hyb25pc2F0aW9uLlxcbiAxNDQ6XFx0XFx0ICogQXR0ZW1wdCB0byBkZXRlY3QgdGhlIHNpdHVhdGlvbiBvZiB0aGUgcHJldmlvdXMgc29ja2V0IGJ1ZmZlciBoYXZpbmdcXG4gMTQ1OlxcdFxcdCAqIGJlZW4gdHJ1bmNhdGVkIG9yIGEgc29ja2V0IGJ1ZmZlciB3YXMgbWlzc2luZy4gVGhlc2Ugc2l0dWF0aW9uc1xcbiAxNDY6XFx0XFx0ICogY2F1c2UgYSBkaXNjb250aW51aXR5IGluIHRoZSBkYXRhIHN0cmVhbSBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gYXZvaWRcXG4gMTQ3OlxcdFxcdCAqIGFwcGVuZGluZyBiYWQgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG5ldGRldiBzb2NrZXQgYnVmZmVyLlxcbiAxNDg6XFx0XFx0ICogQWxzbyBhdm9pZCB1bm5lY2Vzc2FyaWx5IGRpc2NhcmRpbmcgYSBnb29kIGN1cnJlbnQgbmV0ZGV2IHNvY2tldFxcbiAxNDk6XFx0XFx0ICogYnVmZmVyLlxcbiAxNTA6XFx0XFx0ICovXFxuIDE1MTpcXHRcXHRpZiAocngtXFx1MDAzZXJlbWFpbmluZyBcXHUwMDI2XFx1MDAyNiAocngtXFx1MDAzZXJlbWFpbmluZyArIHNpemVvZih1MzIpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSkge1xcbiAxNTI6XFx0XFx0XFx0b2Zmc2V0ID0gKChyeC1cXHUwMDNlcmVtYWluaW5nICsgMSkgXFx1MDAyNiAweGZmZmUpO1xcbiAxNTM6XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUzMihza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQpO1xcbiAxNTQ6XFx0XFx0XFx0b2Zmc2V0ID0gMDtcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0XFx0c2l6ZSA9ICh1MTYpKHJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAyNiAweDdmZik7XFxuIDE1NzpcXHRcXHRcXHRpZiAoc2l6ZSAhPSAoKH5yeC1cXHUwMDNlaGVhZGVyIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4N2ZmKSkge1xcbiAxNTg6XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBEYXRhIEhlYWRlciBzeW5jaHJvbmlzYXRpb24gd2FzIGxvc3QsIHJlbWFpbmluZyAlZFxcXFxuXFxcIixcXG4gMTU5OlxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VyZW1haW5pbmcpO1xcbiAxNjA6XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMTYxOlxcdFxcdFxcdH1cXG4gMTYyOlxcdFxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0d2hpbGUgKG9mZnNldCArIHNpemVvZih1MTYpIFxcdTAwM2M9IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDE2NTpcXHRcXHRcXHR1MTYgY29weV9sZW5ndGg7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdFxcdGlmICghcngtXFx1MDAzZXJlbWFpbmluZykge1xcbiAxNjg6XFx0XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0ID09IHNpemVvZih1MTYpKSB7XFxuIDE2OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4gMTcxOlxcdFxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VzcGxpdF9oZWFkID0gdHJ1ZTtcXG4gMTcyOlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSBzaXplb2YodTE2KTtcXG4gMTczOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNzQ6XFx0XFx0XFx0XFx0fVxcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRcXHRcXHRpZiAocngtXFx1MDAzZXNwbGl0X2hlYWQgPT0gdHJ1ZSkge1xcbiAxNzc6XFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZWhlYWRlciB8PSAoZ2V0X3VuYWxpZ25lZF9sZTE2KFxcbiAxNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KSBcXHUwMDNjXFx1MDAzYyAxNik7XFxuIDE3OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlc3BsaXRfaGVhZCA9IGZhbHNlO1xcbiAxODA6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZih1MTYpO1xcbiAxODE6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdGlmIChvZmZzZXQgKyBzaXplb2YodTMyKSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKSB7XFxuIDE4MzpcXHRcXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIFNob3J0IERhdGEgaGVhZGVyLCBvZmZzZXQgJWQsIGxlbiAlZFxcXFxuXFxcIixcXG4gMTg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCwgc2tiLVxcdTAwM2VsZW4pO1xcbiAxODU6XFx0XFx0XFx0XFx0XFx0XFx0cmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHJ4KTtcXG4gMTg2OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAxODc6XFx0XFx0XFx0XFx0XFx0fVxcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlaGVhZGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cXHUwMDNlZGF0YSArXFxuIDE5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvZmZzZXQpO1xcbiAxOTE6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHNpemVvZih1MzIpO1xcbiAxOTI6XFx0XFx0XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRcXHRcXHQvKiB0YWtlIGZyYW1lIGxlbmd0aCBmcm9tIERhdGEgaGVhZGVyIDMyLWJpdCB3b3JkICovXFxuIDE5NTpcXHRcXHRcXHRcXHRzaXplID0gKHUxNikocngtXFx1MDAzZWhlYWRlciBcXHUwMDI2IDB4N2ZmKTtcXG4gMTk2OlxcdFxcdFxcdFxcdGlmIChzaXplICE9ICgofnJ4LVxcdTAwM2VoZWFkZXIgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHg3ZmYpKSB7XFxuIDE5NzpcXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIDB4JXgsIG9mZnNldCAlZFxcXFxuXFxcIixcXG4gMTk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHJ4LVxcdTAwM2VoZWFkZXIsIG9mZnNldCk7XFxuIDE5OTpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAyMDA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwMTpcXHRcXHRcXHRcXHR9XFxuIDIwMjpcXHRcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTikge1xcbiAyMDM6XFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkXFxcXG5cXFwiLFxcbiAyMDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZSk7XFxuIDIwNTpcXHRcXHRcXHRcXHRcXHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xcbiAyMDY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIwNzpcXHRcXHRcXHRcXHR9XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdFxcdFxcdC8qIFNvbWV0aW1lcyBtYXkgZmFpbCB0byBnZXQgYSBuZXRkZXYgc29ja2V0IGJ1ZmZlciBidXRcXG4gMjEwOlxcdFxcdFxcdFxcdCAqIGNvbnRpbnVlIHRvIHByb2Nlc3MgdGhlIFVSQiBzb2NrZXQgYnVmZmVyIHNvIHRoYXRcXG4gMjExOlxcdFxcdFxcdFxcdCAqIHN5bmNocm9uaXNhdGlvbiBvZiB0aGUgRXRoZXJuZXQgZnJhbWUgRGF0YSBoZWFkZXJcXG4gMjEyOlxcdFxcdFxcdFxcdCAqIHdvcmQgaXMgbWFpbnRhaW5lZC5cXG4gMjEzOlxcdFxcdFxcdFxcdCAqL1xcbiAyMTQ6XFx0XFx0XFx0XFx0cngtXFx1MDAzZWF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVxcdTAwM2VuZXQsIHNpemUpO1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRcXHRcXHRyeC1cXHUwMDNlcmVtYWluaW5nID0gc2l6ZTtcXG4gMjE3OlxcdFxcdFxcdH1cXG4gMjE4OlxcdFxcbiAyMTk6XFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VyZW1haW5pbmcgXFx1MDAzZSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCkge1xcbiAyMjA6XFx0XFx0XFx0XFx0Y29weV9sZW5ndGggPSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldDtcXG4gMjIxOlxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VyZW1haW5pbmcgLT0gY29weV9sZW5ndGg7XFxuIDIyMjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMjM6XFx0XFx0XFx0XFx0Y29weV9sZW5ndGggPSByeC1cXHUwMDNlcmVtYWluaW5nO1xcbiAyMjQ6XFx0XFx0XFx0XFx0cngtXFx1MDAzZXJlbWFpbmluZyA9IDA7XFxuIDIyNTpcXHRcXHRcXHR9XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdFxcdGlmIChyeC1cXHUwMDNlYXhfc2tiKSB7XFxuIDIyODpcXHRcXHRcXHRcXHRza2JfcHV0X2RhdGEocngtXFx1MDAzZWF4X3NrYiwgc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0LFxcbiAyMjk6XFx0XFx0XFx0XFx0XFx0ICAgICBjb3B5X2xlbmd0aCk7XFxuIDIzMDpcXHRcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VyZW1haW5pbmcpIHtcXG4gMjMxOlxcdFxcdFxcdFxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgcngtXFx1MDAzZWF4X3NrYik7XFxuIDIzMjpcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlYXhfc2tiID0gTlVMTDtcXG4gMjMzOlxcdFxcdFxcdFxcdH1cXG4gMjM0OlxcdFxcdFxcdH1cXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0XFx0b2Zmc2V0ICs9IChjb3B5X2xlbmd0aCArIDEpIFxcdTAwMjYgMHhmZmZlO1xcbiAyMzc6XFx0XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gIT0gb2Zmc2V0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjE4OjIyLjk4NjIwNzk1MloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTMxMjcxNjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZyBGaXggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB3aGF0IHdhcyB0aGUgb3JpZ2luYWwgYnVnIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXM/IEl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgd2l0aGluIHRoZSBgYXNpeF9yeF9maXh1cGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaW5zaWRlIHRoYXQgYHdoaWxlYCBsb29wLCB0aGVyZSdzIGEgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBkZWFscyB3aXRoIGhlYWRlciBoYW5kbGluZy4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBpZiB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBpcyAyIG9yIDMgYnl0ZXMsIHRoZSBleGlzdGluZyBsb2dpYyBtaWdodCBhdHRlbXB0IHRvIHJlYWQgYSA0LWJ5dGUgKGB1MzJgKSBoZWFkZXIsIGxlYWRpbmcgdG8gYW4gb3ZlcnJlYWQgcGFzdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlci5cblxuVGhlIHdoaWxlIGxvb3AgY29uZGl0aW9uIGl0c2VsZjogYG9mZnNldCArIHNpemVvZih1MTYpIFx1MDAzYz0gc2tiLVx1MDAzZWxlbmAgaXMgdHJ1ZSwgZXZlbiB3aGVuIHRoZXJlIGFyZSBvbmx5IDIgb3IgMyBieXRlcyBsZWZ0LiBUaGUgY29uZGl0aW9uYWwgYHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQgPT0gc2l6ZW9mKHUxNilgIHdpbGwgYmUgdHJ1ZSBvbmx5IGlmIHRoZXJlIGFyZSB0d28gYnl0ZXMgcmVtYWluaW5nLiBTbywgaWYgd2UgZW5kIHVwIGluIHRoZSBgZWxzZWAgYnJhbmNoLCBhbmQgdGhlcmUgYXJlIG9ubHkgMyBieXRlcyBsZWZ0LCB0aGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gYXJpc2VzOiBpdCB0cmllcyB0byByZWFkIDQgYnl0ZXMgd2l0aCBgZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi1cdTAwM2VkYXRhICsgb2Zmc2V0KWAuIFRoaXMgaXMgYSBjbGFzc2ljIGJ1ZmZlciBvdmVycmVhZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byByZWFkaW5nIHVuYWxsb2NhdGVkIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgYnVnIHJlcXVpcmUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBvciBpcyBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBzdWZmaWNpZW50PyBLQVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgb3RoZXIgbWVtb3J5IGFjY2VzcyBlcnJvcnMsIGFuZCBpbiB0aGlzIGNhc2UsIHRoZSBvdmVycmVhZCBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiBpcyBtZWFudCB0byBjYXRjaC4gSXQncyBlc3NlbnRpYWxseSBhIHNsYWItb3V0LW9mLWJvdW5kcyByZWFkLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRldGVjdHMgcmVhZHMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgbGlrZSBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucywgYW5kIGNhbiBjYXRjaCBtZW1vcnkgbGVha3MuXG5cbkFjY29yZGluZyB0byB0aGUgcnVsZXMsIHdlIHNob3VsZG4ndCB1c2UgS01TQU4gaWYgS0FTQU4gKG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpIGNhbiBjYXRjaCB0aGUgcHJvYmxlbS4gV2Ugb25seSB1c2UgS01TQU4gaWYgdGhlIHBhdGNoICppbnRyb2R1Y2VzKiBvciAqZXhwb3NlcyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGFwcGx5IHRob3NlIHNwZWNpZmljIHJ1bGVzLCBwb2ludCBieSBwb2ludC5cblxuVGhpcyBwYXRjaCBhZGRzIHRoaXMgY2hlY2s6XG5gYGBjXG4rXHRcdFx0XHRpZiAob2Zmc2V0ICsgc2l6ZW9mKHUzMikgXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbitcdFx0XHRcdFx0bmV0ZGV2X2VycihkZXYtXHUwMDNlbmV0LCBcImFzaXhfcnhfZml4dXAoKSBTaG9ydCBEYXRhIGhlYWRlciwgb2Zmc2V0ICVkLCBsZW4gJWRcXG5cIixcbitcdFx0XHRcdFx0XHQgICBvZmZzZXQsIHNrYi1cdTAwM2VsZW4pO1xuK1x0XHRcdFx0XHRyZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpO1xuK1x0XHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHRcdH1cbmBgYFxuXG5UaGUgcGF0Y2ggZml4ZXMgYSBidWchIEl0IGlzIGEgYm91bmRzIGNoZWNrIHRoYXQgYWRkcyBhIGNoZWNrIGZvciBpZiBgb2Zmc2V0ICsgc2l6ZW9mKHUzMikgXHUwMDNlIHNrYi1cdTAwM2VsZW5gLlxuXG5Eb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLCBxdWl0ZSB0aGUgb3Bwb3NpdGUhIFRoZSBwYXRjaCAqcHJldmVudHMqIG91dC1vZi1ib3VuZHMgcmVhZHMgYnkgYWRkaW5nIGEgYm91bmQgY2hlY2suIEl0ICpyZXN0cmljdHMqIGFjY2VzcywgbWFraW5nIGl0ICptb3JlKiBzYWZlLlxuXG5Eb2VzIGl0IG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8gTm8uIERvZXMgaXQgaW50cm9kdWNlIG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLCBiZWNhdXNlIGl0IHVzZXMgaW50ZWdlciB2YXJpYWJsZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQuIERvZXMgaXQgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm8uIERvZXMgaXQgbW9kaWZ5IHRoZSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCAqYWxsb3dzKiBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzPyBObyEgSXQgcmVzdHJpY3RzIHRoZSBib3VuZHMgdG8gcHJldmVudCBvdmVycmVhZHMuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhpcyBwYXRjaCAqcHJldmVudHMqIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB3ZSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBvcmlnaW5hbCBidWZmZXIgb3ZlcnJlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTg6MzQuMjk4OTI1ODIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1NTM0NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFzaXhfcnhfZml4dXBfaW50ZXJuYWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2FzaXguaD0yMDY9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0yMDgtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXguaDoyMDk6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMjEwLVxcdFxcdFxcdCAgIHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTExNT1zdGF0aWMgdm9pZCByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8oc3RydWN0IGFzaXhfcnhfZml4dXBfaW5mbyAqcngpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTctXFx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MTE4OlxcdCAqIGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKSBzbyB0aGF0IGZ1dHVyZSBwcm9jZXNzaW5nIHN0YXJ0cyBmcm9tIGFcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0xMTktXFx0ICoga25vd24gc2V0IG9mIGluaXRpYWwgY29uZGl0aW9ucy5cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzoxMzY6aW50IGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTEzNy1cXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTI0OT1pbnQgYXNpeF9yeF9maXh1cF9jb21tb24oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjUzLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjI1NDpcXHRyZXR1cm4gYXNpeF9yeF9maXh1cF9pbnRlcm5hbChkZXYsIHNrYiwgcngpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTI1NS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0zMzk9c3RhdGljIGludCBheDg4MTcyYV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zNDMtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzQ0OlxcdHJldHVybiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKGRldiwgc2tiLCByeCk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzQ1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTg6MzUuOTQ0NDY3MDI3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc3NDg1NjAyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm9gKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYHJlc2V0X2FzaXhfcnhfZml4dXBfaW5mb2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgc3BlY2lmaWMgcm91dGluZS4gSSdtIGFzc3VtaW5nIGl0J3MgcmVsYXRlZCB0byBoYW5kbGluZyBwb3RlbnRpYWwgaXNzdWVzIG9yIGVycm9ycyBkdXJpbmcgdGhlIHJlY2VpdmUgcHJvY2VzcyB3aXRoaW4gdGhlIEFTSVggZHJpdmVyLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQncyBjYWxsZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBhbnkgcG90ZW50aWFsIHdlYWtuZXNzZXMgb3IgYXJlYXMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGV2ZW4gY29udHJpYnV0aW5nIHRvIHN0YWJpbGl0eSBwcm9ibGVtcy4gQSBkZWVwIGRpdmUgaXMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgc3RyZWFtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTExLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MTg6NDMuNjkzMDI5NDAxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0c3RhdGljIHZvaWQgcmVzZXRfYXNpeF9yeF9maXh1cF9pbmZvKHN0cnVjdCBhc2l4X3J4X2ZpeHVwX2luZm8gKnJ4KVxcbiAxMTY6XFx0e1xcbiAxMTc6XFx0XFx0LyogUmVzZXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYSBsaWZldGltZSBvdXRzaWRlIG9mXFxuIDExODpcXHRcXHQgKiBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKCkgc28gdGhhdCBmdXR1cmUgcHJvY2Vzc2luZyBzdGFydHMgZnJvbSBhXFxuIDExOTpcXHRcXHQgKiBrbm93biBzZXQgb2YgaW5pdGlhbCBjb25kaXRpb25zLlxcbiAxMjA6XFx0XFx0ICovXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdGlmIChyeC1cXHUwMDNlYXhfc2tiKSB7XFxuIDEyMzpcXHRcXHRcXHQvKiBEaXNjYXJkIGFueSBpbmNvbXBsZXRlIEV0aGVybmV0IGZyYW1lIGluIHRoZSBuZXRkZXYgYnVmZmVyICovXFxuIDEyNDpcXHRcXHRcXHRrZnJlZV9za2IocngtXFx1MDAzZWF4X3NrYik7XFxuIDEyNTpcXHRcXHRcXHRyeC1cXHUwMDNlYXhfc2tiID0gTlVMTDtcXG4gMTI2OlxcdFxcdH1cXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0LyogQXNzdW1lIHRoZSBEYXRhIGhlYWRlciAzMi1iaXQgd29yZCBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnRcXG4gMTI5OlxcdFxcdCAqIG9yIG5leHQgVVJCIHNvY2tldCBidWZmZXIgc28gcmVzZXQgYWxsIHRoZSBzdGF0ZSB2YXJpYWJsZXMuXFxuIDEzMDpcXHRcXHQgKi9cXG4gMTMxOlxcdFxcdHJ4LVxcdTAwM2VyZW1haW5pbmcgPSAwO1xcbiAxMzI6XFx0XFx0cngtXFx1MDAzZXNwbGl0X2hlYWQgPSBmYWxzZTtcXG4gMTMzOlxcdFxcdHJ4LVxcdTAwM2VoZWFkZXIgPSAwO1xcbiAxMzQ6XFx0fVxcbiAxMzU6XFx0XFxuIDEzNjpcXHRpbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDEzNzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXNpeF9yeF9maXh1cF9pbmZvICpyeClcXG4gMTM4OlxcdHtcXG4gMTM5OlxcdFxcdGludCBvZmZzZXQgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxODo0My42OTMxMzkxOTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDg5MDU3MzI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UgZm9yIHRoaXMgcGF0Y2gsIGFuZCBJJ20gY29uZmlkZW50IGluIHRoYXQgY29uY2x1c2lvbi4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzczpcblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCwgb3IgbW9yZSBwcmVjaXNlbHkgYSBzaG9ydC1wYWNrZXQgb3ZlcnJlYWQsIHdoZW4gaGFuZGxpbmcgbmV0d29yayBkYXRhIGluIHRoZSBgYXNpeF9yeF9maXh1cF9pbnRlcm5hbGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQgcHJldmVudHMgdGhlIGNvZGUgZnJvbSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhIHJlY2VpdmVkIGJ1ZmZlci4gVGhlIGZpeCBpbnZvbHZlcyBhIGJvdW5kcyBjaGVjayAoYGlmIChvZmZzZXQgKyBzaXplb2YodTMyKSBcdTAwM2Ugc2tiLVx1MDAzZWxlbilgKSBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkIGEgNC1ieXRlIHZhbHVlLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBLTVNBTiBjcml0ZXJpYS4gTXkgZXhwZXJ0IGV5ZXMgdGVsbCBtZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBvZiB0aGUgcmlza3MgdGhhdCAqd291bGQqIHdhcnJhbnQgYE5lZWRzS01TQU49dHJ1ZWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGU6XG5cbiogICBEb2Vzbid0IGludm9sdmUgdHJhbnNmZXJyaW5nIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UgaW4gYSB3YXkgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGEgY29uY2Vybi4gVGhlcmUncyBubyBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgcHV0X3VzZXIgY2FsbHMsIG5ldGxpbmsgdXNhZ2UsIGlvY3Rscywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzIGludm9sdmVkLlxuKiAgIERvZXNuJ3QgcmVseSBvbiBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy4gVGhlIGNydWNpYWwgY2hlY2sgcmVsaWVzIG9uIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMgKGBvZmZzZXRgLCBgc2l6ZW9mKHUzMilgLCBhbmQgYHNrYi1cdTAwM2VsZW5gKS5cbiogICBEb2Vzbid0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgYSBzb3VyY2Ugb2YgcHJvYmxlbXMgbGF0ZXIgb24gaW4gcmVhY2hhYmxlIGNvZGUuXG4qICAgQ29ycmVjdGx5IGFkanVzdHMgYm91bmRzIGNoZWNrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuXG5cbkxvb2tpbmcgYXQgdGhlIGFsdGVybmF0aXZlLCB3aGljaCBpcyBgTmVlZHNLTVNBTj1mYWxzZWAsIHRoZSByYXRpb25hbGUgYWxpZ25zIHBlcmZlY3RseTpcblxuKiAgIFRoZSBjb2RlIGFkZHJlc3NlcyBhIGNsYXNzIG9mIGJ1Z3MgKG91dC1vZi1ib3VuZHMgYWNjZXNzKSBhbHJlYWR5IGNhdWdodCBieSBLQVNBTi5cbiogICBUaGUgc3RydWN0dXJlcyBoYW5kbGVkIHdpdGhpbiB0aGlzIGNvZGUgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQ6IGByZXNldF9hc2l4X3J4X2ZpeHVwX2luZm8ocngpYCBjbGVhcnMgYWxsIHJlbGV2YW50IGZpZWxkcyBhbmQgYGFzaXhfcnhfZml4dXBfaW50ZXJuYWxgIHJldHVybnMgMC5cbiogICBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIHRoZSBwb3RlbnRpYWwgaXNzdWUsIGFuZCB0aGUgS01TQU4gY3JpdGVyaWEsIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIGV4aXN0aW5nIGtlcm5lbCBzYW5pdGl6ZXJzIHNob3VsZCBhZGVxdWF0ZWx5IGhhbmRsZSBhbnkgcmVtYWluaW5nIGJ1ZmZlci1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczMiwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzoxODo0OC41ODM3MTUyNjRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgKGBvZmZzZXQgKyBzaXplb2YodTMyKSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuYCkgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIHRoZSAzMi1iaXQgcGFja2V0IGRhdGEgaGVhZGVyIGZyb20gYW4gaW5jb21pbmcgc2tiLiBcXG5cXG5UaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAvIGJ1ZmZlciBvdmVycmVhZCwgd2hpY2ggaXMgZnVuZGFtZW50YWxseSBpbiB0aGUgZG9tYWluIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFsbCBtb2RpZmllZCBjb250cm9sIGZsb3cgb3BlcmF0ZXMgc3RyaWN0bHkgb24gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgaW50ZWdlciBsZW5ndGhzIGFuZCByZXR1cm5zIGVhcmx5IG9uIGludmFsaWQgaW5wdXQgYWZ0ZXIgcmVzZXR0aW5nIHN0YXRlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgKGBvZmZzZXQgKyBzaXplb2YodTMyKSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuYCkgaW4gYGFzaXhfcnhfZml4dXBfaW50ZXJuYWwoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBwYXJzaW5nIHRoZSAzMi1iaXQgcGFja2V0IGRhdGEgaGVhZGVyIGZyb20gYW4gaW5jb21pbmcgc2tiLiBcXG5cXG5UaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAvIGJ1ZmZlciBvdmVycmVhZCwgd2hpY2ggaXMgZnVuZGFtZW50YWxseSBpbiB0aGUgZG9tYWluIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFsbCBtb2RpZmllZCBjb250cm9sIGZsb3cgb3BlcmF0ZXMgc3RyaWN0bHkgb24gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgaW50ZWdlciBsZW5ndGhzIGFuZCByZXR1cm5zIGVhcmx5IG9uIGludmFsaWQgaW5wdXQgYWZ0ZXIgcmVzZXR0aW5nIHN0YXRlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowms9kh[1] Phase: Succeeded StartedAt: 2026-09-14 23:18:59 +0000 UTC FinishedAt: 2026-09-14 23:18:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 23:18:59 +0000 UTC FinishedAt: 2026-09-14 23:18:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2] Phase: Succeeded StartedAt: 2026-09-14 23:18:59 +0000 UTC FinishedAt: 2026-09-15 00:53:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:18:59 +0000 UTC FinishedAt: 2026-09-15 00:53:59 +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_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:18:59 +0000 UTC FinishedAt: 2026-09-14 23:19:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:18:59 +0000 UTC FinishedAt: 2026-09-14 23:19:10 +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_NET_AX8817X","USB_USBNET"],"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-workflowms9kh/series-workflowms9kh-convert-artifact-4122206290/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:19:20 +0000 UTC FinishedAt: 2026-09-14 23:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:19:20 +0000 UTC FinishedAt: 2026-09-14 23:35:25 +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:*bf0aa5cd-6441-4e64-9366-908a7fea33c2,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-workflowms9kh/series-workflowms9kh-convert-artifact-4122206290/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": "dc1d8acb-aab0-41fd-aaf7-af0a2b74ad13", "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-workflowms9kh/series-workflowms9kh-build-action-4040381648/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:19:20 +0000 UTC FinishedAt: 2026-09-14 23:35:15 +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:*bf0aa5cd-6441-4e64-9366-908a7fea33c2,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-workflowms9kh/series-workflowms9kh-convert-artifact-4122206290/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": "dc1d8acb-aab0-41fd-aaf7-af0a2b74ad13", "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-workflowms9kh/series-workflowms9kh-build-action-4040381648/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:35:25 +0000 UTC FinishedAt: 2026-09-14 23:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:35:25 +0000 UTC FinishedAt: 2026-09-14 23:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:35:25 +0000 UTC FinishedAt: 2026-09-14 23:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:35:25 +0000 UTC FinishedAt: 2026-09-14 23:35:34 +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_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-workflowms9kh/series-workflowms9kh-convert-artifact-2090362733/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:35:46 +0000 UTC FinishedAt: 2026-09-14 23:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:35:46 +0000 UTC FinishedAt: 2026-09-14 23:37:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc1d8acb-aab0-41fd-aaf7-af0a2b74ad13,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-workflowms9kh/series-workflowms9kh-build-action-4040381648/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-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:37:30 +0000 UTC FinishedAt: 2026-09-14 23:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:37:30 +0000 UTC FinishedAt: 2026-09-14 23:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:37:30 +0000 UTC FinishedAt: 2026-09-14 23:53:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:37:30 +0000 UTC FinishedAt: 2026-09-14 23:53:48 +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:*bf0aa5cd-6441-4e64-9366-908a7fea33c2,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-workflowms9kh/series-workflowms9kh-convert-artifact-2090362733/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": "56d31b17-ea1d-4503-99db-83cc3963f002", "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-workflowms9kh/series-workflowms9kh-build-action-3506378953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:37:30 +0000 UTC FinishedAt: 2026-09-14 23:53:36 +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:*bf0aa5cd-6441-4e64-9366-908a7fea33c2,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-workflowms9kh/series-workflowms9kh-convert-artifact-2090362733/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": "56d31b17-ea1d-4503-99db-83cc3963f002", "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-workflowms9kh/series-workflowms9kh-build-action-3506378953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:53:48 +0000 UTC FinishedAt: 2026-09-14 23:53:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:53:48 +0000 UTC FinishedAt: 2026-09-14 23:53:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:53:48 +0000 UTC FinishedAt: 2026-09-14 23:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:53:48 +0000 UTC FinishedAt: 2026-09-14 23:55:46 +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:*56d31b17-ea1d-4503-99db-83cc3963f002,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-workflowms9kh/series-workflowms9kh-build-action-3506378953/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-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:55:56 +0000 UTC FinishedAt: 2026-09-15 00:53:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:55:56 +0000 UTC FinishedAt: 2026-09-15 00:53:59 +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":["asix_rx_fixup_internal"],"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:*dc1d8acb-aab0-41fd-aaf7-af0a2b74ad13,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*56d31b17-ea1d-4503-99db-83cc3963f002,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-workflowms9kh/series-workflowms9kh-build-action-4040381648/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-workflowms9kh/series-workflowms9kh-build-action-3506378953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:55:56 +0000 UTC FinishedAt: 2026-09-14 23:56:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:55:56 +0000 UTC FinishedAt: 2026-09-14 23:56:01 +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":["asix_rx_fixup_internal"],"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-workflowms9kh/series-workflowms9kh-convert-artifact-235928018/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:55:56 +0000 UTC FinishedAt: 2026-09-14 23:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:55:56 +0000 UTC FinishedAt: 2026-09-14 23:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:55:56 +0000 UTC FinishedAt: 2026-09-14 23:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:56:06 +0000 UTC FinishedAt: 2026-09-15 00:53:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowms9kh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"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":["asix_rx_fixup_internal"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c297ed90fbba72d32b7759aae362b36d15b2db1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX8817X","USB_USBNET"],"series_id":"3ab3aade-eace-4bbc-80ba-90f0694d8855","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-14 23:56:06 +0000 UTC FinishedAt: 2026-09-15 00:53:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc1d8acb-aab0-41fd-aaf7-af0a2b74ad13,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*56d31b17-ea1d-4503-99db-83cc3963f002,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-workflowms9kh/series-workflowms9kh-build-action-4040381648/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-workflowms9kh/series-workflowms9kh-build-action-3506378953/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-workflowms9kh/series-workflowms9kh-convert-artifact-235928018/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,}