Name: series-workflowxcd7x Phase: Succeeded StartedAt: 2026-08-21 03:18:17 +0000 UTC FinishedAt: 2026-08-21 07:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[0] Phase: Succeeded StartedAt: 2026-08-21 03:18:17 +0000 UTC FinishedAt: 2026-08-21 04:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 03:18:17 +0000 UTC FinishedAt: 2026-08-21 04:04:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "689c1f1f669abdff41a91aa13d6cb6e77759f0ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "689c1f1f669abdff41a91aa13d6cb6e77759f0ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG" ], "series_id": "7f6d38bf-8449-4902-a048-1013e149f53e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "start_isolate_page_range", "alloc_contig_range_noprof", "alloc_contig_pages_noprof", "alloc_contig_frozen_range_noprof", "alloc_contig_frozen_pages_noprof", "offline_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2hlcmUgcGFnZSBtZXRhZGF0YSAoc3VjaCBhcyBidWRkeSBvcmRlciBvciBjb21wb3VuZCBoZWFkKSBpcyByZWFkIHdpdGhvdXQgbG9ja3MuIFJhY3kgcmVhZHMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcywgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbmZpbml0ZSBsb29wcywgb3IgaW5jb3JyZWN0IHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYWRkIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBmb3IgdGhlIHJlYWQgdmFsdWVzIChgb3JkZXJgLCBgaGVhZF9wZm5gKSB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy5cblxuVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMpIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChmb3IgY3Jhc2hlcy9oYW5ncykuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgY2F1c2UgYW4gaW5mby1sZWFrLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBieSB2YWxpZGF0aW5nIHRoZSByZXN1bHRzIG9mIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCBgY29tcG91bmRfb3JkZXJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyAocGFnZSBpc29sYXRpb24pLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gKENNQSwgZ2lnYW50aWMgaHVnZXBhZ2VzKSBhbmQgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNDowMjo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuaW5kZXggMzJjZThhN2Q5ZGYzNS4uOWNmN2Y5MjAxMWJkMyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcbkBAIC0zODcsMTMgJiM0MzszODcsMTUgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG4gXHRcdH1cbiBcbiBcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdGludCBvcmRlciA9IGJ1ZGR5X29yZGVyKHBhZ2UpO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4gXG4tXHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuLVx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2UgYm91bmRhcnlfcGZuKTtcbi1cbi1cdFx0XHRwZm4gJiM0Mzs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdC8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovXG4mIzQzO1x0XHRcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgcGZuICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2M9IGJvdW5kYXJ5X3Bmbikge1xuJiM0MztcdFx0XHRcdHBmbiAmIzQzOz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFxuIFx0XHQvKlxuQEAgLTQxMiwxMCAmIzQzOzQxNCwyOCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcbiBcdFx0aWYgKFBhZ2VDb21wb3VuZChwYWdlKSkge1xuIFx0XHRcdHN0cnVjdCBwYWdlICpoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGNvbXBvdW5kX25yKGhlYWQpO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihoZWFkKTtcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIGNvbXBvdW5kX29yZGVyKCkgaXMgcmFjeS4gQ2FwIGl0IGF0IE1BWF9GT0xJT19PUkRFUi4gKi9cbiYjNDM7XHRcdFx0aWYgKG9yZGVyIFx1MDAzZSBNQVhfRk9MSU9fT1JERVIpXG4mIzQzO1x0XHRcdFx0Z290byBmYWlsZWQ7XG4mIzQzO1xuJiM0MztcdFx0XHRucl9wYWdlcyA9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBjb21wb3VuZF9oZWFkKCkgaXMgYWxzbyByYWN5LCBzbyB0aGUgZGVyaXZlZCBoZWFkX3BmblxuJiM0MztcdFx0XHQgKiBuZWVkcyBhZGRpdGlvbmFsIGNoZWNrcyB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuXG4mIzQzO1x0XHRcdCAqIE90aGVyd2lzZSwganVzdCBmYWlsIHRoZSBjaGVjay4gcGZuIGNvbWVzIGZyb21cbiYjNDM7XHRcdFx0ICogX19maXJzdF92YWxpZF9wYWdlKCkgYXMgYSBsZWdpdGltYXRlIFBGTiwgc28gdXNlIGl0IHRvXG4mIzQzO1x0XHRcdCAqIGNoZWNrIGhlYWRfcGZuLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGhlYWRfcGZuIFx1MDAzZSBwZm4gfHwgIUlTX0FMSUdORUQoaGVhZF9wZm4sIG5yX3BhZ2VzKSB8fFxuJiM0MztcdFx0XHQgICAgcGZuIC0gaGVhZF9wZm4gXHUwMDNlPSBucl9wYWdlcylcbiYjNDM7XHRcdFx0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdFx0XHRpZiAoaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXMgXHUwMDNjPSBib3VuZGFyeV9wZm4gfHxcbi1cdFx0XHQgICAgUGFnZUh1Z2UocGFnZSkpIHtcbiYjNDM7XHRcdFx0ICAgIFBhZ2VIdWdlKGhlYWQpKSB7XG4gXHRcdFx0XHRwZm4gPSBoZWFkX3BmbiAmIzQzOyBucl9wYWdlcztcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZiYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBieSB2YWxpZGF0aW5nIHRoZSByZXN1bHRzIG9mIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCBgY29tcG91bmRfb3JkZXJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyAocGFnZSBpc29sYXRpb24pLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gKENNQSwgZ2lnYW50aWMgaHVnZXBhZ2VzKSBhbmQgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwNDowMjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCmluZGV4IDMyY2U4YTdkOWRmMzUuLjljZjdmOTIwMTFiZDMgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pc29sYXRpb24uYwpAQCAtMzg3LDEzICYjNDM7Mzg3LDE1IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLAogCQl9CiAKIAkJaWYgKFBhZ2VCdWRkeShwYWdlKSkgewotCQkJaW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7CiYjNDM7CQkJdW5zaWduZWQgaW50IG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwogCi0JCQkvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovCi0JCQlWTV9XQVJOX09OX09OQ0UocGZuICYjNDM7ICgxICZsdDsmbHQ7IG9yZGVyKSAmZ3Q7IGJvdW5kYXJ5X3Bmbik7Ci0KLQkJCXBmbiAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwotCQkJY29udGludWU7CiYjNDM7CQkJLyogYnVkZHlfb3JkZXJfdW5zYWZlKCkgaXMgcmFjeS4gVmFsaWRhdGUgdGhlIG9yZGVyIGJlZm9yZSBzaGlmdGluZy4gKi8KJiM0MzsJCQlpZiAob3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBwZm4gJiM0MzsgKDFVTCAmbHQ7Jmx0OyBvcmRlcikgJmx0Oz0gYm91bmRhcnlfcGZuKSB7CiYjNDM7CQkJCXBmbiAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAogCQkvKgpAQCAtNDEyLDEwICYjNDM7NDE0LDI4IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLAogCQlpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7CiAJCQl1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7Ci0JCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gY29tcG91bmRfbnIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKJiM0MzsKJiM0MzsJCQkvKiBjb21wb3VuZF9vcmRlcigpIGlzIHJhY3kuIENhcCBpdCBhdCBNQVhfRk9MSU9fT1JERVIuICovCiYjNDM7CQkJaWYgKG9yZGVyICZndDsgTUFYX0ZPTElPX09SREVSKQomIzQzOwkJCQlnb3RvIGZhaWxlZDsKJiM0MzsKJiM0MzsJCQlucl9wYWdlcyA9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGNvbXBvdW5kX2hlYWQoKSBpcyBhbHNvIHJhY3ksIHNvIHRoZSBkZXJpdmVkIGhlYWRfcGZuCiYjNDM7CQkJICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgomIzQzOwkJCSAqIE90aGVyd2lzZSwganVzdCBmYWlsIHRoZSBjaGVjay4gcGZuIGNvbWVzIGZyb20KJiM0MzsJCQkgKiBfX2ZpcnN0X3ZhbGlkX3BhZ2UoKSBhcyBhIGxlZ2l0aW1hdGUgUEZOLCBzbyB1c2UgaXQgdG8KJiM0MzsJCQkgKiBjaGVjayBoZWFkX3Bmbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoaGVhZF9wZm4gJmd0OyBwZm4gfHwgIUlTX0FMSUdORUQoaGVhZF9wZm4sIG5yX3BhZ2VzKSB8fAomIzQzOwkJCSAgICBwZm4gLSBoZWFkX3BmbiAmZ3Q7PSBucl9wYWdlcykKJiM0MzsJCQkJZ290byBmYWlsZWQ7CiAKIAkJCWlmIChoZWFkX3BmbiAmIzQzOyBucl9wYWdlcyAmbHQ7PSBib3VuZGFyeV9wZm4gfHwKLQkJCSAgICBQYWdlSHVnZShwYWdlKSkgewomIzQzOwkJCSAgICBQYWdlSHVnZShoZWFkKSkgewogCQkJCXBmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzOwogCQkJCWNvbnRpbnVlOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDcyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBJc29sYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBtYWtpbmcgc29tZSBmYWlybHkgdGFyZ2V0ZWQgY2hhbmdlcyByZWxhdGVkIHRvIGhvdyBgYnVkZHlfb3JkZXJgIGFuZCBgY29tcG91bmRfb3JkZXJgIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgaXNvbGF0aW9uIHByb2Nlc3MuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgcmVwbGFjaW5nIHRoZSB1c2Ugb2YgYGJ1ZGR5X29yZGVyYCB3aXRoIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCwgaW1wb3J0YW50bHksIGFkZGluZyBzb21lIHZhbGlkYXRpb24gYXJvdW5kIGJvdGggdGhhdCBhbmQgYGNvbXBvdW5kX29yZGVyYCBhbG9uZ3NpZGUgYGNvbXBvdW5kX2hlYWRgLiBUaGlzIGlzLCBmdW5jdGlvbmFsbHkgc3BlYWtpbmcsIGEgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIGhvdyB3ZSBoYW5kbGUgcGFnZSBpc29sYXRpb24uIEkgbmVlZCB0byBkaWcgaW50byBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpdHNlbGYgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhbHRlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgaXNvbGF0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfaXNvbGF0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9pc29sYXRpb24uYz0yODM9X19maXJzdF92YWxpZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMjk4LS8qKlxubW0vcGFnZV9pc29sYXRpb24uYzoyOTk6ICogaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKCkgLS0gdHJpZXMgdG8gaXNvbGF0ZSBhIHBhZ2VibG9jayB0aGF0IG1pZ2h0IGJlXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwMC0gKiB3aXRoaW4gYSBmcmVlIG9yIGluLXVzZSBwYWdlLlxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA0LSAqIEBza2lwX2lzb2xhdGlvbjpcdHRoZSBmbGFnIHRvIHNraXAgdGhlIHBhZ2VibG9jayBpc29sYXRpb24gaW4gc2Vjb25kXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMwNTogKlx0XHRcdGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jaygpXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwNi0gKlxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzE5LSAqL1xubW0vcGFnZV9pc29sYXRpb24uYzozMjA6c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMyMS1cdFx0XHRlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlLCBib29sIGlzb2xhdGVfYmVmb3JlLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmM9NTAyPWludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxMy1cdC8qIGlzb2xhdGUgW2lzb2xhdGVfc3RhcnQsIGlzb2xhdGVfc3RhcnQgJiM0MzsgcGFnZWJsb2NrX25yX3BhZ2VzKSBwYWdlYmxvY2sgKi9cbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTE0Olx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfc3RhcnQsIG1vZGUsIGZhbHNlLFxubW0vcGFnZV9pc29sYXRpb24uYy01MTUtXHRcdFx0c2tpcF9pc29sYXRpb24pO1xuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTIyLVx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9lbmQgLSBwYWdlYmxvY2tfbnJfcGFnZXMsIGlzb2xhdGVfZW5kKSBwYWdlYmxvY2sgKi9cbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTIzOlx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfZW5kLCBtb2RlLCB0cnVlLCBza2lwX2lzb2xhdGlvbik7XG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyNC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBQYWdlIElzb2xhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIG9idmlvdXNseSBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIGl0IGdldHMgY2FsbGVkIGJ5IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBhcHByb2FjaC4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqbGFyZ2VyKiBjb250ZXh0LiBJJiMzOTttIHRoaW5raW5nLCB3aG8mIzM5O3MgaW5pdGlhdGluZyB0aGlzIHdob2xlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBsYWNlPyBUaW1lIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYC4gR290dGEgc2VlIHdoZXJlICp0aGF0KiBjb21lcyBmcm9tLiBLbm93aW5nIHRoZSBlbnRyeSBwb2ludCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgd29ya2Zsb3csIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIHdoZXJlIEkgc2hvdWxkIGJlIGxvb2tpbmcgdG8gb3B0aW1pemUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02Mi1cbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaDo2MzppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXHRcdFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTY4LVx0Lyogc2V0IGFib3ZlIHJhbmdlIGFzIGlzb2xhdGVkICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTcwLVx0XHRcdFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcxMDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTQ0LVx0ICogaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCBkdWUgdG8gdGhlIHdheSBwYWdlIGFsbG9jYXRvclxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XHQgKiB3b3JrLCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSBoYXMgc3BlY2lhbCBoYW5kbGluZ3MgZm9yIHRoaXMuXG5tbS9wYWdlX2FsbG9jLmMtNzE0Ni1cdCAqXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNjEtXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydCwgZW5kLCBtb2RlKTtcbm1tL3BhZ2VfYWxsb2MuYy03MTYzLVx0aWYgKHJldClcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTMyMD1zdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2Ni0vKipcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDY3OiAqIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIC0gbWFyayBwYWdlIHJhbmdlIE1JR1JBVEVfSVNPTEFURVxubW0vcGFnZV9pc29sYXRpb24uYy00NjgtICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgcmFuZ2UgdG8gYmUgaXNvbGF0ZWQuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MDEtICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUwMjppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwMy1cdFx0XHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01NDUtLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU0NjogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxubW0vcGFnZV9pc29sYXRpb24uYy01NDctICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTc1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIFN0cmF0ZWdpZXMqKgoKT2theSwgc28gSSBzZWUgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgYmVpbmcgY2FsbGVkIGluIHR3byBzcGVjaWZpYyBjb250ZXh0czogYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgZ2l2ZXMgbWUgc29tZSBpbW1lZGlhdGUgZGlyZWN0aW9uLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpcyBjbGVhcmx5IHRoZSB3b3JraG9yc2UgaGVyZSBmb3IgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbi4gSSYjMzk7bSB0aGlua2luZyBDTUEsIGdpZ2FudGljIGh1Z2VwYWdlcywgdGhpbmdzIHRoYXQgKm5lZWQqIHBoeXNpY2FsbHkgYWRqYWNlbnQgbWVtb3J5IHJlZ2lvbnMuIE1ha2VzIHNlbnNlLiBHaXZlbiB0aGUgJiMzNDtubyBwcm9mJiMzNDsgc3VmZml4LCBJIHN1c3BlY3QgdGhpcyBpcyBhIGNyaXRpY2FsIHBhdGggYW5kIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwgd2hlcmUgYW55IHByb2ZpbGluZyBvdmVyaGVhZCB3b3VsZCBiZSB1bmRlc2lyYWJsZS4KCmBvZmZsaW5lX3BhZ2VzYCBpcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGJlYXN0OiBtZW1vcnkgaG90cGx1Zy4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGR5bmFtaWNhbGx5IHJlbW92aW5nIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uIEl0JiMzOTtzIHVzZWQgZm9yIHRha2luZyBwYWdlcyBvZmZsaW5lLCBwZXJoYXBzIGZvciBoYXJkd2FyZSBmYWlsdXJlLCBtYWludGVuYW5jZSwgb3IgcmVzb3VyY2UgcmUtYWxsb2NhdGlvbi4KClNvLCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCBzZWVtcyB0byBiZSB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gdXNlZCBieSB0aGVzZSB0d28gcXVpdGUgZGlmZmVyZW50IG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgb25lIGZvciBpbml0aWFsIGFsbG9jYXRpb24gYW5kIHRoZSBvdGhlciBmb3IgZHluYW1pYyByZW1vdmFsLCBwZXJoYXBzIHRvIGZhY2lsaXRhdGUgdGhlIGFsbG9jYXRpb24gaW4gdGhlIGZpcnN0IHBsYWNlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpbiBtb3JlIGRldGFpbC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBjb250aWd1b3VzIG1lbW9yeSBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgaW4gd2hhdCBzY2VuYXJpb3MgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgaXMgdWx0aW1hdGVseSBiZWluZyB1c2VkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB2YWxpZGF0ZSBhbmQgcmVmaW5lIG15IG1lbnRhbCBtb2RlbCBvZiB0aGVzZSBzeXN0ZW1zLCBhbmQgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0Mz10eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgYWNyX2ZsYWdzX3Q7XG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC00NDctLyogVGhlIGJlbG93IGZ1bmN0aW9ucyBtdXN0IGJlIHJ1biBvbiBhIHJhbmdlIGZyb20gYSBzaW5nbGUgem9uZS4gKi9cbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDQ4OmludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDQ5LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaC00NTAtI2RlZmluZSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlKC4uLilcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MTpcdGFsbG9jX2hvb2tzKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MDgwPXN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTA3LSAqL1xubW0vcGFnZV9hbGxvYy5jOjcxMDg6aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcxMDktXHRcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI0NS19XG5tbS9wYWdlX2FsbG9jLmM6NzI0NjpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy03MjQ3LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MjY1PWludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MjcyLVxubW0vcGFnZV9hbGxvYy5jOjcyNzM6XHRyZXQgPSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZihzdGFydCwgZW5kLCBhbGxvY19mbGFncywgZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTcyNzQtXHRpZiAoIXJldClcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzM2ND1zdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YodW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzM5Mi1cdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG5tbS9wYWdlX2FsbG9jLmM6NzM5MzpcdFx0XHRcdHJldCA9IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHBmbixcbm1tL3BhZ2VfYWxsb2MuYy03Mzk0LVx0XHRcdFx0XHRcdFx0cGZuICYjNDM7IG5yX3BhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBnaWdhbnRpYyBwYWdlcyBhcmVhLiBUaGUgY29kZSBpbiBxdWVzdGlvbiwgd2hpY2ggaXMgcmVhY2hlZCB0aHJvdWdoIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgaXMgZGVmaW5pdGVseSB3aXRoaW4gY29yZSBrZXJuZWwgbG9naWMg4oCTIHdoaWNoIG1lYW5zIHRoaXMgaXMgc2VyaW91cy4gSXTigJlzIHVzZWQgYnkgQ01BIGFuZCBnaWdhbnRpYyBwYWdlcywgc28gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSBhcmUgb24gdGhlIGxpbmUuCgpUaGUgY3J1eCBvZiB0aGUgaXNzdWUgYXBwZWFycyB0byBiZSBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYC4gSXQgc2VlbXMgdGhhdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgY291bGQgbGVhZCB0byBgYnVkZHlfb3JkZXJgIGFuZCBgY29tcG91bmRfb3JkZXJgIHJldHVybmluZyBpbnZhbGlkIHZhbHVlcyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnLCBhbmQgY291bGQgbGVhZCB0byBzaWduaWZpY2FudCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZSBwYXRjaCwgdGhhbmtmdWxseSwgaXMgYWRkaW5nIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIGRldGVybWluZWQgb3JkZXIgc3RheXMgd2l0aGluIGJvdW5kcywgYW5kIHRoYXQgdGhlIHBoeXNpY2FsIGZyYW1lIG51bWJlcnMgKFBGTnMpIGFyZSBhbHNvIHZhbGlkIGFmdGVyIHRoZSBmdW5jdGlvbiBjb21wbGV0ZXMuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCBiZSBzdWJ0bHkgaW1wYWN0ZnVsLCBhbmQgdGhlcmVmb3JlIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBmdXp6aW5nIGFuZCByaWdvcm91cyB0ZXN0aW5nLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGZpeCBhIGJpdCBiZXR0ZXIuIEZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzIEkgc2VlLCBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpcyBzdGF0aWMsIHdoaWNoIHRlbGxzIG1lIGl0cyB1c2FnZSBpcyBsb2NhbGl6ZWQsIHdoZXJlYXMgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgIGFyZSBub24tc3RhdGljIOKAkyBtZWFuaW5nIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBmaWxlLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2l0aGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgYWZmZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfaXNvbGF0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9pc29sYXRpb24uYz0yODM9X19maXJzdF92YWxpZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMjk4LS8qKlxubW0vcGFnZV9pc29sYXRpb24uYzoyOTk6ICogaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKCkgLS0gdHJpZXMgdG8gaXNvbGF0ZSBhIHBhZ2VibG9jayB0aGF0IG1pZ2h0IGJlXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwMC0gKiB3aXRoaW4gYSBmcmVlIG9yIGluLXVzZSBwYWdlLlxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA0LSAqIEBza2lwX2lzb2xhdGlvbjpcdHRoZSBmbGFnIHRvIHNraXAgdGhlIHBhZ2VibG9jayBpc29sYXRpb24gaW4gc2Vjb25kXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMwNTogKlx0XHRcdGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jaygpXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwNi0gKlxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzE5LSAqL1xubW0vcGFnZV9pc29sYXRpb24uYzozMjA6c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMyMS1cdFx0XHRlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlLCBib29sIGlzb2xhdGVfYmVmb3JlLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmM9NTAyPWludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxMy1cdC8qIGlzb2xhdGUgW2lzb2xhdGVfc3RhcnQsIGlzb2xhdGVfc3RhcnQgJiM0MzsgcGFnZWJsb2NrX25yX3BhZ2VzKSBwYWdlYmxvY2sgKi9cbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTE0Olx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfc3RhcnQsIG1vZGUsIGZhbHNlLFxubW0vcGFnZV9pc29sYXRpb24uYy01MTUtXHRcdFx0c2tpcF9pc29sYXRpb24pO1xuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTIyLVx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9lbmQgLSBwYWdlYmxvY2tfbnJfcGFnZXMsIGlzb2xhdGVfZW5kKSBwYWdlYmxvY2sgKi9cbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTIzOlx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfZW5kLCBtb2RlLCB0cnVlLCBza2lwX2lzb2xhdGlvbik7XG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyNC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgbW0vcGFnZV9pc29sYXRpb24uY2AgRW50cnkgUG9pbnQqKgoKUmlnaHQsIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCDigJMgdGhhdCYjMzk7cyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciB0aGUgd2hvbGUgcGFnZSBpc29sYXRpb24gcHJvY2Vzcywgd2hpY2ggSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4gQmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGxldCBtZSBxdWlja2x5IHNjYW4gdGhlIHNvdXJjZSB0cmVlIGFuZCBidWlsZCBjb25maWd1cmF0aW9uLiBJIHdhbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBgQ09ORklHYCBvcHRpb25zIGF0IHBsYXkgdGhhdCBtaWdodCBjb25kaXRpb25hbGx5IGNvbXBpbGUgc2VjdGlvbnMgb2YgdGhpcyBmaWxlIG9yIGV2ZW4gdGhlIGVudGlyZSBtb2R1bGUuIEtub3dpbmcgdGhlIHBvdGVudGlhbCBjb21waWxlLXRpbWUgdmFyaWF0aW9ucyBpcyBjcnVjaWFsOyBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55IGVkZ2UgY2FzZXMgb3IgYWx0ZXJuYXRpdmUgYmVoYXZpb3JzIGRlZmluZWQgYnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJcyB0aGlzIGZpbGUgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgb3IgYXJlIHRoZXJlIGNpcmN1bXN0YW5jZXMgd2hlcmUgaXQmIzM5O3MgZXhjbHVkZWQgYmFzZWQgb24gcGFydGljdWxhciBgQ09ORklHYCBmbGFncz8gVGhhdCYjMzk7cyBteSBmaXJzdCBxdWVzdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9pc29sYXRpb25cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTExNz1vYmotJChDT05GSUdfUEFHRV9PV05FUikgJiM0Mzs9IHBhZ2Vfb3duZXIub1xubW0vTWFrZWZpbGU6MTE4Om9iai0kKENPTkZJR19NRU1PUllfSVNPTEFUSU9OKSAmIzQzOz0gcGFnZV9pc29sYXRpb24ub1xubW0vTWFrZWZpbGUtMTE5LW9iai0kKENPTkZJR19aU01BTExPQylcdCYjNDM7PSB6c21hbGxvYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgSXNvbGF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIHByb21wdCBtZW50aW9ucyBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gLiBSaWdodCwgSSBrbm93IHRoYXQgb25lLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIHRoYXQgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGRldGVybWluZSB3aGV0aGVyIGBDT05GSUdfTUVNT1JZX0lTT0xBVElPTmAgaXMgZW5hYmxlZCBvciBub3QuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMsIG9yIHBlcmhhcHMgdXNlIGEgY29uZmlndXJhdGlvbiB0b29sIHRvIHRyYWNrIGRvd24gdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBwcmVyZXF1aXNpdGVzIGFuZCBpbXBsaWNhdGlvbnMgYmVmb3JlIHVzaW5nIGl0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbnRlbmRlZCB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfSVNPTEFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NDk5PWNvbmZpZyBOVU1BX0tFRVBfTUVNSU5GT1xuLS1cbm1tL0tjb25maWctNTAxLVxubW0vS2NvbmZpZzo1MDI6Y29uZmlnIE1FTU9SWV9JU09MQVRJT05cbm1tL0tjb25maWctNTAzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTgzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBhIHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCwgc3RhcnRpbmcgd2l0aCBhIGJvbGRlZCBoZWFkZXI6CgoqKkFuYWx5emluZyB0aGUgU2VsZWN0aW9uIENyaXRlcmlhKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggYSBzZWxlY3Rpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBwaW5wb2ludCAqd2hhdCogaXMgZHJpdmluZyB0aGF0IHNlbGVjdGlvbi4gSSBuZWVkIHRvIGJyZWFrIGRvd24gdGhlIGZhY3RvcnMgYXQgcGxheS4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cywgdGhlIGRlZmluaW5nIGNoYXJhY3RlcmlzdGljcywgdGhlIHVuZGVybHlpbmcgcHJpbmNpcGxlcyB0aGF0IGFyZSBsZWFkaW5nIHRvIHRoaXMgcGFydGljdWxhciBjaG9pY2U/IEFtIEkgbG9va2luZyBhdCBhIGRpcmVjdCBhcHBsaWNhdGlvbiBvZiBydWxlcywgdGhlIGluZmx1ZW5jZSBvZiBpbXBsaWNpdCBiaWFzZXMsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc3VidGxlIGFuZCBudWFuY2VkPyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIGRlY2lzaW9uLW1ha2luZyBtb2RlbHMsIGNyb3NzLXJlZmVyZW5jaW5nIHRoaXMgYWdhaW5zdCBteSBleGlzdGluZyBrbm93bGVkZ2UgYmFzZSBhbmQgZXhwZXJpZW5jZS4gVGhpcyBpbml0aWFsIGFzc2Vzc21lbnQgd2lsbCBndWlkZSBteSBuZXh0IHN0ZXBzLiBJdOKAmXMgYWxsIGFib3V0IGZpZ3VyaW5nIG91dCB0aGUgcm9vdCBjYXVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE1FTU9SWV9JU09MQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01MjM9bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xubW0vS2NvbmZpZy01MjQtXHRib29sIFwmIzM0O01lbW9yeSBob3RwbHVnXCYjMzQ7XG5tbS9LY29uZmlnOjUyNTpcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG5tbS9LY29uZmlnLTUyNi1cdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbi0tXG5tbS9LY29uZmlnPTEwNjc9Y29uZmlnIENNQVxuLS1cbm1tL0tjb25maWctMTA3MC1cdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWc6MTA3MTpcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG5tbS9LY29uZmlnLTEwNzItXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMzMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zLgoKKipNZW1vcnkgQWxsb2NhdGlvbiBTdHJhdGVneSBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IHdlIG5lZWQgaGVyZS4gQ2xlYXJseSwgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgZWl0aGVyIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgIG9yIGBDT05GSUdfQ01BYCB0byBtYWtlIHRoaXMgd29yayBzbW9vdGhseS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHdoaWNoIG9mIHRob3NlIGlzIGVuYWJsZWQsIGFuZCBtYXliZSBldmVuIGxvb2sgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBib3RoLCBpZiB3ZSBuZWVkIHRvIHdlaWdoIHRoZW0gYWdhaW5zdCBlYWNoIG90aGVyLiBJdCYjMzk7cyBhIHF1ZXN0aW9uIG9mIGZsZXhpYmlsaXR5IHZlcnN1cyBwZXJmb3JtYW5jZSwgdHlwaWNhbGx5LgoKSSYjMzk7bSBhbHNvIGhhdmluZyBhIGxpdHRsZSBkaWcgYXJvdW5kIGBDT05GSUdfQ09OVElHX0FMTE9DYC4gSSB0aGluayB0aGVyZSBtaWdodCBiZSBzb21lIG92ZXJsYXAgdGhlcmUsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBvdGhlciB0d28gd2lsbCBiZSBjcnVjaWFsLiBDb250aWd1b3VzIGFsbG9jYXRpb24gY291bGQgYmUgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoaXMgcHV6emxlLCBkZXBlbmRpbmcgb24gaG93IHdlIHdhbnQgdG8gY2FydmUgdXAgdGhlIGFkZHJlc3Mgc3BhY2UuIE5lZWQgdG8gY2xhcmlmeSB0aGUgcm9sZXMgb2YgdGhlc2UsIHJlbGF0aXZlIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBsYXlvdXQgd2UmIzM5O3JlIHRhcmdldGluZy4gR290IHRvIGNvbnNpZGVyIGhvdyB0aG9zZSBpbnRlcmFjdCB0byBnZXQgdGhlIGlkZWFsIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTlRJR19BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwOT1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbi0tXG5tbS9LY29uZmlnLTcxOC1cbm1tL0tjb25maWc6NzE5OmNvbmZpZyBDT05USUdfQUxMT0Ncbm1tL0tjb25maWctNzIwLVx0ZGVmX2Jvb2wgKE1FTU9SWV9JU09MQVRJT04gXHUwMDI2XHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njk5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoaXMgYE1FTU9SWV9JU09MQVRJT05gIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIGl0IHNlZW1zLiBBbmQgSSYjMzk7bSBsb29raW5nIGF0IGhvdyBpdCYjMzk7cyBlbmFibGVkLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgb2YganVzdCB0aHJvd2luZyBgTUVNT1JZX0lTT0xBVElPTmAsIGBDTUFgLCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBpbnRvIGBFbmFibGVDb25maWdzYC4gQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gYE1FTU9SWV9JU09MQVRJT05gIGlzIGEgYm9vbGVhbiB3aXRoIG5vIGRpcmVjdCBwcm9tcHQhIFRoYXQgbWVhbnMgdGhlIHVzZXIgY2FuJiMzOTt0ICpkaXJlY3RseSogZW5hYmxlIGl0LiBJdCBnZXRzIGFjdGl2YXRlZCB2aWEgYE1FTU9SWV9IT1RQTFVHYCBvciBgQ01BYC4gVGhhdCBjaGFuZ2VzIHRoaW5ncy4KClRoZXJlZm9yZSwgdGhlIGNvcnJlY3QgYXBwcm9hY2ggaXMgdG8gaW5jbHVkZSBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQmIzM5O3MgdGhlIHdheSB0byBnaXZlIHRoZSB1c2VyIGNvbnRyb2wgb3ZlciB0aGUgYmVoYXZpb3IgSSYjMzk7bSBhZnRlciwgaW5kaXJlY3RseS4KCk5vdywganVzdCB0byBiZSBzdXJlLCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGFsbG9jYXRpb24gcm91dGluZXMgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGFuZCBgYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZXNlIHBhcmFtZXRlcnMgZmFjdG9yIGludG8gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXHRcdFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgcGVyc3BlY3RpdmUgb24gdGhhdCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgbWluZCYjMzk7cyBhdXRvbWF0aWNhbGx5IGp1bXBpbmcgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGF0IGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhhdCBuYW1lLCBzbyBJJiMzOTttIGxpa2VseSBrbmVlLWRlZXAgaW4gc29tZSBwZXJmb3JtYW5jZSBhbmFseXNpcyBvciBwb3NzaWJseSBkZWJ1Z2dpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhhdCBmdW5jdGlvbiBvcGVyYXRlcy4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBJJiMzOTttIGluPyBJcyB0aGlzIGFib3V0IGJvb3QtdGltZSBhbGxvY2F0aW9uLCBvciBydW50aW1lPyBXaGF04oCZcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW5kIGFyZSB0aGVyZSBhbnkgbnVhbmNlcyB0aGVyZSBJIG5lZWQgdG8gY29uc2lkZXI/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgdHJhZGUtb2ZmcyBpbnZvbHZlZCBpbiB1c2luZyBjb250aWd1b3VzIG1lbW9yeSDigJMgcG90ZW50aWFsIGZyYWdtZW50YXRpb24sIGFuZCBwb3NzaWJsZSBwZXJmb3JtYW5jZSBiZW5lZml0cyBkZXBlbmRpbmcgb24gdGhlIHdvcmtsb2FkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgSSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19jb250aWdfcGFnZXNfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz03NDE4PUVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy03NDM1LSAqL1xubW0vcGFnZV9hbGxvYy5jOjc0MzY6c3RydWN0IHBhZ2UgKmFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2YodW5zaWduZWQgbG9uZyBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9wYWdlX2FsbG9jLmMtNzQzNy1cdFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vcGFnZV9hbGxvYy5jLTc0NTAtfVxubW0vcGFnZV9hbGxvYy5jOjc0NTE6RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy03NDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzYzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IEhvdHBsdWcqKgoKT2theSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIG9mZmxpbmUgcGFnZXMsIGFuZCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoZSBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgZmlsZSBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMsIGluY2x1ZGluZyB0aGUgaGFuZGxpbmcgb2YgcGFnZSByZW1vdmFsIGFuZCBwb3RlbnRpYWxseSB0aGVpciBvZmZsaW5lIHN0YXR1cywgd291bGQgcmVzaWRlLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgdGhlcmUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9NTM5PXZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODMtICogc3VyZSB0aGF0IHBhZ2VzIGFyZSBtYXJrZWQgcmVzZXJ2ZWQgYW5kIHpvbmVzIGFyZSBhZGp1c3QgcHJvcGVybHkgYnlcbm1tL21lbW9yeV9ob3RwbHVnLmM6NTg0OiAqIGNhbGxpbmcgb2ZmbGluZV9wYWdlcygpLlxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODUtICovXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xODkwPXN0YXRpYyBpbnQgY291bnRfc3lzdGVtX3JhbV9wYWdlc19jYih1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDEtICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5MDI6aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDMtXHRcdFx0c3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTQ1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbHMgLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZXhhbWluZS4gVGhlIGltbWVkaWF0ZSBmb2N1cyBzaG91bGQgYmUgb24gYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBtZWNoYW5pc21zIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4KCkhhbmcgb24gYSBzZWNvbmTigKZhcmVuJiMzOTt0IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgIGFscmVhZHkgZXhwb3J0ZWQ/IEkgY291bGQgaGF2ZSBzd29ybiB0aGV5IHdlcmUuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0OyBJIGRvbuKAmXQgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgc2hhZG93cy4gQW5kIHdoYXQgYWJvdXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWA/IEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4cG9ydCBzdGF0dXMgYXMgd2VsbC4gSSBkb24mIzM5O3Qgd2FudCB0byBvdmVybG9vayBzb21ldGhpbmcgZnVuZGFtZW50YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IExvY2F0aW5nIHRoZSBSZWxldmFudCBDb2RlKioKCkFscmlnaHQsIHNvIHRoZSB0aGluZyBpc24mIzM5O3QgKmV4cG9ydGVkKiDigJMgdGhhdCYjMzk7cyB0aGUgZmlyc3QgY3J1Y2lhbCBjbHVlLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm9uLXN0YXRpYyogY2hhbmdlcyB0aGUgZ2FtZS4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHBvc3NpYmlsaXRpZXMgc2lnbmlmaWNhbnRseS4gTXkgaW1tZWRpYXRlIG5leHQgbW92ZSBpcyB0byBkb3VibGUtY2hlY2sgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLiBJIGtub3cgdGhhdCYjMzk7cyBhIGNlbnRyYWwgYXJlYSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBub24tc3RhdGljIHRoaW5ncyBvZnRlbiByZXNpZGUgdGhlcmUsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGtlcm5lbCBmZWF0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNyb3NzLXJlZmVyZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9pc29sYXRpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2lzb2xhdGlvbi5jPTMyMD1zdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2Ni0vKipcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDY3OiAqIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIC0gbWFyayBwYWdlIHJhbmdlIE1JR1JBVEVfSVNPTEFURVxubW0vcGFnZV9pc29sYXRpb24uYy00NjgtICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgcmFuZ2UgdG8gYmUgaXNvbGF0ZWQuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MDEtICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUwMjppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwMy1cdFx0XHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01NDUtLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU0NjogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxubW0vcGFnZV9pc29sYXRpb24uYy01NDctICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk0MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIER5bmFtaWMgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGlzbiYjMzk7dCBmaXhlZDsgaXQmIzM5O3MgZHluYW1pYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IG1hbmFnaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoaXMgdm9sYXRpbGUgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgY29udGlndW91cywgZnJvemVuIHJhbmdlIGFsbG9jYXRpb24sIGxpa2VseSB3aXRob3V0IHBlcmZvcm1hbmNlIHByb2ZpbGluZyBvdmVyaGVhZC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0IHJlYWN0cyB0byB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhpcyBjb250ZXh0LiBJIGV4cGVjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gdGhlIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgdGhpcyBpcyBhbiBpbXBvcnRhbnQgcG9pbnQgdG8gY29uc2lkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz03MDgwPXN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTA3LSAqL1xubW0vcGFnZV9hbGxvYy5jOjcxMDg6aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcxMDktXHRcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI0NS19XG5tbS9wYWdlX2FsbG9jLmM6NzI0NjpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy03MjQ3LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MjY1PWludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MjcyLVxubW0vcGFnZV9hbGxvYy5jOjcyNzM6XHRyZXQgPSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZihzdGFydCwgZW5kLCBhbGxvY19mbGFncywgZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTcyNzQtXHRpZiAoIXJldClcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzM2ND1zdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YodW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzM5Mi1cdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG5tbS9wYWdlX2FsbG9jLmM6NzM5MzpcdFx0XHRcdHJldCA9IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHBmbixcbm1tL3BhZ2VfYWxsb2MuYy03Mzk0LVx0XHRcdFx0XHRcdFx0cGZuICYjNDM7IG5yX3BhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU3OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgIGFuZCBhIFNpbWlsYXIgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgaXMgYWxzbyBleHBvcnRlZCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBpbiB0aGlzIGNvbnRleHQuCgpOb3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgZXhhbWluZSBgYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZgLiBJdCYjMzk7cyBsaWtlbHkgY2xvc2VseSByZWxhdGVkLCBtYXliZSBldmVuIGEgc2ltcGxlciB2ZXJzaW9uIG9mIHRoZSBmaXJzdCBmdW5jdGlvbiwgb3IgcGVyaGFwcyBpdCBhZGRyZXNzZXMgYSBkaWZmZXJlbnQgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhlICYjMzQ7bm9wcm9mJiMzNDsgc3VmZml4IHByb2JhYmx5IG1lYW5zIGl0JiMzOTtzIGZvciBub24tcHJvZmlsZWQgYWxsb2NhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgY2FzZS4gVGhpcyB0ZWxscyBtZSBhYm91dCBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgYWxsb2NhdGlvbiBsYW5kc2NhcGUgd2l0aGluIG91ciBjdXJyZW50IHN5c3RlbS4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gQXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBvciBzcGVjaWZpYyBmb3IgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVudCB0YXNrcz8gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTczMzA9c3RhdGljIGJvb2wgem9uZV9zcGFuc19sYXN0X3Bmbihjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzM2My0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MzY0OnN0cnVjdCBwYWdlICphbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxubW0vcGFnZV9hbGxvYy5jLTczNjUtXHRcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzQxNy19XG5tbS9wYWdlX2FsbG9jLmM6NzQxODpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy03NDE5LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03NDM2PXN0cnVjdCBwYWdlICphbGxvY19jb250aWdfcGFnZXNfbm9wcm9mKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03NDQzLVxubW0vcGFnZV9hbGxvYy5jOjc0NDQ6XHRwYWdlID0gYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YobnJfcGFnZXMsIGdmcF9tYXNrLCBuaWQsXG5tbS9wYWdlX2FsbG9jLmMtNzQ0NS1cdFx0XHRcdFx0XHRub2RlbWFzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTk0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBSb3V0aW5lcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGFsbG9jYXRpb24gcm91dGluZXMgaW4gcGxheSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbGlzdCB0aGUgb25lcyB0aGF0IHNlZW0gZGlyZWN0bHkgcmVsZXZhbnQ6IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgLCBgYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBIb3dldmVyLCBJIHNlZSBhIHBhdHRlcm4uIEl0IGxvb2tzIGxpa2UgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGFuZCBgYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZmAgYXJlIHNpbXBseSB3cmFwcGVycywgYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBvbiB0b3Agb2Ygc29tZXRoaW5nIGVsc2UuIEkmIzM5O2xsIGluY2x1ZGUgdGhlbSBpbiB0aGUgbGlzdCB0b28sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBjYWxsIGhpZXJhcmNoeS4gU28sIHRoZSByZXZpc2VkIGxpc3QgaXM6IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYW5kIGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSBpZiBgYWxsb2NfY29udGlnX3JhbmdlYCBhbmQgYGFsbG9jX2NvbnRpZ19wYWdlc2AgYXJlIG1hY3JvcywgYmVjYXVzZSB0aGF0IGFmZmVjdHMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIHJ1bnRpbWUgYmVoYXZpb3IuIExldCYjMzk7cyBjaGVjayB0aGF0IGZpcnN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGFsbG9jX2NvbnRpZ19yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcC5oPTQ1Mz1pbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaDo0NTU6I2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU2LVx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzQ1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVW5kZXJseWluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIGluZGVlZCBtYWNyb3MuIFRoZXkmIzM5O3JlIGJhc2ljYWxseSB3cmFwcGVycyBhcm91bmQgdGhvc2UgYF9ub3Byb2ZgIGZ1bmN0aW9ucy4gVGhhdCBtYWtlcyB0aGUgYWN0dWFsIGZ1bmN0aW9uIGNhbGxzIGZvciBtZSBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAsIGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCwgYW5kIGBhbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZmAuIFJpZ2h0LCBnb3QgaXQuIE5vdyBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgdGhlIHJlbGV2YW50IGBFbmFibGVDb25maWdzYC4gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBhbmQgY29uZmlybSB3aGF0IHRoYXQgYE1FTU9SWV9IT1RQTFVHYCBjb25maWcgYWN0dWFsbHkgZG9lcy4gS2NvbmZpZywgaGVyZSBJIGNvbWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RQTFVHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTE5PWNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuLS1cbm1tL0tjb25maWctNTIyLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAmIzM5O3NlbGVjdCBTUEFSU0VNRU0mIzM5O1xubW0vS2NvbmZpZzo1MjM6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xubW0vS2NvbmZpZy01MjQtXHRib29sIFwmIzM0O01lbW9yeSBob3RwbHVnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTQzCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWVtb3J5IEhvdHBsdWcgYW5kIENNQSBSZXZpZXcqKgoKUmlnaHQsIGBNRU1PUllfSE9UUExVR2AgcmluZ3MgdHJ1ZSBpbiBteSBtaW5kLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgb24gdGhlIHJpZ2h0IHRyYWNrLiBHaXZlbiB0aGUgY29udGV4dCwgdGhvdWdoLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlJiMzOTtyZSBhbGlnbmVkLiBCZWZvcmUgSSBnbyBmdXJ0aGVyIGRvd24gdGhpcyBwYXJ0aWN1bGFyIHJhYmJpdCBob2xlLCBsZXQgbWUganVzdCBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IGBDTUFgIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpbiB0aGUgS2NvbmZpZy4gQSBkb3VibGUtY2hlY2sgdGhlcmUgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIHN5c3RlbSYjMzk7cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kIGVuc3VyZSB0aGVzZSB0d28gYXJlYXMgYWxpZ24gY29ycmVjdGx5LiBObyBuZWVkIHRvIGNoYXNlIGdob3N0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBETUFfTlVNQV9DTUFcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMTg1LVxua2VybmVsL2RtYS9LY29uZmlnOjE4Njpjb25maWcgQ01BX1NJWkVfUEVSTlVNQVxua2VybmVsL2RtYS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7RGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnPTE5Nj1jb21tZW50IFwmIzM0O0RlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOlwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTE5Ny1cbmtlcm5lbC9kbWEvS2NvbmZpZzoxOTg6Y29uZmlnIENNQV9TSVpFX01CWVRFU1xua2VybmVsL2RtYS9LY29uZmlnLTE5OS1cdGludCBcJiMzNDtTaXplIGluIE1lZ2EgQnl0ZXNcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMjA4LVxua2VybmVsL2RtYS9LY29uZmlnOjIwOTpjb25maWcgQ01BX1NJWkVfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIxMC1cdGludCBcJiMzNDtQZXJjZW50YWdlIG9mIHRvdGFsIG1lbW9yeVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMjA9Y2hvaWNlXG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTIyMy1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjQ6Y29uZmlnIENNQV9TSVpFX1NFTF9NQllURVNcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjUtXHRib29sIFwmIzM0O1VzZSBtZWdhIGJ5dGVzIHZhbHVlIG9ubHlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjYtXG5rZXJuZWwvZG1hL0tjb25maWc6MjI3OmNvbmZpZyBDTUFfU0laRV9TRUxfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIyOC1cdGJvb2wgXCYjMzQ7VXNlIHBlcmNlbnRhZ2UgdmFsdWUgb25seVwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTIyOS1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzA6Y29uZmlnIENNQV9TSVpFX1NFTF9NSU5cbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzEtXHRib29sIFwmIzM0O1VzZSBsb3dlciB2YWx1ZSAobWluaW11bSlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzItXG5rZXJuZWwvZG1hL0tjb25maWc6MjMzOmNvbmZpZyBDTUFfU0laRV9TRUxfTUFYXG5rZXJuZWwvZG1hL0tjb25maWctMjM0LVx0Ym9vbCBcJiMzNDtVc2UgaGlnaGVyIHZhbHVlIChtYXhpbXVtKVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMzY9ZW5kY2hvaWNlXG5rZXJuZWwvZG1hL0tjb25maWctMjM3LVxua2VybmVsL2RtYS9LY29uZmlnOjIzODpjb25maWcgQ01BX0FMSUdOTUVOVFxua2VybmVsL2RtYS9LY29uZmlnLTIzOS1cdGludCBcJiMzNDtNYXhpbXVtIFBBR0VfU0laRSBvcmRlciBvZiBhbGlnbm1lbnQgZm9yIGNvbnRpZ3VvdXMgYnVmZmVyc1wmIzM0O1xuLS1cbm1tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbi0tXG5tbS9LY29uZmlnLTEwNjYtXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxubW0vS2NvbmZpZy0xMDY4LVx0Ym9vbCBcJiMzNDtDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODEtXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXG5tbS9LY29uZmlnLTEwODMtXHRib29sIFwmIzM0O0NNQSBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA4Ny1cbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXG5tbS9LY29uZmlnLTEwODktXHRib29sIFwmIzM0O0NNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA5NC1cbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXG5tbS9LY29uZmlnLTEwOTYtXHRpbnQgXCYjMzQ7TWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDc1CgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgeWVzLCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IHJlZ2FyZGluZyB0aGUgdXNlIG9mIGBDTUFgIGlzIHNwb3Qtb24uIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgYSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYC4gVGhlIGNydXggb2YgdGhlIGZpeCBsaWVzIGluIHZlcmlmeWluZyB0aGUgb3V0cHV0cyBvZiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYCwgY3JpdGljYWwgY29tcG9uZW50cyBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQsIG1vcmUgcHJlY2lzZWx5LCBpbiB0aGUgcGFnZSBpc29sYXRpb24gcHJvY2Vzcy4KCk5vdywgbG9va2luZyBhdCB0aGUgc3ltYm9scywgd2UgaGF2ZSBhIGNsZWFyIHNldCBvZiBmb2N1cyBwb2ludHM6IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLCBhbG9uZyB3aXRoIHZhcmlvdXMgYGFsbG9jX2NvbnRpZ18uLi5fbm9wcm9mYCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBUaGVzZSBwb2ludCBkaXJlY3RseSB0byB0aGUgYXJlYSBvZiBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIChDTUEpIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MuIEZ1cnRoZXIsIHdlIHNlZSBgYWxsb2NfY29udGlnX2Zyb3plbl8uLi5fbm9wcm9mYCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBmcm96ZW4gcGFnZXMgYXJlIGludm9sdmVkLgoKVGhlIGVuYWJsZW1lbnQgY29uZmlndXJhdGlvbnMsIGBDTUFgIGFuZCBgTUVNT1JZX0hPVFBMVUdgLCBhcmUgdGhlIGtleXMuIFRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgaXMgdGllZCBkaXJlY3RseSB0byBob3cgY29udGlndW91cyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBwYXJ0aWN1bGFybHkgd2l0aCBnaWdhbnRpYyBodWdlcGFnZXMsIGFuZCBob3cgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyBpbXBhY3QgdGhlIGlzb2xhdGlvbiBtZWNoYW5pc20uIFRoZSBpbXBhY3Qgb2YgdGhlc2UgaXMgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGUgcGF0Y2gsIHRoZXJlZm9yZSwgaW1wYWN0cyB0aGUgQ01BIG1lY2hhbmlzbS4KClNvLCBsZXQmIzM5O3MgY2FsbCB0aGlzIHNldCBvZiBpbmZvcm1hdGlvbiAmIzM5O3NldC1yZXN1bHRzJiMzOTsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcGFnZXNfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGJ5IHZhbGlkYXRpbmcgdGhlIHJlc3VsdHMgb2YgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGBjb21wb3VuZF9vcmRlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChwYWdlIGlzb2xhdGlvbiksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiAoQ01BLCBnaWdhbnRpYyBodWdlcGFnZXMpIGFuZCBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcGFnZXNfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGJ5IHZhbGlkYXRpbmcgdGhlIHJlc3VsdHMgb2YgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGBjb21wb3VuZF9vcmRlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChwYWdlIGlzb2xhdGlvbiksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiAoQ01BLCBnaWdhbnRpYyBodWdlcGFnZXMpIGFuZCBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2hlcmUgcGFnZSBtZXRhZGF0YSAoc3VjaCBhcyBidWRkeSBvcmRlciBvciBjb21wb3VuZCBoZWFkKSBpcyByZWFkIHdpdGhvdXQgbG9ja3MuIFJhY3kgcmVhZHMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcywgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbmZpbml0ZSBsb29wcywgb3IgaW5jb3JyZWN0IHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYWRkIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBmb3IgdGhlIHJlYWQgdmFsdWVzIChgb3JkZXJgLCBgaGVhZF9wZm5gKSB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy5cblxuVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMpIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChmb3IgY3Jhc2hlcy9oYW5ncykuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgY2F1c2UgYW4gaW5mby1sZWFrLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwNDowMjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCmluZGV4IDMyY2U4YTdkOWRmMzUuLjljZjdmOTIwMTFiZDMgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pc29sYXRpb24uYwpAQCAtMzg3LDEzICYjNDM7Mzg3LDE1IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLAogCQl9CiAKIAkJaWYgKFBhZ2VCdWRkeShwYWdlKSkgewotCQkJaW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7CiYjNDM7CQkJdW5zaWduZWQgaW50IG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwogCi0JCQkvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovCi0JCQlWTV9XQVJOX09OX09OQ0UocGZuICYjNDM7ICgxICZsdDsmbHQ7IG9yZGVyKSAmZ3Q7IGJvdW5kYXJ5X3Bmbik7Ci0KLQkJCXBmbiAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwotCQkJY29udGludWU7CiYjNDM7CQkJLyogYnVkZHlfb3JkZXJfdW5zYWZlKCkgaXMgcmFjeS4gVmFsaWRhdGUgdGhlIG9yZGVyIGJlZm9yZSBzaGlmdGluZy4gKi8KJiM0MzsJCQlpZiAob3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBwZm4gJiM0MzsgKDFVTCAmbHQ7Jmx0OyBvcmRlcikgJmx0Oz0gYm91bmRhcnlfcGZuKSB7CiYjNDM7CQkJCXBmbiAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAogCQkvKgpAQCAtNDEyLDEwICYjNDM7NDE0LDI4IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLAogCQlpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7CiAJCQl1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7Ci0JCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gY29tcG91bmRfbnIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKJiM0MzsKJiM0MzsJCQkvKiBjb21wb3VuZF9vcmRlcigpIGlzIHJhY3kuIENhcCBpdCBhdCBNQVhfRk9MSU9fT1JERVIuICovCiYjNDM7CQkJaWYgKG9yZGVyICZndDsgTUFYX0ZPTElPX09SREVSKQomIzQzOwkJCQlnb3RvIGZhaWxlZDsKJiM0MzsKJiM0MzsJCQlucl9wYWdlcyA9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGNvbXBvdW5kX2hlYWQoKSBpcyBhbHNvIHJhY3ksIHNvIHRoZSBkZXJpdmVkIGhlYWRfcGZuCiYjNDM7CQkJICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgomIzQzOwkJCSAqIE90aGVyd2lzZSwganVzdCBmYWlsIHRoZSBjaGVjay4gcGZuIGNvbWVzIGZyb20KJiM0MzsJCQkgKiBfX2ZpcnN0X3ZhbGlkX3BhZ2UoKSBhcyBhIGxlZ2l0aW1hdGUgUEZOLCBzbyB1c2UgaXQgdG8KJiM0MzsJCQkgKiBjaGVjayBoZWFkX3Bmbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoaGVhZF9wZm4gJmd0OyBwZm4gfHwgIUlTX0FMSUdORUQoaGVhZF9wZm4sIG5yX3BhZ2VzKSB8fAomIzQzOwkJCSAgICBwZm4gLSBoZWFkX3BmbiAmZ3Q7PSBucl9wYWdlcykKJiM0MzsJCQkJZ290byBmYWlsZWQ7CiAKIAkJCWlmIChoZWFkX3BmbiAmIzQzOyBucl9wYWdlcyAmbHQ7PSBib3VuZGFyeV9wZm4gfHwKLQkJCSAgICBQYWdlSHVnZShwYWdlKSkgewomIzQzOwkJCSAgICBQYWdlSHVnZShoZWFkKSkgewogCQkJCXBmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzOwogCQkJCWNvbnRpbnVlOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2OQoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiA1MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUmVhc29uaW5nIC0gTm8gTmVlZCBmb3IgRGVkaWNhdGVkIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGluZGljYXRlcyBpdCYjMzk7cyBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucywgc3BlY2lmaWNhbGx5IHRob3NlIGFyaXNpbmcgZnJvbSBjb25jdXJyZW50IGFjY2VzcyB0byBwYWdlIG1ldGFkYXRhLiBJdCYjMzk7cyBlc3NlbnRpYWxseSByZXBsYWNpbmcgY2FsbHMgbGlrZSBgYnVkZHlfb3JkZXIocGFnZSlgIHdpdGggYGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKWAgYW5kIGRvaW5nIHRoZSBzYW1lIGZvciBjb21wb3VuZCBwYWdlIGluZm9ybWF0aW9uLCBhbmQgYWRkaW5nIHZhbGlkYXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIHJlYWRpbmcgaW5jb25zaXN0ZW50IHZhbHVlcyBkdWUgdG8gdGhlc2UgcmFjZSBjb25kaXRpb25zLgoKVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgbmV3IGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm9yIGRvZXMgaXQgbGVhayBhbnkgc2Vuc2l0aXZlIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQmIzM5O3Mgc3RyaWN0bHkgYWJvdXQgc2FmZWd1YXJkaW5nIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyByZWFkcywgaW5maW5pdGUgbG9vcHMsIG9yIGNyYXNoZXMgdHJpZ2dlcmVkIGJ5IHJlYWRpbmcgcGFnZSBtZXRhZGF0YSBjb25jdXJyZW50bHkuIFRoZXNlIGFyZSB0aGUga2luZHMgb2YgaXNzdWVzIHRoYXQgSSYjMzk7ZCB0eXBpY2FsbHkgZXhwZWN0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHRvIGNhdGNoIOKAkyBvciB0aGF0IHdvdWxkIHNpbXBseSByZXN1bHQgaW4gYSBrZXJuZWwgcGFuaWMgdGhhdCB0aGUgc3RhbmRhcmQgdGVzdGluZyBzdWl0ZSB3b3VsZCBmbGFnLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG15IHRoaW5raW5nLiBSaWdodCwgc28gYGJ1ZGR5X29yZGVyX3Vuc2FmZSgpYCBhbmQgYGNvbXBvdW5kX29yZGVyKClgIGFyZSBpbmRlZWQgJiMzNDt1bnNhZmUmIzM0OyBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IHJlYWQgd2l0aG91dCBsb2NraW5nLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyB0aGlzIGJ5IHZhbGlkYXRpbmcgdGhlIHJldHJpZXZlZCBgb3JkZXJgIHZhbHVlcyBhZ2FpbnN0IHJlYXNvbmFibGUgYm91bmRzLCBsaWtlIGBNQVhfUEFHRV9PUkRFUmAgYW5kIG1ha2luZyBzdXJlIHRoYXQgcGFnZSBmcmFtZSBudW1iZXIgY2FsY3VsYXRpb24gaXMgdmFsaWQsIGFuZCB0aGUgY29tcG91bmQgaGVhZCBpbmZvcm1hdGlvbi4gVGhpcyBtaXRpZ2F0ZXMgdGhlIHJpc2sgb2YgcmVhZGluZyBzdGFsZSBkYXRhIHdoaWNoIGNvdWxkIHRoZW4gbGVhZCB0byB0aG9zZSBvdXQtb2YtYm91bmRzIG9yIGluZmluaXRlIGxvb3AgcHJvYmxlbXMuIGBjb21wb3VuZF9oZWFkKHBhZ2UpYCBpcyBhbHNvIGhhbmRsZWQgc2ltaWxhcmx5LiBUaGlzIHByZXZlbnRzIHRoZSBjb2RlIGZyb20gdXNpbmcgaW52YWxpZCBkYXRhLgoKVGhlIGJ1Z3MgdGhpcyBwYXRjaCBhZGRyZXNzZXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgYXJlIGFsbCBhYm91dCBjb25jdXJyZW5jeSBhbmQgaW5jb25zaXN0ZW50IGRhdGEuIEl0JiMzOTtzIGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCB0aGUgY29uc2VxdWVuY2VzIG9mIHJhY3kgcmVhZHMgb24gcGFnZSBtZXRhZGF0YSwgd2hpY2ggYXJlIHdlbGwtdW5kZXJzdG9vZCBpc3N1ZXMgaW4ga2VybmVsIGRldmVsb3BtZW50LiBHaXZlbiBhbGwgdGhhdCwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBNeSBLTVNBTiByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcywgaW5maW5pdGUgbG9vcHMsIGJhZCBQRk4gY2FsY3VsYXRpb25zKSwgYnV0IHRoZXNlIGFyZW4mIzM5O3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGFzIHRoaXMgaXNuJiMzOTt0IGludHJvZHVjaW5nICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueSBkYXRhIGxlYWsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpc24mIzM5O3Qgd2FycmFudGVkIGluIHRoaXMgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCB3aGVyZSBwYWdlIG1ldGFkYXRhIChzdWNoIGFzIGJ1ZGR5IG9yZGVyIG9yIGNvbXBvdW5kIGhlYWQpIGlzIHJlYWQgd2l0aG91dCBsb2Nrcy4gUmFjeSByZWFkcyBjYW4gcmVzdWx0IGluIGludmFsaWQgdmFsdWVzLCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGluZmluaXRlIGxvb3BzLCBvciBpbmNvcnJlY3QgcGFnZSBmcmFtZSBudW1iZXIgKFBGTikgY2FsY3VsYXRpb25zLiBUaGUgY2hhbmdlcyBhZGQgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIGZvciB0aGUgcmVhZCB2YWx1ZXMgKGBvcmRlcmAsIGBoZWFkX3BmbmApIHRvIHByZXZlbnQgdGhlc2UgaXNzdWVzLlxuXG5UaGVzZSB0eXBlcyBvZiBidWdzIGFyZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChmb3Igb3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgKGZvciBjcmFzaGVzL2hhbmdzKS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjYXVzZSBhbiBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2hlcmUgcGFnZSBtZXRhZGF0YSAoc3VjaCBhcyBidWRkeSBvcmRlciBvciBjb21wb3VuZCBoZWFkKSBpcyByZWFkIHdpdGhvdXQgbG9ja3MuIFJhY3kgcmVhZHMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcywgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbmZpbml0ZSBsb29wcywgb3IgaW5jb3JyZWN0IHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYWRkIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBmb3IgdGhlIHJlYWQgdmFsdWVzIChgb3JkZXJgLCBgaGVhZF9wZm5gKSB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy5cblxuVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMpIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChmb3IgY3Jhc2hlcy9oYW5ncykuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgY2F1c2UgYW4gaW5mby1sZWFrLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAyOjU2LjczNDkyNDk4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDMxNDAzNDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2hlcmUgcGFnZSBtZXRhZGF0YSAoc3VjaCBhcyBidWRkeSBvcmRlciBvciBjb21wb3VuZCBoZWFkKSBpcyByZWFkIHdpdGhvdXQgbG9ja3MuIFJhY3kgcmVhZHMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcywgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbmZpbml0ZSBsb29wcywgb3IgaW5jb3JyZWN0IHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYWRkIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBmb3IgdGhlIHJlYWQgdmFsdWVzIChgb3JkZXJgLCBgaGVhZF9wZm5gKSB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy5cXG5cXG5UaGVzZSB0eXBlcyBvZiBidWdzIGFyZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChmb3Igb3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgKGZvciBjcmFzaGVzL2hhbmdzKS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjYXVzZSBhbiBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgcmVzdWx0cyBvZiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKHBhZ2UgaXNvbGF0aW9uKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIChDTUEsIGdpZ2FudGljIGh1Z2VwYWdlcykgYW5kIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAyOjU2LjczNDkyOTYwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzY2MzgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDQ6MDI6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li45Y2Y3ZjkyMDExYmQzIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmNcXG4rKysgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXFxuQEAgLTM4NywxMyArMzg3LDE1IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XFxuLVxcdFxcdFxcdGludCBvcmRlciA9IGJ1ZGR5X29yZGVyKHBhZ2UpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XFxuIFxcbi1cXHRcXHRcXHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXFxuLVxcdFxcdFxcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcXHUwMDNjXFx1MDAzYyBvcmRlcikgXFx1MDAzZSBib3VuZGFyeV9wZm4pO1xcbi1cXG4tXFx0XFx0XFx0cGZuICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdC8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovXFxuK1xcdFxcdFxcdGlmIChvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgcGZuICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcikgXFx1MDAzYz0gYm91bmRhcnlfcGZuKSB7XFxuK1xcdFxcdFxcdFxcdHBmbiArPSAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC00MTIsMTAgKzQxNCwyOCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcXG4gXFx0XFx0aWYgKFBhZ2VDb21wb3VuZChwYWdlKSkge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4gPSBwYWdlX3RvX3BmbihoZWFkKTtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGNvbXBvdW5kX25yKGhlYWQpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihoZWFkKTtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4rXFxuK1xcdFxcdFxcdC8qIGNvbXBvdW5kX29yZGVyKCkgaXMgcmFjeS4gQ2FwIGl0IGF0IE1BWF9GT0xJT19PUkRFUi4gKi9cXG4rXFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgTUFYX0ZPTElPX09SREVSKVxcbitcXHRcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4rXFxuK1xcdFxcdFxcdG5yX3BhZ2VzID0gMVVMIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogY29tcG91bmRfaGVhZCgpIGlzIGFsc28gcmFjeSwgc28gdGhlIGRlcml2ZWQgaGVhZF9wZm5cXG4rXFx0XFx0XFx0ICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLlxcbitcXHRcXHRcXHQgKiBPdGhlcndpc2UsIGp1c3QgZmFpbCB0aGUgY2hlY2suIHBmbiBjb21lcyBmcm9tXFxuK1xcdFxcdFxcdCAqIF9fZmlyc3RfdmFsaWRfcGFnZSgpIGFzIGEgbGVnaXRpbWF0ZSBQRk4sIHNvIHVzZSBpdCB0b1xcbitcXHRcXHRcXHQgKiBjaGVjayBoZWFkX3Bmbi5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChoZWFkX3BmbiBcXHUwMDNlIHBmbiB8fCAhSVNfQUxJR05FRChoZWFkX3BmbiwgbnJfcGFnZXMpIHx8XFxuK1xcdFxcdFxcdCAgICBwZm4gLSBoZWFkX3BmbiBcXHUwMDNlPSBucl9wYWdlcylcXG4rXFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcbiBcXHRcXHRcXHRpZiAoaGVhZF9wZm4gKyBucl9wYWdlcyBcXHUwMDNjPSBib3VuZGFyeV9wZm4gfHxcXG4tXFx0XFx0XFx0ICAgIFBhZ2VIdWdlKHBhZ2UpKSB7XFxuK1xcdFxcdFxcdCAgICBQYWdlSHVnZShoZWFkKSkge1xcbiBcXHRcXHRcXHRcXHRwZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMjo1OC4wMDkzMDU0NjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5ODA0MzMzODE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgcmVzdWx0cyBvZiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKHBhZ2UgaXNvbGF0aW9uKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIChDTUEsIGdpZ2FudGljIGh1Z2VwYWdlcykgYW5kIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNDowMjo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li45Y2Y3ZjkyMDExYmQzIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuKysrIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyArMzg3LDE1IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHR9XG4gXG4gXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4gXG4tXHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuLVx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuLVxuLVx0XHRcdHBmbiArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovXG4rXHRcdFx0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHBmbiArICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2M9IGJvdW5kYXJ5X3Bmbikge1xuK1x0XHRcdFx0cGZuICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdH1cbiBcbiBcdFx0LypcbkBAIC00MTIsMTAgKzQxNCwyOCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcbiBcdFx0aWYgKFBhZ2VDb21wb3VuZChwYWdlKSkge1xuIFx0XHRcdHN0cnVjdCBwYWdlICpoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGNvbXBvdW5kX25yKGhlYWQpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKGhlYWQpO1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4rXG4rXHRcdFx0LyogY29tcG91bmRfb3JkZXIoKSBpcyByYWN5LiBDYXAgaXQgYXQgTUFYX0ZPTElPX09SREVSLiAqL1xuK1x0XHRcdGlmIChvcmRlciBcdTAwM2UgTUFYX0ZPTElPX09SREVSKVxuK1x0XHRcdFx0Z290byBmYWlsZWQ7XG4rXG4rXHRcdFx0bnJfcGFnZXMgPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogY29tcG91bmRfaGVhZCgpIGlzIGFsc28gcmFjeSwgc28gdGhlIGRlcml2ZWQgaGVhZF9wZm5cbitcdFx0XHQgKiBuZWVkcyBhZGRpdGlvbmFsIGNoZWNrcyB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuXG4rXHRcdFx0ICogT3RoZXJ3aXNlLCBqdXN0IGZhaWwgdGhlIGNoZWNrLiBwZm4gY29tZXMgZnJvbVxuK1x0XHRcdCAqIF9fZmlyc3RfdmFsaWRfcGFnZSgpIGFzIGEgbGVnaXRpbWF0ZSBQRk4sIHNvIHVzZSBpdCB0b1xuK1x0XHRcdCAqIGNoZWNrIGhlYWRfcGZuLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChoZWFkX3BmbiBcdTAwM2UgcGZuIHx8ICFJU19BTElHTkVEKGhlYWRfcGZuLCBucl9wYWdlcykgfHxcbitcdFx0XHQgICAgcGZuIC0gaGVhZF9wZm4gXHUwMDNlPSBucl9wYWdlcylcbitcdFx0XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0XHRcdGlmIChoZWFkX3BmbiArIG5yX3BhZ2VzIFx1MDAzYz0gYm91bmRhcnlfcGZuIHx8XG4tXHRcdFx0ICAgIFBhZ2VIdWdlKHBhZ2UpKSB7XG4rXHRcdFx0ICAgIFBhZ2VIdWdlKGhlYWQpKSB7XG4gXHRcdFx0XHRwZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDI6NTguMDA5MzA2OTg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1ODE2MTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgSXNvbGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZXkncmUgbWFraW5nIHNvbWUgZmFpcmx5IHRhcmdldGVkIGNoYW5nZXMgcmVsYXRlZCB0byBob3cgYGJ1ZGR5X29yZGVyYCBhbmQgYGNvbXBvdW5kX29yZGVyYCBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGlzb2xhdGlvbiBwcm9jZXNzLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHJlcGxhY2luZyB0aGUgdXNlIG9mIGBidWRkeV9vcmRlcmAgd2l0aCBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQsIGltcG9ydGFudGx5LCBhZGRpbmcgc29tZSB2YWxpZGF0aW9uIGFyb3VuZCBib3RoIHRoYXQgYW5kIGBjb21wb3VuZF9vcmRlcmAgYWxvbmdzaWRlIGBjb21wb3VuZF9oZWFkYC4gVGhpcyBpcywgZnVuY3Rpb25hbGx5IHNwZWFraW5nLCBhIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZS4gSXQncyBhIGtleSBwYXJ0IG9mIGhvdyB3ZSBoYW5kbGUgcGFnZSBpc29sYXRpb24uIEkgbmVlZCB0byBkaWcgaW50byBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpdHNlbGYgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhbHRlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgaXNvbGF0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDcyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDM6MDEuNjY3NDcwODMyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTM2NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2lzb2xhdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfaXNvbGF0aW9uLmM9MjgzPV9fZmlyc3RfdmFsaWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMjk4LS8qKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6Mjk5OiAqIGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jaygpIC0tIHRyaWVzIHRvIGlzb2xhdGUgYSBwYWdlYmxvY2sgdGhhdCBtaWdodCBiZVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzAwLSAqIHdpdGhpbiBhIGZyZWUgb3IgaW4tdXNlIHBhZ2UuXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwNC0gKiBAc2tpcF9pc29sYXRpb246XFx0dGhlIGZsYWcgdG8gc2tpcCB0aGUgcGFnZWJsb2NrIGlzb2xhdGlvbiBpbiBzZWNvbmRcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMwNTogKlxcdFxcdFxcdGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jaygpXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMDYtICpcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzE5LSAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MzIwOnN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzIxLVxcdFxcdFxcdGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUsIGJvb2wgaXNvbGF0ZV9iZWZvcmUsXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTUwMj1pbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxMy1cXHQvKiBpc29sYXRlIFtpc29sYXRlX3N0YXJ0LCBpc29sYXRlX3N0YXJ0ICsgcGFnZWJsb2NrX25yX3BhZ2VzKSBwYWdlYmxvY2sgKi9cXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUxNDpcXHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9zdGFydCwgbW9kZSwgZmFsc2UsXFxubW0vcGFnZV9pc29sYXRpb24uYy01MTUtXFx0XFx0XFx0c2tpcF9pc29sYXRpb24pO1xcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy01MjItXFx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9lbmQgLSBwYWdlYmxvY2tfbnJfcGFnZXMsIGlzb2xhdGVfZW5kKSBwYWdlYmxvY2sgKi9cXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUyMzpcXHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9lbmQsIG1vZGUsIHRydWUsIHNraXBfaXNvbGF0aW9uKTtcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyNC1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjAxLjcxMTYxMDM0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzU0NzY2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgUGFnZSBJc29sYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIG9idmlvdXNseSBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIGl0IGdldHMgY2FsbGVkIGJ5IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgdGhhdCdzIGEgcHJldHR5IHN0YW5kYXJkIGFwcHJvYWNoLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpsYXJnZXIqIGNvbnRleHQuIEknbSB0aGlua2luZywgd2hvJ3MgaW5pdGlhdGluZyB0aGlzIHdob2xlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBsYWNlPyBUaW1lIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYC4gR290dGEgc2VlIHdoZXJlICp0aGF0KiBjb21lcyBmcm9tLiBLbm93aW5nIHRoZSBlbnRyeSBwb2ludCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgd29ya2Zsb3csIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIHdoZXJlIEkgc2hvdWxkIGJlIGxvb2tpbmcgdG8gb3B0aW1pemUuIExldCdzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzowNS41NDcwODkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTIzOTU2OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaD02MT1ib29sIHBhZ2VibG9ja191bmlzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02Mi1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg6NjM6aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02NC1cXHRcXHRcXHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTAyPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTY4LVxcdC8qIHNldCBhYm92ZSByYW5nZSBhcyBpc29sYXRlZCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTk2OTpcXHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk3MC1cXHRcXHRcXHRcXHQgICAgICAgUEJfSVNPTEFURV9NT0RFX01FTV9PRkZMSU5FKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MTA4PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MTQ0LVxcdCAqIGhhdmUgZGlmZmVyZW50IHNpemVzLCBhbmQgZHVlIHRvIHRoZSB3YXkgcGFnZSBhbGxvY2F0b3JcXG5tbS9wYWdlX2FsbG9jLmM6NzE0NTpcXHQgKiB3b3JrLCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSBoYXMgc3BlY2lhbCBoYW5kbGluZ3MgZm9yIHRoaXMuXFxubW0vcGFnZV9hbGxvYy5jLTcxNDYtXFx0ICpcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MTYxLVxcbm1tL3BhZ2VfYWxsb2MuYzo3MTYyOlxcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydCwgZW5kLCBtb2RlKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzE2My1cXHRpZiAocmV0KVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYz0zMjA9c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2Ni0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjQ2NzogKiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSAtIG1hcmsgcGFnZSByYW5nZSBNSUdSQVRFX0lTT0xBVEVcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2OC0gKiBAc3RhcnRfcGZuOlxcdFxcdFRoZSBmaXJzdCBQRk4gb2YgdGhlIHJhbmdlIHRvIGJlIGlzb2xhdGVkLlxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy01MDEtICovXFxubW0vcGFnZV9pc29sYXRpb24uYzo1MDI6aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTAzLVxcdFxcdFxcdCAgICAgZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSlcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTQ1LS8qKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTQ2OiAqIHVuZG9faXNvbGF0ZV9wYWdlX3JhbmdlIC0gdW5kbyBlZmZlY3RzIG9mIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpXFxubW0vcGFnZV9pc29sYXRpb24uYy01NDctICogQHN0YXJ0X3BmbjpcXHRcXHRUaGUgZmlyc3QgUEZOIG9mIHRoZSBpc29sYXRlZCByYW5nZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzowNy4yOTk0OTEwNDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk2ODc5MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBTdHJhdGVnaWVzKipcblxuT2theSwgc28gSSBzZWUgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgYmVpbmcgY2FsbGVkIGluIHR3byBzcGVjaWZpYyBjb250ZXh0czogYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBnaXZlcyBtZSBzb21lIGltbWVkaWF0ZSBkaXJlY3Rpb24uIExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpcyBjbGVhcmx5IHRoZSB3b3JraG9yc2UgaGVyZSBmb3IgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbi4gSSdtIHRoaW5raW5nIENNQSwgZ2lnYW50aWMgaHVnZXBhZ2VzLCB0aGluZ3MgdGhhdCAqbmVlZCogcGh5c2ljYWxseSBhZGphY2VudCBtZW1vcnkgcmVnaW9ucy4gTWFrZXMgc2Vuc2UuIEdpdmVuIHRoZSBcIm5vIHByb2ZcIiBzdWZmaXgsIEkgc3VzcGVjdCB0aGlzIGlzIGEgY3JpdGljYWwgcGF0aCBhbmQgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLCB3aGVyZSBhbnkgcHJvZmlsaW5nIG92ZXJoZWFkIHdvdWxkIGJlIHVuZGVzaXJhYmxlLlxuXG5gb2ZmbGluZV9wYWdlc2AgaXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBiZWFzdDogbWVtb3J5IGhvdHBsdWcuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGR5bmFtaWNhbGx5IHJlbW92aW5nIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uIEl0J3MgdXNlZCBmb3IgdGFraW5nIHBhZ2VzIG9mZmxpbmUsIHBlcmhhcHMgZm9yIGhhcmR3YXJlIGZhaWx1cmUsIG1haW50ZW5hbmNlLCBvciByZXNvdXJjZSByZS1hbGxvY2F0aW9uLlxuXG5TbywgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgc2VlbXMgdG8gYmUgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIHVzZWQgYnkgdGhlc2UgdHdvIHF1aXRlIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMsIG9uZSBmb3IgaW5pdGlhbCBhbGxvY2F0aW9uIGFuZCB0aGUgb3RoZXIgZm9yIGR5bmFtaWMgcmVtb3ZhbCwgcGVyaGFwcyB0byBmYWNpbGl0YXRlIHRoZSBhbGxvY2F0aW9uIGluIHRoZSBmaXJzdCBwbGFjZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpbiBtb3JlIGRldGFpbC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBjb250aWd1b3VzIG1lbW9yeSBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgaW4gd2hhdCBzY2VuYXJpb3MgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgaXMgdWx0aW1hdGVseSBiZWluZyB1c2VkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB2YWxpZGF0ZSBhbmQgcmVmaW5lIG15IG1lbnRhbCBtb2RlbCBvZiB0aGVzZSBzeXN0ZW1zLCBhbmQgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE3NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjEyLjA5NjM3MjQ4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxMzU1MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9NDQzPXR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBhY3JfZmxhZ3NfdDtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDQ3LS8qIFRoZSBiZWxvdyBmdW5jdGlvbnMgbXVzdCBiZSBydW4gb24gYSByYW5nZSBmcm9tIGEgc2luZ2xlIHpvbmUuICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NDg6aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDQ5LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC00NTAtI2RlZmluZSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlKC4uLilcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTE6XFx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcwODA9c3RhdGljIHZvaWQgX19mcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzEwNy0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NzEwODppbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vcGFnZV9hbGxvYy5jLTcxMDktXFx0XFx0YWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNDUtfVxcbm1tL3BhZ2VfYWxsb2MuYzo3MjQ2OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MjQ3LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyNjU9aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI3Mi1cXG5tbS9wYWdlX2FsbG9jLmM6NzI3MzpcXHRyZXQgPSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZihzdGFydCwgZW5kLCBhbGxvY19mbGFncywgZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy03Mjc0LVxcdGlmICghcmV0KVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTczNjQ9c3RydWN0IHBhZ2UgKmFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzM5Mi1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxubW0vcGFnZV9hbGxvYy5jOjczOTM6XFx0XFx0XFx0XFx0cmV0ID0gYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YocGZuLFxcbm1tL3BhZ2VfYWxsb2MuYy03Mzk0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdHBmbiArIG5yX3BhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzoxMy43MTc3MzE5MjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTE0Nzk2ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGdpZ2FudGljIHBhZ2VzIGFyZWEuIFRoZSBjb2RlIGluIHF1ZXN0aW9uLCB3aGljaCBpcyByZWFjaGVkIHRocm91Z2ggYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGFuZCBgYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZgLCBpcyBkZWZpbml0ZWx5IHdpdGhpbiBjb3JlIGtlcm5lbCBsb2dpYyDigJMgd2hpY2ggbWVhbnMgdGhpcyBpcyBzZXJpb3VzLiBJdOKAmXMgdXNlZCBieSBDTUEgYW5kIGdpZ2FudGljIHBhZ2VzLCBzbyBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGFyZSBvbiB0aGUgbGluZS5cblxuVGhlIGNydXggb2YgdGhlIGlzc3VlIGFwcGVhcnMgdG8gYmUgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AuIEl0IHNlZW1zIHRoYXQgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGNvdWxkIGxlYWQgdG8gYGJ1ZGR5X29yZGVyYCBhbmQgYGNvbXBvdW5kX29yZGVyYCByZXR1cm5pbmcgaW52YWxpZCB2YWx1ZXMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGJ1ZywgYW5kIGNvdWxkIGxlYWQgdG8gc2lnbmlmaWNhbnQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBUaGUgcGF0Y2gsIHRoYW5rZnVsbHksIGlzIGFkZGluZyB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXRlcm1pbmVkIG9yZGVyIHN0YXlzIHdpdGhpbiBib3VuZHMsIGFuZCB0aGF0IHRoZSBwaHlzaWNhbCBmcmFtZSBudW1iZXJzIChQRk5zKSBhcmUgYWxzbyB2YWxpZCBhZnRlciB0aGUgZnVuY3Rpb24gY29tcGxldGVzLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCBiZSBzdWJ0bHkgaW1wYWN0ZnVsLCBhbmQgdGhlcmVmb3JlIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBmdXp6aW5nIGFuZCByaWdvcm91cyB0ZXN0aW5nLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgZml4IGEgYml0IGJldHRlci4gRm9jdXNpbmcgb24gdGhlIHN5bWJvbHMgSSBzZWUsIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIHN0YXRpYywgd2hpY2ggdGVsbHMgbWUgaXRzIHVzYWdlIGlzIGxvY2FsaXplZCwgd2hlcmVhcyBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgLCBgYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZmAsIGFuZCBgb2ZmbGluZV9wYWdlc2AgYXJlIG5vbi1zdGF0aWMg4oCTIG1lYW5pbmcgdGhleSdyZSBhY2Nlc3NpYmxlIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgZmlsZS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGlzIGFmZmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjIwLjIzMjUzMTE2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MzM3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfaXNvbGF0aW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9pc29sYXRpb24uYz0yODM9X19maXJzdF92YWxpZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy0yOTgtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzoyOTk6ICogaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKCkgLS0gdHJpZXMgdG8gaXNvbGF0ZSBhIHBhZ2VibG9jayB0aGF0IG1pZ2h0IGJlXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMDAtICogd2l0aGluIGEgZnJlZSBvciBpbi11c2UgcGFnZS5cXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA0LSAqIEBza2lwX2lzb2xhdGlvbjpcXHR0aGUgZmxhZyB0byBza2lwIHRoZSBwYWdlYmxvY2sgaXNvbGF0aW9uIGluIHNlY29uZFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MzA1OiAqXFx0XFx0XFx0aXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKClcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwNi0gKlxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMTktICovXFxubW0vcGFnZV9pc29sYXRpb24uYzozMjA6c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMjEtXFx0XFx0XFx0ZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSwgYm9vbCBpc29sYXRlX2JlZm9yZSxcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9NTAyPWludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTEzLVxcdC8qIGlzb2xhdGUgW2lzb2xhdGVfc3RhcnQsIGlzb2xhdGVfc3RhcnQgKyBwYWdlYmxvY2tfbnJfcGFnZXMpIHBhZ2VibG9jayAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTE0OlxcdHJldCA9IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayhpc29sYXRlX3N0YXJ0LCBtb2RlLCBmYWxzZSxcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxNS1cXHRcXHRcXHRza2lwX2lzb2xhdGlvbik7XFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyMi1cXHQvKiBpc29sYXRlIFtpc29sYXRlX2VuZCAtIHBhZ2VibG9ja19ucl9wYWdlcywgaXNvbGF0ZV9lbmQpIHBhZ2VibG9jayAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTIzOlxcdHJldCA9IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayhpc29sYXRlX2VuZCwgbW9kZSwgdHJ1ZSwgc2tpcF9pc29sYXRpb24pO1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTI0LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDM6MjAuMjc3MTY5MDIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjY2MjU5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbW0vcGFnZV9pc29sYXRpb24uY2AgRW50cnkgUG9pbnQqKlxuXG5SaWdodCwgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIOKAkyB0aGF0J3MgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgdGhlIHdob2xlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MsIHdoaWNoIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIEJlZm9yZSBJIGRpdmUgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24gaXRzZWxmLCBsZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBzb3VyY2UgdHJlZSBhbmQgYnVpbGQgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogYENPTkZJR2Agb3B0aW9ucyBhdCBwbGF5IHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBjb21waWxlIHNlY3Rpb25zIG9mIHRoaXMgZmlsZSBvciBldmVuIHRoZSBlbnRpcmUgbW9kdWxlLiBLbm93aW5nIHRoZSBwb3RlbnRpYWwgY29tcGlsZS10aW1lIHZhcmlhdGlvbnMgaXMgY3J1Y2lhbDsgSSBkb24ndCB3YW50IHRvIG1pc3MgYW55IGVkZ2UgY2FzZXMgb3IgYWx0ZXJuYXRpdmUgYmVoYXZpb3JzIGRlZmluZWQgYnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJcyB0aGlzIGZpbGUgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgb3IgYXJlIHRoZXJlIGNpcmN1bXN0YW5jZXMgd2hlcmUgaXQncyBleGNsdWRlZCBiYXNlZCBvbiBwYXJ0aWN1bGFyIGBDT05GSUdgIGZsYWdzPyBUaGF0J3MgbXkgZmlyc3QgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzoyNC4zMDM3OTc5MzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTkyNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfaXNvbGF0aW9uXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMTc9b2JqLSQoQ09ORklHX1BBR0VfT1dORVIpICs9IHBhZ2Vfb3duZXIub1xcbm1tL01ha2VmaWxlOjExODpvYmotJChDT05GSUdfTUVNT1JZX0lTT0xBVElPTikgKz0gcGFnZV9pc29sYXRpb24ub1xcbm1tL01ha2VmaWxlLTExOS1vYmotJChDT05GSUdfWlNNQUxMT0MpXFx0Kz0genNtYWxsb2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzoyNC4zNTMwMDQ0MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY2MTcxMjY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IElzb2xhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHByb21wdCBtZW50aW9ucyBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gLiBSaWdodCwgSSBrbm93IHRoYXQgb25lLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIHRoYXQgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGRldGVybWluZSB3aGV0aGVyIGBDT05GSUdfTUVNT1JZX0lTT0xBVElPTmAgaXMgZW5hYmxlZCBvciBub3QuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgb3IgcGVyaGFwcyB1c2UgYSBjb25maWd1cmF0aW9uIHRvb2wgdG8gdHJhY2sgZG93biB0aGUgZGVwZW5kZW5jaWVzLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgcHJlcmVxdWlzaXRlcyBhbmQgaW1wbGljYXRpb25zIGJlZm9yZSB1c2luZyBpdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW50ZW5kZWQgdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDM6MjcuMDE0NzE5MzkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY3ODE3Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSVNPTEFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NDk5PWNvbmZpZyBOVU1BX0tFRVBfTUVNSU5GT1xcbi0tXFxubW0vS2NvbmZpZy01MDEtXFxubW0vS2NvbmZpZzo1MDI6Y29uZmlnIE1FTU9SWV9JU09MQVRJT05cXG5tbS9LY29uZmlnLTUwMy1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjI4LjQ4MjU0MDgwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY4MDYzNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIEhlcmUncyBhIHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkLCBzdGFydGluZyB3aXRoIGEgYm9sZGVkIGhlYWRlcjpcblxuKipBbmFseXppbmcgdGhlIFNlbGVjdGlvbiBDcml0ZXJpYSoqXG5cbkFscmlnaHQsIHNvIEknbSBwcmVzZW50ZWQgd2l0aCBhIHNlbGVjdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHBpbnBvaW50ICp3aGF0KiBpcyBkcml2aW5nIHRoYXQgc2VsZWN0aW9uLiBJIG5lZWQgdG8gYnJlYWsgZG93biB0aGUgZmFjdG9ycyBhdCBwbGF5LiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzLCB0aGUgZGVmaW5pbmcgY2hhcmFjdGVyaXN0aWNzLCB0aGUgdW5kZXJseWluZyBwcmluY2lwbGVzIHRoYXQgYXJlIGxlYWRpbmcgdG8gdGhpcyBwYXJ0aWN1bGFyIGNob2ljZT8gQW0gSSBsb29raW5nIGF0IGEgZGlyZWN0IGFwcGxpY2F0aW9uIG9mIHJ1bGVzLCB0aGUgaW5mbHVlbmNlIG9mIGltcGxpY2l0IGJpYXNlcywgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBzdWJ0bGUgYW5kIG51YW5jZWQ/IEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBkZWNpc2lvbi1tYWtpbmcgbW9kZWxzLCBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGFnYWluc3QgbXkgZXhpc3Rpbmcga25vd2xlZGdlIGJhc2UgYW5kIGV4cGVyaWVuY2UuIFRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50IHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy4gSXTigJlzIGFsbCBhYm91dCBmaWd1cmluZyBvdXQgdGhlIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjMxLjM1MDYwNjYyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NTkwNDU4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUyMz1tZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MjQtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxubW0vS2NvbmZpZzo1MjU6XFx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cXG5tbS9LY29uZmlnLTUyNi1cXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuLS1cXG5tbS9LY29uZmlnPTEwNjc9Y29uZmlnIENNQVxcbi0tXFxubW0vS2NvbmZpZy0xMDcwLVxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnOjEwNzE6XFx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cXG5tbS9LY29uZmlnLTEwNzItXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzozMi43OTY1MTc0NTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3Nzg0NjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnMuXG5cbioqTWVtb3J5IEFsbG9jYXRpb24gU3RyYXRlZ3kgRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgd2UgbmVlZCBoZXJlLiBDbGVhcmx5LCB3ZSdyZSBnb2luZyB0byBuZWVkIGVpdGhlciBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCBvciBgQ09ORklHX0NNQWAgdG8gbWFrZSB0aGlzIHdvcmsgc21vb3RobHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB3aGljaCBvZiB0aG9zZSBpcyBlbmFibGVkLCBhbmQgbWF5YmUgZXZlbiBsb29rIGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYm90aCwgaWYgd2UgbmVlZCB0byB3ZWlnaCB0aGVtIGFnYWluc3QgZWFjaCBvdGhlci4gSXQncyBhIHF1ZXN0aW9uIG9mIGZsZXhpYmlsaXR5IHZlcnN1cyBwZXJmb3JtYW5jZSwgdHlwaWNhbGx5LlxuXG5JJ20gYWxzbyBoYXZpbmcgYSBsaXR0bGUgZGlnIGFyb3VuZCBgQ09ORklHX0NPTlRJR19BTExPQ2AuIEkgdGhpbmsgdGhlcmUgbWlnaHQgYmUgc29tZSBvdmVybGFwIHRoZXJlLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgdHdvIHdpbGwgYmUgY3J1Y2lhbC4gQ29udGlndW91cyBhbGxvY2F0aW9uIGNvdWxkIGJlIGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGlzIHB1enpsZSwgZGVwZW5kaW5nIG9uIGhvdyB3ZSB3YW50IHRvIGNhcnZlIHVwIHRoZSBhZGRyZXNzIHNwYWNlLiBOZWVkIHRvIGNsYXJpZnkgdGhlIHJvbGVzIG9mIHRoZXNlLCByZWxhdGl2ZSB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbGF5b3V0IHdlJ3JlIHRhcmdldGluZy4gR290IHRvIGNvbnNpZGVyIGhvdyB0aG9zZSBpbnRlcmFjdCB0byBnZXQgdGhlIGlkZWFsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjM2Ljk3NDM2NjUxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTQzMDA1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09OVElHX0FMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbi0tXFxubW0vS2NvbmZpZy03MTgtXFxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xcbm1tL0tjb25maWctNzIwLVxcdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFxcdTAwMjZcXHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzozOC40MTM4MDMzNjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0OTU4ODMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgTUVNT1JZX0lTT0xBVElPTmAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIEl0J3MgdGhlIGx5bmNocGluLCBpdCBzZWVtcy4gQW5kIEknbSBsb29raW5nIGF0IGhvdyBpdCdzIGVuYWJsZWQuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBvZiBqdXN0IHRocm93aW5nIGBNRU1PUllfSVNPTEFUSU9OYCwgYENNQWAsIGFuZCBgTUVNT1JZX0hPVFBMVUdgIGludG8gYEVuYWJsZUNvbmZpZ3NgLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiBgTUVNT1JZX0lTT0xBVElPTmAgaXMgYSBib29sZWFuIHdpdGggbm8gZGlyZWN0IHByb21wdCEgVGhhdCBtZWFucyB0aGUgdXNlciBjYW4ndCAqZGlyZWN0bHkqIGVuYWJsZSBpdC4gSXQgZ2V0cyBhY3RpdmF0ZWQgdmlhIGBNRU1PUllfSE9UUExVR2Agb3IgYENNQWAuIFRoYXQgY2hhbmdlcyB0aGluZ3MuXG5cblRoZXJlZm9yZSwgdGhlIGNvcnJlY3QgYXBwcm9hY2ggaXMgdG8gaW5jbHVkZSBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQncyB0aGUgd2F5IHRvIGdpdmUgdGhlIHVzZXIgY29udHJvbCBvdmVyIHRoZSBiZWhhdmlvciBJJ20gYWZ0ZXIsIGluZGlyZWN0bHkuXG5cbk5vdywganVzdCB0byBiZSBzdXJlLCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGFsbG9jYXRpb24gcm91dGluZXMgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGFuZCBgYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZXNlIHBhcmFtZXRlcnMgZmFjdG9yIGludG8gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzo0My4zNjMzOTQ1OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDg2NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz03MjQ2PUVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNjQtICovXFxubW0vcGFnZV9hbGxvYy5jOjcyNjU6aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXFx0XFx0XFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNzgtfVxcbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTcyODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjQzLjQwOTg4NDI5N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk2MTY2Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHBlcnNwZWN0aXZlIG9uIHRoYXQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBtaW5kJ3MgYXV0b21hdGljYWxseSBqdW1waW5nIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoYXQgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGF0IG5hbWUsIHNvIEknbSBsaWtlbHkga25lZS1kZWVwIGluIHNvbWUgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb3IgcG9zc2libHkgZGVidWdnaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgaG93IHRoYXQgZnVuY3Rpb24gb3BlcmF0ZXMuIFdoYXQncyB0aGUgY29udGV4dCBJJ20gaW4/IElzIHRoaXMgYWJvdXQgYm9vdC10aW1lIGFsbG9jYXRpb24sIG9yIHJ1bnRpbWU/IFdoYXTigJlzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBhbmQgYXJlIHRoZXJlIGFueSBudWFuY2VzIHRoZXJlIEkgbmVlZCB0byBjb25zaWRlcj8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0cmFkZS1vZmZzIGludm9sdmVkIGluIHVzaW5nIGNvbnRpZ3VvdXMgbWVtb3J5IOKAkyBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiwgYW5kIHBvc3NpYmxlIHBlcmZvcm1hbmNlIGJlbmVmaXRzIGRlcGVuZGluZyBvbiB0aGUgd29ya2xvYWQuIExldCdzIHNlZSB3aGF0IEkgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjQ2LjcwNjA1MzIzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MzkwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTc0MTg9RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzQzNS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NzQzNjpzdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9wYWdlX2FsbG9jLmMtNzQzNy1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03NDUwLX1cXG5tbS9wYWdlX2FsbG9jLmM6NzQ1MTpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy03NDUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzo0Ni43NTA1OTQ2NDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxMjc2ODYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IEhvdHBsdWcqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gb2ZmbGluZSBwYWdlcywgYW5kIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhlIGBtbS9tZW1vcnlfaG90cGx1Zy5jYCBmaWxlIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zLCBpbmNsdWRpbmcgdGhlIGhhbmRsaW5nIG9mIHBhZ2UgcmVtb3ZhbCBhbmQgcG90ZW50aWFsbHkgdGhlaXIgb2ZmbGluZSBzdGF0dXMsIHdvdWxkIHJlc2lkZS4gSSdtIGdvaW5nIHRvIGhlYWQgdGhlcmUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NjMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzo0OS41NjMzNjU1MjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Mjc4NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxpbmVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTUzOT12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODMtICogc3VyZSB0aGF0IHBhZ2VzIGFyZSBtYXJrZWQgcmVzZXJ2ZWQgYW5kIHpvbmVzIGFyZSBhZGp1c3QgcHJvcGVybHkgYnlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU4NDogKiBjYWxsaW5nIG9mZmxpbmVfcGFnZXMoKS5cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU4NS0gKi9cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg5MD1zdGF0aWMgaW50IGNvdW50X3N5c3RlbV9yYW1fcGFnZXNfY2IodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDEtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTAyOmludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTkwMy1cXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjQ5LjYwODY0NjA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzMwNzIzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9scyAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZXhhbWluZS4gVGhlIGltbWVkaWF0ZSBmb2N1cyBzaG91bGQgYmUgb24gYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBtZWNoYW5pc21zIEknbSBpbnRlcmVzdGVkIGluLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmYXJlbid0IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgIGFscmVhZHkgZXhwb3J0ZWQ/IEkgY291bGQgaGF2ZSBzd29ybiB0aGV5IHdlcmUuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0OyBJIGRvbuKAmXQgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgc2hhZG93cy4gQW5kIHdoYXQgYWJvdXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWA/IEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4cG9ydCBzdGF0dXMgYXMgd2VsbC4gSSBkb24ndCB3YW50IHRvIG92ZXJsb29rIHNvbWV0aGluZyBmdW5kYW1lbnRhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE0NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzo1NC4xODE3MjA0MzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzkxNDEyOTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDM6NTYuMDYwODcwMDk2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjU1MTgwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IExvY2F0aW5nIHRoZSBSZWxldmFudCBDb2RlKipcblxuQWxyaWdodCwgc28gdGhlIHRoaW5nIGlzbid0ICpleHBvcnRlZCog4oCTIHRoYXQncyB0aGUgZmlyc3QgY3J1Y2lhbCBjbHVlLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCdzICpub24tc3RhdGljKiBjaGFuZ2VzIHRoZSBnYW1lLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgcG9zc2liaWxpdGllcyBzaWduaWZpY2FudGx5LiBNeSBpbW1lZGlhdGUgbmV4dCBtb3ZlIGlzIHRvIGRvdWJsZS1jaGVjayBgbW0vcGFnZV9pc29sYXRpb24uY2AuIEkga25vdyB0aGF0J3MgYSBjZW50cmFsIGFyZWEgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgbm9uLXN0YXRpYyB0aGluZ3Mgb2Z0ZW4gcmVzaWRlIHRoZXJlLCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBrZXJuZWwgZmVhdHVyZS4gSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNyb3NzLXJlZmVyZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjU5LjYyNjM5MDY0NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNTMzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfaXNvbGF0aW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9pc29sYXRpb24uYz0zMjA9c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2Ni0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjQ2NzogKiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSAtIG1hcmsgcGFnZSByYW5nZSBNSUdSQVRFX0lTT0xBVEVcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2OC0gKiBAc3RhcnRfcGZuOlxcdFxcdFRoZSBmaXJzdCBQRk4gb2YgdGhlIHJhbmdlIHRvIGJlIGlzb2xhdGVkLlxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy01MDEtICovXFxubW0vcGFnZV9pc29sYXRpb24uYzo1MDI6aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTAzLVxcdFxcdFxcdCAgICAgZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSlcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTQ1LS8qKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTQ2OiAqIHVuZG9faXNvbGF0ZV9wYWdlX3JhbmdlIC0gdW5kbyBlZmZlY3RzIG9mIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpXFxubW0vcGFnZV9pc29sYXRpb24uYy01NDctICogQHN0YXJ0X3BmbjpcXHRcXHRUaGUgZmlyc3QgUEZOIG9mIHRoZSBpc29sYXRlZCByYW5nZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzo1OS42NzE3NDYwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY4MjIxNjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBEeW5hbWljIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGlzbid0IGZpeGVkOyBpdCdzIGR5bmFtaWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBtYW5hZ2luZyBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGlzIHZvbGF0aWxlIGNvbnRleHQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIGNvbnRpZ3VvdXMsIGZyb3plbiByYW5nZSBhbGxvY2F0aW9uLCBsaWtlbHkgd2l0aG91dCBwZXJmb3JtYW5jZSBwcm9maWxpbmcgb3ZlcmhlYWQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0IHJlYWN0cyB0byB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhpcyBjb250ZXh0LiBJIGV4cGVjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gdGhlIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgdGhpcyBpcyBhbiBpbXBvcnRhbnQgcG9pbnQgdG8gY29uc2lkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NDAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowNDowMy4wMzk5NzA3MTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTUxNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NzA4MD1zdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX2Zyb3plbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MTA3LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo3MTA4OmludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9wYWdlX2FsbG9jLmMtNzEwOS1cXHRcXHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI0NS19XFxubW0vcGFnZV9hbGxvYy5jOjcyNDY6RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTcyNDctXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzI2NT1pbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MjcyLVxcbm1tL3BhZ2VfYWxsb2MuYzo3MjczOlxcdHJldCA9IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHN0YXJ0LCBlbmQsIGFsbG9jX2ZsYWdzLCBnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTcyNzQtXFx0aWYgKCFyZXQpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzM2ND1zdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YodW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MzkyLVxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5tbS9wYWdlX2FsbG9jLmM6NzM5MzpcXHRcXHRcXHRcXHRyZXQgPSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZihwZm4sXFxubW0vcGFnZV9hbGxvYy5jLTczOTQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0cGZuICsgbnJfcGFnZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjAzLjA4NzEyNDI5NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5MjA4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBhbmQgYSBTaW1pbGFyIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgaXMgYWxzbyBleHBvcnRlZCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGFuZCBleGFtaW5lIGBhbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZmAuIEl0J3MgbGlrZWx5IGNsb3NlbHkgcmVsYXRlZCwgbWF5YmUgZXZlbiBhIHNpbXBsZXIgdmVyc2lvbiBvZiB0aGUgZmlyc3QgZnVuY3Rpb24sIG9yIHBlcmhhcHMgaXQgYWRkcmVzc2VzIGEgZGlmZmVyZW50IGxldmVsIG9mIGdyYW51bGFyaXR5LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIHRoZSBcIm5vcHJvZlwiIHN1ZmZpeCBwcm9iYWJseSBtZWFucyBpdCdzIGZvciBub24tcHJvZmlsZWQgYWxsb2NhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgY2FzZS4gVGhpcyB0ZWxscyBtZSBhYm91dCBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgYWxsb2NhdGlvbiBsYW5kc2NhcGUgd2l0aGluIG91ciBjdXJyZW50IHN5c3RlbS4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gQXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBvciBzcGVjaWZpYyBmb3IgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVudCB0YXNrcz8gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjA2LjUxNjMzNDk3MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MDQxNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz03MzMwPXN0YXRpYyBib29sIHpvbmVfc3BhbnNfbGFzdF9wZm4oY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzM2My0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NzM2NDpzdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YodW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5tbS9wYWdlX2FsbG9jLmMtNzM2NS1cXHRcXHRnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzQxNy19XFxubW0vcGFnZV9hbGxvYy5jOjc0MTg6RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTc0MTktXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzQzNj1zdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03NDQzLVxcbm1tL3BhZ2VfYWxsb2MuYzo3NDQ0OlxcdHBhZ2UgPSBhbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZihucl9wYWdlcywgZ2ZwX21hc2ssIG5pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNzQ0NS1cXHRcXHRcXHRcXHRcXHRcXHRub2RlbWFzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjA2LjU1OTk0NDkxNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTMwODExMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBSb3V0aW5lcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBhbGxvY2F0aW9uIHJvdXRpbmVzIGluIHBsYXkgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxpc3QgdGhlIG9uZXMgdGhhdCBzZWVtIGRpcmVjdGx5IHJlbGV2YW50OiBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgYW5kIGBvZmZsaW5lX3BhZ2VzYC4gSG93ZXZlciwgSSBzZWUgYSBwYXR0ZXJuLiBJdCBsb29rcyBsaWtlIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgIGFyZSBzaW1wbHkgd3JhcHBlcnMsIGEgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gb24gdG9wIG9mIHNvbWV0aGluZyBlbHNlLiBJJ2xsIGluY2x1ZGUgdGhlbSBpbiB0aGUgbGlzdCB0b28sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBjYWxsIGhpZXJhcmNoeS4gU28sIHRoZSByZXZpc2VkIGxpc3QgaXM6IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYW5kIGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSBpZiBgYWxsb2NfY29udGlnX3JhbmdlYCBhbmQgYGFsbG9jX2NvbnRpZ19wYWdlc2AgYXJlIG1hY3JvcywgYmVjYXVzZSB0aGF0IGFmZmVjdHMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgcnVudGltZSBiZWhhdmlvci4gTGV0J3MgY2hlY2sgdGhhdCBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDQ6MTEuNDkwNzU4NDYyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM4Mzg5OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgYWxsb2NfY29udGlnX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9NDUzPWludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTU6I2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ni1cXHRhbGxvY19ob29rcyhhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDQ6MTIuOTI5MTU3MzY0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMzQyNDM5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVbmRlcmx5aW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIGluZGVlZCBtYWNyb3MuIFRoZXkncmUgYmFzaWNhbGx5IHdyYXBwZXJzIGFyb3VuZCB0aG9zZSBgX25vcHJvZmAgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHRoZSBhY3R1YWwgZnVuY3Rpb24gY2FsbHMgZm9yIG1lIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgLCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgLCBhbmQgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mYC4gUmlnaHQsIGdvdCBpdC4gTm93IEkgd2FudCB0byBxdWlja2x5IHJldmlldyB0aGUgcmVsZXZhbnQgYEVuYWJsZUNvbmZpZ3NgLiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBhbmQgY29uZmlybSB3aGF0IHRoYXQgYE1FTU9SWV9IT1RQTFVHYCBjb25maWcgYWN0dWFsbHkgZG9lcy4gS2NvbmZpZywgaGVyZSBJIGNvbWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NDUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDQ6MjAuOTYzNDA0MDI2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5OTI0NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSE9UUExVR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tLVxcbm1tL0tjb25maWctNTIyLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTSdcXG5tbS9LY29uZmlnOjUyMzptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MjQtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjIyLjM5MzMzMzA3OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM1NTgzMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNZW1vcnkgSG90cGx1ZyBhbmQgQ01BIFJldmlldyoqXG5cblJpZ2h0LCBgTUVNT1JZX0hPVFBMVUdgIHJpbmdzIHRydWUgaW4gbXkgbWluZC4gVGhhdCdzIGRlZmluaXRlbHkgb24gdGhlIHJpZ2h0IHRyYWNrLiBHaXZlbiB0aGUgY29udGV4dCwgdGhvdWdoLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlJ3JlIGFsaWduZWQuIEJlZm9yZSBJIGdvIGZ1cnRoZXIgZG93biB0aGlzIHBhcnRpY3VsYXIgcmFiYml0IGhvbGUsIGxldCBtZSBqdXN0IHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgYENNQWAgY29uZmlndXJhdGlvbiBzZXR0aW5nIGluIHRoZSBLY29uZmlnLiBBIGRvdWJsZS1jaGVjayB0aGVyZSB3aWxsIGhlbHAgY2xhcmlmeSB0aGUgc3lzdGVtJ3MgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBlbnN1cmUgdGhlc2UgdHdvIGFyZWFzIGFsaWduIGNvcnJlY3RseS4gTm8gbmVlZCB0byBjaGFzZSBnaG9zdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTQzLCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDQ6MjguMDI4OTE4NTg5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM5MzI4NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDTUFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2RtYS9LY29uZmlnPTE3Mz1jb25maWcgRE1BX05VTUFfQ01BXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWctMTg1LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoxODY6Y29uZmlnIENNQV9TSVpFX1BFUk5VTUFcXG5rZXJuZWwvZG1hL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIkRlZmF1bHQgQ01BIGFyZWEgcGVyIE5VTUEgbm9kZVxcXCJcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZz0xOTY9Y29tbWVudCBcXFwiRGVmYXVsdCBjb250aWd1b3VzIG1lbW9yeSBhcmVhIHNpemU6XFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xOTctXFxua2VybmVsL2RtYS9LY29uZmlnOjE5ODpjb25maWcgQ01BX1NJWkVfTUJZVEVTXFxua2VybmVsL2RtYS9LY29uZmlnLTE5OS1cXHRpbnQgXFxcIlNpemUgaW4gTWVnYSBCeXRlc1xcXCJcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMDgtXFxua2VybmVsL2RtYS9LY29uZmlnOjIwOTpjb25maWcgQ01BX1NJWkVfUEVSQ0VOVEFHRVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMTAtXFx0aW50IFxcXCJQZXJjZW50YWdlIG9mIHRvdGFsIG1lbW9yeVxcXCJcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZz0yMjA9Y2hvaWNlXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWctMjIzLVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjQ6Y29uZmlnIENNQV9TSVpFX1NFTF9NQllURVNcXG5rZXJuZWwvZG1hL0tjb25maWctMjI1LVxcdGJvb2wgXFxcIlVzZSBtZWdhIGJ5dGVzIHZhbHVlIG9ubHlcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTIyNi1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjI3OmNvbmZpZyBDTUFfU0laRV9TRUxfUEVSQ0VOVEFHRVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjgtXFx0Ym9vbCBcXFwiVXNlIHBlcmNlbnRhZ2UgdmFsdWUgb25seVxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMjI5LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzA6Y29uZmlnIENNQV9TSVpFX1NFTF9NSU5cXG5rZXJuZWwvZG1hL0tjb25maWctMjMxLVxcdGJvb2wgXFxcIlVzZSBsb3dlciB2YWx1ZSAobWluaW11bSlcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTIzMi1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjMzOmNvbmZpZyBDTUFfU0laRV9TRUxfTUFYXFxua2VybmVsL2RtYS9LY29uZmlnLTIzNC1cXHRib29sIFxcXCJVc2UgaGlnaGVyIHZhbHVlIChtYXhpbXVtKVxcXCJcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZz0yMzY9ZW5kY2hvaWNlXFxua2VybmVsL2RtYS9LY29uZmlnLTIzNy1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjM4OmNvbmZpZyBDTUFfQUxJR05NRU5UXFxua2VybmVsL2RtYS9LY29uZmlnLTIzOS1cXHRpbnQgXFxcIk1heGltdW0gUEFHRV9TSVpFIG9yZGVyIG9mIGFsaWdubWVudCBmb3IgY29udGlndW91cyBidWZmZXJzXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMDY0PWNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxcbi0tXFxubW0vS2NvbmZpZy0xMDY2LVxcbm1tL0tjb25maWc6MTA2Nzpjb25maWcgQ01BXFxubW0vS2NvbmZpZy0xMDY4LVxcdGJvb2wgXFxcIkNvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4MS1cXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXFxubW0vS2NvbmZpZy0xMDgzLVxcdGJvb2wgXFxcIkNNQSBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4Ny1cXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xcbm1tL0tjb25maWctMTA4OS1cXHRib29sIFxcXCJDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwOTQtXFxubW0vS2NvbmZpZzoxMDk1OmNvbmZpZyBDTUFfQVJFQVNcXG5tbS9LY29uZmlnLTEwOTYtXFx0aW50IFxcXCJNYXhpbXVtIGNvdW50IG9mIHRoZSBDTUEgYXJlYXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjI5LjQ2ODI1MTM3MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTA5OTIzMDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHllcywgdGhlIGluaXRpYWwgYXNzZXNzbWVudCByZWdhcmRpbmcgdGhlIHVzZSBvZiBgQ01BYCBpcyBzcG90LW9uLiBXZSdyZSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgYSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYC4gVGhlIGNydXggb2YgdGhlIGZpeCBsaWVzIGluIHZlcmlmeWluZyB0aGUgb3V0cHV0cyBvZiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYCwgY3JpdGljYWwgY29tcG9uZW50cyBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQsIG1vcmUgcHJlY2lzZWx5LCBpbiB0aGUgcGFnZSBpc29sYXRpb24gcHJvY2Vzcy5cblxuTm93LCBsb29raW5nIGF0IHRoZSBzeW1ib2xzLCB3ZSBoYXZlIGEgY2xlYXIgc2V0IG9mIGZvY3VzIHBvaW50czogYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGFsb25nIHdpdGggdmFyaW91cyBgYWxsb2NfY29udGlnXy4uLl9ub3Byb2ZgIGFuZCBgb2ZmbGluZV9wYWdlc2AuIFRoZXNlIHBvaW50IGRpcmVjdGx5IHRvIHRoZSBhcmVhIG9mIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gKENNQSkgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBpc29sYXRpb24gcHJvY2Vzcy4gRnVydGhlciwgd2Ugc2VlIGBhbGxvY19jb250aWdfZnJvemVuXy4uLl9ub3Byb2ZgIHdoaWNoIGluZGljYXRlcyB0aGF0IGZyb3plbiBwYWdlcyBhcmUgaW52b2x2ZWQuXG5cblRoZSBlbmFibGVtZW50IGNvbmZpZ3VyYXRpb25zLCBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCwgYXJlIHRoZSBrZXlzLiBUaGUgcGF0Y2gncyBpbXBhY3QgaXMgdGllZCBkaXJlY3RseSB0byBob3cgY29udGlndW91cyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBwYXJ0aWN1bGFybHkgd2l0aCBnaWdhbnRpYyBodWdlcGFnZXMsIGFuZCBob3cgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyBpbXBhY3QgdGhlIGlzb2xhdGlvbiBtZWNoYW5pc20uIFRoZSBpbXBhY3Qgb2YgdGhlc2UgaXMgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGUgcGF0Y2gsIHRoZXJlZm9yZSwgaW1wYWN0cyB0aGUgQ01BIG1lY2hhbmlzbS5cblxuU28sIGxldCdzIGNhbGwgdGhpcyBzZXQgb2YgaW5mb3JtYXRpb24gJ3NldC1yZXN1bHRzJy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzUsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjM1Ljk3ODE3NjgzNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDY0NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgcmVzdWx0cyBvZiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKHBhZ2UgaXNvbGF0aW9uKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIChDTUEsIGdpZ2FudGljIGh1Z2VwYWdlcykgYW5kIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiLFxuICAgIFwiYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZcIixcbiAgICBcImFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mXCIsXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGJ5IHZhbGlkYXRpbmcgdGhlIHJlc3VsdHMgb2YgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGBjb21wb3VuZF9vcmRlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChwYWdlIGlzb2xhdGlvbiksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiAoQ01BLCBnaWdhbnRpYyBodWdlcGFnZXMpIGFuZCBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowNDozNi4wNTI2NDgzMloiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5OTYzMDM0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowNDozNi4wNTMxODI2OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDk5NTc2NTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCB3aGVyZSBwYWdlIG1ldGFkYXRhIChzdWNoIGFzIGJ1ZGR5IG9yZGVyIG9yIGNvbXBvdW5kIGhlYWQpIGlzIHJlYWQgd2l0aG91dCBsb2Nrcy4gUmFjeSByZWFkcyBjYW4gcmVzdWx0IGluIGludmFsaWQgdmFsdWVzLCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGluZmluaXRlIGxvb3BzLCBvciBpbmNvcnJlY3QgcGFnZSBmcmFtZSBudW1iZXIgKFBGTikgY2FsY3VsYXRpb25zLiBUaGUgY2hhbmdlcyBhZGQgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIGZvciB0aGUgcmVhZCB2YWx1ZXMgKGBvcmRlcmAsIGBoZWFkX3BmbmApIHRvIHByZXZlbnQgdGhlc2UgaXNzdWVzLlxcblxcblRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKGZvciBvdXQtb2YtYm91bmRzKSBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyAoZm9yIGNyYXNoZXMvaGFuZ3MpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGNhdXNlIGFuIGluZm8tbGVhay4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNDowMjo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li45Y2Y3ZjkyMDExYmQzIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuKysrIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyArMzg3LDE1IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHR9XG4gXG4gXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4gXG4tXHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuLVx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuLVxuLVx0XHRcdHBmbiArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovXG4rXHRcdFx0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHBmbiArICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2M9IGJvdW5kYXJ5X3Bmbikge1xuK1x0XHRcdFx0cGZuICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdH1cbiBcbiBcdFx0LypcbkBAIC00MTIsMTAgKzQxNCwyOCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcbiBcdFx0aWYgKFBhZ2VDb21wb3VuZChwYWdlKSkge1xuIFx0XHRcdHN0cnVjdCBwYWdlICpoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGNvbXBvdW5kX25yKGhlYWQpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKGhlYWQpO1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4rXG4rXHRcdFx0LyogY29tcG91bmRfb3JkZXIoKSBpcyByYWN5LiBDYXAgaXQgYXQgTUFYX0ZPTElPX09SREVSLiAqL1xuK1x0XHRcdGlmIChvcmRlciBcdTAwM2UgTUFYX0ZPTElPX09SREVSKVxuK1x0XHRcdFx0Z290byBmYWlsZWQ7XG4rXG4rXHRcdFx0bnJfcGFnZXMgPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogY29tcG91bmRfaGVhZCgpIGlzIGFsc28gcmFjeSwgc28gdGhlIGRlcml2ZWQgaGVhZF9wZm5cbitcdFx0XHQgKiBuZWVkcyBhZGRpdGlvbmFsIGNoZWNrcyB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuXG4rXHRcdFx0ICogT3RoZXJ3aXNlLCBqdXN0IGZhaWwgdGhlIGNoZWNrLiBwZm4gY29tZXMgZnJvbVxuK1x0XHRcdCAqIF9fZmlyc3RfdmFsaWRfcGFnZSgpIGFzIGEgbGVnaXRpbWF0ZSBQRk4sIHNvIHVzZSBpdCB0b1xuK1x0XHRcdCAqIGNoZWNrIGhlYWRfcGZuLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChoZWFkX3BmbiBcdTAwM2UgcGZuIHx8ICFJU19BTElHTkVEKGhlYWRfcGZuLCBucl9wYWdlcykgfHxcbitcdFx0XHQgICAgcGZuIC0gaGVhZF9wZm4gXHUwMDNlPSBucl9wYWdlcylcbitcdFx0XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0XHRcdGlmIChoZWFkX3BmbiArIG5yX3BhZ2VzIFx1MDAzYz0gYm91bmRhcnlfcGZuIHx8XG4tXHRcdFx0ICAgIFBhZ2VIdWdlKHBhZ2UpKSB7XG4rXHRcdFx0ICAgIFBhZ2VIdWdlKGhlYWQpKSB7XG4gXHRcdFx0XHRwZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDQ6MzYuMDUzMTgzNjExWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTk1NzQ4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJlYXNvbmluZyAtIE5vIE5lZWQgZm9yIERlZGljYXRlZCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaW5kaWNhdGVzIGl0J3MgYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMsIHNwZWNpZmljYWxseSB0aG9zZSBhcmlzaW5nIGZyb20gY29uY3VycmVudCBhY2Nlc3MgdG8gcGFnZSBtZXRhZGF0YS4gSXQncyBlc3NlbnRpYWxseSByZXBsYWNpbmcgY2FsbHMgbGlrZSBgYnVkZHlfb3JkZXIocGFnZSlgIHdpdGggYGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKWAgYW5kIGRvaW5nIHRoZSBzYW1lIGZvciBjb21wb3VuZCBwYWdlIGluZm9ybWF0aW9uLCBhbmQgYWRkaW5nIHZhbGlkYXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIHJlYWRpbmcgaW5jb25zaXN0ZW50IHZhbHVlcyBkdWUgdG8gdGhlc2UgcmFjZSBjb25kaXRpb25zLlxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IG5ldyBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG5vciBkb2VzIGl0IGxlYWsgYW55IHNlbnNpdGl2ZSBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0J3Mgc3RyaWN0bHkgYWJvdXQgc2FmZWd1YXJkaW5nIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyByZWFkcywgaW5maW5pdGUgbG9vcHMsIG9yIGNyYXNoZXMgdHJpZ2dlcmVkIGJ5IHJlYWRpbmcgcGFnZSBtZXRhZGF0YSBjb25jdXJyZW50bHkuIFRoZXNlIGFyZSB0aGUga2luZHMgb2YgaXNzdWVzIHRoYXQgSSdkIHR5cGljYWxseSBleHBlY3QgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgdG8gY2F0Y2gg4oCTIG9yIHRoYXQgd291bGQgc2ltcGx5IHJlc3VsdCBpbiBhIGtlcm5lbCBwYW5pYyB0aGF0IHRoZSBzdGFuZGFyZCB0ZXN0aW5nIHN1aXRlIHdvdWxkIGZsYWcuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBteSB0aGlua2luZy4gUmlnaHQsIHNvIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgYW5kIGBjb21wb3VuZF9vcmRlcigpYCBhcmUgaW5kZWVkIFwidW5zYWZlXCIgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSByZWFkIHdpdGhvdXQgbG9ja2luZy4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgdGhpcyBieSB2YWxpZGF0aW5nIHRoZSByZXRyaWV2ZWQgYG9yZGVyYCB2YWx1ZXMgYWdhaW5zdCByZWFzb25hYmxlIGJvdW5kcywgbGlrZSBgTUFYX1BBR0VfT1JERVJgIGFuZCBtYWtpbmcgc3VyZSB0aGF0IHBhZ2UgZnJhbWUgbnVtYmVyIGNhbGN1bGF0aW9uIGlzIHZhbGlkLCBhbmQgdGhlIGNvbXBvdW5kIGhlYWQgaW5mb3JtYXRpb24uIFRoaXMgbWl0aWdhdGVzIHRoZSByaXNrIG9mIHJlYWRpbmcgc3RhbGUgZGF0YSB3aGljaCBjb3VsZCB0aGVuIGxlYWQgdG8gdGhvc2Ugb3V0LW9mLWJvdW5kcyBvciBpbmZpbml0ZSBsb29wIHByb2JsZW1zLiBgY29tcG91bmRfaGVhZChwYWdlKWAgaXMgYWxzbyBoYW5kbGVkIHNpbWlsYXJseS4gVGhpcyBwcmV2ZW50cyB0aGUgY29kZSBmcm9tIHVzaW5nIGludmFsaWQgZGF0YS5cblxuVGhlIGJ1Z3MgdGhpcyBwYXRjaCBhZGRyZXNzZXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgYXJlIGFsbCBhYm91dCBjb25jdXJyZW5jeSBhbmQgaW5jb25zaXN0ZW50IGRhdGEuIEl0J3MgYWJvdXQgcHJvdGVjdGluZyBhZ2FpbnN0IHRoZSBjb25zZXF1ZW5jZXMgb2YgcmFjeSByZWFkcyBvbiBwYWdlIG1ldGFkYXRhLCB3aGljaCBhcmUgd2VsbC11bmRlcnN0b29kIGlzc3VlcyBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQuIEdpdmVuIGFsbCB0aGF0LCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIE15IEtNU0FOIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIG1lbW9yeSBzYWZldHkgaXNzdWVzIChvdXQtb2YtYm91bmRzLCBpbmZpbml0ZSBsb29wcywgYmFkIFBGTiBjYWxjdWxhdGlvbnMpLCBidXQgdGhlc2UgYXJlbid0IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50LCBhcyB0aGlzIGlzbid0IGludHJvZHVjaW5nICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueSBkYXRhIGxlYWsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpc24ndCB3YXJyYW50ZWQgaW4gdGhpcyBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY5LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjQ3LjA0ODkzNDcyNloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCB3aGVyZSBwYWdlIG1ldGFkYXRhIChzdWNoIGFzIGJ1ZGR5IG9yZGVyIG9yIGNvbXBvdW5kIGhlYWQpIGlzIHJlYWQgd2l0aG91dCBsb2Nrcy4gUmFjeSByZWFkcyBjYW4gcmVzdWx0IGluIGludmFsaWQgdmFsdWVzLCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGluZmluaXRlIGxvb3BzLCBvciBpbmNvcnJlY3QgcGFnZSBmcmFtZSBudW1iZXIgKFBGTikgY2FsY3VsYXRpb25zLiBUaGUgY2hhbmdlcyBhZGQgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIGZvciB0aGUgcmVhZCB2YWx1ZXMgKGBvcmRlcmAsIGBoZWFkX3BmbmApIHRvIHByZXZlbnQgdGhlc2UgaXNzdWVzLlxcblxcblRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKGZvciBvdXQtb2YtYm91bmRzKSBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyAoZm9yIGNyYXNoZXMvaGFuZ3MpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGNhdXNlIGFuIGluZm8tbGVhay4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2hlcmUgcGFnZSBtZXRhZGF0YSAoc3VjaCBhcyBidWRkeSBvcmRlciBvciBjb21wb3VuZCBoZWFkKSBpcyByZWFkIHdpdGhvdXQgbG9ja3MuIFJhY3kgcmVhZHMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcywgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbmZpbml0ZSBsb29wcywgb3IgaW5jb3JyZWN0IHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYWRkIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBmb3IgdGhlIHJlYWQgdmFsdWVzIChgb3JkZXJgLCBgaGVhZF9wZm5gKSB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy5cXG5cXG5UaGVzZSB0eXBlcyBvZiBidWdzIGFyZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChmb3Igb3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgKGZvciBjcmFzaGVzL2hhbmdzKS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjYXVzZSBhbiBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcd7x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 03:18:17 +0000 UTC FinishedAt: 2026-08-21 04:04:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "689c1f1f669abdff41a91aa13d6cb6e77759f0ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "689c1f1f669abdff41a91aa13d6cb6e77759f0ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG" ], "series_id": "7f6d38bf-8449-4902-a048-1013e149f53e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "start_isolate_page_range", "alloc_contig_range_noprof", "alloc_contig_pages_noprof", "alloc_contig_frozen_range_noprof", "alloc_contig_frozen_pages_noprof", "offline_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2hlcmUgcGFnZSBtZXRhZGF0YSAoc3VjaCBhcyBidWRkeSBvcmRlciBvciBjb21wb3VuZCBoZWFkKSBpcyByZWFkIHdpdGhvdXQgbG9ja3MuIFJhY3kgcmVhZHMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcywgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbmZpbml0ZSBsb29wcywgb3IgaW5jb3JyZWN0IHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYWRkIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBmb3IgdGhlIHJlYWQgdmFsdWVzIChgb3JkZXJgLCBgaGVhZF9wZm5gKSB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy5cblxuVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMpIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChmb3IgY3Jhc2hlcy9oYW5ncykuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgY2F1c2UgYW4gaW5mby1sZWFrLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBieSB2YWxpZGF0aW5nIHRoZSByZXN1bHRzIG9mIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCBgY29tcG91bmRfb3JkZXJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyAocGFnZSBpc29sYXRpb24pLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gKENNQSwgZ2lnYW50aWMgaHVnZXBhZ2VzKSBhbmQgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNDowMjo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuaW5kZXggMzJjZThhN2Q5ZGYzNS4uOWNmN2Y5MjAxMWJkMyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcbkBAIC0zODcsMTMgJiM0MzszODcsMTUgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG4gXHRcdH1cbiBcbiBcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdGludCBvcmRlciA9IGJ1ZGR5X29yZGVyKHBhZ2UpO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4gXG4tXHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuLVx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2UgYm91bmRhcnlfcGZuKTtcbi1cbi1cdFx0XHRwZm4gJiM0Mzs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdC8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovXG4mIzQzO1x0XHRcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgcGZuICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2M9IGJvdW5kYXJ5X3Bmbikge1xuJiM0MztcdFx0XHRcdHBmbiAmIzQzOz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFxuIFx0XHQvKlxuQEAgLTQxMiwxMCAmIzQzOzQxNCwyOCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcbiBcdFx0aWYgKFBhZ2VDb21wb3VuZChwYWdlKSkge1xuIFx0XHRcdHN0cnVjdCBwYWdlICpoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGNvbXBvdW5kX25yKGhlYWQpO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihoZWFkKTtcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIGNvbXBvdW5kX29yZGVyKCkgaXMgcmFjeS4gQ2FwIGl0IGF0IE1BWF9GT0xJT19PUkRFUi4gKi9cbiYjNDM7XHRcdFx0aWYgKG9yZGVyIFx1MDAzZSBNQVhfRk9MSU9fT1JERVIpXG4mIzQzO1x0XHRcdFx0Z290byBmYWlsZWQ7XG4mIzQzO1xuJiM0MztcdFx0XHRucl9wYWdlcyA9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBjb21wb3VuZF9oZWFkKCkgaXMgYWxzbyByYWN5LCBzbyB0aGUgZGVyaXZlZCBoZWFkX3BmblxuJiM0MztcdFx0XHQgKiBuZWVkcyBhZGRpdGlvbmFsIGNoZWNrcyB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuXG4mIzQzO1x0XHRcdCAqIE90aGVyd2lzZSwganVzdCBmYWlsIHRoZSBjaGVjay4gcGZuIGNvbWVzIGZyb21cbiYjNDM7XHRcdFx0ICogX19maXJzdF92YWxpZF9wYWdlKCkgYXMgYSBsZWdpdGltYXRlIFBGTiwgc28gdXNlIGl0IHRvXG4mIzQzO1x0XHRcdCAqIGNoZWNrIGhlYWRfcGZuLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGhlYWRfcGZuIFx1MDAzZSBwZm4gfHwgIUlTX0FMSUdORUQoaGVhZF9wZm4sIG5yX3BhZ2VzKSB8fFxuJiM0MztcdFx0XHQgICAgcGZuIC0gaGVhZF9wZm4gXHUwMDNlPSBucl9wYWdlcylcbiYjNDM7XHRcdFx0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdFx0XHRpZiAoaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXMgXHUwMDNjPSBib3VuZGFyeV9wZm4gfHxcbi1cdFx0XHQgICAgUGFnZUh1Z2UocGFnZSkpIHtcbiYjNDM7XHRcdFx0ICAgIFBhZ2VIdWdlKGhlYWQpKSB7XG4gXHRcdFx0XHRwZm4gPSBoZWFkX3BmbiAmIzQzOyBucl9wYWdlcztcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZiYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBieSB2YWxpZGF0aW5nIHRoZSByZXN1bHRzIG9mIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCBgY29tcG91bmRfb3JkZXJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyAocGFnZSBpc29sYXRpb24pLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gKENNQSwgZ2lnYW50aWMgaHVnZXBhZ2VzKSBhbmQgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwNDowMjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCmluZGV4IDMyY2U4YTdkOWRmMzUuLjljZjdmOTIwMTFiZDMgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pc29sYXRpb24uYwpAQCAtMzg3LDEzICYjNDM7Mzg3LDE1IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLAogCQl9CiAKIAkJaWYgKFBhZ2VCdWRkeShwYWdlKSkgewotCQkJaW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7CiYjNDM7CQkJdW5zaWduZWQgaW50IG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwogCi0JCQkvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovCi0JCQlWTV9XQVJOX09OX09OQ0UocGZuICYjNDM7ICgxICZsdDsmbHQ7IG9yZGVyKSAmZ3Q7IGJvdW5kYXJ5X3Bmbik7Ci0KLQkJCXBmbiAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwotCQkJY29udGludWU7CiYjNDM7CQkJLyogYnVkZHlfb3JkZXJfdW5zYWZlKCkgaXMgcmFjeS4gVmFsaWRhdGUgdGhlIG9yZGVyIGJlZm9yZSBzaGlmdGluZy4gKi8KJiM0MzsJCQlpZiAob3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBwZm4gJiM0MzsgKDFVTCAmbHQ7Jmx0OyBvcmRlcikgJmx0Oz0gYm91bmRhcnlfcGZuKSB7CiYjNDM7CQkJCXBmbiAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAogCQkvKgpAQCAtNDEyLDEwICYjNDM7NDE0LDI4IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLAogCQlpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7CiAJCQl1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7Ci0JCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gY29tcG91bmRfbnIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKJiM0MzsKJiM0MzsJCQkvKiBjb21wb3VuZF9vcmRlcigpIGlzIHJhY3kuIENhcCBpdCBhdCBNQVhfRk9MSU9fT1JERVIuICovCiYjNDM7CQkJaWYgKG9yZGVyICZndDsgTUFYX0ZPTElPX09SREVSKQomIzQzOwkJCQlnb3RvIGZhaWxlZDsKJiM0MzsKJiM0MzsJCQlucl9wYWdlcyA9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGNvbXBvdW5kX2hlYWQoKSBpcyBhbHNvIHJhY3ksIHNvIHRoZSBkZXJpdmVkIGhlYWRfcGZuCiYjNDM7CQkJICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgomIzQzOwkJCSAqIE90aGVyd2lzZSwganVzdCBmYWlsIHRoZSBjaGVjay4gcGZuIGNvbWVzIGZyb20KJiM0MzsJCQkgKiBfX2ZpcnN0X3ZhbGlkX3BhZ2UoKSBhcyBhIGxlZ2l0aW1hdGUgUEZOLCBzbyB1c2UgaXQgdG8KJiM0MzsJCQkgKiBjaGVjayBoZWFkX3Bmbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoaGVhZF9wZm4gJmd0OyBwZm4gfHwgIUlTX0FMSUdORUQoaGVhZF9wZm4sIG5yX3BhZ2VzKSB8fAomIzQzOwkJCSAgICBwZm4gLSBoZWFkX3BmbiAmZ3Q7PSBucl9wYWdlcykKJiM0MzsJCQkJZ290byBmYWlsZWQ7CiAKIAkJCWlmIChoZWFkX3BmbiAmIzQzOyBucl9wYWdlcyAmbHQ7PSBib3VuZGFyeV9wZm4gfHwKLQkJCSAgICBQYWdlSHVnZShwYWdlKSkgewomIzQzOwkJCSAgICBQYWdlSHVnZShoZWFkKSkgewogCQkJCXBmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzOwogCQkJCWNvbnRpbnVlOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDcyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBJc29sYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBtYWtpbmcgc29tZSBmYWlybHkgdGFyZ2V0ZWQgY2hhbmdlcyByZWxhdGVkIHRvIGhvdyBgYnVkZHlfb3JkZXJgIGFuZCBgY29tcG91bmRfb3JkZXJgIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgaXNvbGF0aW9uIHByb2Nlc3MuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgcmVwbGFjaW5nIHRoZSB1c2Ugb2YgYGJ1ZGR5X29yZGVyYCB3aXRoIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCwgaW1wb3J0YW50bHksIGFkZGluZyBzb21lIHZhbGlkYXRpb24gYXJvdW5kIGJvdGggdGhhdCBhbmQgYGNvbXBvdW5kX29yZGVyYCBhbG9uZ3NpZGUgYGNvbXBvdW5kX2hlYWRgLiBUaGlzIGlzLCBmdW5jdGlvbmFsbHkgc3BlYWtpbmcsIGEgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIGhvdyB3ZSBoYW5kbGUgcGFnZSBpc29sYXRpb24uIEkgbmVlZCB0byBkaWcgaW50byBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpdHNlbGYgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhbHRlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgaXNvbGF0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfaXNvbGF0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9pc29sYXRpb24uYz0yODM9X19maXJzdF92YWxpZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMjk4LS8qKlxubW0vcGFnZV9pc29sYXRpb24uYzoyOTk6ICogaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKCkgLS0gdHJpZXMgdG8gaXNvbGF0ZSBhIHBhZ2VibG9jayB0aGF0IG1pZ2h0IGJlXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwMC0gKiB3aXRoaW4gYSBmcmVlIG9yIGluLXVzZSBwYWdlLlxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA0LSAqIEBza2lwX2lzb2xhdGlvbjpcdHRoZSBmbGFnIHRvIHNraXAgdGhlIHBhZ2VibG9jayBpc29sYXRpb24gaW4gc2Vjb25kXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMwNTogKlx0XHRcdGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jaygpXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwNi0gKlxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzE5LSAqL1xubW0vcGFnZV9pc29sYXRpb24uYzozMjA6c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMyMS1cdFx0XHRlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlLCBib29sIGlzb2xhdGVfYmVmb3JlLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmM9NTAyPWludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxMy1cdC8qIGlzb2xhdGUgW2lzb2xhdGVfc3RhcnQsIGlzb2xhdGVfc3RhcnQgJiM0MzsgcGFnZWJsb2NrX25yX3BhZ2VzKSBwYWdlYmxvY2sgKi9cbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTE0Olx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfc3RhcnQsIG1vZGUsIGZhbHNlLFxubW0vcGFnZV9pc29sYXRpb24uYy01MTUtXHRcdFx0c2tpcF9pc29sYXRpb24pO1xuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTIyLVx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9lbmQgLSBwYWdlYmxvY2tfbnJfcGFnZXMsIGlzb2xhdGVfZW5kKSBwYWdlYmxvY2sgKi9cbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTIzOlx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfZW5kLCBtb2RlLCB0cnVlLCBza2lwX2lzb2xhdGlvbik7XG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyNC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBQYWdlIElzb2xhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIG9idmlvdXNseSBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIGl0IGdldHMgY2FsbGVkIGJ5IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBhcHByb2FjaC4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqbGFyZ2VyKiBjb250ZXh0LiBJJiMzOTttIHRoaW5raW5nLCB3aG8mIzM5O3MgaW5pdGlhdGluZyB0aGlzIHdob2xlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBsYWNlPyBUaW1lIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYC4gR290dGEgc2VlIHdoZXJlICp0aGF0KiBjb21lcyBmcm9tLiBLbm93aW5nIHRoZSBlbnRyeSBwb2ludCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgd29ya2Zsb3csIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIHdoZXJlIEkgc2hvdWxkIGJlIGxvb2tpbmcgdG8gb3B0aW1pemUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02Mi1cbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaDo2MzppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXHRcdFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTY4LVx0Lyogc2V0IGFib3ZlIHJhbmdlIGFzIGlzb2xhdGVkICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTcwLVx0XHRcdFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcxMDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTQ0LVx0ICogaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCBkdWUgdG8gdGhlIHdheSBwYWdlIGFsbG9jYXRvclxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XHQgKiB3b3JrLCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSBoYXMgc3BlY2lhbCBoYW5kbGluZ3MgZm9yIHRoaXMuXG5tbS9wYWdlX2FsbG9jLmMtNzE0Ni1cdCAqXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNjEtXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydCwgZW5kLCBtb2RlKTtcbm1tL3BhZ2VfYWxsb2MuYy03MTYzLVx0aWYgKHJldClcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTMyMD1zdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2Ni0vKipcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDY3OiAqIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIC0gbWFyayBwYWdlIHJhbmdlIE1JR1JBVEVfSVNPTEFURVxubW0vcGFnZV9pc29sYXRpb24uYy00NjgtICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgcmFuZ2UgdG8gYmUgaXNvbGF0ZWQuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MDEtICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUwMjppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwMy1cdFx0XHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01NDUtLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU0NjogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxubW0vcGFnZV9pc29sYXRpb24uYy01NDctICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTc1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIFN0cmF0ZWdpZXMqKgoKT2theSwgc28gSSBzZWUgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgYmVpbmcgY2FsbGVkIGluIHR3byBzcGVjaWZpYyBjb250ZXh0czogYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgZ2l2ZXMgbWUgc29tZSBpbW1lZGlhdGUgZGlyZWN0aW9uLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpcyBjbGVhcmx5IHRoZSB3b3JraG9yc2UgaGVyZSBmb3IgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbi4gSSYjMzk7bSB0aGlua2luZyBDTUEsIGdpZ2FudGljIGh1Z2VwYWdlcywgdGhpbmdzIHRoYXQgKm5lZWQqIHBoeXNpY2FsbHkgYWRqYWNlbnQgbWVtb3J5IHJlZ2lvbnMuIE1ha2VzIHNlbnNlLiBHaXZlbiB0aGUgJiMzNDtubyBwcm9mJiMzNDsgc3VmZml4LCBJIHN1c3BlY3QgdGhpcyBpcyBhIGNyaXRpY2FsIHBhdGggYW5kIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwgd2hlcmUgYW55IHByb2ZpbGluZyBvdmVyaGVhZCB3b3VsZCBiZSB1bmRlc2lyYWJsZS4KCmBvZmZsaW5lX3BhZ2VzYCBpcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGJlYXN0OiBtZW1vcnkgaG90cGx1Zy4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGR5bmFtaWNhbGx5IHJlbW92aW5nIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uIEl0JiMzOTtzIHVzZWQgZm9yIHRha2luZyBwYWdlcyBvZmZsaW5lLCBwZXJoYXBzIGZvciBoYXJkd2FyZSBmYWlsdXJlLCBtYWludGVuYW5jZSwgb3IgcmVzb3VyY2UgcmUtYWxsb2NhdGlvbi4KClNvLCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCBzZWVtcyB0byBiZSB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gdXNlZCBieSB0aGVzZSB0d28gcXVpdGUgZGlmZmVyZW50IG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgb25lIGZvciBpbml0aWFsIGFsbG9jYXRpb24gYW5kIHRoZSBvdGhlciBmb3IgZHluYW1pYyByZW1vdmFsLCBwZXJoYXBzIHRvIGZhY2lsaXRhdGUgdGhlIGFsbG9jYXRpb24gaW4gdGhlIGZpcnN0IHBsYWNlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpbiBtb3JlIGRldGFpbC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBjb250aWd1b3VzIG1lbW9yeSBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgaW4gd2hhdCBzY2VuYXJpb3MgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgaXMgdWx0aW1hdGVseSBiZWluZyB1c2VkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB2YWxpZGF0ZSBhbmQgcmVmaW5lIG15IG1lbnRhbCBtb2RlbCBvZiB0aGVzZSBzeXN0ZW1zLCBhbmQgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0Mz10eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgYWNyX2ZsYWdzX3Q7XG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC00NDctLyogVGhlIGJlbG93IGZ1bmN0aW9ucyBtdXN0IGJlIHJ1biBvbiBhIHJhbmdlIGZyb20gYSBzaW5nbGUgem9uZS4gKi9cbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDQ4OmludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDQ5LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaC00NTAtI2RlZmluZSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlKC4uLilcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MTpcdGFsbG9jX2hvb2tzKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MDgwPXN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTA3LSAqL1xubW0vcGFnZV9hbGxvYy5jOjcxMDg6aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcxMDktXHRcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI0NS19XG5tbS9wYWdlX2FsbG9jLmM6NzI0NjpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy03MjQ3LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MjY1PWludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MjcyLVxubW0vcGFnZV9hbGxvYy5jOjcyNzM6XHRyZXQgPSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZihzdGFydCwgZW5kLCBhbGxvY19mbGFncywgZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTcyNzQtXHRpZiAoIXJldClcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzM2ND1zdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YodW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzM5Mi1cdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG5tbS9wYWdlX2FsbG9jLmM6NzM5MzpcdFx0XHRcdHJldCA9IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHBmbixcbm1tL3BhZ2VfYWxsb2MuYy03Mzk0LVx0XHRcdFx0XHRcdFx0cGZuICYjNDM7IG5yX3BhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBnaWdhbnRpYyBwYWdlcyBhcmVhLiBUaGUgY29kZSBpbiBxdWVzdGlvbiwgd2hpY2ggaXMgcmVhY2hlZCB0aHJvdWdoIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgaXMgZGVmaW5pdGVseSB3aXRoaW4gY29yZSBrZXJuZWwgbG9naWMg4oCTIHdoaWNoIG1lYW5zIHRoaXMgaXMgc2VyaW91cy4gSXTigJlzIHVzZWQgYnkgQ01BIGFuZCBnaWdhbnRpYyBwYWdlcywgc28gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSBhcmUgb24gdGhlIGxpbmUuCgpUaGUgY3J1eCBvZiB0aGUgaXNzdWUgYXBwZWFycyB0byBiZSBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYC4gSXQgc2VlbXMgdGhhdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgY291bGQgbGVhZCB0byBgYnVkZHlfb3JkZXJgIGFuZCBgY29tcG91bmRfb3JkZXJgIHJldHVybmluZyBpbnZhbGlkIHZhbHVlcyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnLCBhbmQgY291bGQgbGVhZCB0byBzaWduaWZpY2FudCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZSBwYXRjaCwgdGhhbmtmdWxseSwgaXMgYWRkaW5nIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIGRldGVybWluZWQgb3JkZXIgc3RheXMgd2l0aGluIGJvdW5kcywgYW5kIHRoYXQgdGhlIHBoeXNpY2FsIGZyYW1lIG51bWJlcnMgKFBGTnMpIGFyZSBhbHNvIHZhbGlkIGFmdGVyIHRoZSBmdW5jdGlvbiBjb21wbGV0ZXMuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCBiZSBzdWJ0bHkgaW1wYWN0ZnVsLCBhbmQgdGhlcmVmb3JlIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBmdXp6aW5nIGFuZCByaWdvcm91cyB0ZXN0aW5nLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGZpeCBhIGJpdCBiZXR0ZXIuIEZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzIEkgc2VlLCBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpcyBzdGF0aWMsIHdoaWNoIHRlbGxzIG1lIGl0cyB1c2FnZSBpcyBsb2NhbGl6ZWQsIHdoZXJlYXMgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgIGFyZSBub24tc3RhdGljIOKAkyBtZWFuaW5nIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBmaWxlLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2l0aGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgYWZmZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfaXNvbGF0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9pc29sYXRpb24uYz0yODM9X19maXJzdF92YWxpZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMjk4LS8qKlxubW0vcGFnZV9pc29sYXRpb24uYzoyOTk6ICogaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKCkgLS0gdHJpZXMgdG8gaXNvbGF0ZSBhIHBhZ2VibG9jayB0aGF0IG1pZ2h0IGJlXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwMC0gKiB3aXRoaW4gYSBmcmVlIG9yIGluLXVzZSBwYWdlLlxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA0LSAqIEBza2lwX2lzb2xhdGlvbjpcdHRoZSBmbGFnIHRvIHNraXAgdGhlIHBhZ2VibG9jayBpc29sYXRpb24gaW4gc2Vjb25kXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMwNTogKlx0XHRcdGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jaygpXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwNi0gKlxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzE5LSAqL1xubW0vcGFnZV9pc29sYXRpb24uYzozMjA6c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMyMS1cdFx0XHRlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlLCBib29sIGlzb2xhdGVfYmVmb3JlLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmM9NTAyPWludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxMy1cdC8qIGlzb2xhdGUgW2lzb2xhdGVfc3RhcnQsIGlzb2xhdGVfc3RhcnQgJiM0MzsgcGFnZWJsb2NrX25yX3BhZ2VzKSBwYWdlYmxvY2sgKi9cbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTE0Olx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfc3RhcnQsIG1vZGUsIGZhbHNlLFxubW0vcGFnZV9pc29sYXRpb24uYy01MTUtXHRcdFx0c2tpcF9pc29sYXRpb24pO1xuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTIyLVx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9lbmQgLSBwYWdlYmxvY2tfbnJfcGFnZXMsIGlzb2xhdGVfZW5kKSBwYWdlYmxvY2sgKi9cbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTIzOlx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfZW5kLCBtb2RlLCB0cnVlLCBza2lwX2lzb2xhdGlvbik7XG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyNC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgbW0vcGFnZV9pc29sYXRpb24uY2AgRW50cnkgUG9pbnQqKgoKUmlnaHQsIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCDigJMgdGhhdCYjMzk7cyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciB0aGUgd2hvbGUgcGFnZSBpc29sYXRpb24gcHJvY2Vzcywgd2hpY2ggSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4gQmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGxldCBtZSBxdWlja2x5IHNjYW4gdGhlIHNvdXJjZSB0cmVlIGFuZCBidWlsZCBjb25maWd1cmF0aW9uLiBJIHdhbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBgQ09ORklHYCBvcHRpb25zIGF0IHBsYXkgdGhhdCBtaWdodCBjb25kaXRpb25hbGx5IGNvbXBpbGUgc2VjdGlvbnMgb2YgdGhpcyBmaWxlIG9yIGV2ZW4gdGhlIGVudGlyZSBtb2R1bGUuIEtub3dpbmcgdGhlIHBvdGVudGlhbCBjb21waWxlLXRpbWUgdmFyaWF0aW9ucyBpcyBjcnVjaWFsOyBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55IGVkZ2UgY2FzZXMgb3IgYWx0ZXJuYXRpdmUgYmVoYXZpb3JzIGRlZmluZWQgYnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJcyB0aGlzIGZpbGUgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgb3IgYXJlIHRoZXJlIGNpcmN1bXN0YW5jZXMgd2hlcmUgaXQmIzM5O3MgZXhjbHVkZWQgYmFzZWQgb24gcGFydGljdWxhciBgQ09ORklHYCBmbGFncz8gVGhhdCYjMzk7cyBteSBmaXJzdCBxdWVzdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9pc29sYXRpb25cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTExNz1vYmotJChDT05GSUdfUEFHRV9PV05FUikgJiM0Mzs9IHBhZ2Vfb3duZXIub1xubW0vTWFrZWZpbGU6MTE4Om9iai0kKENPTkZJR19NRU1PUllfSVNPTEFUSU9OKSAmIzQzOz0gcGFnZV9pc29sYXRpb24ub1xubW0vTWFrZWZpbGUtMTE5LW9iai0kKENPTkZJR19aU01BTExPQylcdCYjNDM7PSB6c21hbGxvYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgSXNvbGF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIHByb21wdCBtZW50aW9ucyBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gLiBSaWdodCwgSSBrbm93IHRoYXQgb25lLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIHRoYXQgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGRldGVybWluZSB3aGV0aGVyIGBDT05GSUdfTUVNT1JZX0lTT0xBVElPTmAgaXMgZW5hYmxlZCBvciBub3QuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMsIG9yIHBlcmhhcHMgdXNlIGEgY29uZmlndXJhdGlvbiB0b29sIHRvIHRyYWNrIGRvd24gdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBwcmVyZXF1aXNpdGVzIGFuZCBpbXBsaWNhdGlvbnMgYmVmb3JlIHVzaW5nIGl0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbnRlbmRlZCB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfSVNPTEFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NDk5PWNvbmZpZyBOVU1BX0tFRVBfTUVNSU5GT1xuLS1cbm1tL0tjb25maWctNTAxLVxubW0vS2NvbmZpZzo1MDI6Y29uZmlnIE1FTU9SWV9JU09MQVRJT05cbm1tL0tjb25maWctNTAzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTgzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBhIHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCwgc3RhcnRpbmcgd2l0aCBhIGJvbGRlZCBoZWFkZXI6CgoqKkFuYWx5emluZyB0aGUgU2VsZWN0aW9uIENyaXRlcmlhKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggYSBzZWxlY3Rpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBwaW5wb2ludCAqd2hhdCogaXMgZHJpdmluZyB0aGF0IHNlbGVjdGlvbi4gSSBuZWVkIHRvIGJyZWFrIGRvd24gdGhlIGZhY3RvcnMgYXQgcGxheS4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cywgdGhlIGRlZmluaW5nIGNoYXJhY3RlcmlzdGljcywgdGhlIHVuZGVybHlpbmcgcHJpbmNpcGxlcyB0aGF0IGFyZSBsZWFkaW5nIHRvIHRoaXMgcGFydGljdWxhciBjaG9pY2U/IEFtIEkgbG9va2luZyBhdCBhIGRpcmVjdCBhcHBsaWNhdGlvbiBvZiBydWxlcywgdGhlIGluZmx1ZW5jZSBvZiBpbXBsaWNpdCBiaWFzZXMsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc3VidGxlIGFuZCBudWFuY2VkPyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIGRlY2lzaW9uLW1ha2luZyBtb2RlbHMsIGNyb3NzLXJlZmVyZW5jaW5nIHRoaXMgYWdhaW5zdCBteSBleGlzdGluZyBrbm93bGVkZ2UgYmFzZSBhbmQgZXhwZXJpZW5jZS4gVGhpcyBpbml0aWFsIGFzc2Vzc21lbnQgd2lsbCBndWlkZSBteSBuZXh0IHN0ZXBzLiBJdOKAmXMgYWxsIGFib3V0IGZpZ3VyaW5nIG91dCB0aGUgcm9vdCBjYXVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE1FTU9SWV9JU09MQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01MjM9bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xubW0vS2NvbmZpZy01MjQtXHRib29sIFwmIzM0O01lbW9yeSBob3RwbHVnXCYjMzQ7XG5tbS9LY29uZmlnOjUyNTpcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG5tbS9LY29uZmlnLTUyNi1cdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbi0tXG5tbS9LY29uZmlnPTEwNjc9Y29uZmlnIENNQVxuLS1cbm1tL0tjb25maWctMTA3MC1cdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWc6MTA3MTpcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG5tbS9LY29uZmlnLTEwNzItXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMzMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zLgoKKipNZW1vcnkgQWxsb2NhdGlvbiBTdHJhdGVneSBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IHdlIG5lZWQgaGVyZS4gQ2xlYXJseSwgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgZWl0aGVyIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgIG9yIGBDT05GSUdfQ01BYCB0byBtYWtlIHRoaXMgd29yayBzbW9vdGhseS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHdoaWNoIG9mIHRob3NlIGlzIGVuYWJsZWQsIGFuZCBtYXliZSBldmVuIGxvb2sgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBib3RoLCBpZiB3ZSBuZWVkIHRvIHdlaWdoIHRoZW0gYWdhaW5zdCBlYWNoIG90aGVyLiBJdCYjMzk7cyBhIHF1ZXN0aW9uIG9mIGZsZXhpYmlsaXR5IHZlcnN1cyBwZXJmb3JtYW5jZSwgdHlwaWNhbGx5LgoKSSYjMzk7bSBhbHNvIGhhdmluZyBhIGxpdHRsZSBkaWcgYXJvdW5kIGBDT05GSUdfQ09OVElHX0FMTE9DYC4gSSB0aGluayB0aGVyZSBtaWdodCBiZSBzb21lIG92ZXJsYXAgdGhlcmUsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBvdGhlciB0d28gd2lsbCBiZSBjcnVjaWFsLiBDb250aWd1b3VzIGFsbG9jYXRpb24gY291bGQgYmUgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoaXMgcHV6emxlLCBkZXBlbmRpbmcgb24gaG93IHdlIHdhbnQgdG8gY2FydmUgdXAgdGhlIGFkZHJlc3Mgc3BhY2UuIE5lZWQgdG8gY2xhcmlmeSB0aGUgcm9sZXMgb2YgdGhlc2UsIHJlbGF0aXZlIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBsYXlvdXQgd2UmIzM5O3JlIHRhcmdldGluZy4gR290IHRvIGNvbnNpZGVyIGhvdyB0aG9zZSBpbnRlcmFjdCB0byBnZXQgdGhlIGlkZWFsIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTlRJR19BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwOT1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbi0tXG5tbS9LY29uZmlnLTcxOC1cbm1tL0tjb25maWc6NzE5OmNvbmZpZyBDT05USUdfQUxMT0Ncbm1tL0tjb25maWctNzIwLVx0ZGVmX2Jvb2wgKE1FTU9SWV9JU09MQVRJT04gXHUwMDI2XHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njk5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoaXMgYE1FTU9SWV9JU09MQVRJT05gIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIGl0IHNlZW1zLiBBbmQgSSYjMzk7bSBsb29raW5nIGF0IGhvdyBpdCYjMzk7cyBlbmFibGVkLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgb2YganVzdCB0aHJvd2luZyBgTUVNT1JZX0lTT0xBVElPTmAsIGBDTUFgLCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBpbnRvIGBFbmFibGVDb25maWdzYC4gQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gYE1FTU9SWV9JU09MQVRJT05gIGlzIGEgYm9vbGVhbiB3aXRoIG5vIGRpcmVjdCBwcm9tcHQhIFRoYXQgbWVhbnMgdGhlIHVzZXIgY2FuJiMzOTt0ICpkaXJlY3RseSogZW5hYmxlIGl0LiBJdCBnZXRzIGFjdGl2YXRlZCB2aWEgYE1FTU9SWV9IT1RQTFVHYCBvciBgQ01BYC4gVGhhdCBjaGFuZ2VzIHRoaW5ncy4KClRoZXJlZm9yZSwgdGhlIGNvcnJlY3QgYXBwcm9hY2ggaXMgdG8gaW5jbHVkZSBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQmIzM5O3MgdGhlIHdheSB0byBnaXZlIHRoZSB1c2VyIGNvbnRyb2wgb3ZlciB0aGUgYmVoYXZpb3IgSSYjMzk7bSBhZnRlciwgaW5kaXJlY3RseS4KCk5vdywganVzdCB0byBiZSBzdXJlLCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGFsbG9jYXRpb24gcm91dGluZXMgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGFuZCBgYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZXNlIHBhcmFtZXRlcnMgZmFjdG9yIGludG8gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXHRcdFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgcGVyc3BlY3RpdmUgb24gdGhhdCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgbWluZCYjMzk7cyBhdXRvbWF0aWNhbGx5IGp1bXBpbmcgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGF0IGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhhdCBuYW1lLCBzbyBJJiMzOTttIGxpa2VseSBrbmVlLWRlZXAgaW4gc29tZSBwZXJmb3JtYW5jZSBhbmFseXNpcyBvciBwb3NzaWJseSBkZWJ1Z2dpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhhdCBmdW5jdGlvbiBvcGVyYXRlcy4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBJJiMzOTttIGluPyBJcyB0aGlzIGFib3V0IGJvb3QtdGltZSBhbGxvY2F0aW9uLCBvciBydW50aW1lPyBXaGF04oCZcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW5kIGFyZSB0aGVyZSBhbnkgbnVhbmNlcyB0aGVyZSBJIG5lZWQgdG8gY29uc2lkZXI/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgdHJhZGUtb2ZmcyBpbnZvbHZlZCBpbiB1c2luZyBjb250aWd1b3VzIG1lbW9yeSDigJMgcG90ZW50aWFsIGZyYWdtZW50YXRpb24sIGFuZCBwb3NzaWJsZSBwZXJmb3JtYW5jZSBiZW5lZml0cyBkZXBlbmRpbmcgb24gdGhlIHdvcmtsb2FkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgSSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19jb250aWdfcGFnZXNfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz03NDE4PUVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy03NDM1LSAqL1xubW0vcGFnZV9hbGxvYy5jOjc0MzY6c3RydWN0IHBhZ2UgKmFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2YodW5zaWduZWQgbG9uZyBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9wYWdlX2FsbG9jLmMtNzQzNy1cdFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vcGFnZV9hbGxvYy5jLTc0NTAtfVxubW0vcGFnZV9hbGxvYy5jOjc0NTE6RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy03NDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzYzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IEhvdHBsdWcqKgoKT2theSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIG9mZmxpbmUgcGFnZXMsIGFuZCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoZSBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgZmlsZSBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMsIGluY2x1ZGluZyB0aGUgaGFuZGxpbmcgb2YgcGFnZSByZW1vdmFsIGFuZCBwb3RlbnRpYWxseSB0aGVpciBvZmZsaW5lIHN0YXR1cywgd291bGQgcmVzaWRlLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgdGhlcmUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9NTM5PXZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODMtICogc3VyZSB0aGF0IHBhZ2VzIGFyZSBtYXJrZWQgcmVzZXJ2ZWQgYW5kIHpvbmVzIGFyZSBhZGp1c3QgcHJvcGVybHkgYnlcbm1tL21lbW9yeV9ob3RwbHVnLmM6NTg0OiAqIGNhbGxpbmcgb2ZmbGluZV9wYWdlcygpLlxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODUtICovXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xODkwPXN0YXRpYyBpbnQgY291bnRfc3lzdGVtX3JhbV9wYWdlc19jYih1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDEtICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5MDI6aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDMtXHRcdFx0c3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTQ1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbHMgLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZXhhbWluZS4gVGhlIGltbWVkaWF0ZSBmb2N1cyBzaG91bGQgYmUgb24gYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBtZWNoYW5pc21zIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4KCkhhbmcgb24gYSBzZWNvbmTigKZhcmVuJiMzOTt0IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgIGFscmVhZHkgZXhwb3J0ZWQ/IEkgY291bGQgaGF2ZSBzd29ybiB0aGV5IHdlcmUuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0OyBJIGRvbuKAmXQgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgc2hhZG93cy4gQW5kIHdoYXQgYWJvdXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWA/IEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4cG9ydCBzdGF0dXMgYXMgd2VsbC4gSSBkb24mIzM5O3Qgd2FudCB0byBvdmVybG9vayBzb21ldGhpbmcgZnVuZGFtZW50YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IExvY2F0aW5nIHRoZSBSZWxldmFudCBDb2RlKioKCkFscmlnaHQsIHNvIHRoZSB0aGluZyBpc24mIzM5O3QgKmV4cG9ydGVkKiDigJMgdGhhdCYjMzk7cyB0aGUgZmlyc3QgY3J1Y2lhbCBjbHVlLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm9uLXN0YXRpYyogY2hhbmdlcyB0aGUgZ2FtZS4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHBvc3NpYmlsaXRpZXMgc2lnbmlmaWNhbnRseS4gTXkgaW1tZWRpYXRlIG5leHQgbW92ZSBpcyB0byBkb3VibGUtY2hlY2sgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLiBJIGtub3cgdGhhdCYjMzk7cyBhIGNlbnRyYWwgYXJlYSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBub24tc3RhdGljIHRoaW5ncyBvZnRlbiByZXNpZGUgdGhlcmUsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGtlcm5lbCBmZWF0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNyb3NzLXJlZmVyZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9pc29sYXRpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2lzb2xhdGlvbi5jPTMyMD1zdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2Ni0vKipcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDY3OiAqIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIC0gbWFyayBwYWdlIHJhbmdlIE1JR1JBVEVfSVNPTEFURVxubW0vcGFnZV9pc29sYXRpb24uYy00NjgtICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgcmFuZ2UgdG8gYmUgaXNvbGF0ZWQuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MDEtICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUwMjppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwMy1cdFx0XHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01NDUtLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU0NjogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxubW0vcGFnZV9pc29sYXRpb24uYy01NDctICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk0MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIER5bmFtaWMgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGlzbiYjMzk7dCBmaXhlZDsgaXQmIzM5O3MgZHluYW1pYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IG1hbmFnaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoaXMgdm9sYXRpbGUgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgY29udGlndW91cywgZnJvemVuIHJhbmdlIGFsbG9jYXRpb24sIGxpa2VseSB3aXRob3V0IHBlcmZvcm1hbmNlIHByb2ZpbGluZyBvdmVyaGVhZC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0IHJlYWN0cyB0byB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhpcyBjb250ZXh0LiBJIGV4cGVjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gdGhlIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgdGhpcyBpcyBhbiBpbXBvcnRhbnQgcG9pbnQgdG8gY29uc2lkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz03MDgwPXN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTA3LSAqL1xubW0vcGFnZV9hbGxvYy5jOjcxMDg6aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcxMDktXHRcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI0NS19XG5tbS9wYWdlX2FsbG9jLmM6NzI0NjpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy03MjQ3LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MjY1PWludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MjcyLVxubW0vcGFnZV9hbGxvYy5jOjcyNzM6XHRyZXQgPSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZihzdGFydCwgZW5kLCBhbGxvY19mbGFncywgZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTcyNzQtXHRpZiAoIXJldClcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzM2ND1zdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YodW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzM5Mi1cdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG5tbS9wYWdlX2FsbG9jLmM6NzM5MzpcdFx0XHRcdHJldCA9IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHBmbixcbm1tL3BhZ2VfYWxsb2MuYy03Mzk0LVx0XHRcdFx0XHRcdFx0cGZuICYjNDM7IG5yX3BhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU3OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgIGFuZCBhIFNpbWlsYXIgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgaXMgYWxzbyBleHBvcnRlZCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBpbiB0aGlzIGNvbnRleHQuCgpOb3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgZXhhbWluZSBgYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZgLiBJdCYjMzk7cyBsaWtlbHkgY2xvc2VseSByZWxhdGVkLCBtYXliZSBldmVuIGEgc2ltcGxlciB2ZXJzaW9uIG9mIHRoZSBmaXJzdCBmdW5jdGlvbiwgb3IgcGVyaGFwcyBpdCBhZGRyZXNzZXMgYSBkaWZmZXJlbnQgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhlICYjMzQ7bm9wcm9mJiMzNDsgc3VmZml4IHByb2JhYmx5IG1lYW5zIGl0JiMzOTtzIGZvciBub24tcHJvZmlsZWQgYWxsb2NhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgY2FzZS4gVGhpcyB0ZWxscyBtZSBhYm91dCBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgYWxsb2NhdGlvbiBsYW5kc2NhcGUgd2l0aGluIG91ciBjdXJyZW50IHN5c3RlbS4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gQXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBvciBzcGVjaWZpYyBmb3IgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVudCB0YXNrcz8gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTczMzA9c3RhdGljIGJvb2wgem9uZV9zcGFuc19sYXN0X3Bmbihjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzM2My0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MzY0OnN0cnVjdCBwYWdlICphbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxubW0vcGFnZV9hbGxvYy5jLTczNjUtXHRcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzQxNy19XG5tbS9wYWdlX2FsbG9jLmM6NzQxODpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy03NDE5LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03NDM2PXN0cnVjdCBwYWdlICphbGxvY19jb250aWdfcGFnZXNfbm9wcm9mKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03NDQzLVxubW0vcGFnZV9hbGxvYy5jOjc0NDQ6XHRwYWdlID0gYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YobnJfcGFnZXMsIGdmcF9tYXNrLCBuaWQsXG5tbS9wYWdlX2FsbG9jLmMtNzQ0NS1cdFx0XHRcdFx0XHRub2RlbWFzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTk0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBSb3V0aW5lcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGFsbG9jYXRpb24gcm91dGluZXMgaW4gcGxheSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbGlzdCB0aGUgb25lcyB0aGF0IHNlZW0gZGlyZWN0bHkgcmVsZXZhbnQ6IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgLCBgYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBIb3dldmVyLCBJIHNlZSBhIHBhdHRlcm4uIEl0IGxvb2tzIGxpa2UgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGFuZCBgYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZmAgYXJlIHNpbXBseSB3cmFwcGVycywgYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBvbiB0b3Agb2Ygc29tZXRoaW5nIGVsc2UuIEkmIzM5O2xsIGluY2x1ZGUgdGhlbSBpbiB0aGUgbGlzdCB0b28sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBjYWxsIGhpZXJhcmNoeS4gU28sIHRoZSByZXZpc2VkIGxpc3QgaXM6IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYW5kIGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSBpZiBgYWxsb2NfY29udGlnX3JhbmdlYCBhbmQgYGFsbG9jX2NvbnRpZ19wYWdlc2AgYXJlIG1hY3JvcywgYmVjYXVzZSB0aGF0IGFmZmVjdHMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIHJ1bnRpbWUgYmVoYXZpb3IuIExldCYjMzk7cyBjaGVjayB0aGF0IGZpcnN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGFsbG9jX2NvbnRpZ19yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcC5oPTQ1Mz1pbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaDo0NTU6I2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU2LVx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzQ1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVW5kZXJseWluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIGluZGVlZCBtYWNyb3MuIFRoZXkmIzM5O3JlIGJhc2ljYWxseSB3cmFwcGVycyBhcm91bmQgdGhvc2UgYF9ub3Byb2ZgIGZ1bmN0aW9ucy4gVGhhdCBtYWtlcyB0aGUgYWN0dWFsIGZ1bmN0aW9uIGNhbGxzIGZvciBtZSBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAsIGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCwgYW5kIGBhbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZmAuIFJpZ2h0LCBnb3QgaXQuIE5vdyBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgdGhlIHJlbGV2YW50IGBFbmFibGVDb25maWdzYC4gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBhbmQgY29uZmlybSB3aGF0IHRoYXQgYE1FTU9SWV9IT1RQTFVHYCBjb25maWcgYWN0dWFsbHkgZG9lcy4gS2NvbmZpZywgaGVyZSBJIGNvbWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RQTFVHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTE5PWNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuLS1cbm1tL0tjb25maWctNTIyLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAmIzM5O3NlbGVjdCBTUEFSU0VNRU0mIzM5O1xubW0vS2NvbmZpZzo1MjM6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xubW0vS2NvbmZpZy01MjQtXHRib29sIFwmIzM0O01lbW9yeSBob3RwbHVnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTQzCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWVtb3J5IEhvdHBsdWcgYW5kIENNQSBSZXZpZXcqKgoKUmlnaHQsIGBNRU1PUllfSE9UUExVR2AgcmluZ3MgdHJ1ZSBpbiBteSBtaW5kLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgb24gdGhlIHJpZ2h0IHRyYWNrLiBHaXZlbiB0aGUgY29udGV4dCwgdGhvdWdoLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlJiMzOTtyZSBhbGlnbmVkLiBCZWZvcmUgSSBnbyBmdXJ0aGVyIGRvd24gdGhpcyBwYXJ0aWN1bGFyIHJhYmJpdCBob2xlLCBsZXQgbWUganVzdCBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IGBDTUFgIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpbiB0aGUgS2NvbmZpZy4gQSBkb3VibGUtY2hlY2sgdGhlcmUgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIHN5c3RlbSYjMzk7cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kIGVuc3VyZSB0aGVzZSB0d28gYXJlYXMgYWxpZ24gY29ycmVjdGx5LiBObyBuZWVkIHRvIGNoYXNlIGdob3N0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBETUFfTlVNQV9DTUFcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMTg1LVxua2VybmVsL2RtYS9LY29uZmlnOjE4Njpjb25maWcgQ01BX1NJWkVfUEVSTlVNQVxua2VybmVsL2RtYS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7RGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnPTE5Nj1jb21tZW50IFwmIzM0O0RlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOlwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTE5Ny1cbmtlcm5lbC9kbWEvS2NvbmZpZzoxOTg6Y29uZmlnIENNQV9TSVpFX01CWVRFU1xua2VybmVsL2RtYS9LY29uZmlnLTE5OS1cdGludCBcJiMzNDtTaXplIGluIE1lZ2EgQnl0ZXNcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMjA4LVxua2VybmVsL2RtYS9LY29uZmlnOjIwOTpjb25maWcgQ01BX1NJWkVfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIxMC1cdGludCBcJiMzNDtQZXJjZW50YWdlIG9mIHRvdGFsIG1lbW9yeVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMjA9Y2hvaWNlXG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTIyMy1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjQ6Y29uZmlnIENNQV9TSVpFX1NFTF9NQllURVNcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjUtXHRib29sIFwmIzM0O1VzZSBtZWdhIGJ5dGVzIHZhbHVlIG9ubHlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjYtXG5rZXJuZWwvZG1hL0tjb25maWc6MjI3OmNvbmZpZyBDTUFfU0laRV9TRUxfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIyOC1cdGJvb2wgXCYjMzQ7VXNlIHBlcmNlbnRhZ2UgdmFsdWUgb25seVwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTIyOS1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzA6Y29uZmlnIENNQV9TSVpFX1NFTF9NSU5cbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzEtXHRib29sIFwmIzM0O1VzZSBsb3dlciB2YWx1ZSAobWluaW11bSlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzItXG5rZXJuZWwvZG1hL0tjb25maWc6MjMzOmNvbmZpZyBDTUFfU0laRV9TRUxfTUFYXG5rZXJuZWwvZG1hL0tjb25maWctMjM0LVx0Ym9vbCBcJiMzNDtVc2UgaGlnaGVyIHZhbHVlIChtYXhpbXVtKVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMzY9ZW5kY2hvaWNlXG5rZXJuZWwvZG1hL0tjb25maWctMjM3LVxua2VybmVsL2RtYS9LY29uZmlnOjIzODpjb25maWcgQ01BX0FMSUdOTUVOVFxua2VybmVsL2RtYS9LY29uZmlnLTIzOS1cdGludCBcJiMzNDtNYXhpbXVtIFBBR0VfU0laRSBvcmRlciBvZiBhbGlnbm1lbnQgZm9yIGNvbnRpZ3VvdXMgYnVmZmVyc1wmIzM0O1xuLS1cbm1tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbi0tXG5tbS9LY29uZmlnLTEwNjYtXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxubW0vS2NvbmZpZy0xMDY4LVx0Ym9vbCBcJiMzNDtDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODEtXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXG5tbS9LY29uZmlnLTEwODMtXHRib29sIFwmIzM0O0NNQSBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA4Ny1cbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXG5tbS9LY29uZmlnLTEwODktXHRib29sIFwmIzM0O0NNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA5NC1cbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXG5tbS9LY29uZmlnLTEwOTYtXHRpbnQgXCYjMzQ7TWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDc1CgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgeWVzLCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IHJlZ2FyZGluZyB0aGUgdXNlIG9mIGBDTUFgIGlzIHNwb3Qtb24uIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgYSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYC4gVGhlIGNydXggb2YgdGhlIGZpeCBsaWVzIGluIHZlcmlmeWluZyB0aGUgb3V0cHV0cyBvZiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYCwgY3JpdGljYWwgY29tcG9uZW50cyBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQsIG1vcmUgcHJlY2lzZWx5LCBpbiB0aGUgcGFnZSBpc29sYXRpb24gcHJvY2Vzcy4KCk5vdywgbG9va2luZyBhdCB0aGUgc3ltYm9scywgd2UgaGF2ZSBhIGNsZWFyIHNldCBvZiBmb2N1cyBwb2ludHM6IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLCBhbG9uZyB3aXRoIHZhcmlvdXMgYGFsbG9jX2NvbnRpZ18uLi5fbm9wcm9mYCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBUaGVzZSBwb2ludCBkaXJlY3RseSB0byB0aGUgYXJlYSBvZiBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIChDTUEpIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MuIEZ1cnRoZXIsIHdlIHNlZSBgYWxsb2NfY29udGlnX2Zyb3plbl8uLi5fbm9wcm9mYCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBmcm96ZW4gcGFnZXMgYXJlIGludm9sdmVkLgoKVGhlIGVuYWJsZW1lbnQgY29uZmlndXJhdGlvbnMsIGBDTUFgIGFuZCBgTUVNT1JZX0hPVFBMVUdgLCBhcmUgdGhlIGtleXMuIFRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgaXMgdGllZCBkaXJlY3RseSB0byBob3cgY29udGlndW91cyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBwYXJ0aWN1bGFybHkgd2l0aCBnaWdhbnRpYyBodWdlcGFnZXMsIGFuZCBob3cgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyBpbXBhY3QgdGhlIGlzb2xhdGlvbiBtZWNoYW5pc20uIFRoZSBpbXBhY3Qgb2YgdGhlc2UgaXMgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGUgcGF0Y2gsIHRoZXJlZm9yZSwgaW1wYWN0cyB0aGUgQ01BIG1lY2hhbmlzbS4KClNvLCBsZXQmIzM5O3MgY2FsbCB0aGlzIHNldCBvZiBpbmZvcm1hdGlvbiAmIzM5O3NldC1yZXN1bHRzJiMzOTsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcGFnZXNfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGJ5IHZhbGlkYXRpbmcgdGhlIHJlc3VsdHMgb2YgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGBjb21wb3VuZF9vcmRlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChwYWdlIGlzb2xhdGlvbiksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiAoQ01BLCBnaWdhbnRpYyBodWdlcGFnZXMpIGFuZCBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcGFnZXNfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGJ5IHZhbGlkYXRpbmcgdGhlIHJlc3VsdHMgb2YgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGBjb21wb3VuZF9vcmRlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChwYWdlIGlzb2xhdGlvbiksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiAoQ01BLCBnaWdhbnRpYyBodWdlcGFnZXMpIGFuZCBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNDowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA0OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2hlcmUgcGFnZSBtZXRhZGF0YSAoc3VjaCBhcyBidWRkeSBvcmRlciBvciBjb21wb3VuZCBoZWFkKSBpcyByZWFkIHdpdGhvdXQgbG9ja3MuIFJhY3kgcmVhZHMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcywgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbmZpbml0ZSBsb29wcywgb3IgaW5jb3JyZWN0IHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYWRkIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBmb3IgdGhlIHJlYWQgdmFsdWVzIChgb3JkZXJgLCBgaGVhZF9wZm5gKSB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy5cblxuVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMpIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChmb3IgY3Jhc2hlcy9oYW5ncykuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgY2F1c2UgYW4gaW5mby1sZWFrLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwNDowMjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCmluZGV4IDMyY2U4YTdkOWRmMzUuLjljZjdmOTIwMTFiZDMgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pc29sYXRpb24uYwpAQCAtMzg3LDEzICYjNDM7Mzg3LDE1IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLAogCQl9CiAKIAkJaWYgKFBhZ2VCdWRkeShwYWdlKSkgewotCQkJaW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7CiYjNDM7CQkJdW5zaWduZWQgaW50IG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwogCi0JCQkvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovCi0JCQlWTV9XQVJOX09OX09OQ0UocGZuICYjNDM7ICgxICZsdDsmbHQ7IG9yZGVyKSAmZ3Q7IGJvdW5kYXJ5X3Bmbik7Ci0KLQkJCXBmbiAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwotCQkJY29udGludWU7CiYjNDM7CQkJLyogYnVkZHlfb3JkZXJfdW5zYWZlKCkgaXMgcmFjeS4gVmFsaWRhdGUgdGhlIG9yZGVyIGJlZm9yZSBzaGlmdGluZy4gKi8KJiM0MzsJCQlpZiAob3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBwZm4gJiM0MzsgKDFVTCAmbHQ7Jmx0OyBvcmRlcikgJmx0Oz0gYm91bmRhcnlfcGZuKSB7CiYjNDM7CQkJCXBmbiAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAogCQkvKgpAQCAtNDEyLDEwICYjNDM7NDE0LDI4IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLAogCQlpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7CiAJCQl1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7Ci0JCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gY29tcG91bmRfbnIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKJiM0MzsKJiM0MzsJCQkvKiBjb21wb3VuZF9vcmRlcigpIGlzIHJhY3kuIENhcCBpdCBhdCBNQVhfRk9MSU9fT1JERVIuICovCiYjNDM7CQkJaWYgKG9yZGVyICZndDsgTUFYX0ZPTElPX09SREVSKQomIzQzOwkJCQlnb3RvIGZhaWxlZDsKJiM0MzsKJiM0MzsJCQlucl9wYWdlcyA9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGNvbXBvdW5kX2hlYWQoKSBpcyBhbHNvIHJhY3ksIHNvIHRoZSBkZXJpdmVkIGhlYWRfcGZuCiYjNDM7CQkJICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgomIzQzOwkJCSAqIE90aGVyd2lzZSwganVzdCBmYWlsIHRoZSBjaGVjay4gcGZuIGNvbWVzIGZyb20KJiM0MzsJCQkgKiBfX2ZpcnN0X3ZhbGlkX3BhZ2UoKSBhcyBhIGxlZ2l0aW1hdGUgUEZOLCBzbyB1c2UgaXQgdG8KJiM0MzsJCQkgKiBjaGVjayBoZWFkX3Bmbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoaGVhZF9wZm4gJmd0OyBwZm4gfHwgIUlTX0FMSUdORUQoaGVhZF9wZm4sIG5yX3BhZ2VzKSB8fAomIzQzOwkJCSAgICBwZm4gLSBoZWFkX3BmbiAmZ3Q7PSBucl9wYWdlcykKJiM0MzsJCQkJZ290byBmYWlsZWQ7CiAKIAkJCWlmIChoZWFkX3BmbiAmIzQzOyBucl9wYWdlcyAmbHQ7PSBib3VuZGFyeV9wZm4gfHwKLQkJCSAgICBQYWdlSHVnZShwYWdlKSkgewomIzQzOwkJCSAgICBQYWdlSHVnZShoZWFkKSkgewogCQkJCXBmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzOwogCQkJCWNvbnRpbnVlOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2OQoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiA1MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUmVhc29uaW5nIC0gTm8gTmVlZCBmb3IgRGVkaWNhdGVkIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGluZGljYXRlcyBpdCYjMzk7cyBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucywgc3BlY2lmaWNhbGx5IHRob3NlIGFyaXNpbmcgZnJvbSBjb25jdXJyZW50IGFjY2VzcyB0byBwYWdlIG1ldGFkYXRhLiBJdCYjMzk7cyBlc3NlbnRpYWxseSByZXBsYWNpbmcgY2FsbHMgbGlrZSBgYnVkZHlfb3JkZXIocGFnZSlgIHdpdGggYGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKWAgYW5kIGRvaW5nIHRoZSBzYW1lIGZvciBjb21wb3VuZCBwYWdlIGluZm9ybWF0aW9uLCBhbmQgYWRkaW5nIHZhbGlkYXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIHJlYWRpbmcgaW5jb25zaXN0ZW50IHZhbHVlcyBkdWUgdG8gdGhlc2UgcmFjZSBjb25kaXRpb25zLgoKVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgbmV3IGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm9yIGRvZXMgaXQgbGVhayBhbnkgc2Vuc2l0aXZlIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQmIzM5O3Mgc3RyaWN0bHkgYWJvdXQgc2FmZWd1YXJkaW5nIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyByZWFkcywgaW5maW5pdGUgbG9vcHMsIG9yIGNyYXNoZXMgdHJpZ2dlcmVkIGJ5IHJlYWRpbmcgcGFnZSBtZXRhZGF0YSBjb25jdXJyZW50bHkuIFRoZXNlIGFyZSB0aGUga2luZHMgb2YgaXNzdWVzIHRoYXQgSSYjMzk7ZCB0eXBpY2FsbHkgZXhwZWN0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHRvIGNhdGNoIOKAkyBvciB0aGF0IHdvdWxkIHNpbXBseSByZXN1bHQgaW4gYSBrZXJuZWwgcGFuaWMgdGhhdCB0aGUgc3RhbmRhcmQgdGVzdGluZyBzdWl0ZSB3b3VsZCBmbGFnLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG15IHRoaW5raW5nLiBSaWdodCwgc28gYGJ1ZGR5X29yZGVyX3Vuc2FmZSgpYCBhbmQgYGNvbXBvdW5kX29yZGVyKClgIGFyZSBpbmRlZWQgJiMzNDt1bnNhZmUmIzM0OyBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IHJlYWQgd2l0aG91dCBsb2NraW5nLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyB0aGlzIGJ5IHZhbGlkYXRpbmcgdGhlIHJldHJpZXZlZCBgb3JkZXJgIHZhbHVlcyBhZ2FpbnN0IHJlYXNvbmFibGUgYm91bmRzLCBsaWtlIGBNQVhfUEFHRV9PUkRFUmAgYW5kIG1ha2luZyBzdXJlIHRoYXQgcGFnZSBmcmFtZSBudW1iZXIgY2FsY3VsYXRpb24gaXMgdmFsaWQsIGFuZCB0aGUgY29tcG91bmQgaGVhZCBpbmZvcm1hdGlvbi4gVGhpcyBtaXRpZ2F0ZXMgdGhlIHJpc2sgb2YgcmVhZGluZyBzdGFsZSBkYXRhIHdoaWNoIGNvdWxkIHRoZW4gbGVhZCB0byB0aG9zZSBvdXQtb2YtYm91bmRzIG9yIGluZmluaXRlIGxvb3AgcHJvYmxlbXMuIGBjb21wb3VuZF9oZWFkKHBhZ2UpYCBpcyBhbHNvIGhhbmRsZWQgc2ltaWxhcmx5LiBUaGlzIHByZXZlbnRzIHRoZSBjb2RlIGZyb20gdXNpbmcgaW52YWxpZCBkYXRhLgoKVGhlIGJ1Z3MgdGhpcyBwYXRjaCBhZGRyZXNzZXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgYXJlIGFsbCBhYm91dCBjb25jdXJyZW5jeSBhbmQgaW5jb25zaXN0ZW50IGRhdGEuIEl0JiMzOTtzIGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCB0aGUgY29uc2VxdWVuY2VzIG9mIHJhY3kgcmVhZHMgb24gcGFnZSBtZXRhZGF0YSwgd2hpY2ggYXJlIHdlbGwtdW5kZXJzdG9vZCBpc3N1ZXMgaW4ga2VybmVsIGRldmVsb3BtZW50LiBHaXZlbiBhbGwgdGhhdCwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBNeSBLTVNBTiByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcywgaW5maW5pdGUgbG9vcHMsIGJhZCBQRk4gY2FsY3VsYXRpb25zKSwgYnV0IHRoZXNlIGFyZW4mIzM5O3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGFzIHRoaXMgaXNuJiMzOTt0IGludHJvZHVjaW5nICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueSBkYXRhIGxlYWsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpc24mIzM5O3Qgd2FycmFudGVkIGluIHRoaXMgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCB3aGVyZSBwYWdlIG1ldGFkYXRhIChzdWNoIGFzIGJ1ZGR5IG9yZGVyIG9yIGNvbXBvdW5kIGhlYWQpIGlzIHJlYWQgd2l0aG91dCBsb2Nrcy4gUmFjeSByZWFkcyBjYW4gcmVzdWx0IGluIGludmFsaWQgdmFsdWVzLCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGluZmluaXRlIGxvb3BzLCBvciBpbmNvcnJlY3QgcGFnZSBmcmFtZSBudW1iZXIgKFBGTikgY2FsY3VsYXRpb25zLiBUaGUgY2hhbmdlcyBhZGQgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIGZvciB0aGUgcmVhZCB2YWx1ZXMgKGBvcmRlcmAsIGBoZWFkX3BmbmApIHRvIHByZXZlbnQgdGhlc2UgaXNzdWVzLlxuXG5UaGVzZSB0eXBlcyBvZiBidWdzIGFyZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChmb3Igb3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgKGZvciBjcmFzaGVzL2hhbmdzKS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjYXVzZSBhbiBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2hlcmUgcGFnZSBtZXRhZGF0YSAoc3VjaCBhcyBidWRkeSBvcmRlciBvciBjb21wb3VuZCBoZWFkKSBpcyByZWFkIHdpdGhvdXQgbG9ja3MuIFJhY3kgcmVhZHMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcywgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbmZpbml0ZSBsb29wcywgb3IgaW5jb3JyZWN0IHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYWRkIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBmb3IgdGhlIHJlYWQgdmFsdWVzIChgb3JkZXJgLCBgaGVhZF9wZm5gKSB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy5cblxuVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMpIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChmb3IgY3Jhc2hlcy9oYW5ncykuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgY2F1c2UgYW4gaW5mby1sZWFrLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAyOjU2LjczNDkyNDk4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDMxNDAzNDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2hlcmUgcGFnZSBtZXRhZGF0YSAoc3VjaCBhcyBidWRkeSBvcmRlciBvciBjb21wb3VuZCBoZWFkKSBpcyByZWFkIHdpdGhvdXQgbG9ja3MuIFJhY3kgcmVhZHMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcywgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbmZpbml0ZSBsb29wcywgb3IgaW5jb3JyZWN0IHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYWRkIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBmb3IgdGhlIHJlYWQgdmFsdWVzIChgb3JkZXJgLCBgaGVhZF9wZm5gKSB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy5cXG5cXG5UaGVzZSB0eXBlcyBvZiBidWdzIGFyZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChmb3Igb3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgKGZvciBjcmFzaGVzL2hhbmdzKS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjYXVzZSBhbiBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgcmVzdWx0cyBvZiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKHBhZ2UgaXNvbGF0aW9uKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIChDTUEsIGdpZ2FudGljIGh1Z2VwYWdlcykgYW5kIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAyOjU2LjczNDkyOTYwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzY2MzgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDQ6MDI6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li45Y2Y3ZjkyMDExYmQzIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmNcXG4rKysgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXFxuQEAgLTM4NywxMyArMzg3LDE1IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XFxuLVxcdFxcdFxcdGludCBvcmRlciA9IGJ1ZGR5X29yZGVyKHBhZ2UpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XFxuIFxcbi1cXHRcXHRcXHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXFxuLVxcdFxcdFxcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcXHUwMDNjXFx1MDAzYyBvcmRlcikgXFx1MDAzZSBib3VuZGFyeV9wZm4pO1xcbi1cXG4tXFx0XFx0XFx0cGZuICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdC8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovXFxuK1xcdFxcdFxcdGlmIChvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgcGZuICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcikgXFx1MDAzYz0gYm91bmRhcnlfcGZuKSB7XFxuK1xcdFxcdFxcdFxcdHBmbiArPSAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC00MTIsMTAgKzQxNCwyOCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcXG4gXFx0XFx0aWYgKFBhZ2VDb21wb3VuZChwYWdlKSkge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4gPSBwYWdlX3RvX3BmbihoZWFkKTtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGNvbXBvdW5kX25yKGhlYWQpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihoZWFkKTtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4rXFxuK1xcdFxcdFxcdC8qIGNvbXBvdW5kX29yZGVyKCkgaXMgcmFjeS4gQ2FwIGl0IGF0IE1BWF9GT0xJT19PUkRFUi4gKi9cXG4rXFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgTUFYX0ZPTElPX09SREVSKVxcbitcXHRcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4rXFxuK1xcdFxcdFxcdG5yX3BhZ2VzID0gMVVMIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogY29tcG91bmRfaGVhZCgpIGlzIGFsc28gcmFjeSwgc28gdGhlIGRlcml2ZWQgaGVhZF9wZm5cXG4rXFx0XFx0XFx0ICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLlxcbitcXHRcXHRcXHQgKiBPdGhlcndpc2UsIGp1c3QgZmFpbCB0aGUgY2hlY2suIHBmbiBjb21lcyBmcm9tXFxuK1xcdFxcdFxcdCAqIF9fZmlyc3RfdmFsaWRfcGFnZSgpIGFzIGEgbGVnaXRpbWF0ZSBQRk4sIHNvIHVzZSBpdCB0b1xcbitcXHRcXHRcXHQgKiBjaGVjayBoZWFkX3Bmbi5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChoZWFkX3BmbiBcXHUwMDNlIHBmbiB8fCAhSVNfQUxJR05FRChoZWFkX3BmbiwgbnJfcGFnZXMpIHx8XFxuK1xcdFxcdFxcdCAgICBwZm4gLSBoZWFkX3BmbiBcXHUwMDNlPSBucl9wYWdlcylcXG4rXFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcbiBcXHRcXHRcXHRpZiAoaGVhZF9wZm4gKyBucl9wYWdlcyBcXHUwMDNjPSBib3VuZGFyeV9wZm4gfHxcXG4tXFx0XFx0XFx0ICAgIFBhZ2VIdWdlKHBhZ2UpKSB7XFxuK1xcdFxcdFxcdCAgICBQYWdlSHVnZShoZWFkKSkge1xcbiBcXHRcXHRcXHRcXHRwZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMjo1OC4wMDkzMDU0NjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5ODA0MzMzODE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgcmVzdWx0cyBvZiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKHBhZ2UgaXNvbGF0aW9uKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIChDTUEsIGdpZ2FudGljIGh1Z2VwYWdlcykgYW5kIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNDowMjo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li45Y2Y3ZjkyMDExYmQzIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuKysrIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyArMzg3LDE1IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHR9XG4gXG4gXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4gXG4tXHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuLVx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuLVxuLVx0XHRcdHBmbiArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovXG4rXHRcdFx0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHBmbiArICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2M9IGJvdW5kYXJ5X3Bmbikge1xuK1x0XHRcdFx0cGZuICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdH1cbiBcbiBcdFx0LypcbkBAIC00MTIsMTAgKzQxNCwyOCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcbiBcdFx0aWYgKFBhZ2VDb21wb3VuZChwYWdlKSkge1xuIFx0XHRcdHN0cnVjdCBwYWdlICpoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGNvbXBvdW5kX25yKGhlYWQpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKGhlYWQpO1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4rXG4rXHRcdFx0LyogY29tcG91bmRfb3JkZXIoKSBpcyByYWN5LiBDYXAgaXQgYXQgTUFYX0ZPTElPX09SREVSLiAqL1xuK1x0XHRcdGlmIChvcmRlciBcdTAwM2UgTUFYX0ZPTElPX09SREVSKVxuK1x0XHRcdFx0Z290byBmYWlsZWQ7XG4rXG4rXHRcdFx0bnJfcGFnZXMgPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogY29tcG91bmRfaGVhZCgpIGlzIGFsc28gcmFjeSwgc28gdGhlIGRlcml2ZWQgaGVhZF9wZm5cbitcdFx0XHQgKiBuZWVkcyBhZGRpdGlvbmFsIGNoZWNrcyB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuXG4rXHRcdFx0ICogT3RoZXJ3aXNlLCBqdXN0IGZhaWwgdGhlIGNoZWNrLiBwZm4gY29tZXMgZnJvbVxuK1x0XHRcdCAqIF9fZmlyc3RfdmFsaWRfcGFnZSgpIGFzIGEgbGVnaXRpbWF0ZSBQRk4sIHNvIHVzZSBpdCB0b1xuK1x0XHRcdCAqIGNoZWNrIGhlYWRfcGZuLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChoZWFkX3BmbiBcdTAwM2UgcGZuIHx8ICFJU19BTElHTkVEKGhlYWRfcGZuLCBucl9wYWdlcykgfHxcbitcdFx0XHQgICAgcGZuIC0gaGVhZF9wZm4gXHUwMDNlPSBucl9wYWdlcylcbitcdFx0XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0XHRcdGlmIChoZWFkX3BmbiArIG5yX3BhZ2VzIFx1MDAzYz0gYm91bmRhcnlfcGZuIHx8XG4tXHRcdFx0ICAgIFBhZ2VIdWdlKHBhZ2UpKSB7XG4rXHRcdFx0ICAgIFBhZ2VIdWdlKGhlYWQpKSB7XG4gXHRcdFx0XHRwZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDI6NTguMDA5MzA2OTg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1ODE2MTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgSXNvbGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZXkncmUgbWFraW5nIHNvbWUgZmFpcmx5IHRhcmdldGVkIGNoYW5nZXMgcmVsYXRlZCB0byBob3cgYGJ1ZGR5X29yZGVyYCBhbmQgYGNvbXBvdW5kX29yZGVyYCBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGlzb2xhdGlvbiBwcm9jZXNzLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHJlcGxhY2luZyB0aGUgdXNlIG9mIGBidWRkeV9vcmRlcmAgd2l0aCBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQsIGltcG9ydGFudGx5LCBhZGRpbmcgc29tZSB2YWxpZGF0aW9uIGFyb3VuZCBib3RoIHRoYXQgYW5kIGBjb21wb3VuZF9vcmRlcmAgYWxvbmdzaWRlIGBjb21wb3VuZF9oZWFkYC4gVGhpcyBpcywgZnVuY3Rpb25hbGx5IHNwZWFraW5nLCBhIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZS4gSXQncyBhIGtleSBwYXJ0IG9mIGhvdyB3ZSBoYW5kbGUgcGFnZSBpc29sYXRpb24uIEkgbmVlZCB0byBkaWcgaW50byBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpdHNlbGYgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhbHRlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgaXNvbGF0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDcyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDM6MDEuNjY3NDcwODMyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTM2NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2lzb2xhdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfaXNvbGF0aW9uLmM9MjgzPV9fZmlyc3RfdmFsaWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMjk4LS8qKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6Mjk5OiAqIGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jaygpIC0tIHRyaWVzIHRvIGlzb2xhdGUgYSBwYWdlYmxvY2sgdGhhdCBtaWdodCBiZVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzAwLSAqIHdpdGhpbiBhIGZyZWUgb3IgaW4tdXNlIHBhZ2UuXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwNC0gKiBAc2tpcF9pc29sYXRpb246XFx0dGhlIGZsYWcgdG8gc2tpcCB0aGUgcGFnZWJsb2NrIGlzb2xhdGlvbiBpbiBzZWNvbmRcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMwNTogKlxcdFxcdFxcdGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jaygpXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMDYtICpcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzE5LSAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MzIwOnN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzIxLVxcdFxcdFxcdGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUsIGJvb2wgaXNvbGF0ZV9iZWZvcmUsXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTUwMj1pbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxMy1cXHQvKiBpc29sYXRlIFtpc29sYXRlX3N0YXJ0LCBpc29sYXRlX3N0YXJ0ICsgcGFnZWJsb2NrX25yX3BhZ2VzKSBwYWdlYmxvY2sgKi9cXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUxNDpcXHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9zdGFydCwgbW9kZSwgZmFsc2UsXFxubW0vcGFnZV9pc29sYXRpb24uYy01MTUtXFx0XFx0XFx0c2tpcF9pc29sYXRpb24pO1xcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy01MjItXFx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9lbmQgLSBwYWdlYmxvY2tfbnJfcGFnZXMsIGlzb2xhdGVfZW5kKSBwYWdlYmxvY2sgKi9cXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUyMzpcXHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9lbmQsIG1vZGUsIHRydWUsIHNraXBfaXNvbGF0aW9uKTtcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyNC1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjAxLjcxMTYxMDM0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzU0NzY2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgUGFnZSBJc29sYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIG9idmlvdXNseSBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIGl0IGdldHMgY2FsbGVkIGJ5IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgdGhhdCdzIGEgcHJldHR5IHN0YW5kYXJkIGFwcHJvYWNoLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpsYXJnZXIqIGNvbnRleHQuIEknbSB0aGlua2luZywgd2hvJ3MgaW5pdGlhdGluZyB0aGlzIHdob2xlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBsYWNlPyBUaW1lIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYC4gR290dGEgc2VlIHdoZXJlICp0aGF0KiBjb21lcyBmcm9tLiBLbm93aW5nIHRoZSBlbnRyeSBwb2ludCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgd29ya2Zsb3csIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIHdoZXJlIEkgc2hvdWxkIGJlIGxvb2tpbmcgdG8gb3B0aW1pemUuIExldCdzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzowNS41NDcwODkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTIzOTU2OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaD02MT1ib29sIHBhZ2VibG9ja191bmlzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02Mi1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg6NjM6aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02NC1cXHRcXHRcXHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTAyPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTY4LVxcdC8qIHNldCBhYm92ZSByYW5nZSBhcyBpc29sYXRlZCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTk2OTpcXHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk3MC1cXHRcXHRcXHRcXHQgICAgICAgUEJfSVNPTEFURV9NT0RFX01FTV9PRkZMSU5FKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MTA4PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MTQ0LVxcdCAqIGhhdmUgZGlmZmVyZW50IHNpemVzLCBhbmQgZHVlIHRvIHRoZSB3YXkgcGFnZSBhbGxvY2F0b3JcXG5tbS9wYWdlX2FsbG9jLmM6NzE0NTpcXHQgKiB3b3JrLCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSBoYXMgc3BlY2lhbCBoYW5kbGluZ3MgZm9yIHRoaXMuXFxubW0vcGFnZV9hbGxvYy5jLTcxNDYtXFx0ICpcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MTYxLVxcbm1tL3BhZ2VfYWxsb2MuYzo3MTYyOlxcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydCwgZW5kLCBtb2RlKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzE2My1cXHRpZiAocmV0KVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYz0zMjA9c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2Ni0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjQ2NzogKiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSAtIG1hcmsgcGFnZSByYW5nZSBNSUdSQVRFX0lTT0xBVEVcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2OC0gKiBAc3RhcnRfcGZuOlxcdFxcdFRoZSBmaXJzdCBQRk4gb2YgdGhlIHJhbmdlIHRvIGJlIGlzb2xhdGVkLlxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy01MDEtICovXFxubW0vcGFnZV9pc29sYXRpb24uYzo1MDI6aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTAzLVxcdFxcdFxcdCAgICAgZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSlcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTQ1LS8qKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTQ2OiAqIHVuZG9faXNvbGF0ZV9wYWdlX3JhbmdlIC0gdW5kbyBlZmZlY3RzIG9mIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpXFxubW0vcGFnZV9pc29sYXRpb24uYy01NDctICogQHN0YXJ0X3BmbjpcXHRcXHRUaGUgZmlyc3QgUEZOIG9mIHRoZSBpc29sYXRlZCByYW5nZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzowNy4yOTk0OTEwNDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk2ODc5MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBTdHJhdGVnaWVzKipcblxuT2theSwgc28gSSBzZWUgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgYmVpbmcgY2FsbGVkIGluIHR3byBzcGVjaWZpYyBjb250ZXh0czogYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBnaXZlcyBtZSBzb21lIGltbWVkaWF0ZSBkaXJlY3Rpb24uIExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpcyBjbGVhcmx5IHRoZSB3b3JraG9yc2UgaGVyZSBmb3IgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbi4gSSdtIHRoaW5raW5nIENNQSwgZ2lnYW50aWMgaHVnZXBhZ2VzLCB0aGluZ3MgdGhhdCAqbmVlZCogcGh5c2ljYWxseSBhZGphY2VudCBtZW1vcnkgcmVnaW9ucy4gTWFrZXMgc2Vuc2UuIEdpdmVuIHRoZSBcIm5vIHByb2ZcIiBzdWZmaXgsIEkgc3VzcGVjdCB0aGlzIGlzIGEgY3JpdGljYWwgcGF0aCBhbmQgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLCB3aGVyZSBhbnkgcHJvZmlsaW5nIG92ZXJoZWFkIHdvdWxkIGJlIHVuZGVzaXJhYmxlLlxuXG5gb2ZmbGluZV9wYWdlc2AgaXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBiZWFzdDogbWVtb3J5IGhvdHBsdWcuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGR5bmFtaWNhbGx5IHJlbW92aW5nIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uIEl0J3MgdXNlZCBmb3IgdGFraW5nIHBhZ2VzIG9mZmxpbmUsIHBlcmhhcHMgZm9yIGhhcmR3YXJlIGZhaWx1cmUsIG1haW50ZW5hbmNlLCBvciByZXNvdXJjZSByZS1hbGxvY2F0aW9uLlxuXG5TbywgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgc2VlbXMgdG8gYmUgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIHVzZWQgYnkgdGhlc2UgdHdvIHF1aXRlIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMsIG9uZSBmb3IgaW5pdGlhbCBhbGxvY2F0aW9uIGFuZCB0aGUgb3RoZXIgZm9yIGR5bmFtaWMgcmVtb3ZhbCwgcGVyaGFwcyB0byBmYWNpbGl0YXRlIHRoZSBhbGxvY2F0aW9uIGluIHRoZSBmaXJzdCBwbGFjZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpbiBtb3JlIGRldGFpbC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBjb250aWd1b3VzIG1lbW9yeSBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgaW4gd2hhdCBzY2VuYXJpb3MgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgaXMgdWx0aW1hdGVseSBiZWluZyB1c2VkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB2YWxpZGF0ZSBhbmQgcmVmaW5lIG15IG1lbnRhbCBtb2RlbCBvZiB0aGVzZSBzeXN0ZW1zLCBhbmQgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE3NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjEyLjA5NjM3MjQ4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxMzU1MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9NDQzPXR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBhY3JfZmxhZ3NfdDtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDQ3LS8qIFRoZSBiZWxvdyBmdW5jdGlvbnMgbXVzdCBiZSBydW4gb24gYSByYW5nZSBmcm9tIGEgc2luZ2xlIHpvbmUuICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NDg6aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDQ5LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC00NTAtI2RlZmluZSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlKC4uLilcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTE6XFx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcwODA9c3RhdGljIHZvaWQgX19mcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzEwNy0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NzEwODppbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vcGFnZV9hbGxvYy5jLTcxMDktXFx0XFx0YWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNDUtfVxcbm1tL3BhZ2VfYWxsb2MuYzo3MjQ2OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MjQ3LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyNjU9aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI3Mi1cXG5tbS9wYWdlX2FsbG9jLmM6NzI3MzpcXHRyZXQgPSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZihzdGFydCwgZW5kLCBhbGxvY19mbGFncywgZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy03Mjc0LVxcdGlmICghcmV0KVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTczNjQ9c3RydWN0IHBhZ2UgKmFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzM5Mi1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxubW0vcGFnZV9hbGxvYy5jOjczOTM6XFx0XFx0XFx0XFx0cmV0ID0gYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YocGZuLFxcbm1tL3BhZ2VfYWxsb2MuYy03Mzk0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdHBmbiArIG5yX3BhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzoxMy43MTc3MzE5MjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTE0Nzk2ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGdpZ2FudGljIHBhZ2VzIGFyZWEuIFRoZSBjb2RlIGluIHF1ZXN0aW9uLCB3aGljaCBpcyByZWFjaGVkIHRocm91Z2ggYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGFuZCBgYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZgLCBpcyBkZWZpbml0ZWx5IHdpdGhpbiBjb3JlIGtlcm5lbCBsb2dpYyDigJMgd2hpY2ggbWVhbnMgdGhpcyBpcyBzZXJpb3VzLiBJdOKAmXMgdXNlZCBieSBDTUEgYW5kIGdpZ2FudGljIHBhZ2VzLCBzbyBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGFyZSBvbiB0aGUgbGluZS5cblxuVGhlIGNydXggb2YgdGhlIGlzc3VlIGFwcGVhcnMgdG8gYmUgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AuIEl0IHNlZW1zIHRoYXQgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGNvdWxkIGxlYWQgdG8gYGJ1ZGR5X29yZGVyYCBhbmQgYGNvbXBvdW5kX29yZGVyYCByZXR1cm5pbmcgaW52YWxpZCB2YWx1ZXMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGJ1ZywgYW5kIGNvdWxkIGxlYWQgdG8gc2lnbmlmaWNhbnQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBUaGUgcGF0Y2gsIHRoYW5rZnVsbHksIGlzIGFkZGluZyB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXRlcm1pbmVkIG9yZGVyIHN0YXlzIHdpdGhpbiBib3VuZHMsIGFuZCB0aGF0IHRoZSBwaHlzaWNhbCBmcmFtZSBudW1iZXJzIChQRk5zKSBhcmUgYWxzbyB2YWxpZCBhZnRlciB0aGUgZnVuY3Rpb24gY29tcGxldGVzLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCBiZSBzdWJ0bHkgaW1wYWN0ZnVsLCBhbmQgdGhlcmVmb3JlIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBmdXp6aW5nIGFuZCByaWdvcm91cyB0ZXN0aW5nLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgZml4IGEgYml0IGJldHRlci4gRm9jdXNpbmcgb24gdGhlIHN5bWJvbHMgSSBzZWUsIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIHN0YXRpYywgd2hpY2ggdGVsbHMgbWUgaXRzIHVzYWdlIGlzIGxvY2FsaXplZCwgd2hlcmVhcyBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgLCBgYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZmAsIGFuZCBgb2ZmbGluZV9wYWdlc2AgYXJlIG5vbi1zdGF0aWMg4oCTIG1lYW5pbmcgdGhleSdyZSBhY2Nlc3NpYmxlIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgZmlsZS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGlzIGFmZmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjIwLjIzMjUzMTE2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MzM3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfaXNvbGF0aW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9pc29sYXRpb24uYz0yODM9X19maXJzdF92YWxpZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy0yOTgtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzoyOTk6ICogaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKCkgLS0gdHJpZXMgdG8gaXNvbGF0ZSBhIHBhZ2VibG9jayB0aGF0IG1pZ2h0IGJlXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMDAtICogd2l0aGluIGEgZnJlZSBvciBpbi11c2UgcGFnZS5cXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA0LSAqIEBza2lwX2lzb2xhdGlvbjpcXHR0aGUgZmxhZyB0byBza2lwIHRoZSBwYWdlYmxvY2sgaXNvbGF0aW9uIGluIHNlY29uZFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MzA1OiAqXFx0XFx0XFx0aXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKClcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwNi0gKlxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMTktICovXFxubW0vcGFnZV9pc29sYXRpb24uYzozMjA6c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMjEtXFx0XFx0XFx0ZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSwgYm9vbCBpc29sYXRlX2JlZm9yZSxcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9NTAyPWludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTEzLVxcdC8qIGlzb2xhdGUgW2lzb2xhdGVfc3RhcnQsIGlzb2xhdGVfc3RhcnQgKyBwYWdlYmxvY2tfbnJfcGFnZXMpIHBhZ2VibG9jayAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTE0OlxcdHJldCA9IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayhpc29sYXRlX3N0YXJ0LCBtb2RlLCBmYWxzZSxcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxNS1cXHRcXHRcXHRza2lwX2lzb2xhdGlvbik7XFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyMi1cXHQvKiBpc29sYXRlIFtpc29sYXRlX2VuZCAtIHBhZ2VibG9ja19ucl9wYWdlcywgaXNvbGF0ZV9lbmQpIHBhZ2VibG9jayAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTIzOlxcdHJldCA9IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayhpc29sYXRlX2VuZCwgbW9kZSwgdHJ1ZSwgc2tpcF9pc29sYXRpb24pO1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTI0LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDM6MjAuMjc3MTY5MDIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjY2MjU5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbW0vcGFnZV9pc29sYXRpb24uY2AgRW50cnkgUG9pbnQqKlxuXG5SaWdodCwgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIOKAkyB0aGF0J3MgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgdGhlIHdob2xlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MsIHdoaWNoIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIEJlZm9yZSBJIGRpdmUgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24gaXRzZWxmLCBsZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBzb3VyY2UgdHJlZSBhbmQgYnVpbGQgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogYENPTkZJR2Agb3B0aW9ucyBhdCBwbGF5IHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBjb21waWxlIHNlY3Rpb25zIG9mIHRoaXMgZmlsZSBvciBldmVuIHRoZSBlbnRpcmUgbW9kdWxlLiBLbm93aW5nIHRoZSBwb3RlbnRpYWwgY29tcGlsZS10aW1lIHZhcmlhdGlvbnMgaXMgY3J1Y2lhbDsgSSBkb24ndCB3YW50IHRvIG1pc3MgYW55IGVkZ2UgY2FzZXMgb3IgYWx0ZXJuYXRpdmUgYmVoYXZpb3JzIGRlZmluZWQgYnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJcyB0aGlzIGZpbGUgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgb3IgYXJlIHRoZXJlIGNpcmN1bXN0YW5jZXMgd2hlcmUgaXQncyBleGNsdWRlZCBiYXNlZCBvbiBwYXJ0aWN1bGFyIGBDT05GSUdgIGZsYWdzPyBUaGF0J3MgbXkgZmlyc3QgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzoyNC4zMDM3OTc5MzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTkyNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfaXNvbGF0aW9uXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMTc9b2JqLSQoQ09ORklHX1BBR0VfT1dORVIpICs9IHBhZ2Vfb3duZXIub1xcbm1tL01ha2VmaWxlOjExODpvYmotJChDT05GSUdfTUVNT1JZX0lTT0xBVElPTikgKz0gcGFnZV9pc29sYXRpb24ub1xcbm1tL01ha2VmaWxlLTExOS1vYmotJChDT05GSUdfWlNNQUxMT0MpXFx0Kz0genNtYWxsb2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzoyNC4zNTMwMDQ0MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY2MTcxMjY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IElzb2xhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHByb21wdCBtZW50aW9ucyBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gLiBSaWdodCwgSSBrbm93IHRoYXQgb25lLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIHRoYXQgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGRldGVybWluZSB3aGV0aGVyIGBDT05GSUdfTUVNT1JZX0lTT0xBVElPTmAgaXMgZW5hYmxlZCBvciBub3QuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgb3IgcGVyaGFwcyB1c2UgYSBjb25maWd1cmF0aW9uIHRvb2wgdG8gdHJhY2sgZG93biB0aGUgZGVwZW5kZW5jaWVzLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgcHJlcmVxdWlzaXRlcyBhbmQgaW1wbGljYXRpb25zIGJlZm9yZSB1c2luZyBpdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW50ZW5kZWQgdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDM6MjcuMDE0NzE5MzkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY3ODE3Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSVNPTEFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NDk5PWNvbmZpZyBOVU1BX0tFRVBfTUVNSU5GT1xcbi0tXFxubW0vS2NvbmZpZy01MDEtXFxubW0vS2NvbmZpZzo1MDI6Y29uZmlnIE1FTU9SWV9JU09MQVRJT05cXG5tbS9LY29uZmlnLTUwMy1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjI4LjQ4MjU0MDgwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY4MDYzNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIEhlcmUncyBhIHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkLCBzdGFydGluZyB3aXRoIGEgYm9sZGVkIGhlYWRlcjpcblxuKipBbmFseXppbmcgdGhlIFNlbGVjdGlvbiBDcml0ZXJpYSoqXG5cbkFscmlnaHQsIHNvIEknbSBwcmVzZW50ZWQgd2l0aCBhIHNlbGVjdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHBpbnBvaW50ICp3aGF0KiBpcyBkcml2aW5nIHRoYXQgc2VsZWN0aW9uLiBJIG5lZWQgdG8gYnJlYWsgZG93biB0aGUgZmFjdG9ycyBhdCBwbGF5LiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzLCB0aGUgZGVmaW5pbmcgY2hhcmFjdGVyaXN0aWNzLCB0aGUgdW5kZXJseWluZyBwcmluY2lwbGVzIHRoYXQgYXJlIGxlYWRpbmcgdG8gdGhpcyBwYXJ0aWN1bGFyIGNob2ljZT8gQW0gSSBsb29raW5nIGF0IGEgZGlyZWN0IGFwcGxpY2F0aW9uIG9mIHJ1bGVzLCB0aGUgaW5mbHVlbmNlIG9mIGltcGxpY2l0IGJpYXNlcywgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBzdWJ0bGUgYW5kIG51YW5jZWQ/IEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBkZWNpc2lvbi1tYWtpbmcgbW9kZWxzLCBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGFnYWluc3QgbXkgZXhpc3Rpbmcga25vd2xlZGdlIGJhc2UgYW5kIGV4cGVyaWVuY2UuIFRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50IHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy4gSXTigJlzIGFsbCBhYm91dCBmaWd1cmluZyBvdXQgdGhlIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjMxLjM1MDYwNjYyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NTkwNDU4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUyMz1tZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MjQtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxubW0vS2NvbmZpZzo1MjU6XFx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cXG5tbS9LY29uZmlnLTUyNi1cXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuLS1cXG5tbS9LY29uZmlnPTEwNjc9Y29uZmlnIENNQVxcbi0tXFxubW0vS2NvbmZpZy0xMDcwLVxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnOjEwNzE6XFx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cXG5tbS9LY29uZmlnLTEwNzItXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzozMi43OTY1MTc0NTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3Nzg0NjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnMuXG5cbioqTWVtb3J5IEFsbG9jYXRpb24gU3RyYXRlZ3kgRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgd2UgbmVlZCBoZXJlLiBDbGVhcmx5LCB3ZSdyZSBnb2luZyB0byBuZWVkIGVpdGhlciBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCBvciBgQ09ORklHX0NNQWAgdG8gbWFrZSB0aGlzIHdvcmsgc21vb3RobHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB3aGljaCBvZiB0aG9zZSBpcyBlbmFibGVkLCBhbmQgbWF5YmUgZXZlbiBsb29rIGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYm90aCwgaWYgd2UgbmVlZCB0byB3ZWlnaCB0aGVtIGFnYWluc3QgZWFjaCBvdGhlci4gSXQncyBhIHF1ZXN0aW9uIG9mIGZsZXhpYmlsaXR5IHZlcnN1cyBwZXJmb3JtYW5jZSwgdHlwaWNhbGx5LlxuXG5JJ20gYWxzbyBoYXZpbmcgYSBsaXR0bGUgZGlnIGFyb3VuZCBgQ09ORklHX0NPTlRJR19BTExPQ2AuIEkgdGhpbmsgdGhlcmUgbWlnaHQgYmUgc29tZSBvdmVybGFwIHRoZXJlLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgdHdvIHdpbGwgYmUgY3J1Y2lhbC4gQ29udGlndW91cyBhbGxvY2F0aW9uIGNvdWxkIGJlIGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGlzIHB1enpsZSwgZGVwZW5kaW5nIG9uIGhvdyB3ZSB3YW50IHRvIGNhcnZlIHVwIHRoZSBhZGRyZXNzIHNwYWNlLiBOZWVkIHRvIGNsYXJpZnkgdGhlIHJvbGVzIG9mIHRoZXNlLCByZWxhdGl2ZSB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbGF5b3V0IHdlJ3JlIHRhcmdldGluZy4gR290IHRvIGNvbnNpZGVyIGhvdyB0aG9zZSBpbnRlcmFjdCB0byBnZXQgdGhlIGlkZWFsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjM2Ljk3NDM2NjUxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTQzMDA1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09OVElHX0FMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbi0tXFxubW0vS2NvbmZpZy03MTgtXFxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xcbm1tL0tjb25maWctNzIwLVxcdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFxcdTAwMjZcXHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzozOC40MTM4MDMzNjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0OTU4ODMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgTUVNT1JZX0lTT0xBVElPTmAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIEl0J3MgdGhlIGx5bmNocGluLCBpdCBzZWVtcy4gQW5kIEknbSBsb29raW5nIGF0IGhvdyBpdCdzIGVuYWJsZWQuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBvZiBqdXN0IHRocm93aW5nIGBNRU1PUllfSVNPTEFUSU9OYCwgYENNQWAsIGFuZCBgTUVNT1JZX0hPVFBMVUdgIGludG8gYEVuYWJsZUNvbmZpZ3NgLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiBgTUVNT1JZX0lTT0xBVElPTmAgaXMgYSBib29sZWFuIHdpdGggbm8gZGlyZWN0IHByb21wdCEgVGhhdCBtZWFucyB0aGUgdXNlciBjYW4ndCAqZGlyZWN0bHkqIGVuYWJsZSBpdC4gSXQgZ2V0cyBhY3RpdmF0ZWQgdmlhIGBNRU1PUllfSE9UUExVR2Agb3IgYENNQWAuIFRoYXQgY2hhbmdlcyB0aGluZ3MuXG5cblRoZXJlZm9yZSwgdGhlIGNvcnJlY3QgYXBwcm9hY2ggaXMgdG8gaW5jbHVkZSBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQncyB0aGUgd2F5IHRvIGdpdmUgdGhlIHVzZXIgY29udHJvbCBvdmVyIHRoZSBiZWhhdmlvciBJJ20gYWZ0ZXIsIGluZGlyZWN0bHkuXG5cbk5vdywganVzdCB0byBiZSBzdXJlLCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGFsbG9jYXRpb24gcm91dGluZXMgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGFuZCBgYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZXNlIHBhcmFtZXRlcnMgZmFjdG9yIGludG8gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzo0My4zNjMzOTQ1OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDg2NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz03MjQ2PUVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNjQtICovXFxubW0vcGFnZV9hbGxvYy5jOjcyNjU6aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXFx0XFx0XFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNzgtfVxcbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTcyODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjQzLjQwOTg4NDI5N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk2MTY2Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHBlcnNwZWN0aXZlIG9uIHRoYXQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBtaW5kJ3MgYXV0b21hdGljYWxseSBqdW1waW5nIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoYXQgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGF0IG5hbWUsIHNvIEknbSBsaWtlbHkga25lZS1kZWVwIGluIHNvbWUgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb3IgcG9zc2libHkgZGVidWdnaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgaG93IHRoYXQgZnVuY3Rpb24gb3BlcmF0ZXMuIFdoYXQncyB0aGUgY29udGV4dCBJJ20gaW4/IElzIHRoaXMgYWJvdXQgYm9vdC10aW1lIGFsbG9jYXRpb24sIG9yIHJ1bnRpbWU/IFdoYXTigJlzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBhbmQgYXJlIHRoZXJlIGFueSBudWFuY2VzIHRoZXJlIEkgbmVlZCB0byBjb25zaWRlcj8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0cmFkZS1vZmZzIGludm9sdmVkIGluIHVzaW5nIGNvbnRpZ3VvdXMgbWVtb3J5IOKAkyBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiwgYW5kIHBvc3NpYmxlIHBlcmZvcm1hbmNlIGJlbmVmaXRzIGRlcGVuZGluZyBvbiB0aGUgd29ya2xvYWQuIExldCdzIHNlZSB3aGF0IEkgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjQ2LjcwNjA1MzIzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MzkwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTc0MTg9RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzQzNS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NzQzNjpzdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9wYWdlX2FsbG9jLmMtNzQzNy1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03NDUwLX1cXG5tbS9wYWdlX2FsbG9jLmM6NzQ1MTpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy03NDUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzo0Ni43NTA1OTQ2NDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxMjc2ODYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IEhvdHBsdWcqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gb2ZmbGluZSBwYWdlcywgYW5kIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhlIGBtbS9tZW1vcnlfaG90cGx1Zy5jYCBmaWxlIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zLCBpbmNsdWRpbmcgdGhlIGhhbmRsaW5nIG9mIHBhZ2UgcmVtb3ZhbCBhbmQgcG90ZW50aWFsbHkgdGhlaXIgb2ZmbGluZSBzdGF0dXMsIHdvdWxkIHJlc2lkZS4gSSdtIGdvaW5nIHRvIGhlYWQgdGhlcmUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NjMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzo0OS41NjMzNjU1MjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Mjc4NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxpbmVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTUzOT12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODMtICogc3VyZSB0aGF0IHBhZ2VzIGFyZSBtYXJrZWQgcmVzZXJ2ZWQgYW5kIHpvbmVzIGFyZSBhZGp1c3QgcHJvcGVybHkgYnlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU4NDogKiBjYWxsaW5nIG9mZmxpbmVfcGFnZXMoKS5cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU4NS0gKi9cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg5MD1zdGF0aWMgaW50IGNvdW50X3N5c3RlbV9yYW1fcGFnZXNfY2IodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDEtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTAyOmludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTkwMy1cXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjQ5LjYwODY0NjA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzMwNzIzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9scyAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZXhhbWluZS4gVGhlIGltbWVkaWF0ZSBmb2N1cyBzaG91bGQgYmUgb24gYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBtZWNoYW5pc21zIEknbSBpbnRlcmVzdGVkIGluLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmYXJlbid0IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgIGFscmVhZHkgZXhwb3J0ZWQ/IEkgY291bGQgaGF2ZSBzd29ybiB0aGV5IHdlcmUuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0OyBJIGRvbuKAmXQgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgc2hhZG93cy4gQW5kIHdoYXQgYWJvdXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWA/IEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4cG9ydCBzdGF0dXMgYXMgd2VsbC4gSSBkb24ndCB3YW50IHRvIG92ZXJsb29rIHNvbWV0aGluZyBmdW5kYW1lbnRhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE0NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzo1NC4xODE3MjA0MzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzkxNDEyOTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDM6NTYuMDYwODcwMDk2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjU1MTgwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IExvY2F0aW5nIHRoZSBSZWxldmFudCBDb2RlKipcblxuQWxyaWdodCwgc28gdGhlIHRoaW5nIGlzbid0ICpleHBvcnRlZCog4oCTIHRoYXQncyB0aGUgZmlyc3QgY3J1Y2lhbCBjbHVlLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCdzICpub24tc3RhdGljKiBjaGFuZ2VzIHRoZSBnYW1lLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgcG9zc2liaWxpdGllcyBzaWduaWZpY2FudGx5LiBNeSBpbW1lZGlhdGUgbmV4dCBtb3ZlIGlzIHRvIGRvdWJsZS1jaGVjayBgbW0vcGFnZV9pc29sYXRpb24uY2AuIEkga25vdyB0aGF0J3MgYSBjZW50cmFsIGFyZWEgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgbm9uLXN0YXRpYyB0aGluZ3Mgb2Z0ZW4gcmVzaWRlIHRoZXJlLCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBrZXJuZWwgZmVhdHVyZS4gSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNyb3NzLXJlZmVyZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjAzOjU5LjYyNjM5MDY0NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNTMzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfaXNvbGF0aW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9pc29sYXRpb24uYz0zMjA9c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2Ni0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjQ2NzogKiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSAtIG1hcmsgcGFnZSByYW5nZSBNSUdSQVRFX0lTT0xBVEVcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ2OC0gKiBAc3RhcnRfcGZuOlxcdFxcdFRoZSBmaXJzdCBQRk4gb2YgdGhlIHJhbmdlIHRvIGJlIGlzb2xhdGVkLlxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy01MDEtICovXFxubW0vcGFnZV9pc29sYXRpb24uYzo1MDI6aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTAzLVxcdFxcdFxcdCAgICAgZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSlcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTQ1LS8qKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTQ2OiAqIHVuZG9faXNvbGF0ZV9wYWdlX3JhbmdlIC0gdW5kbyBlZmZlY3RzIG9mIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpXFxubW0vcGFnZV9pc29sYXRpb24uYy01NDctICogQHN0YXJ0X3BmbjpcXHRcXHRUaGUgZmlyc3QgUEZOIG9mIHRoZSBpc29sYXRlZCByYW5nZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowMzo1OS42NzE3NDYwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY4MjIxNjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBEeW5hbWljIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGlzbid0IGZpeGVkOyBpdCdzIGR5bmFtaWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBtYW5hZ2luZyBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGlzIHZvbGF0aWxlIGNvbnRleHQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIGNvbnRpZ3VvdXMsIGZyb3plbiByYW5nZSBhbGxvY2F0aW9uLCBsaWtlbHkgd2l0aG91dCBwZXJmb3JtYW5jZSBwcm9maWxpbmcgb3ZlcmhlYWQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0IHJlYWN0cyB0byB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhpcyBjb250ZXh0LiBJIGV4cGVjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gdGhlIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgdGhpcyBpcyBhbiBpbXBvcnRhbnQgcG9pbnQgdG8gY29uc2lkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NDAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowNDowMy4wMzk5NzA3MTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTUxNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NzA4MD1zdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX2Zyb3plbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MTA3LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo3MTA4OmludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9wYWdlX2FsbG9jLmMtNzEwOS1cXHRcXHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI0NS19XFxubW0vcGFnZV9hbGxvYy5jOjcyNDY6RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTcyNDctXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzI2NT1pbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MjcyLVxcbm1tL3BhZ2VfYWxsb2MuYzo3MjczOlxcdHJldCA9IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHN0YXJ0LCBlbmQsIGFsbG9jX2ZsYWdzLCBnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTcyNzQtXFx0aWYgKCFyZXQpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzM2ND1zdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YodW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MzkyLVxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5tbS9wYWdlX2FsbG9jLmM6NzM5MzpcXHRcXHRcXHRcXHRyZXQgPSBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZihwZm4sXFxubW0vcGFnZV9hbGxvYy5jLTczOTQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0cGZuICsgbnJfcGFnZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjAzLjA4NzEyNDI5NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5MjA4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBhbmQgYSBTaW1pbGFyIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgaXMgYWxzbyBleHBvcnRlZCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGFuZCBleGFtaW5lIGBhbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZmAuIEl0J3MgbGlrZWx5IGNsb3NlbHkgcmVsYXRlZCwgbWF5YmUgZXZlbiBhIHNpbXBsZXIgdmVyc2lvbiBvZiB0aGUgZmlyc3QgZnVuY3Rpb24sIG9yIHBlcmhhcHMgaXQgYWRkcmVzc2VzIGEgZGlmZmVyZW50IGxldmVsIG9mIGdyYW51bGFyaXR5LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIHRoZSBcIm5vcHJvZlwiIHN1ZmZpeCBwcm9iYWJseSBtZWFucyBpdCdzIGZvciBub24tcHJvZmlsZWQgYWxsb2NhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgY2FzZS4gVGhpcyB0ZWxscyBtZSBhYm91dCBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgYWxsb2NhdGlvbiBsYW5kc2NhcGUgd2l0aGluIG91ciBjdXJyZW50IHN5c3RlbS4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gQXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBvciBzcGVjaWZpYyBmb3IgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVudCB0YXNrcz8gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjA2LjUxNjMzNDk3MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MDQxNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz03MzMwPXN0YXRpYyBib29sIHpvbmVfc3BhbnNfbGFzdF9wZm4oY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzM2My0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NzM2NDpzdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2YodW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5tbS9wYWdlX2FsbG9jLmMtNzM2NS1cXHRcXHRnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzQxNy19XFxubW0vcGFnZV9hbGxvYy5jOjc0MTg6RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTc0MTktXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzQzNj1zdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03NDQzLVxcbm1tL3BhZ2VfYWxsb2MuYzo3NDQ0OlxcdHBhZ2UgPSBhbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZihucl9wYWdlcywgZ2ZwX21hc2ssIG5pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNzQ0NS1cXHRcXHRcXHRcXHRcXHRcXHRub2RlbWFzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjA2LjU1OTk0NDkxNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTMwODExMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBSb3V0aW5lcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBhbGxvY2F0aW9uIHJvdXRpbmVzIGluIHBsYXkgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxpc3QgdGhlIG9uZXMgdGhhdCBzZWVtIGRpcmVjdGx5IHJlbGV2YW50OiBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgYW5kIGBvZmZsaW5lX3BhZ2VzYC4gSG93ZXZlciwgSSBzZWUgYSBwYXR0ZXJuLiBJdCBsb29rcyBsaWtlIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgIGFyZSBzaW1wbHkgd3JhcHBlcnMsIGEgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gb24gdG9wIG9mIHNvbWV0aGluZyBlbHNlLiBJJ2xsIGluY2x1ZGUgdGhlbSBpbiB0aGUgbGlzdCB0b28sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBjYWxsIGhpZXJhcmNoeS4gU28sIHRoZSByZXZpc2VkIGxpc3QgaXM6IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYW5kIGBhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mYC4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSBpZiBgYWxsb2NfY29udGlnX3JhbmdlYCBhbmQgYGFsbG9jX2NvbnRpZ19wYWdlc2AgYXJlIG1hY3JvcywgYmVjYXVzZSB0aGF0IGFmZmVjdHMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgcnVudGltZSBiZWhhdmlvci4gTGV0J3MgY2hlY2sgdGhhdCBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDQ6MTEuNDkwNzU4NDYyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM4Mzg5OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgYWxsb2NfY29udGlnX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9NDUzPWludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTU6I2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ni1cXHRhbGxvY19ob29rcyhhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDQ6MTIuOTI5MTU3MzY0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMzQyNDM5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVbmRlcmx5aW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIGluZGVlZCBtYWNyb3MuIFRoZXkncmUgYmFzaWNhbGx5IHdyYXBwZXJzIGFyb3VuZCB0aG9zZSBgX25vcHJvZmAgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHRoZSBhY3R1YWwgZnVuY3Rpb24gY2FsbHMgZm9yIG1lIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19wYWdlc19ub3Byb2ZgLCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgLCBhbmQgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mYC4gUmlnaHQsIGdvdCBpdC4gTm93IEkgd2FudCB0byBxdWlja2x5IHJldmlldyB0aGUgcmVsZXZhbnQgYEVuYWJsZUNvbmZpZ3NgLiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBhbmQgY29uZmlybSB3aGF0IHRoYXQgYE1FTU9SWV9IT1RQTFVHYCBjb25maWcgYWN0dWFsbHkgZG9lcy4gS2NvbmZpZywgaGVyZSBJIGNvbWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NDUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDQ6MjAuOTYzNDA0MDI2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5OTI0NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSE9UUExVR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tLVxcbm1tL0tjb25maWctNTIyLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTSdcXG5tbS9LY29uZmlnOjUyMzptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MjQtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjIyLjM5MzMzMzA3OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM1NTgzMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNZW1vcnkgSG90cGx1ZyBhbmQgQ01BIFJldmlldyoqXG5cblJpZ2h0LCBgTUVNT1JZX0hPVFBMVUdgIHJpbmdzIHRydWUgaW4gbXkgbWluZC4gVGhhdCdzIGRlZmluaXRlbHkgb24gdGhlIHJpZ2h0IHRyYWNrLiBHaXZlbiB0aGUgY29udGV4dCwgdGhvdWdoLCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlJ3JlIGFsaWduZWQuIEJlZm9yZSBJIGdvIGZ1cnRoZXIgZG93biB0aGlzIHBhcnRpY3VsYXIgcmFiYml0IGhvbGUsIGxldCBtZSBqdXN0IHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgYENNQWAgY29uZmlndXJhdGlvbiBzZXR0aW5nIGluIHRoZSBLY29uZmlnLiBBIGRvdWJsZS1jaGVjayB0aGVyZSB3aWxsIGhlbHAgY2xhcmlmeSB0aGUgc3lzdGVtJ3MgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBlbnN1cmUgdGhlc2UgdHdvIGFyZWFzIGFsaWduIGNvcnJlY3RseS4gTm8gbmVlZCB0byBjaGFzZSBnaG9zdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTQzLCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDQ6MjguMDI4OTE4NTg5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM5MzI4NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDTUFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2RtYS9LY29uZmlnPTE3Mz1jb25maWcgRE1BX05VTUFfQ01BXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWctMTg1LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoxODY6Y29uZmlnIENNQV9TSVpFX1BFUk5VTUFcXG5rZXJuZWwvZG1hL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIkRlZmF1bHQgQ01BIGFyZWEgcGVyIE5VTUEgbm9kZVxcXCJcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZz0xOTY9Y29tbWVudCBcXFwiRGVmYXVsdCBjb250aWd1b3VzIG1lbW9yeSBhcmVhIHNpemU6XFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xOTctXFxua2VybmVsL2RtYS9LY29uZmlnOjE5ODpjb25maWcgQ01BX1NJWkVfTUJZVEVTXFxua2VybmVsL2RtYS9LY29uZmlnLTE5OS1cXHRpbnQgXFxcIlNpemUgaW4gTWVnYSBCeXRlc1xcXCJcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMDgtXFxua2VybmVsL2RtYS9LY29uZmlnOjIwOTpjb25maWcgQ01BX1NJWkVfUEVSQ0VOVEFHRVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMTAtXFx0aW50IFxcXCJQZXJjZW50YWdlIG9mIHRvdGFsIG1lbW9yeVxcXCJcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZz0yMjA9Y2hvaWNlXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWctMjIzLVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjQ6Y29uZmlnIENNQV9TSVpFX1NFTF9NQllURVNcXG5rZXJuZWwvZG1hL0tjb25maWctMjI1LVxcdGJvb2wgXFxcIlVzZSBtZWdhIGJ5dGVzIHZhbHVlIG9ubHlcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTIyNi1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjI3OmNvbmZpZyBDTUFfU0laRV9TRUxfUEVSQ0VOVEFHRVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjgtXFx0Ym9vbCBcXFwiVXNlIHBlcmNlbnRhZ2UgdmFsdWUgb25seVxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMjI5LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzA6Y29uZmlnIENNQV9TSVpFX1NFTF9NSU5cXG5rZXJuZWwvZG1hL0tjb25maWctMjMxLVxcdGJvb2wgXFxcIlVzZSBsb3dlciB2YWx1ZSAobWluaW11bSlcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTIzMi1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjMzOmNvbmZpZyBDTUFfU0laRV9TRUxfTUFYXFxua2VybmVsL2RtYS9LY29uZmlnLTIzNC1cXHRib29sIFxcXCJVc2UgaGlnaGVyIHZhbHVlIChtYXhpbXVtKVxcXCJcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZz0yMzY9ZW5kY2hvaWNlXFxua2VybmVsL2RtYS9LY29uZmlnLTIzNy1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjM4OmNvbmZpZyBDTUFfQUxJR05NRU5UXFxua2VybmVsL2RtYS9LY29uZmlnLTIzOS1cXHRpbnQgXFxcIk1heGltdW0gUEFHRV9TSVpFIG9yZGVyIG9mIGFsaWdubWVudCBmb3IgY29udGlndW91cyBidWZmZXJzXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMDY0PWNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxcbi0tXFxubW0vS2NvbmZpZy0xMDY2LVxcbm1tL0tjb25maWc6MTA2Nzpjb25maWcgQ01BXFxubW0vS2NvbmZpZy0xMDY4LVxcdGJvb2wgXFxcIkNvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4MS1cXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXFxubW0vS2NvbmZpZy0xMDgzLVxcdGJvb2wgXFxcIkNNQSBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4Ny1cXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xcbm1tL0tjb25maWctMTA4OS1cXHRib29sIFxcXCJDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwOTQtXFxubW0vS2NvbmZpZzoxMDk1OmNvbmZpZyBDTUFfQVJFQVNcXG5tbS9LY29uZmlnLTEwOTYtXFx0aW50IFxcXCJNYXhpbXVtIGNvdW50IG9mIHRoZSBDTUEgYXJlYXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjI5LjQ2ODI1MTM3MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTA5OTIzMDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHllcywgdGhlIGluaXRpYWwgYXNzZXNzbWVudCByZWdhcmRpbmcgdGhlIHVzZSBvZiBgQ01BYCBpcyBzcG90LW9uLiBXZSdyZSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgYSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYC4gVGhlIGNydXggb2YgdGhlIGZpeCBsaWVzIGluIHZlcmlmeWluZyB0aGUgb3V0cHV0cyBvZiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYCwgY3JpdGljYWwgY29tcG9uZW50cyBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQsIG1vcmUgcHJlY2lzZWx5LCBpbiB0aGUgcGFnZSBpc29sYXRpb24gcHJvY2Vzcy5cblxuTm93LCBsb29raW5nIGF0IHRoZSBzeW1ib2xzLCB3ZSBoYXZlIGEgY2xlYXIgc2V0IG9mIGZvY3VzIHBvaW50czogYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGFsb25nIHdpdGggdmFyaW91cyBgYWxsb2NfY29udGlnXy4uLl9ub3Byb2ZgIGFuZCBgb2ZmbGluZV9wYWdlc2AuIFRoZXNlIHBvaW50IGRpcmVjdGx5IHRvIHRoZSBhcmVhIG9mIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gKENNQSkgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBpc29sYXRpb24gcHJvY2Vzcy4gRnVydGhlciwgd2Ugc2VlIGBhbGxvY19jb250aWdfZnJvemVuXy4uLl9ub3Byb2ZgIHdoaWNoIGluZGljYXRlcyB0aGF0IGZyb3plbiBwYWdlcyBhcmUgaW52b2x2ZWQuXG5cblRoZSBlbmFibGVtZW50IGNvbmZpZ3VyYXRpb25zLCBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCwgYXJlIHRoZSBrZXlzLiBUaGUgcGF0Y2gncyBpbXBhY3QgaXMgdGllZCBkaXJlY3RseSB0byBob3cgY29udGlndW91cyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBwYXJ0aWN1bGFybHkgd2l0aCBnaWdhbnRpYyBodWdlcGFnZXMsIGFuZCBob3cgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucyBpbXBhY3QgdGhlIGlzb2xhdGlvbiBtZWNoYW5pc20uIFRoZSBpbXBhY3Qgb2YgdGhlc2UgaXMgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGUgcGF0Y2gsIHRoZXJlZm9yZSwgaW1wYWN0cyB0aGUgQ01BIG1lY2hhbmlzbS5cblxuU28sIGxldCdzIGNhbGwgdGhpcyBzZXQgb2YgaW5mb3JtYXRpb24gJ3NldC1yZXN1bHRzJy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzUsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjM1Ljk3ODE3NjgzNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDY0NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfcGFnZXNfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlc19ub3Byb2ZcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgcmVzdWx0cyBvZiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKHBhZ2UgaXNvbGF0aW9uKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIChDTUEsIGdpZ2FudGljIGh1Z2VwYWdlcykgYW5kIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiLFxuICAgIFwiYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZcIixcbiAgICBcImFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXNfbm9wcm9mXCIsXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGJ5IHZhbGlkYXRpbmcgdGhlIHJlc3VsdHMgb2YgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGBjb21wb3VuZF9vcmRlcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChwYWdlIGlzb2xhdGlvbiksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiAoQ01BLCBnaWdhbnRpYyBodWdlcGFnZXMpIGFuZCBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowNDozNi4wNTI2NDgzMloiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5OTYzMDM0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNDowNDozNi4wNTMxODI2OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDk5NTc2NTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCB3aGVyZSBwYWdlIG1ldGFkYXRhIChzdWNoIGFzIGJ1ZGR5IG9yZGVyIG9yIGNvbXBvdW5kIGhlYWQpIGlzIHJlYWQgd2l0aG91dCBsb2Nrcy4gUmFjeSByZWFkcyBjYW4gcmVzdWx0IGluIGludmFsaWQgdmFsdWVzLCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGluZmluaXRlIGxvb3BzLCBvciBpbmNvcnJlY3QgcGFnZSBmcmFtZSBudW1iZXIgKFBGTikgY2FsY3VsYXRpb25zLiBUaGUgY2hhbmdlcyBhZGQgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIGZvciB0aGUgcmVhZCB2YWx1ZXMgKGBvcmRlcmAsIGBoZWFkX3BmbmApIHRvIHByZXZlbnQgdGhlc2UgaXNzdWVzLlxcblxcblRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKGZvciBvdXQtb2YtYm91bmRzKSBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyAoZm9yIGNyYXNoZXMvaGFuZ3MpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGNhdXNlIGFuIGluZm8tbGVhay4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY0M2Y1ZTBmNmZkZWFjMjA0MzQxZjQwZDNmZDE0Nzg0NzE2MGQ1MTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNDowMjo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li45Y2Y3ZjkyMDExYmQzIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuKysrIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyArMzg3LDE1IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHR9XG4gXG4gXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4gXG4tXHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuLVx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuLVxuLVx0XHRcdHBmbiArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovXG4rXHRcdFx0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHBmbiArICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2M9IGJvdW5kYXJ5X3Bmbikge1xuK1x0XHRcdFx0cGZuICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdH1cbiBcbiBcdFx0LypcbkBAIC00MTIsMTAgKzQxNCwyOCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcbiBcdFx0aWYgKFBhZ2VDb21wb3VuZChwYWdlKSkge1xuIFx0XHRcdHN0cnVjdCBwYWdlICpoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGNvbXBvdW5kX25yKGhlYWQpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKGhlYWQpO1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4rXG4rXHRcdFx0LyogY29tcG91bmRfb3JkZXIoKSBpcyByYWN5LiBDYXAgaXQgYXQgTUFYX0ZPTElPX09SREVSLiAqL1xuK1x0XHRcdGlmIChvcmRlciBcdTAwM2UgTUFYX0ZPTElPX09SREVSKVxuK1x0XHRcdFx0Z290byBmYWlsZWQ7XG4rXG4rXHRcdFx0bnJfcGFnZXMgPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogY29tcG91bmRfaGVhZCgpIGlzIGFsc28gcmFjeSwgc28gdGhlIGRlcml2ZWQgaGVhZF9wZm5cbitcdFx0XHQgKiBuZWVkcyBhZGRpdGlvbmFsIGNoZWNrcyB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuXG4rXHRcdFx0ICogT3RoZXJ3aXNlLCBqdXN0IGZhaWwgdGhlIGNoZWNrLiBwZm4gY29tZXMgZnJvbVxuK1x0XHRcdCAqIF9fZmlyc3RfdmFsaWRfcGFnZSgpIGFzIGEgbGVnaXRpbWF0ZSBQRk4sIHNvIHVzZSBpdCB0b1xuK1x0XHRcdCAqIGNoZWNrIGhlYWRfcGZuLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChoZWFkX3BmbiBcdTAwM2UgcGZuIHx8ICFJU19BTElHTkVEKGhlYWRfcGZuLCBucl9wYWdlcykgfHxcbitcdFx0XHQgICAgcGZuIC0gaGVhZF9wZm4gXHUwMDNlPSBucl9wYWdlcylcbitcdFx0XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0XHRcdGlmIChoZWFkX3BmbiArIG5yX3BhZ2VzIFx1MDAzYz0gYm91bmRhcnlfcGZuIHx8XG4tXHRcdFx0ICAgIFBhZ2VIdWdlKHBhZ2UpKSB7XG4rXHRcdFx0ICAgIFBhZ2VIdWdlKGhlYWQpKSB7XG4gXHRcdFx0XHRwZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDQ6MDQ6MzYuMDUzMTgzNjExWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTk1NzQ4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJlYXNvbmluZyAtIE5vIE5lZWQgZm9yIERlZGljYXRlZCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaW5kaWNhdGVzIGl0J3MgYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMsIHNwZWNpZmljYWxseSB0aG9zZSBhcmlzaW5nIGZyb20gY29uY3VycmVudCBhY2Nlc3MgdG8gcGFnZSBtZXRhZGF0YS4gSXQncyBlc3NlbnRpYWxseSByZXBsYWNpbmcgY2FsbHMgbGlrZSBgYnVkZHlfb3JkZXIocGFnZSlgIHdpdGggYGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKWAgYW5kIGRvaW5nIHRoZSBzYW1lIGZvciBjb21wb3VuZCBwYWdlIGluZm9ybWF0aW9uLCBhbmQgYWRkaW5nIHZhbGlkYXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIHJlYWRpbmcgaW5jb25zaXN0ZW50IHZhbHVlcyBkdWUgdG8gdGhlc2UgcmFjZSBjb25kaXRpb25zLlxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IG5ldyBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG5vciBkb2VzIGl0IGxlYWsgYW55IHNlbnNpdGl2ZSBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0J3Mgc3RyaWN0bHkgYWJvdXQgc2FmZWd1YXJkaW5nIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyByZWFkcywgaW5maW5pdGUgbG9vcHMsIG9yIGNyYXNoZXMgdHJpZ2dlcmVkIGJ5IHJlYWRpbmcgcGFnZSBtZXRhZGF0YSBjb25jdXJyZW50bHkuIFRoZXNlIGFyZSB0aGUga2luZHMgb2YgaXNzdWVzIHRoYXQgSSdkIHR5cGljYWxseSBleHBlY3QgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgdG8gY2F0Y2gg4oCTIG9yIHRoYXQgd291bGQgc2ltcGx5IHJlc3VsdCBpbiBhIGtlcm5lbCBwYW5pYyB0aGF0IHRoZSBzdGFuZGFyZCB0ZXN0aW5nIHN1aXRlIHdvdWxkIGZsYWcuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBteSB0aGlua2luZy4gUmlnaHQsIHNvIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgYW5kIGBjb21wb3VuZF9vcmRlcigpYCBhcmUgaW5kZWVkIFwidW5zYWZlXCIgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSByZWFkIHdpdGhvdXQgbG9ja2luZy4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgdGhpcyBieSB2YWxpZGF0aW5nIHRoZSByZXRyaWV2ZWQgYG9yZGVyYCB2YWx1ZXMgYWdhaW5zdCByZWFzb25hYmxlIGJvdW5kcywgbGlrZSBgTUFYX1BBR0VfT1JERVJgIGFuZCBtYWtpbmcgc3VyZSB0aGF0IHBhZ2UgZnJhbWUgbnVtYmVyIGNhbGN1bGF0aW9uIGlzIHZhbGlkLCBhbmQgdGhlIGNvbXBvdW5kIGhlYWQgaW5mb3JtYXRpb24uIFRoaXMgbWl0aWdhdGVzIHRoZSByaXNrIG9mIHJlYWRpbmcgc3RhbGUgZGF0YSB3aGljaCBjb3VsZCB0aGVuIGxlYWQgdG8gdGhvc2Ugb3V0LW9mLWJvdW5kcyBvciBpbmZpbml0ZSBsb29wIHByb2JsZW1zLiBgY29tcG91bmRfaGVhZChwYWdlKWAgaXMgYWxzbyBoYW5kbGVkIHNpbWlsYXJseS4gVGhpcyBwcmV2ZW50cyB0aGUgY29kZSBmcm9tIHVzaW5nIGludmFsaWQgZGF0YS5cblxuVGhlIGJ1Z3MgdGhpcyBwYXRjaCBhZGRyZXNzZXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgYXJlIGFsbCBhYm91dCBjb25jdXJyZW5jeSBhbmQgaW5jb25zaXN0ZW50IGRhdGEuIEl0J3MgYWJvdXQgcHJvdGVjdGluZyBhZ2FpbnN0IHRoZSBjb25zZXF1ZW5jZXMgb2YgcmFjeSByZWFkcyBvbiBwYWdlIG1ldGFkYXRhLCB3aGljaCBhcmUgd2VsbC11bmRlcnN0b29kIGlzc3VlcyBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQuIEdpdmVuIGFsbCB0aGF0LCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIE15IEtNU0FOIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIG1lbW9yeSBzYWZldHkgaXNzdWVzIChvdXQtb2YtYm91bmRzLCBpbmZpbml0ZSBsb29wcywgYmFkIFBGTiBjYWxjdWxhdGlvbnMpLCBidXQgdGhlc2UgYXJlbid0IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50LCBhcyB0aGlzIGlzbid0IGludHJvZHVjaW5nICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueSBkYXRhIGxlYWsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpc24ndCB3YXJyYW50ZWQgaW4gdGhpcyBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY5LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA0OjA0OjQ3LjA0ODkzNDcyNloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCB3aGVyZSBwYWdlIG1ldGFkYXRhIChzdWNoIGFzIGJ1ZGR5IG9yZGVyIG9yIGNvbXBvdW5kIGhlYWQpIGlzIHJlYWQgd2l0aG91dCBsb2Nrcy4gUmFjeSByZWFkcyBjYW4gcmVzdWx0IGluIGludmFsaWQgdmFsdWVzLCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGluZmluaXRlIGxvb3BzLCBvciBpbmNvcnJlY3QgcGFnZSBmcmFtZSBudW1iZXIgKFBGTikgY2FsY3VsYXRpb25zLiBUaGUgY2hhbmdlcyBhZGQgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIGZvciB0aGUgcmVhZCB2YWx1ZXMgKGBvcmRlcmAsIGBoZWFkX3BmbmApIHRvIHByZXZlbnQgdGhlc2UgaXNzdWVzLlxcblxcblRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKGZvciBvdXQtb2YtYm91bmRzKSBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyAoZm9yIGNyYXNoZXMvaGFuZ3MpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGNhdXNlIGFuIGluZm8tbGVhay4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2hlcmUgcGFnZSBtZXRhZGF0YSAoc3VjaCBhcyBidWRkeSBvcmRlciBvciBjb21wb3VuZCBoZWFkKSBpcyByZWFkIHdpdGhvdXQgbG9ja3MuIFJhY3kgcmVhZHMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHZhbHVlcywgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbmZpbml0ZSBsb29wcywgb3IgaW5jb3JyZWN0IHBhZ2UgZnJhbWUgbnVtYmVyIChQRk4pIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYWRkIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBmb3IgdGhlIHJlYWQgdmFsdWVzIChgb3JkZXJgLCBgaGVhZF9wZm5gKSB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy5cXG5cXG5UaGVzZSB0eXBlcyBvZiBidWdzIGFyZSByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIChmb3Igb3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgKGZvciBjcmFzaGVzL2hhbmdzKS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjYXVzZSBhbiBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcd7x[1] Phase: Succeeded StartedAt: 2026-08-21 04:04:58 +0000 UTC FinishedAt: 2026-08-21 04:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 04:04:58 +0000 UTC FinishedAt: 2026-08-21 04:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2] Phase: Succeeded StartedAt: 2026-08-21 04:04:58 +0000 UTC FinishedAt: 2026-08-21 07:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 04:04:58 +0000 UTC FinishedAt: 2026-08-21 07:48:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 04:04:58 +0000 UTC FinishedAt: 2026-08-21 04:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 04:04:58 +0000 UTC FinishedAt: 2026-08-21 04:05:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowxcd7x/series-workflowxcd7x-convert-artifact-3452468749/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 04:05:08 +0000 UTC FinishedAt: 2026-08-21 04:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 04:05:08 +0000 UTC FinishedAt: 2026-08-21 04:21:24 +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:*2f2d02b4-3448-4137-8d47-0f222d8b835d,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-workflowxcd7x/series-workflowxcd7x-convert-artifact-3452468749/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": "8e89fff3-9589-4e1c-9657-0a2c0c8a30f2", "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-workflowxcd7x/series-workflowxcd7x-build-action-3196049795/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 04:05:08 +0000 UTC FinishedAt: 2026-08-21 04:21:14 +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:*2f2d02b4-3448-4137-8d47-0f222d8b835d,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-workflowxcd7x/series-workflowxcd7x-convert-artifact-3452468749/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": "8e89fff3-9589-4e1c-9657-0a2c0c8a30f2", "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-workflowxcd7x/series-workflowxcd7x-build-action-3196049795/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 04:21:24 +0000 UTC FinishedAt: 2026-08-21 04:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 04:21:24 +0000 UTC FinishedAt: 2026-08-21 04:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 04:21:24 +0000 UTC FinishedAt: 2026-08-21 04:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 04:21:24 +0000 UTC FinishedAt: 2026-08-21 04:21:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowxcd7x/series-workflowxcd7x-convert-artifact-879257192/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 04:21:34 +0000 UTC FinishedAt: 2026-08-21 04:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 04:21:34 +0000 UTC FinishedAt: 2026-08-21 04:23:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8e89fff3-9589-4e1c-9657-0a2c0c8a30f2,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-workflowxcd7x/series-workflowxcd7x-build-action-3196049795/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-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 04:23:36 +0000 UTC FinishedAt: 2026-08-21 04:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 04:23:36 +0000 UTC FinishedAt: 2026-08-21 04:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 04:23:36 +0000 UTC FinishedAt: 2026-08-21 04:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 04:23:36 +0000 UTC FinishedAt: 2026-08-21 04:40:27 +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:*2f2d02b4-3448-4137-8d47-0f222d8b835d,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-workflowxcd7x/series-workflowxcd7x-convert-artifact-879257192/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": "ee659b22-0243-4e37-9e9b-50bd75f7997a", "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-workflowxcd7x/series-workflowxcd7x-build-action-1549082132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 04:23:36 +0000 UTC FinishedAt: 2026-08-21 04:40:17 +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:*2f2d02b4-3448-4137-8d47-0f222d8b835d,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-workflowxcd7x/series-workflowxcd7x-convert-artifact-879257192/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": "ee659b22-0243-4e37-9e9b-50bd75f7997a", "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-workflowxcd7x/series-workflowxcd7x-build-action-1549082132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 04:40:27 +0000 UTC FinishedAt: 2026-08-21 04:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 04:40:27 +0000 UTC FinishedAt: 2026-08-21 04:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 04:40:27 +0000 UTC FinishedAt: 2026-08-21 04:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 04:40:27 +0000 UTC FinishedAt: 2026-08-21 04:42:48 +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:*ee659b22-0243-4e37-9e9b-50bd75f7997a,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-workflowxcd7x/series-workflowxcd7x-build-action-1549082132/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-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 04:42:58 +0000 UTC FinishedAt: 2026-08-21 07:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 04:42:58 +0000 UTC FinishedAt: 2026-08-21 07:48:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},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:*8e89fff3-9589-4e1c-9657-0a2c0c8a30f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ee659b22-0243-4e37-9e9b-50bd75f7997a,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-workflowxcd7x/series-workflowxcd7x-build-action-3196049795/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-workflowxcd7x/series-workflowxcd7x-build-action-1549082132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 04:42:58 +0000 UTC FinishedAt: 2026-08-21 04:43:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 04:42:58 +0000 UTC FinishedAt: 2026-08-21 04:43:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},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-workflowxcd7x/series-workflowxcd7x-convert-artifact-3259346849/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 04:42:58 +0000 UTC FinishedAt: 2026-08-21 04:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 04:42:58 +0000 UTC FinishedAt: 2026-08-21 04:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 04:42:58 +0000 UTC FinishedAt: 2026-08-21 04:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 04:43:08 +0000 UTC FinishedAt: 2026-08-21 07:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcd7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_pages_noprof","alloc_contig_frozen_range_noprof","alloc_contig_frozen_pages_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"7f6d38bf-8449-4902-a048-1013e149f53e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 04:43:08 +0000 UTC FinishedAt: 2026-08-21 07:48:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8e89fff3-9589-4e1c-9657-0a2c0c8a30f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ee659b22-0243-4e37-9e9b-50bd75f7997a,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-workflowxcd7x/series-workflowxcd7x-build-action-3196049795/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-workflowxcd7x/series-workflowxcd7x-build-action-1549082132/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-workflowxcd7x/series-workflowxcd7x-convert-artifact-3259346849/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,}