Name: series-workflow87g8z Phase: Succeeded StartedAt: 2026-07-06 04:14:35 +0000 UTC FinishedAt: 2026-07-06 06:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[0] Phase: Succeeded StartedAt: 2026-07-06 04:14:35 +0000 UTC FinishedAt: 2026-07-06 04:28:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 04:14:35 +0000 UTC FinishedAt: 2026-07-06 04:28:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1a3746ccbb0a97bed3c06ccde6b880013b1dddc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1a3746ccbb0a97bed3c06ccde6b880013b1dddc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "55ca1f47-6926-4e9d-bf89-879dde7fbb0f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_attrlist_update", "ntfs_evict_big_inode", "ntfs_attr_update_mapping_pairs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJsaXN0X3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtudGZzX2V2aWN0X2JpZ19pbm9kZSYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgZGVhZGxvY2sgaW4gdGhlIE5URlMgZHJpdmVyIGR1cmluZyB1bm1vdW50L2V2aWN0aW9uIGJ5IGNoZWNraW5nIHRoZSBTQl9BQ1RJVkUgZmxhZyBpbiBudGZzX2F0dHJsaXN0X3VwZGF0ZSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmODI1ODkwNGI3Y2I5OTIxZTBkN2Q2MzEzZDdjYmUwNjI1NTU0MDU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAwNDoyNToyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJsaXN0LmMgYi9mcy9udGZzL2F0dHJsaXN0LmNcbmluZGV4IGFmYjEzMDM4YmE0MjVmLi5iZTMwODZkMzQzMzgxNiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvYXR0cmxpc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9hdHRybGlzdC5jXG5AQCAtNTcsNiAmIzQzOzU3LDE1IEBAIGludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSlcbiBcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoKSBjbGVhcnMgU0JfQUNUSVZFIGJlZm9yZSBldmljdGluZyBjYWNoZWRcbiYjNDM7XHQgKiBpbm9kZXMuIERvIG5vdCBsb29rIHVwIHRoZSBhdHRyaWJ1dGUtbGlzdCBpbm9kZSBhZnRlciBTQl9BQ1RJVkUgaGFzXG4mIzQzO1x0ICogYmVlbiBjbGVhcmVkOyBpdCBtYXkgYWxyZWFkeSBiZSBJX0ZSRUVJTkcsIGFuZCB3YWl0aW5nIG9uIGl0IGNhblxuJiM0MztcdCAqIHNlbGYtZGVhZGxvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCEoVkZTX0koYmFzZV9uaSktXHUwMDNlaV9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9BQ1RJVkUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuIFx0YXR0cl92aSA9IG50ZnNfYXR0cl9pZ2V0KFZGU19JKGJhc2VfbmkpLCBBVF9BVFRSSUJVVEVfTElTVCwgQVRfVU5OQU1FRCwgMCk7XG4gXHRpZiAoSVNfRVJSKGF0dHJfdmkpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoYXR0cl92aSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfYXR0cmxpc3RfdXBkYXRlJiMzNDssCiAgICAmIzM0O250ZnNfZXZpY3RfYmlnX2lub2RlJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjgyNTg5MDRiN2NiOTkyMWUwZDdkNjMxM2Q3Y2JlMDYyNTU1NDA1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMDQ6MjU6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJsaXN0LmMgYi9mcy9udGZzL2F0dHJsaXN0LmMKaW5kZXggYWZiMTMwMzhiYTQyNWYuLmJlMzA4NmQzNDMzODE2IDEwMDY0NAotLS0gYS9mcy9udGZzL2F0dHJsaXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9hdHRybGlzdC5jCkBAIC01Nyw2ICYjNDM7NTcsMTUgQEAgaW50IG50ZnNfYXR0cmxpc3RfdXBkYXRlKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pKQogCXN0cnVjdCBudGZzX2lub2RlICphdHRyX25pOwogCWludCBlcnI7CiAKJiM0MzsJLyoKJiM0MzsJICogZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpIGNsZWFycyBTQl9BQ1RJVkUgYmVmb3JlIGV2aWN0aW5nIGNhY2hlZAomIzQzOwkgKiBpbm9kZXMuIERvIG5vdCBsb29rIHVwIHRoZSBhdHRyaWJ1dGUtbGlzdCBpbm9kZSBhZnRlciBTQl9BQ1RJVkUgaGFzCiYjNDM7CSAqIGJlZW4gY2xlYXJlZDsgaXQgbWF5IGFscmVhZHkgYmUgSV9GUkVFSU5HLCBhbmQgd2FpdGluZyBvbiBpdCBjYW4KJiM0MzsJICogc2VsZi1kZWFkbG9jay4KJiM0MzsJICovCiYjNDM7CWlmICghKFZGU19JKGJhc2VfbmkpLSZndDtpX3NiLSZndDtzX2ZsYWdzICZhbXA7IFNCX0FDVElWRSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKIAlhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0koYmFzZV9uaSksIEFUX0FUVFJJQlVURV9MSVNULCBBVF9VTk5BTUVELCAwKTsKIAlpZiAoSVNfRVJSKGF0dHJfdmkpKSB7CiAJCWVyciA9IFBUUl9FUlIoYXR0cl92aSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRmlsZSBTeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL250ZnMvYXR0cmxpc3QuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gYG50ZnNfYXR0cmxpc3RfdXBkYXRlKClgLiBTcGVjaWZpY2FsbHksIHRoaXMgYml0OgpgYGBjCglpZiAoIShWRlNfSShiYXNlX25pKS0mZ3Q7aV9zYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9BQ1RJVkUpKQoJCXJldHVybiAtRUlPOwpgYGAKVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgZnMvbnRmcy9hdHRybGlzdC5jYCBmaWxlIGFuZCB0aGUgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBmdW5jdGlvbiBpdHNlbGYgdG8gc2VlIHRoZSBjb250ZXh0LgoKUmlnaHQsIHRoZSBwYXRoIGlzIGBmcy9udGZzL2F0dHJsaXN0LmNgLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgTlRGUyBpcyBhY3R1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0JiMzOTtzIGdhdGluZyB0aGlzLiBJJiMzOTttIHVzdWFsbHkgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgYE5URlNfRlNgLCBidXQgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBhbHdheXMgYE5URlMzX0ZTYCBpbiBgZnMvbnRmczMvYCwgc28gSSBoYXZlIHRvIGJlIGNhcmVmdWwgdGhhdCB0aGlzIGlzIHRoZSBjbGFzc2ljIE5URlMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlIGluIGBmcy9udGZzL2AgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTlRGU19GU2AgaXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIEJ1dCBob2xkIG9uLCB3YXNuJiMzOTt0IHRoYXQgdGhlICpvbGQqIE5URlMgZHJpdmVyPyBEaWRuJiMzOTt0IHdlIG1vdmUgb24gdG8gYE5URlMzX0ZTYCBhIHdoaWxlIGJhY2s/IEkgdGhvdWdodCBgTlRGU19GU2Agd2FzIGVpdGhlciByZW1vdmVkIG9yIGF0IGxlYXN0IGhlYXZpbHkgZGVwcmVjYXRlZCBhdCB0aGlzIHBvaW50LiBKdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZmlsZXN5c3RlbSBkcml2ZXJzLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeSB0byBjb25maXJtLiBJIHNob3VsZCBzZWUgaWYgdGhlIGBmcy9udGZzL2AgZGlyZWN0b3J5IGlzIHN0aWxsIHByZXNlbnQuIFRoYXQgd2lsbCB0ZWxsIHRoZSB0YWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2ZzL250ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthb3BzLmMmIzM0OywKICAgICYjMzQ7YXR0cmliLmMmIzM0OywKICAgICYjMzQ7YXR0cmliLmgmIzM0OywKICAgICYjMzQ7YXR0cmxpc3QuYyYjMzQ7LAogICAgJiMzNDthdHRybGlzdC5oJiMzNDssCiAgICAmIzM0O2JkZXYtaW8uYyYjMzQ7LAogICAgJiMzNDtiaXRtYXAuYyYjMzQ7LAogICAgJiMzNDtiaXRtYXAuaCYjMzQ7LAogICAgJiMzNDtjb2xsYXRlLmMmIzM0OywKICAgICYjMzQ7Y29sbGF0ZS5oJiMzNDssCiAgICAmIzM0O2NvbXByZXNzLmMmIzM0OywKICAgICYjMzQ7ZGVidWcuYyYjMzQ7LAogICAgJiMzNDtkZWJ1Zy5oJiMzNDssCiAgICAmIzM0O2Rpci5jJiMzNDssCiAgICAmIzM0O2Rpci5oJiMzNDssCiAgICAmIzM0O2VhLmMmIzM0OywKICAgICYjMzQ7ZWEuaCYjMzQ7LAogICAgJiMzNDtmaWxlLmMmIzM0OywKICAgICYjMzQ7aW5kZXguYyYjMzQ7LAogICAgJiMzNDtpbmRleC5oJiMzNDssCiAgICAmIzM0O2lub2RlLmMmIzM0OywKICAgICYjMzQ7aW5vZGUuaCYjMzQ7LAogICAgJiMzNDtpb21hcC5jJiMzNDssCiAgICAmIzM0O2lvbWFwLmgmIzM0OywKICAgICYjMzQ7bGF5b3V0LmgmIzM0OywKICAgICYjMzQ7bGNuYWxsb2MuYyYjMzQ7LAogICAgJiMzNDtsY25hbGxvYy5oJiMzNDssCiAgICAmIzM0O2xvZ2ZpbGUuYyYjMzQ7LAogICAgJiMzNDtsb2dmaWxlLmgmIzM0OywKICAgICYjMzQ7bWFsbG9jLmgmIzM0OywKICAgICYjMzQ7bWZ0LmMmIzM0OywKICAgICYjMzQ7bWZ0LmgmIzM0OywKICAgICYjMzQ7bXN0LmMmIzM0OywKICAgICYjMzQ7bmFtZWkuYyYjMzQ7LAogICAgJiMzNDtudGZzLmgmIzM0OywKICAgICYjMzQ7b2JqZWN0X2lkLmMmIzM0OywKICAgICYjMzQ7b2JqZWN0X2lkLmgmIzM0OywKICAgICYjMzQ7cmVwYXJzZS5jJiMzNDssCiAgICAmIzM0O3JlcGFyc2UuaCYjMzQ7LAogICAgJiMzNDtydW5saXN0LmMmIzM0OywKICAgICYjMzQ7cnVubGlzdC5oJiMzNDssCiAgICAmIzM0O3N1cGVyLmMmIzM0OywKICAgICYjMzQ7c3lzY3RsLmMmIzM0OywKICAgICYjMzQ7c3lzY3RsLmgmIzM0OywKICAgICYjMzQ7dGltZS5oJiMzNDssCiAgICAmIzM0O3VuaXN0ci5jJiMzNDssCiAgICAmIzM0O3VwY2FzZS5jJiMzNDssCiAgICAmIzM0O3ZvbHVtZS5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBFeGlzdGVuY2UgYW5kIERpdmluZyBJbioqCgpZZXAsIGl0JiMzOTtzIGRlZmluaXRlbHkgYSByZWFsIHRoaW5nLiBPa2F5LCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBUaGUgcGxhY2UgdG8gc3RhcnQgcG9raW5nIGFyb3VuZCBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGlzIGdvaW5nIHRvIGJlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgaW4gYGZzL250ZnMvYXR0cmxpc3QuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIGFueSBhdHRyaWJ1dGUgbGlzdCB1cGRhdGUgbG9naWMgcmVzaWRlcy4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfYXR0cmxpc3RfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9hdHRyaWIuYz0zNTQxPXN0YXRpYyBpbnQgbnRmc19hdHRyX3VwZGF0ZV9tZXRhKHN0cnVjdCBhdHRyX3JlY29yZCAqYSwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtMzU5MC1cbmZzL250ZnMvYXR0cmliLmM6MzU5MTpcdFx0XHRlcnIgPSBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTtcbmZzL250ZnMvYXR0cmliLmMtMzU5Mi1cdFx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMvYXR0cmliLmM9MzY4MD1pbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxuLS1cbmZzL250ZnMvYXR0cmliLmMtMzgxNi1cdFx0XHRcdH1cbmZzL250ZnMvYXR0cmliLmM6MzgxNzpcdFx0XHRcdGlmIChudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKSlcbmZzL250ZnMvYXR0cmliLmMtMzgxOC1cdFx0XHRcdFx0cmV0dXJuIC1FSU87XG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0zODU2LVx0XHRcdGN0eC1cdTAwM2VhbF9lbnRyeS1cdTAwM2Vsb3dlc3RfdmNuID0gY3B1X3RvX2xlNjQoc3RvcF92Y24pO1xuZnMvbnRmcy9hdHRyaWIuYzozODU3Olx0XHRcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xuZnMvbnRmcy9hdHRyaWIuYy0zODU4LVx0XHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00NTk1PXN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpemUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00NzUyLVx0XHR9XG5mcy9udGZzL2F0dHJpYi5jOjQ3NTM6XHRcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xuZnMvbnRmcy9hdHRyaWIuYy00NzU0LVx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMvYXR0cmliLmMtNDgwOC1cbmZzL250ZnMvYXR0cmliLmM6NDgwOTpcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xuZnMvbnRmcy9hdHRyaWIuYy00ODEwLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5mcy9udGZzL2F0dHJsaXN0LmM9MjU9aW50IG50ZnNfYXR0cmxpc3RfbmVlZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jLTUzLVxuZnMvbnRmcy9hdHRybGlzdC5jOjU0OmludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSlcbmZzL250ZnMvYXR0cmxpc3QuYy01NS17XG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jPTEyMT1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jLTIzNS1cbmZzL250ZnMvYXR0cmxpc3QuYzoyMzY6XHRlcnIgPSBudGZzX2F0dHJsaXN0X3VwZGF0ZShuaSk7XG5mcy9udGZzL2F0dHJsaXN0LmMtMjM3LVx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvYXR0cmxpc3QuYz0yNTc9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jLTMwMC1cbmZzL250ZnMvYXR0cmxpc3QuYzozMDE6XHRyZXR1cm4gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XG5mcy9udGZzL2F0dHJsaXN0LmMtMzAyLX1cbi0tXG5mcy9udGZzL2F0dHJsaXN0Lmg9MTc9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuZnMvbnRmcy9hdHRybGlzdC5oOjE4OmludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSk7XG5mcy9udGZzL2F0dHJsaXN0LmgtMTktXG4tLVxuZnMvbnRmcy9pbmRleC5jPTEyMzY9c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTM0MC1cdFx0XHRcdGxlMzJfdG9fY3B1KGN0eC1cdTAwM2VhdHRyLVx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKSkpIHtcbmZzL250ZnMvaW5kZXguYzoxMzQxOlx0XHRcdGlmIChudGZzX2F0dHJsaXN0X3VwZGF0ZShjdHgtXHUwMDNlYmFzZV9udGZzX2lubyA/XG5mcy9udGZzL2luZGV4LmMtMTM0Mi1cdFx0XHRcdFx0XHQgY3R4LVx1MDAzZWJhc2VfbnRmc19pbm8gOiBjdHgtXHUwMDNlbnRmc19pbm8pKVxuLS1cbmZzL250ZnMvaW5vZGUuYz0zMDMxPWludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTMxMzktXG5mcy9udGZzL2lub2RlLmM6MzE0MDpcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKG5pKTtcbmZzL250ZnMvaW5vZGUuYy0zMTQxLVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDcyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlRGUyBBdHRyaWJ1dGUgTGlzdCBVcGRhdGUqKgoKT2theSwgc28gdGhlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgZnVuY3Rpb24sIGludGVyZXN0aW5nLiBJdCYjMzk7cyB1c2VkIGFsbCBvdmVyIHRoZSBOVEZTIGZpbGVzeXN0ZW0gY29kZSDigJMgYGF0dHJpYi5jYCwgYGF0dHJsaXN0LmNgLCBgaW5kZXguY2AsIGFuZCBgaW5vZGUuY2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgcHJldHR5IGZ1bmRhbWVudGFsIHRvIHRoZSB3YXkgTlRGUyBtYW5hZ2VzIGl0cyBhdHRyaWJ1dGVzLiBUaGlzIHBhdGNoLCBhaCwgaXQgYWRkcyBhIGNoZWNrIGZvciBgU0JfQUNUSVZFYCB3aXRoaW4gdGhlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgZnVuY3Rpb24uIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiwgZGVmaW5pdGVseSBjaGFuZ2luZyBob3cgdGhpcyB1cGRhdGUgb3BlcmF0aW9uIGJlaGF2ZXMgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBOb3csIHRoZSBjb250ZXh0IGlzIE5URlMsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBgTlRGU19GU2AgY29uZmlndXJhdGlvbiBvcHRpb24uIEJ1dCB3YWl0LCBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBJcyBgTlRGU19SV2AgYWxzbyByZWxldmFudD8gQmVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgaW1wYWN0cy4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kICphbGwqIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5URlNfUlcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODUyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSHVudGluZyBEb3duIFJlYWQvV3JpdGUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgcmVhZC93cml0ZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGZvciB0aGUgTlRGUyBmaWxlc3lzdGVtIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBpcyB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSYjMzk7ZCBiZSBzdXJwcmlzZWQgaWYgaXQgd2FzbiYjMzk7dCB0aGVyZS4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGBSV2Agb3IgaXRzIGVxdWl2YWxlbnQgaXMgZGVmaW5lZCBhcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGBjb25maWdgIG9wdGlvbiBvciBzb21lIG90aGVyIHZhcmlhYmxlIHRoYXQgSSBjYW4gdHdlYWssIG1heWJlIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfTlRGU19SV2AsIG9yIGEgcmVsYXRlZCBzeW1ib2wuIFRpbWUgdG8gY2hlY2sgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZy0xMi1cbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xuZnMvbnRmcy9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOVEZTIFJlYWQvV3JpdGUgU3VwcG9ydCoqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGRpZG4mIzM5O3QgSSByZW1lbWJlciBzZWVpbmcgYW4gYE5URlNfUldgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNvbWV3aGVyZT8gSSB3YXMgY2VydGFpbiB3ZSBoYWQgYSBkZWRpY2F0ZWQgZmxhZyBmb3IgcmVhZC93cml0ZSBjYXBhYmlsaXR5LCBub3QganVzdCByZWFkLW9ubHkuIEJldHRlciB2ZXJpZnkgdGhhdC4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtJiMzOTtzIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbmZpcm0gYW5kIGVuc3VyZSBpdOKAmXMgZW5hYmxlZCwgdW5kZXIgdGhlIGBmcy9udGZzL0tjb25maWdgIHBhdGguIExldCYjMzk7cyBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQgcmVnYXJkaW5nIGBSV2AgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSVyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTlRGUyBXcml0ZSBJbXBsZW1lbnRhdGlvbiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGluIHRhY2tsaW5nIHRoaXMgd3JpdGUgZnVuY3Rpb25hbGl0eSBxdWVzdGlvbiBpbiB0aGUgTlRGUyBtb2R1bGUgaXMgcHJldHR5IGNsZWFyIHRvIG1lOiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBzZXR0aW5ncyB3aWxsIGxpa2VseSBiZSBmb3VuZCBpbiB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYW55dGhpbmcgcmVsYXRlZCB0byAmIzM0O3dyaXRlJiMzNDsgY2FwYWJpbGl0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25maWd1cmF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIG9yIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBzaGVkIGxpZ2h0IG9uIGhvdyB3cml0ZSBzdXBwb3J0IGlzIGNvbnRyb2xsZWQgYW5kIGVuYWJsZWQgd2l0aGluIHRoZSBkcml2ZXIuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgZm9yIGV4YW1pbmluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgd2hpY2ggc2hvdWxkIHJldmVhbCB0aGUgY29uZGl0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIGhvdyB3cml0ZSBzdXBwb3J0IGlzIGNvbXBpbGVkIGludG8gdGhlIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqSW52ZXN0aWdhdGluZyBOVEZTIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpIbW0sIHNvIGxvb2tpbmcgYXQgYGZzL250ZnMvS2NvbmZpZ2AgKm5vdyosIGFsbCBJIHNlZSBhcmUgYE5URlNfRlNgLCBgTlRGU19ERUJVR2AsIGFuZCBgTlRGU19GU19QT1NJWF9BQ0xgLiBUaGF0JiMzOTtzIGl0PyBJJiMzOTttIHN1cmUgSSYjMzk7dmUgc2VlbiBtb3JlIG9wdGlvbnMgcmVsYXRlZCB0byBOVEZTIGF0IHNvbWUgcG9pbnQuIEl0JiMzOTtzIGJvdGhlcmluZyBtZS4uLiBXYWl0LCBJIHZhZ3VlbHkgcmVjYWxsIGFuIGBOVEZTX1JXYCBvcHRpb24gaW4gdGhlIHBhc3QsIG1heWJlIGluIGFuIG9sZGVyIGtlcm5lbCB2ZXJzaW9uJiMzOTtzIEtjb25maWc/IERpZCBpdCBnZXQgcmVtb3ZlZD8gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBrbm93LiBPa2F5LCB0aW1lIHRvIGRpdmUgYmFjayBpbnRvIGBmcy9udGZzL0tjb25maWdgIGFuZCByZWZyZXNoIG15IG1lbW9yeSwgY29uZmlybSB3aGF0JiMzOTtzIHRoZXJlIGFuZCB3aGF0JiMzOTtzIG1pc3NpbmcsIGFuZCBzZWUgaWYgSSBjYW4gZmlndXJlIG91dCB3aGF0IGhhcHBlbmVkIHdpdGggdGhhdCBgTlRGU19SV2Agc2V0dGluZy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlRGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgTkxTXG4gICA1Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgTlRGUyBpcyB0aGUgZmlsZSBzeXN0ZW0gb2YgTWljcm9zb2Z0IFdpbmRvd3MgTlQsIDIwMDAsIFhQIGFuZCAyMDAzLlxuICAgODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgZGV2aWNlcyBmb3JtYXR0ZWQgd2l0aCB0aGUgbnRmcyBmaWxlIHN5c3RlbS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDExOlx0XHQgIG50ZnMuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5URlNfREVCVUdcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7TlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBOVEZTIGZpbGUgc3lzdGVtLCBzYXlcbiAgMTg6XHRcdCAgWSBoZXJlLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBiZVxuICAxOTpcdFx0ICBwZXJmb3JtZWQgYnkgdGhlIGRyaXZlciBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzIHRvXG4gIDIwOlx0XHQgIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbSBsb2cuICBOb3RlIHRoYXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZVxuICAyMTpcdFx0ICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVG8gZW5hYmxlIHRoZW0sIHN1cHBseSB0aGUgb3B0aW9uIGRlYnVnX21zZ3M9MVxuICAyMjpcdFx0ICBhdCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB3aGVuIGJvb3RpbmcgdGhlIGtlcm5lbCBvciBhcyBhbiBvcHRpb25cbiAgMjM6XHRcdCAgdG8gaW5zbW9kIHdoZW4gbG9hZGluZyB0aGUgbnRmcyBtb2R1bGUuICBPbmNlIHRoZSBkcml2ZXIgaXMgYWN0aXZlLFxuICAyNDpcdFx0ICB5b3UgY2FuIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYnkgZG9pbmcgKGFzIHJvb3QpOlxuICAyNTpcdFx0ICBlY2hvIDEgXHUwMDNlIC9wcm9jL3N5cy9mcy9udGZzLWRlYnVnXG4gIDI2Olx0XHQgIFJlcGxhY2luZyB0aGUgXCYjMzQ7MVwmIzM0OyB3aXRoIFwmIzM0OzBcJiMzNDsgd291bGQgZGlzYWJsZSBkZWJ1ZyBtZXNzYWdlcy5cbiAgMjc6XHRcbiAgMjg6XHRcdCAgSWYgeW91IGxlYXZlIGRlYnVnZ2luZyBtZXNzYWdlcyBkaXNhYmxlZCwgdGhpcyByZXN1bHRzIGluIGxpdHRsZVxuICAyOTpcdFx0ICBvdmVyaGVhZCwgYnV0IGVuYWJsaW5nIGRlYnVnIG1lc3NhZ2VzIHJlc3VsdHMgaW4gdmVyeSBzaWduaWZpY2FudFxuICAzMDpcdFx0ICBzbG93ZG93biBvZiB0aGUgc3lzdGVtLlxuICAzMTpcdFxuICAzMjpcdFx0ICBXaGVuIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mXG4gIDMzOlx0XHQgIGRlYnVnZ2luZyBtZXNzYWdlcyB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXG4gIDM2Olx0XHRib29sIFwmIzM0O05URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gTlRGU19GU1xuICAzODpcdFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcbiAgNDE6XHRcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNMIHN1cHBvcnQgZm9yIG50ZnMsIHByb3ZpZGluZyBmdW5jdGlvbmFsIHBhcml0eVxuICA0NDpcdFx0ICB3aXRoIG50ZnMzIGRyaXZpZXIuXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIE5PVEU6IHRoaXMgaXMgbGludXggb25seSBmZWF0dXJlLiBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZXNlIEFDTHMuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSZW1vdmFsIG9mIE5URlMgV3JpdGUgU3VwcG9ydCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBOVEZTX1JXYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIG9uZSB0aGF0IGVuYWJsZWQgd3JpdGUgc3VwcG9ydCBmb3IgTlRGUywgd2FzIHJlbW92ZWQgYXQgc29tZSBwb2ludC4gSSB2YWd1ZWx5IHJlbWVtYmVyIGEgY29tbWl0IHJlbGF0ZWQgdG8gcmVtb3ZpbmcgTlRGUyB3cml0ZSBzdXBwb3J0LCBzb21ldGhpbmcgbGlrZSBgYTQ2MDQ0YTgwNzExYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIEkgdGhpbmsgdGhhdOKAmXMgd2hhdCBkaWQgaXQuIEp1c3QgdG8gY29uZmlybSwgbGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBNYWtlZmlsZSBmb3IgdGhlIE5URlMgZmlsZSBzeXN0ZW0gc2hvdWxkIGNvbnRhaW4gdGhlIGtleSB0byB1bmxvY2sgd2hhdCBoYXBwZW5lZC4gU28gbGV0JiMzOTtzIGdvIGNoZWNrIHRoZSBgZnMvbnRmcy9NYWtlZmlsZWAgdG8gdmVyaWZ5IHRoaXMgdGhlb3J5LCBhbmQgY29uZmlybSB3aGF0IHRoZSBjb21taXQgZGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai0kKENPTkZJR19OVEZTX0ZTKSAmIzQzOz0gbnRmcy5vXG4gICA0Olx0XG4gICA1Olx0bnRmcy15IDo9IGFvcHMubyBhdHRyaWIubyBjb2xsYXRlLm8gZGlyLm8gZmlsZS5vIGluZGV4Lm8gaW5vZGUubyBcXFxuICAgNjpcdFx0ICBtZnQubyBtc3QubyBuYW1laS5vIHJ1bmxpc3QubyBzdXBlci5vIHVuaXN0ci5vIGF0dHJsaXN0Lm8gZWEubyBcXFxuICAgNzpcdFx0ICB1cGNhc2UubyBiaXRtYXAubyBsY25hbGxvYy5vIGxvZ2ZpbGUubyByZXBhcnNlLm8gY29tcHJlc3MubyBcXFxuICAgODpcdFx0ICBpb21hcC5vIGRlYnVnLm8gc3lzY3RsLm8gb2JqZWN0X2lkLm8gYmRldi1pby5vXG4gICA5Olx0XG4gIDEwOlx0Y2NmbGFncy0kKENPTkZJR19OVEZTX0RFQlVHKSAmIzQzOz0gLURERUJVR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTY1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5URlMgS2VybmVsIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBOVEZTX0ZTYCBjb25maWcgb3B0aW9uIOKAkyBsb29rcyBsaWtlIHRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgbnRmc19hdHRybGlzdF91cGRhdGVgLiBEZWZpbml0ZWx5IHNlZW1zIHJlYWNoYWJsZSBpZiBJJiMzOTttIG1vdW50aW5nIGFuIE5URlMgZmlsZXN5c3RlbSBhbmQgcG9raW5nIGFyb3VuZCwgZG9pbmcgc29tZSBvcGVyYXRpb25zIHRoYXQgd291bGQgdHJpZ2dlciBpdC4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdoYXQgb3BlcmF0aW9ucyAqc3BlY2lmaWNhbGx5KiB0cmlnZ2VyIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWA/CgpPa2F5LCBkaWdnaW5nIGlu4oCmIGl0JiMzOTtzIHdoZW4gdGhlIGF0dHJpYnV0ZSBsaXN0IG5lZWRzIGEgcmVmcmVzaCwgc28gYWRkaW5nLCByZW1vdmluZywgb3IgcmVzaXppbmcgYXR0cmlidXRlcy4gVGhhdCBtYWtlcyBzZW5zZS4gTm93LCB3YXNuJiMzOTt0IHRoZXJlIHNvbWV0aGluZyBhYm91dCB3cml0ZSBzdXBwb3J0IGJlaW5nIHJlbW92ZWQ/IE9yIHdhcyB0aGF0IGp1c3QgZm9yIGEgc3BlY2lmaWMgdmVyc2lvbj8gSG1tLCAqY2hlY2tzIGZpbGVzKuKApiBgYW9wcy5jYCwgYGZpbGUuY2AsIGFuZCBgaW5vZGUuY2AgYXJlIGFsbCBoZXJlLiBTbywgdGhlIGJhc2UgZnVuY3Rpb25hbGl0eSBpcyBzdGlsbCB0aGVyZS4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIHdyaXRlIHN1cHBvcnQgKmlzKiBhY3R1YWxseSBnb25lLCBvciBpZiB0aGlzIGlzIGFuIGlzc3VlIG9mIGRlZ3JlZS4KCldhaXQgYSBzZWNvbmTigKYgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpcyBkaXJlY3RseSBjYWxsZWQgYnkgYG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkYCwgYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gLCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCwgYW5kIGBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplYC4gVGhvc2UgYXJlIGFsbCwgaWYgSSYjMzk7bSByZW1lbWJlcmluZyBjb3JyZWN0bHksIHdyaXRlIG9wZXJhdGlvbnMuIElmIHdyaXRlIHN1cHBvcnQgKndhcyogcmVtb3ZlZCwgaG93IGFyZSB0aG9zZSBmdW5jdGlvbnMgZXZlbiBjYWxsYWJsZT8gU29tZXRoaW5nIGRvZXNuJiMzOTt0IGFkZCB1cC4gQmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIG1vdW50IG9wdGlvbnMuIEkmIzM5O2xsIHBlZWsgYXQgYGZzL250ZnMvc3VwZXIuY2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgcmVhZC13cml0ZSBvcHRpb24gYXZhaWxhYmxlLCBvciBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGFzIHJlYWQtb25seS4gVGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TVNfUkRPTkxZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgxMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYFNCX1JET05MWWAqKgoKT2theSwgc28gSSYjMzk7bSBqdW1waW5nIHJpZ2h0IGludG8gY2hlY2tpbmcgYFNCX1JET05MWWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBmaWxlIHN5c3RlbSBmbGFncy4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgYWJvdXQgZW5zdXJpbmcgd2UmIzM5O3JlIGFkaGVyaW5nIHRvIHJlYWQtb25seSBzZW1hbnRpY3MuIElmIGEgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCByZWFkLW9ubHksIHdlIGFic29sdXRlbHkgKmNhbm5vdCogYWxsb3cgd3JpdGUgb3BlcmF0aW9ucywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaXMgYWNjb3VudGluZyBmb3IgdGhpcy4gSSBuZWVkIHRvIGJlIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaGVyZSwgcGVybWlzc2lvbiBpc3N1ZXMsIGFuZCBob3cgdGhlIHByb2dyYW0gaXMgaGFuZGxpbmcgdmFyaW91cyBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgYW55IHBsYWNlcyB3aGVyZSB3cml0ZXMgbWlnaHQgYWNjaWRlbnRhbGx5IGJlIGF0dGVtcHRlZC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbmVlZCB0byBjaGVjayBmb3Igc3VidGxlIGVkZ2UgY2FzZXMgd2hlcmUgcmVhZC1vbmx5IGJlaGF2aW9yIG1pZ2h0IG5vdCBiZSBlbmZvcmNlZCBhcyBzdHJpY3RseSBhcyBpdCBzaG91bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NCX1JET05MWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmM9MjY1PXN0YXRpYyBpbnQgbnRmc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTI4NC1cdCAqL1xuZnMvbnRmcy9zdXBlci5jOjI4NTpcdGlmIChzYl9yZG9ubHkoc2IpIFx1MDAyNlx1MDAyNiAhKGZjLVx1MDAzZXNiX2ZsYWdzIFx1MDAyNiBTQl9SRE9OTFkpKSB7XG5mcy9udGZzL3N1cGVyLmMtMjg2LVx0XHRzdGF0aWMgY29uc3QgY2hhciAqZXMgPSBcJiMzNDsuICBDYW5ub3QgcmVtb3VudCByZWFkLXdyaXRlLlwmIzM0Oztcbi0tXG5mcy9udGZzL3N1cGVyLmMtMzEyLVx0XHR9XG5mcy9udGZzL3N1cGVyLmM6MzEzOlx0fSBlbHNlIGlmICghc2JfcmRvbmx5KHNiKSBcdTAwMjZcdTAwMjYgKGZjLVx1MDAzZXNiX2ZsYWdzIFx1MDAyNiBTQl9SRE9OTFkpKSB7XG5mcy9udGZzL3N1cGVyLmMtMzE0LVx0XHQvKiBSZW1vdW50aW5nIHJlYWQtb25seS4gKi9cbi0tXG5mcy9udGZzL3N1cGVyLmM9MzMzPXZvaWQgbnRmc19oYW5kbGVfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9udGZzL3N1cGVyLmMtMzQwLVx0aWYgKHZvbC1cdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcbmZzL250ZnMvc3VwZXIuYzozNDE6XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuZnMvbnRmcy9zdXBlci5jLTM0Mi1cdFx0cHJfY3JpdChcJiMzNDsoZGV2aWNlICVzKTogRmlsZXN5c3RlbSBoYXMgYmVlbiBzZXQgcmVhZC1vbmx5XFxuXCYjMzQ7LFxuLS1cbmZzL250ZnMvc3VwZXIuYz0xMzk5PXN0YXRpYyBib29sIGxvYWRfc3lzdGVtX2ZpbGVzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0xNDE2LVxuZnMvbnRmcy9zdXBlci5jOjE0MTc6XHRcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG5mcy9udGZzL3N1cGVyLmMtMTQxOC1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDslcy4gIE1vdW50aW5nIHJlYWQtb25seSVzXCYjMzQ7LFxuLS1cbmZzL250ZnMvc3VwZXIuYy0xNTQyLVx0XHRpZiAoIXNiX3Jkb25seShzYikgXHUwMDI2XHUwMDI2IHZvbC1cdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcbmZzL250ZnMvc3VwZXIuYzoxNTQzOlx0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuZnMvbnRmcy9zdXBlci5jLTE1NDQtXHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7JXMuICBNb3VudGluZyByZWFkLW9ubHklc1wmIzM0OywgZXMxLCBlczIpO1xuLS1cbmZzL250ZnMvc3VwZXIuYy0xNTU5LVx0XHRpZiAoIXNiX3Jkb25seShzYikgXHUwMDI2XHUwMDI2IHZvbC1cdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcbmZzL250ZnMvc3VwZXIuYzoxNTYwOlx0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuZnMvbnRmcy9zdXBlci5jLTE1NjEtXHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7RmFpbGVkIHRvIGxvYWQgTG9nRmlsZS4gTW91bnRpbmcgcmVhZC1vbmx5LlwmIzM0Oyk7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTE1OTEtXHRcdGlmICghc2JfcmRvbmx5KHNiKSBcdTAwMjZcdTAwMjYgdm9sLVx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xuZnMvbnRmcy9zdXBlci5jOjE1OTI6XHRcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG5mcy9udGZzL3N1cGVyLmMtMTU5My1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDslcy4gIE1vdW50aW5nIHJlYWQtb25seSVzXCYjMzQ7LCBlczEsIGVzMik7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTE2MDYtXHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0OyVzLiAgTW91bnRpbmcgcmVhZC1vbmx5JXNcJiMzNDssIGVzMSwgZXMyKTtcbmZzL250ZnMvc3VwZXIuYzoxNjA3Olx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbmZzL250ZnMvc3VwZXIuYy0xNjA4LVx0XHROVm9sU2V0RXJyb3JzKHZvbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTlRGUyBXcml0ZSBTdXBwb3J0OiBBIEtlcm5lbCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIE5URlMgYW5kIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhZC93cml0ZSBjYXBhYmlsaXRpZXMuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0ICpjYW4qIGJlIG1vdW50ZWQgcmVhZC13cml0ZSwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4gQnV0IGxldCYjMzk7cyB2ZXJpZnkgdGhpcyB0aG9yb3VnaGx5OyBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBmcy9udGZzL0tjb25maWdgLiBSaWdodCwganVzdCBjb25maXJtaW5nLCBpdCYjMzk7cyBqdXN0IGBOVEZTX0ZTYCB0aGF0JiMzOTtzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXRlbT8gT2theSwgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEhvbGQgb24uLi4gZGlkIEkgcmVhZCBzb21ldGhpbmcgYWJvdXQgYE5URlNfUldgIGJlaW5nIGRlcHJlY2F0ZWQgb3IgcmVtb3ZlZCwgbWF5YmUgaW4gMjAyND8gVGhhdCYjMzk7cyBjb25jZXJuaW5nLCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbW1pdCBoaXN0b3J5IHNheXMsIG9yIGF0IGxlYXN0IHNlYXJjaCB0aGUgY29uZmlnIGZpbGUgZm9yIGEgbWVudGlvbi4gSSBjYW4mIzM5O3QgdXNlIGBnaXQgbG9nYCBoZXJlLCBidXQgSSBjYW4gdXNlIGdyZXAsIHdoaWNoIEkmIzM5O3ZlIHVzZWQgYWxyZWFkeS4gT2gsIHJpZ2h0LCBJICpkaWQqIGdyZXAgZm9yIGBOVEZTX1JXYCwgYW5kIHRoZSByZXN1bHRzIHdlcmUgZW1wdHkuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHNvIGVpdGhlciBgTlRGU19GU2Agbm93IGltcGxpY2l0bHkgaW5jbHVkZXMgd3JpdGUgc3VwcG9ydCwgb3Igd3JpdGUgc3VwcG9ydCB3YXMgY29tcGxldGVseSBkcm9wcGVkIGF0IHNvbWUgcG9pbnQuIEl0JiMzOTtzIHRpbWUgdG8gaW52ZXN0aWdhdGUgZnVydGhlciEgVGhlIGltcG9ydGFudCB0aGluZyBpcyB3aGV0aGVyIEkgY2FuIHRyYWNlIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHdyaXRlIG9wZXJhdGlvbnMuIExldCBtZSBzZWUgaWYgSSBjYW4gZmluZCBob3cgdGhlIHVwZGF0ZSBvZiB0aGUgYXR0cmlidXRlcyBsaXN0cyBhcmUgaGFuZGxlZCBieSBzZWFyY2hpbmcgaWYgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpcyByZWFjaGFibGUgc29tZXdoZXJlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgd3JpdGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19hdHRybGlzdF91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTM1NDE9c3RhdGljIGludCBudGZzX2F0dHJfdXBkYXRlX21ldGEoc3RydWN0IGF0dHJfcmVjb3JkICphLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0zNTkwLVxuZnMvbnRmcy9hdHRyaWIuYzozNTkxOlx0XHRcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xuZnMvbnRmcy9hdHRyaWIuYy0zNTkyLVx0XHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYz0zNjgwPWludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0zODE2LVx0XHRcdFx0fVxuZnMvbnRmcy9hdHRyaWIuYzozODE3Olx0XHRcdFx0aWYgKG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpKVxuZnMvbnRmcy9hdHRyaWIuYy0zODE4LVx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTM4NTYtXHRcdFx0Y3R4LVx1MDAzZWFsX2VudHJ5LVx1MDAzZWxvd2VzdF92Y24gPSBjcHVfdG9fbGU2NChzdG9wX3Zjbik7XG5mcy9udGZzL2F0dHJpYi5jOjM4NTc6XHRcdFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XG5mcy9udGZzL2F0dHJpYi5jLTM4NTgtXHRcdFx0aWYgKGVycilcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTQ1OTU9c3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2l6ZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTQ3NTItXHRcdH1cbmZzL250ZnMvYXR0cmliLmM6NDc1MzpcdFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XG5mcy9udGZzL2F0dHJpYi5jLTQ3NTQtXHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00ODA4LVxuZnMvbnRmcy9hdHRyaWIuYzo0ODA5Olx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XG5mcy9udGZzL2F0dHJpYi5jLTQ4MTAtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmZzL250ZnMvYXR0cmxpc3QuYz0yNT1pbnQgbnRmc19hdHRybGlzdF9uZWVkKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzL2F0dHJsaXN0LmMtNTMtXG5mcy9udGZzL2F0dHJsaXN0LmM6NTQ6aW50IG50ZnNfYXR0cmxpc3RfdXBkYXRlKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pKVxuZnMvbnRmcy9hdHRybGlzdC5jLTU1LXtcbi0tXG5mcy9udGZzL2F0dHJsaXN0LmM9MTIxPWludCBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0cilcbi0tXG5mcy9udGZzL2F0dHJsaXN0LmMtMjM1LVxuZnMvbnRmcy9hdHRybGlzdC5jOjIzNjpcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKG5pKTtcbmZzL250ZnMvYXR0cmxpc3QuYy0yMzctXHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jPTI1Nz1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcbi0tXG5mcy9udGZzL2F0dHJsaXN0LmMtMzAwLVxuZnMvbnRmcy9hdHRybGlzdC5jOjMwMTpcdHJldHVybiBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTtcbmZzL250ZnMvYXR0cmxpc3QuYy0zMDItfVxuLS1cbmZzL250ZnMvYXR0cmxpc3QuaD0xNz1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7XG5mcy9udGZzL2F0dHJsaXN0Lmg6MTg6aW50IG50ZnNfYXR0cmxpc3RfdXBkYXRlKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pKTtcbmZzL250ZnMvYXR0cmxpc3QuaC0xOS1cbi0tXG5mcy9udGZzL2luZGV4LmM9MTIzNj1zdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxuLS1cbmZzL250ZnMvaW5kZXguYy0xMzQwLVx0XHRcdFx0bGUzMl90b19jcHUoY3R4LVx1MDAzZWF0dHItXHUwMDNlZGF0YS5yZXNpZGVudC52YWx1ZV9sZW5ndGgpKSkge1xuZnMvbnRmcy9pbmRleC5jOjEzNDE6XHRcdFx0aWYgKG50ZnNfYXR0cmxpc3RfdXBkYXRlKGN0eC1cdTAwM2ViYXNlX250ZnNfaW5vID9cbmZzL250ZnMvaW5kZXguYy0xMzQyLVx0XHRcdFx0XHRcdCBjdHgtXHUwMDNlYmFzZV9udGZzX2lubyA6IGN0eC1cdTAwM2VudGZzX2lubykpXG4tLVxuZnMvbnRmcy9pbm9kZS5jPTMwMzE9aW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzL2lub2RlLmMtMzEzOS1cbmZzL250ZnMvaW5vZGUuYzozMTQwOlx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUobmkpO1xuZnMvbnRmcy9pbm9kZS5jLTMxNDEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU1OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKlRyYWNpbmcgdGhlIE5URlMgQXR0cmlidXRlIFVwZGF0ZSBQYXRoKioKCkhtbSwgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBnZXRzIGludm9rZWQgZGlyZWN0bHkgZnJvbSBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlICp0aGF0KiBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIHdoeSBgbnRmc19hdHRybGlzdF91cGRhdGVgIGlzIGJlaW5nIHRyaWdnZXJlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoaXMgc2hvdWxkIGhlbHAgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZXhlY3V0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvYXR0cmliLmM9MzU0MT1zdGF0aWMgaW50IG50ZnNfYXR0cl91cGRhdGVfbWV0YShzdHJ1Y3QgYXR0cl9yZWNvcmQgKmEsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTM2NjctLypcbmZzL250ZnMvYXR0cmliLmM6MzY2ODogKiBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMgLSB1cGRhdGUgbWFwcGluZyBwYWlycyBmb3IgbnRmcyBhdHRyaWJ1dGVcbmZzL250ZnMvYXR0cmliLmMtMzY2OS0gKiBAbmk6XHRcdG5vbi1yZXNpZGVudCBudGZzIGlub2RlIGZvciB3aGljaCB3ZSBuZWVkIHVwZGF0ZVxuLS1cbmZzL250ZnMvYXR0cmliLmMtMzY3OS0gKi9cbmZzL250ZnMvYXR0cmliLmM6MzY4MDppbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxuZnMvbnRmcy9hdHRyaWIuYy0zNjgxLXtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTQxNjI9c3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3NocmluayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXplKVxuLS1cbmZzL250ZnMvYXR0cmliLmMtNDI2Mi1cdFx0LyogV3JpdGUgbWFwcGluZyBwYWlycyBmb3IgbmV3IHJ1bmxpc3QuICovXG5mcy9udGZzL2F0dHJpYi5jOjQyNjM6XHRcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCAvKmZpcnN0X2ZyZWVfdmNuKi8pO1xuZnMvbnRmcy9hdHRyaWIuYy00MjY0LVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00MzI5PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTQ1MDEtXHRcdG5pLVx1MDAzZWFsbG9jYXRlZF9zaXplID0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgZmlyc3RfZnJlZV92Y24pO1xuZnMvbnRmcy9hdHRyaWIuYzo0NTAyOlx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuZnMvbnRmcy9hdHRyaWIuYy00NTAzLVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00NTY1LVx0XHRcdGRvd25fcmVhZChcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuZnMvbnRmcy9hdHRyaWIuYzo0NTY2Olx0XHRpZiAobnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKSlcbmZzL250ZnMvYXR0cmliLmMtNDU2Ny1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBvbGQgbWFwcGluZyBwYWlyc1wmIzM0Oyk7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00OTcwPWludCBudGZzX2F0dHJfbWFwX2NsdXN0ZXIoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuX3N0YXJ0LCBzNjQgKmxjbl9zdGFydCxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTUwOTUtXHRcdG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChjdHgpO1xuZnMvbnRmcy9hdHRyaWIuYzo1MDk2Olx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuZnMvbnRmcy9hdHRyaWIuYy01MDk3LVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz01MzAxPWludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy01MzUxLVx0XHRuaS1cdTAwM2Vpbml0aWFsaXplZF9zaXplICYjNDM7PSBudGZzX2NsdXN0ZXJfdG9fYnl0ZXModm9sLCBsZW4pO1xuZnMvbnRmcy9hdHRyaWIuYzo1MzUyOlx0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbmZzL250ZnMvYXR0cmliLmMtNTM1My1cdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz01Mzc5PWludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0IGxlbilcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTU0MzYtXHRpZiAobmktXHUwMDNlYWxsb2NhdGVkX3NpemUgXHUwMDNlIDApIHtcbmZzL250ZnMvYXR0cmliLmM6NTQzNzpcdFx0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbmZzL250ZnMvYXR0cmliLmMtNTQzOC1cdFx0aWYgKHJldCkge1xuLS1cbmZzL250ZnMvYXR0cmliLmM9NTQ3ND1pbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9wdW5jaF9ob2xlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0IGxlbilcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTU1MTQtXG5mcy9udGZzL2F0dHJpYi5jOjU1MTU6XHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuZnMvbnRmcy9hdHRyaWIuYy01NTE2LVx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTU1MzE9aW50IG50ZnNfYXR0cl9mYWxsb2NhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBieXRlX2xlbiwgYm9vbCBrZWVwX3NpemUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy01NjgyLVx0XHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG5mcy9udGZzL2F0dHJpYi5jOjU2ODM6XHRcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XG5mcy9udGZzL2F0dHJpYi5jLTU2ODQtXHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9hdHRyaWIuaD0xMzI9aW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuaC0xMzQtXHRcdF9fbGUxNiBmbGFncyk7XG5mcy9udGZzL2F0dHJpYi5oOjEzNTppbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKTtcbmZzL250ZnMvYXR0cmliLmgtMTM2LXN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfYXR0cl92Y25fdG9fcmwoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuLCBzNjQgKmxjbik7XG4tLVxuZnMvbnRmcy9jb21wcmVzcy5jPTEyNzQ9c3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcyxcbi0tXG5mcy9udGZzL2NvbXByZXNzLmMtMTQwNy1cbmZzL250ZnMvY29tcHJlc3MuYzoxNDA4Olx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbmZzL250ZnMvY29tcHJlc3MuYy0xNDA5LVx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbi0tXG5mcy9udGZzL2ZpbGUuYz03OD1zdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKVxuLS1cbmZzL250ZnMvZmlsZS5jLTExMy1cdFx0XHRuaS1cdTAwM2VhbGxvY2F0ZWRfc2l6ZSA9IG50ZnNfY2x1c3Rlcl90b19ieXRlcyh2b2wsIHZjbl90cik7XG5mcy9udGZzL2ZpbGUuYzoxMTQ6XHRcdFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbmZzL250ZnMvZmlsZS5jLTExNS1cdFx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMvaW5vZGUuYz0yNzIzPWludCBfX250ZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICp2aSwgaW50IHN5bmMpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTI3NjItXHRcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbmZzL250ZnMvaW5vZGUuYzoyNzYzOlx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuZnMvbnRmcy9pbm9kZS5jLTI3NjQtXHRcdGlmICghZXJyKVxuLS1cbmZzL250ZnMvbWZ0LmM9MTAwNz1zdGF0aWMgaW50IG50ZnNfbWZ0X2F0dHJfZXh0ZW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzL21mdC5jLTEwMjctXG5mcy9udGZzL21mdC5jOjEwMjg6XHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuZnMvbnRmcy9tZnQuYy0xMDI5LVx0aWYgKHJldClcbi0tXG5mcy9udGZzL21mdC5jPTEwNTM9c3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuLS1cbmZzL250ZnMvbWZ0LmMtMTMyNi1cdFx0bWFya19tZnRfcmVjb3JkX2RpcnR5KGN0eC1cdTAwM2VudGZzX2lubyk7XG5mcy9udGZzL21mdC5jOjEzMjc6XHR9IGVsc2UgaWYgKHN0YXR1cy5tcF9leHRlbmRlZCBcdTAwMjZcdTAwMjYgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG1mdGJtcF9uaSwgMCkpIHtcbmZzL250ZnMvbWZ0LmMtMTMyOC1cdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0ZhaWxlZCB0byByZXN0b3JlIG1hcHBpbmcgcGFpcnMuJXNcJiMzNDssIGVzKTtcbi0tXG5mcy9udGZzL21mdC5jPTE0ODY9c3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbi0tXG5mcy9udGZzL21mdC5jLTE3MzgtXHR9XG5mcy9udGZzL21mdC5jOjE3Mzk6XHRpZiAobXBfZXh0ZW5kZWQgXHUwMDI2XHUwMDI2IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhtZnRfbmksIDApKSB7XG5mcy9udGZzL21mdC5jLTE3NDAtXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBtYXBwaW5nIHBhaXJzLiVzXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlRGUyBEcml2ZXIgV3JpdGUgQ2FwYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBzZWUuLi4gc28gYG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc2AgaXMgY2FsbGVkIGZyb20gYF9fbnRmc193cml0ZV9pbm9kZWAsIHdoaWNoIGlzIGl0c2VsZiB0cmlnZ2VyZWQgZHVyaW5nIGlub2RlIHdyaXRpbmcuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgKndyaXRlKiBvcGVyYXRpb25zIGFyZSBpbmRlZWQgaGFuZGxlZCB3aXRoaW4gdGhpcyBgZnMvbnRmcy9gIGRyaXZlci4gQnV0IHdhaXQsIEkgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byBtaXggdGhpbmdzIHVwLiBBbSBJIHRoaW5raW5nIG9mIHRoZSBvcmlnaW5hbCBgZnMvbnRmcy9gIGRyaXZlciwgb3IgYW0gSSBjb25mbGF0aW5nIGl0IHdpdGggdGhhdCBuZXdlciBgZnMvbnRmczMvYCBkcml2ZXIgZGV2ZWxvcGVkIGJ5IFBhcmFnb24/IFRoZSBvbGQgYGZzL250ZnMvYCBpcyB0aGUgQW50b24gQWx0YXBhcm1ha292IHZlcnNpb24sIHJpZ2h0PyBSaWdodC4gVGhhdCB2ZXJzaW9uICpkaWQqIGhhdmUgd3JpdGUgc3VwcG9ydCwgYnV0IGl0IHdhcyBoZWF2aWx5IHJlc3RyaWN0ZWQsIHdhc24mIzM5O3QgaXQ/IExpbWl0ZWQgdG8gb3ZlcndyaXRpbmcgZXhpc3RpbmcgZGF0YSB3aXRob3V0IHJlc2l6aW5nIG9yIHdoYXRub3QuIEp1c3QgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gYGZzL250ZnMvZmlsZS5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSBmdW5jdGlvbiBsaWtlIGBudGZzX2ZpbGVfd3JpdGVfaXRlcmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGp1c3QgdG8gY29uZmlybSBteSBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9maWxlLmM9NDk1PXN0YXRpYyBzc2l6ZV90IG50ZnNfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbnRmcy9maWxlLmMtNTM3LVxuZnMvbnRmcy9maWxlLmM6NTM4OnN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvbnRmcy9maWxlLmMtNTM5LXtcbi0tXG5mcy9udGZzL2ZpbGUuYz0xMTQ2PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnRmc19maWxlX29wcyA9IHtcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMTQ4LVx0LnJlYWRfaXRlclx0PSBudGZzX2ZpbGVfcmVhZF9pdGVyLFxuZnMvbnRmcy9maWxlLmM6MTE0OTpcdC53cml0ZV9pdGVyXHQ9IG50ZnNfZmlsZV93cml0ZV9pdGVyLFxuZnMvbnRmcy9maWxlLmMtMTE1MC1cdC5mc3luY1x0XHQ9IG50ZnNfZmlsZV9mc3luYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgTlRGUyBGaWxlc3lzdGVtIEhpc3RvcnkqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSB0cnlpbmcgdG8gcmVtZW1iZXIuLi4gd2FzbiYjMzk7dCB0aGVyZSBhbiBgbnRmc19maWxlX2Fpb193cml0ZWAgb3Igc29tZXRoaW5nIHNpbWlsYXIgaW4gdGhlIGxlZ2FjeSBgZnMvbnRmcy9gIGRyaXZlcj8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0LiBSaWdodCwgcmlnaHQsIGxldCYjMzk7cyBzZWUgd2hlbiB0aGF0IHdhcyBpbXBsZW1lbnRlZC4gQWgsIGhlcmUgd2UgYXJlOiAmIzM0O01vbiBKdWwgNiAwNDoyNToyNCAyMDI2JiMzNDsuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgYSB0aW1lIGZyYW1lIGF0IGxlYXN0LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBudGZzX2ZpbGVfd3JpdGVfaXRlcmAgZXhpc3RzIOKAkyBJJiMzOTttIHByZXR0eSBzdXJlIEkgc2F3IHRoYXQgb25lIHJlY2VudGx5IGluIGBmcy9udGZzL2ZpbGUuY2AuIFllcCwgdGhlcmUgaXQgaXMuIE9rYXksIHRoYXQmIzM5O3Mgd2hhdCBJIHRob3VnaHQuCgpCdXQsIGEgbmFnZ2luZyBxdWVzdGlvbiByZW1haW5zLiBXYXMgYGZzL250ZnMvYCBhY3R1YWxseSBqdXN0IGBudGZzM2AgcmVuYW1lZCBhdCBzb21lIHBvaW50PyBNeSBtaW5kIGlzIHBsYXlpbmcgdHJpY2tzIG9uIG1lIHNvbWV0aW1lcyB3aXRoIGFsbCB0aGVzZSByZXZpc2lvbnMuIEluIG1vcmUgcmVjZW50IGtlcm5lbHMsIHRoZSBkaXJlY3RvcmllcyBhcmUgZmx1aWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgZ29pbmcgZG93biB0aGUgd3JvbmcgdHJhY2suIERpZCB0aGV5IHJlbW92ZSBgZnMvbnRmcy9gIGFuZCBrZWVwIGBmcy9udGZzMy9gLCBvciBtYXliZSByZW5hbWUgYGZzL250ZnMzL2AgdG8gYGZzL250ZnMvYD8gSSByZWFsbHkgbmVlZCB0byBnZXQgdGhpcyBzdHJhaWdodC4KCkFscmlnaHQsIHRpbWUgdG8gZ28gYmFjayB0byB0aGUgc291cmNlLiBMZXQgbWUganVzdCBvcGVuIHVwIGBmcy9udGZzL0tjb25maWdgIG9uZSBtb3JlIHRpbWUgYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gb3JpZW50ZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BhcmFnb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTlRGUyBTdXBlcmJsb2NrIEF1dGhvcnNoaXAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvJiMzOTtzIGJlZW4gd29ya2luZyBvbiB0aGUgTlRGUyBzdXBlcmJsb2NrIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYGZzL250ZnMvc3VwZXIuY2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdXBlcmJsb2NrJiMzOTtzIGltcGxlbWVudGF0aW9uLCBhbmQgaG9wZWZ1bGx5LCBJIGNhbiBnbGVhbiBzb21lIGF1dGhvcnNoaXAgZGV0YWlscyBkaXJlY3RseSBmcm9tIHRoZSBjb21tZW50cyBvciByZXZpc2lvbiBoaXN0b3J5IHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hvJiMzOTtzIGNvbnRyaWJ1dGVkIGFuZCB3aGVuLiBUaGlzIHNob3VsZCBiZSBhIGZhaXJseSByb3V0aW5lIGludmVzdGlnYXRpb24gZm9yIG1lLCBiZWluZyBhIHNlYXNvbmVkIGRldmVsb3BlciBpbiB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9BVVRIT1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jPTI3MDU9bW9kdWxlX2V4aXQoZXhpdF9udGZzX2ZzKTtcbmZzL250ZnMvc3VwZXIuYy0yNzA2LVxuZnMvbnRmcy9zdXBlci5jOjI3MDc6TU9EVUxFX0FVVEhPUihcJiMzNDtBbnRvbiBBbHRhcGFybWFrb3YgXHUwMDNjYW50b25AdHV4ZXJhLmNvbVx1MDAzZVwmIzM0Oyk7IC8qIE9yaWdpbmFsIHJlYWQtb25seSBOVEZTIGRyaXZlciAqL1xuZnMvbnRmcy9zdXBlci5jOjI3MDg6TU9EVUxFX0FVVEhPUihcJiMzNDtOYW1qYWUgSmVvbiBcdTAwM2NsaW5raW5qZW9uQGtlcm5lbC5vcmdcdTAwM2VcJiMzNDspOyAvKiBBZGQgd3JpdGUsIGlvbWFwIGFuZCB2YXJpb3VzIGZlYXR1cmVzICovXG5mcy9udGZzL3N1cGVyLmMtMjcwOS1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TlRGUyByZWFkLXdyaXRlIGZpbGVzeXN0ZW0gZHJpdmVyXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTlRGUyBGaWxlc3lzdGVtIFVwZGF0ZSoqCgpPa2F5LCBzbyBOYW1qYWUgSmVvbiYjMzk7cyBiZWVuIGJ1c3khIEl0IGxvb2tzIGxpa2UgaGUmIzM5O3MgYWRkZWQgd3JpdGUsIGlvbWFwLCBhbmQgYSBidW5jaCBvZiBvdGhlciBmZWF0dXJlcyB0byB0aGUgYGZzL250ZnMvYCBkcml2ZXIuIEhtbSwgSSB3b25kZXIgaWYgdGhpcyBpcyBhIGNvbXBsZXRlIG92ZXJoYXVsLCBhIGJyYW5kIG5ldyBkcml2ZXIsIG9yIGp1c3QgYSBzaWduaWZpY2FudCB1cGRhdGUgdG8gdGhlIGV4aXN0aW5nIG9uZS4gR2l2ZW4gSmVvbiYjMzk7cyB3b3JrIG9uIGBrc21iZGAgYW5kIGBleGZhdGAsIGl0JiMzOTtzIGRlZmluaXRlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBwb3NzaWJpbGl0eSB0aGF0IGhlJiMzOTtzIGJlZW4gcmV2aXNpdGluZyBhbmQgaW1wcm92aW5nIHRoZSBgZnMvbnRmcy9gIGNvZGViYXNlIHJlY2VudGx5LiBSaWdodCwgdGhlIGNvbmZpZyBvcHRpb24gaXMgYE5URlNfRlNgLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBtb2RpZnlpbmcgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCB3aXRoaW4gYGZzL250ZnMvYXR0cmxpc3QuY2AuIFRoZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQ6CgpgYGBjCglpZiAoIShWRlNfSShiYXNlX25pKS0mZ3Q7aV9zYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9BQ1RJVkUpKQoJCXJldHVybiAtRUlPOwpgYGAKCkFoLCBJIHNlZS4gVGhpcyBpcyBkZXNpZ25lZCB0byBhZGRyZXNzIGEgcG90ZW50aWFsIGRlYWRsb2NrIHNpdHVhdGlvbi4gVGhlIGNoZWNrIGhlcmUgZW5zdXJlcyB0aGUgc3VwZXJibG9jayBpcyBzdGlsbCBhY3RpdmUgYmVmb3JlIHByb2NlZWRpbmcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoKWAgY2xlYXJzIHRoZSBgU0JfQUNUSVZFYCBmbGFnIGJlZm9yZSBpbm9kZXMgYXJlIGV2aWN0ZWQgZnJvbSB0aGUgY2FjaGUuIFNvLCBpZiBgbnRmc19hdHRybGlzdF91cGRhdGVgIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgZXZpY3Rpb24gcHJvY2VzcyBpdHNlbGYgKHBlcmhhcHMgdGhyb3VnaCBgbnRmc19ldmljdF9pbm9kZWAsIHdoaWNoIGxlYWRzIHRvIGBudGZzX2NsZWFyX2lub2RlYCwgYW5kIHRoZW4uLi4pLCBpdCBjYW4gZW5jb3VudGVyIGEgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gbWlnaHQgZW5kIHVwIHdhaXRpbmcgb24gYW4gYXR0cmlidXRlIGxpc3QgaW5vZGUgdGhhdCYjMzk7cyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGZyZWVkLCBpLmUuLCBpbiB0aGUgYElfRlJFRUlOR2Agc3RhdGUuIFRoaXMgbmV3IGNoZWNrIHByZXZlbnRzIHRoYXQuIEluc3RlYWQgb2YgZ2V0dGluZyBzdHVjaywgaXQgcmV0dXJucyBhIGAtRUlPYCBlcnJvciwgd2hpY2ggaXMgbXVjaCBiZXR0ZXIgdGhhbiBhIGRlYWRsb2NrLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hlcmUgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBldmljdGlvbiBzZXF1ZW5jZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBiZSBjb21wbGV0ZWx5IHN1cmUgYWJvdXQgdGhlIGV4YWN0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19ldmljdF9pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZXZpY3RfaW5vZGVgIGZvciBOVEZTKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGV2aWN0X2lub2RlYCBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtcyBpbXBsZW1lbnRhdGlvbi4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW50cmljYWNpZXMgb2YgaXRzIG9wZXJhdGlvbiB3aXRoaW4gdGhlIGBmcy9udGZzL3N1cGVyLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIHRvIHNwZWFrLCB3aGVuIGEgdm5vZGUgaXMgYmVpbmcgZGlzY2FyZGVkLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGhhbmRsZSBjbGVhbnVwLCBhbnkgdW5pcXVlIE5URlMtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgYXJvdW5kIGpvdXJuYWxpbmcsIGF0dHJpYnV0ZSBsaXN0cywgb3IgcG90ZW50aWFsbHkgZGVmZXJyZWQgd29yayByZXF1aXJlZCBkdXJpbmcgYW4gZXZpY3Rpb24uIExldCYjMzk7cyBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IHRoYXQmIzM5O3MgcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHByb2JsZW0gSSYjMzk7bSB3b3JraW5nIG9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBzcGVjaWZpYyBOVEZTIGRhdGEgc3RydWN0dXJlcyBhbmQgYSBwb3NzaWJsZSBjb25uZWN0aW9uIHRvIHRoZSB2YXJpb3VzIGF0dHJpYnV0ZSBsaXN0cyBmb3IgdGhlIGdpdmVuIGZpbGUgb3IgZGlyZWN0b3J5LiBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYW55IGNhbGxzIHRvIHRoZSBqb3VybmFsaW5nIGZ1bmN0aW9ucywgcGVyaGFwcyB0byBmbHVzaCBjaGFuZ2VzIG9yIHRvIHVwZGF0ZSBhbnkgcmVsZXZhbnQgbWV0YWRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbm9kZS5jPTM3ND1pbnQgbnRmc19kcm9wX2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL250ZnMvaW5vZGUuYy0zODUtXG5mcy9udGZzL2lub2RlLmM6Mzg2Olx0XHRcdFx0LyogVG8gYXZvaWQgZXZpY3RfaW5vZGUgY2FsbCBzaW11bHRhbmVvdXNseSAqL1xuZnMvbnRmcy9pbm9kZS5jLTM4Ny1cdFx0XHRcdGF0b21pY19pbmMoXHUwMDI2aW5vZGUtXHUwMDNlaV9jb3VudCk7XG4tLVxuZnMvbnRmcy9zdXBlci5jPTIxNjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG50ZnNfc29wcyA9IHtcbi0tXG5mcy9udGZzL3N1cGVyLmMtMjE2OC1cdC5zdGF0ZnNcdFx0PSBudGZzX3N0YXRmcyxcdFx0LyogU3lzY2FsbDogc3RhdGZzICovXG5mcy9udGZzL3N1cGVyLmM6MjE2OTpcdC5ldmljdF9pbm9kZVx0PSBudGZzX2V2aWN0X2JpZ19pbm9kZSxcbmZzL250ZnMvc3VwZXIuYy0yMTcwLVx0LnNob3dfb3B0aW9uc1x0PSBudGZzX3Nob3dfb3B0aW9ucyxcdC8qIFNob3cgbW91bnQgb3B0aW9ucyBpbiBwcm9jLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg0MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbnRmc19ldmljdF9iaWdfaW5vZGVgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIFRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW0gY29kZSBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyBvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBudGZzX2V2aWN0X2JpZ19pbm9kZWAgd2l0aGluIGBmcy9udGZzL2lub2RlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZXZpY3Rpb24gb2YgbGFyZ2UgaW5vZGVzIGluIHRoZSBOVEZTIGZpbGUgc3lzdGVtLiBNeSBnb2FsIGlzIHRvIGdyYXNwIGl0cyBsb2dpYywgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGFuZCBlbnN1cmUgaXQgYWxpZ25zIHdpdGggYmVzdCBwcmFjdGljZXMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuIEkmIzM5O2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgYW5kIHRoZSBjb250cm9sIGZsb3cgdGhyb3VnaCB0aGUgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2V2aWN0X2JpZ19pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuYz0yMjMzPXN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIyNjItLypcbmZzL250ZnMvaW5vZGUuYzoyMjYzOiAqIG50ZnNfZXZpY3RfYmlnX2lub2RlIC0gY2xlYW4gdXAgdGhlIG50ZnMgc3BlY2lmaWMgcGFydCBvZiBhbiBpbm9kZVxuZnMvbnRmcy9pbm9kZS5jLTIyNjQtICogQHZpOlx0XHR2ZnMgaW5vZGUgcGVuZGluZyBhbm5paGlsYXRpb25cbi0tXG5mcy9udGZzL2lub2RlLmMtMjI3MS0gKi9cbmZzL250ZnMvaW5vZGUuYzoyMjcyOnZvaWQgbnRmc19ldmljdF9iaWdfaW5vZGUoc3RydWN0IGlub2RlICp2aSlcbmZzL250ZnMvaW5vZGUuYy0yMjczLXtcbi0tXG5mcy9udGZzL2lub2RlLmg9MzEyPWludCBudGZzX2Ryb3BfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvbnRmcy9pbm9kZS5oOjMxMzp2b2lkIG50ZnNfZXZpY3RfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpO1xuZnMvbnRmcy9pbm9kZS5oLTMxNC12b2lkIF9fbnRmc19pbml0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBudGZzX2lub2RlICpuaSk7XG4tLVxuZnMvbnRmcy9tZnQuYz02NjU9c3RhdGljIGludCBudGZzX3Rlc3RfaW5vZGVfd2Ioc3RydWN0IGlub2RlICp2aSwgdTY0IGlubywgdm9pZCAqZGF0YSlcbi0tXG5mcy9udGZzL21mdC5jLTY3My1cdCAqIFdpdGhvdXQgdGhpcywgbnRmc193cml0ZV9tc3RfYmxvY2soKSBjb3VsZCBjYWxsIGlwdXRfZmluYWwoKVxuZnMvbnRmcy9tZnQuYzo2NzQ6XHQgKiAsIGFuZCBudGZzX2V2aWN0X2JpZ19pbm9kZSgpIGNvdWxkIHRyeSB0byB1bmxpbmsgdGhpcyBpbm9kZVxuZnMvbnRmcy9tZnQuYy02NzUtXHQgKiBhbmQgdGhlIGNvbnRleCBjb3VsZCBiZSBibG9ja2VkIGluZmluaXRseSBpbiBtYXBfbWZ0X3JlY29yZCgpLlxuLS1cbmZzL250ZnMvc3VwZXIuYz0yMTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBudGZzX3NvcHMgPSB7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTIxNjgtXHQuc3RhdGZzXHRcdD0gbnRmc19zdGF0ZnMsXHRcdC8qIFN5c2NhbGw6IHN0YXRmcyAqL1xuZnMvbnRmcy9zdXBlci5jOjIxNjk6XHQuZXZpY3RfaW5vZGVcdD0gbnRmc19ldmljdF9iaWdfaW5vZGUsXG5mcy9udGZzL3N1cGVyLmMtMjE3MC1cdC5zaG93X29wdGlvbnNcdD0gbnRmc19zaG93X29wdGlvbnMsXHQvKiBTaG93IG1vdW50IG9wdGlvbnMgaW4gcHJvYy4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MzcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBudGZzX2V2aWN0X2JpZ19pbm9kZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaWcgaW50byB0aGUgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgcmV2b2x2ZXMgYXJvdW5kIGl0cyAqcHVycG9zZSouIEJhc2VkIG9uIHRoZSBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY29yZSByb3V0aW5lIHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggdGhlIGV2aWN0aW9uIG9mIGxhcmdlIGlub2Rlcy4gRXZpY3Rpb24uLi50aGF0IHRlbGxzIG1lIHRoaXMgbGlrZWx5IHBsYXlzIGEgcm9sZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGZsdXNoaW5nIG9mIGlub2RlIGRhdGEgZnJvbSB0aGUgY2FjaGUsIHByZXN1bWFibHkgdG8gbWFrZSBzcGFjZSBmb3Igb3RoZXIgYWN0aXZlIGlub2RlcyBvciB0byBmcmVlIHVwIHZhbHVhYmxlIFJBTS4KCkkmIzM5O20gaW5zdGFudGx5IGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0LiAqV2hlbiogaXMgdGhpcyBmdW5jdGlvbiB0cmlnZ2VyZWQ/IElzIGl0IGEgYmFja2dyb3VuZCBwcm9jZXNzLCBzb21ldGhpbmcgZHJpdmVuIGJ5IG1lbW9yeSBwcmVzc3VyZSwgb3IgaXMgaXQgaW52b2tlZCBkaXJlY3RseSBpbiByZXNwb25zZSB0byBzcGVjaWZpYyBvcGVyYXRpb25zIGxpa2UgYSBmaWxlIGNsb3NlLCBvciBtZXRhZGF0YSB3cml0ZT8gVW5kZXJzdGFuZGluZyB0aGUgdHJpZ2dlcmluZyBldmVudHMgaXMgY3JpdGljYWwgdG8gYXNzZXNzIGl0cyBvdmVyYWxsIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4KCk5leHQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24uIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyBpdCBpZGVudGlmaWVzICYjMzQ7YmlnJiMzNDsgaW5vZGVzLiBJcyBpdCBiYXNlZCBvbiBhIHN0YXRpYyB0aHJlc2hvbGQsIGNhbGN1bGF0ZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gc3lzdGVtIG1lbW9yeSwgb3IgaXMgaXQgYSBmdW5jdGlvbiBvZiB0aGUgaW5vZGUmIzM5O3Mgc2l6ZSBvciB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBleHRlbnRzPyBJIHdvdWxkIGV4cGVjdCB0aGlzIHRvIGJlIGEgcGVyZm9ybWFuY2UgY29uY2VybiBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBmaW5lLXR1bmVkLiBIb3cgaXMgdGhhdCBpbmZvcm1hdGlvbiBlbmNvZGVkLCBhbmQgaG93IGFyZSB0aGUgaW5vZGVzIHNlbGVjdGVkPyBUaGF0IHdpbGwgaW5mbHVlbmNlIGl0cyBlZmZpY2llbmN5LgoKV2hhdCBzdHJhdGVnaWVzIGRvZXMgaXQgZW1wbG95IHRvIGFjdHVhbGx5IGV2aWN0IHRoZSBkYXRhPyBEb2VzIGl0IGludm9sdmUgZGlydHkgcGFnZSBmbHVzaGluZywgaW52YWxpZGF0aW5nIGNhY2hlIGVudHJpZXMsIG9yIHBlcmZvcm1pbmcgYW55IGRpcmVjdCBkaXNrIEkvTz8gV2hhdCBhcmUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQ/IEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQgdXNlcyBhbnkgZ2xvYmFsIGxvY2tzIG9yIHBlci1pbm9kZSBsb2NrcywgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbmN1cnJlbmN5IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBQZXJmb3JtYW5jZSBhbmQgY29ycmVjdCBvcGVyYXRpb24gYXJlIGJvdGggaGlnaC1wcmlvcml0eSBjb25jZXJucy4KCkFuZCBmaW5hbGx5LCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBqb3VybmFsaW5nIG9yIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQgb2YgdGhlIE5URlMgZmlsZXN5c3RlbSwgaWYgYXBwbGljYWJsZT8gRG9lcyBpdCBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeT8gQW55IGludGVyYWN0aW9uIHdpdGggbG9nZ2luZyB3aWxsIGhhdmUgdG8gYmUgZXhhbWluZWQgZm9yIGNvcnJlY3RuZXNzIGFuZCBzcGVlZC4gRG9lcyBpdCBoYXZlIGFueSBpbXBsaWNhdGlvbnMgZm9yIGNyYXNoIHJlY292ZXJ5LCBkYXRhIGludGVncml0eSwgb3IgYW55IG90aGVyIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucz8gVGhvc2UgYXJlIHRoZSBjcnVjaWFsIGNvbnNpZGVyYXRpb25zLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBpbnZvbHZlcyBjYXJlZnVsIGhhbmRsaW5nIG9mIG1ldGFkYXRhIGFuZCBkYXRhIGJsb2Nrcywgd2hpY2gsIGlmIG5vdCBwcm9wZXJseSBjb29yZGluYXRlZCwgY291bGQgbGVhZCB0byBmaWxlc3lzdGVtIGNvcnJ1cHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBhbnkgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IG1lY2hhbmlzbXMsIHRvbywgdG8gYXNzZXNzIGl0cyByb2J1c3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNjA6XHR9XG4yMjYxOlx0XG4yMjYyOlx0LypcbjIyNjM6XHQgKiBudGZzX2V2aWN0X2JpZ19pbm9kZSAtIGNsZWFuIHVwIHRoZSBudGZzIHNwZWNpZmljIHBhcnQgb2YgYW4gaW5vZGVcbjIyNjQ6XHQgKiBAdmk6XHRcdHZmcyBpbm9kZSBwZW5kaW5nIGFubmloaWxhdGlvblxuMjI2NTpcdCAqXG4yMjY2Olx0ICogV2hlbiB0aGUgVkZTIGlzIGdvaW5nIHRvIHJlbW92ZSBhbiBpbm9kZSBmcm9tIG1lbW9yeSwgbnRmc19jbGVhcl9iaWdfaW5vZGUoKVxuMjI2NzpcdCAqIGlzIGNhbGxlZCwgd2hpY2ggZGVhbGxvY2F0ZXMgYWxsIG1lbW9yeSBiZWxvbmdpbmcgdG8gdGhlIE5URlMgc3BlY2lmaWMgcGFydFxuMjI2ODpcdCAqIG9mIHRoZSBpbm9kZSBhbmQgcmV0dXJucy5cbjIyNjk6XHQgKlxuMjI3MDpcdCAqIElmIHRoZSBNRlQgcmVjb3JkIGlzIGRpcnR5LCB3ZSBjb21taXQgaXQgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuXG4yMjcxOlx0ICovXG4yMjcyOlx0dm9pZCBudGZzX2V2aWN0X2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKVxuMjI3MzpcdHtcbjIyNzQ6XHRcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSSh2aSk7XG4yMjc1Olx0XG4yMjc2Olx0XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcdTAwMjZ2aS1cdTAwM2VpX2RhdGEpO1xuMjI3NzpcdFxuMjI3ODpcdFx0aWYgKCF2aS1cdTAwM2VpX25saW5rKSB7XG4yMjc5Olx0XHRcdGlmICghTklub0F0dHIobmkpKSB7XG4yMjgwOlx0XHRcdFx0LyogTmV2ZXIgY2FsbGVkIHdpdGggZXh0ZW50IGlub2RlcyAqL1xuMjI4MTpcdFx0XHRcdFdBUk5fT04obmktXHUwMDNlbnJfZXh0ZW50cyA9PSAtMSk7XG4yMjgyOlx0XHRcdFx0bnRmc19kZWxldGVfYmFzZV9pbm9kZShuaSk7XG4yMjgzOlx0XHRcdH1cbjIyODQ6XHRcdFx0Z290byByZWxlYXNlO1xuMjI4NTpcdFx0fVxuMjI4NjpcdFxuMjI4NzpcdFx0aWYgKE5Jbm9EaXJ0eShuaSkpIHtcbjIyODg6XHRcdFx0LyogQ29tbWl0dGluZyB0aGUgaW5vZGUgYWxzbyBjb21taXRzIGFsbCBleHRlbnQgaW5vZGVzLiAqL1xuMjI4OTpcdFx0XHRudGZzX2NvbW1pdF9pbm9kZSh2aSk7XG4yMjkwOlx0XG4yMjkxOlx0XHRcdGlmIChOSW5vRGlydHkobmkpKSB7XG4yMjkyOlx0XHRcdFx0bnRmc19kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gY29tbWl0IGRpcnR5IGlub2RlIDB4JWxseC4gIExvc2luZyBkYXRhIVwmIzM0OyxcbjIyOTM6XHRcdFx0XHRcdCAgIG5pLVx1MDAzZW1mdF9ubyk7XG4yMjk0Olx0XHRcdFx0Tklub0NsZWFyQXR0ckxpc3REaXJ0eShuaSk7XG4yMjk1Olx0XHRcdFx0Tklub0NsZWFyRGlydHkobmkpO1xuMjI5NjpcdFx0XHR9XG4yMjk3Olx0XHR9XG4yMjk4Olx0XG4yMjk5Olx0XHQvKiBObyBuZWVkIHRvIGxvY2sgYXQgdGhpcyBzdGFnZSBhcyBubyBvbmUgZWxzZSBoYXMgYSByZWZlcmVuY2UuICovXG4yMzAwOlx0XHRpZiAobmktXHUwMDNlbnJfZXh0ZW50cyBcdTAwM2UgMCkge1xuMjMwMTpcdFx0XHRpbnQgaTtcbjIzMDI6XHRcbjIzMDM6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmktXHUwMDNlbnJfZXh0ZW50czsgaSYjNDM7JiM0MzspIHtcbjIzMDQ6XHRcdFx0XHRpZiAobmktXHUwMDNlZXh0LmV4dGVudF9udGZzX2lub3NbaV0pXG4yMzA1Olx0XHRcdFx0XHRudGZzX2NsZWFyX2V4dGVudF9pbm9kZShuaS1cdTAwM2VleHQuZXh0ZW50X250ZnNfaW5vc1tpXSk7XG4yMzA2Olx0XHRcdH1cbjIzMDc6XHRcdFx0bmktXHUwMDNlbnJfZXh0ZW50cyA9IDA7XG4yMzA4Olx0XHRcdGt2ZnJlZShuaS1cdTAwM2VleHQuZXh0ZW50X250ZnNfaW5vcyk7XG4yMzA5Olx0XHR9XG4yMzEwOlx0XG4yMzExOlx0cmVsZWFzZTpcbjIzMTI6XHRcdGNsZWFyX2lub2RlKHZpKTtcbjIzMTM6XHRcdF9fbnRmc19jbGVhcl9pbm9kZShuaSk7XG4yMzE0Olx0XG4yMzE1Olx0XHRpZiAoTklub0F0dHIobmkpKSB7XG4yMzE2Olx0XHRcdC8qIFJlbGVhc2UgdGhlIGJhc2UgaW5vZGUgaWYgd2UgYXJlIGhvbGRpbmcgaXQuICovXG4yMzE3Olx0XHRcdGlmIChuaS1cdTAwM2Vucl9leHRlbnRzID09IC0xKSB7XG4yMzE4Olx0XHRcdFx0aXB1dChWRlNfSShuaS1cdTAwM2VleHQuYmFzZV9udGZzX2lubykpO1xuMjMxOTpcdFx0XHRcdG5pLVx1MDAzZW5yX2V4dGVudHMgPSAwO1xuMjMyMDpcdFx0XHRcdG5pLVx1MDAzZWV4dC5iYXNlX250ZnNfaW5vID0gTlVMTDtcbjIzMjE6XHRcdFx0fVxuMjMyMjpcdFx0fVxuMjMyMzpcdFxuMjMyNDpcdFx0aWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNm5pLVx1MDAzZWNvdW50KSlcbjIzMjU6XHRcdFx0V0FSTl9PTigxKTtcbjIzMjY6XHRcdGlmIChuaS1cdTAwM2Vmb2xpbylcbjIzMjc6XHRcdFx0Zm9saW9fcHV0KG5pLVx1MDAzZWZvbGlvKTtcbjIzMjg6XHRcdGtmcmVlKG5pLVx1MDAzZW1yZWMpO1xuMjMyOTpcdFx0a3ZmcmVlKG5pLVx1MDAzZXRhcmdldCk7XG4yMzMwOlx0fVxuMjMzMTpcdFxuMjMzMjpcdC8qXG4yMzMzOlx0ICogbnRmc19zaG93X29wdGlvbnMgLSBzaG93IG1vdW50IG9wdGlvbnMgaW4gL3Byb2MvbW91bnRzXG4yMzM0Olx0ICogQHNmOlx0XHRzZXFfZmlsZSBpbiB3aGljaCB0byB3cml0ZSBvdXIgbW91bnQgb3B0aW9uc1xuMjMzNTpcdCAqIEByb290Olx0cm9vdCBvZiB0aGUgbW91bnRlZCB0cmVlIHdob3NlIG1vdW50IG9wdGlvbnMgdG8gZGlzcGxheVxuMjMzNjpcdCAqXG4yMzM3Olx0ICogQ2FsbGVkIGJ5IHRoZSBWRlMgb25jZSBmb3IgZWFjaCBtb3VudGVkIG50ZnMgdm9sdW1lIHdoZW4gc29tZW9uZSByZWFkc1xuMjMzODpcdCAqIC9wcm9jL21vdW50cyBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSBOVEZTIHNwZWNpZmljIG1vdW50IG9wdGlvbnMgb2YgZWFjaFxuMjMzOTpcdCAqIG1vdW50LiBUaGUgbW91bnQgb3B0aW9ucyBvZiBmcyBzcGVjaWZpZWQgYnkgQHJvb3QgYXJlIHdyaXR0ZW4gdG8gdGhlIHNlcSBmaWxlXG4yMzQwOlx0ICogQHNmIGFuZCBzdWNjZXNzIGlzIHJldHVybmVkLlxuMjM0MTpcdCAqL1xuMjM0MjpcdGludCBudGZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuMjM0MzpcdHtcbjIzNDQ6XHRcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gTlRGU19TQihyb290LVx1MDAzZWRfc2IpO1xuMjM0NTpcdFx0aW50IGk7XG4yMzQ2Olx0XG4yMzQ3Olx0XHRpZiAodWlkX3ZhbGlkKHZvbC1cdTAwM2V1aWQpKVxuMjM0ODpcdFx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDssdWlkPSVpXCYjMzQ7LCBmcm9tX2t1aWRfbXVuZ2VkKFx1MDAyNmluaXRfdXNlcl9ucywgdm9sLVx1MDAzZXVpZCkpO1xuMjM0OTpcdFx0aWYgKGdpZF92YWxpZCh2b2wtXHUwMDNlZ2lkKSlcbjIzNTA6XHRcdFx0c2VxX3ByaW50ZihzZiwgXCYjMzQ7LGdpZD0laVwmIzM0OywgZnJvbV9rZ2lkX211bmdlZChcdTAwMjZpbml0X3VzZXJfbnMsIHZvbC1cdTAwM2VnaWQpKTtcbjIzNTE6XHRcdGlmICh2b2wtXHUwMDNlZm1hc2sgPT0gdm9sLVx1MDAzZWRtYXNrKVxuMjM1MjpcdFx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDssdW1hc2s9MCVvXCYjMzQ7LCB2b2wtXHUwMDNlZm1hc2spO1xuMjM1MzpcdFx0ZWxzZSB7XG4yMzU0Olx0XHRcdHNlcV9wcmludGYoc2YsIFwmIzM0OyxmbWFzaz0wJW9cJiMzNDssIHZvbC1cdTAwM2VmbWFzayk7XG4yMzU1Olx0XHRcdHNlcV9wcmludGYoc2YsIFwmIzM0OyxkbWFzaz0wJW9cJiMzNDssIHZvbC1cdTAwM2VkbWFzayk7XG4yMzU2Olx0XHR9XG4yMzU3Olx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDssaW9jaGFyc2V0PSVzXCYjMzQ7LCB2b2wtXHUwMDNlbmxzX21hcC1cdTAwM2VjaGFyc2V0KTtcbjIzNTg6XHRcdGlmIChOVm9sQ2FzZVNlbnNpdGl2ZSh2b2wpKVxuMjM1OTpcdFx0XHRzZXFfcHV0cyhzZiwgXCYjMzQ7LGNhc2Vfc2Vuc2l0aXZlXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIE5URlMgSW5vZGUgVXBkYXRlIExvb3AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbnRmc19ldmljdF9iaWdfaW5vZGVgIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJiMzOTtzIHBpbmdpbmcgbXkgcmFkYXIuIEl0IGxvb2tzIGxpa2UgaXQgY2FsbHMgYG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGUobmkpYC4gTm93LCB0aGF0IGZ1bmN0aW9uIG5hbWUgaXMgaW1tZWRpYXRlbHkgcmFpc2luZyBhIGZsYWcuIENvdWxkICp0aGF0KiBiZSBjYWxsaW5nIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgYXMgcGFydCBvZiBpdHMgY2xlYW51cD8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZS4gSWYgaXQgZG9lcywgYW5kIGlmIHdlJiMzOTtyZSBub3QgY2FyZWZ1bCwgd2UgY291bGQgaGF2ZSBhbiB1cGRhdGUgbG9vcCB3aXRoIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHZlcnkgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaXNzdWVzLiBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCBgbnRmc19kZWxldGVfYmFzZV9pbm9kZWAgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udHJvbCBmbG93IHRvIGNvbmZpcm0gb3IgZGVueSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2RlbGV0ZV9iYXNlX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbm9kZS5jPTIyMjI9dm9pZCBudGZzX2NsZWFyX2V4dGVudF9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIyMzItXG5mcy9udGZzL2lub2RlLmM6MjIzMzpzdGF0aWMgaW50IG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuZnMvbnRmcy9pbm9kZS5jLTIyMzQte1xuLS1cbmZzL250ZnMvaW5vZGUuYz0yMjcyPXZvaWQgbnRmc19ldmljdF9iaWdfaW5vZGUoc3RydWN0IGlub2RlICp2aSlcbi0tXG5mcy9udGZzL2lub2RlLmMtMjI4MS1cdFx0XHRXQVJOX09OKG5pLVx1MDAzZW5yX2V4dGVudHMgPT0gLTEpO1xuZnMvbnRmcy9pbm9kZS5jOjIyODI6XHRcdFx0bnRmc19kZWxldGVfYmFzZV9pbm9kZShuaSk7XG5mcy9udGZzL2lub2RlLmMtMjI4My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI4NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBudGZzX2RlbGV0ZV9iYXNlX2lub2RlYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBudWFuY2VzIGludm9sdmVkIGhlcmUuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGxpbmNocGluIGZvciBjbGVhbmluZyB1cCBpbm9kZXMgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBiYXNlIGlub2RlLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgZnVuZGFtZW50YWwgZGlyZWN0b3J5IGVudHJ5IG9yIGZpbGUgbWV0YWRhdGEgYmxvY2suIAoKSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBhc3NvY2lhdGVkIE1GVCBlbnRyaWVzIGFuZCBhbnkgcmVmZXJlbmNlIGNvdW50cy4gSSBleHBlY3QgYSBjYXJlZnVsIGRhbmNlIHRvIGVuc3VyZSB0aGF0IHdoZW4gdGhpcyBiYXNlIGlub2RlIGlzIGdvbmUsIGFueSBkZXBlbmRlbnQgc3RydWN0dXJlcyDigJMgbGlrZSBleHRlbmRlZCBhdHRyaWJ1dGUgZGF0YSBvciB0aGUgZGF0YSBydW5zIOKAkyBhcmUgZWl0aGVyIHByb3Blcmx5IGRlYWxsb2NhdGVkIG9yIHJlYXNzaWduZWQsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBzaXR1YXRpb24uIAoKSSYjMzk7bGwgYmUgZm9jdXNpbmcgb24gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBzdHJhdGVnaWVzIGhlcmU7IE5URlMgaXMga25vd24gZm9yIGl0cyBzb3BoaXN0aWNhdGlvbiwgc28gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBmaW5lLWdyYWluZWQgbG9ja2luZyB0byBhdm9pZCBjb3JydXB0aW9uIG9yIGRhdGEgbG9zcywgZXNwZWNpYWxseSB3aXRoIHNpbXVsdGFuZW91cyB3cml0ZXMgb3IgZGVsZXRlcy4gSXMgdGhpcyB1c2luZyBhIHRyYW5zYWN0aW9uYWwgYXBwcm9hY2gsIG9yIHNvbWV0aGluZyBtb3JlIGltbWVkaWF0ZT8gSSYjMzk7bGwgbmVlZCB0byBwYXJzZSB0aGUgY29kZSBmb3IgdGhvc2UgaW5kaWNhdG9ycy4gQWxzbywgSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyByb3V0aW5lIGRlYWxzIHdpdGggb3JwaGFuZWQgaW5vZGVzIG9yIHBhcnRpYWxseSBkZWxldGVkIHN0cnVjdHVyZXMg4oCTIGhvdyB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIG1haW50YWluIGNvbnNpc3RlbmN5IGluIHRoZSBmYWNlIG9mIHVuZXhwZWN0ZWQgZmFpbHVyZXMgaXMgYWx3YXlzIGludGVyZXN0aW5nLiBUaGUgcmVjb3ZlcnkgbWVjaGFuaXNtcyBhcmUgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIzMzpcdHN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4yMjM0Olx0e1xuMjIzNTpcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG5pLVx1MDAzZXZvbC1cdTAwM2VzYjtcbjIyMzY6XHRcdGludCBlcnI7XG4yMjM3Olx0XG4yMjM4Olx0XHRpZiAoTklub0F0dHIobmkpIHx8IG5pLVx1MDAzZW5yX2V4dGVudHMgPT0gLTEpXG4yMjM5Olx0XHRcdHJldHVybiAwO1xuMjI0MDpcdFxuMjI0MTpcdFx0ZXJyID0gbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVycyhuaSk7XG4yMjQyOlx0XG4yMjQzOlx0XHQvKlxuMjI0NDpcdFx0ICogRGVhbGxvY2F0ZSBleHRlbnQgbWZ0IHJlY29yZHMgYW5kIGZyZWUgZXh0ZW50IGlub2Rlcy5cbjIyNDU6XHRcdCAqIE5vIG5lZWQgdG8gbG9jayBhcyBubyBvbmUgZWxzZSBoYXMgYSByZWZlcmVuY2UuXG4yMjQ2Olx0XHQgKi9cbjIyNDc6XHRcdHdoaWxlIChuaS1cdTAwM2Vucl9leHRlbnRzKSB7XG4yMjQ4Olx0XHRcdGVyciA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVx1MDAzZXZvbCwgKihuaS1cdTAwM2VleHQuZXh0ZW50X250ZnNfaW5vcykpO1xuMjI0OTpcdFx0XHRpZiAoZXJyKVxuMjI1MDpcdFx0XHRcdG50ZnNfZXJyb3Ioc2IsXG4yMjUxOlx0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZnJlZSBleHRlbnQgTUZUIHJlY29yZC4gTGVhdmluZyBpbmNvbnNpc3RlbnQgbWV0YWRhdGEuXFxuXCYjMzQ7KTtcbjIyNTI6XHRcdFx0bnRmc19pbm9kZV9jbG9zZSgqKG5pLVx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zKSk7XG4yMjUzOlx0XHR9XG4yMjU0Olx0XG4yMjU1Olx0XHQvKiBEZWFsbG9jYXRlIGJhc2UgbWZ0IHJlY29yZCAqL1xuMjI1NjpcdFx0ZXJyID0gbnRmc19tZnRfcmVjb3JkX2ZyZWUobmktXHUwMDNldm9sLCBuaSk7XG4yMjU3Olx0XHRpZiAoZXJyKVxuMjI1ODpcdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtGYWlsZWQgdG8gZnJlZSBiYXNlIE1GVCByZWNvcmQuIExlYXZpbmcgaW5jb25zaXN0ZW50IG1ldGFkYXRhLlxcblwmIzM0Oyk7XG4yMjU5Olx0XHRyZXR1cm4gZXJyO1xuMjI2MDpcdH1cbjIyNjE6XHRcbjIyNjI6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkRlYWxsb2NhdGluZyBDbHVzdGVycyBhbmQgQXR0cmlidXRlIExpc3RzOiBBIFBvdGVudGlhbCBJbnRlcmFjdGlvbioqCgpIbW0sIGEgcXVlc3Rpb24ganVzdCBwb3BwZWQgaW50byBteSBoZWFkLiBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgYG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnNgIGZ1bmN0aW9uLiBJIHNlZW0gdG8gcmVjYWxsIGEgcG90ZW50aWFsIGludGVyYWN0aW9uIHRoZXJlLiBDb3VsZCB0aGlzIGZ1bmN0aW9uIGJlIGNhbGxpbmcgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBhdCBzb21lIHBvaW50PyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgZm9yIHRoZSBkZWFsbG9jYXRpb24gZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBpbiBhbmQgY29uZmlybSAob3IgZGVueSkgdGhpcyBzdXNwZWN0ZWQgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuYz0zMTg9dm9pZCBudGZzX2ZyZWVfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTMyMi1cbmZzL250ZnMvaW5vZGUuYzozMjM6c3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbmZzL250ZnMvaW5vZGUuYy0zMjQte1xuLS1cbmZzL250ZnMvaW5vZGUuYz0yMjMzPXN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIyNDAtXG5mcy9udGZzL2lub2RlLmM6MjI0MTpcdGVyciA9IG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnMobmkpO1xuZnMvbnRmcy9pbm9kZS5jLTIyNDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDU0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AqKgoKQWxyaWdodCwgSSYjMzk7bSBmb2N1c2luZyBvbiBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gb3IgcHJvY2VzcyB3aXRoaW4gdGhlIE5URlMgZmlsZSBzeXN0ZW0uICYjMzQ7RGVhbGxvY2F0aW5nIGNsdXN0ZXJzJiMzNDsuLi4gdGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIHNwYWNlIG1hbmFnZW1lbnQsIHJpZ2h0PyBTbywgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZnJlZWluZyB1cCBkaXNrIHNwYWNlIHRoYXQgd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIHRvIG5vbi1yZXNpZGVudCBmaWxlIGRhdGEuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBmcmFnbWVudGF0aW9uLCBwZXJmb3JtYW5jZSwgYW5kIHBlcmhhcHMgZXZlbiBkYXRhIHJlY292ZXJ5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGlzIGRlYWxsb2NhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgcm9idXN0IHRoaXMgcm91dGluZSBpcyDigJMgd2hhdCBzYWZlZ3VhcmRzIGFyZSBpbiBwbGFjZSB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbiBvciBpbmNvbnNpc3RlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIE1hc3RlciBGaWxlIFRhYmxlIChNRlQpIGFuZCBob3cgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHRoZXJlLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhpcyBhcyAmIzM0O1RoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGZyZWVpbmcgdXAgc3BhY2UgdGhhdCB3YXNuJiMzOTt0IGRpcmVjdGx5IGluIHRoZSBNRlQgZW50cmllcy4mIzM0OyBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZXRhZGF0YSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIzOlx0c3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiAzMjQ6XHR7XG4gMzI1Olx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbmktXHUwMDNldm9sLVx1MDAzZXNiO1xuIDMyNjpcdFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICphY3R4O1xuIDMyNzpcdFx0aW50IGVyciA9IDA7XG4gMzI4Olx0XG4gMzI5Olx0XHRhY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiAzMzA6XHRcdGlmICghYWN0eClcbiAzMzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzMyOlx0XHRXQVJOX09OKGFjdHgtXHUwMDNlbXJlYy1cdTAwM2VsaW5rX2NvdW50ICE9IDApO1xuIDMzMzpcdFxuIDMzNDpcdFx0LyoqXG4gMzM1Olx0XHQgKiBudGZzX3RydW5jYXRlX3ZmcyBjYW5ub3QgYmUgY2FsbGVkIGluIGV2aWN0KCkgY29udGV4dCBkdWVcbiAzMzY6XHRcdCAqIHRvIHNvbWUgbGltaXRhdGlvbnMsIHdoaWNoIGFyZSB0aGUgQG5pIHZmcyBpbm9kZSBpcyBtYXJrZWRcbiAzMzc6XHRcdCAqIHdpdGggSV9GUkVFSU5HLCBhbmQgZXRjLlxuIDMzODpcdFx0ICovXG4gMzM5Olx0XHRpZiAoTklub1J1bmxpc3REaXJ0eShuaSkpIHtcbiAzNDA6XHRcdFx0ZXJyID0gbnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybChuaS1cdTAwM2V2b2wsIG5pLVx1MDAzZXJ1bmxpc3QucmwpO1xuIDM0MTpcdFx0XHRpZiAoZXJyKVxuIDM0MjpcdFx0XHRcdG50ZnNfZXJyb3Ioc2IsXG4gMzQzOlx0XHRcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byBmcmVlIGNsdXN0ZXJzLiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXG5cJiMzNDspO1xuIDM0NDpcdFx0fVxuIDM0NTpcdFxuIDM0NjpcdFx0d2hpbGUgKChlcnIgPSBudGZzX2F0dHJzX3dhbGsoYWN0eCkpID09IDApIHtcbiAzNDc6XHRcdFx0aWYgKGFjdHgtXHUwMDNlYXR0ci1cdTAwM2Vub25fcmVzaWRlbnQgXHUwMDI2XHUwMDI2XG4gMzQ4Olx0XHRcdFx0XHQoIU5Jbm9SdW5saXN0RGlydHkobmkpIHx8IGFjdHgtXHUwMDNlYXR0ci1cdTAwM2V0eXBlICE9IEFUX0RBVEEpKSB7XG4gMzQ5Olx0XHRcdFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmw7XG4gMzUwOlx0XHRcdFx0c2l6ZV90IG5ld19ybF9jb3VudDtcbiAzNTE6XHRcbiAzNTI6XHRcdFx0XHRybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKG5pLVx1MDAzZXZvbCwgYWN0eC1cdTAwM2VhdHRyLCBOVUxMLFxuIDM1MzpcdFx0XHRcdFx0XHRcdTAwMjZuZXdfcmxfY291bnQpO1xuIDM1NDpcdFx0XHRcdGlmIChJU19FUlIocmwpKSB7XG4gMzU1Olx0XHRcdFx0XHRlcnIgPSBQVFJfRVJSKHJsKTtcbiAzNTY6XHRcdFx0XHRcdG50ZnNfZXJyb3Ioc2IsXG4gMzU3Olx0XHRcdFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byBkZWNvbXByZXNzIHJ1bmxpc3QuIExlYXZpbmcgaW5jb25zaXN0ZW50IG1ldGFkYXRhLlxcblwmIzM0Oyk7XG4gMzU4Olx0XHRcdFx0XHRjb250aW51ZTtcbiAzNTk6XHRcdFx0XHR9XG4gMzYwOlx0XG4gMzYxOlx0XHRcdFx0ZXJyID0gbnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybChuaS1cdTAwM2V2b2wsIHJsKTtcbiAzNjI6XHRcdFx0XHRpZiAoZXJyKVxuIDM2MzpcdFx0XHRcdFx0bnRmc19lcnJvcihzYixcbiAzNjQ6XHRcdFx0XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIGZyZWUgYXR0cmlidXRlIGNsdXN0ZXJzLiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXG5cJiMzNDspO1xuIDM2NTpcdFx0XHRcdGt2ZnJlZShybCk7XG4gMzY2Olx0XHRcdH1cbiAzNjc6XHRcdH1cbiAzNjg6XHRcbiAzNjk6XHRcdG50ZnNfcmVsZWFzZV9kaXJ0eV9jbHVzdGVycyhuaS1cdTAwM2V2b2wsIG5pLVx1MDAzZWlfZGVhbGxvY19jbHVzdGVycyk7XG4gMzcwOlx0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoYWN0eCk7XG4gMzcxOlx0XHRyZXR1cm4gZXJyO1xuIDM3MjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gTlRGUyBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24qKgoKSG9sZCBvbiBhIHNlY29uZCwgc29tZXRoaW5nIGRvZXNuJiMzOTt0IHF1aXRlIHNpdCByaWdodCBoZXJlLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgbnRmc19hdHRybGlzdF91cGRhdGVgIGZ1bmN0aW9uIHdvdWxkIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzYC4gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHRoZSBjYXNlLiBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IGF0dHJpYnV0ZXMgYXJlIGJlaW5nIG1hbmFnZWQgZHVyaW5nIGNsdXN0ZXIgZGVhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgZm9yIG5vbi1yZXNpZGVudCBkYXRhLgoKTGV0IG1lIHJldGhpbmsgdGhpcy4gSWYgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpc24mIzM5O3QgY2FsbGVkIHRoZXJlLCB0aGVuIHdoZXJlIGlzIHRoZSByZWxldmFudCBtZXRhZGF0YSBiZWluZyB1cGRhdGVkPyBDb3VsZCB0aGUgYXR0cmlidXRlIGxpc3QgdXBkYXRlIGJlIGhhbmRsZWQgYnkgYG50ZnNfbWZ0X3JlY29yZF9mcmVlYD8gSXQgbWFrZXMgc2Vuc2UgdGhhdCBmcmVlaW5nIGEgTWFzdGVyIEZpbGUgVGFibGUgKE1GVCkgcmVjb3JkIHdvdWxkIG5lY2Vzc2l0YXRlIHVwZGF0ZXMgdG8gdGhlIGF0dHJpYnV0ZSBsaXN0LCBwb3RlbnRpYWxseSByZWZsZWN0aW5nIHRoZSByZW1vdmFsIG9mIGRhdGEgb3IgdGhlIGZyZWVpbmcgb2YgYXNzb2NpYXRlZCBjbHVzdGVycy4gSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBzdGFjayBhZ2FpbiBhbmQgY29uZmlybSB0aGUgbG9naWNhbCBmbG93IG9mIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19tZnRfcmVjb3JkX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTI2MjI9aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0yNjcwLVx0XHRcdGxlMTZfdG9fY3B1KGN0eC1cdTAwM2VtcmVjLVx1MDAzZWF0dHJzX29mZnNldCkgPT0gOCkge1xuZnMvbnRmcy9hdHRyaWIuYzoyNjcxOlx0XHRpZiAobnRmc19tZnRfcmVjb3JkX2ZyZWUobmktXHUwMDNldm9sLCBuaSkpIHtcbmZzL250ZnMvYXR0cmliLmMtMjY3Mi1cdFx0XHRudGZzX2RlYnVnKFwmIzM0O0NvdWxkbiYjMzk7dCBmcmVlIE1GVCByZWNvcmQuXFxuXCYjMzQ7KTtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTI3NTk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI5NjgtXHRcdGlmIChhdHRyX3NpemUgPT0gOCkge1xuZnMvbnRmcy9hdHRyaWIuYzoyOTY5Olx0XHRcdGlmIChudGZzX21mdF9yZWNvcmRfZnJlZShhdHRyX25pLVx1MDAzZXZvbCwgYXR0cl9uaSkpXG5mcy9udGZzL2F0dHJpYi5jLTI5NzAtXHRcdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtGYWlsZWQgdG8gZnJlZSBNRlQgcmVjb3JkXCYjMzQ7KTtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTM2ODA9aW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3Zjbilcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTM5NTMtXHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7Q291bGQgbm90IG1hcCBuZXcgTUZUIHJlY29yZFwmIzM0Oyk7XG5mcy9udGZzL2F0dHJpYi5jOjM5NTQ6XHRcdFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVx1MDAzZXZvbCwgZXh0X25pKSlcbmZzL250ZnMvYXR0cmliLmMtMzk1NS1cdFx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0NvdWxkIG5vdCBmcmVlIE1GVCByZWNvcmRcJiMzNDspO1xuLS1cbmZzL250ZnMvYXR0cmliLmMtMzk5MC1cdFx0XHR1bm1hcF9tZnRfcmVjb3JkKGV4dF9uaSk7XG5mcy9udGZzL2F0dHJpYi5jOjM5OTE6XHRcdFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVx1MDAzZXZvbCwgZXh0X25pKSlcbmZzL250ZnMvYXR0cmliLmMtMzk5Mi1cdFx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0NvdWxkIG5vdCBmcmVlIE1GVCByZWNvcmRcJiMzNDspO1xuLS1cbmZzL250ZnMvYXR0cmliLmMtNDAwNC1cdFx0XHR1bm1hcF9tZnRfcmVjb3JkKGV4dF9uaSk7XG5mcy9udGZzL2F0dHJpYi5jOjQwMDU6XHRcdFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVx1MDAzZXZvbCwgZXh0X25pKSlcbmZzL250ZnMvYXR0cmliLmMtNDAwNi1cdFx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0NvdWxkbiYjMzk7dCBmcmVlIE1GVCByZWNvcmRcJiMzNDspO1xuLS1cbmZzL250ZnMvaW5vZGUuYz0yMjMzPXN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIyNDctXHR3aGlsZSAobmktXHUwMDNlbnJfZXh0ZW50cykge1xuZnMvbnRmcy9pbm9kZS5jOjIyNDg6XHRcdGVyciA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVx1MDAzZXZvbCwgKihuaS1cdTAwM2VleHQuZXh0ZW50X250ZnNfaW5vcykpO1xuZnMvbnRmcy9pbm9kZS5jLTIyNDktXHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIyNTUtXHQvKiBEZWFsbG9jYXRlIGJhc2UgbWZ0IHJlY29yZCAqL1xuZnMvbnRmcy9pbm9kZS5jOjIyNTY6XHRlcnIgPSBudGZzX21mdF9yZWNvcmRfZnJlZShuaS1cdTAwM2V2b2wsIG5pKTtcbmZzL250ZnMvaW5vZGUuYy0yMjU3LVx0aWYgKGVycilcbi0tXG5mcy9udGZzL21mdC5jPTIwMTM9aW50IG50ZnNfbWZ0X3JlY29yZF9hbGxvYyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgaW50IG1vZGUsXG4tLVxuZnMvbnRmcy9tZnQuYy0yNDg5LS8qXG5mcy9udGZzL21mdC5jOjI0OTA6ICogbnRmc19tZnRfcmVjb3JkX2ZyZWUgLSBmcmVlIGFuIG1mdCByZWNvcmQgb24gYW4gbnRmcyB2b2x1bWVcbmZzL250ZnMvbWZ0LmMtMjQ5MS0gKiBAdm9sOlx0dm9sdW1lIG9uIHdoaWNoIHRvIGZyZWUgdGhlIG1mdCByZWNvcmRcbi0tXG5mcy9udGZzL21mdC5jLTI0OTktICovXG5mcy9udGZzL21mdC5jOjI1MDA6aW50IG50ZnNfbWZ0X3JlY29yZF9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG5mcy9udGZzL21mdC5jLTI1MDEte1xuLS1cbmZzL250ZnMvbWZ0Lmg9Nzk9aW50IG50ZnNfbWZ0X3JlY29yZF9hbGxvYyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgaW50IG1vZGUsXG4tLVxuZnMvbnRmcy9tZnQuaC04MS1cdFx0c3RydWN0IG1mdF9yZWNvcmQgKipuaV9tcmVjKTtcbmZzL250ZnMvbWZ0Lmg6ODI6aW50IG50ZnNfbWZ0X3JlY29yZF9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuZnMvbnRmcy9tZnQuaC04My1pbnQgbnRmc19tZnRfcmVjb3Jkc193cml0ZShjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgdTY0IG1yZWYsXG4tLVxuZnMvbnRmcy9uYW1laS5jPTM5ND1zdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy03MTYtXG5mcy9udGZzL25hbWVpLmM6NzE3Olx0XHRlcnIyID0gbnRmc19tZnRfcmVjb3JkX2ZyZWUobmktXHUwMDNldm9sLCAqKG5pLVx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zKSk7XG5mcy9udGZzL25hbWVpLmMtNzE4LVx0XHRpZiAoZXJyMilcbi0tXG5mcy9udGZzL25hbWVpLmMtNzIyLVx0fVxuZnMvbnRmcy9uYW1laS5jOjcyMzpcdGlmIChudGZzX21mdF9yZWNvcmRfZnJlZShuaS1cdTAwM2V2b2wsIG5pKSlcbmZzL250ZnMvbmFtZWkuYy03MjQtXHRcdG50ZnNfZXJyb3Ioc2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbnRmc19tZnRfcmVjb3JkX2ZyZWVgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgbmFtZSwgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gdGhpbmtpbmcgTlRGUywgTUZULCBhbmQgKmZyZWUqLiBUaGF0IHRlbGxzIG1lIHRoaXMgbGlrZWx5IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgTWFzdGVyIEZpbGUgVGFibGUsIHRoZSBoZWFydCBvZiBOVEZTIGZpbGUgc3lzdGVtIG1ldGFkYXRhLCBtYW5hZ2VzIHJlY29yZHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHVzZS4gSSBleHBlY3Qgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgcmVjbGFpbWluZyBzcGFjZSBmcm9tIGRlbGV0ZWQgZmlsZXMgb3IgcGVyaGFwcyBkZWFsbG9jYXRpbmcgcmVjb3JkcyB0aGF0IHdlcmUgdXNlZCBmb3IgdmVyeSB0cmFuc2llbnQgZGF0YS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHNpbXBseSBtYXJraW5nIHRoZSBNRlQgZW50cnkgYXMgZnJlZSwgb3IgaWYgaXQgYWxzbyBoYXMgcmVzcG9uc2liaWxpdHkgZm9yIHplcm9pbmcgYW55IHNlbnNpdGl2ZSBkYXRhLCBvciBtYXliZSBldmVuIGNvbnNvbGlkYXRpbmcgZnJlZSBzcGFjZSB3aXRoaW4gdGhlIE1GVC4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBiaXRtYXAgdGhhdCB0cmFja3MgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIE1GVC4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkgd2hlbiBtb2RpZnlpbmcgdGhpcyBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bSBlYWdlciB0byBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBpdCBhbGwgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9tZnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjUwMDpcdGludCBudGZzX21mdF9yZWNvcmRfZnJlZShzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuMjUwMTpcdHtcbjI1MDI6XHRcdHU2NCBtZnRfbm87XG4yNTAzOlx0XHRpbnQgZXJyO1xuMjUwNDpcdFx0dTE2IHNlcV9ubztcbjI1MDU6XHRcdF9fbGUxNiBvbGRfc2VxX25vO1xuMjUwNjpcdFx0c3RydWN0IG1mdF9yZWNvcmQgKm5pX21yZWM7XG4yNTA3Olx0XHR1bnNpZ25lZCBpbnQgbWVtYWxsb2NfZmxhZ3M7XG4yNTA4Olx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaTtcbjI1MDk6XHRcbjI1MTA6XHRcdGlmICghdm9sIHx8ICFuaSlcbjI1MTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNTEyOlx0XG4yNTEzOlx0XHRudGZzX2RlYnVnKFwmIzM0O0VudGVyaW5nIGZvciBpbm9kZSAweCVsbHguXFxuXCYjMzQ7LCAobG9uZyBsb25nKW5pLVx1MDAzZW1mdF9ubyk7XG4yNTE0Olx0XG4yNTE1Olx0XHRuaV9tcmVjID0gbWFwX21mdF9yZWNvcmQobmkpO1xuMjUxNjpcdFx0aWYgKElTX0VSUihuaV9tcmVjKSlcbjI1MTc6XHRcdFx0cmV0dXJuIC1FSU87XG4yNTE4Olx0XG4yNTE5Olx0XHQvKiBDYWNoZSB0aGUgbWZ0IHJlZmVyZW5jZSBmb3IgbGF0ZXIuICovXG4yNTIwOlx0XHRtZnRfbm8gPSBuaS1cdTAwM2VtZnRfbm87XG4yNTIxOlx0XG4yNTIyOlx0XHQvKiBNYXJrIHRoZSBtZnQgcmVjb3JkIGFzIG5vdCBpbiB1c2UuICovXG4yNTIzOlx0XHRuaV9tcmVjLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk1GVF9SRUNPUkRfSU5fVVNFO1xuMjUyNDpcdFxuMjUyNTpcdFx0LyogSW5jcmVtZW50IHRoZSBzZXF1ZW5jZSBudW1iZXIsIHNraXBwaW5nIHplcm8sIGlmIGl0IGlzIG5vdCB6ZXJvLiAqL1xuMjUyNjpcdFx0b2xkX3NlcV9ubyA9IG5pX21yZWMtXHUwMDNlc2VxdWVuY2VfbnVtYmVyO1xuMjUyNzpcdFx0c2VxX25vID0gbGUxNl90b19jcHUob2xkX3NlcV9ubyk7XG4yNTI4Olx0XHRpZiAoc2VxX25vID09IDB4ZmZmZilcbjI1Mjk6XHRcdFx0c2VxX25vID0gMTtcbjI1MzA6XHRcdGVsc2UgaWYgKHNlcV9ubylcbjI1MzE6XHRcdFx0c2VxX25vJiM0MzsmIzQzOztcbjI1MzI6XHRcdG5pX21yZWMtXHUwMDNlc2VxdWVuY2VfbnVtYmVyID0gY3B1X3RvX2xlMTYoc2VxX25vKTtcbjI1MzM6XHRcbjI1MzQ6XHRcdGRvd25fcmVhZChcdTAwMjZOVEZTX0kodm9sLVx1MDAzZW1mdF9pbm8pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4yNTM1Olx0XHRlcnIgPSBudGZzX2dldF9ibG9ja19tZnRfcmVjb3JkKE5URlNfSSh2b2wtXHUwMDNlbWZ0X2lubyksIG5pKTtcbjI1MzY6XHRcdHVwX3JlYWQoXHUwMDI2TlRGU19JKHZvbC1cdTAwM2VtZnRfaW5vKS1cdTAwM2VydW5saXN0LmxvY2spO1xuMjUzNzpcdFx0aWYgKGVycikge1xuMjUzODpcdFx0XHR1bm1hcF9tZnRfcmVjb3JkKG5pKTtcbjI1Mzk6XHRcdFx0cmV0dXJuIGVycjtcbjI1NDA6XHRcdH1cbjI1NDE6XHRcbjI1NDI6XHRcdC8qXG4yNTQzOlx0XHQgKiBTZXQgdGhlIG50ZnMgaW5vZGUgZGlydHkgYW5kIHdyaXRlIGl0IG91dC4gIFdlIGRvIG5vdCBuZWVkIHRvIHdvcnJ5XG4yNTQ0Olx0XHQgKiBhYm91dCB0aGUgYmFzZSBpbm9kZSBoZXJlIHNpbmNlIHdoYXRldmVyIGNhdXNlZCB0aGUgZXh0ZW50IG1mdFxuMjU0NTpcdFx0ICogcmVjb3JkIHRvIGJlIGZyZWVkIGlzIGd1YXJhbnRlZWQgdG8gZG8gaXQgYWxyZWFkeS5cbjI1NDY6XHRcdCAqL1xuMjU0NzpcdFx0Tklub1NldERpcnR5KG5pKTtcbjI1NDg6XHRcdGVyciA9IHdyaXRlX21mdF9yZWNvcmQobmksIG5pX21yZWMsIDApO1xuMjU0OTpcdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipUcmFjaW5nIHRoZSBOVEZTIEF0dHJpYnV0ZSBMaXN0IFVwZGF0ZSBEdXJpbmcgRXZpY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBOVEZTIGNvZGUgYW5kIEkmIzM5O3ZlIGhpdCBhIHBvdGVudGlhbCBzbmFnLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHdoZW4gYSBNYXN0ZXIgRmlsZSBUYWJsZSAoTUZUKSByZWNvcmQgaXMgZnJlZWQgd2l0aCBgbnRmc19tZnRfcmVjb3JkX2ZyZWVgLCBpdCB3b3VsZCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgYW4gdXBkYXRlIG9mIHRoZSBhdHRyaWJ1dGUgbGlzdCB2aWEgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYC4gQnV0IGhvbGQgb24uLi4gaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBkb2luZyB0aGF0IGRpcmVjdGx5LiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQgYW5kIG5lZWRzIHNvbWUgY2xhcmlmaWNhdGlvbi4gV2hlcmUgZXhhY3RseSAqaXMqIHRoYXQgYWxsLWltcG9ydGFudCBgbnRmc19hdHRybGlzdF91cGRhdGVgIGNhbGwgaGFwcGVuaW5nIGR1cmluZyB0aGUgZXZpY3Rpb24gcHJvY2Vzcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBhdm9pZCBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYW5vdGhlciBlbnRyeSBwb2ludC4gUGVyaGFwcyBJJiMzOTt2ZSBtaXNzZWQgc29tZXRoaW5nLiBJZiBgbnRmc19tZnRfcmVjb3JkX2ZyZWVgIGlzbiYjMzk7dCB0aGUgZGlyZWN0IHRyaWdnZXIsIHRoZW4gSSBzaG91bGQgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBudGZzX2F0dHJsaXN0X2VudHJ5X3JtYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBkZWVwZXIuIE1heWJlLCBqdXN0ICptYXliZSosIHRoZSBjcnVjaWFsIHVwZGF0ZSBpcyBoYXBwZW5pbmcgaW5zaWRlIHRoZSBmdW5jdGlvbiBmb3IgcmVtb3ZpbmcgYW4gZW50cnkgZnJvbSB0aGUgYXR0cmlidXRlIGxpc3QuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2F0dHJsaXN0X2VudHJ5X3JtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9hdHRyaWIuYz0yNjIyPWludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuLS1cbmZzL250ZnMvYXR0cmliLmMtMjY1Mi1cdGlmIChOSW5vQXR0ckxpc3QoYmFzZV9uaSkgXHUwMDI2XHUwMDI2IHR5cGUgIT0gQVRfQVRUUklCVVRFX0xJU1QpIHtcbmZzL250ZnMvYXR0cmliLmM6MjY1MzpcdFx0ZXJyID0gbnRmc19hdHRybGlzdF9lbnRyeV9ybShjdHgpO1xuZnMvbnRmcy9hdHRyaWIuYy0yNjU0LVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jPTEyMT1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jLTI0OS0vKlxuZnMvbnRmcy9hdHRybGlzdC5jOjI1MDogKiBudGZzX2F0dHJsaXN0X2VudHJ5X3JtIC0gcmVtb3ZlIGFuIGF0dHJpYnV0ZSBsaXN0IGF0dHJpYnV0ZSBlbnRyeVxuZnMvbnRmcy9hdHRybGlzdC5jLTI1MS0gKiBAY3R4Olx0YXR0cmlidXRlIHNlYXJjaCBjb250ZXh0IGRlc2NyaWJpbmcgdGhlIGF0dHJpYnV0ZSBsaXN0IGVudHJ5XG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jLTI1Ni0gKi9cbmZzL250ZnMvYXR0cmxpc3QuYzoyNTc6aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG5mcy9udGZzL2F0dHJsaXN0LmMtMjU4LXtcbi0tXG5mcy9udGZzL2F0dHJsaXN0Lmg9MTY9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKTtcbmZzL250ZnMvYXR0cmxpc3QuaDoxNzppbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7XG5mcy9udGZzL2F0dHJsaXN0LmgtMTgtaW50IG50ZnNfYXR0cmxpc3RfdXBkYXRlKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5URlMgQXR0cmlidXRlIExpc3QgUmVtb3ZhbCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbnRmc19hdHRybGlzdF9lbnRyeV9ybWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBudGZzX2F0dHJfcmVjb3JkX3JtYCwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHVzZS1jYXNlcyBvZiBgbnRmc19hdHRyX3JlY29yZF9ybWAuIFdoZXJlIGlzICp0aGF0KiBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIG9mIGBudGZzX2F0dHJfcmVjb3JkX3JtYCB3aWxsIHRlbGwgbWUgd2hpY2ggc2l0dWF0aW9ucyB0cmlnZ2VyIHRoZSBhdHRyaWJ1dGUgcmVjb3JkIHJlbW92YWwgcHJvY2VzcywgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCB0aGUgaGlnaGVyLWxldmVsIGdvYWxzIHRoYXQgYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gIHVsdGltYXRlbHkgc3VwcG9ydHMuIElzIGl0IGR1cmluZyBmaWxlIGRlbGV0aW9uLCBhdHRyaWJ1dGUgcmVzaXppbmcsIGF0dHJpYnV0ZSBsaXN0IHJlLW9yZ2FuaXphdGlvbiwgb3Igc29tZSBvdGhlciBvcGVyYXRpb24/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZXN0YWJsaXNoLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyB0aGUgY29ycmVjdCByZW1vdmFsIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIGFjdGlvbiwgYW5kIGlmIGEgZGlmZmVyZW50IGFwcHJvYWNoIHdvdWxkIGJlIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19hdHRyX3JlY29yZF9ybSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvYXR0cmliLmM9MjQ4Nj1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcmVjb3JkX2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiB0eXBlLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtMjYxNS0vKlxuZnMvbnRmcy9hdHRyaWIuYzoyNjE2OiAqIG50ZnNfYXR0cl9yZWNvcmRfcm0gLSByZW1vdmUgYXR0cmlidXRlIGV4dGVudFxuZnMvbnRmcy9hdHRyaWIuYy0yNjE3LSAqIEBjdHg6XHRzZWFyY2ggY29udGV4dCBkZXNjcmliaW5nIHRoZSBhdHRyaWJ1dGUgd2hpY2ggc2hvdWxkIGJlIHJlbW92ZWRcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI2MjEtICovXG5mcy9udGZzL2F0dHJpYi5jOjI2MjI6aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG5mcy9udGZzL2F0dHJpYi5jLTI2MjMte1xuLS1cbmZzL250ZnMvYXR0cmliLmMtMjcxMS1cdFx0LyogUmVtb3ZlIGF0dHJpYnV0ZSByZWNvcmQgaXRzZWxmLiAqL1xuZnMvbnRmcy9hdHRyaWIuYzoyNzEyOlx0XHRpZiAobnRmc19hdHRyX3JlY29yZF9ybShjdHgpKSB7XG5mcy9udGZzL2F0dHJpYi5jLTI3MTMtXHRcdFx0bnRmc19kZWJ1ZyhcJiMzNDtDb3VsZG4mIzM5O3QgcmVtb3ZlIGF0dHJpYnV0ZSBsaXN0LiBTdWNjZWVkIGFueXdheS5cXG5cJiMzNDspO1xuLS1cbmZzL250ZnMvYXR0cmliLmM9MzY4MD1pbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxuLS1cbmZzL250ZnMvYXR0cmliLmMtMzkxOS1cdFx0XHQvKiBSZW1vdmUgdW51c2VkIGF0dHJpYnV0ZSByZWNvcmQuICovXG5mcy9udGZzL2F0dHJpYi5jOjM5MjA6XHRcdFx0ZXJyID0gbnRmc19hdHRyX3JlY29yZF9ybShjdHgpO1xuZnMvbnRmcy9hdHRyaWIuYy0zOTIxLVx0XHRcdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTUxMjc9aW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy01MTY5LVx0XHRcdFx0Q0FTRV9TRU5TSVRJVkUsIDAsIE5VTEwsIDAsIGN0eCkpKSB7XG5mcy9udGZzL2F0dHJpYi5jOjUxNzA6XHRcdGVyciA9IG50ZnNfYXR0cl9yZWNvcmRfcm0oY3R4KTtcbmZzL250ZnMvYXR0cmliLmMtNTE3MS1cdFx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvYXR0cmliLmg9MTIwPWludCBudGZzX2F0dHJfcmVtb3ZlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgX19sZTMyIHR5cGUsIF9fbGUxNiAqbmFtZSxcbmZzL250ZnMvYXR0cmliLmgtMTIxLVx0XHR1MzIgbmFtZV9sZW4pO1xuZnMvbnRmcy9hdHRyaWIuaDoxMjI6aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuZnMvbnRmcy9hdHRyaWIuaC0xMjMtaW50IG50ZnNfYXR0cl9yZWNvcmRfbW92ZV90byhzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbi0tXG5mcy9udGZzL2lub2RlLmM9MzAzMT1pbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuLS1cbmZzL250ZnMvaW5vZGUuYy0zMTU1LVx0XHRcdFx0Q0FTRV9TRU5TSVRJVkUsIDAsIE5VTEwsIDAsIGN0eCkpIHtcbmZzL250ZnMvaW5vZGUuYzozMTU2Olx0XHRpZiAobnRmc19hdHRyX3JlY29yZF9ybShjdHgpKVxuZnMvbnRmcy9pbm9kZS5jLTMxNTctXHRcdFx0bnRmc19lcnJvcihuaS1cdTAwM2V2b2wtXHUwMDNlc2IsIFwmIzM0O1JvbGxiYWNrIGZhaWxlZCB0byByZW1vdmUgYXR0cmxpc3RcJiMzNDspO1xuLS1cbmZzL250ZnMvbmFtZWkuYz04MzA9c3RhdGljIGludCBudGZzX2RlbGV0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBudGZzX2lub2RlICpkaXJfbmksXG4tLVxuZnMvbnRmcy9uYW1laS5jLTk0My1cbmZzL250ZnMvbmFtZWkuYzo5NDQ6XHRlcnIgPSBudGZzX2F0dHJfcmVjb3JkX3JtKGFjdHgpO1xuZnMvbnRmcy9uYW1laS5jLTk0NS1cdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9zdXBlci5jPTQ0Mj1pbnQgbnRmc193cml0ZV92b2x1bWVfbGFiZWwoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNoYXIgKmxhYmVsKVxuLS1cbmZzL250ZnMvc3VwZXIuYy00ODctXHRpZiAoIXJldClcbmZzL250ZnMvc3VwZXIuYzo0ODg6XHRcdHJldCA9IG50ZnNfYXR0cl9yZWNvcmRfcm0oY3R4KTtcbmZzL250ZnMvc3VwZXIuYy00ODktXHRlbHNlIGlmIChyZXQgPT0gLUVOT0VOVClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NzMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG50ZnNfYXR0cl9ybWAgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBgbnRmc19hdHRyX3JtYCBwb3AgdXAgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBpc3N1ZS4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCAmIzM0O1dhaXQsIGlzIHRoaXMgZnVuY3Rpb24gKmFjdHVhbGx5KiBiZWluZyBjYWxsZWQgZnJvbSBzb21ld2hlcmUgdW5leHBlY3RlZD8mIzM0OyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgc3VjaCBhIGxvdy1sZXZlbCBmdW5jdGlvbiByZWxhdGVkIHRvIE5URlMgYXR0cmlidXRlIG1hbmFnZW1lbnQgaXMgdXN1YWxseSB0aWdodGx5IGNvdXBsZWQgd2l0aCBhIHNwZWNpZmljIG1vZHVsZSBvciBzdWJzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwgb3IgZmlsZXN5c3RlbSBkcml2ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjYWxsIGNoYWluIHRoYXQgbGVhZHMgdG8gYG50ZnNfYXR0cl9ybWAuIEFueSB1bmV4cGVjdGVkIHVzYWdlIHBhdHRlcm5zIGNvdWxkIHN1Z2dlc3QgYSBidWcsIHZ1bG5lcmFiaWxpdHksIG9yIG1pc2NvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHJpZ2h0IG5vdy4gSSBoYXZlIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHRoaXMgY29kZSBpcyBiZWluZyBpbnZva2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2F0dHJfcm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTI3NTk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI5MzktXHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIGp1c3QgYWRkZWQgYXR0cmlidXRlXCYjMzQ7KTtcbmZzL250ZnMvYXR0cmliLmM6Mjk0MDpcdFx0aWYgKG50ZnNfYXR0cl9ybShhdHRyX25pKSlcbmZzL250ZnMvYXR0cmliLmMtMjk0MS1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtGYWlsZWQgdG8gcmVtb3ZlIGp1c3QgYWRkZWQgYXR0cmlidXRlXCYjMzQ7KTtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTQ5NzA9aW50IG50ZnNfYXR0cl9tYXBfY2x1c3RlcihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y25fc3RhcnQsIHM2NCAqbGNuX3N0YXJ0LFxuLS1cbmZzL250ZnMvYXR0cmliLmMtNTEyMC0vKlxuZnMvbnRmcy9hdHRyaWIuYzo1MTIxOiAqIG50ZnNfYXR0cl9ybSAtIHJlbW92ZSBhdHRyaWJ1dGUgZnJvbSBudGZzIGlub2RlXG5mcy9udGZzL2F0dHJpYi5jLTUxMjItICogQG5pOlx0XHRvcGVuZWQgbnRmcyBhdHRyaWJ1dGUgdG8gZGVsZXRlXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy01MTI2LSAqL1xuZnMvbnRmcy9hdHRyaWIuYzo1MTI3OmludCBudGZzX2F0dHJfcm0oc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuZnMvbnRmcy9hdHRyaWIuYy01MTI4LXtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTUyMDk9aW50IG50ZnNfYXR0cl9yZW1vdmUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwgX19sZTE2ICpuYW1lLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtNTIyOS1cbmZzL250ZnMvYXR0cmliLmM6NTIzMDpcdGVyciA9IG50ZnNfYXR0cl9ybShhdHRyX25pKTtcbmZzL250ZnMvYXR0cmliLmMtNTIzMS1cdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9hdHRyaWIuaD0xMTY9aW50IG50ZnNfYXR0cl90cnVuY2F0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXplKTtcbmZzL250ZnMvYXR0cmliLmg6MTE3OmludCBudGZzX2F0dHJfcm0oc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbmZzL250ZnMvYXR0cmliLmgtMTE4LWludCBudGZzX2F0dHJfZXhpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwgX19sZTE2ICpuYW1lLFxuLS1cbmZzL250ZnMvcmVwYXJzZS5jPTU5Mz1zdGF0aWMgaW50IHVwZGF0ZV9yZXBhcnNlX2RhdGEoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICp4cixcbi0tXG5mcy9udGZzL3JlcGFyc2UuYy02MjktXHRcdCAqL1xuZnMvbnRmcy9yZXBhcnNlLmM6NjMwOlx0XHRudGZzX2F0dHJfcm0ocnBfbmkpO1xuZnMvbnRmcy9yZXBhcnNlLmMtNjMxLVx0XHRudGZzX2Vycm9yKG5pLVx1MDAzZXZvbC1cdTAwM2VzYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb25zdHJ1Y3RpbmcgdGhlIE5URlMgSW5vZGUgRXZpY3Rpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgTlRGUyBpbm9kZSBldmljdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIG9mZjsgSSB0aG91Z2h0IGBudGZzX2F0dHJfcmVtb3ZlYCB3YXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGVgLCBidXQgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IHNlZW1zIGBudGZzX2RlbGV0ZV9iYXNlX2lub2RlYCBhY3R1YWxseSBjYWxscyBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AgYW5kIGBudGZzX21mdF9yZWNvcmRfZnJlZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LgoKQWgsIGhlcmUmIzM5O3MgdGhlIGtleTogdGhpcyBwYXRjaCBpcyBzYXlpbmcgdGhhdCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpYCBjbGVhcnMgYFNCX0FDVElWRWAgKmJlZm9yZSogZXZpY3RpbmcgY2FjaGVkIGlub2Rlcy4gV2hpY2ggbWVhbnMgd2UgKmNhbiYjMzk7dCogbG9vayB1cCB0aGUgYXR0cmlidXRlLWxpc3QgaW5vZGUgYWZ0ZXIgYFNCX0FDVElWRWAgaXMgY2xlYXJlZCBiZWNhdXNlIGl0IG1pZ2h0IGFscmVhZHkgYmUgaW4gdGhlIGBJX0ZSRUVJTkdgIHN0YXRlLCBhbmQgd2FpdGluZyBvbiBpdCBjb3VsZCBjYXVzZSBhIG5hc3R5IHNlbGYtZGVhZGxvY2suIFRoYXQgcmVhbGx5IGNsYXJpZmllcyB0aGUgcHJvYmxlbSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nLgoKU28sIHRoaXMgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCByb3V0aW5lIGlzIGRlZmluaXRlbHkgdHJpZ2dlcmVkIGR1cmluZyBldmljdGlvbi4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGVsc2UgaXQmIzM5O3MgY2FsbGVkIGZyb20uIExldCYjMzk7cyBzZWUuLi4gaXQmIzM5O3MgY2FsbGVkIGZyb20gYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gLCBgbnRmc19hdHRybGlzdF9lbnRyeV9hZGRgLCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCwgYG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemVgLCBgbnRmc19hdHRyX3VwZGF0ZV9tZXRhYCwgYG50ZnNfaXJfcmVwYXJlbnRgLCBhbmQgYG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0YC4gVGhhdCBnaXZlcyBtZSBhIGJyb2FkZXIgcGljdHVyZSBvZiBpdHMgcm9sZS4KClNwZWNpZmljYWxseSwgZHVyaW5nIGV2aWN0aW9uLCBgbnRmc19ldmljdF9iaWdfaW5vZGVgIGNhbGxzIGBudGZzX2RlbGV0ZV9iYXNlX2lub2RlYCwgd2hpY2gsIGFzIHdlIGVzdGFibGlzaGVkLCBjYWxscyBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AuIEFuZCB0aGVuIGBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzYCBjYWxscyBgbnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybGAuIEdvdCBpdC4KCkJ1dCBob2xkIG9uLCBgbnRmc19ldmljdF9iaWdfaW5vZGVgICphbHNvKiBjYWxscyBgbnRmc19jb21taXRfaW5vZGVgIGlmIHRoZSBpbm9kZSBpcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBudGZzX2NvbW1pdF9pbm9kZWAgaW4gdGhpcyBjb250ZXh0LiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkmIzM5O2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGZ1bmN0aW9uIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfY29tbWl0X2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbm9kZS5jPTIyNzI9dm9pZCBudGZzX2V2aWN0X2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKVxuLS1cbmZzL250ZnMvaW5vZGUuYy0yMjg4LVx0XHQvKiBDb21taXR0aW5nIHRoZSBpbm9kZSBhbHNvIGNvbW1pdHMgYWxsIGV4dGVudCBpbm9kZXMuICovXG5mcy9udGZzL2lub2RlLmM6MjI4OTpcdFx0bnRmc19jb21taXRfaW5vZGUodmkpO1xuZnMvbnRmcy9pbm9kZS5jLTIyOTAtXG4tLVxuZnMvbnRmcy9pbm9kZS5oPTM0Nj1pbnQgbnRmc19pbm9kZV9jbG9zZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuZnMvbnRmcy9pbm9kZS5oLTM0Ny1cbmZzL250ZnMvaW5vZGUuaDozNDg6c3RhdGljIGlubGluZSB2b2lkIG50ZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpXG5mcy9udGZzL2lub2RlLmgtMzQ5LXtcbi0tXG5mcy9udGZzL3N1cGVyLmM9MTcxMT1zdGF0aWMgdm9pZCBudGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0xNzIyLVx0ICovXG5mcy9udGZzL3N1cGVyLmM6MTcyMzpcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cdTAwM2V2b2xfaW5vKTtcbmZzL250ZnMvc3VwZXIuYy0xNzI0LVxuLS1cbmZzL250ZnMvc3VwZXIuYy0xNzI3LVx0XHRpZiAodm9sLVx1MDAzZWV4dGVuZF9pbm8pXG5mcy9udGZzL3N1cGVyLmM6MTcyODpcdFx0XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlZXh0ZW5kX2lubyk7XG5mcy9udGZzL3N1cGVyLmMtMTcyOS1cdFx0aWYgKHZvbC1cdTAwM2VzZWN1cmVfaW5vKVxuZnMvbnRmcy9zdXBlci5jOjE3MzA6XHRcdFx0bnRmc19jb21taXRfaW5vZGUodm9sLVx1MDAzZXNlY3VyZV9pbm8pO1xuZnMvbnRmcy9zdXBlci5jLTE3MzEtXHR9XG5mcy9udGZzL3N1cGVyLmMtMTczMi1cbmZzL250ZnMvc3VwZXIuYzoxNzMzOlx0bnRmc19jb21taXRfaW5vZGUodm9sLVx1MDAzZXJvb3RfaW5vKTtcbmZzL250ZnMvc3VwZXIuYy0xNzM0LVxuZnMvbnRmcy9zdXBlci5jOjE3MzU6XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlbGNuYm1wX2lubyk7XG5mcy9udGZzL3N1cGVyLmMtMTczNi1cbmZzL250ZnMvc3VwZXIuYy0xNzM3LVx0LypcbmZzL250ZnMvc3VwZXIuYzoxNzM4Olx0ICogdGhlIEdGUF9OT0ZTIHNjb3BlIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSBudGZzX2NvbW1pdF9pbm9kZVxuZnMvbnRmcy9zdXBlci5jLTE3MzktXHQgKiBkb2VzIG5vdGhpbmdcbmZzL250ZnMvc3VwZXIuYy0xNzQwLVx0ICovXG5mcy9udGZzL3N1cGVyLmM6MTc0MTpcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cdTAwM2VtZnRibXBfaW5vKTtcbmZzL250ZnMvc3VwZXIuYy0xNzQyLVxuZnMvbnRmcy9zdXBlci5jLTE3NDMtXHRpZiAodm9sLVx1MDAzZWxvZ2ZpbGVfaW5vKVxuZnMvbnRmcy9zdXBlci5jOjE3NDQ6XHRcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cdTAwM2Vsb2dmaWxlX2lubyk7XG5mcy9udGZzL3N1cGVyLmMtMTc0NS1cbmZzL250ZnMvc3VwZXIuYy0xNzQ2LVx0aWYgKHZvbC1cdTAwM2VtZnRtaXJyX2lubylcbmZzL250ZnMvc3VwZXIuYzoxNzQ3Olx0XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlbWZ0bWlycl9pbm8pO1xuZnMvbnRmcy9zdXBlci5jOjE3NDg6XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlbWZ0X2lubyk7XG5mcy9udGZzL3N1cGVyLmMtMTc0OS1cbi0tXG5mcy9udGZzL3N1cGVyLmMtMTc1OC1cdFx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGNsZWFyIGRpcnR5IGJpdCBpbiB2b2x1bWUgaW5mb3JtYXRpb24gZmxhZ3MuICBSdW4gY2hrZHNrLlwmIzM0Oyk7XG5mcy9udGZzL3N1cGVyLmM6MTc1OTpcdFx0XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNldm9sX2lubyk7XG5mcy9udGZzL3N1cGVyLmM6MTc2MDpcdFx0XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlcm9vdF9pbm8pO1xuZnMvbnRmcy9zdXBlci5jLTE3NjEtXHRcdFx0aWYgKHZvbC1cdTAwM2VtZnRtaXJyX2lubylcbmZzL250ZnMvc3VwZXIuYzoxNzYyOlx0XHRcdFx0bnRmc19jb21taXRfaW5vZGUodm9sLVx1MDAzZW1mdG1pcnJfaW5vKTtcbmZzL250ZnMvc3VwZXIuYzoxNzYzOlx0XHRcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cdTAwM2VtZnRfaW5vKTtcbmZzL250ZnMvc3VwZXIuYy0xNzY0LVx0XHR9IGVsc2Uge1xuLS1cbmZzL250ZnMvc3VwZXIuYy0xNzk5LVx0XHQvKiBSZS1jb21taXQgdGhlIG1mdCBtaXJyb3IgYW5kIG1mdCBqdXN0IGluIGNhc2UuICovXG5mcy9udGZzL3N1cGVyLmM6MTgwMDpcdFx0bnRmc19jb21taXRfaW5vZGUodm9sLVx1MDAzZW1mdG1pcnJfaW5vKTtcbmZzL250ZnMvc3VwZXIuYzoxODAxOlx0XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlbWZ0X2lubyk7XG5mcy9udGZzL3N1cGVyLmMtMTgwMi1cdFx0aXB1dCh2b2wtXHUwMDNlbWZ0bWlycl9pbm8pO1xuLS1cbmZzL250ZnMvc3VwZXIuYy0xODA5LVx0ICovXG5mcy9udGZzL3N1cGVyLmM6MTgxMDpcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cdTAwM2VtZnRfaW5vKTtcbmZzL250ZnMvc3VwZXIuYy0xODExLVx0d3JpdGVfaW5vZGVfbm93KHZvbC1cdTAwM2VtZnRfaW5vLCAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBJbm9kZSBDb21taXQqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IChvciBwZXJoYXBzIGRlbHZlIGRlZXBlcikgaW50byB0aGUgbWVjaGFuaWNzIG9mIGBudGZzX2NvbW1pdF9pbm9kZWAuIEdpdmVuIGl0cyBuYW1lLCBpdCYjMzk7cyBvYnZpb3VzbHkgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGlub2RlIG1ldGFkYXRhIGludGVncml0eSB3aXRoaW4gdGhlIE5URlMgZmlsZXN5c3RlbSwgc28gbmF0dXJhbGx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O3doZXJlIGlzIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbj8mIzM0OyBJdCB3b3VsZCBtYWtlIHNlbnNlIGZvciB0aGF0IHRvIGxpdmUgd2l0aGluIGBmcy9udGZzL2lub2RlLmhgLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFkZXIgZmlsZSBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpbmdzLCB3aGF0IHNwaW5sb2NrcyBvciBzZW1hcGhvcmVzIG1pZ2h0IGJlIGludm9sdmVkLCBhbmQgd2hhdCBjb25zaXN0ZW5jeSBtb2RlbHMgYXJlIHVzZWQuIEkgYXNzdW1lIHRoYXQgaXQmIzM5O3MgZ29pbmcgdG8gaW5jbHVkZSBkZWFsaW5nIHdpdGggd3JpdGluZyBkaXJ0eSBtZXRhZGF0YSB0byB0aGUgTUZUIChNYXN0ZXIgRmlsZSBUYWJsZSkuIFdvbmRlcmluZyBob3cgaXQgbWFuYWdlcyBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHJhY2UgY29uZGl0aW9ucyBhbmQgd2hhdCBsZXZlbCBvZiBhdG9taWNpdHkgaXMgZ3VhcmFudGVlZCwgdGhpbmtpbmcgcGVyaGFwcyBpdCByZWxpZXMgb24gam91cm5hbGVkIG1ldGFkYXRhIHVwZGF0ZXMgdG8gcmVjb3ZlciBmcm9tIGlzc3Vlcy4gVGhpcyBpcyB0aGUgbHluY2hwaW4gb2YgaW5vZGUgbWFuYWdlbWVudCBmb3IgTlRGUywgYW5kIGdldHRpbmcgdGhlIGRldGFpbHMgcmlnaHQgaGVyZSBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQ4Olx0c3RhdGljIGlubGluZSB2b2lkIG50ZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpXG4gMzQ5Olx0e1xuIDM1MDpcdFx0X19udGZzX3dyaXRlX2lub2RlKHZpLCAxKTtcbiAzNTE6XHR9XG4gMzUyOlx0XG4gMzUzOlx0aW50IG50ZnNfaW5vZGVfc3luY19maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuIDM1NDpcdGludCBudGZzX2V4dGVuZF9pbml0aWFsaXplZF9zaXplKHN0cnVjdCBpbm9kZSAqdmksIGNvbnN0IGxvZmZfdCBvZmZzZXQsXG4gMzU1Olx0XHRcdGNvbnN0IGxvZmZfdCBuZXdfc2l6ZSwgYm9vbCBic3luYyk7XG4gMzU2Olx0dm9pZCBudGZzX3NldF92ZnNfb3BlcmF0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiAzNTc6XHRzdHJ1Y3QgZm9saW8gKm50ZnNfZ2V0X2xvY2tlZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiAzNTg6XHRcdFx0cGdvZmZfdCBpbmRleCwgcGdvZmZfdCBlbmRfaW5kZXgsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSk7XG4gMzU5Olx0XG4gMzYwOlx0I2VuZGlmIC8qIF9MSU5VWF9OVEZTX0lOT0RFX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBJbm9kZSBXcml0ZSBQYXRoKioKCkFscmlnaHQsIHNvIGBudGZzX2NvbW1pdF9pbm9kZWAgdHJpZ2dlcnMgYSBjaGFpbiByZWFjdGlvbiwgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYF9fbnRmc193cml0ZV9pbm9kZSh2aSwgMSlgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24uIE5vdywgYF9fbnRmc193cml0ZV9pbm9kZWAsIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSXQmIzM5O3MgY2FsbGluZyBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCB3aGljaCwgaW4gdHVybiwgY2FsbHMgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYC4gQ2xlYXJseSwgdGhpcyBpcyB0aGUgY29yZSBvZiBob3cgdGhlIGF0dHJpYnV0ZSBsaXN0IGRhdGEgaXMgYmVpbmcgdXBkYXRlZC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19udGZzX3dyaXRlX2lub2RlYCwgc28gSSYjMzk7bGwganVtcCBvdmVyIHRvIGBmcy9udGZzL2lub2RlLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzIzOlx0aW50IF9fbnRmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpLCBpbnQgc3luYylcbjI3MjQ6XHR7XG4yNzI1Olx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0kodmkpO1xuMjcyNjpcdFx0c3RydWN0IG50ZnNfaW5vZGUgKm1mdF9uaSA9IE5URlNfSShuaS1cdTAwM2V2b2wtXHUwMDNlbWZ0X2lubyk7XG4yNzI3Olx0XHRzdHJ1Y3QgbWZ0X3JlY29yZCAqbTtcbjI3Mjg6XHRcdGludCBlcnIgPSAwO1xuMjcyOTpcdFx0Ym9vbCBuZWVkX2lwdXQgPSBmYWxzZTtcbjI3MzA6XHRcbjI3MzE6XHRcdG50ZnNfZGVidWcoXCYjMzQ7RW50ZXJpbmcgZm9yICVzaW5vZGUgMHglbGx4LlwmIzM0OywgTklub0F0dHIobmkpID8gXCYjMzQ7YXR0ciBcJiMzNDsgOiBcJiMzNDtcJiMzNDssXG4yNzMyOlx0XHRcdFx0bmktXHUwMDNlbWZ0X25vKTtcbjI3MzM6XHRcbjI3MzQ6XHRcdGlmIChOVm9sU2h1dGRvd24obmktXHUwMDNldm9sKSlcbjI3MzU6XHRcdFx0cmV0dXJuIC1FSU87XG4yNzM2Olx0XG4yNzM3Olx0XHQvKlxuMjczODpcdFx0ICogRGlydHkgYXR0cmlidXRlIGlub2RlcyBhcmUgd3JpdHRlbiB2aWEgdGhlaXIgcmVhbCBpbm9kZXMgc28ganVzdFxuMjczOTpcdFx0ICogY2xlYW4gdGhlbSBoZXJlLiAgQWNjZXNzIHRpbWUgdXBkYXRlcyBhcmUgdGFrZW4gY2FyZSBvZmYgd2hlbiB0aGVcbjI3NDA6XHRcdCAqIHJlYWwgaW5vZGUgaXMgd3JpdHRlbi5cbjI3NDE6XHRcdCAqL1xuMjc0MjpcdFx0aWYgKE5Jbm9BdHRyKG5pKSB8fCBuaS1cdTAwM2Vucl9leHRlbnRzID09IC0xKSB7XG4yNzQzOlx0XHRcdE5Jbm9DbGVhckRpcnR5KG5pKTtcbjI3NDQ6XHRcdFx0bnRmc19kZWJ1ZyhcJiMzNDtEb25lLlwmIzM0Oyk7XG4yNzQ1Olx0XHRcdHJldHVybiAwO1xuMjc0NjpcdFx0fVxuMjc0NzpcdFxuMjc0ODpcdFx0LyogaWdyYWIgcHJldmVudHMgdmkgZnJvbSBiZWluZyBldmljdGVkIHdoaWxlIG1yZWNfbG9jayBpcyBob2xkLiAqL1xuMjc0OTpcdFx0aWYgKGlncmFiKHZpKSAhPSBOVUxMKVxuMjc1MDpcdFx0XHRuZWVkX2lwdXQgPSB0cnVlO1xuMjc1MTpcdFxuMjc1MjpcdFx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7XG4yNzUzOlx0XHQvKiBNYXAsIHBpbiwgYW5kIGxvY2sgdGhlIG1mdCByZWNvcmQgYmVsb25naW5nIHRvIHRoZSBpbm9kZS4gKi9cbjI3NTQ6XHRcdG0gPSBtYXBfbWZ0X3JlY29yZChuaSk7XG4yNzU1Olx0XHRpZiAoSVNfRVJSKG0pKSB7XG4yNzU2Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuMjc1NzpcdFx0XHRlcnIgPSBQVFJfRVJSKG0pO1xuMjc1ODpcdFx0XHRnb3RvIGVycl9vdXQ7XG4yNzU5Olx0XHR9XG4yNzYwOlx0XG4yNzYxOlx0XHRpZiAoTklub05vblJlc2lkZW50KG5pKSBcdTAwMjZcdTAwMjYgTklub1J1bmxpc3REaXJ0eShuaSkpIHtcbjI3NjI6XHRcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuMjc2MzpcdFx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuMjc2NDpcdFx0XHRpZiAoIWVycilcbjI3NjU6XHRcdFx0XHROSW5vQ2xlYXJSdW5saXN0RGlydHkobmkpO1xuMjc2NjpcdFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuMjc2NzpcdFx0fVxuMjc2ODpcdFxuMjc2OTpcdFx0ZXJyID0gbnRmc19pbm9kZV9zeW5jX3N0YW5kYXJkX2luZm9ybWF0aW9uKHZpLCBtKTtcbjI3NzA6XHRcdGlmIChlcnIpXG4yNzcxOlx0XHRcdGdvdG8gdW5tX2Vycl9vdXQ7XG4yNzcyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlRGUyBFdmljdGlvbiBEZWFkbG9jayBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBOVEZTIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IGJyZWFrZG93bi4gSXQgbG9va3MgbGlrZSBgbnRmc19hdHRybGlzdF91cGRhdGVgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGR1cmluZyB0aGUgZXZpY3Rpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGZyb20gYF9fbnRmc193cml0ZV9pbm9kZWAsIHdoaWNoIGlzIGl0c2VsZiBjYWxsZWQgdGhyb3VnaCBgbnRmc19jb21taXRfaW5vZGVgIHdpdGhpbiBgbnRmc19ldmljdF9iaWdfaW5vZGVgLiBUaGUga2V5IHBhcnQgb2YgdGhpcyBwYXRjaCBpcyB0aGUgYWRkaXRpb24gb2YgYSBjaGVjayBmb3IgYFNCX0FDVElWRWAgd2l0aGluIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAsIGFuZCByZXR1cm5pbmcgYC1FSU9gIGlmIGl0JiMzOTtzIG5vdCBzZXQuCgpUaGUgY29yZSBvZiBteSBhbmFseXNpcyBpcyB0cnlpbmcgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kICpob3cqIGl0IHByZXZlbnRzIGEgcG90ZW50aWFsIGRlYWRsb2NrLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gVGhlIHNjZW5hcmlvIGlzIHRoaXM6IHdlIG1vdW50IGFuIE5URlMgdm9sdW1lLCBkbyBzb21ldGhpbmcgdGhhdCBkaXJ0aWVzIHRoZSBydW5saXN0IG9mIGFuIGlub2RlIHdpdGggYW4gYXR0cmlidXRlIGxpc3QsIGFuZCB0aGVuIHVubW91bnQgaXQuIER1cmluZyB1bm1vdW50LCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAgY2xlYXJzIHRoZSBgU0JfQUNUSVZFYCBmbGFnLCB3aGljaCBpcyBjcnVjaWFsLiBUaGVuLCBgZXZpY3RfaW5vZGVzYCBnZXRzIGNhbGxlZCwga2lja2luZyBvZmYgdGhlIGlub2RlIGV2aWN0aW9uIHByb2Nlc3MuIFRoaXMgbGVhZHMgdG8gYG50ZnNfZXZpY3RfYmlnX2lub2RlYCwgd2hpY2ggY2FsbHMgYG50ZnNfY29tbWl0X2lub2RlYCwgd2hpY2ggY2FsbHMgYF9fbnRmc193cml0ZV9pbm9kZWAuIFRoaXMgdGhlbiBjYWxscyBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCBhbmQgKnRoYXQqIGNhbGxzIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAuCgpUaGUgcG90ZW50aWFsIGlzc3VlIGlzIHdpdGhpbiBgbnRmc19hdHRybGlzdF91cGRhdGVgIGl0c2VsZi4gSXQgdHJpZXMgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgbGlzdCBpbm9kZSB1c2luZyBgbnRmc19hdHRyX2lnZXRgLiBOb3csIGBudGZzX2F0dHJfaWdldGAgY2FsbHMgYGlnZXQ1X2xvY2tlZGAuIEhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogaWYgdGhlIGlub2RlIGlzIGFscmVhZHkgYmVpbmcgZnJlZWQgKElfRlJFRUlORyksIGBpZ2V0NV9sb2NrZWRgIHdpbGwgd2FpdCBvbiBgX193YWl0X29uX2ZyZWVpbmdfaW5vZGVgLiBTaW5jZSB3ZSYjMzk7cmUgaW4gYGV2aWN0X2lub2Rlc2AgYW5kIGBTQl9BQ1RJVkVgIGlzIGNsZWFyZWQsIHdlIGNvdWxkIGJlIHdhaXRpbmcgb24gYW4gaW5vZGUgdGhhdCBpcyBzaW11bHRhbmVvdXNseSBiZWluZyBldmljdGVkLCBsZWFkaW5nIHRvIGEgZGVhZGxvY2suIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzIGJ5IHJldHVybmluZyBgLUVJT2AgaWYgYFNCX0FDVElWRWAgaXMgY2xlYXIgYmVmb3JlIGV2ZW4gYXR0ZW1wdGluZyB0byBnZXQgdGhlIGlub2RlLiBUaGlzIHByZXZlbnRzIHRoZSB3YWl0aW5nIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyBpcyBhIGNsZXZlciBhbmQgZnVuY3Rpb25hbCBmaXguCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgaW4gYGZzL250ZnMvYXR0cmxpc3QuY2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9hdHRybGlzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NDpcdGludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSlcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgaW5vZGUgKmF0dHJfdmk7XG4gIDU3Olx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaTtcbiAgNTg6XHRcdGludCBlcnI7XG4gIDU5Olx0XG4gIDYwOlx0XHQvKlxuICA2MTpcdFx0ICogZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpIGNsZWFycyBTQl9BQ1RJVkUgYmVmb3JlIGV2aWN0aW5nIGNhY2hlZFxuICA2MjpcdFx0ICogaW5vZGVzLiBEbyBub3QgbG9vayB1cCB0aGUgYXR0cmlidXRlLWxpc3QgaW5vZGUgYWZ0ZXIgU0JfQUNUSVZFIGhhc1xuICA2MzpcdFx0ICogYmVlbiBjbGVhcmVkOyBpdCBtYXkgYWxyZWFkeSBiZSBJX0ZSRUVJTkcsIGFuZCB3YWl0aW5nIG9uIGl0IGNhblxuICA2NDpcdFx0ICogc2VsZi1kZWFkbG9jay5cbiAgNjU6XHRcdCAqL1xuICA2NjpcdFx0aWYgKCEoVkZTX0koYmFzZV9uaSktXHUwMDNlaV9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9BQ1RJVkUpKVxuICA2NzpcdFx0XHRyZXR1cm4gLUVJTztcbiAgNjg6XHRcbiAgNjk6XHRcdGF0dHJfdmkgPSBudGZzX2F0dHJfaWdldChWRlNfSShiYXNlX25pKSwgQVRfQVRUUklCVVRFX0xJU1QsIEFUX1VOTkFNRUQsIDApO1xuICA3MDpcdFx0aWYgKElTX0VSUihhdHRyX3ZpKSkge1xuICA3MTpcdFx0XHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xuICA3MjpcdFx0XHRyZXR1cm4gZXJyO1xuICA3MzpcdFx0fVxuICA3NDpcdFx0YXR0cl9uaSA9IE5URlNfSShhdHRyX3ZpKTtcbiAgNzU6XHRcbiAgNzY6XHRcdGVyciA9IG50ZnNfYXR0cl90cnVuY2F0ZV9pKGF0dHJfbmksIGJhc2VfbmktXHUwMDNlYXR0cl9saXN0X3NpemUsIEhPTEVTX05PKTtcbiAgNzc6XHRcdGlmIChlcnIgPT0gLUVOT1NQQyBcdTAwMjZcdTAwMjYgYXR0cl9uaS1cdTAwM2VtZnRfbm8gPT0gRklMRV9NRlQpIHtcbiAgNzg6XHRcdFx0ZXJyID0gbnRmc19hdHRyX3RydW5jYXRlKGF0dHJfbmksIDApO1xuICA3OTpcdFx0XHRpZiAoZXJyIHx8IG50ZnNfYXR0cl90cnVuY2F0ZV9pKGF0dHJfbmksIGJhc2VfbmktXHUwMDNlYXR0cl9saXN0X3NpemUsIEhPTEVTX05PKSAhPSAwKSB7XG4gIDgwOlx0XHRcdFx0aXB1dChhdHRyX3ZpKTtcbiAgODE6XHRcdFx0XHRudGZzX2Vycm9yKGJhc2VfbmktXHUwMDNldm9sLVx1MDAzZXNiLFxuICA4MjpcdFx0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gdHJ1bmNhdGUgYXR0cmlidXRlIGxpc3Qgb2YgaW5vZGUgJSNsbHhcJiMzNDssXG4gIDgzOlx0XHRcdFx0XHRcdChsb25nIGxvbmcpYmFzZV9uaS1cdTAwM2VtZnRfbm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc4MAoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiA3MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE5URlMgRmlsZXN5c3RlbSBEZWFkbG9jayBGaXgqKgoKT2theSwgdGhpcyBwYXRjaCBpcyB0aGUgcmVhbCBkZWFsLCBmaXhpbmcgYSBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIuIFRoZSBjaGFuZ2VzIGFyZSBjbGVhcmx5IGZ1bmN0aW9uYWwgYW5kIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUuIE15IGFuYWx5c2lzIHBvaW50cyBkaXJlY3RseSB0byBhIGhpZ2ggZnV6emluZyB2YWx1ZTsgd2UmIzM5O3JlIGRlZmluaXRlbHkgbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIHRoZSBjcml0aWNhbCBwaWVjZTogaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgbnRmc19hdHRybGlzdF91cGRhdGVgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBmaXggYW5kIHNob3VsZCBiZSB0aGUgcHJpbWFyeSB0YXJnZXQuIFdlIGFsc28gaGF2ZSBgbnRmc19ldmljdF9iaWdfaW5vZGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBldmljdGlvbiBwcm9jZXNzIHdoZXJlIHRoZSBidWcgb2NjdXJzLiBUaGUgcGF0aCBhbHNvIGluY2x1ZGVzIGBudGZzX2NvbW1pdF9pbm9kZWAsIGBfX250ZnNfd3JpdGVfaW5vZGVgIGFuZCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCBidXQgbGV0JiMzOTtzIGluaXRpYWxseSBjb25jZW50cmF0ZSBvbiBgbnRmc19hdHRybGlzdF91cGRhdGVgIGFuZCBgbnRmc19ldmljdF9iaWdfaW5vZGVgLiBXaGlsZSBgbnRmc19ldmljdF9iaWdfaW5vZGVgIGlzIGNhbGxlZCBieSB0aGUgVkZTLCBpdCYjMzk7cyBzdGlsbCBjcnVjaWFsIHRvIGluY2x1ZGUsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGZhaWx1cmUgaXMgc2Vlbi4gVGhlIGZ1bmN0aW9ucyBgbnRmc19hdHRybGlzdF9lbnRyeV9hZGRgIGFuZCBgbnRmc19hdHRybGlzdF9lbnRyeV9ybWAgYWxzbyBjYWxsIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgc28gaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSB0aGVtIGFzIHdlbGwuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaW5jbHVkZSBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCB0b28uCgpBZnRlciBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSwgaXQmIzM5O3MgY29uZmlybWVkIHRoYXQgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBhbmQgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBhcmUgZ2xvYmFsIGZ1bmN0aW9ucywgZGVmaW5lZCBhbmQgZXhwb3J0ZWQsIHNvIGZ1enppbmcgYWNjZXNzIGlzIHN0cmFpZ2h0IGZvcndhcmQuCgpJJiMzOTttIGNvbmZpZGVudCB3ZSBoYXZlIHRoZSByaWdodCBmb2N1cy4gVGhlIGV2aWN0aW9uIHByb2Nlc3MgaXMga2V5IGhlcmUgYW5kIHRoYXQgaXMgdGhlIHNjb3BlIG9mIGJvdGggYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBhbmQgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCwgYW5kIHdlIG11c3Qgbm90IGZvcmdldCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYC4KCkxldCYjMzk7cyB2ZXJpZnkgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLiBBZnRlciBkb3VibGUtY2hlY2tpbmcgYGZzL250ZnMvS2NvbmZpZ2AsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIG9ubHkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gaXMgYE5URlNfRlNgLiBXaGlsZSBgTlRGU19GU19QT1NJWF9BQ0xgIGlzIGF2YWlsYWJsZSwgYE5URlNfRlNgIGlzIHN1ZmZpY2llbnQgYW5kIHdlIHNob3VsZG4mIzM5O3QgaW50cm9kdWNlIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuCgpTdW1tYXJpemluZyB0aGUgcmVxdWlyZW1lbnRzOgoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCiogICBgRm9jdXNTeW1ib2xzOiBbJiMzNDtudGZzX2F0dHJsaXN0X3VwZGF0ZSYjMzQ7LCAmIzM0O250ZnNfZXZpY3RfYmlnX2lub2RlJiMzNDssICYjMzQ7bnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzJiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O05URlNfRlMmIzM0O11gCiogICBgUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBOVEZTIGRyaXZlciBkdXJpbmcgdW5tb3VudC9ldmljdGlvbiBieSBjaGVja2luZyBTQl9BQ1RJVkUgaW4gbnRmc19hdHRybGlzdF91cGRhdGUuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgaW4gdGhlIE5URlMgZmlsZXN5c3RlbS4mIzM0O2AKCk5vdywgbGV0JiMzOTtzIHdyaXRlIHRoaXMgdXAgYW5kIGdldCBpdCBpbnRvIHRoZSBmdXp6aW5nIGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfYXR0cmxpc3RfdXBkYXRlJiMzNDssCiAgICAmIzM0O250ZnNfZXZpY3RfYmlnX2lub2RlJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfYXR0cmxpc3RfdXBkYXRlJiMzNDssCiAgICAmIzM0O250ZnNfZXZpY3RfYmlnX2lub2RlJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjI2LjIwMDU1OTEyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDE1NTQwMTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRybGlzdF91cGRhdGVcIixcbiAgICBcIm50ZnNfZXZpY3RfYmlnX2lub2RlXCIsXG4gICAgXCJudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6MjYuMjAwNTY2OTQ2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIwMTYwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODI1ODkwNGI3Y2I5OTIxZTBkN2Q2MzEzZDdjYmUwNjI1NTU0MDU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDYgMDQ6MjU6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRybGlzdC5jIGIvZnMvbnRmcy9hdHRybGlzdC5jXFxuaW5kZXggYWZiMTMwMzhiYTQyNWYuLmJlMzA4NmQzNDMzODE2IDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvYXR0cmxpc3QuY1xcbisrKyBiL2ZzL250ZnMvYXR0cmxpc3QuY1xcbkBAIC01Nyw2ICs1NywxNSBAQCBpbnQgbnRmc19hdHRybGlzdF91cGRhdGUoc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkpXFxuIFxcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpIGNsZWFycyBTQl9BQ1RJVkUgYmVmb3JlIGV2aWN0aW5nIGNhY2hlZFxcbitcXHQgKiBpbm9kZXMuIERvIG5vdCBsb29rIHVwIHRoZSBhdHRyaWJ1dGUtbGlzdCBpbm9kZSBhZnRlciBTQl9BQ1RJVkUgaGFzXFxuK1xcdCAqIGJlZW4gY2xlYXJlZDsgaXQgbWF5IGFscmVhZHkgYmUgSV9GUkVFSU5HLCBhbmQgd2FpdGluZyBvbiBpdCBjYW5cXG4rXFx0ICogc2VsZi1kZWFkbG9jay5cXG4rXFx0ICovXFxuK1xcdGlmICghKFZGU19JKGJhc2VfbmkpLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgU0JfQUNUSVZFKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbiBcXHRhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0koYmFzZV9uaSksIEFUX0FUVFJJQlVURV9MSVNULCBBVF9VTk5BTUVELCAwKTtcXG4gXFx0aWYgKElTX0VSUihhdHRyX3ZpKSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNToyNi42NjM1OTQ1NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MzY5MjM1Mjc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRybGlzdF91cGRhdGVcIixcbiAgICBcIm50ZnNfZXZpY3RfYmlnX2lub2RlXCIsXG4gICAgXCJudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmODI1ODkwNGI3Y2I5OTIxZTBkN2Q2MzEzZDdjYmUwNjI1NTU0MDU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAwNDoyNToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmxpc3QuYyBiL2ZzL250ZnMvYXR0cmxpc3QuY1xuaW5kZXggYWZiMTMwMzhiYTQyNWYuLmJlMzA4NmQzNDMzODE2IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9hdHRybGlzdC5jXG4rKysgYi9mcy9udGZzL2F0dHJsaXN0LmNcbkBAIC01Nyw2ICs1NywxNSBAQCBpbnQgbnRmc19hdHRybGlzdF91cGRhdGUoc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkpXG4gXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaTtcbiBcdGludCBlcnI7XG4gXG4rXHQvKlxuK1x0ICogZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpIGNsZWFycyBTQl9BQ1RJVkUgYmVmb3JlIGV2aWN0aW5nIGNhY2hlZFxuK1x0ICogaW5vZGVzLiBEbyBub3QgbG9vayB1cCB0aGUgYXR0cmlidXRlLWxpc3QgaW5vZGUgYWZ0ZXIgU0JfQUNUSVZFIGhhc1xuK1x0ICogYmVlbiBjbGVhcmVkOyBpdCBtYXkgYWxyZWFkeSBiZSBJX0ZSRUVJTkcsIGFuZCB3YWl0aW5nIG9uIGl0IGNhblxuK1x0ICogc2VsZi1kZWFkbG9jay5cbitcdCAqL1xuK1x0aWYgKCEoVkZTX0koYmFzZV9uaSktXHUwMDNlaV9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9BQ1RJVkUpKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbiBcdGF0dHJfdmkgPSBudGZzX2F0dHJfaWdldChWRlNfSShiYXNlX25pKSwgQVRfQVRUUklCVVRFX0xJU1QsIEFUX1VOTkFNRUQsIDApO1xuIFx0aWYgKElTX0VSUihhdHRyX3ZpKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6MjYuNjYzNTk3MTE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyNjEzMjA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGaWxlIFN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL250ZnMvYXR0cmxpc3QuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiBgbnRmc19hdHRybGlzdF91cGRhdGUoKWAuIFNwZWNpZmljYWxseSwgdGhpcyBiaXQ6XG5gYGBjXG5cdGlmICghKFZGU19JKGJhc2VfbmkpLVx1MDAzZWlfc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfQUNUSVZFKSlcblx0XHRyZXR1cm4gLUVJTztcbmBgYFxuVGhhdCdzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIExldCdzIGRpZyBpbnRvIHRoYXQgYGZzL250ZnMvYXR0cmxpc3QuY2AgZmlsZSBhbmQgdGhlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgZnVuY3Rpb24gaXRzZWxmIHRvIHNlZSB0aGUgY29udGV4dC5cblxuUmlnaHQsIHRoZSBwYXRoIGlzIGBmcy9udGZzL2F0dHJsaXN0LmNgLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgTlRGUyBpcyBhY3R1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQncyBnYXRpbmcgdGhpcy4gSSdtIHVzdWFsbHkgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgYE5URlNfRlNgLCBidXQgb2YgY291cnNlLCB0aGVyZSdzIGFsd2F5cyBgTlRGUzNfRlNgIGluIGBmcy9udGZzMy9gLCBzbyBJIGhhdmUgdG8gYmUgY2FyZWZ1bCB0aGF0IHRoaXMgaXMgdGhlIGNsYXNzaWMgTlRGUy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZSBpbiBgZnMvbnRmcy9gIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6MzEuMTg5NzMzNTExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDgwMTIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXFxuLS1cXG5mcy9udGZzL0tjb25maWctMzQtXFxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNTozMS4zMjA1NDA3ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDAyOTQzODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBOVEZTX0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gQnV0IGhvbGQgb24sIHdhc24ndCB0aGF0IHRoZSAqb2xkKiBOVEZTIGRyaXZlcj8gRGlkbid0IHdlIG1vdmUgb24gdG8gYE5URlMzX0ZTYCBhIHdoaWxlIGJhY2s/IEkgdGhvdWdodCBgTlRGU19GU2Agd2FzIGVpdGhlciByZW1vdmVkIG9yIGF0IGxlYXN0IGhlYXZpbHkgZGVwcmVjYXRlZCBhdCB0aGlzIHBvaW50LiBKdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZmlsZXN5c3RlbSBkcml2ZXJzLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5IHRvIGNvbmZpcm0uIEkgc2hvdWxkIHNlZSBpZiB0aGUgYGZzL250ZnMvYCBkaXJlY3RvcnkgaXMgc3RpbGwgcHJlc2VudC4gVGhhdCB3aWxsIHRlbGwgdGhlIHRhbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNTozNC4zMjM0ODcwMDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImZzL250ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYW9wcy5jXCIsXG4gICAgXCJhdHRyaWIuY1wiLFxuICAgIFwiYXR0cmliLmhcIixcbiAgICBcImF0dHJsaXN0LmNcIixcbiAgICBcImF0dHJsaXN0LmhcIixcbiAgICBcImJkZXYtaW8uY1wiLFxuICAgIFwiYml0bWFwLmNcIixcbiAgICBcImJpdG1hcC5oXCIsXG4gICAgXCJjb2xsYXRlLmNcIixcbiAgICBcImNvbGxhdGUuaFwiLFxuICAgIFwiY29tcHJlc3MuY1wiLFxuICAgIFwiZGVidWcuY1wiLFxuICAgIFwiZGVidWcuaFwiLFxuICAgIFwiZGlyLmNcIixcbiAgICBcImRpci5oXCIsXG4gICAgXCJlYS5jXCIsXG4gICAgXCJlYS5oXCIsXG4gICAgXCJmaWxlLmNcIixcbiAgICBcImluZGV4LmNcIixcbiAgICBcImluZGV4LmhcIixcbiAgICBcImlub2RlLmNcIixcbiAgICBcImlub2RlLmhcIixcbiAgICBcImlvbWFwLmNcIixcbiAgICBcImlvbWFwLmhcIixcbiAgICBcImxheW91dC5oXCIsXG4gICAgXCJsY25hbGxvYy5jXCIsXG4gICAgXCJsY25hbGxvYy5oXCIsXG4gICAgXCJsb2dmaWxlLmNcIixcbiAgICBcImxvZ2ZpbGUuaFwiLFxuICAgIFwibWFsbG9jLmhcIixcbiAgICBcIm1mdC5jXCIsXG4gICAgXCJtZnQuaFwiLFxuICAgIFwibXN0LmNcIixcbiAgICBcIm5hbWVpLmNcIixcbiAgICBcIm50ZnMuaFwiLFxuICAgIFwib2JqZWN0X2lkLmNcIixcbiAgICBcIm9iamVjdF9pZC5oXCIsXG4gICAgXCJyZXBhcnNlLmNcIixcbiAgICBcInJlcGFyc2UuaFwiLFxuICAgIFwicnVubGlzdC5jXCIsXG4gICAgXCJydW5saXN0LmhcIixcbiAgICBcInN1cGVyLmNcIixcbiAgICBcInN5c2N0bC5jXCIsXG4gICAgXCJzeXNjdGwuaFwiLFxuICAgIFwidGltZS5oXCIsXG4gICAgXCJ1bmlzdHIuY1wiLFxuICAgIFwidXBjYXNlLmNcIixcbiAgICBcInZvbHVtZS5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjM0LjMyMzYxMDgwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODA2OTU1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpcm1pbmcgRXhpc3RlbmNlIGFuZCBEaXZpbmcgSW4qKlxuXG5ZZXAsIGl0J3MgZGVmaW5pdGVseSBhIHJlYWwgdGhpbmcuIE9rYXksIEknbSB0aGlua2luZywgbGV0J3MgZ2V0IHJpZ2h0IHRvIGl0LiBUaGUgcGxhY2UgdG8gc3RhcnQgcG9raW5nIGFyb3VuZCBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGlzIGdvaW5nIHRvIGJlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgaW4gYGZzL250ZnMvYXR0cmxpc3QuY2AuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgYW55IGF0dHJpYnV0ZSBsaXN0IHVwZGF0ZSBsb2dpYyByZXNpZGVzLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNTozNi45MDQzMDg5OTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMzA1NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfYXR0cmxpc3RfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvYXR0cmliLmM9MzU0MT1zdGF0aWMgaW50IG50ZnNfYXR0cl91cGRhdGVfbWV0YShzdHJ1Y3QgYXR0cl9yZWNvcmQgKmEsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMzU5MC1cXG5mcy9udGZzL2F0dHJpYi5jOjM1OTE6XFx0XFx0XFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XFxuZnMvbnRmcy9hdHRyaWIuYy0zNTkyLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTM2ODA9aW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMzgxNi1cXHRcXHRcXHRcXHR9XFxuZnMvbnRmcy9hdHRyaWIuYzozODE3OlxcdFxcdFxcdFxcdGlmIChudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKSlcXG5mcy9udGZzL2F0dHJpYi5jLTM4MTgtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTM4NTYtXFx0XFx0XFx0Y3R4LVxcdTAwM2VhbF9lbnRyeS1cXHUwMDNlbG93ZXN0X3ZjbiA9IGNwdV90b19sZTY0KHN0b3BfdmNuKTtcXG5mcy9udGZzL2F0dHJpYi5jOjM4NTc6XFx0XFx0XFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XFxuZnMvbnRmcy9hdHRyaWIuYy0zODU4LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTQ1OTU9c3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDc1Mi1cXHRcXHR9XFxuZnMvbnRmcy9hdHRyaWIuYzo0NzUzOlxcdFxcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xcbmZzL250ZnMvYXR0cmliLmMtNDc1NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy00ODA4LVxcbmZzL250ZnMvYXR0cmliLmM6NDgwOTpcXHRlcnIgPSBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTtcXG5mcy9udGZzL2F0dHJpYi5jLTQ4MTAtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0LmM9MjU9aW50IG50ZnNfYXR0cmxpc3RfbmVlZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0LmMtNTMtXFxuZnMvbnRmcy9hdHRybGlzdC5jOjU0OmludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSlcXG5mcy9udGZzL2F0dHJsaXN0LmMtNTUte1xcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jPTEyMT1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0LmMtMjM1LVxcbmZzL250ZnMvYXR0cmxpc3QuYzoyMzY6XFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUobmkpO1xcbmZzL250ZnMvYXR0cmxpc3QuYy0yMzctXFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jPTI1Nz1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG4tLVxcbmZzL250ZnMvYXR0cmxpc3QuYy0zMDAtXFxuZnMvbnRmcy9hdHRybGlzdC5jOjMwMTpcXHRyZXR1cm4gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XFxuZnMvbnRmcy9hdHRybGlzdC5jLTMwMi19XFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0Lmg9MTc9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xcbmZzL250ZnMvYXR0cmxpc3QuaDoxODppbnQgbnRmc19hdHRybGlzdF91cGRhdGUoc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkpO1xcbmZzL250ZnMvYXR0cmxpc3QuaC0xOS1cXG4tLVxcbmZzL250ZnMvaW5kZXguYz0xMjM2PXN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTM0MC1cXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShjdHgtXFx1MDAzZWF0dHItXFx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKSkpIHtcXG5mcy9udGZzL2luZGV4LmM6MTM0MTpcXHRcXHRcXHRpZiAobnRmc19hdHRybGlzdF91cGRhdGUoY3R4LVxcdTAwM2ViYXNlX250ZnNfaW5vID9cXG5mcy9udGZzL2luZGV4LmMtMTM0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgY3R4LVxcdTAwM2ViYXNlX250ZnNfaW5vIDogY3R4LVxcdTAwM2VudGZzX2lubykpXFxuLS1cXG5mcy9udGZzL2lub2RlLmM9MzAzMT1pbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTMxMzktXFxuZnMvbnRmcy9pbm9kZS5jOjMxNDA6XFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUobmkpO1xcbmZzL250ZnMvaW5vZGUuYy0zMTQxLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNTozNy4zMzU2MjE2NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYwMDk3OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBBdHRyaWJ1dGUgTGlzdCBVcGRhdGUqKlxuXG5Pa2F5LCBzbyB0aGUgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBmdW5jdGlvbiwgaW50ZXJlc3RpbmcuIEl0J3MgdXNlZCBhbGwgb3ZlciB0aGUgTlRGUyBmaWxlc3lzdGVtIGNvZGUg4oCTIGBhdHRyaWIuY2AsIGBhdHRybGlzdC5jYCwgYGluZGV4LmNgLCBhbmQgYGlub2RlLmNgLiBUaGF0IG1lYW5zIGl0J3MgcHJldHR5IGZ1bmRhbWVudGFsIHRvIHRoZSB3YXkgTlRGUyBtYW5hZ2VzIGl0cyBhdHRyaWJ1dGVzLiBUaGlzIHBhdGNoLCBhaCwgaXQgYWRkcyBhIGNoZWNrIGZvciBgU0JfQUNUSVZFYCB3aXRoaW4gdGhlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgZnVuY3Rpb24uIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiwgZGVmaW5pdGVseSBjaGFuZ2luZyBob3cgdGhpcyB1cGRhdGUgb3BlcmF0aW9uIGJlaGF2ZXMgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBOb3csIHRoZSBjb250ZXh0IGlzIE5URlMsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGBOVEZTX0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdhaXQsIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IElzIGBOVEZTX1JXYCBhbHNvIHJlbGV2YW50PyBCZXN0IHRvIGRvdWJsZS1jaGVjayB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZSBhbmQgbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIGltcGFjdHMuIE5lZWQgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCAqYWxsKiByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjQxLjA5NTcyMjA5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNTkyNTA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjQxLjIyNzMyMjE2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzA0MjAwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipIdW50aW5nIERvd24gUmVhZC9Xcml0ZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHJlYWQvd3JpdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBmb3IgdGhlIE5URlMgZmlsZXN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgaXMgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSdkIGJlIHN1cnByaXNlZCBpZiBpdCB3YXNuJ3QgdGhlcmUuIExldCdzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGBSV2Agb3IgaXRzIGVxdWl2YWxlbnQgaXMgZGVmaW5lZCBhcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgYGNvbmZpZ2Agb3B0aW9uIG9yIHNvbWUgb3RoZXIgdmFyaWFibGUgdGhhdCBJIGNhbiB0d2VhaywgbWF5YmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19OVEZTX1JXYCwgb3IgYSByZWxhdGVkIHN5bWJvbC4gVGltZSB0byBjaGVjayBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjQzLjkzMTUyNDM5OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NjAyOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEZTX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTEyLVxcbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xcbmZzL250ZnMvS2NvbmZpZy0xNC1cXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NDQuMDM3MTM0MTk1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDU3NjIwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5URlMgUmVhZC9Xcml0ZSBTdXBwb3J0KipcblxuSG9sZCBvbiBhIHNlY29uZC4uLiBkaWRuJ3QgSSByZW1lbWJlciBzZWVpbmcgYW4gYE5URlNfUldgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNvbWV3aGVyZT8gSSB3YXMgY2VydGFpbiB3ZSBoYWQgYSBkZWRpY2F0ZWQgZmxhZyBmb3IgcmVhZC93cml0ZSBjYXBhYmlsaXR5LCBub3QganVzdCByZWFkLW9ubHkuIEJldHRlciB2ZXJpZnkgdGhhdC4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSBpdCdzIGRlZmluZWQgd2l0aGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0ncyBLY29uZmlnIGZpbGUuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbmZpcm0gYW5kIGVuc3VyZSBpdOKAmXMgZW5hYmxlZCwgdW5kZXIgdGhlIGBmcy9udGZzL0tjb25maWdgIHBhdGguIExldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZCByZWdhcmRpbmcgYFJXYCBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjM0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NDcuMDQyODk4NjgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3MjYwODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJXXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NDcuMTQzNjMyOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQ5Mjk5NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTlRGUyBXcml0ZSBJbXBsZW1lbnRhdGlvbiBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaW4gdGFja2xpbmcgdGhpcyB3cml0ZSBmdW5jdGlvbmFsaXR5IHF1ZXN0aW9uIGluIHRoZSBOVEZTIG1vZHVsZSBpcyBwcmV0dHkgY2xlYXIgdG8gbWU6IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoYXQgdGhlIHJlbGV2YW50IHNldHRpbmdzIHdpbGwgbGlrZWx5IGJlIGZvdW5kIGluIHRoZSBgZnMvbnRmcy9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIGFueXRoaW5nIHJlbGF0ZWQgdG8gXCJ3cml0ZVwiIGNhcGFiaWxpdHkuIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25maWd1cmF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIG9yIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBzaGVkIGxpZ2h0IG9uIGhvdyB3cml0ZSBzdXBwb3J0IGlzIGNvbnRyb2xsZWQgYW5kIGVuYWJsZWQgd2l0aGluIHRoZSBkcml2ZXIuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgZm9yIGV4YW1pbmluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgd2hpY2ggc2hvdWxkIHJldmVhbCB0aGUgY29uZGl0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIGhvdyB3cml0ZSBzdXBwb3J0IGlzIGNvbXBpbGVkIGludG8gdGhlIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjQ5Ljg5MjkzNTQ1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5MTE2OTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NDkuOTg4ODU2MjM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTQ3NTAyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqSW52ZXN0aWdhdGluZyBOVEZTIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkhtbSwgc28gbG9va2luZyBhdCBgZnMvbnRmcy9LY29uZmlnYCAqbm93KiwgYWxsIEkgc2VlIGFyZSBgTlRGU19GU2AsIGBOVEZTX0RFQlVHYCwgYW5kIGBOVEZTX0ZTX1BPU0lYX0FDTGAuIFRoYXQncyBpdD8gSSdtIHN1cmUgSSd2ZSBzZWVuIG1vcmUgb3B0aW9ucyByZWxhdGVkIHRvIE5URlMgYXQgc29tZSBwb2ludC4gSXQncyBib3RoZXJpbmcgbWUuLi4gV2FpdCwgSSB2YWd1ZWx5IHJlY2FsbCBhbiBgTlRGU19SV2Agb3B0aW9uIGluIHRoZSBwYXN0LCBtYXliZSBpbiBhbiBvbGRlciBrZXJuZWwgdmVyc2lvbidzIEtjb25maWc/IERpZCBpdCBnZXQgcmVtb3ZlZD8gVGhhdCdzIHdoYXQgSSB3YW50IHRvIGtub3cuIE9rYXksIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gYGZzL250ZnMvS2NvbmZpZ2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5LCBjb25maXJtIHdoYXQncyB0aGVyZSBhbmQgd2hhdCdzIG1pc3NpbmcsIGFuZCBzZWUgaWYgSSBjYW4gZmlndXJlIG91dCB3aGF0IGhhcHBlbmVkIHdpdGggdGhhdCBgTlRGU19SV2Agc2V0dGluZy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2ODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNTo1My4yMDM2MTAwNTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBOVEZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDU6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cXG4gICA4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICAxMTpcXHRcXHQgIG50ZnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBOVEZTX0RFQlVHXFxuICAxNDpcXHRcXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBOVEZTIGZpbGUgc3lzdGVtLCBzYXlcXG4gIDE4OlxcdFxcdCAgWSBoZXJlLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBiZVxcbiAgMTk6XFx0XFx0ICBwZXJmb3JtZWQgYnkgdGhlIGRyaXZlciBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzIHRvXFxuICAyMDpcXHRcXHQgIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbSBsb2cuICBOb3RlIHRoYXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZVxcbiAgMjE6XFx0XFx0ICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVG8gZW5hYmxlIHRoZW0sIHN1cHBseSB0aGUgb3B0aW9uIGRlYnVnX21zZ3M9MVxcbiAgMjI6XFx0XFx0ICBhdCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB3aGVuIGJvb3RpbmcgdGhlIGtlcm5lbCBvciBhcyBhbiBvcHRpb25cXG4gIDIzOlxcdFxcdCAgdG8gaW5zbW9kIHdoZW4gbG9hZGluZyB0aGUgbnRmcyBtb2R1bGUuICBPbmNlIHRoZSBkcml2ZXIgaXMgYWN0aXZlLFxcbiAgMjQ6XFx0XFx0ICB5b3UgY2FuIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYnkgZG9pbmcgKGFzIHJvb3QpOlxcbiAgMjU6XFx0XFx0ICBlY2hvIDEgXFx1MDAzZSAvcHJvYy9zeXMvZnMvbnRmcy1kZWJ1Z1xcbiAgMjY6XFx0XFx0ICBSZXBsYWNpbmcgdGhlIFxcXCIxXFxcIiB3aXRoIFxcXCIwXFxcIiB3b3VsZCBkaXNhYmxlIGRlYnVnIG1lc3NhZ2VzLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIElmIHlvdSBsZWF2ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgZGlzYWJsZWQsIHRoaXMgcmVzdWx0cyBpbiBsaXR0bGVcXG4gIDI5OlxcdFxcdCAgb3ZlcmhlYWQsIGJ1dCBlbmFibGluZyBkZWJ1ZyBtZXNzYWdlcyByZXN1bHRzIGluIHZlcnkgc2lnbmlmaWNhbnRcXG4gIDMwOlxcdFxcdCAgc2xvd2Rvd24gb2YgdGhlIHN5c3RlbS5cXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBXaGVuIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mXFxuICAzMzpcXHRcXHQgIGRlYnVnZ2luZyBtZXNzYWdlcyB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gTlRGU19GU1xcbiAgMzg6XFx0XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbiAgMzk6XFx0XFx0aGVscFxcbiAgNDA6XFx0XFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcXG4gIDQxOlxcdFxcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBBQ0wgc3VwcG9ydCBmb3IgbnRmcywgcHJvdmlkaW5nIGZ1bmN0aW9uYWwgcGFyaXR5XFxuICA0NDpcXHRcXHQgIHdpdGggbnRmczMgZHJpdmllci5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBOT1RFOiB0aGlzIGlzIGxpbnV4IG9ubHkgZmVhdHVyZS4gV2luZG93cyB3aWxsIGlnbm9yZSB0aGVzZSBBQ0xzLlxcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NTMuMjAzNzQ5NDQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODMxMDIyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVtb3ZhbCBvZiBOVEZTIFdyaXRlIFN1cHBvcnQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBOVEZTX1JXYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIG9uZSB0aGF0IGVuYWJsZWQgd3JpdGUgc3VwcG9ydCBmb3IgTlRGUywgd2FzIHJlbW92ZWQgYXQgc29tZSBwb2ludC4gSSB2YWd1ZWx5IHJlbWVtYmVyIGEgY29tbWl0IHJlbGF0ZWQgdG8gcmVtb3ZpbmcgTlRGUyB3cml0ZSBzdXBwb3J0LCBzb21ldGhpbmcgbGlrZSBgYTQ2MDQ0YTgwNzExYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIEkgdGhpbmsgdGhhdOKAmXMgd2hhdCBkaWQgaXQuIEp1c3QgdG8gY29uZmlybSwgbGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIE1ha2VmaWxlIGZvciB0aGUgTlRGUyBmaWxlIHN5c3RlbSBzaG91bGQgY29udGFpbiB0aGUga2V5IHRvIHVubG9jayB3aGF0IGhhcHBlbmVkLiBTbyBsZXQncyBnbyBjaGVjayB0aGUgYGZzL250ZnMvTWFrZWZpbGVgIHRvIHZlcmlmeSB0aGlzIHRoZW9yeSwgYW5kIGNvbmZpcm0gd2hhdCB0aGUgY29tbWl0IGRpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcxMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NTYuNTg2ODU3Njc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLSQoQ09ORklHX05URlNfRlMpICs9IG50ZnMub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRudGZzLXkgOj0gYW9wcy5vIGF0dHJpYi5vIGNvbGxhdGUubyBkaXIubyBmaWxlLm8gaW5kZXgubyBpbm9kZS5vIFxcXFxcXG4gICA2OlxcdFxcdCAgbWZ0Lm8gbXN0Lm8gbmFtZWkubyBydW5saXN0Lm8gc3VwZXIubyB1bmlzdHIubyBhdHRybGlzdC5vIGVhLm8gXFxcXFxcbiAgIDc6XFx0XFx0ICB1cGNhc2UubyBiaXRtYXAubyBsY25hbGxvYy5vIGxvZ2ZpbGUubyByZXBhcnNlLm8gY29tcHJlc3MubyBcXFxcXFxuICAgODpcXHRcXHQgIGlvbWFwLm8gZGVidWcubyBzeXNjdGwubyBvYmplY3RfaWQubyBiZGV2LWlvLm9cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y2NmbGFncy0kKENPTkZJR19OVEZTX0RFQlVHKSArPSAtRERFQlVHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjU2LjU4Njk5MjE3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDkxNjUwOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5URlMgS2VybmVsIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgTlRGU19GU2AgY29uZmlnIG9wdGlvbiDigJMgbG9va3MgbGlrZSB0aGF0J3MgdGhlIGtleS4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmN0aW9uIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAuIERlZmluaXRlbHkgc2VlbXMgcmVhY2hhYmxlIGlmIEknbSBtb3VudGluZyBhbiBOVEZTIGZpbGVzeXN0ZW0gYW5kIHBva2luZyBhcm91bmQsIGRvaW5nIHNvbWUgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIHRyaWdnZXIgaXQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IG9wZXJhdGlvbnMgKnNwZWNpZmljYWxseSogdHJpZ2dlciBgbnRmc19hdHRybGlzdF91cGRhdGVgP1xuXG5Pa2F5LCBkaWdnaW5nIGlu4oCmIGl0J3Mgd2hlbiB0aGUgYXR0cmlidXRlIGxpc3QgbmVlZHMgYSByZWZyZXNoLCBzbyBhZGRpbmcsIHJlbW92aW5nLCBvciByZXNpemluZyBhdHRyaWJ1dGVzLiBUaGF0IG1ha2VzIHNlbnNlLiBOb3csIHdhc24ndCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgd3JpdGUgc3VwcG9ydCBiZWluZyByZW1vdmVkPyBPciB3YXMgdGhhdCBqdXN0IGZvciBhIHNwZWNpZmljIHZlcnNpb24/IEhtbSwgKmNoZWNrcyBmaWxlcyrigKYgYGFvcHMuY2AsIGBmaWxlLmNgLCBhbmQgYGlub2RlLmNgIGFyZSBhbGwgaGVyZS4gU28sIHRoZSBiYXNlIGZ1bmN0aW9uYWxpdHkgaXMgc3RpbGwgdGhlcmUuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiB3cml0ZSBzdXBwb3J0ICppcyogYWN0dWFsbHkgZ29uZSwgb3IgaWYgdGhpcyBpcyBhbiBpc3N1ZSBvZiBkZWdyZWUuXG5cbldhaXQgYSBzZWNvbmTigKYgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpcyBkaXJlY3RseSBjYWxsZWQgYnkgYG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkYCwgYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gLCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCwgYW5kIGBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplYC4gVGhvc2UgYXJlIGFsbCwgaWYgSSdtIHJlbWVtYmVyaW5nIGNvcnJlY3RseSwgd3JpdGUgb3BlcmF0aW9ucy4gSWYgd3JpdGUgc3VwcG9ydCAqd2FzKiByZW1vdmVkLCBob3cgYXJlIHRob3NlIGZ1bmN0aW9ucyBldmVuIGNhbGxhYmxlPyBTb21ldGhpbmcgZG9lc24ndCBhZGQgdXAuIEJlc3QgYmV0IGlzIHRvIGNoZWNrIHRoZSBtb3VudCBvcHRpb25zLiBJJ2xsIHBlZWsgYXQgYGZzL250ZnMvc3VwZXIuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYSByZWFkLXdyaXRlIG9wdGlvbiBhdmFpbGFibGUsIG9yIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgYXMgcmVhZC1vbmx5LiBUaGF0IHNob3VsZCBjbGVhciB0aGluZ3MgdXAgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjAxLjY3ODY0NjY0MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1ODk2NjU0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNU19SRE9OTFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjowMi4xMzQ1NjI1NjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NjEyMTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgU0JfUkRPTkxZYCoqXG5cbk9rYXksIHNvIEknbSBqdW1waW5nIHJpZ2h0IGludG8gY2hlY2tpbmcgYFNCX1JET05MWWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBmaWxlIHN5c3RlbSBmbGFncy4gR290dGEgbWFrZSBzdXJlIGl0J3MgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkuXCIgSSdtIGV4cGVjdGluZyB0aGlzIGlzIGFib3V0IGVuc3VyaW5nIHdlJ3JlIGFkaGVyaW5nIHRvIHJlYWQtb25seSBzZW1hbnRpY3MuIElmIGEgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCByZWFkLW9ubHksIHdlIGFic29sdXRlbHkgKmNhbm5vdCogYWxsb3cgd3JpdGUgb3BlcmF0aW9ucywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaXMgYWNjb3VudGluZyBmb3IgdGhpcy4gSSBuZWVkIHRvIGJlIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaGVyZSwgcGVybWlzc2lvbiBpc3N1ZXMsIGFuZCBob3cgdGhlIHByb2dyYW0gaXMgaGFuZGxpbmcgdmFyaW91cyBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgYW55IHBsYWNlcyB3aGVyZSB3cml0ZXMgbWlnaHQgYWNjaWRlbnRhbGx5IGJlIGF0dGVtcHRlZC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGNoZWNrIGZvciBzdWJ0bGUgZWRnZSBjYXNlcyB3aGVyZSByZWFkLW9ubHkgYmVoYXZpb3IgbWlnaHQgbm90IGJlIGVuZm9yY2VkIGFzIHN0cmljdGx5IGFzIGl0IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgxMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjA1LjY4MDY4NjcxMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5OTI0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0JfUkRPTkxZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjY1PXN0YXRpYyBpbnQgbnRmc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjg0LVxcdCAqL1xcbmZzL250ZnMvc3VwZXIuYzoyODU6XFx0aWYgKHNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgIShmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuZnMvbnRmcy9zdXBlci5jLTI4Ni1cXHRcXHRzdGF0aWMgY29uc3QgY2hhciAqZXMgPSBcXFwiLiAgQ2Fubm90IHJlbW91bnQgcmVhZC13cml0ZS5cXFwiO1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTMxMi1cXHRcXHR9XFxuZnMvbnRmcy9zdXBlci5jOjMxMzpcXHR9IGVsc2UgaWYgKCFzYl9yZG9ubHkoc2IpIFxcdTAwMjZcXHUwMDI2IChmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuZnMvbnRmcy9zdXBlci5jLTMxNC1cXHRcXHQvKiBSZW1vdW50aW5nIHJlYWQtb25seS4gKi9cXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0zMzM9dm9pZCBudGZzX2hhbmRsZV9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTM0MC1cXHRpZiAodm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MzQxOlxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMzQyLVxcdFxcdHByX2NyaXQoXFxcIihkZXZpY2UgJXMpOiBGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHlcXFxcblxcXCIsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MTM5OT1zdGF0aWMgYm9vbCBsb2FkX3N5c3RlbV9maWxlcyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNDE2LVxcbmZzL250ZnMvc3VwZXIuYzoxNDE3OlxcdFxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTQxOC1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXMuICBNb3VudGluZyByZWFkLW9ubHklc1xcXCIsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTU0Mi1cXHRcXHRpZiAoIXNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgdm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MTU0MzpcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuZnMvbnRmcy9zdXBlci5jLTE1NDQtXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIiVzLiAgTW91bnRpbmcgcmVhZC1vbmx5JXNcXFwiLCBlczEsIGVzMik7XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTU1OS1cXHRcXHRpZiAoIXNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgdm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MTU2MDpcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuZnMvbnRmcy9zdXBlci5jLTE1NjEtXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkZhaWxlZCB0byBsb2FkIExvZ0ZpbGUuIE1vdW50aW5nIHJlYWQtb25seS5cXFwiKTtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNTkxLVxcdFxcdGlmICghc2JfcmRvbmx5KHNiKSBcXHUwMDI2XFx1MDAyNiB2b2wtXFx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xcbmZzL250ZnMvc3VwZXIuYzoxNTkyOlxcdFxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTU5My1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXMuICBNb3VudGluZyByZWFkLW9ubHklc1xcXCIsIGVzMSwgZXMyKTtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNjA2LVxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCIlcy4gIE1vdW50aW5nIHJlYWQtb25seSVzXFxcIiwgZXMxLCBlczIpO1xcbmZzL250ZnMvc3VwZXIuYzoxNjA3OlxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTYwOC1cXHRcXHROVm9sU2V0RXJyb3JzKHZvbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjA1Ljc3MTcyMzExOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU4MDk3NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5URlMgV3JpdGUgU3VwcG9ydDogQSBLZXJuZWwgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggTlRGUyBhbmQgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWFkL3dyaXRlIGNhcGFiaWxpdGllcy4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQgKmNhbiogYmUgbW91bnRlZCByZWFkLXdyaXRlLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LiBCdXQgbGV0J3MgdmVyaWZ5IHRoaXMgdGhvcm91Z2hseTsgSSBuZWVkIHRvIGdldCB0aGlzIHJpZ2h0LiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBmcy9udGZzL0tjb25maWdgLiBSaWdodCwganVzdCBjb25maXJtaW5nLCBpdCdzIGp1c3QgYE5URlNfRlNgIHRoYXQncyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGl0ZW0/IE9rYXksIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBIb2xkIG9uLi4uIGRpZCBJIHJlYWQgc29tZXRoaW5nIGFib3V0IGBOVEZTX1JXYCBiZWluZyBkZXByZWNhdGVkIG9yIHJlbW92ZWQsIG1heWJlIGluIDIwMjQ/IFRoYXQncyBjb25jZXJuaW5nLCBsZXQncyBzZWUgd2hhdCB0aGUgY29tbWl0IGhpc3Rvcnkgc2F5cywgb3IgYXQgbGVhc3Qgc2VhcmNoIHRoZSBjb25maWcgZmlsZSBmb3IgYSBtZW50aW9uLiBJIGNhbid0IHVzZSBgZ2l0IGxvZ2AgaGVyZSwgYnV0IEkgY2FuIHVzZSBncmVwLCB3aGljaCBJJ3ZlIHVzZWQgYWxyZWFkeS4gT2gsIHJpZ2h0LCBJICpkaWQqIGdyZXAgZm9yIGBOVEZTX1JXYCwgYW5kIHRoZSByZXN1bHRzIHdlcmUgZW1wdHkuIFRoYXQncyBpbnRlcmVzdGluZywgc28gZWl0aGVyIGBOVEZTX0ZTYCBub3cgaW1wbGljaXRseSBpbmNsdWRlcyB3cml0ZSBzdXBwb3J0LCBvciB3cml0ZSBzdXBwb3J0IHdhcyBjb21wbGV0ZWx5IGRyb3BwZWQgYXQgc29tZSBwb2ludC4gSXQncyB0aW1lIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIhIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgd2hldGhlciBJIGNhbiB0cmFjZSBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyB3cml0ZSBvcGVyYXRpb25zLiBMZXQgbWUgc2VlIGlmIEkgY2FuIGZpbmQgaG93IHRoZSB1cGRhdGUgb2YgdGhlIGF0dHJpYnV0ZXMgbGlzdHMgYXJlIGhhbmRsZWQgYnkgc2VhcmNoaW5nIGlmIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgaXMgcmVhY2hhYmxlIHNvbWV3aGVyZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgd3JpdGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjoxMC4yMjk4MjIzOTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODUxNTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2F0dHJsaXN0X3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTM1NDE9c3RhdGljIGludCBudGZzX2F0dHJfdXBkYXRlX21ldGEoc3RydWN0IGF0dHJfcmVjb3JkICphLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTM1OTAtXFxuZnMvbnRmcy9hdHRyaWIuYzozNTkxOlxcdFxcdFxcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xcbmZzL250ZnMvYXR0cmliLmMtMzU5Mi1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz0zNjgwPWludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTM4MTYtXFx0XFx0XFx0XFx0fVxcbmZzL250ZnMvYXR0cmliLmM6MzgxNzpcXHRcXHRcXHRcXHRpZiAobnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSkpXFxuZnMvbnRmcy9hdHRyaWIuYy0zODE4LVxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0zODU2LVxcdFxcdFxcdGN0eC1cXHUwMDNlYWxfZW50cnktXFx1MDAzZWxvd2VzdF92Y24gPSBjcHVfdG9fbGU2NChzdG9wX3Zjbik7XFxuZnMvbnRmcy9hdHRyaWIuYzozODU3OlxcdFxcdFxcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xcbmZzL250ZnMvYXR0cmliLmMtMzg1OC1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz00NTk1PXN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpemUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTQ3NTItXFx0XFx0fVxcbmZzL250ZnMvYXR0cmliLmM6NDc1MzpcXHRcXHRlcnIgPSBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTtcXG5mcy9udGZzL2F0dHJpYi5jLTQ3NTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDgwOC1cXG5mcy9udGZzL2F0dHJpYi5jOjQ4MDk6XFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XFxuZnMvbnRmcy9hdHRyaWIuYy00ODEwLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jPTI1PWludCBudGZzX2F0dHJsaXN0X25lZWQoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jLTUzLVxcbmZzL250ZnMvYXR0cmxpc3QuYzo1NDppbnQgbnRmc19hdHRybGlzdF91cGRhdGUoc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkpXFxuZnMvbnRmcy9hdHRybGlzdC5jLTU1LXtcXG4tLVxcbmZzL250ZnMvYXR0cmxpc3QuYz0xMjE9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKVxcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jLTIzNS1cXG5mcy9udGZzL2F0dHJsaXN0LmM6MjM2OlxcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKG5pKTtcXG5mcy9udGZzL2F0dHJsaXN0LmMtMjM3LVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmxpc3QuYz0yNTc9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0LmMtMzAwLVxcbmZzL250ZnMvYXR0cmxpc3QuYzozMDE6XFx0cmV0dXJuIG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xcbmZzL250ZnMvYXR0cmxpc3QuYy0zMDItfVxcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5oPTE3PWludCBudGZzX2F0dHJsaXN0X2VudHJ5X3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KTtcXG5mcy9udGZzL2F0dHJsaXN0Lmg6MTg6aW50IG50ZnNfYXR0cmxpc3RfdXBkYXRlKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pKTtcXG5mcy9udGZzL2F0dHJsaXN0LmgtMTktXFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTIzNj1zdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEzNDAtXFx0XFx0XFx0XFx0bGUzMl90b19jcHUoY3R4LVxcdTAwM2VhdHRyLVxcdTAwM2VkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCkpKSB7XFxuZnMvbnRmcy9pbmRleC5jOjEzNDE6XFx0XFx0XFx0aWYgKG50ZnNfYXR0cmxpc3RfdXBkYXRlKGN0eC1cXHUwMDNlYmFzZV9udGZzX2lubyA/XFxuZnMvbnRmcy9pbmRleC5jLTEzNDItXFx0XFx0XFx0XFx0XFx0XFx0IGN0eC1cXHUwMDNlYmFzZV9udGZzX2lubyA6IGN0eC1cXHUwMDNlbnRmc19pbm8pKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jPTMwMzE9aW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0zMTM5LVxcbmZzL250ZnMvaW5vZGUuYzozMTQwOlxcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKG5pKTtcXG5mcy9udGZzL2lub2RlLmMtMzE0MS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6MTAuMzM4MzQzNzQ5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzgwNzQ5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKlRyYWNpbmcgdGhlIE5URlMgQXR0cmlidXRlIFVwZGF0ZSBQYXRoKipcblxuSG1tLCBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgbnRmc19hdHRybGlzdF91cGRhdGVgIGdldHMgaW52b2tlZCBkaXJlY3RseSBmcm9tIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSAqdGhhdCogZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20uIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCB3aHkgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpcyBiZWluZyB0cmlnZ2VyZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzIHNob3VsZCBoZWxwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjEzLjQ3NjQyMzE4M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNjYyMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTM1NDE9c3RhdGljIGludCBudGZzX2F0dHJfdXBkYXRlX21ldGEoc3RydWN0IGF0dHJfcmVjb3JkICphLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTM2NjctLypcXG5mcy9udGZzL2F0dHJpYi5jOjM2Njg6ICogbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzIC0gdXBkYXRlIG1hcHBpbmcgcGFpcnMgZm9yIG50ZnMgYXR0cmlidXRlXFxuZnMvbnRmcy9hdHRyaWIuYy0zNjY5LSAqIEBuaTpcXHRcXHRub24tcmVzaWRlbnQgbnRmcyBpbm9kZSBmb3Igd2hpY2ggd2UgbmVlZCB1cGRhdGVcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMzY3OS0gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjM2ODA6aW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcXG5mcy9udGZzL2F0dHJpYi5jLTM2ODEte1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz00MTYyPXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmsoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDI2Mi1cXHRcXHQvKiBXcml0ZSBtYXBwaW5nIHBhaXJzIGZvciBuZXcgcnVubGlzdC4gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjQyNjM6XFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwIC8qZmlyc3RfZnJlZV92Y24qLyk7XFxuZnMvbnRmcy9hdHRyaWIuYy00MjY0LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NDMyOT1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTQ1MDEtXFx0XFx0bmktXFx1MDAzZWFsbG9jYXRlZF9zaXplID0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgZmlyc3RfZnJlZV92Y24pO1xcbmZzL250ZnMvYXR0cmliLmM6NDUwMjpcXHRcXHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbmZzL250ZnMvYXR0cmliLmMtNDUwMy1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTQ1NjUtXFx0XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG5mcy9udGZzL2F0dHJpYi5jOjQ1NjY6XFx0XFx0aWYgKG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCkpXFxuZnMvbnRmcy9hdHRyaWIuYy00NTY3LVxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBvbGQgbWFwcGluZyBwYWlyc1xcXCIpO1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz00OTcwPWludCBudGZzX2F0dHJfbWFwX2NsdXN0ZXIoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuX3N0YXJ0LCBzNjQgKmxjbl9zdGFydCxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNTA5NS1cXHRcXHRudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoY3R4KTtcXG5mcy9udGZzL2F0dHJpYi5jOjUwOTY6XFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcXG5mcy9udGZzL2F0dHJpYi5jLTUwOTctXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz01MzAxPWludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTUzNTEtXFx0XFx0bmktXFx1MDAzZWluaXRpYWxpemVkX3NpemUgKz0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgbGVuKTtcXG5mcy9udGZzL2F0dHJpYi5jOjUzNTI6XFx0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcXG5mcy9udGZzL2F0dHJpYi5jLTUzNTMtXFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz01Mzc5PWludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0IGxlbilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNTQzNi1cXHRpZiAobmktXFx1MDAzZWFsbG9jYXRlZF9zaXplIFxcdTAwM2UgMCkge1xcbmZzL250ZnMvYXR0cmliLmM6NTQzNzpcXHRcXHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbmZzL250ZnMvYXR0cmliLmMtNTQzOC1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTU0NzQ9aW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTU1MTQtXFxuZnMvbnRmcy9hdHRyaWIuYzo1NTE1OlxcdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuZnMvbnRmcy9hdHRyaWIuYy01NTE2LVxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NTUzMT1pbnQgbnRmc19hdHRyX2ZhbGxvY2F0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBzdGFydCwgbG9mZl90IGJ5dGVfbGVuLCBib29sIGtlZXBfc2l6ZSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNTY4Mi1cXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG5mcy9udGZzL2F0dHJpYi5jOjU2ODM6XFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcXG5mcy9udGZzL2F0dHJpYi5jLTU2ODQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmg9MTMyPWludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVjb3JkX2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiB0eXBlLFxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuaC0xMzQtXFx0XFx0X19sZTE2IGZsYWdzKTtcXG5mcy9udGZzL2F0dHJpYi5oOjEzNTppbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKTtcXG5mcy9udGZzL2F0dHJpYi5oLTEzNi1zdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX2F0dHJfdmNuX3RvX3JsKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbiwgczY0ICpsY24pO1xcbi0tXFxuZnMvbnRmcy9jb21wcmVzcy5jPTEyNzQ9c3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4tLVxcbmZzL250ZnMvY29tcHJlc3MuYy0xNDA3LVxcbmZzL250ZnMvY29tcHJlc3MuYzoxNDA4OlxcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuZnMvbnRmcy9jb21wcmVzcy5jLTE0MDktXFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbi0tXFxuZnMvbnRmcy9maWxlLmM9Nzg9c3RhdGljIGludCBudGZzX3RyaW1fcHJlYWxsb2Moc3RydWN0IGlub2RlICp2aSlcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTExMy1cXHRcXHRcXHRuaS1cXHUwMDNlYWxsb2NhdGVkX3NpemUgPSBudGZzX2NsdXN0ZXJfdG9fYnl0ZXModm9sLCB2Y25fdHIpO1xcbmZzL250ZnMvZmlsZS5jOjExNDpcXHRcXHRcXHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbmZzL250ZnMvZmlsZS5jLTExNS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jPTI3MjM9aW50IF9fbnRmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpLCBpbnQgc3luYylcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0yNzYyLVxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbmZzL250ZnMvaW5vZGUuYzoyNzYzOlxcdFxcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuZnMvbnRmcy9pbm9kZS5jLTI3NjQtXFx0XFx0aWYgKCFlcnIpXFxuLS1cXG5mcy9udGZzL21mdC5jPTEwMDc9c3RhdGljIGludCBudGZzX21mdF9hdHRyX2V4dGVuZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL21mdC5jLTEwMjctXFxuZnMvbnRmcy9tZnQuYzoxMDI4OlxcdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuZnMvbnRmcy9tZnQuYy0xMDI5LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9udGZzL21mdC5jPTEwNTM9c3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbi0tXFxuZnMvbnRmcy9tZnQuYy0xMzI2LVxcdFxcdG1hcmtfbWZ0X3JlY29yZF9kaXJ0eShjdHgtXFx1MDAzZW50ZnNfaW5vKTtcXG5mcy9udGZzL21mdC5jOjEzMjc6XFx0fSBlbHNlIGlmIChzdGF0dXMubXBfZXh0ZW5kZWQgXFx1MDAyNlxcdTAwMjYgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG1mdGJtcF9uaSwgMCkpIHtcXG5mcy9udGZzL21mdC5jLTEzMjgtXFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiRmFpbGVkIHRvIHJlc3RvcmUgbWFwcGluZyBwYWlycy4lc1xcXCIsIGVzKTtcXG4tLVxcbmZzL250ZnMvbWZ0LmM9MTQ4Nj1zdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbi0tXFxuZnMvbnRmcy9tZnQuYy0xNzM4LVxcdH1cXG5mcy9udGZzL21mdC5jOjE3Mzk6XFx0aWYgKG1wX2V4dGVuZGVkIFxcdTAwMjZcXHUwMDI2IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhtZnRfbmksIDApKSB7XFxuZnMvbnRmcy9tZnQuYy0xNzQwLVxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYiwgXFxcIkZhaWxlZCB0byByZXN0b3JlIG1hcHBpbmcgcGFpcnMuJXNcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjoxMy42MjkwOTE5NjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMjkzMTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTlRGUyBEcml2ZXIgV3JpdGUgQ2FwYWJpbGl0aWVzKipcblxuT2theSwgbGV0J3Mgc2VlLi4uIHNvIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgIGlzIGNhbGxlZCBmcm9tIGBfX250ZnNfd3JpdGVfaW5vZGVgLCB3aGljaCBpcyBpdHNlbGYgdHJpZ2dlcmVkIGR1cmluZyBpbm9kZSB3cml0aW5nLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzICp3cml0ZSogb3BlcmF0aW9ucyBhcmUgaW5kZWVkIGhhbmRsZWQgd2l0aGluIHRoaXMgYGZzL250ZnMvYCBkcml2ZXIuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gbWl4IHRoaW5ncyB1cC4gQW0gSSB0aGlua2luZyBvZiB0aGUgb3JpZ2luYWwgYGZzL250ZnMvYCBkcml2ZXIsIG9yIGFtIEkgY29uZmxhdGluZyBpdCB3aXRoIHRoYXQgbmV3ZXIgYGZzL250ZnMzL2AgZHJpdmVyIGRldmVsb3BlZCBieSBQYXJhZ29uPyBUaGUgb2xkIGBmcy9udGZzL2AgaXMgdGhlIEFudG9uIEFsdGFwYXJtYWtvdiB2ZXJzaW9uLCByaWdodD8gUmlnaHQuIFRoYXQgdmVyc2lvbiAqZGlkKiBoYXZlIHdyaXRlIHN1cHBvcnQsIGJ1dCBpdCB3YXMgaGVhdmlseSByZXN0cmljdGVkLCB3YXNuJ3QgaXQ/IExpbWl0ZWQgdG8gb3ZlcndyaXRpbmcgZXhpc3RpbmcgZGF0YSB3aXRob3V0IHJlc2l6aW5nIG9yIHdoYXRub3QuIEp1c3QgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpbiBgZnMvbnRmcy9maWxlLmNgIHRvIHNlZSBpZiB0aGVyZSdzIGEgZnVuY3Rpb24gbGlrZSBgbnRmc19maWxlX3dyaXRlX2l0ZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBqdXN0IHRvIGNvbmZpcm0gbXkgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjoxNy45MzIwMjY1MjhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDExMjkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2ZpbGVfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2ZpbGUuYz00OTU9c3RhdGljIHNzaXplX3QgbnRmc19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTUzNy1cXG5mcy9udGZzL2ZpbGUuYzo1Mzg6c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZnMvbnRmcy9maWxlLmMtNTM5LXtcXG4tLVxcbmZzL250ZnMvZmlsZS5jPTExNDY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudGZzX2ZpbGVfb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTE0OC1cXHQucmVhZF9pdGVyXFx0PSBudGZzX2ZpbGVfcmVhZF9pdGVyLFxcbmZzL250ZnMvZmlsZS5jOjExNDk6XFx0LndyaXRlX2l0ZXJcXHQ9IG50ZnNfZmlsZV93cml0ZV9pdGVyLFxcbmZzL250ZnMvZmlsZS5jLTExNTAtXFx0LmZzeW5jXFx0XFx0PSBudGZzX2ZpbGVfZnN5bmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjE4LjAzNjE0Mzg4NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTgwMzM0OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIE5URlMgRmlsZXN5c3RlbSBIaXN0b3J5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHRyeWluZyB0byByZW1lbWJlci4uLiB3YXNuJ3QgdGhlcmUgYW4gYG50ZnNfZmlsZV9haW9fd3JpdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGluIHRoZSBsZWdhY3kgYGZzL250ZnMvYCBkcml2ZXI/IExldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4gUmlnaHQsIHJpZ2h0LCBsZXQncyBzZWUgd2hlbiB0aGF0IHdhcyBpbXBsZW1lbnRlZC4gQWgsIGhlcmUgd2UgYXJlOiBcIk1vbiBKdWwgNiAwNDoyNToyNCAyMDI2XCIuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgYSB0aW1lIGZyYW1lIGF0IGxlYXN0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSBpZiBgbnRmc19maWxlX3dyaXRlX2l0ZXJgIGV4aXN0cyDigJMgSSdtIHByZXR0eSBzdXJlIEkgc2F3IHRoYXQgb25lIHJlY2VudGx5IGluIGBmcy9udGZzL2ZpbGUuY2AuIFllcCwgdGhlcmUgaXQgaXMuIE9rYXksIHRoYXQncyB3aGF0IEkgdGhvdWdodC5cblxuQnV0LCBhIG5hZ2dpbmcgcXVlc3Rpb24gcmVtYWlucy4gV2FzIGBmcy9udGZzL2AgYWN0dWFsbHkganVzdCBgbnRmczNgIHJlbmFtZWQgYXQgc29tZSBwb2ludD8gTXkgbWluZCBpcyBwbGF5aW5nIHRyaWNrcyBvbiBtZSBzb21ldGltZXMgd2l0aCBhbGwgdGhlc2UgcmV2aXNpb25zLiBJbiBtb3JlIHJlY2VudCBrZXJuZWxzLCB0aGUgZGlyZWN0b3JpZXMgYXJlIGZsdWlkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IGdvaW5nIGRvd24gdGhlIHdyb25nIHRyYWNrLiBEaWQgdGhleSByZW1vdmUgYGZzL250ZnMvYCBhbmQga2VlcCBgZnMvbnRmczMvYCwgb3IgbWF5YmUgcmVuYW1lIGBmcy9udGZzMy9gIHRvIGBmcy9udGZzL2A/IEkgcmVhbGx5IG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ28gYmFjayB0byB0aGUgc291cmNlLiBMZXQgbWUganVzdCBvcGVuIHVwIGBmcy9udGZzL0tjb25maWdgIG9uZSBtb3JlIHRpbWUgYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlIEknbSBvcmllbnRlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjY3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjIyLjYxNjQ4MDgzNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NDgyMTc2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQYXJhZ29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6MjIuNzM0OTc2ODZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcyMzkyODg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBOVEZTIFN1cGVyYmxvY2sgQXV0aG9yc2hpcCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdobydzIGJlZW4gd29ya2luZyBvbiB0aGUgTlRGUyBzdXBlcmJsb2NrIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byB0aGUgc291cmNlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgZnMvbnRmcy9zdXBlci5jYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3VwZXJibG9jaydzIGltcGxlbWVudGF0aW9uLCBhbmQgaG9wZWZ1bGx5LCBJIGNhbiBnbGVhbiBzb21lIGF1dGhvcnNoaXAgZGV0YWlscyBkaXJlY3RseSBmcm9tIHRoZSBjb21tZW50cyBvciByZXZpc2lvbiBoaXN0b3J5IHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIEl0J3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aG8ncyBjb250cmlidXRlZCBhbmQgd2hlbi4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgcm91dGluZSBpbnZlc3RpZ2F0aW9uIGZvciBtZSwgYmVpbmcgYSBzZWFzb25lZCBkZXZlbG9wZXIgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjI1LjQ1ODkwNzgxOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3Mjc5MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1PRFVMRV9BVVRIT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvc3VwZXIuYz0yNzA1PW1vZHVsZV9leGl0KGV4aXRfbnRmc19mcyk7XFxuZnMvbnRmcy9zdXBlci5jLTI3MDYtXFxuZnMvbnRmcy9zdXBlci5jOjI3MDc6TU9EVUxFX0FVVEhPUihcXFwiQW50b24gQWx0YXBhcm1ha292IFxcdTAwM2NhbnRvbkB0dXhlcmEuY29tXFx1MDAzZVxcXCIpOyAvKiBPcmlnaW5hbCByZWFkLW9ubHkgTlRGUyBkcml2ZXIgKi9cXG5mcy9udGZzL3N1cGVyLmM6MjcwODpNT0RVTEVfQVVUSE9SKFxcXCJOYW1qYWUgSmVvbiBcXHUwMDNjbGlua2luamVvbkBrZXJuZWwub3JnXFx1MDAzZVxcXCIpOyAvKiBBZGQgd3JpdGUsIGlvbWFwIGFuZCB2YXJpb3VzIGZlYXR1cmVzICovXFxuZnMvbnRmcy9zdXBlci5jLTI3MDktTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJOVEZTIHJlYWQtd3JpdGUgZmlsZXN5c3RlbSBkcml2ZXJcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6MjUuNjM2MTk3NDAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDA5ODEwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTlRGUyBGaWxlc3lzdGVtIFVwZGF0ZSoqXG5cbk9rYXksIHNvIE5hbWphZSBKZW9uJ3MgYmVlbiBidXN5ISBJdCBsb29rcyBsaWtlIGhlJ3MgYWRkZWQgd3JpdGUsIGlvbWFwLCBhbmQgYSBidW5jaCBvZiBvdGhlciBmZWF0dXJlcyB0byB0aGUgYGZzL250ZnMvYCBkcml2ZXIuIEhtbSwgSSB3b25kZXIgaWYgdGhpcyBpcyBhIGNvbXBsZXRlIG92ZXJoYXVsLCBhIGJyYW5kIG5ldyBkcml2ZXIsIG9yIGp1c3QgYSBzaWduaWZpY2FudCB1cGRhdGUgdG8gdGhlIGV4aXN0aW5nIG9uZS4gR2l2ZW4gSmVvbidzIHdvcmsgb24gYGtzbWJkYCBhbmQgYGV4ZmF0YCwgaXQncyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgcG9zc2liaWxpdHkgdGhhdCBoZSdzIGJlZW4gcmV2aXNpdGluZyBhbmQgaW1wcm92aW5nIHRoZSBgZnMvbnRmcy9gIGNvZGViYXNlIHJlY2VudGx5LiBSaWdodCwgdGhlIGNvbmZpZyBvcHRpb24gaXMgYE5URlNfRlNgLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBtb2RpZnlpbmcgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCB3aXRoaW4gYGZzL250ZnMvYXR0cmxpc3QuY2AuIFRoZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQ6XG5cbmBgYGNcblx0aWYgKCEoVkZTX0koYmFzZV9uaSktXHUwMDNlaV9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9BQ1RJVkUpKVxuXHRcdHJldHVybiAtRUlPO1xuYGBgXG5cbkFoLCBJIHNlZS4gVGhpcyBpcyBkZXNpZ25lZCB0byBhZGRyZXNzIGEgcG90ZW50aWFsIGRlYWRsb2NrIHNpdHVhdGlvbi4gVGhlIGNoZWNrIGhlcmUgZW5zdXJlcyB0aGUgc3VwZXJibG9jayBpcyBzdGlsbCBhY3RpdmUgYmVmb3JlIHByb2NlZWRpbmcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoKWAgY2xlYXJzIHRoZSBgU0JfQUNUSVZFYCBmbGFnIGJlZm9yZSBpbm9kZXMgYXJlIGV2aWN0ZWQgZnJvbSB0aGUgY2FjaGUuIFNvLCBpZiBgbnRmc19hdHRybGlzdF91cGRhdGVgIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgZXZpY3Rpb24gcHJvY2VzcyBpdHNlbGYgKHBlcmhhcHMgdGhyb3VnaCBgbnRmc19ldmljdF9pbm9kZWAsIHdoaWNoIGxlYWRzIHRvIGBudGZzX2NsZWFyX2lub2RlYCwgYW5kIHRoZW4uLi4pLCBpdCBjYW4gZW5jb3VudGVyIGEgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gbWlnaHQgZW5kIHVwIHdhaXRpbmcgb24gYW4gYXR0cmlidXRlIGxpc3QgaW5vZGUgdGhhdCdzIGFscmVhZHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQsIGkuZS4sIGluIHRoZSBgSV9GUkVFSU5HYCBzdGF0ZS4gVGhpcyBuZXcgY2hlY2sgcHJldmVudHMgdGhhdC4gSW5zdGVhZCBvZiBnZXR0aW5nIHN0dWNrLCBpdCByZXR1cm5zIGEgYC1FSU9gIGVycm9yLCB3aGljaCBpcyBtdWNoIGJldHRlciB0aGFuIGEgZGVhZGxvY2suXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoZXJlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgaXMgY2FsbGVkIGR1cmluZyB0aGUgZXZpY3Rpb24gc2VxdWVuY2UuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBiZSBjb21wbGV0ZWx5IHN1cmUgYWJvdXQgdGhlIGV4YWN0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjMxLjA3NzE4MTg1MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MTc1NzMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2V2aWN0X2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjozMS4zMzYzNjg5MTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMDU4NzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGV2aWN0X2lub2RlYCBmb3IgTlRGUyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgZXZpY3RfaW5vZGVgIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBOVEZTIGZpbGVzeXN0ZW1zIGltcGxlbWVudGF0aW9uLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhY2llcyBvZiBpdHMgb3BlcmF0aW9uIHdpdGhpbiB0aGUgYGZzL250ZnMvc3VwZXIuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gdG8gc3BlYWssIHdoZW4gYSB2bm9kZSBpcyBiZWluZyBkaXNjYXJkZWQuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSBoYW5kbGUgY2xlYW51cCwgYW55IHVuaXF1ZSBOVEZTLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGFyb3VuZCBqb3VybmFsaW5nLCBhdHRyaWJ1dGUgbGlzdHMsIG9yIHBvdGVudGlhbGx5IGRlZmVycmVkIHdvcmsgcmVxdWlyZWQgZHVyaW5nIGFuIGV2aWN0aW9uLiBMZXQncyBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IHRoYXQncyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbSBJJ20gd29ya2luZyBvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBzcGVjaWZpYyBOVEZTIGRhdGEgc3RydWN0dXJlcyBhbmQgYSBwb3NzaWJsZSBjb25uZWN0aW9uIHRvIHRoZSB2YXJpb3VzIGF0dHJpYnV0ZSBsaXN0cyBmb3IgdGhlIGdpdmVuIGZpbGUgb3IgZGlyZWN0b3J5LiBJJ20gYWxzbyBsb29raW5nIGZvciBhbnkgY2FsbHMgdG8gdGhlIGpvdXJuYWxpbmcgZnVuY3Rpb25zLCBwZXJoYXBzIHRvIGZsdXNoIGNoYW5nZXMgb3IgdG8gdXBkYXRlIGFueSByZWxldmFudCBtZXRhZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjozNC43MzY5NTg2OTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTg4NzI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJldmljdF9pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2lub2RlLmM9Mzc0PWludCBudGZzX2Ryb3BfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMzg1LVxcbmZzL250ZnMvaW5vZGUuYzozODY6XFx0XFx0XFx0XFx0LyogVG8gYXZvaWQgZXZpY3RfaW5vZGUgY2FsbCBzaW11bHRhbmVvdXNseSAqL1xcbmZzL250ZnMvaW5vZGUuYy0zODctXFx0XFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfY291bnQpO1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTIxNjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG50ZnNfc29wcyA9IHtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMTY4LVxcdC5zdGF0ZnNcXHRcXHQ9IG50ZnNfc3RhdGZzLFxcdFxcdC8qIFN5c2NhbGw6IHN0YXRmcyAqL1xcbmZzL250ZnMvc3VwZXIuYzoyMTY5OlxcdC5ldmljdF9pbm9kZVxcdD0gbnRmc19ldmljdF9iaWdfaW5vZGUsXFxuZnMvbnRmcy9zdXBlci5jLTIxNzAtXFx0LnNob3dfb3B0aW9uc1xcdD0gbnRmc19zaG93X29wdGlvbnMsXFx0LyogU2hvdyBtb3VudCBvcHRpb25zIGluIHByb2MuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjM1LjAzNjg1NjcxM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzgzMTAwMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIFRoZSBrZXJuZWwncyBmaWxlIHN5c3RlbSBjb2RlIGlzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4gU3BlY2lmaWNhbGx5LCBJJ20gY2hlY2tpbmcgb3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbnRmc19ldmljdF9iaWdfaW5vZGVgIHdpdGhpbiBgZnMvbnRmcy9pbm9kZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGV2aWN0aW9uIG9mIGxhcmdlIGlub2RlcyBpbiB0aGUgTlRGUyBmaWxlIHN5c3RlbS4gTXkgZ29hbCBpcyB0byBncmFzcCBpdHMgbG9naWMsIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCBlZGdlIGNhc2VzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGFuZCBlbnN1cmUgaXQgYWxpZ25zIHdpdGggYmVzdCBwcmFjdGljZXMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuIEknbGwgbWVudGFsbHkgbWFwIG91dCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBhbmQgdGhlIGNvbnRyb2wgZmxvdyB0aHJvdWdoIHRoZSBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjM3LjgxOTk2MjMxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI4NjM1MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfZXZpY3RfYmlnX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5vZGUuYz0yMjMzPXN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMjI2Mi0vKlxcbmZzL250ZnMvaW5vZGUuYzoyMjYzOiAqIG50ZnNfZXZpY3RfYmlnX2lub2RlIC0gY2xlYW4gdXAgdGhlIG50ZnMgc3BlY2lmaWMgcGFydCBvZiBhbiBpbm9kZVxcbmZzL250ZnMvaW5vZGUuYy0yMjY0LSAqIEB2aTpcXHRcXHR2ZnMgaW5vZGUgcGVuZGluZyBhbm5paGlsYXRpb25cXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0yMjcxLSAqL1xcbmZzL250ZnMvaW5vZGUuYzoyMjcyOnZvaWQgbnRmc19ldmljdF9iaWdfaW5vZGUoc3RydWN0IGlub2RlICp2aSlcXG5mcy9udGZzL2lub2RlLmMtMjI3My17XFxuLS1cXG5mcy9udGZzL2lub2RlLmg9MzEyPWludCBudGZzX2Ryb3BfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL250ZnMvaW5vZGUuaDozMTM6dm9pZCBudGZzX2V2aWN0X2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKTtcXG5mcy9udGZzL2lub2RlLmgtMzE0LXZvaWQgX19udGZzX2luaXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcXG4tLVxcbmZzL250ZnMvbWZ0LmM9NjY1PXN0YXRpYyBpbnQgbnRmc190ZXN0X2lub2RlX3diKHN0cnVjdCBpbm9kZSAqdmksIHU2NCBpbm8sIHZvaWQgKmRhdGEpXFxuLS1cXG5mcy9udGZzL21mdC5jLTY3My1cXHQgKiBXaXRob3V0IHRoaXMsIG50ZnNfd3JpdGVfbXN0X2Jsb2NrKCkgY291bGQgY2FsbCBpcHV0X2ZpbmFsKClcXG5mcy9udGZzL21mdC5jOjY3NDpcXHQgKiAsIGFuZCBudGZzX2V2aWN0X2JpZ19pbm9kZSgpIGNvdWxkIHRyeSB0byB1bmxpbmsgdGhpcyBpbm9kZVxcbmZzL250ZnMvbWZ0LmMtNjc1LVxcdCAqIGFuZCB0aGUgY29udGV4IGNvdWxkIGJlIGJsb2NrZWQgaW5maW5pdGx5IGluIG1hcF9tZnRfcmVjb3JkKCkuXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MjE2MD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbnRmc19zb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTIxNjgtXFx0LnN0YXRmc1xcdFxcdD0gbnRmc19zdGF0ZnMsXFx0XFx0LyogU3lzY2FsbDogc3RhdGZzICovXFxuZnMvbnRmcy9zdXBlci5jOjIxNjk6XFx0LmV2aWN0X2lub2RlXFx0PSBudGZzX2V2aWN0X2JpZ19pbm9kZSxcXG5mcy9udGZzL3N1cGVyLmMtMjE3MC1cXHQuc2hvd19vcHRpb25zXFx0PSBudGZzX3Nob3dfb3B0aW9ucyxcXHQvKiBTaG93IG1vdW50IG9wdGlvbnMgaW4gcHJvYy4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6MzkuMTQ4NjA1NjIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzAzNjU1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG50ZnNfZXZpY3RfYmlnX2lub2RlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaWcgaW50byB0aGUgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgcmV2b2x2ZXMgYXJvdW5kIGl0cyAqcHVycG9zZSouIEJhc2VkIG9uIHRoZSBuYW1lLCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjb3JlIHJvdXRpbmUgd2l0aGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgZXZpY3Rpb24gb2YgbGFyZ2UgaW5vZGVzLiBFdmljdGlvbi4uLnRoYXQgdGVsbHMgbWUgdGhpcyBsaWtlbHkgcGxheXMgYSByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgZmx1c2hpbmcgb2YgaW5vZGUgZGF0YSBmcm9tIHRoZSBjYWNoZSwgcHJlc3VtYWJseSB0byBtYWtlIHNwYWNlIGZvciBvdGhlciBhY3RpdmUgaW5vZGVzIG9yIHRvIGZyZWUgdXAgdmFsdWFibGUgUkFNLlxuXG5JJ20gaW5zdGFudGx5IGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0LiAqV2hlbiogaXMgdGhpcyBmdW5jdGlvbiB0cmlnZ2VyZWQ/IElzIGl0IGEgYmFja2dyb3VuZCBwcm9jZXNzLCBzb21ldGhpbmcgZHJpdmVuIGJ5IG1lbW9yeSBwcmVzc3VyZSwgb3IgaXMgaXQgaW52b2tlZCBkaXJlY3RseSBpbiByZXNwb25zZSB0byBzcGVjaWZpYyBvcGVyYXRpb25zIGxpa2UgYSBmaWxlIGNsb3NlLCBvciBtZXRhZGF0YSB3cml0ZT8gVW5kZXJzdGFuZGluZyB0aGUgdHJpZ2dlcmluZyBldmVudHMgaXMgY3JpdGljYWwgdG8gYXNzZXNzIGl0cyBvdmVyYWxsIGltcGFjdCBvbiBwZXJmb3JtYW5jZS5cblxuTmV4dCwgSSdsbCBiZSBsb29raW5nIGZvciBrZXkgcGllY2VzIG9mIGluZm9ybWF0aW9uLiBJJ2xsIGZvY3VzIG9uIGhvdyBpdCBpZGVudGlmaWVzIFwiYmlnXCIgaW5vZGVzLiBJcyBpdCBiYXNlZCBvbiBhIHN0YXRpYyB0aHJlc2hvbGQsIGNhbGN1bGF0ZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gc3lzdGVtIG1lbW9yeSwgb3IgaXMgaXQgYSBmdW5jdGlvbiBvZiB0aGUgaW5vZGUncyBzaXplIG9yIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIGV4dGVudHM/IEkgd291bGQgZXhwZWN0IHRoaXMgdG8gYmUgYSBwZXJmb3JtYW5jZSBjb25jZXJuIGFuZCB0aGVyZWZvcmUgc2hvdWxkIGJlIGZpbmUtdHVuZWQuIEhvdyBpcyB0aGF0IGluZm9ybWF0aW9uIGVuY29kZWQsIGFuZCBob3cgYXJlIHRoZSBpbm9kZXMgc2VsZWN0ZWQ/IFRoYXQgd2lsbCBpbmZsdWVuY2UgaXRzIGVmZmljaWVuY3kuXG5cbldoYXQgc3RyYXRlZ2llcyBkb2VzIGl0IGVtcGxveSB0byBhY3R1YWxseSBldmljdCB0aGUgZGF0YT8gRG9lcyBpdCBpbnZvbHZlIGRpcnR5IHBhZ2UgZmx1c2hpbmcsIGludmFsaWRhdGluZyBjYWNoZSBlbnRyaWVzLCBvciBwZXJmb3JtaW5nIGFueSBkaXJlY3QgZGlzayBJL08/IFdoYXQgYXJlIHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkPyBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQgdXNlcyBhbnkgZ2xvYmFsIGxvY2tzIG9yIHBlci1pbm9kZSBsb2NrcywgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbmN1cnJlbmN5IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBQZXJmb3JtYW5jZSBhbmQgY29ycmVjdCBvcGVyYXRpb24gYXJlIGJvdGggaGlnaC1wcmlvcml0eSBjb25jZXJucy5cblxuQW5kIGZpbmFsbHksIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIGpvdXJuYWxpbmcgb3IgdHJhbnNhY3Rpb24gbWFuYWdlbWVudCBvZiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBpZiBhcHBsaWNhYmxlPyBEb2VzIGl0IGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5PyBBbnkgaW50ZXJhY3Rpb24gd2l0aCBsb2dnaW5nIHdpbGwgaGF2ZSB0byBiZSBleGFtaW5lZCBmb3IgY29ycmVjdG5lc3MgYW5kIHNwZWVkLiBEb2VzIGl0IGhhdmUgYW55IGltcGxpY2F0aW9ucyBmb3IgY3Jhc2ggcmVjb3ZlcnksIGRhdGEgaW50ZWdyaXR5LCBvciBhbnkgb3RoZXIgaGlnaC1sZXZlbCBvcGVyYXRpb25zPyBUaG9zZSBhcmUgdGhlIGNydWNpYWwgY29uc2lkZXJhdGlvbnMuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGludm9sdmVzIGNhcmVmdWwgaGFuZGxpbmcgb2YgbWV0YWRhdGEgYW5kIGRhdGEgYmxvY2tzLCB3aGljaCwgaWYgbm90IHByb3Blcmx5IGNvb3JkaW5hdGVkLCBjb3VsZCBsZWFkIHRvIGZpbGVzeXN0ZW0gY29ycnVwdGlvbi4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYW55IGVycm9yIGhhbmRsaW5nIGFuZCByZWNvdmVyeSBtZWNoYW5pc21zLCB0b28sIHRvIGFzc2VzcyBpdHMgcm9idXN0bmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjo0NC4xMTg5NzU1MjdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjYwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI2MDpcXHR9XFxuMjI2MTpcXHRcXG4yMjYyOlxcdC8qXFxuMjI2MzpcXHQgKiBudGZzX2V2aWN0X2JpZ19pbm9kZSAtIGNsZWFuIHVwIHRoZSBudGZzIHNwZWNpZmljIHBhcnQgb2YgYW4gaW5vZGVcXG4yMjY0OlxcdCAqIEB2aTpcXHRcXHR2ZnMgaW5vZGUgcGVuZGluZyBhbm5paGlsYXRpb25cXG4yMjY1OlxcdCAqXFxuMjI2NjpcXHQgKiBXaGVuIHRoZSBWRlMgaXMgZ29pbmcgdG8gcmVtb3ZlIGFuIGlub2RlIGZyb20gbWVtb3J5LCBudGZzX2NsZWFyX2JpZ19pbm9kZSgpXFxuMjI2NzpcXHQgKiBpcyBjYWxsZWQsIHdoaWNoIGRlYWxsb2NhdGVzIGFsbCBtZW1vcnkgYmVsb25naW5nIHRvIHRoZSBOVEZTIHNwZWNpZmljIHBhcnRcXG4yMjY4OlxcdCAqIG9mIHRoZSBpbm9kZSBhbmQgcmV0dXJucy5cXG4yMjY5OlxcdCAqXFxuMjI3MDpcXHQgKiBJZiB0aGUgTUZUIHJlY29yZCBpcyBkaXJ0eSwgd2UgY29tbWl0IGl0IGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLlxcbjIyNzE6XFx0ICovXFxuMjI3MjpcXHR2b2lkIG50ZnNfZXZpY3RfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpXFxuMjI3MzpcXHR7XFxuMjI3NDpcXHRcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0kodmkpO1xcbjIyNzU6XFx0XFxuMjI3NjpcXHRcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcXHUwMDI2dmktXFx1MDAzZWlfZGF0YSk7XFxuMjI3NzpcXHRcXG4yMjc4OlxcdFxcdGlmICghdmktXFx1MDAzZWlfbmxpbmspIHtcXG4yMjc5OlxcdFxcdFxcdGlmICghTklub0F0dHIobmkpKSB7XFxuMjI4MDpcXHRcXHRcXHRcXHQvKiBOZXZlciBjYWxsZWQgd2l0aCBleHRlbnQgaW5vZGVzICovXFxuMjI4MTpcXHRcXHRcXHRcXHRXQVJOX09OKG5pLVxcdTAwM2Vucl9leHRlbnRzID09IC0xKTtcXG4yMjgyOlxcdFxcdFxcdFxcdG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGUobmkpO1xcbjIyODM6XFx0XFx0XFx0fVxcbjIyODQ6XFx0XFx0XFx0Z290byByZWxlYXNlO1xcbjIyODU6XFx0XFx0fVxcbjIyODY6XFx0XFxuMjI4NzpcXHRcXHRpZiAoTklub0RpcnR5KG5pKSkge1xcbjIyODg6XFx0XFx0XFx0LyogQ29tbWl0dGluZyB0aGUgaW5vZGUgYWxzbyBjb21taXRzIGFsbCBleHRlbnQgaW5vZGVzLiAqL1xcbjIyODk6XFx0XFx0XFx0bnRmc19jb21taXRfaW5vZGUodmkpO1xcbjIyOTA6XFx0XFxuMjI5MTpcXHRcXHRcXHRpZiAoTklub0RpcnR5KG5pKSkge1xcbjIyOTI6XFx0XFx0XFx0XFx0bnRmc19kZWJ1ZyhcXFwiRmFpbGVkIHRvIGNvbW1pdCBkaXJ0eSBpbm9kZSAweCVsbHguICBMb3NpbmcgZGF0YSFcXFwiLFxcbjIyOTM6XFx0XFx0XFx0XFx0XFx0ICAgbmktXFx1MDAzZW1mdF9ubyk7XFxuMjI5NDpcXHRcXHRcXHRcXHROSW5vQ2xlYXJBdHRyTGlzdERpcnR5KG5pKTtcXG4yMjk1OlxcdFxcdFxcdFxcdE5Jbm9DbGVhckRpcnR5KG5pKTtcXG4yMjk2OlxcdFxcdFxcdH1cXG4yMjk3OlxcdFxcdH1cXG4yMjk4OlxcdFxcbjIyOTk6XFx0XFx0LyogTm8gbmVlZCB0byBsb2NrIGF0IHRoaXMgc3RhZ2UgYXMgbm8gb25lIGVsc2UgaGFzIGEgcmVmZXJlbmNlLiAqL1xcbjIzMDA6XFx0XFx0aWYgKG5pLVxcdTAwM2Vucl9leHRlbnRzIFxcdTAwM2UgMCkge1xcbjIzMDE6XFx0XFx0XFx0aW50IGk7XFxuMjMwMjpcXHRcXG4yMzAzOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuaS1cXHUwMDNlbnJfZXh0ZW50czsgaSsrKSB7XFxuMjMwNDpcXHRcXHRcXHRcXHRpZiAobmktXFx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zW2ldKVxcbjIzMDU6XFx0XFx0XFx0XFx0XFx0bnRmc19jbGVhcl9leHRlbnRfaW5vZGUobmktXFx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zW2ldKTtcXG4yMzA2OlxcdFxcdFxcdH1cXG4yMzA3OlxcdFxcdFxcdG5pLVxcdTAwM2Vucl9leHRlbnRzID0gMDtcXG4yMzA4OlxcdFxcdFxcdGt2ZnJlZShuaS1cXHUwMDNlZXh0LmV4dGVudF9udGZzX2lub3MpO1xcbjIzMDk6XFx0XFx0fVxcbjIzMTA6XFx0XFxuMjMxMTpcXHRyZWxlYXNlOlxcbjIzMTI6XFx0XFx0Y2xlYXJfaW5vZGUodmkpO1xcbjIzMTM6XFx0XFx0X19udGZzX2NsZWFyX2lub2RlKG5pKTtcXG4yMzE0OlxcdFxcbjIzMTU6XFx0XFx0aWYgKE5Jbm9BdHRyKG5pKSkge1xcbjIzMTY6XFx0XFx0XFx0LyogUmVsZWFzZSB0aGUgYmFzZSBpbm9kZSBpZiB3ZSBhcmUgaG9sZGluZyBpdC4gKi9cXG4yMzE3OlxcdFxcdFxcdGlmIChuaS1cXHUwMDNlbnJfZXh0ZW50cyA9PSAtMSkge1xcbjIzMTg6XFx0XFx0XFx0XFx0aXB1dChWRlNfSShuaS1cXHUwMDNlZXh0LmJhc2VfbnRmc19pbm8pKTtcXG4yMzE5OlxcdFxcdFxcdFxcdG5pLVxcdTAwM2Vucl9leHRlbnRzID0gMDtcXG4yMzIwOlxcdFxcdFxcdFxcdG5pLVxcdTAwM2VleHQuYmFzZV9udGZzX2lubyA9IE5VTEw7XFxuMjMyMTpcXHRcXHRcXHR9XFxuMjMyMjpcXHRcXHR9XFxuMjMyMzpcXHRcXG4yMzI0OlxcdFxcdGlmICghYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2bmktXFx1MDAzZWNvdW50KSlcXG4yMzI1OlxcdFxcdFxcdFdBUk5fT04oMSk7XFxuMjMyNjpcXHRcXHRpZiAobmktXFx1MDAzZWZvbGlvKVxcbjIzMjc6XFx0XFx0XFx0Zm9saW9fcHV0KG5pLVxcdTAwM2Vmb2xpbyk7XFxuMjMyODpcXHRcXHRrZnJlZShuaS1cXHUwMDNlbXJlYyk7XFxuMjMyOTpcXHRcXHRrdmZyZWUobmktXFx1MDAzZXRhcmdldCk7XFxuMjMzMDpcXHR9XFxuMjMzMTpcXHRcXG4yMzMyOlxcdC8qXFxuMjMzMzpcXHQgKiBudGZzX3Nob3dfb3B0aW9ucyAtIHNob3cgbW91bnQgb3B0aW9ucyBpbiAvcHJvYy9tb3VudHNcXG4yMzM0OlxcdCAqIEBzZjpcXHRcXHRzZXFfZmlsZSBpbiB3aGljaCB0byB3cml0ZSBvdXIgbW91bnQgb3B0aW9uc1xcbjIzMzU6XFx0ICogQHJvb3Q6XFx0cm9vdCBvZiB0aGUgbW91bnRlZCB0cmVlIHdob3NlIG1vdW50IG9wdGlvbnMgdG8gZGlzcGxheVxcbjIzMzY6XFx0ICpcXG4yMzM3OlxcdCAqIENhbGxlZCBieSB0aGUgVkZTIG9uY2UgZm9yIGVhY2ggbW91bnRlZCBudGZzIHZvbHVtZSB3aGVuIHNvbWVvbmUgcmVhZHNcXG4yMzM4OlxcdCAqIC9wcm9jL21vdW50cyBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSBOVEZTIHNwZWNpZmljIG1vdW50IG9wdGlvbnMgb2YgZWFjaFxcbjIzMzk6XFx0ICogbW91bnQuIFRoZSBtb3VudCBvcHRpb25zIG9mIGZzIHNwZWNpZmllZCBieSBAcm9vdCBhcmUgd3JpdHRlbiB0byB0aGUgc2VxIGZpbGVcXG4yMzQwOlxcdCAqIEBzZiBhbmQgc3VjY2VzcyBpcyByZXR1cm5lZC5cXG4yMzQxOlxcdCAqL1xcbjIzNDI6XFx0aW50IG50ZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuMjM0MzpcXHR7XFxuMjM0NDpcXHRcXHRzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IE5URlNfU0Iocm9vdC1cXHUwMDNlZF9zYik7XFxuMjM0NTpcXHRcXHRpbnQgaTtcXG4yMzQ2OlxcdFxcbjIzNDc6XFx0XFx0aWYgKHVpZF92YWxpZCh2b2wtXFx1MDAzZXVpZCkpXFxuMjM0ODpcXHRcXHRcXHRzZXFfcHJpbnRmKHNmLCBcXFwiLHVpZD0laVxcXCIsIGZyb21fa3VpZF9tdW5nZWQoXFx1MDAyNmluaXRfdXNlcl9ucywgdm9sLVxcdTAwM2V1aWQpKTtcXG4yMzQ5OlxcdFxcdGlmIChnaWRfdmFsaWQodm9sLVxcdTAwM2VnaWQpKVxcbjIzNTA6XFx0XFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIixnaWQ9JWlcXFwiLCBmcm9tX2tnaWRfbXVuZ2VkKFxcdTAwMjZpbml0X3VzZXJfbnMsIHZvbC1cXHUwMDNlZ2lkKSk7XFxuMjM1MTpcXHRcXHRpZiAodm9sLVxcdTAwM2VmbWFzayA9PSB2b2wtXFx1MDAzZWRtYXNrKVxcbjIzNTI6XFx0XFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIix1bWFzaz0wJW9cXFwiLCB2b2wtXFx1MDAzZWZtYXNrKTtcXG4yMzUzOlxcdFxcdGVsc2Uge1xcbjIzNTQ6XFx0XFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIixmbWFzaz0wJW9cXFwiLCB2b2wtXFx1MDAzZWZtYXNrKTtcXG4yMzU1OlxcdFxcdFxcdHNlcV9wcmludGYoc2YsIFxcXCIsZG1hc2s9MCVvXFxcIiwgdm9sLVxcdTAwM2VkbWFzayk7XFxuMjM1NjpcXHRcXHR9XFxuMjM1NzpcXHRcXHRzZXFfcHJpbnRmKHNmLCBcXFwiLGlvY2hhcnNldD0lc1xcXCIsIHZvbC1cXHUwMDNlbmxzX21hcC1cXHUwMDNlY2hhcnNldCk7XFxuMjM1ODpcXHRcXHRpZiAoTlZvbENhc2VTZW5zaXRpdmUodm9sKSlcXG4yMzU5OlxcdFxcdFxcdHNlcV9wdXRzKHNmLCBcXFwiLGNhc2Vfc2Vuc2l0aXZlXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjQ0LjExOTE3MDI0N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU1MzM3ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgTlRGUyBJbm9kZSBVcGRhdGUgTG9vcCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbnRmc19ldmljdF9iaWdfaW5vZGVgIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJ3MgcGluZ2luZyBteSByYWRhci4gSXQgbG9va3MgbGlrZSBpdCBjYWxscyBgbnRmc19kZWxldGVfYmFzZV9pbm9kZShuaSlgLiBOb3csIHRoYXQgZnVuY3Rpb24gbmFtZSBpcyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZy4gQ291bGQgKnRoYXQqIGJlIGNhbGxpbmcgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBhcyBwYXJ0IG9mIGl0cyBjbGVhbnVwPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuIElmIGl0IGRvZXMsIGFuZCBpZiB3ZSdyZSBub3QgY2FyZWZ1bCwgd2UgY291bGQgaGF2ZSBhbiB1cGRhdGUgbG9vcCB3aXRoIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHZlcnkgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaXNzdWVzLiBMZXQncyB0cmFjZSB0aHJvdWdoIGBudGZzX2RlbGV0ZV9iYXNlX2lub2RlYCBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRyb2wgZmxvdyB0byBjb25maXJtIG9yIGRlbnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjQ3LjI3NDUxMzJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjQzODgwNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19kZWxldGVfYmFzZV9pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2lub2RlLmM9MjIyMj12b2lkIG50ZnNfY2xlYXJfZXh0ZW50X2lub2RlKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0yMjMyLVxcbmZzL250ZnMvaW5vZGUuYzoyMjMzOnN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuZnMvbnRmcy9pbm9kZS5jLTIyMzQte1xcbi0tXFxuZnMvbnRmcy9pbm9kZS5jPTIyNzI9dm9pZCBudGZzX2V2aWN0X2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTIyODEtXFx0XFx0XFx0V0FSTl9PTihuaS1cXHUwMDNlbnJfZXh0ZW50cyA9PSAtMSk7XFxuZnMvbnRmcy9pbm9kZS5jOjIyODI6XFx0XFx0XFx0bnRmc19kZWxldGVfYmFzZV9pbm9kZShuaSk7XFxuZnMvbnRmcy9pbm9kZS5jLTIyODMtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjo0OC41Mzg5MDc5NTNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MjAzNzk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBudGZzX2RlbGV0ZV9iYXNlX2lub2RlYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIG51YW5jZXMgaW52b2x2ZWQgaGVyZS4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgbGluY2hwaW4gZm9yIGNsZWFuaW5nIHVwIGlub2RlcyBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGJhc2UgaW5vZGUuIEknbSBndWVzc2luZyB0aGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgZnVuZGFtZW50YWwgZGlyZWN0b3J5IGVudHJ5IG9yIGZpbGUgbWV0YWRhdGEgYmxvY2suIFxuXG5JJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgaXQgaGFuZGxlcyB0aGUgYXNzb2NpYXRlZCBNRlQgZW50cmllcyBhbmQgYW55IHJlZmVyZW5jZSBjb3VudHMuIEkgZXhwZWN0IGEgY2FyZWZ1bCBkYW5jZSB0byBlbnN1cmUgdGhhdCB3aGVuIHRoaXMgYmFzZSBpbm9kZSBpcyBnb25lLCBhbnkgZGVwZW5kZW50IHN0cnVjdHVyZXMg4oCTIGxpa2UgZXh0ZW5kZWQgYXR0cmlidXRlIGRhdGEgb3IgdGhlIGRhdGEgcnVucyDigJMgYXJlIGVpdGhlciBwcm9wZXJseSBkZWFsbG9jYXRlZCBvciByZWFzc2lnbmVkLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgc2l0dWF0aW9uLiBcblxuSSdsbCBiZSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMgaGVyZTsgTlRGUyBpcyBrbm93biBmb3IgaXRzIHNvcGhpc3RpY2F0aW9uLCBzbyBJJ20gZXhwZWN0aW5nIHNvbWUgZmluZS1ncmFpbmVkIGxvY2tpbmcgdG8gYXZvaWQgY29ycnVwdGlvbiBvciBkYXRhIGxvc3MsIGVzcGVjaWFsbHkgd2l0aCBzaW11bHRhbmVvdXMgd3JpdGVzIG9yIGRlbGV0ZXMuIElzIHRoaXMgdXNpbmcgYSB0cmFuc2FjdGlvbmFsIGFwcHJvYWNoLCBvciBzb21ldGhpbmcgbW9yZSBpbW1lZGlhdGU/IEknbGwgbmVlZCB0byBwYXJzZSB0aGUgY29kZSBmb3IgdGhvc2UgaW5kaWNhdG9ycy4gQWxzbywgSSdsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIHJvdXRpbmUgZGVhbHMgd2l0aCBvcnBoYW5lZCBpbm9kZXMgb3IgcGFydGlhbGx5IGRlbGV0ZWQgc3RydWN0dXJlcyDigJMgaG93IHRoZSBzeXN0ZW0gYXR0ZW1wdHMgdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgaW4gdGhlIGZhY2Ugb2YgdW5leHBlY3RlZCBmYWlsdXJlcyBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIFRoZSByZWNvdmVyeSBtZWNoYW5pc21zIGFyZSBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Mjg3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6NTEuOTAwOTQ5MzM4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIzMyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIzMzpcXHRzdGF0aWMgaW50IG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbjIyMzQ6XFx0e1xcbjIyMzU6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG5pLVxcdTAwM2V2b2wtXFx1MDAzZXNiO1xcbjIyMzY6XFx0XFx0aW50IGVycjtcXG4yMjM3OlxcdFxcbjIyMzg6XFx0XFx0aWYgKE5Jbm9BdHRyKG5pKSB8fCBuaS1cXHUwMDNlbnJfZXh0ZW50cyA9PSAtMSlcXG4yMjM5OlxcdFxcdFxcdHJldHVybiAwO1xcbjIyNDA6XFx0XFxuMjI0MTpcXHRcXHRlcnIgPSBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzKG5pKTtcXG4yMjQyOlxcdFxcbjIyNDM6XFx0XFx0LypcXG4yMjQ0OlxcdFxcdCAqIERlYWxsb2NhdGUgZXh0ZW50IG1mdCByZWNvcmRzIGFuZCBmcmVlIGV4dGVudCBpbm9kZXMuXFxuMjI0NTpcXHRcXHQgKiBObyBuZWVkIHRvIGxvY2sgYXMgbm8gb25lIGVsc2UgaGFzIGEgcmVmZXJlbmNlLlxcbjIyNDY6XFx0XFx0ICovXFxuMjI0NzpcXHRcXHR3aGlsZSAobmktXFx1MDAzZW5yX2V4dGVudHMpIHtcXG4yMjQ4OlxcdFxcdFxcdGVyciA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsICoobmktXFx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zKSk7XFxuMjI0OTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIyNTA6XFx0XFx0XFx0XFx0bnRmc19lcnJvcihzYixcXG4yMjUxOlxcdFxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZnJlZSBleHRlbnQgTUZUIHJlY29yZC4gTGVhdmluZyBpbmNvbnNpc3RlbnQgbWV0YWRhdGEuXFxcXG5cXFwiKTtcXG4yMjUyOlxcdFxcdFxcdG50ZnNfaW5vZGVfY2xvc2UoKihuaS1cXHUwMDNlZXh0LmV4dGVudF9udGZzX2lub3MpKTtcXG4yMjUzOlxcdFxcdH1cXG4yMjU0OlxcdFxcbjIyNTU6XFx0XFx0LyogRGVhbGxvY2F0ZSBiYXNlIG1mdCByZWNvcmQgKi9cXG4yMjU2OlxcdFxcdGVyciA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsIG5pKTtcXG4yMjU3OlxcdFxcdGlmIChlcnIpXFxuMjI1ODpcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiRmFpbGVkIHRvIGZyZWUgYmFzZSBNRlQgcmVjb3JkLiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXFxcblxcXCIpO1xcbjIyNTk6XFx0XFx0cmV0dXJuIGVycjtcXG4yMjYwOlxcdH1cXG4yMjYxOlxcdFxcbjIyNjI6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6NTEuOTAxMzcwNTM4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjA2Mjg5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRlYWxsb2NhdGluZyBDbHVzdGVycyBhbmQgQXR0cmlidXRlIExpc3RzOiBBIFBvdGVudGlhbCBJbnRlcmFjdGlvbioqXG5cbkhtbSwgYSBxdWVzdGlvbiBqdXN0IHBvcHBlZCBpbnRvIG15IGhlYWQuIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AgZnVuY3Rpb24uIEkgc2VlbSB0byByZWNhbGwgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gdGhlcmUuIENvdWxkIHRoaXMgZnVuY3Rpb24gYmUgY2FsbGluZyBgbnRmc19hdHRybGlzdF91cGRhdGVgIGF0IHNvbWUgcG9pbnQ/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBmb3IgdGhlIGRlYWxsb2NhdGlvbiBmdW5jdGlvbi4gVGltZSB0byBkaXZlIGluIGFuZCBjb25maXJtIChvciBkZW55KSB0aGlzIHN1c3BlY3RlZCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6NTQuNTIyMDAxNDcxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg4ODY0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2lub2RlLmM9MzE4PXZvaWQgbnRmc19mcmVlX2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTMyMi1cXG5mcy9udGZzL2lub2RlLmM6MzIzOnN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuZnMvbnRmcy9pbm9kZS5jLTMyNC17XFxuLS1cXG5mcy9udGZzL2lub2RlLmM9MjIzMz1zdGF0aWMgaW50IG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTIyNDAtXFxuZnMvbnRmcy9pbm9kZS5jOjIyNDE6XFx0ZXJyID0gbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVycyhuaSk7XFxuZnMvbnRmcy9pbm9kZS5jLTIyNDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjU0Ljc0MDg5NTA0M1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc3NDM2NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AqKlxuXG5BbHJpZ2h0LCBJJ20gZm9jdXNpbmcgb24gYG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIG9yIHByb2Nlc3Mgd2l0aGluIHRoZSBOVEZTIGZpbGUgc3lzdGVtLiBcIkRlYWxsb2NhdGluZyBjbHVzdGVyc1wiLi4uIHRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyBzcGFjZSBtYW5hZ2VtZW50LCByaWdodD8gU28sIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZnJlZWluZyB1cCBkaXNrIHNwYWNlIHRoYXQgd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIHRvIG5vbi1yZXNpZGVudCBmaWxlIGRhdGEuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGZyYWdtZW50YXRpb24sIHBlcmZvcm1hbmNlLCBhbmQgcGVyaGFwcyBldmVuIGRhdGEgcmVjb3ZlcnkgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIHRoaXMgZGVhbGxvY2F0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyByb2J1c3QgdGhpcyByb3V0aW5lIGlzIOKAkyB3aGF0IHNhZmVndWFyZHMgYXJlIGluIHBsYWNlIHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgTWFzdGVyIEZpbGUgVGFibGUgKE1GVCkgYW5kIGhvdyBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgdGhlcmUuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoaXMgYXMgXCJUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBmcmVlaW5nIHVwIHNwYWNlIHRoYXQgd2Fzbid0IGRpcmVjdGx5IGluIHRoZSBNRlQgZW50cmllcy5cIiBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZXRhZGF0YSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjU5LjQxODMzMzg4OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmcy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMzpcXHRzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbiAzMjQ6XFx0e1xcbiAzMjU6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG5pLVxcdTAwM2V2b2wtXFx1MDAzZXNiO1xcbiAzMjY6XFx0XFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICphY3R4O1xcbiAzMjc6XFx0XFx0aW50IGVyciA9IDA7XFxuIDMyODpcXHRcXG4gMzI5OlxcdFxcdGFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbiAzMzA6XFx0XFx0aWYgKCFhY3R4KVxcbiAzMzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMzMjpcXHRcXHRXQVJOX09OKGFjdHgtXFx1MDAzZW1yZWMtXFx1MDAzZWxpbmtfY291bnQgIT0gMCk7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdC8qKlxcbiAzMzU6XFx0XFx0ICogbnRmc190cnVuY2F0ZV92ZnMgY2Fubm90IGJlIGNhbGxlZCBpbiBldmljdCgpIGNvbnRleHQgZHVlXFxuIDMzNjpcXHRcXHQgKiB0byBzb21lIGxpbWl0YXRpb25zLCB3aGljaCBhcmUgdGhlIEBuaSB2ZnMgaW5vZGUgaXMgbWFya2VkXFxuIDMzNzpcXHRcXHQgKiB3aXRoIElfRlJFRUlORywgYW5kIGV0Yy5cXG4gMzM4OlxcdFxcdCAqL1xcbiAzMzk6XFx0XFx0aWYgKE5Jbm9SdW5saXN0RGlydHkobmkpKSB7XFxuIDM0MDpcXHRcXHRcXHRlcnIgPSBudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKG5pLVxcdTAwM2V2b2wsIG5pLVxcdTAwM2VydW5saXN0LnJsKTtcXG4gMzQxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDM0MjpcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLFxcbiAzNDM6XFx0XFx0XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBmcmVlIGNsdXN0ZXJzLiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXFxcblxcXCIpO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHR3aGlsZSAoKGVyciA9IG50ZnNfYXR0cnNfd2FsayhhY3R4KSkgPT0gMCkge1xcbiAzNDc6XFx0XFx0XFx0aWYgKGFjdHgtXFx1MDAzZWF0dHItXFx1MDAzZW5vbl9yZXNpZGVudCBcXHUwMDI2XFx1MDAyNlxcbiAzNDg6XFx0XFx0XFx0XFx0XFx0KCFOSW5vUnVubGlzdERpcnR5KG5pKSB8fCBhY3R4LVxcdTAwM2VhdHRyLVxcdTAwM2V0eXBlICE9IEFUX0RBVEEpKSB7XFxuIDM0OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpybDtcXG4gMzUwOlxcdFxcdFxcdFxcdHNpemVfdCBuZXdfcmxfY291bnQ7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdFxcdFxcdHJsID0gbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MobmktXFx1MDAzZXZvbCwgYWN0eC1cXHUwMDNlYXR0ciwgTlVMTCxcXG4gMzUzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZuZXdfcmxfY291bnQpO1xcbiAzNTQ6XFx0XFx0XFx0XFx0aWYgKElTX0VSUihybCkpIHtcXG4gMzU1OlxcdFxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIocmwpO1xcbiAzNTY6XFx0XFx0XFx0XFx0XFx0bnRmc19lcnJvcihzYixcXG4gMzU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gZGVjb21wcmVzcyBydW5saXN0LiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXFxcblxcXCIpO1xcbiAzNTg6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDM1OTpcXHRcXHRcXHRcXHR9XFxuIDM2MDpcXHRcXG4gMzYxOlxcdFxcdFxcdFxcdGVyciA9IG50ZnNfY2x1c3Rlcl9mcmVlX2Zyb21fcmwobmktXFx1MDAzZXZvbCwgcmwpO1xcbiAzNjI6XFx0XFx0XFx0XFx0aWYgKGVycilcXG4gMzYzOlxcdFxcdFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsXFxuIDM2NDpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIGZyZWUgYXR0cmlidXRlIGNsdXN0ZXJzLiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXFxcblxcXCIpO1xcbiAzNjU6XFx0XFx0XFx0XFx0a3ZmcmVlKHJsKTtcXG4gMzY2OlxcdFxcdFxcdH1cXG4gMzY3OlxcdFxcdH1cXG4gMzY4OlxcdFxcbiAzNjk6XFx0XFx0bnRmc19yZWxlYXNlX2RpcnR5X2NsdXN0ZXJzKG5pLVxcdTAwM2V2b2wsIG5pLVxcdTAwM2VpX2RlYWxsb2NfY2x1c3RlcnMpO1xcbiAzNzA6XFx0XFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGFjdHgpO1xcbiAzNzE6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzcyOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6NTkuNDE4NTYwODJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMDA2MTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6XG5cbioqRGlnZ2luZyBpbnRvIE5URlMgQWxsb2NhdGlvbiBhbmQgRGVhbGxvY2F0aW9uKipcblxuSG9sZCBvbiBhIHNlY29uZCwgc29tZXRoaW5nIGRvZXNuJ3QgcXVpdGUgc2l0IHJpZ2h0IGhlcmUuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgZnVuY3Rpb24gd291bGQgYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnNgLiBUaGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgY2FzZS4gSSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBhdHRyaWJ1dGVzIGFyZSBiZWluZyBtYW5hZ2VkIGR1cmluZyBjbHVzdGVyIGRlYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IGZvciBub24tcmVzaWRlbnQgZGF0YS5cblxuTGV0IG1lIHJldGhpbmsgdGhpcy4gSWYgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpc24ndCBjYWxsZWQgdGhlcmUsIHRoZW4gd2hlcmUgaXMgdGhlIHJlbGV2YW50IG1ldGFkYXRhIGJlaW5nIHVwZGF0ZWQ/IENvdWxkIHRoZSBhdHRyaWJ1dGUgbGlzdCB1cGRhdGUgYmUgaGFuZGxlZCBieSBgbnRmc19tZnRfcmVjb3JkX2ZyZWVgPyBJdCBtYWtlcyBzZW5zZSB0aGF0IGZyZWVpbmcgYSBNYXN0ZXIgRmlsZSBUYWJsZSAoTUZUKSByZWNvcmQgd291bGQgbmVjZXNzaXRhdGUgdXBkYXRlcyB0byB0aGUgYXR0cmlidXRlIGxpc3QsIHBvdGVudGlhbGx5IHJlZmxlY3RpbmcgdGhlIHJlbW92YWwgb2YgZGF0YSBvciB0aGUgZnJlZWluZyBvZiBhc3NvY2lhdGVkIGNsdXN0ZXJzLiBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHN0YWNrIGFnYWluIGFuZCBjb25maXJtIHRoZSBsb2dpY2FsIGZsb3cgb2YgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU0OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6MDIuNzM4NjI1OTU2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc5NDY5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19tZnRfcmVjb3JkX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hdHRyaWIuYz0yNjIyPWludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0yNjcwLVxcdFxcdFxcdGxlMTZfdG9fY3B1KGN0eC1cXHUwMDNlbXJlYy1cXHUwMDNlYXR0cnNfb2Zmc2V0KSA9PSA4KSB7XFxuZnMvbnRmcy9hdHRyaWIuYzoyNjcxOlxcdFxcdGlmIChudGZzX21mdF9yZWNvcmRfZnJlZShuaS1cXHUwMDNldm9sLCBuaSkpIHtcXG5mcy9udGZzL2F0dHJpYi5jLTI2NzItXFx0XFx0XFx0bnRmc19kZWJ1ZyhcXFwiQ291bGRuJ3QgZnJlZSBNRlQgcmVjb3JkLlxcXFxuXFxcIik7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTI3NTk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjk2OC1cXHRcXHRpZiAoYXR0cl9zaXplID09IDgpIHtcXG5mcy9udGZzL2F0dHJpYi5jOjI5Njk6XFx0XFx0XFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKGF0dHJfbmktXFx1MDAzZXZvbCwgYXR0cl9uaSkpXFxuZnMvbnRmcy9hdHRyaWIuYy0yOTcwLVxcdFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJGYWlsZWQgdG8gZnJlZSBNRlQgcmVjb3JkXFxcIik7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTM2ODA9aW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMzk1My1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiQ291bGQgbm90IG1hcCBuZXcgTUZUIHJlY29yZFxcXCIpO1xcbmZzL250ZnMvYXR0cmliLmM6Mzk1NDpcXHRcXHRcXHRpZiAobnRmc19tZnRfcmVjb3JkX2ZyZWUobmktXFx1MDAzZXZvbCwgZXh0X25pKSlcXG5mcy9udGZzL2F0dHJpYi5jLTM5NTUtXFx0XFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkNvdWxkIG5vdCBmcmVlIE1GVCByZWNvcmRcXFwiKTtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMzk5MC1cXHRcXHRcXHR1bm1hcF9tZnRfcmVjb3JkKGV4dF9uaSk7XFxuZnMvbnRmcy9hdHRyaWIuYzozOTkxOlxcdFxcdFxcdGlmIChudGZzX21mdF9yZWNvcmRfZnJlZShuaS1cXHUwMDNldm9sLCBleHRfbmkpKVxcbmZzL250ZnMvYXR0cmliLmMtMzk5Mi1cXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiQ291bGQgbm90IGZyZWUgTUZUIHJlY29yZFxcXCIpO1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy00MDA0LVxcdFxcdFxcdHVubWFwX21mdF9yZWNvcmQoZXh0X25pKTtcXG5mcy9udGZzL2F0dHJpYi5jOjQwMDU6XFx0XFx0XFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsIGV4dF9uaSkpXFxuZnMvbnRmcy9hdHRyaWIuYy00MDA2LVxcdFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJDb3VsZG4ndCBmcmVlIE1GVCByZWNvcmRcXFwiKTtcXG4tLVxcbmZzL250ZnMvaW5vZGUuYz0yMjMzPXN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMjI0Ny1cXHR3aGlsZSAobmktXFx1MDAzZW5yX2V4dGVudHMpIHtcXG5mcy9udGZzL2lub2RlLmM6MjI0ODpcXHRcXHRlcnIgPSBudGZzX21mdF9yZWNvcmRfZnJlZShuaS1cXHUwMDNldm9sLCAqKG5pLVxcdTAwM2VleHQuZXh0ZW50X250ZnNfaW5vcykpO1xcbmZzL250ZnMvaW5vZGUuYy0yMjQ5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMjI1NS1cXHQvKiBEZWFsbG9jYXRlIGJhc2UgbWZ0IHJlY29yZCAqL1xcbmZzL250ZnMvaW5vZGUuYzoyMjU2OlxcdGVyciA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsIG5pKTtcXG5mcy9udGZzL2lub2RlLmMtMjI1Ny1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9tZnQuYz0yMDEzPWludCBudGZzX21mdF9yZWNvcmRfYWxsb2Moc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNvbnN0IGludCBtb2RlLFxcbi0tXFxuZnMvbnRmcy9tZnQuYy0yNDg5LS8qXFxuZnMvbnRmcy9tZnQuYzoyNDkwOiAqIG50ZnNfbWZ0X3JlY29yZF9mcmVlIC0gZnJlZSBhbiBtZnQgcmVjb3JkIG9uIGFuIG50ZnMgdm9sdW1lXFxuZnMvbnRmcy9tZnQuYy0yNDkxLSAqIEB2b2w6XFx0dm9sdW1lIG9uIHdoaWNoIHRvIGZyZWUgdGhlIG1mdCByZWNvcmRcXG4tLVxcbmZzL250ZnMvbWZ0LmMtMjQ5OS0gKi9cXG5mcy9udGZzL21mdC5jOjI1MDA6aW50IG50ZnNfbWZ0X3JlY29yZF9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuZnMvbnRmcy9tZnQuYy0yNTAxLXtcXG4tLVxcbmZzL250ZnMvbWZ0Lmg9Nzk9aW50IG50ZnNfbWZ0X3JlY29yZF9hbGxvYyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgaW50IG1vZGUsXFxuLS1cXG5mcy9udGZzL21mdC5oLTgxLVxcdFxcdHN0cnVjdCBtZnRfcmVjb3JkICoqbmlfbXJlYyk7XFxuZnMvbnRmcy9tZnQuaDo4MjppbnQgbnRmc19tZnRfcmVjb3JkX2ZyZWUoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuZnMvbnRmcy9tZnQuaC04My1pbnQgbnRmc19tZnRfcmVjb3Jkc193cml0ZShjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgdTY0IG1yZWYsXFxuLS1cXG5mcy9udGZzL25hbWVpLmM9Mzk0PXN0YXRpYyBzdHJ1Y3QgbnRmc19pbm9kZSAqX19udGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtNzE2LVxcbmZzL250ZnMvbmFtZWkuYzo3MTc6XFx0XFx0ZXJyMiA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsICoobmktXFx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zKSk7XFxuZnMvbnRmcy9uYW1laS5jLTcxOC1cXHRcXHRpZiAoZXJyMilcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy03MjItXFx0fVxcbmZzL250ZnMvbmFtZWkuYzo3MjM6XFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsIG5pKSlcXG5mcy9udGZzL25hbWVpLmMtNzI0LVxcdFxcdG50ZnNfZXJyb3Ioc2IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI3OjAzLjA3NjU3OTA4NFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDEzMjE4MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbnRmc19tZnRfcmVjb3JkX2ZyZWVgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgbmFtZSwgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZyBOVEZTLCBNRlQsIGFuZCAqZnJlZSouIFRoYXQgdGVsbHMgbWUgdGhpcyBsaWtlbHkgaGFzIHRvIGRvIHdpdGggaG93IHRoZSBNYXN0ZXIgRmlsZSBUYWJsZSwgdGhlIGhlYXJ0IG9mIE5URlMgZmlsZSBzeXN0ZW0gbWV0YWRhdGEsIG1hbmFnZXMgcmVjb3JkcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdXNlLiBJIGV4cGVjdCB3ZSdyZSBkZWFsaW5nIHdpdGggZWl0aGVyIHJlY2xhaW1pbmcgc3BhY2UgZnJvbSBkZWxldGVkIGZpbGVzIG9yIHBlcmhhcHMgZGVhbGxvY2F0aW5nIHJlY29yZHMgdGhhdCB3ZXJlIHVzZWQgZm9yIHZlcnkgdHJhbnNpZW50IGRhdGEuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHNpbXBseSBtYXJraW5nIHRoZSBNRlQgZW50cnkgYXMgZnJlZSwgb3IgaWYgaXQgYWxzbyBoYXMgcmVzcG9uc2liaWxpdHkgZm9yIHplcm9pbmcgYW55IHNlbnNpdGl2ZSBkYXRhLCBvciBtYXliZSBldmVuIGNvbnNvbGlkYXRpbmcgZnJlZSBzcGFjZSB3aXRoaW4gdGhlIE1GVC4gSSdtIGhvcGluZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGJpdG1hcCB0aGF0IHRyYWNrcyBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgTUZULiBBbmQgb2YgY291cnNlLCBJJ20gY3VyaW91cyBhYm91dCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGVtcGxveWVkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IHdoZW4gbW9kaWZ5aW5nIHRoaXMgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmUuIEknbSBlYWdlciB0byBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBpdCBhbGwgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjUyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6MDcuMDg5ODAxOTE1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL21mdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1MDA6XFx0aW50IG50ZnNfbWZ0X3JlY29yZF9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuMjUwMTpcXHR7XFxuMjUwMjpcXHRcXHR1NjQgbWZ0X25vO1xcbjI1MDM6XFx0XFx0aW50IGVycjtcXG4yNTA0OlxcdFxcdHUxNiBzZXFfbm87XFxuMjUwNTpcXHRcXHRfX2xlMTYgb2xkX3NlcV9ubztcXG4yNTA2OlxcdFxcdHN0cnVjdCBtZnRfcmVjb3JkICpuaV9tcmVjO1xcbjI1MDc6XFx0XFx0dW5zaWduZWQgaW50IG1lbWFsbG9jX2ZsYWdzO1xcbjI1MDg6XFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKmJhc2Vfbmk7XFxuMjUwOTpcXHRcXG4yNTEwOlxcdFxcdGlmICghdm9sIHx8ICFuaSlcXG4yNTExOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI1MTI6XFx0XFxuMjUxMzpcXHRcXHRudGZzX2RlYnVnKFxcXCJFbnRlcmluZyBmb3IgaW5vZGUgMHglbGx4LlxcXFxuXFxcIiwgKGxvbmcgbG9uZyluaS1cXHUwMDNlbWZ0X25vKTtcXG4yNTE0OlxcdFxcbjI1MTU6XFx0XFx0bmlfbXJlYyA9IG1hcF9tZnRfcmVjb3JkKG5pKTtcXG4yNTE2OlxcdFxcdGlmIChJU19FUlIobmlfbXJlYykpXFxuMjUxNzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4yNTE4OlxcdFxcbjI1MTk6XFx0XFx0LyogQ2FjaGUgdGhlIG1mdCByZWZlcmVuY2UgZm9yIGxhdGVyLiAqL1xcbjI1MjA6XFx0XFx0bWZ0X25vID0gbmktXFx1MDAzZW1mdF9ubztcXG4yNTIxOlxcdFxcbjI1MjI6XFx0XFx0LyogTWFyayB0aGUgbWZ0IHJlY29yZCBhcyBub3QgaW4gdXNlLiAqL1xcbjI1MjM6XFx0XFx0bmlfbXJlYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfk1GVF9SRUNPUkRfSU5fVVNFO1xcbjI1MjQ6XFx0XFxuMjUyNTpcXHRcXHQvKiBJbmNyZW1lbnQgdGhlIHNlcXVlbmNlIG51bWJlciwgc2tpcHBpbmcgemVybywgaWYgaXQgaXMgbm90IHplcm8uICovXFxuMjUyNjpcXHRcXHRvbGRfc2VxX25vID0gbmlfbXJlYy1cXHUwMDNlc2VxdWVuY2VfbnVtYmVyO1xcbjI1Mjc6XFx0XFx0c2VxX25vID0gbGUxNl90b19jcHUob2xkX3NlcV9ubyk7XFxuMjUyODpcXHRcXHRpZiAoc2VxX25vID09IDB4ZmZmZilcXG4yNTI5OlxcdFxcdFxcdHNlcV9ubyA9IDE7XFxuMjUzMDpcXHRcXHRlbHNlIGlmIChzZXFfbm8pXFxuMjUzMTpcXHRcXHRcXHRzZXFfbm8rKztcXG4yNTMyOlxcdFxcdG5pX21yZWMtXFx1MDAzZXNlcXVlbmNlX251bWJlciA9IGNwdV90b19sZTE2KHNlcV9ubyk7XFxuMjUzMzpcXHRcXG4yNTM0OlxcdFxcdGRvd25fcmVhZChcXHUwMDI2TlRGU19JKHZvbC1cXHUwMDNlbWZ0X2lubyktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuMjUzNTpcXHRcXHRlcnIgPSBudGZzX2dldF9ibG9ja19tZnRfcmVjb3JkKE5URlNfSSh2b2wtXFx1MDAzZW1mdF9pbm8pLCBuaSk7XFxuMjUzNjpcXHRcXHR1cF9yZWFkKFxcdTAwMjZOVEZTX0kodm9sLVxcdTAwM2VtZnRfaW5vKS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4yNTM3OlxcdFxcdGlmIChlcnIpIHtcXG4yNTM4OlxcdFxcdFxcdHVubWFwX21mdF9yZWNvcmQobmkpO1xcbjI1Mzk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNTQwOlxcdFxcdH1cXG4yNTQxOlxcdFxcbjI1NDI6XFx0XFx0LypcXG4yNTQzOlxcdFxcdCAqIFNldCB0aGUgbnRmcyBpbm9kZSBkaXJ0eSBhbmQgd3JpdGUgaXQgb3V0LiAgV2UgZG8gbm90IG5lZWQgdG8gd29ycnlcXG4yNTQ0OlxcdFxcdCAqIGFib3V0IHRoZSBiYXNlIGlub2RlIGhlcmUgc2luY2Ugd2hhdGV2ZXIgY2F1c2VkIHRoZSBleHRlbnQgbWZ0XFxuMjU0NTpcXHRcXHQgKiByZWNvcmQgdG8gYmUgZnJlZWQgaXMgZ3VhcmFudGVlZCB0byBkbyBpdCBhbHJlYWR5LlxcbjI1NDY6XFx0XFx0ICovXFxuMjU0NzpcXHRcXHROSW5vU2V0RGlydHkobmkpO1xcbjI1NDg6XFx0XFx0ZXJyID0gd3JpdGVfbWZ0X3JlY29yZChuaSwgbmlfbXJlYywgMCk7XFxuMjU0OTpcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzowNy4wOTAwMzYxOTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxMzMwODM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqVHJhY2luZyB0aGUgTlRGUyBBdHRyaWJ1dGUgTGlzdCBVcGRhdGUgRHVyaW5nIEV2aWN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIE5URlMgY29kZSBhbmQgSSd2ZSBoaXQgYSBwb3RlbnRpYWwgc25hZy4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB3aGVuIGEgTWFzdGVyIEZpbGUgVGFibGUgKE1GVCkgcmVjb3JkIGlzIGZyZWVkIHdpdGggYG50ZnNfbWZ0X3JlY29yZF9mcmVlYCwgaXQgd291bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIGFuIHVwZGF0ZSBvZiB0aGUgYXR0cmlidXRlIGxpc3QgdmlhIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAuIEJ1dCBob2xkIG9uLi4uIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBkb2luZyB0aGF0IGRpcmVjdGx5LiBUaGF0J3MgdW5leHBlY3RlZCBhbmQgbmVlZHMgc29tZSBjbGFyaWZpY2F0aW9uLiBXaGVyZSBleGFjdGx5ICppcyogdGhhdCBhbGwtaW1wb3J0YW50IGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgY2FsbCBoYXBwZW5pbmcgZHVyaW5nIHRoZSBldmljdGlvbiBwcm9jZXNzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlciB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkIHBvdGVudGlhbCBpbmNvbnNpc3RlbmNpZXMuXG5cbkFscmlnaHQsIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYW5vdGhlciBlbnRyeSBwb2ludC4gUGVyaGFwcyBJJ3ZlIG1pc3NlZCBzb21ldGhpbmcuIElmIGBudGZzX21mdF9yZWNvcmRfZnJlZWAgaXNuJ3QgdGhlIGRpcmVjdCB0cmlnZ2VyLCB0aGVuIEkgc2hvdWxkIHNoaWZ0IG15IGF0dGVudGlvbiB0byBgbnRmc19hdHRybGlzdF9lbnRyeV9ybWAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayBkZWVwZXIuIE1heWJlLCBqdXN0ICptYXliZSosIHRoZSBjcnVjaWFsIHVwZGF0ZSBpcyBoYXBwZW5pbmcgaW5zaWRlIHRoZSBmdW5jdGlvbiBmb3IgcmVtb3ZpbmcgYW4gZW50cnkgZnJvbSB0aGUgYXR0cmlidXRlIGxpc3QuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6MTEuNjAzMzQ3NDY4WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM4NjgwNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19hdHRybGlzdF9lbnRyeV9ybVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTI2MjI9aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI2NTItXFx0aWYgKE5Jbm9BdHRyTGlzdChiYXNlX25pKSBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IEFUX0FUVFJJQlVURV9MSVNUKSB7XFxuZnMvbnRmcy9hdHRyaWIuYzoyNjUzOlxcdFxcdGVyciA9IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oY3R4KTtcXG5mcy9udGZzL2F0dHJpYi5jLTI2NTQtXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jPTEyMT1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0LmMtMjQ5LS8qXFxuZnMvbnRmcy9hdHRybGlzdC5jOjI1MDogKiBudGZzX2F0dHJsaXN0X2VudHJ5X3JtIC0gcmVtb3ZlIGFuIGF0dHJpYnV0ZSBsaXN0IGF0dHJpYnV0ZSBlbnRyeVxcbmZzL250ZnMvYXR0cmxpc3QuYy0yNTEtICogQGN0eDpcXHRhdHRyaWJ1dGUgc2VhcmNoIGNvbnRleHQgZGVzY3JpYmluZyB0aGUgYXR0cmlidXRlIGxpc3QgZW50cnlcXG4tLVxcbmZzL250ZnMvYXR0cmxpc3QuYy0yNTYtICovXFxuZnMvbnRmcy9hdHRybGlzdC5jOjI1NzppbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG5mcy9udGZzL2F0dHJsaXN0LmMtMjU4LXtcXG4tLVxcbmZzL250ZnMvYXR0cmxpc3QuaD0xNj1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpO1xcbmZzL250ZnMvYXR0cmxpc3QuaDoxNzppbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7XFxuZnMvbnRmcy9hdHRybGlzdC5oLTE4LWludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI3OjExLjgyNzIyMTg4OVoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ2MTkyNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5URlMgQXR0cmlidXRlIExpc3QgUmVtb3ZhbCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGJ5IGBudGZzX2F0dHJfcmVjb3JkX3JtYCwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHVzZS1jYXNlcyBvZiBgbnRmc19hdHRyX3JlY29yZF9ybWAuIFdoZXJlIGlzICp0aGF0KiBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIG9mIGBudGZzX2F0dHJfcmVjb3JkX3JtYCB3aWxsIHRlbGwgbWUgd2hpY2ggc2l0dWF0aW9ucyB0cmlnZ2VyIHRoZSBhdHRyaWJ1dGUgcmVjb3JkIHJlbW92YWwgcHJvY2VzcywgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCB0aGUgaGlnaGVyLWxldmVsIGdvYWxzIHRoYXQgYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gIHVsdGltYXRlbHkgc3VwcG9ydHMuIElzIGl0IGR1cmluZyBmaWxlIGRlbGV0aW9uLCBhdHRyaWJ1dGUgcmVzaXppbmcsIGF0dHJpYnV0ZSBsaXN0IHJlLW9yZ2FuaXphdGlvbiwgb3Igc29tZSBvdGhlciBvcGVyYXRpb24/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBlc3RhYmxpc2guIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSBjb3JyZWN0IHJlbW92YWwgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgYWN0aW9uLCBhbmQgaWYgYSBkaWZmZXJlbnQgYXBwcm9hY2ggd291bGQgYmUgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE0MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI3OjE1LjE3MzQxNzEwNVoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMDE1NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfYXR0cl9yZWNvcmRfcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hdHRyaWIuYz0yNDg2PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI2MTUtLypcXG5mcy9udGZzL2F0dHJpYi5jOjI2MTY6ICogbnRmc19hdHRyX3JlY29yZF9ybSAtIHJlbW92ZSBhdHRyaWJ1dGUgZXh0ZW50XFxuZnMvbnRmcy9hdHRyaWIuYy0yNjE3LSAqIEBjdHg6XFx0c2VhcmNoIGNvbnRleHQgZGVzY3JpYmluZyB0aGUgYXR0cmlidXRlIHdoaWNoIHNob3VsZCBiZSByZW1vdmVkXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI2MjEtICovXFxuZnMvbnRmcy9hdHRyaWIuYzoyNjIyOmludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxcbmZzL250ZnMvYXR0cmliLmMtMjYyMy17XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI3MTEtXFx0XFx0LyogUmVtb3ZlIGF0dHJpYnV0ZSByZWNvcmQgaXRzZWxmLiAqL1xcbmZzL250ZnMvYXR0cmliLmM6MjcxMjpcXHRcXHRpZiAobnRmc19hdHRyX3JlY29yZF9ybShjdHgpKSB7XFxuZnMvbnRmcy9hdHRyaWIuYy0yNzEzLVxcdFxcdFxcdG50ZnNfZGVidWcoXFxcIkNvdWxkbid0IHJlbW92ZSBhdHRyaWJ1dGUgbGlzdC4gU3VjY2VlZCBhbnl3YXkuXFxcXG5cXFwiKTtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9MzY4MD1pbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0zOTE5LVxcdFxcdFxcdC8qIFJlbW92ZSB1bnVzZWQgYXR0cmlidXRlIHJlY29yZC4gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjM5MjA6XFx0XFx0XFx0ZXJyID0gbnRmc19hdHRyX3JlY29yZF9ybShjdHgpO1xcbmZzL250ZnMvYXR0cmliLmMtMzkyMS1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTUxMjc9aW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTUxNjktXFx0XFx0XFx0XFx0Q0FTRV9TRU5TSVRJVkUsIDAsIE5VTEwsIDAsIGN0eCkpKSB7XFxuZnMvbnRmcy9hdHRyaWIuYzo1MTcwOlxcdFxcdGVyciA9IG50ZnNfYXR0cl9yZWNvcmRfcm0oY3R4KTtcXG5mcy9udGZzL2F0dHJpYi5jLTUxNzEtXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuaD0xMjA9aW50IG50ZnNfYXR0cl9yZW1vdmUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwgX19sZTE2ICpuYW1lLFxcbmZzL250ZnMvYXR0cmliLmgtMTIxLVxcdFxcdHUzMiBuYW1lX2xlbik7XFxuZnMvbnRmcy9hdHRyaWIuaDoxMjI6aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xcbmZzL250ZnMvYXR0cmliLmgtMTIzLWludCBudGZzX2F0dHJfcmVjb3JkX21vdmVfdG8oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuLS1cXG5mcy9udGZzL2lub2RlLmM9MzAzMT1pbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTMxNTUtXFx0XFx0XFx0XFx0Q0FTRV9TRU5TSVRJVkUsIDAsIE5VTEwsIDAsIGN0eCkpIHtcXG5mcy9udGZzL2lub2RlLmM6MzE1NjpcXHRcXHRpZiAobnRmc19hdHRyX3JlY29yZF9ybShjdHgpKVxcbmZzL250ZnMvaW5vZGUuYy0zMTU3LVxcdFxcdFxcdG50ZnNfZXJyb3IobmktXFx1MDAzZXZvbC1cXHUwMDNlc2IsIFxcXCJSb2xsYmFjayBmYWlsZWQgdG8gcmVtb3ZlIGF0dHJsaXN0XFxcIik7XFxuLS1cXG5mcy9udGZzL25hbWVpLmM9ODMwPXN0YXRpYyBpbnQgbnRmc19kZWxldGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbm9kZSAqZGlyX25pLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTk0My1cXG5mcy9udGZzL25hbWVpLmM6OTQ0OlxcdGVyciA9IG50ZnNfYXR0cl9yZWNvcmRfcm0oYWN0eCk7XFxuZnMvbnRmcy9uYW1laS5jLTk0NS1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTQ0Mj1pbnQgbnRmc193cml0ZV92b2x1bWVfbGFiZWwoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNoYXIgKmxhYmVsKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTQ4Ny1cXHRpZiAoIXJldClcXG5mcy9udGZzL3N1cGVyLmM6NDg4OlxcdFxcdHJldCA9IG50ZnNfYXR0cl9yZWNvcmRfcm0oY3R4KTtcXG5mcy9udGZzL3N1cGVyLmMtNDg5LVxcdGVsc2UgaWYgKHJldCA9PSAtRU5PRU5UKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzoxNS4zMjY0NzA3MVoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc1MzgxNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG50ZnNfYXR0cl9ybWAgQ2FsbCBTaXRlcyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYG50ZnNfYXR0cl9ybWAgcG9wIHVwIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgaXNzdWUuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgXCJXYWl0LCBpcyB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogYmVpbmcgY2FsbGVkIGZyb20gc29tZXdoZXJlIHVuZXhwZWN0ZWQ/XCIgTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBsb3ctbGV2ZWwgZnVuY3Rpb24gcmVsYXRlZCB0byBOVEZTIGF0dHJpYnV0ZSBtYW5hZ2VtZW50IGlzIHVzdWFsbHkgdGlnaHRseSBjb3VwbGVkIHdpdGggYSBzcGVjaWZpYyBtb2R1bGUgb3Igc3Vic3lzdGVtIHdpdGhpbiB0aGUga2VybmVsIG9yIGZpbGVzeXN0ZW0gZHJpdmVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY2FsbCBjaGFpbiB0aGF0IGxlYWRzIHRvIGBudGZzX2F0dHJfcm1gLiBBbnkgdW5leHBlY3RlZCB1c2FnZSBwYXR0ZXJucyBjb3VsZCBzdWdnZXN0IGEgYnVnLCB2dWxuZXJhYmlsaXR5LCBvciBtaXNjb25maWd1cmF0aW9uLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yIHJpZ2h0IG5vdy4gSSBoYXZlIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHRoaXMgY29kZSBpcyBiZWluZyBpbnZva2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI3OjE4LjYwMTg1NTIwOFoiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNzk4NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfYXR0cl9ybVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTI3NTk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjkzOS1cXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUganVzdCBhZGRlZCBhdHRyaWJ1dGVcXFwiKTtcXG5mcy9udGZzL2F0dHJpYi5jOjI5NDA6XFx0XFx0aWYgKG50ZnNfYXR0cl9ybShhdHRyX25pKSlcXG5mcy9udGZzL2F0dHJpYi5jLTI5NDEtXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkZhaWxlZCB0byByZW1vdmUganVzdCBhZGRlZCBhdHRyaWJ1dGVcXFwiKTtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NDk3MD1pbnQgbnRmc19hdHRyX21hcF9jbHVzdGVyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbl9zdGFydCwgczY0ICpsY25fc3RhcnQsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTUxMjAtLypcXG5mcy9udGZzL2F0dHJpYi5jOjUxMjE6ICogbnRmc19hdHRyX3JtIC0gcmVtb3ZlIGF0dHJpYnV0ZSBmcm9tIG50ZnMgaW5vZGVcXG5mcy9udGZzL2F0dHJpYi5jLTUxMjItICogQG5pOlxcdFxcdG9wZW5lZCBudGZzIGF0dHJpYnV0ZSB0byBkZWxldGVcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNTEyNi0gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjUxMjc6aW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuZnMvbnRmcy9hdHRyaWIuYy01MTI4LXtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NTIwOT1pbnQgbnRmc19hdHRyX3JlbW92ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IF9fbGUzMiB0eXBlLCBfX2xlMTYgKm5hbWUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTUyMjktXFxuZnMvbnRmcy9hdHRyaWIuYzo1MjMwOlxcdGVyciA9IG50ZnNfYXR0cl9ybShhdHRyX25pKTtcXG5mcy9udGZzL2F0dHJpYi5jLTUyMzEtXFx0aWYgKGVycilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmg9MTE2PWludCBudGZzX2F0dHJfdHJ1bmNhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSk7XFxuZnMvbnRmcy9hdHRyaWIuaDoxMTc6aW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xcbmZzL250ZnMvYXR0cmliLmgtMTE4LWludCBudGZzX2F0dHJfZXhpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwgX19sZTE2ICpuYW1lLFxcbi0tXFxuZnMvbnRmcy9yZXBhcnNlLmM9NTkzPXN0YXRpYyBpbnQgdXBkYXRlX3JlcGFyc2VfZGF0YShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKnhyLFxcbi0tXFxuZnMvbnRmcy9yZXBhcnNlLmMtNjI5LVxcdFxcdCAqL1xcbmZzL250ZnMvcmVwYXJzZS5jOjYzMDpcXHRcXHRudGZzX2F0dHJfcm0ocnBfbmkpO1xcbmZzL250ZnMvcmVwYXJzZS5jLTYzMS1cXHRcXHRudGZzX2Vycm9yKG5pLVxcdTAwM2V2b2wtXFx1MDAzZXNiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzoxOC43MzU2NjE2OTNaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ5NzA2OTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgTlRGUyBJbm9kZSBFdmljdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgTlRGUyBpbm9kZSBldmljdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIG9mZjsgSSB0aG91Z2h0IGBudGZzX2F0dHJfcmVtb3ZlYCB3YXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGVgLCBidXQgdGhhdCdzIG5vdCBxdWl0ZSByaWdodC4gSXQgc2VlbXMgYG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGVgIGFjdHVhbGx5IGNhbGxzIGBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzYCBhbmQgYG50ZnNfbWZ0X3JlY29yZF9mcmVlYC4gVGhhdCdzIGltcG9ydGFudC5cblxuQWgsIGhlcmUncyB0aGUga2V5OiB0aGlzIHBhdGNoIGlzIHNheWluZyB0aGF0IGBnZW5lcmljX3NodXRkb3duX3N1cGVyKClgIGNsZWFycyBgU0JfQUNUSVZFYCAqYmVmb3JlKiBldmljdGluZyBjYWNoZWQgaW5vZGVzLiBXaGljaCBtZWFucyB3ZSAqY2FuJ3QqIGxvb2sgdXAgdGhlIGF0dHJpYnV0ZS1saXN0IGlub2RlIGFmdGVyIGBTQl9BQ1RJVkVgIGlzIGNsZWFyZWQgYmVjYXVzZSBpdCBtaWdodCBhbHJlYWR5IGJlIGluIHRoZSBgSV9GUkVFSU5HYCBzdGF0ZSwgYW5kIHdhaXRpbmcgb24gaXQgY291bGQgY2F1c2UgYSBuYXN0eSBzZWxmLWRlYWRsb2NrLiBUaGF0IHJlYWxseSBjbGFyaWZpZXMgdGhlIHByb2JsZW0gdGhleSdyZSBhZGRyZXNzaW5nLlxuXG5TbywgdGhpcyBgbnRmc19hdHRybGlzdF91cGRhdGVgIHJvdXRpbmUgaXMgZGVmaW5pdGVseSB0cmlnZ2VyZWQgZHVyaW5nIGV2aWN0aW9uLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgZWxzZSBpdCdzIGNhbGxlZCBmcm9tLiBMZXQncyBzZWUuLi4gaXQncyBjYWxsZWQgZnJvbSBgbnRmc19hdHRybGlzdF9lbnRyeV9ybWAsIGBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZGAsIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgLCBgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZWAsIGBudGZzX2F0dHJfdXBkYXRlX21ldGFgLCBgbnRmc19pcl9yZXBhcmVudGAsIGFuZCBgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3RgLiBUaGF0IGdpdmVzIG1lIGEgYnJvYWRlciBwaWN0dXJlIG9mIGl0cyByb2xlLlxuXG5TcGVjaWZpY2FsbHksIGR1cmluZyBldmljdGlvbiwgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBjYWxscyBgbnRmc19kZWxldGVfYmFzZV9pbm9kZWAsIHdoaWNoLCBhcyB3ZSBlc3RhYmxpc2hlZCwgY2FsbHMgYG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnNgLiBBbmQgdGhlbiBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AgY2FsbHMgYG50ZnNfY2x1c3Rlcl9mcmVlX2Zyb21fcmxgLiBHb3QgaXQuXG5cbkJ1dCBob2xkIG9uLCBgbnRmc19ldmljdF9iaWdfaW5vZGVgICphbHNvKiBjYWxscyBgbnRmc19jb21taXRfaW5vZGVgIGlmIHRoZSBpbm9kZSBpcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYG50ZnNfY29tbWl0X2lub2RlYCBpbiB0aGlzIGNvbnRleHQuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSdsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM2NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzoyNS4yMzI3MzQxOTJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NzY5MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfY29tbWl0X2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5vZGUuYz0yMjcyPXZvaWQgbnRmc19ldmljdF9iaWdfaW5vZGUoc3RydWN0IGlub2RlICp2aSlcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0yMjg4LVxcdFxcdC8qIENvbW1pdHRpbmcgdGhlIGlub2RlIGFsc28gY29tbWl0cyBhbGwgZXh0ZW50IGlub2Rlcy4gKi9cXG5mcy9udGZzL2lub2RlLmM6MjI4OTpcXHRcXHRudGZzX2NvbW1pdF9pbm9kZSh2aSk7XFxuZnMvbnRmcy9pbm9kZS5jLTIyOTAtXFxuLS1cXG5mcy9udGZzL2lub2RlLmg9MzQ2PWludCBudGZzX2lub2RlX2Nsb3NlKHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuZnMvbnRmcy9pbm9kZS5oLTM0Ny1cXG5mcy9udGZzL2lub2RlLmg6MzQ4OnN0YXRpYyBpbmxpbmUgdm9pZCBudGZzX2NvbW1pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKVxcbmZzL250ZnMvaW5vZGUuaC0zNDkte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTE3MTE9c3RhdGljIHZvaWQgbnRmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNzIyLVxcdCAqL1xcbmZzL250ZnMvc3VwZXIuYzoxNzIzOlxcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cXHUwMDNldm9sX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jLTE3MjQtXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTcyNy1cXHRcXHRpZiAodm9sLVxcdTAwM2VleHRlbmRfaW5vKVxcbmZzL250ZnMvc3VwZXIuYzoxNzI4OlxcdFxcdFxcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cXHUwMDNlZXh0ZW5kX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jLTE3MjktXFx0XFx0aWYgKHZvbC1cXHUwMDNlc2VjdXJlX2lubylcXG5mcy9udGZzL3N1cGVyLmM6MTczMDpcXHRcXHRcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZXNlY3VyZV9pbm8pO1xcbmZzL250ZnMvc3VwZXIuYy0xNzMxLVxcdH1cXG5mcy9udGZzL3N1cGVyLmMtMTczMi1cXG5mcy9udGZzL3N1cGVyLmM6MTczMzpcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZXJvb3RfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmMtMTczNC1cXG5mcy9udGZzL3N1cGVyLmM6MTczNTpcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZWxjbmJtcF9pbm8pO1xcbmZzL250ZnMvc3VwZXIuYy0xNzM2LVxcbmZzL250ZnMvc3VwZXIuYy0xNzM3LVxcdC8qXFxuZnMvbnRmcy9zdXBlci5jOjE3Mzg6XFx0ICogdGhlIEdGUF9OT0ZTIHNjb3BlIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSBudGZzX2NvbW1pdF9pbm9kZVxcbmZzL250ZnMvc3VwZXIuYy0xNzM5LVxcdCAqIGRvZXMgbm90aGluZ1xcbmZzL250ZnMvc3VwZXIuYy0xNzQwLVxcdCAqL1xcbmZzL250ZnMvc3VwZXIuYzoxNzQxOlxcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cXHUwMDNlbWZ0Ym1wX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jLTE3NDItXFxuZnMvbnRmcy9zdXBlci5jLTE3NDMtXFx0aWYgKHZvbC1cXHUwMDNlbG9nZmlsZV9pbm8pXFxuZnMvbnRmcy9zdXBlci5jOjE3NDQ6XFx0XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2Vsb2dmaWxlX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jLTE3NDUtXFxuZnMvbnRmcy9zdXBlci5jLTE3NDYtXFx0aWYgKHZvbC1cXHUwMDNlbWZ0bWlycl9pbm8pXFxuZnMvbnRmcy9zdXBlci5jOjE3NDc6XFx0XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2VtZnRtaXJyX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jOjE3NDg6XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2VtZnRfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmMtMTc0OS1cXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNzU4LVxcdFxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gY2xlYXIgZGlydHkgYml0IGluIHZvbHVtZSBpbmZvcm1hdGlvbiBmbGFncy4gIFJ1biBjaGtkc2suXFxcIik7XFxuZnMvbnRmcy9zdXBlci5jOjE3NTk6XFx0XFx0XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2V2b2xfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmM6MTc2MDpcXHRcXHRcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZXJvb3RfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmMtMTc2MS1cXHRcXHRcXHRpZiAodm9sLVxcdTAwM2VtZnRtaXJyX2lubylcXG5mcy9udGZzL3N1cGVyLmM6MTc2MjpcXHRcXHRcXHRcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZW1mdG1pcnJfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmM6MTc2MzpcXHRcXHRcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZW1mdF9pbm8pO1xcbmZzL250ZnMvc3VwZXIuYy0xNzY0LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTc5OS1cXHRcXHQvKiBSZS1jb21taXQgdGhlIG1mdCBtaXJyb3IgYW5kIG1mdCBqdXN0IGluIGNhc2UuICovXFxuZnMvbnRmcy9zdXBlci5jOjE4MDA6XFx0XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2VtZnRtaXJyX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jOjE4MDE6XFx0XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2VtZnRfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmMtMTgwMi1cXHRcXHRpcHV0KHZvbC1cXHUwMDNlbWZ0bWlycl9pbm8pO1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE4MDktXFx0ICovXFxuZnMvbnRmcy9zdXBlci5jOjE4MTA6XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2VtZnRfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmMtMTgxMS1cXHR3cml0ZV9pbm9kZV9ub3codm9sLVxcdTAwM2VtZnRfaW5vLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6MjUuMzI5NTE5MDY5WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjI0MjI4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVEZTIElub2RlIENvbW1pdCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IChvciBwZXJoYXBzIGRlbHZlIGRlZXBlcikgaW50byB0aGUgbWVjaGFuaWNzIG9mIGBudGZzX2NvbW1pdF9pbm9kZWAuIEdpdmVuIGl0cyBuYW1lLCBpdCdzIG9idmlvdXNseSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgaW5vZGUgbWV0YWRhdGEgaW50ZWdyaXR5IHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBzbyBuYXR1cmFsbHksIEknbSB0aGlua2luZywgXCJ3aGVyZSBpcyB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24/XCIgSXQgd291bGQgbWFrZSBzZW5zZSBmb3IgdGhhdCB0byBsaXZlIHdpdGhpbiBgZnMvbnRmcy9pbm9kZS5oYC4gVGltZSB0byBkaWcgaW50byB0aGUgaGVhZGVyIGZpbGUgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMuIEknbSBrZWVuIHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGluZ3MsIHdoYXQgc3BpbmxvY2tzIG9yIHNlbWFwaG9yZXMgbWlnaHQgYmUgaW52b2x2ZWQsIGFuZCB3aGF0IGNvbnNpc3RlbmN5IG1vZGVscyBhcmUgdXNlZC4gSSBhc3N1bWUgdGhhdCBpdCdzIGdvaW5nIHRvIGluY2x1ZGUgZGVhbGluZyB3aXRoIHdyaXRpbmcgZGlydHkgbWV0YWRhdGEgdG8gdGhlIE1GVCAoTWFzdGVyIEZpbGUgVGFibGUpLiBXb25kZXJpbmcgaG93IGl0IG1hbmFnZXMgcG90ZW50aWFsIGNvbmZsaWN0cyBvciByYWNlIGNvbmRpdGlvbnMgYW5kIHdoYXQgbGV2ZWwgb2YgYXRvbWljaXR5IGlzIGd1YXJhbnRlZWQsIHRoaW5raW5nIHBlcmhhcHMgaXQgcmVsaWVzIG9uIGpvdXJuYWxlZCBtZXRhZGF0YSB1cGRhdGVzIHRvIHJlY292ZXIgZnJvbSBpc3N1ZXMuIFRoaXMgaXMgdGhlIGx5bmNocGluIG9mIGlub2RlIG1hbmFnZW1lbnQgZm9yIE5URlMsIGFuZCBnZXR0aW5nIHRoZSBkZXRhaWxzIHJpZ2h0IGhlcmUgaXMgYWJzb2x1dGVseSBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzoyOS4wOTE5NDUxNDlaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvaW5vZGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNDgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDg6XFx0c3RhdGljIGlubGluZSB2b2lkIG50ZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpXFxuIDM0OTpcXHR7XFxuIDM1MDpcXHRcXHRfX250ZnNfd3JpdGVfaW5vZGUodmksIDEpO1xcbiAzNTE6XFx0fVxcbiAzNTI6XFx0XFxuIDM1MzpcXHRpbnQgbnRmc19pbm9kZV9zeW5jX2ZpbGVuYW1lKHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuIDM1NDpcXHRpbnQgbnRmc19leHRlbmRfaW5pdGlhbGl6ZWRfc2l6ZShzdHJ1Y3QgaW5vZGUgKnZpLCBjb25zdCBsb2ZmX3Qgb2Zmc2V0LFxcbiAzNTU6XFx0XFx0XFx0Y29uc3QgbG9mZl90IG5ld19zaXplLCBib29sIGJzeW5jKTtcXG4gMzU2OlxcdHZvaWQgbnRmc19zZXRfdmZzX29wZXJhdGlvbnMoc3RydWN0IGlub2RlICppbm9kZSwgbW9kZV90IG1vZGUsIGRldl90IGRldik7XFxuIDM1NzpcXHRzdHJ1Y3QgZm9saW8gKm50ZnNfZ2V0X2xvY2tlZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gMzU4OlxcdFxcdFxcdHBnb2ZmX3QgaW5kZXgsIHBnb2ZmX3QgZW5kX2luZGV4LCBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEpO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHQjZW5kaWYgLyogX0xJTlVYX05URlNfSU5PREVfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzoyOS4wOTIwODE1NzlaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NDExNjIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqRGl2aW5nIGludG8gdGhlIE5URlMgSW5vZGUgV3JpdGUgUGF0aCoqXG5cbkFscmlnaHQsIHNvIGBudGZzX2NvbW1pdF9pbm9kZWAgdHJpZ2dlcnMgYSBjaGFpbiByZWFjdGlvbiwgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYF9fbnRmc193cml0ZV9pbm9kZSh2aSwgMSlgLiBUaGF0J3MgdGhlIGtleSBmdW5jdGlvbi4gTm93LCBgX19udGZzX3dyaXRlX2lub2RlYCwgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEl0J3MgY2FsbGluZyBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCB3aGljaCwgaW4gdHVybiwgY2FsbHMgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYC4gQ2xlYXJseSwgdGhpcyBpcyB0aGUgY29yZSBvZiBob3cgdGhlIGF0dHJpYnV0ZSBsaXN0IGRhdGEgaXMgYmVpbmcgdXBkYXRlZC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19udGZzX3dyaXRlX2lub2RlYCwgc28gSSdsbCBqdW1wIG92ZXIgdG8gYGZzL250ZnMvaW5vZGUuY2AgdG8gc2VlIGhvdyBpdCdzIGFjdHVhbGx5IGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA1MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6MzIuMzc2MjAyNjI3WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcyMyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjcyMzpcXHRpbnQgX19udGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqdmksIGludCBzeW5jKVxcbjI3MjQ6XFx0e1xcbjI3MjU6XFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTtcXG4yNzI2OlxcdFxcdHN0cnVjdCBudGZzX2lub2RlICptZnRfbmkgPSBOVEZTX0kobmktXFx1MDAzZXZvbC1cXHUwMDNlbWZ0X2lubyk7XFxuMjcyNzpcXHRcXHRzdHJ1Y3QgbWZ0X3JlY29yZCAqbTtcXG4yNzI4OlxcdFxcdGludCBlcnIgPSAwO1xcbjI3Mjk6XFx0XFx0Ym9vbCBuZWVkX2lwdXQgPSBmYWxzZTtcXG4yNzMwOlxcdFxcbjI3MzE6XFx0XFx0bnRmc19kZWJ1ZyhcXFwiRW50ZXJpbmcgZm9yICVzaW5vZGUgMHglbGx4LlxcXCIsIE5Jbm9BdHRyKG5pKSA/IFxcXCJhdHRyIFxcXCIgOiBcXFwiXFxcIixcXG4yNzMyOlxcdFxcdFxcdFxcdG5pLVxcdTAwM2VtZnRfbm8pO1xcbjI3MzM6XFx0XFxuMjczNDpcXHRcXHRpZiAoTlZvbFNodXRkb3duKG5pLVxcdTAwM2V2b2wpKVxcbjI3MzU6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuMjczNjpcXHRcXG4yNzM3OlxcdFxcdC8qXFxuMjczODpcXHRcXHQgKiBEaXJ0eSBhdHRyaWJ1dGUgaW5vZGVzIGFyZSB3cml0dGVuIHZpYSB0aGVpciByZWFsIGlub2RlcyBzbyBqdXN0XFxuMjczOTpcXHRcXHQgKiBjbGVhbiB0aGVtIGhlcmUuICBBY2Nlc3MgdGltZSB1cGRhdGVzIGFyZSB0YWtlbiBjYXJlIG9mZiB3aGVuIHRoZVxcbjI3NDA6XFx0XFx0ICogcmVhbCBpbm9kZSBpcyB3cml0dGVuLlxcbjI3NDE6XFx0XFx0ICovXFxuMjc0MjpcXHRcXHRpZiAoTklub0F0dHIobmkpIHx8IG5pLVxcdTAwM2Vucl9leHRlbnRzID09IC0xKSB7XFxuMjc0MzpcXHRcXHRcXHROSW5vQ2xlYXJEaXJ0eShuaSk7XFxuMjc0NDpcXHRcXHRcXHRudGZzX2RlYnVnKFxcXCJEb25lLlxcXCIpO1xcbjI3NDU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjc0NjpcXHRcXHR9XFxuMjc0NzpcXHRcXG4yNzQ4OlxcdFxcdC8qIGlncmFiIHByZXZlbnRzIHZpIGZyb20gYmVpbmcgZXZpY3RlZCB3aGlsZSBtcmVjX2xvY2sgaXMgaG9sZC4gKi9cXG4yNzQ5OlxcdFxcdGlmIChpZ3JhYih2aSkgIT0gTlVMTClcXG4yNzUwOlxcdFxcdFxcdG5lZWRfaXB1dCA9IHRydWU7XFxuMjc1MTpcXHRcXG4yNzUyOlxcdFxcdG11dGV4X2xvY2tfbmVzdGVkKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7XFxuMjc1MzpcXHRcXHQvKiBNYXAsIHBpbiwgYW5kIGxvY2sgdGhlIG1mdCByZWNvcmQgYmVsb25naW5nIHRvIHRoZSBpbm9kZS4gKi9cXG4yNzU0OlxcdFxcdG0gPSBtYXBfbWZ0X3JlY29yZChuaSk7XFxuMjc1NTpcXHRcXHRpZiAoSVNfRVJSKG0pKSB7XFxuMjc1NjpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5pLVxcdTAwM2VtcmVjX2xvY2spO1xcbjI3NTc6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihtKTtcXG4yNzU4OlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4yNzU5OlxcdFxcdH1cXG4yNzYwOlxcdFxcbjI3NjE6XFx0XFx0aWYgKE5Jbm9Ob25SZXNpZGVudChuaSkgXFx1MDAyNlxcdTAwMjYgTklub1J1bmxpc3REaXJ0eShuaSkpIHtcXG4yNzYyOlxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbjI3NjM6XFx0XFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcXG4yNzY0OlxcdFxcdFxcdGlmICghZXJyKVxcbjI3NjU6XFx0XFx0XFx0XFx0Tklub0NsZWFyUnVubGlzdERpcnR5KG5pKTtcXG4yNzY2OlxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4yNzY3OlxcdFxcdH1cXG4yNzY4OlxcdFxcbjI3Njk6XFx0XFx0ZXJyID0gbnRmc19pbm9kZV9zeW5jX3N0YW5kYXJkX2luZm9ybWF0aW9uKHZpLCBtKTtcXG4yNzcwOlxcdFxcdGlmIChlcnIpXFxuMjc3MTpcXHRcXHRcXHRnb3RvIHVubV9lcnJfb3V0O1xcbjI3NzI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI3OjMyLjM3NjUxOTY4N1oiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTE3OTUxMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBFdmljdGlvbiBEZWFkbG9jayBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgTlRGUyBwYXRjaCBhbmQgaGVyZSdzIG15IGJyZWFrZG93bi4gSXQgbG9va3MgbGlrZSBgbnRmc19hdHRybGlzdF91cGRhdGVgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGR1cmluZyB0aGUgZXZpY3Rpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGZyb20gYF9fbnRmc193cml0ZV9pbm9kZWAsIHdoaWNoIGlzIGl0c2VsZiBjYWxsZWQgdGhyb3VnaCBgbnRmc19jb21taXRfaW5vZGVgIHdpdGhpbiBgbnRmc19ldmljdF9iaWdfaW5vZGVgLiBUaGUga2V5IHBhcnQgb2YgdGhpcyBwYXRjaCBpcyB0aGUgYWRkaXRpb24gb2YgYSBjaGVjayBmb3IgYFNCX0FDVElWRWAgd2l0aGluIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAsIGFuZCByZXR1cm5pbmcgYC1FSU9gIGlmIGl0J3Mgbm90IHNldC5cblxuVGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMgaXMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCAqaG93KiBpdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBkZWFkbG9jay4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gVGhlIHNjZW5hcmlvIGlzIHRoaXM6IHdlIG1vdW50IGFuIE5URlMgdm9sdW1lLCBkbyBzb21ldGhpbmcgdGhhdCBkaXJ0aWVzIHRoZSBydW5saXN0IG9mIGFuIGlub2RlIHdpdGggYW4gYXR0cmlidXRlIGxpc3QsIGFuZCB0aGVuIHVubW91bnQgaXQuIER1cmluZyB1bm1vdW50LCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAgY2xlYXJzIHRoZSBgU0JfQUNUSVZFYCBmbGFnLCB3aGljaCBpcyBjcnVjaWFsLiBUaGVuLCBgZXZpY3RfaW5vZGVzYCBnZXRzIGNhbGxlZCwga2lja2luZyBvZmYgdGhlIGlub2RlIGV2aWN0aW9uIHByb2Nlc3MuIFRoaXMgbGVhZHMgdG8gYG50ZnNfZXZpY3RfYmlnX2lub2RlYCwgd2hpY2ggY2FsbHMgYG50ZnNfY29tbWl0X2lub2RlYCwgd2hpY2ggY2FsbHMgYF9fbnRmc193cml0ZV9pbm9kZWAuIFRoaXMgdGhlbiBjYWxscyBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCBhbmQgKnRoYXQqIGNhbGxzIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAuXG5cblRoZSBwb3RlbnRpYWwgaXNzdWUgaXMgd2l0aGluIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgaXRzZWxmLiBJdCB0cmllcyB0byBnZXQgdGhlIGF0dHJpYnV0ZSBsaXN0IGlub2RlIHVzaW5nIGBudGZzX2F0dHJfaWdldGAuIE5vdywgYG50ZnNfYXR0cl9pZ2V0YCBjYWxscyBgaWdldDVfbG9ja2VkYC4gSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGlmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGJlaW5nIGZyZWVkIChJX0ZSRUVJTkcpLCBgaWdldDVfbG9ja2VkYCB3aWxsIHdhaXQgb24gYF9fd2FpdF9vbl9mcmVlaW5nX2lub2RlYC4gU2luY2Ugd2UncmUgaW4gYGV2aWN0X2lub2Rlc2AgYW5kIGBTQl9BQ1RJVkVgIGlzIGNsZWFyZWQsIHdlIGNvdWxkIGJlIHdhaXRpbmcgb24gYW4gaW5vZGUgdGhhdCBpcyBzaW11bHRhbmVvdXNseSBiZWluZyBldmljdGVkLCBsZWFkaW5nIHRvIGEgZGVhZGxvY2suIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzIGJ5IHJldHVybmluZyBgLUVJT2AgaWYgYFNCX0FDVElWRWAgaXMgY2xlYXIgYmVmb3JlIGV2ZW4gYXR0ZW1wdGluZyB0byBnZXQgdGhlIGlub2RlLiBUaGlzIHByZXZlbnRzIHRoZSB3YWl0aW5nIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyBpcyBhIGNsZXZlciBhbmQgZnVuY3Rpb25hbCBmaXguXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgY29kZSBpbiBgZnMvbnRmcy9hdHRybGlzdC5jYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExMzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzo0MC40OTQ0NzQ0MTZaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvYXR0cmxpc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NDpcXHRpbnQgbnRmc19hdHRybGlzdF91cGRhdGUoc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmF0dHJfdmk7XFxuICA1NzpcXHRcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaTtcXG4gIDU4OlxcdFxcdGludCBlcnI7XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdC8qXFxuICA2MTpcXHRcXHQgKiBnZW5lcmljX3NodXRkb3duX3N1cGVyKCkgY2xlYXJzIFNCX0FDVElWRSBiZWZvcmUgZXZpY3RpbmcgY2FjaGVkXFxuICA2MjpcXHRcXHQgKiBpbm9kZXMuIERvIG5vdCBsb29rIHVwIHRoZSBhdHRyaWJ1dGUtbGlzdCBpbm9kZSBhZnRlciBTQl9BQ1RJVkUgaGFzXFxuICA2MzpcXHRcXHQgKiBiZWVuIGNsZWFyZWQ7IGl0IG1heSBhbHJlYWR5IGJlIElfRlJFRUlORywgYW5kIHdhaXRpbmcgb24gaXQgY2FuXFxuICA2NDpcXHRcXHQgKiBzZWxmLWRlYWRsb2NrLlxcbiAgNjU6XFx0XFx0ICovXFxuICA2NjpcXHRcXHRpZiAoIShWRlNfSShiYXNlX25pKS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX0FDVElWRSkpXFxuICA2NzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0YXR0cl92aSA9IG50ZnNfYXR0cl9pZ2V0KFZGU19JKGJhc2VfbmkpLCBBVF9BVFRSSUJVVEVfTElTVCwgQVRfVU5OQU1FRCwgMCk7XFxuICA3MDpcXHRcXHRpZiAoSVNfRVJSKGF0dHJfdmkpKSB7XFxuICA3MTpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xcbiAgNzI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gIDczOlxcdFxcdH1cXG4gIDc0OlxcdFxcdGF0dHJfbmkgPSBOVEZTX0koYXR0cl92aSk7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGVyciA9IG50ZnNfYXR0cl90cnVuY2F0ZV9pKGF0dHJfbmksIGJhc2VfbmktXFx1MDAzZWF0dHJfbGlzdF9zaXplLCBIT0xFU19OTyk7XFxuICA3NzpcXHRcXHRpZiAoZXJyID09IC1FTk9TUEMgXFx1MDAyNlxcdTAwMjYgYXR0cl9uaS1cXHUwMDNlbWZ0X25vID09IEZJTEVfTUZUKSB7XFxuICA3ODpcXHRcXHRcXHRlcnIgPSBudGZzX2F0dHJfdHJ1bmNhdGUoYXR0cl9uaSwgMCk7XFxuICA3OTpcXHRcXHRcXHRpZiAoZXJyIHx8IG50ZnNfYXR0cl90cnVuY2F0ZV9pKGF0dHJfbmksIGJhc2VfbmktXFx1MDAzZWF0dHJfbGlzdF9zaXplLCBIT0xFU19OTykgIT0gMCkge1xcbiAgODA6XFx0XFx0XFx0XFx0aXB1dChhdHRyX3ZpKTtcXG4gIDgxOlxcdFxcdFxcdFxcdG50ZnNfZXJyb3IoYmFzZV9uaS1cXHUwMDNldm9sLVxcdTAwM2VzYixcXG4gIDgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gdHJ1bmNhdGUgYXR0cmlidXRlIGxpc3Qgb2YgaW5vZGUgJSNsbHhcXFwiLFxcbiAgODM6XFx0XFx0XFx0XFx0XFx0XFx0KGxvbmcgbG9uZyliYXNlX25pLVxcdTAwM2VtZnRfbm8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzo0MC40OTQ2MzA2OTZaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcxNTY3MTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTlRGUyBGaWxlc3lzdGVtIERlYWRsb2NrIEZpeCoqXG5cbk9rYXksIHRoaXMgcGF0Y2ggaXMgdGhlIHJlYWwgZGVhbCwgZml4aW5nIGEgZGVhZGxvY2sgaW4gdGhlIE5URlMgZHJpdmVyLiBUaGUgY2hhbmdlcyBhcmUgY2xlYXJseSBmdW5jdGlvbmFsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLiBNeSBhbmFseXNpcyBwb2ludHMgZGlyZWN0bHkgdG8gYSBoaWdoIGZ1enppbmcgdmFsdWU7IHdlJ3JlIGRlZmluaXRlbHkgbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHBpZWNlOiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGZpeCBhbmQgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IHRhcmdldC4gV2UgYWxzbyBoYXZlIGBudGZzX2V2aWN0X2JpZ19pbm9kZWAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIGV2aWN0aW9uIHByb2Nlc3Mgd2hlcmUgdGhlIGJ1ZyBvY2N1cnMuIFRoZSBwYXRoIGFsc28gaW5jbHVkZXMgYG50ZnNfY29tbWl0X2lub2RlYCwgYF9fbnRmc193cml0ZV9pbm9kZWAgYW5kIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgIGJ1dCBsZXQncyBpbml0aWFsbHkgY29uY2VudHJhdGUgb24gYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBhbmQgYG50ZnNfZXZpY3RfYmlnX2lub2RlYC4gV2hpbGUgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBpcyBjYWxsZWQgYnkgdGhlIFZGUywgaXQncyBzdGlsbCBjcnVjaWFsIHRvIGluY2x1ZGUsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgZmFpbHVyZSBpcyBzZWVuLiBUaGUgZnVuY3Rpb25zIGBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZGAgYW5kIGBudGZzX2F0dHJsaXN0X2VudHJ5X3JtYCBhbHNvIGNhbGwgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBzbyBpdCBtYWtlcyBzZW5zZSB0byBpbmNsdWRlIHRoZW0gYXMgd2VsbC4gTGV0J3MgbWFrZSBzdXJlIHdlIGluY2x1ZGUgYG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc2AgdG9vLlxuXG5BZnRlciBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSwgaXQncyBjb25maXJtZWQgdGhhdCBgbnRmc19hdHRybGlzdF91cGRhdGVgIGFuZCBgbnRmc19ldmljdF9iaWdfaW5vZGVgIGFyZSBnbG9iYWwgZnVuY3Rpb25zLCBkZWZpbmVkIGFuZCBleHBvcnRlZCwgc28gZnV6emluZyBhY2Nlc3MgaXMgc3RyYWlnaHQgZm9yd2FyZC5cblxuSSdtIGNvbmZpZGVudCB3ZSBoYXZlIHRoZSByaWdodCBmb2N1cy4gVGhlIGV2aWN0aW9uIHByb2Nlc3MgaXMga2V5IGhlcmUgYW5kIHRoYXQgaXMgdGhlIHNjb3BlIG9mIGJvdGggYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBhbmQgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCwgYW5kIHdlIG11c3Qgbm90IGZvcmdldCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYC5cblxuTGV0J3MgdmVyaWZ5IHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucy4gQWZ0ZXIgZG91YmxlLWNoZWNraW5nIGBmcy9udGZzL0tjb25maWdgLCBpdCdzIGNsZWFyIHRoYXQgdGhlIG9ubHkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gaXMgYE5URlNfRlNgLiBXaGlsZSBgTlRGU19GU19QT1NJWF9BQ0xgIGlzIGF2YWlsYWJsZSwgYE5URlNfRlNgIGlzIHN1ZmZpY2llbnQgYW5kIHdlIHNob3VsZG4ndCBpbnRyb2R1Y2UgdW5uZWNlc3NhcnkgY29tcGxleGl0eS5cblxuU3VtbWFyaXppbmcgdGhlIHJlcXVpcmVtZW50czpcblxuKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgXG4qICAgYEZvY3VzU3ltYm9sczogW1wibnRmc19hdHRybGlzdF91cGRhdGVcIiwgXCJudGZzX2V2aWN0X2JpZ19pbm9kZVwiLCBcIm50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc1wiXWBcbiogICBgRW5hYmxlQ29uZmlnczogW1wiTlRGU19GU1wiXWBcbiogICBgUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBOVEZTIGRyaXZlciBkdXJpbmcgdW5tb3VudC9ldmljdGlvbiBieSBjaGVja2luZyBTQl9BQ1RJVkUgaW4gbnRmc19hdHRybGlzdF91cGRhdGUuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgaW4gdGhlIE5URlMgZmlsZXN5c3RlbS5cImBcblxuTm93LCBsZXQncyB3cml0ZSB0aGlzIHVwIGFuZCBnZXQgaXQgaW50byB0aGUgZnV6emluZyBjYW1wYWlnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3ODAsIk91dHB1dFRva2VucyI6MTEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6NTAuMjEwMzA2MjI2WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NjM0NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRybGlzdF91cGRhdGVcIixcbiAgICBcIm50ZnNfZXZpY3RfYmlnX2lub2RlXCIsXG4gICAgXCJudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRybGlzdF91cGRhdGVcIixcbiAgICBcIm50ZnNfZXZpY3RfYmlnX2lub2RlXCIsXG4gICAgXCJudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow87g8z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 04:14:35 +0000 UTC FinishedAt: 2026-07-06 04:27:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1a3746ccbb0a97bed3c06ccde6b880013b1dddc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1a3746ccbb0a97bed3c06ccde6b880013b1dddc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "55ca1f47-6926-4e9d-bf89-879dde7fbb0f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_attrlist_update", "ntfs_evict_big_inode", "ntfs_attr_update_mapping_pairs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJsaXN0X3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtudGZzX2V2aWN0X2JpZ19pbm9kZSYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgZGVhZGxvY2sgaW4gdGhlIE5URlMgZHJpdmVyIGR1cmluZyB1bm1vdW50L2V2aWN0aW9uIGJ5IGNoZWNraW5nIHRoZSBTQl9BQ1RJVkUgZmxhZyBpbiBudGZzX2F0dHJsaXN0X3VwZGF0ZSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmODI1ODkwNGI3Y2I5OTIxZTBkN2Q2MzEzZDdjYmUwNjI1NTU0MDU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAwNDoyNToyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJsaXN0LmMgYi9mcy9udGZzL2F0dHJsaXN0LmNcbmluZGV4IGFmYjEzMDM4YmE0MjVmLi5iZTMwODZkMzQzMzgxNiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvYXR0cmxpc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9hdHRybGlzdC5jXG5AQCAtNTcsNiAmIzQzOzU3LDE1IEBAIGludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSlcbiBcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoKSBjbGVhcnMgU0JfQUNUSVZFIGJlZm9yZSBldmljdGluZyBjYWNoZWRcbiYjNDM7XHQgKiBpbm9kZXMuIERvIG5vdCBsb29rIHVwIHRoZSBhdHRyaWJ1dGUtbGlzdCBpbm9kZSBhZnRlciBTQl9BQ1RJVkUgaGFzXG4mIzQzO1x0ICogYmVlbiBjbGVhcmVkOyBpdCBtYXkgYWxyZWFkeSBiZSBJX0ZSRUVJTkcsIGFuZCB3YWl0aW5nIG9uIGl0IGNhblxuJiM0MztcdCAqIHNlbGYtZGVhZGxvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCEoVkZTX0koYmFzZV9uaSktXHUwMDNlaV9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9BQ1RJVkUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuIFx0YXR0cl92aSA9IG50ZnNfYXR0cl9pZ2V0KFZGU19JKGJhc2VfbmkpLCBBVF9BVFRSSUJVVEVfTElTVCwgQVRfVU5OQU1FRCwgMCk7XG4gXHRpZiAoSVNfRVJSKGF0dHJfdmkpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoYXR0cl92aSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfYXR0cmxpc3RfdXBkYXRlJiMzNDssCiAgICAmIzM0O250ZnNfZXZpY3RfYmlnX2lub2RlJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjgyNTg5MDRiN2NiOTkyMWUwZDdkNjMxM2Q3Y2JlMDYyNTU1NDA1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMDQ6MjU6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJsaXN0LmMgYi9mcy9udGZzL2F0dHJsaXN0LmMKaW5kZXggYWZiMTMwMzhiYTQyNWYuLmJlMzA4NmQzNDMzODE2IDEwMDY0NAotLS0gYS9mcy9udGZzL2F0dHJsaXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9hdHRybGlzdC5jCkBAIC01Nyw2ICYjNDM7NTcsMTUgQEAgaW50IG50ZnNfYXR0cmxpc3RfdXBkYXRlKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pKQogCXN0cnVjdCBudGZzX2lub2RlICphdHRyX25pOwogCWludCBlcnI7CiAKJiM0MzsJLyoKJiM0MzsJICogZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpIGNsZWFycyBTQl9BQ1RJVkUgYmVmb3JlIGV2aWN0aW5nIGNhY2hlZAomIzQzOwkgKiBpbm9kZXMuIERvIG5vdCBsb29rIHVwIHRoZSBhdHRyaWJ1dGUtbGlzdCBpbm9kZSBhZnRlciBTQl9BQ1RJVkUgaGFzCiYjNDM7CSAqIGJlZW4gY2xlYXJlZDsgaXQgbWF5IGFscmVhZHkgYmUgSV9GUkVFSU5HLCBhbmQgd2FpdGluZyBvbiBpdCBjYW4KJiM0MzsJICogc2VsZi1kZWFkbG9jay4KJiM0MzsJICovCiYjNDM7CWlmICghKFZGU19JKGJhc2VfbmkpLSZndDtpX3NiLSZndDtzX2ZsYWdzICZhbXA7IFNCX0FDVElWRSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKIAlhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0koYmFzZV9uaSksIEFUX0FUVFJJQlVURV9MSVNULCBBVF9VTk5BTUVELCAwKTsKIAlpZiAoSVNfRVJSKGF0dHJfdmkpKSB7CiAJCWVyciA9IFBUUl9FUlIoYXR0cl92aSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRmlsZSBTeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL250ZnMvYXR0cmxpc3QuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gYG50ZnNfYXR0cmxpc3RfdXBkYXRlKClgLiBTcGVjaWZpY2FsbHksIHRoaXMgYml0OgpgYGBjCglpZiAoIShWRlNfSShiYXNlX25pKS0mZ3Q7aV9zYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9BQ1RJVkUpKQoJCXJldHVybiAtRUlPOwpgYGAKVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgZnMvbnRmcy9hdHRybGlzdC5jYCBmaWxlIGFuZCB0aGUgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBmdW5jdGlvbiBpdHNlbGYgdG8gc2VlIHRoZSBjb250ZXh0LgoKUmlnaHQsIHRoZSBwYXRoIGlzIGBmcy9udGZzL2F0dHJsaXN0LmNgLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgTlRGUyBpcyBhY3R1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0JiMzOTtzIGdhdGluZyB0aGlzLiBJJiMzOTttIHVzdWFsbHkgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgYE5URlNfRlNgLCBidXQgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBhbHdheXMgYE5URlMzX0ZTYCBpbiBgZnMvbnRmczMvYCwgc28gSSBoYXZlIHRvIGJlIGNhcmVmdWwgdGhhdCB0aGlzIGlzIHRoZSBjbGFzc2ljIE5URlMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlIGluIGBmcy9udGZzL2AgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTlRGU19GU2AgaXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIEJ1dCBob2xkIG9uLCB3YXNuJiMzOTt0IHRoYXQgdGhlICpvbGQqIE5URlMgZHJpdmVyPyBEaWRuJiMzOTt0IHdlIG1vdmUgb24gdG8gYE5URlMzX0ZTYCBhIHdoaWxlIGJhY2s/IEkgdGhvdWdodCBgTlRGU19GU2Agd2FzIGVpdGhlciByZW1vdmVkIG9yIGF0IGxlYXN0IGhlYXZpbHkgZGVwcmVjYXRlZCBhdCB0aGlzIHBvaW50LiBKdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZmlsZXN5c3RlbSBkcml2ZXJzLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeSB0byBjb25maXJtLiBJIHNob3VsZCBzZWUgaWYgdGhlIGBmcy9udGZzL2AgZGlyZWN0b3J5IGlzIHN0aWxsIHByZXNlbnQuIFRoYXQgd2lsbCB0ZWxsIHRoZSB0YWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2ZzL250ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthb3BzLmMmIzM0OywKICAgICYjMzQ7YXR0cmliLmMmIzM0OywKICAgICYjMzQ7YXR0cmliLmgmIzM0OywKICAgICYjMzQ7YXR0cmxpc3QuYyYjMzQ7LAogICAgJiMzNDthdHRybGlzdC5oJiMzNDssCiAgICAmIzM0O2JkZXYtaW8uYyYjMzQ7LAogICAgJiMzNDtiaXRtYXAuYyYjMzQ7LAogICAgJiMzNDtiaXRtYXAuaCYjMzQ7LAogICAgJiMzNDtjb2xsYXRlLmMmIzM0OywKICAgICYjMzQ7Y29sbGF0ZS5oJiMzNDssCiAgICAmIzM0O2NvbXByZXNzLmMmIzM0OywKICAgICYjMzQ7ZGVidWcuYyYjMzQ7LAogICAgJiMzNDtkZWJ1Zy5oJiMzNDssCiAgICAmIzM0O2Rpci5jJiMzNDssCiAgICAmIzM0O2Rpci5oJiMzNDssCiAgICAmIzM0O2VhLmMmIzM0OywKICAgICYjMzQ7ZWEuaCYjMzQ7LAogICAgJiMzNDtmaWxlLmMmIzM0OywKICAgICYjMzQ7aW5kZXguYyYjMzQ7LAogICAgJiMzNDtpbmRleC5oJiMzNDssCiAgICAmIzM0O2lub2RlLmMmIzM0OywKICAgICYjMzQ7aW5vZGUuaCYjMzQ7LAogICAgJiMzNDtpb21hcC5jJiMzNDssCiAgICAmIzM0O2lvbWFwLmgmIzM0OywKICAgICYjMzQ7bGF5b3V0LmgmIzM0OywKICAgICYjMzQ7bGNuYWxsb2MuYyYjMzQ7LAogICAgJiMzNDtsY25hbGxvYy5oJiMzNDssCiAgICAmIzM0O2xvZ2ZpbGUuYyYjMzQ7LAogICAgJiMzNDtsb2dmaWxlLmgmIzM0OywKICAgICYjMzQ7bWFsbG9jLmgmIzM0OywKICAgICYjMzQ7bWZ0LmMmIzM0OywKICAgICYjMzQ7bWZ0LmgmIzM0OywKICAgICYjMzQ7bXN0LmMmIzM0OywKICAgICYjMzQ7bmFtZWkuYyYjMzQ7LAogICAgJiMzNDtudGZzLmgmIzM0OywKICAgICYjMzQ7b2JqZWN0X2lkLmMmIzM0OywKICAgICYjMzQ7b2JqZWN0X2lkLmgmIzM0OywKICAgICYjMzQ7cmVwYXJzZS5jJiMzNDssCiAgICAmIzM0O3JlcGFyc2UuaCYjMzQ7LAogICAgJiMzNDtydW5saXN0LmMmIzM0OywKICAgICYjMzQ7cnVubGlzdC5oJiMzNDssCiAgICAmIzM0O3N1cGVyLmMmIzM0OywKICAgICYjMzQ7c3lzY3RsLmMmIzM0OywKICAgICYjMzQ7c3lzY3RsLmgmIzM0OywKICAgICYjMzQ7dGltZS5oJiMzNDssCiAgICAmIzM0O3VuaXN0ci5jJiMzNDssCiAgICAmIzM0O3VwY2FzZS5jJiMzNDssCiAgICAmIzM0O3ZvbHVtZS5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBFeGlzdGVuY2UgYW5kIERpdmluZyBJbioqCgpZZXAsIGl0JiMzOTtzIGRlZmluaXRlbHkgYSByZWFsIHRoaW5nLiBPa2F5LCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBUaGUgcGxhY2UgdG8gc3RhcnQgcG9raW5nIGFyb3VuZCBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGlzIGdvaW5nIHRvIGJlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgaW4gYGZzL250ZnMvYXR0cmxpc3QuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIGFueSBhdHRyaWJ1dGUgbGlzdCB1cGRhdGUgbG9naWMgcmVzaWRlcy4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfYXR0cmxpc3RfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9hdHRyaWIuYz0zNTQxPXN0YXRpYyBpbnQgbnRmc19hdHRyX3VwZGF0ZV9tZXRhKHN0cnVjdCBhdHRyX3JlY29yZCAqYSwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtMzU5MC1cbmZzL250ZnMvYXR0cmliLmM6MzU5MTpcdFx0XHRlcnIgPSBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTtcbmZzL250ZnMvYXR0cmliLmMtMzU5Mi1cdFx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMvYXR0cmliLmM9MzY4MD1pbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxuLS1cbmZzL250ZnMvYXR0cmliLmMtMzgxNi1cdFx0XHRcdH1cbmZzL250ZnMvYXR0cmliLmM6MzgxNzpcdFx0XHRcdGlmIChudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKSlcbmZzL250ZnMvYXR0cmliLmMtMzgxOC1cdFx0XHRcdFx0cmV0dXJuIC1FSU87XG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0zODU2LVx0XHRcdGN0eC1cdTAwM2VhbF9lbnRyeS1cdTAwM2Vsb3dlc3RfdmNuID0gY3B1X3RvX2xlNjQoc3RvcF92Y24pO1xuZnMvbnRmcy9hdHRyaWIuYzozODU3Olx0XHRcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xuZnMvbnRmcy9hdHRyaWIuYy0zODU4LVx0XHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00NTk1PXN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpemUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00NzUyLVx0XHR9XG5mcy9udGZzL2F0dHJpYi5jOjQ3NTM6XHRcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xuZnMvbnRmcy9hdHRyaWIuYy00NzU0LVx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMvYXR0cmliLmMtNDgwOC1cbmZzL250ZnMvYXR0cmliLmM6NDgwOTpcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xuZnMvbnRmcy9hdHRyaWIuYy00ODEwLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5mcy9udGZzL2F0dHJsaXN0LmM9MjU9aW50IG50ZnNfYXR0cmxpc3RfbmVlZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jLTUzLVxuZnMvbnRmcy9hdHRybGlzdC5jOjU0OmludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSlcbmZzL250ZnMvYXR0cmxpc3QuYy01NS17XG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jPTEyMT1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jLTIzNS1cbmZzL250ZnMvYXR0cmxpc3QuYzoyMzY6XHRlcnIgPSBudGZzX2F0dHJsaXN0X3VwZGF0ZShuaSk7XG5mcy9udGZzL2F0dHJsaXN0LmMtMjM3LVx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvYXR0cmxpc3QuYz0yNTc9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jLTMwMC1cbmZzL250ZnMvYXR0cmxpc3QuYzozMDE6XHRyZXR1cm4gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XG5mcy9udGZzL2F0dHJsaXN0LmMtMzAyLX1cbi0tXG5mcy9udGZzL2F0dHJsaXN0Lmg9MTc9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuZnMvbnRmcy9hdHRybGlzdC5oOjE4OmludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSk7XG5mcy9udGZzL2F0dHJsaXN0LmgtMTktXG4tLVxuZnMvbnRmcy9pbmRleC5jPTEyMzY9c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTM0MC1cdFx0XHRcdGxlMzJfdG9fY3B1KGN0eC1cdTAwM2VhdHRyLVx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKSkpIHtcbmZzL250ZnMvaW5kZXguYzoxMzQxOlx0XHRcdGlmIChudGZzX2F0dHJsaXN0X3VwZGF0ZShjdHgtXHUwMDNlYmFzZV9udGZzX2lubyA/XG5mcy9udGZzL2luZGV4LmMtMTM0Mi1cdFx0XHRcdFx0XHQgY3R4LVx1MDAzZWJhc2VfbnRmc19pbm8gOiBjdHgtXHUwMDNlbnRmc19pbm8pKVxuLS1cbmZzL250ZnMvaW5vZGUuYz0zMDMxPWludCBudGZzX2lub2RlX2FkZF9hdHRybGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTMxMzktXG5mcy9udGZzL2lub2RlLmM6MzE0MDpcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKG5pKTtcbmZzL250ZnMvaW5vZGUuYy0zMTQxLVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDcyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlRGUyBBdHRyaWJ1dGUgTGlzdCBVcGRhdGUqKgoKT2theSwgc28gdGhlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgZnVuY3Rpb24sIGludGVyZXN0aW5nLiBJdCYjMzk7cyB1c2VkIGFsbCBvdmVyIHRoZSBOVEZTIGZpbGVzeXN0ZW0gY29kZSDigJMgYGF0dHJpYi5jYCwgYGF0dHJsaXN0LmNgLCBgaW5kZXguY2AsIGFuZCBgaW5vZGUuY2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgcHJldHR5IGZ1bmRhbWVudGFsIHRvIHRoZSB3YXkgTlRGUyBtYW5hZ2VzIGl0cyBhdHRyaWJ1dGVzLiBUaGlzIHBhdGNoLCBhaCwgaXQgYWRkcyBhIGNoZWNrIGZvciBgU0JfQUNUSVZFYCB3aXRoaW4gdGhlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgZnVuY3Rpb24uIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiwgZGVmaW5pdGVseSBjaGFuZ2luZyBob3cgdGhpcyB1cGRhdGUgb3BlcmF0aW9uIGJlaGF2ZXMgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBOb3csIHRoZSBjb250ZXh0IGlzIE5URlMsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBgTlRGU19GU2AgY29uZmlndXJhdGlvbiBvcHRpb24uIEJ1dCB3YWl0LCBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBJcyBgTlRGU19SV2AgYWxzbyByZWxldmFudD8gQmVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgaW1wYWN0cy4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kICphbGwqIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5URlNfUlcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODUyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSHVudGluZyBEb3duIFJlYWQvV3JpdGUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgcmVhZC93cml0ZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGZvciB0aGUgTlRGUyBmaWxlc3lzdGVtIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBpcyB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSYjMzk7ZCBiZSBzdXJwcmlzZWQgaWYgaXQgd2FzbiYjMzk7dCB0aGVyZS4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGBSV2Agb3IgaXRzIGVxdWl2YWxlbnQgaXMgZGVmaW5lZCBhcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGBjb25maWdgIG9wdGlvbiBvciBzb21lIG90aGVyIHZhcmlhYmxlIHRoYXQgSSBjYW4gdHdlYWssIG1heWJlIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfTlRGU19SV2AsIG9yIGEgcmVsYXRlZCBzeW1ib2wuIFRpbWUgdG8gY2hlY2sgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZy0xMi1cbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xuZnMvbnRmcy9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOVEZTIFJlYWQvV3JpdGUgU3VwcG9ydCoqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGRpZG4mIzM5O3QgSSByZW1lbWJlciBzZWVpbmcgYW4gYE5URlNfUldgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNvbWV3aGVyZT8gSSB3YXMgY2VydGFpbiB3ZSBoYWQgYSBkZWRpY2F0ZWQgZmxhZyBmb3IgcmVhZC93cml0ZSBjYXBhYmlsaXR5LCBub3QganVzdCByZWFkLW9ubHkuIEJldHRlciB2ZXJpZnkgdGhhdC4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtJiMzOTtzIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbmZpcm0gYW5kIGVuc3VyZSBpdOKAmXMgZW5hYmxlZCwgdW5kZXIgdGhlIGBmcy9udGZzL0tjb25maWdgIHBhdGguIExldCYjMzk7cyBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQgcmVnYXJkaW5nIGBSV2AgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSVyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTlRGUyBXcml0ZSBJbXBsZW1lbnRhdGlvbiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGluIHRhY2tsaW5nIHRoaXMgd3JpdGUgZnVuY3Rpb25hbGl0eSBxdWVzdGlvbiBpbiB0aGUgTlRGUyBtb2R1bGUgaXMgcHJldHR5IGNsZWFyIHRvIG1lOiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBzZXR0aW5ncyB3aWxsIGxpa2VseSBiZSBmb3VuZCBpbiB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYW55dGhpbmcgcmVsYXRlZCB0byAmIzM0O3dyaXRlJiMzNDsgY2FwYWJpbGl0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25maWd1cmF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIG9yIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBzaGVkIGxpZ2h0IG9uIGhvdyB3cml0ZSBzdXBwb3J0IGlzIGNvbnRyb2xsZWQgYW5kIGVuYWJsZWQgd2l0aGluIHRoZSBkcml2ZXIuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgZm9yIGV4YW1pbmluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgd2hpY2ggc2hvdWxkIHJldmVhbCB0aGUgY29uZGl0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIGhvdyB3cml0ZSBzdXBwb3J0IGlzIGNvbXBpbGVkIGludG8gdGhlIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqSW52ZXN0aWdhdGluZyBOVEZTIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpIbW0sIHNvIGxvb2tpbmcgYXQgYGZzL250ZnMvS2NvbmZpZ2AgKm5vdyosIGFsbCBJIHNlZSBhcmUgYE5URlNfRlNgLCBgTlRGU19ERUJVR2AsIGFuZCBgTlRGU19GU19QT1NJWF9BQ0xgLiBUaGF0JiMzOTtzIGl0PyBJJiMzOTttIHN1cmUgSSYjMzk7dmUgc2VlbiBtb3JlIG9wdGlvbnMgcmVsYXRlZCB0byBOVEZTIGF0IHNvbWUgcG9pbnQuIEl0JiMzOTtzIGJvdGhlcmluZyBtZS4uLiBXYWl0LCBJIHZhZ3VlbHkgcmVjYWxsIGFuIGBOVEZTX1JXYCBvcHRpb24gaW4gdGhlIHBhc3QsIG1heWJlIGluIGFuIG9sZGVyIGtlcm5lbCB2ZXJzaW9uJiMzOTtzIEtjb25maWc/IERpZCBpdCBnZXQgcmVtb3ZlZD8gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBrbm93LiBPa2F5LCB0aW1lIHRvIGRpdmUgYmFjayBpbnRvIGBmcy9udGZzL0tjb25maWdgIGFuZCByZWZyZXNoIG15IG1lbW9yeSwgY29uZmlybSB3aGF0JiMzOTtzIHRoZXJlIGFuZCB3aGF0JiMzOTtzIG1pc3NpbmcsIGFuZCBzZWUgaWYgSSBjYW4gZmlndXJlIG91dCB3aGF0IGhhcHBlbmVkIHdpdGggdGhhdCBgTlRGU19SV2Agc2V0dGluZy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlRGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgTkxTXG4gICA1Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgTlRGUyBpcyB0aGUgZmlsZSBzeXN0ZW0gb2YgTWljcm9zb2Z0IFdpbmRvd3MgTlQsIDIwMDAsIFhQIGFuZCAyMDAzLlxuICAgODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgZGV2aWNlcyBmb3JtYXR0ZWQgd2l0aCB0aGUgbnRmcyBmaWxlIHN5c3RlbS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDExOlx0XHQgIG50ZnMuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5URlNfREVCVUdcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7TlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBOVEZTIGZpbGUgc3lzdGVtLCBzYXlcbiAgMTg6XHRcdCAgWSBoZXJlLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBiZVxuICAxOTpcdFx0ICBwZXJmb3JtZWQgYnkgdGhlIGRyaXZlciBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzIHRvXG4gIDIwOlx0XHQgIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbSBsb2cuICBOb3RlIHRoYXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZVxuICAyMTpcdFx0ICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVG8gZW5hYmxlIHRoZW0sIHN1cHBseSB0aGUgb3B0aW9uIGRlYnVnX21zZ3M9MVxuICAyMjpcdFx0ICBhdCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB3aGVuIGJvb3RpbmcgdGhlIGtlcm5lbCBvciBhcyBhbiBvcHRpb25cbiAgMjM6XHRcdCAgdG8gaW5zbW9kIHdoZW4gbG9hZGluZyB0aGUgbnRmcyBtb2R1bGUuICBPbmNlIHRoZSBkcml2ZXIgaXMgYWN0aXZlLFxuICAyNDpcdFx0ICB5b3UgY2FuIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYnkgZG9pbmcgKGFzIHJvb3QpOlxuICAyNTpcdFx0ICBlY2hvIDEgXHUwMDNlIC9wcm9jL3N5cy9mcy9udGZzLWRlYnVnXG4gIDI2Olx0XHQgIFJlcGxhY2luZyB0aGUgXCYjMzQ7MVwmIzM0OyB3aXRoIFwmIzM0OzBcJiMzNDsgd291bGQgZGlzYWJsZSBkZWJ1ZyBtZXNzYWdlcy5cbiAgMjc6XHRcbiAgMjg6XHRcdCAgSWYgeW91IGxlYXZlIGRlYnVnZ2luZyBtZXNzYWdlcyBkaXNhYmxlZCwgdGhpcyByZXN1bHRzIGluIGxpdHRsZVxuICAyOTpcdFx0ICBvdmVyaGVhZCwgYnV0IGVuYWJsaW5nIGRlYnVnIG1lc3NhZ2VzIHJlc3VsdHMgaW4gdmVyeSBzaWduaWZpY2FudFxuICAzMDpcdFx0ICBzbG93ZG93biBvZiB0aGUgc3lzdGVtLlxuICAzMTpcdFxuICAzMjpcdFx0ICBXaGVuIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mXG4gIDMzOlx0XHQgIGRlYnVnZ2luZyBtZXNzYWdlcyB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXG4gIDM2Olx0XHRib29sIFwmIzM0O05URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gTlRGU19GU1xuICAzODpcdFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcbiAgNDE6XHRcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNMIHN1cHBvcnQgZm9yIG50ZnMsIHByb3ZpZGluZyBmdW5jdGlvbmFsIHBhcml0eVxuICA0NDpcdFx0ICB3aXRoIG50ZnMzIGRyaXZpZXIuXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIE5PVEU6IHRoaXMgaXMgbGludXggb25seSBmZWF0dXJlLiBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZXNlIEFDTHMuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSZW1vdmFsIG9mIE5URlMgV3JpdGUgU3VwcG9ydCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBOVEZTX1JXYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIG9uZSB0aGF0IGVuYWJsZWQgd3JpdGUgc3VwcG9ydCBmb3IgTlRGUywgd2FzIHJlbW92ZWQgYXQgc29tZSBwb2ludC4gSSB2YWd1ZWx5IHJlbWVtYmVyIGEgY29tbWl0IHJlbGF0ZWQgdG8gcmVtb3ZpbmcgTlRGUyB3cml0ZSBzdXBwb3J0LCBzb21ldGhpbmcgbGlrZSBgYTQ2MDQ0YTgwNzExYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIEkgdGhpbmsgdGhhdOKAmXMgd2hhdCBkaWQgaXQuIEp1c3QgdG8gY29uZmlybSwgbGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBNYWtlZmlsZSBmb3IgdGhlIE5URlMgZmlsZSBzeXN0ZW0gc2hvdWxkIGNvbnRhaW4gdGhlIGtleSB0byB1bmxvY2sgd2hhdCBoYXBwZW5lZC4gU28gbGV0JiMzOTtzIGdvIGNoZWNrIHRoZSBgZnMvbnRmcy9NYWtlZmlsZWAgdG8gdmVyaWZ5IHRoaXMgdGhlb3J5LCBhbmQgY29uZmlybSB3aGF0IHRoZSBjb21taXQgZGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai0kKENPTkZJR19OVEZTX0ZTKSAmIzQzOz0gbnRmcy5vXG4gICA0Olx0XG4gICA1Olx0bnRmcy15IDo9IGFvcHMubyBhdHRyaWIubyBjb2xsYXRlLm8gZGlyLm8gZmlsZS5vIGluZGV4Lm8gaW5vZGUubyBcXFxuICAgNjpcdFx0ICBtZnQubyBtc3QubyBuYW1laS5vIHJ1bmxpc3QubyBzdXBlci5vIHVuaXN0ci5vIGF0dHJsaXN0Lm8gZWEubyBcXFxuICAgNzpcdFx0ICB1cGNhc2UubyBiaXRtYXAubyBsY25hbGxvYy5vIGxvZ2ZpbGUubyByZXBhcnNlLm8gY29tcHJlc3MubyBcXFxuICAgODpcdFx0ICBpb21hcC5vIGRlYnVnLm8gc3lzY3RsLm8gb2JqZWN0X2lkLm8gYmRldi1pby5vXG4gICA5Olx0XG4gIDEwOlx0Y2NmbGFncy0kKENPTkZJR19OVEZTX0RFQlVHKSAmIzQzOz0gLURERUJVR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTY1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5URlMgS2VybmVsIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBOVEZTX0ZTYCBjb25maWcgb3B0aW9uIOKAkyBsb29rcyBsaWtlIHRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgbnRmc19hdHRybGlzdF91cGRhdGVgLiBEZWZpbml0ZWx5IHNlZW1zIHJlYWNoYWJsZSBpZiBJJiMzOTttIG1vdW50aW5nIGFuIE5URlMgZmlsZXN5c3RlbSBhbmQgcG9raW5nIGFyb3VuZCwgZG9pbmcgc29tZSBvcGVyYXRpb25zIHRoYXQgd291bGQgdHJpZ2dlciBpdC4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdoYXQgb3BlcmF0aW9ucyAqc3BlY2lmaWNhbGx5KiB0cmlnZ2VyIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWA/CgpPa2F5LCBkaWdnaW5nIGlu4oCmIGl0JiMzOTtzIHdoZW4gdGhlIGF0dHJpYnV0ZSBsaXN0IG5lZWRzIGEgcmVmcmVzaCwgc28gYWRkaW5nLCByZW1vdmluZywgb3IgcmVzaXppbmcgYXR0cmlidXRlcy4gVGhhdCBtYWtlcyBzZW5zZS4gTm93LCB3YXNuJiMzOTt0IHRoZXJlIHNvbWV0aGluZyBhYm91dCB3cml0ZSBzdXBwb3J0IGJlaW5nIHJlbW92ZWQ/IE9yIHdhcyB0aGF0IGp1c3QgZm9yIGEgc3BlY2lmaWMgdmVyc2lvbj8gSG1tLCAqY2hlY2tzIGZpbGVzKuKApiBgYW9wcy5jYCwgYGZpbGUuY2AsIGFuZCBgaW5vZGUuY2AgYXJlIGFsbCBoZXJlLiBTbywgdGhlIGJhc2UgZnVuY3Rpb25hbGl0eSBpcyBzdGlsbCB0aGVyZS4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIHdyaXRlIHN1cHBvcnQgKmlzKiBhY3R1YWxseSBnb25lLCBvciBpZiB0aGlzIGlzIGFuIGlzc3VlIG9mIGRlZ3JlZS4KCldhaXQgYSBzZWNvbmTigKYgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpcyBkaXJlY3RseSBjYWxsZWQgYnkgYG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkYCwgYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gLCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCwgYW5kIGBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplYC4gVGhvc2UgYXJlIGFsbCwgaWYgSSYjMzk7bSByZW1lbWJlcmluZyBjb3JyZWN0bHksIHdyaXRlIG9wZXJhdGlvbnMuIElmIHdyaXRlIHN1cHBvcnQgKndhcyogcmVtb3ZlZCwgaG93IGFyZSB0aG9zZSBmdW5jdGlvbnMgZXZlbiBjYWxsYWJsZT8gU29tZXRoaW5nIGRvZXNuJiMzOTt0IGFkZCB1cC4gQmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIG1vdW50IG9wdGlvbnMuIEkmIzM5O2xsIHBlZWsgYXQgYGZzL250ZnMvc3VwZXIuY2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgcmVhZC13cml0ZSBvcHRpb24gYXZhaWxhYmxlLCBvciBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGFzIHJlYWQtb25seS4gVGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TVNfUkRPTkxZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgxMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYFNCX1JET05MWWAqKgoKT2theSwgc28gSSYjMzk7bSBqdW1waW5nIHJpZ2h0IGludG8gY2hlY2tpbmcgYFNCX1JET05MWWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBmaWxlIHN5c3RlbSBmbGFncy4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgYWJvdXQgZW5zdXJpbmcgd2UmIzM5O3JlIGFkaGVyaW5nIHRvIHJlYWQtb25seSBzZW1hbnRpY3MuIElmIGEgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCByZWFkLW9ubHksIHdlIGFic29sdXRlbHkgKmNhbm5vdCogYWxsb3cgd3JpdGUgb3BlcmF0aW9ucywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaXMgYWNjb3VudGluZyBmb3IgdGhpcy4gSSBuZWVkIHRvIGJlIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaGVyZSwgcGVybWlzc2lvbiBpc3N1ZXMsIGFuZCBob3cgdGhlIHByb2dyYW0gaXMgaGFuZGxpbmcgdmFyaW91cyBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgYW55IHBsYWNlcyB3aGVyZSB3cml0ZXMgbWlnaHQgYWNjaWRlbnRhbGx5IGJlIGF0dGVtcHRlZC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbmVlZCB0byBjaGVjayBmb3Igc3VidGxlIGVkZ2UgY2FzZXMgd2hlcmUgcmVhZC1vbmx5IGJlaGF2aW9yIG1pZ2h0IG5vdCBiZSBlbmZvcmNlZCBhcyBzdHJpY3RseSBhcyBpdCBzaG91bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NCX1JET05MWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmM9MjY1PXN0YXRpYyBpbnQgbnRmc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTI4NC1cdCAqL1xuZnMvbnRmcy9zdXBlci5jOjI4NTpcdGlmIChzYl9yZG9ubHkoc2IpIFx1MDAyNlx1MDAyNiAhKGZjLVx1MDAzZXNiX2ZsYWdzIFx1MDAyNiBTQl9SRE9OTFkpKSB7XG5mcy9udGZzL3N1cGVyLmMtMjg2LVx0XHRzdGF0aWMgY29uc3QgY2hhciAqZXMgPSBcJiMzNDsuICBDYW5ub3QgcmVtb3VudCByZWFkLXdyaXRlLlwmIzM0Oztcbi0tXG5mcy9udGZzL3N1cGVyLmMtMzEyLVx0XHR9XG5mcy9udGZzL3N1cGVyLmM6MzEzOlx0fSBlbHNlIGlmICghc2JfcmRvbmx5KHNiKSBcdTAwMjZcdTAwMjYgKGZjLVx1MDAzZXNiX2ZsYWdzIFx1MDAyNiBTQl9SRE9OTFkpKSB7XG5mcy9udGZzL3N1cGVyLmMtMzE0LVx0XHQvKiBSZW1vdW50aW5nIHJlYWQtb25seS4gKi9cbi0tXG5mcy9udGZzL3N1cGVyLmM9MzMzPXZvaWQgbnRmc19oYW5kbGVfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9udGZzL3N1cGVyLmMtMzQwLVx0aWYgKHZvbC1cdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcbmZzL250ZnMvc3VwZXIuYzozNDE6XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuZnMvbnRmcy9zdXBlci5jLTM0Mi1cdFx0cHJfY3JpdChcJiMzNDsoZGV2aWNlICVzKTogRmlsZXN5c3RlbSBoYXMgYmVlbiBzZXQgcmVhZC1vbmx5XFxuXCYjMzQ7LFxuLS1cbmZzL250ZnMvc3VwZXIuYz0xMzk5PXN0YXRpYyBib29sIGxvYWRfc3lzdGVtX2ZpbGVzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0xNDE2LVxuZnMvbnRmcy9zdXBlci5jOjE0MTc6XHRcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG5mcy9udGZzL3N1cGVyLmMtMTQxOC1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDslcy4gIE1vdW50aW5nIHJlYWQtb25seSVzXCYjMzQ7LFxuLS1cbmZzL250ZnMvc3VwZXIuYy0xNTQyLVx0XHRpZiAoIXNiX3Jkb25seShzYikgXHUwMDI2XHUwMDI2IHZvbC1cdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcbmZzL250ZnMvc3VwZXIuYzoxNTQzOlx0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuZnMvbnRmcy9zdXBlci5jLTE1NDQtXHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7JXMuICBNb3VudGluZyByZWFkLW9ubHklc1wmIzM0OywgZXMxLCBlczIpO1xuLS1cbmZzL250ZnMvc3VwZXIuYy0xNTU5LVx0XHRpZiAoIXNiX3Jkb25seShzYikgXHUwMDI2XHUwMDI2IHZvbC1cdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcbmZzL250ZnMvc3VwZXIuYzoxNTYwOlx0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuZnMvbnRmcy9zdXBlci5jLTE1NjEtXHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7RmFpbGVkIHRvIGxvYWQgTG9nRmlsZS4gTW91bnRpbmcgcmVhZC1vbmx5LlwmIzM0Oyk7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTE1OTEtXHRcdGlmICghc2JfcmRvbmx5KHNiKSBcdTAwMjZcdTAwMjYgdm9sLVx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xuZnMvbnRmcy9zdXBlci5jOjE1OTI6XHRcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG5mcy9udGZzL3N1cGVyLmMtMTU5My1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDslcy4gIE1vdW50aW5nIHJlYWQtb25seSVzXCYjMzQ7LCBlczEsIGVzMik7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTE2MDYtXHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0OyVzLiAgTW91bnRpbmcgcmVhZC1vbmx5JXNcJiMzNDssIGVzMSwgZXMyKTtcbmZzL250ZnMvc3VwZXIuYzoxNjA3Olx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbmZzL250ZnMvc3VwZXIuYy0xNjA4LVx0XHROVm9sU2V0RXJyb3JzKHZvbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTlRGUyBXcml0ZSBTdXBwb3J0OiBBIEtlcm5lbCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIE5URlMgYW5kIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhZC93cml0ZSBjYXBhYmlsaXRpZXMuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0ICpjYW4qIGJlIG1vdW50ZWQgcmVhZC13cml0ZSwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4gQnV0IGxldCYjMzk7cyB2ZXJpZnkgdGhpcyB0aG9yb3VnaGx5OyBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBmcy9udGZzL0tjb25maWdgLiBSaWdodCwganVzdCBjb25maXJtaW5nLCBpdCYjMzk7cyBqdXN0IGBOVEZTX0ZTYCB0aGF0JiMzOTtzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXRlbT8gT2theSwgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEhvbGQgb24uLi4gZGlkIEkgcmVhZCBzb21ldGhpbmcgYWJvdXQgYE5URlNfUldgIGJlaW5nIGRlcHJlY2F0ZWQgb3IgcmVtb3ZlZCwgbWF5YmUgaW4gMjAyND8gVGhhdCYjMzk7cyBjb25jZXJuaW5nLCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbW1pdCBoaXN0b3J5IHNheXMsIG9yIGF0IGxlYXN0IHNlYXJjaCB0aGUgY29uZmlnIGZpbGUgZm9yIGEgbWVudGlvbi4gSSBjYW4mIzM5O3QgdXNlIGBnaXQgbG9nYCBoZXJlLCBidXQgSSBjYW4gdXNlIGdyZXAsIHdoaWNoIEkmIzM5O3ZlIHVzZWQgYWxyZWFkeS4gT2gsIHJpZ2h0LCBJICpkaWQqIGdyZXAgZm9yIGBOVEZTX1JXYCwgYW5kIHRoZSByZXN1bHRzIHdlcmUgZW1wdHkuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHNvIGVpdGhlciBgTlRGU19GU2Agbm93IGltcGxpY2l0bHkgaW5jbHVkZXMgd3JpdGUgc3VwcG9ydCwgb3Igd3JpdGUgc3VwcG9ydCB3YXMgY29tcGxldGVseSBkcm9wcGVkIGF0IHNvbWUgcG9pbnQuIEl0JiMzOTtzIHRpbWUgdG8gaW52ZXN0aWdhdGUgZnVydGhlciEgVGhlIGltcG9ydGFudCB0aGluZyBpcyB3aGV0aGVyIEkgY2FuIHRyYWNlIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHdyaXRlIG9wZXJhdGlvbnMuIExldCBtZSBzZWUgaWYgSSBjYW4gZmluZCBob3cgdGhlIHVwZGF0ZSBvZiB0aGUgYXR0cmlidXRlcyBsaXN0cyBhcmUgaGFuZGxlZCBieSBzZWFyY2hpbmcgaWYgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpcyByZWFjaGFibGUgc29tZXdoZXJlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgd3JpdGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19hdHRybGlzdF91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTM1NDE9c3RhdGljIGludCBudGZzX2F0dHJfdXBkYXRlX21ldGEoc3RydWN0IGF0dHJfcmVjb3JkICphLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0zNTkwLVxuZnMvbnRmcy9hdHRyaWIuYzozNTkxOlx0XHRcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xuZnMvbnRmcy9hdHRyaWIuYy0zNTkyLVx0XHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYz0zNjgwPWludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0zODE2LVx0XHRcdFx0fVxuZnMvbnRmcy9hdHRyaWIuYzozODE3Olx0XHRcdFx0aWYgKG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpKVxuZnMvbnRmcy9hdHRyaWIuYy0zODE4LVx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTM4NTYtXHRcdFx0Y3R4LVx1MDAzZWFsX2VudHJ5LVx1MDAzZWxvd2VzdF92Y24gPSBjcHVfdG9fbGU2NChzdG9wX3Zjbik7XG5mcy9udGZzL2F0dHJpYi5jOjM4NTc6XHRcdFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XG5mcy9udGZzL2F0dHJpYi5jLTM4NTgtXHRcdFx0aWYgKGVycilcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTQ1OTU9c3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2l6ZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTQ3NTItXHRcdH1cbmZzL250ZnMvYXR0cmliLmM6NDc1MzpcdFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XG5mcy9udGZzL2F0dHJpYi5jLTQ3NTQtXHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00ODA4LVxuZnMvbnRmcy9hdHRyaWIuYzo0ODA5Olx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XG5mcy9udGZzL2F0dHJpYi5jLTQ4MTAtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmZzL250ZnMvYXR0cmxpc3QuYz0yNT1pbnQgbnRmc19hdHRybGlzdF9uZWVkKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzL2F0dHJsaXN0LmMtNTMtXG5mcy9udGZzL2F0dHJsaXN0LmM6NTQ6aW50IG50ZnNfYXR0cmxpc3RfdXBkYXRlKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pKVxuZnMvbnRmcy9hdHRybGlzdC5jLTU1LXtcbi0tXG5mcy9udGZzL2F0dHJsaXN0LmM9MTIxPWludCBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0cilcbi0tXG5mcy9udGZzL2F0dHJsaXN0LmMtMjM1LVxuZnMvbnRmcy9hdHRybGlzdC5jOjIzNjpcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKG5pKTtcbmZzL250ZnMvYXR0cmxpc3QuYy0yMzctXHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jPTI1Nz1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcbi0tXG5mcy9udGZzL2F0dHJsaXN0LmMtMzAwLVxuZnMvbnRmcy9hdHRybGlzdC5jOjMwMTpcdHJldHVybiBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTtcbmZzL250ZnMvYXR0cmxpc3QuYy0zMDItfVxuLS1cbmZzL250ZnMvYXR0cmxpc3QuaD0xNz1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7XG5mcy9udGZzL2F0dHJsaXN0Lmg6MTg6aW50IG50ZnNfYXR0cmxpc3RfdXBkYXRlKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pKTtcbmZzL250ZnMvYXR0cmxpc3QuaC0xOS1cbi0tXG5mcy9udGZzL2luZGV4LmM9MTIzNj1zdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxuLS1cbmZzL250ZnMvaW5kZXguYy0xMzQwLVx0XHRcdFx0bGUzMl90b19jcHUoY3R4LVx1MDAzZWF0dHItXHUwMDNlZGF0YS5yZXNpZGVudC52YWx1ZV9sZW5ndGgpKSkge1xuZnMvbnRmcy9pbmRleC5jOjEzNDE6XHRcdFx0aWYgKG50ZnNfYXR0cmxpc3RfdXBkYXRlKGN0eC1cdTAwM2ViYXNlX250ZnNfaW5vID9cbmZzL250ZnMvaW5kZXguYy0xMzQyLVx0XHRcdFx0XHRcdCBjdHgtXHUwMDNlYmFzZV9udGZzX2lubyA6IGN0eC1cdTAwM2VudGZzX2lubykpXG4tLVxuZnMvbnRmcy9pbm9kZS5jPTMwMzE9aW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzL2lub2RlLmMtMzEzOS1cbmZzL250ZnMvaW5vZGUuYzozMTQwOlx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUobmkpO1xuZnMvbnRmcy9pbm9kZS5jLTMxNDEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU1OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKlRyYWNpbmcgdGhlIE5URlMgQXR0cmlidXRlIFVwZGF0ZSBQYXRoKioKCkhtbSwgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBnZXRzIGludm9rZWQgZGlyZWN0bHkgZnJvbSBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlICp0aGF0KiBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIHdoeSBgbnRmc19hdHRybGlzdF91cGRhdGVgIGlzIGJlaW5nIHRyaWdnZXJlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoaXMgc2hvdWxkIGhlbHAgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZXhlY3V0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvYXR0cmliLmM9MzU0MT1zdGF0aWMgaW50IG50ZnNfYXR0cl91cGRhdGVfbWV0YShzdHJ1Y3QgYXR0cl9yZWNvcmQgKmEsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTM2NjctLypcbmZzL250ZnMvYXR0cmliLmM6MzY2ODogKiBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMgLSB1cGRhdGUgbWFwcGluZyBwYWlycyBmb3IgbnRmcyBhdHRyaWJ1dGVcbmZzL250ZnMvYXR0cmliLmMtMzY2OS0gKiBAbmk6XHRcdG5vbi1yZXNpZGVudCBudGZzIGlub2RlIGZvciB3aGljaCB3ZSBuZWVkIHVwZGF0ZVxuLS1cbmZzL250ZnMvYXR0cmliLmMtMzY3OS0gKi9cbmZzL250ZnMvYXR0cmliLmM6MzY4MDppbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxuZnMvbnRmcy9hdHRyaWIuYy0zNjgxLXtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTQxNjI9c3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX3NocmluayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXplKVxuLS1cbmZzL250ZnMvYXR0cmliLmMtNDI2Mi1cdFx0LyogV3JpdGUgbWFwcGluZyBwYWlycyBmb3IgbmV3IHJ1bmxpc3QuICovXG5mcy9udGZzL2F0dHJpYi5jOjQyNjM6XHRcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCAvKmZpcnN0X2ZyZWVfdmNuKi8pO1xuZnMvbnRmcy9hdHRyaWIuYy00MjY0LVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00MzI5PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTQ1MDEtXHRcdG5pLVx1MDAzZWFsbG9jYXRlZF9zaXplID0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgZmlyc3RfZnJlZV92Y24pO1xuZnMvbnRmcy9hdHRyaWIuYzo0NTAyOlx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuZnMvbnRmcy9hdHRyaWIuYy00NTAzLVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00NTY1LVx0XHRcdGRvd25fcmVhZChcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuZnMvbnRmcy9hdHRyaWIuYzo0NTY2Olx0XHRpZiAobnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKSlcbmZzL250ZnMvYXR0cmliLmMtNDU2Ny1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBvbGQgbWFwcGluZyBwYWlyc1wmIzM0Oyk7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00OTcwPWludCBudGZzX2F0dHJfbWFwX2NsdXN0ZXIoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuX3N0YXJ0LCBzNjQgKmxjbl9zdGFydCxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTUwOTUtXHRcdG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChjdHgpO1xuZnMvbnRmcy9hdHRyaWIuYzo1MDk2Olx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuZnMvbnRmcy9hdHRyaWIuYy01MDk3LVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz01MzAxPWludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy01MzUxLVx0XHRuaS1cdTAwM2Vpbml0aWFsaXplZF9zaXplICYjNDM7PSBudGZzX2NsdXN0ZXJfdG9fYnl0ZXModm9sLCBsZW4pO1xuZnMvbnRmcy9hdHRyaWIuYzo1MzUyOlx0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbmZzL250ZnMvYXR0cmliLmMtNTM1My1cdHVwX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz01Mzc5PWludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0IGxlbilcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTU0MzYtXHRpZiAobmktXHUwMDNlYWxsb2NhdGVkX3NpemUgXHUwMDNlIDApIHtcbmZzL250ZnMvYXR0cmliLmM6NTQzNzpcdFx0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbmZzL250ZnMvYXR0cmliLmMtNTQzOC1cdFx0aWYgKHJldCkge1xuLS1cbmZzL250ZnMvYXR0cmliLmM9NTQ3ND1pbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9wdW5jaF9ob2xlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0IGxlbilcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTU1MTQtXG5mcy9udGZzL2F0dHJpYi5jOjU1MTU6XHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuZnMvbnRmcy9hdHRyaWIuYy01NTE2LVx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTU1MzE9aW50IG50ZnNfYXR0cl9mYWxsb2NhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBieXRlX2xlbiwgYm9vbCBrZWVwX3NpemUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy01NjgyLVx0XHRkb3duX3dyaXRlKFx1MDAyNm5pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG5mcy9udGZzL2F0dHJpYi5jOjU2ODM6XHRcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XG5mcy9udGZzL2F0dHJpYi5jLTU2ODQtXHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9hdHRyaWIuaD0xMzI9aW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuaC0xMzQtXHRcdF9fbGUxNiBmbGFncyk7XG5mcy9udGZzL2F0dHJpYi5oOjEzNTppbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKTtcbmZzL250ZnMvYXR0cmliLmgtMTM2LXN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfYXR0cl92Y25fdG9fcmwoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuLCBzNjQgKmxjbik7XG4tLVxuZnMvbnRmcy9jb21wcmVzcy5jPTEyNzQ9c3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcyxcbi0tXG5mcy9udGZzL2NvbXByZXNzLmMtMTQwNy1cbmZzL250ZnMvY29tcHJlc3MuYzoxNDA4Olx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbmZzL250ZnMvY29tcHJlc3MuYy0xNDA5LVx0dXBfd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbi0tXG5mcy9udGZzL2ZpbGUuYz03OD1zdGF0aWMgaW50IG50ZnNfdHJpbV9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKnZpKVxuLS1cbmZzL250ZnMvZmlsZS5jLTExMy1cdFx0XHRuaS1cdTAwM2VhbGxvY2F0ZWRfc2l6ZSA9IG50ZnNfY2x1c3Rlcl90b19ieXRlcyh2b2wsIHZjbl90cik7XG5mcy9udGZzL2ZpbGUuYzoxMTQ6XHRcdFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcbmZzL250ZnMvZmlsZS5jLTExNS1cdFx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMvaW5vZGUuYz0yNzIzPWludCBfX250ZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICp2aSwgaW50IHN5bmMpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTI3NjItXHRcdGRvd25fd3JpdGUoXHUwMDI2bmktXHUwMDNlcnVubGlzdC5sb2NrKTtcbmZzL250ZnMvaW5vZGUuYzoyNzYzOlx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuZnMvbnRmcy9pbm9kZS5jLTI3NjQtXHRcdGlmICghZXJyKVxuLS1cbmZzL250ZnMvbWZ0LmM9MTAwNz1zdGF0aWMgaW50IG50ZnNfbWZ0X2F0dHJfZXh0ZW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzL21mdC5jLTEwMjctXG5mcy9udGZzL21mdC5jOjEwMjg6XHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuZnMvbnRmcy9tZnQuYy0xMDI5LVx0aWYgKHJldClcbi0tXG5mcy9udGZzL21mdC5jPTEwNTM9c3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuLS1cbmZzL250ZnMvbWZ0LmMtMTMyNi1cdFx0bWFya19tZnRfcmVjb3JkX2RpcnR5KGN0eC1cdTAwM2VudGZzX2lubyk7XG5mcy9udGZzL21mdC5jOjEzMjc6XHR9IGVsc2UgaWYgKHN0YXR1cy5tcF9leHRlbmRlZCBcdTAwMjZcdTAwMjYgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG1mdGJtcF9uaSwgMCkpIHtcbmZzL250ZnMvbWZ0LmMtMTMyOC1cdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0ZhaWxlZCB0byByZXN0b3JlIG1hcHBpbmcgcGFpcnMuJXNcJiMzNDssIGVzKTtcbi0tXG5mcy9udGZzL21mdC5jPTE0ODY9c3RhdGljIGludCBudGZzX21mdF9kYXRhX2V4dGVuZF9hbGxvY2F0aW9uX25vbG9jayhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbi0tXG5mcy9udGZzL21mdC5jLTE3MzgtXHR9XG5mcy9udGZzL21mdC5jOjE3Mzk6XHRpZiAobXBfZXh0ZW5kZWQgXHUwMDI2XHUwMDI2IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhtZnRfbmksIDApKSB7XG5mcy9udGZzL21mdC5jLTE3NDAtXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBtYXBwaW5nIHBhaXJzLiVzXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlRGUyBEcml2ZXIgV3JpdGUgQ2FwYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBzZWUuLi4gc28gYG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc2AgaXMgY2FsbGVkIGZyb20gYF9fbnRmc193cml0ZV9pbm9kZWAsIHdoaWNoIGlzIGl0c2VsZiB0cmlnZ2VyZWQgZHVyaW5nIGlub2RlIHdyaXRpbmcuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgKndyaXRlKiBvcGVyYXRpb25zIGFyZSBpbmRlZWQgaGFuZGxlZCB3aXRoaW4gdGhpcyBgZnMvbnRmcy9gIGRyaXZlci4gQnV0IHdhaXQsIEkgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byBtaXggdGhpbmdzIHVwLiBBbSBJIHRoaW5raW5nIG9mIHRoZSBvcmlnaW5hbCBgZnMvbnRmcy9gIGRyaXZlciwgb3IgYW0gSSBjb25mbGF0aW5nIGl0IHdpdGggdGhhdCBuZXdlciBgZnMvbnRmczMvYCBkcml2ZXIgZGV2ZWxvcGVkIGJ5IFBhcmFnb24/IFRoZSBvbGQgYGZzL250ZnMvYCBpcyB0aGUgQW50b24gQWx0YXBhcm1ha292IHZlcnNpb24sIHJpZ2h0PyBSaWdodC4gVGhhdCB2ZXJzaW9uICpkaWQqIGhhdmUgd3JpdGUgc3VwcG9ydCwgYnV0IGl0IHdhcyBoZWF2aWx5IHJlc3RyaWN0ZWQsIHdhc24mIzM5O3QgaXQ/IExpbWl0ZWQgdG8gb3ZlcndyaXRpbmcgZXhpc3RpbmcgZGF0YSB3aXRob3V0IHJlc2l6aW5nIG9yIHdoYXRub3QuIEp1c3QgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gYGZzL250ZnMvZmlsZS5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSBmdW5jdGlvbiBsaWtlIGBudGZzX2ZpbGVfd3JpdGVfaXRlcmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGp1c3QgdG8gY29uZmlybSBteSBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9maWxlLmM9NDk1PXN0YXRpYyBzc2l6ZV90IG50ZnNfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbnRmcy9maWxlLmMtNTM3LVxuZnMvbnRmcy9maWxlLmM6NTM4OnN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvbnRmcy9maWxlLmMtNTM5LXtcbi0tXG5mcy9udGZzL2ZpbGUuYz0xMTQ2PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnRmc19maWxlX29wcyA9IHtcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMTQ4LVx0LnJlYWRfaXRlclx0PSBudGZzX2ZpbGVfcmVhZF9pdGVyLFxuZnMvbnRmcy9maWxlLmM6MTE0OTpcdC53cml0ZV9pdGVyXHQ9IG50ZnNfZmlsZV93cml0ZV9pdGVyLFxuZnMvbnRmcy9maWxlLmMtMTE1MC1cdC5mc3luY1x0XHQ9IG50ZnNfZmlsZV9mc3luYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgTlRGUyBGaWxlc3lzdGVtIEhpc3RvcnkqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSB0cnlpbmcgdG8gcmVtZW1iZXIuLi4gd2FzbiYjMzk7dCB0aGVyZSBhbiBgbnRmc19maWxlX2Fpb193cml0ZWAgb3Igc29tZXRoaW5nIHNpbWlsYXIgaW4gdGhlIGxlZ2FjeSBgZnMvbnRmcy9gIGRyaXZlcj8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0LiBSaWdodCwgcmlnaHQsIGxldCYjMzk7cyBzZWUgd2hlbiB0aGF0IHdhcyBpbXBsZW1lbnRlZC4gQWgsIGhlcmUgd2UgYXJlOiAmIzM0O01vbiBKdWwgNiAwNDoyNToyNCAyMDI2JiMzNDsuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgYSB0aW1lIGZyYW1lIGF0IGxlYXN0LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBudGZzX2ZpbGVfd3JpdGVfaXRlcmAgZXhpc3RzIOKAkyBJJiMzOTttIHByZXR0eSBzdXJlIEkgc2F3IHRoYXQgb25lIHJlY2VudGx5IGluIGBmcy9udGZzL2ZpbGUuY2AuIFllcCwgdGhlcmUgaXQgaXMuIE9rYXksIHRoYXQmIzM5O3Mgd2hhdCBJIHRob3VnaHQuCgpCdXQsIGEgbmFnZ2luZyBxdWVzdGlvbiByZW1haW5zLiBXYXMgYGZzL250ZnMvYCBhY3R1YWxseSBqdXN0IGBudGZzM2AgcmVuYW1lZCBhdCBzb21lIHBvaW50PyBNeSBtaW5kIGlzIHBsYXlpbmcgdHJpY2tzIG9uIG1lIHNvbWV0aW1lcyB3aXRoIGFsbCB0aGVzZSByZXZpc2lvbnMuIEluIG1vcmUgcmVjZW50IGtlcm5lbHMsIHRoZSBkaXJlY3RvcmllcyBhcmUgZmx1aWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgZ29pbmcgZG93biB0aGUgd3JvbmcgdHJhY2suIERpZCB0aGV5IHJlbW92ZSBgZnMvbnRmcy9gIGFuZCBrZWVwIGBmcy9udGZzMy9gLCBvciBtYXliZSByZW5hbWUgYGZzL250ZnMzL2AgdG8gYGZzL250ZnMvYD8gSSByZWFsbHkgbmVlZCB0byBnZXQgdGhpcyBzdHJhaWdodC4KCkFscmlnaHQsIHRpbWUgdG8gZ28gYmFjayB0byB0aGUgc291cmNlLiBMZXQgbWUganVzdCBvcGVuIHVwIGBmcy9udGZzL0tjb25maWdgIG9uZSBtb3JlIHRpbWUgYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gb3JpZW50ZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BhcmFnb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTlRGUyBTdXBlcmJsb2NrIEF1dGhvcnNoaXAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvJiMzOTtzIGJlZW4gd29ya2luZyBvbiB0aGUgTlRGUyBzdXBlcmJsb2NrIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYGZzL250ZnMvc3VwZXIuY2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdXBlcmJsb2NrJiMzOTtzIGltcGxlbWVudGF0aW9uLCBhbmQgaG9wZWZ1bGx5LCBJIGNhbiBnbGVhbiBzb21lIGF1dGhvcnNoaXAgZGV0YWlscyBkaXJlY3RseSBmcm9tIHRoZSBjb21tZW50cyBvciByZXZpc2lvbiBoaXN0b3J5IHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hvJiMzOTtzIGNvbnRyaWJ1dGVkIGFuZCB3aGVuLiBUaGlzIHNob3VsZCBiZSBhIGZhaXJseSByb3V0aW5lIGludmVzdGlnYXRpb24gZm9yIG1lLCBiZWluZyBhIHNlYXNvbmVkIGRldmVsb3BlciBpbiB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9BVVRIT1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jPTI3MDU9bW9kdWxlX2V4aXQoZXhpdF9udGZzX2ZzKTtcbmZzL250ZnMvc3VwZXIuYy0yNzA2LVxuZnMvbnRmcy9zdXBlci5jOjI3MDc6TU9EVUxFX0FVVEhPUihcJiMzNDtBbnRvbiBBbHRhcGFybWFrb3YgXHUwMDNjYW50b25AdHV4ZXJhLmNvbVx1MDAzZVwmIzM0Oyk7IC8qIE9yaWdpbmFsIHJlYWQtb25seSBOVEZTIGRyaXZlciAqL1xuZnMvbnRmcy9zdXBlci5jOjI3MDg6TU9EVUxFX0FVVEhPUihcJiMzNDtOYW1qYWUgSmVvbiBcdTAwM2NsaW5raW5qZW9uQGtlcm5lbC5vcmdcdTAwM2VcJiMzNDspOyAvKiBBZGQgd3JpdGUsIGlvbWFwIGFuZCB2YXJpb3VzIGZlYXR1cmVzICovXG5mcy9udGZzL3N1cGVyLmMtMjcwOS1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TlRGUyByZWFkLXdyaXRlIGZpbGVzeXN0ZW0gZHJpdmVyXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTlRGUyBGaWxlc3lzdGVtIFVwZGF0ZSoqCgpPa2F5LCBzbyBOYW1qYWUgSmVvbiYjMzk7cyBiZWVuIGJ1c3khIEl0IGxvb2tzIGxpa2UgaGUmIzM5O3MgYWRkZWQgd3JpdGUsIGlvbWFwLCBhbmQgYSBidW5jaCBvZiBvdGhlciBmZWF0dXJlcyB0byB0aGUgYGZzL250ZnMvYCBkcml2ZXIuIEhtbSwgSSB3b25kZXIgaWYgdGhpcyBpcyBhIGNvbXBsZXRlIG92ZXJoYXVsLCBhIGJyYW5kIG5ldyBkcml2ZXIsIG9yIGp1c3QgYSBzaWduaWZpY2FudCB1cGRhdGUgdG8gdGhlIGV4aXN0aW5nIG9uZS4gR2l2ZW4gSmVvbiYjMzk7cyB3b3JrIG9uIGBrc21iZGAgYW5kIGBleGZhdGAsIGl0JiMzOTtzIGRlZmluaXRlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBwb3NzaWJpbGl0eSB0aGF0IGhlJiMzOTtzIGJlZW4gcmV2aXNpdGluZyBhbmQgaW1wcm92aW5nIHRoZSBgZnMvbnRmcy9gIGNvZGViYXNlIHJlY2VudGx5LiBSaWdodCwgdGhlIGNvbmZpZyBvcHRpb24gaXMgYE5URlNfRlNgLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBtb2RpZnlpbmcgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCB3aXRoaW4gYGZzL250ZnMvYXR0cmxpc3QuY2AuIFRoZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQ6CgpgYGBjCglpZiAoIShWRlNfSShiYXNlX25pKS0mZ3Q7aV9zYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9BQ1RJVkUpKQoJCXJldHVybiAtRUlPOwpgYGAKCkFoLCBJIHNlZS4gVGhpcyBpcyBkZXNpZ25lZCB0byBhZGRyZXNzIGEgcG90ZW50aWFsIGRlYWRsb2NrIHNpdHVhdGlvbi4gVGhlIGNoZWNrIGhlcmUgZW5zdXJlcyB0aGUgc3VwZXJibG9jayBpcyBzdGlsbCBhY3RpdmUgYmVmb3JlIHByb2NlZWRpbmcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoKWAgY2xlYXJzIHRoZSBgU0JfQUNUSVZFYCBmbGFnIGJlZm9yZSBpbm9kZXMgYXJlIGV2aWN0ZWQgZnJvbSB0aGUgY2FjaGUuIFNvLCBpZiBgbnRmc19hdHRybGlzdF91cGRhdGVgIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgZXZpY3Rpb24gcHJvY2VzcyBpdHNlbGYgKHBlcmhhcHMgdGhyb3VnaCBgbnRmc19ldmljdF9pbm9kZWAsIHdoaWNoIGxlYWRzIHRvIGBudGZzX2NsZWFyX2lub2RlYCwgYW5kIHRoZW4uLi4pLCBpdCBjYW4gZW5jb3VudGVyIGEgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gbWlnaHQgZW5kIHVwIHdhaXRpbmcgb24gYW4gYXR0cmlidXRlIGxpc3QgaW5vZGUgdGhhdCYjMzk7cyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGZyZWVkLCBpLmUuLCBpbiB0aGUgYElfRlJFRUlOR2Agc3RhdGUuIFRoaXMgbmV3IGNoZWNrIHByZXZlbnRzIHRoYXQuIEluc3RlYWQgb2YgZ2V0dGluZyBzdHVjaywgaXQgcmV0dXJucyBhIGAtRUlPYCBlcnJvciwgd2hpY2ggaXMgbXVjaCBiZXR0ZXIgdGhhbiBhIGRlYWRsb2NrLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hlcmUgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBldmljdGlvbiBzZXF1ZW5jZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBiZSBjb21wbGV0ZWx5IHN1cmUgYWJvdXQgdGhlIGV4YWN0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19ldmljdF9pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZXZpY3RfaW5vZGVgIGZvciBOVEZTKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGV2aWN0X2lub2RlYCBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtcyBpbXBsZW1lbnRhdGlvbi4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW50cmljYWNpZXMgb2YgaXRzIG9wZXJhdGlvbiB3aXRoaW4gdGhlIGBmcy9udGZzL3N1cGVyLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIHRvIHNwZWFrLCB3aGVuIGEgdm5vZGUgaXMgYmVpbmcgZGlzY2FyZGVkLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGhhbmRsZSBjbGVhbnVwLCBhbnkgdW5pcXVlIE5URlMtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgYXJvdW5kIGpvdXJuYWxpbmcsIGF0dHJpYnV0ZSBsaXN0cywgb3IgcG90ZW50aWFsbHkgZGVmZXJyZWQgd29yayByZXF1aXJlZCBkdXJpbmcgYW4gZXZpY3Rpb24uIExldCYjMzk7cyBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IHRoYXQmIzM5O3MgcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHByb2JsZW0gSSYjMzk7bSB3b3JraW5nIG9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBzcGVjaWZpYyBOVEZTIGRhdGEgc3RydWN0dXJlcyBhbmQgYSBwb3NzaWJsZSBjb25uZWN0aW9uIHRvIHRoZSB2YXJpb3VzIGF0dHJpYnV0ZSBsaXN0cyBmb3IgdGhlIGdpdmVuIGZpbGUgb3IgZGlyZWN0b3J5LiBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYW55IGNhbGxzIHRvIHRoZSBqb3VybmFsaW5nIGZ1bmN0aW9ucywgcGVyaGFwcyB0byBmbHVzaCBjaGFuZ2VzIG9yIHRvIHVwZGF0ZSBhbnkgcmVsZXZhbnQgbWV0YWRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbm9kZS5jPTM3ND1pbnQgbnRmc19kcm9wX2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL250ZnMvaW5vZGUuYy0zODUtXG5mcy9udGZzL2lub2RlLmM6Mzg2Olx0XHRcdFx0LyogVG8gYXZvaWQgZXZpY3RfaW5vZGUgY2FsbCBzaW11bHRhbmVvdXNseSAqL1xuZnMvbnRmcy9pbm9kZS5jLTM4Ny1cdFx0XHRcdGF0b21pY19pbmMoXHUwMDI2aW5vZGUtXHUwMDNlaV9jb3VudCk7XG4tLVxuZnMvbnRmcy9zdXBlci5jPTIxNjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG50ZnNfc29wcyA9IHtcbi0tXG5mcy9udGZzL3N1cGVyLmMtMjE2OC1cdC5zdGF0ZnNcdFx0PSBudGZzX3N0YXRmcyxcdFx0LyogU3lzY2FsbDogc3RhdGZzICovXG5mcy9udGZzL3N1cGVyLmM6MjE2OTpcdC5ldmljdF9pbm9kZVx0PSBudGZzX2V2aWN0X2JpZ19pbm9kZSxcbmZzL250ZnMvc3VwZXIuYy0yMTcwLVx0LnNob3dfb3B0aW9uc1x0PSBudGZzX3Nob3dfb3B0aW9ucyxcdC8qIFNob3cgbW91bnQgb3B0aW9ucyBpbiBwcm9jLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg0MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbnRmc19ldmljdF9iaWdfaW5vZGVgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIFRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW0gY29kZSBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyBvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBudGZzX2V2aWN0X2JpZ19pbm9kZWAgd2l0aGluIGBmcy9udGZzL2lub2RlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZXZpY3Rpb24gb2YgbGFyZ2UgaW5vZGVzIGluIHRoZSBOVEZTIGZpbGUgc3lzdGVtLiBNeSBnb2FsIGlzIHRvIGdyYXNwIGl0cyBsb2dpYywgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGFuZCBlbnN1cmUgaXQgYWxpZ25zIHdpdGggYmVzdCBwcmFjdGljZXMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuIEkmIzM5O2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgYW5kIHRoZSBjb250cm9sIGZsb3cgdGhyb3VnaCB0aGUgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2V2aWN0X2JpZ19pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuYz0yMjMzPXN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIyNjItLypcbmZzL250ZnMvaW5vZGUuYzoyMjYzOiAqIG50ZnNfZXZpY3RfYmlnX2lub2RlIC0gY2xlYW4gdXAgdGhlIG50ZnMgc3BlY2lmaWMgcGFydCBvZiBhbiBpbm9kZVxuZnMvbnRmcy9pbm9kZS5jLTIyNjQtICogQHZpOlx0XHR2ZnMgaW5vZGUgcGVuZGluZyBhbm5paGlsYXRpb25cbi0tXG5mcy9udGZzL2lub2RlLmMtMjI3MS0gKi9cbmZzL250ZnMvaW5vZGUuYzoyMjcyOnZvaWQgbnRmc19ldmljdF9iaWdfaW5vZGUoc3RydWN0IGlub2RlICp2aSlcbmZzL250ZnMvaW5vZGUuYy0yMjczLXtcbi0tXG5mcy9udGZzL2lub2RlLmg9MzEyPWludCBudGZzX2Ryb3BfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvbnRmcy9pbm9kZS5oOjMxMzp2b2lkIG50ZnNfZXZpY3RfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpO1xuZnMvbnRmcy9pbm9kZS5oLTMxNC12b2lkIF9fbnRmc19pbml0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBudGZzX2lub2RlICpuaSk7XG4tLVxuZnMvbnRmcy9tZnQuYz02NjU9c3RhdGljIGludCBudGZzX3Rlc3RfaW5vZGVfd2Ioc3RydWN0IGlub2RlICp2aSwgdTY0IGlubywgdm9pZCAqZGF0YSlcbi0tXG5mcy9udGZzL21mdC5jLTY3My1cdCAqIFdpdGhvdXQgdGhpcywgbnRmc193cml0ZV9tc3RfYmxvY2soKSBjb3VsZCBjYWxsIGlwdXRfZmluYWwoKVxuZnMvbnRmcy9tZnQuYzo2NzQ6XHQgKiAsIGFuZCBudGZzX2V2aWN0X2JpZ19pbm9kZSgpIGNvdWxkIHRyeSB0byB1bmxpbmsgdGhpcyBpbm9kZVxuZnMvbnRmcy9tZnQuYy02NzUtXHQgKiBhbmQgdGhlIGNvbnRleCBjb3VsZCBiZSBibG9ja2VkIGluZmluaXRseSBpbiBtYXBfbWZ0X3JlY29yZCgpLlxuLS1cbmZzL250ZnMvc3VwZXIuYz0yMTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBudGZzX3NvcHMgPSB7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTIxNjgtXHQuc3RhdGZzXHRcdD0gbnRmc19zdGF0ZnMsXHRcdC8qIFN5c2NhbGw6IHN0YXRmcyAqL1xuZnMvbnRmcy9zdXBlci5jOjIxNjk6XHQuZXZpY3RfaW5vZGVcdD0gbnRmc19ldmljdF9iaWdfaW5vZGUsXG5mcy9udGZzL3N1cGVyLmMtMjE3MC1cdC5zaG93X29wdGlvbnNcdD0gbnRmc19zaG93X29wdGlvbnMsXHQvKiBTaG93IG1vdW50IG9wdGlvbnMgaW4gcHJvYy4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MzcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBudGZzX2V2aWN0X2JpZ19pbm9kZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaWcgaW50byB0aGUgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgcmV2b2x2ZXMgYXJvdW5kIGl0cyAqcHVycG9zZSouIEJhc2VkIG9uIHRoZSBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY29yZSByb3V0aW5lIHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggdGhlIGV2aWN0aW9uIG9mIGxhcmdlIGlub2Rlcy4gRXZpY3Rpb24uLi50aGF0IHRlbGxzIG1lIHRoaXMgbGlrZWx5IHBsYXlzIGEgcm9sZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGZsdXNoaW5nIG9mIGlub2RlIGRhdGEgZnJvbSB0aGUgY2FjaGUsIHByZXN1bWFibHkgdG8gbWFrZSBzcGFjZSBmb3Igb3RoZXIgYWN0aXZlIGlub2RlcyBvciB0byBmcmVlIHVwIHZhbHVhYmxlIFJBTS4KCkkmIzM5O20gaW5zdGFudGx5IGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0LiAqV2hlbiogaXMgdGhpcyBmdW5jdGlvbiB0cmlnZ2VyZWQ/IElzIGl0IGEgYmFja2dyb3VuZCBwcm9jZXNzLCBzb21ldGhpbmcgZHJpdmVuIGJ5IG1lbW9yeSBwcmVzc3VyZSwgb3IgaXMgaXQgaW52b2tlZCBkaXJlY3RseSBpbiByZXNwb25zZSB0byBzcGVjaWZpYyBvcGVyYXRpb25zIGxpa2UgYSBmaWxlIGNsb3NlLCBvciBtZXRhZGF0YSB3cml0ZT8gVW5kZXJzdGFuZGluZyB0aGUgdHJpZ2dlcmluZyBldmVudHMgaXMgY3JpdGljYWwgdG8gYXNzZXNzIGl0cyBvdmVyYWxsIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4KCk5leHQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24uIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyBpdCBpZGVudGlmaWVzICYjMzQ7YmlnJiMzNDsgaW5vZGVzLiBJcyBpdCBiYXNlZCBvbiBhIHN0YXRpYyB0aHJlc2hvbGQsIGNhbGN1bGF0ZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gc3lzdGVtIG1lbW9yeSwgb3IgaXMgaXQgYSBmdW5jdGlvbiBvZiB0aGUgaW5vZGUmIzM5O3Mgc2l6ZSBvciB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBleHRlbnRzPyBJIHdvdWxkIGV4cGVjdCB0aGlzIHRvIGJlIGEgcGVyZm9ybWFuY2UgY29uY2VybiBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBmaW5lLXR1bmVkLiBIb3cgaXMgdGhhdCBpbmZvcm1hdGlvbiBlbmNvZGVkLCBhbmQgaG93IGFyZSB0aGUgaW5vZGVzIHNlbGVjdGVkPyBUaGF0IHdpbGwgaW5mbHVlbmNlIGl0cyBlZmZpY2llbmN5LgoKV2hhdCBzdHJhdGVnaWVzIGRvZXMgaXQgZW1wbG95IHRvIGFjdHVhbGx5IGV2aWN0IHRoZSBkYXRhPyBEb2VzIGl0IGludm9sdmUgZGlydHkgcGFnZSBmbHVzaGluZywgaW52YWxpZGF0aW5nIGNhY2hlIGVudHJpZXMsIG9yIHBlcmZvcm1pbmcgYW55IGRpcmVjdCBkaXNrIEkvTz8gV2hhdCBhcmUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQ/IEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQgdXNlcyBhbnkgZ2xvYmFsIGxvY2tzIG9yIHBlci1pbm9kZSBsb2NrcywgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbmN1cnJlbmN5IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBQZXJmb3JtYW5jZSBhbmQgY29ycmVjdCBvcGVyYXRpb24gYXJlIGJvdGggaGlnaC1wcmlvcml0eSBjb25jZXJucy4KCkFuZCBmaW5hbGx5LCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBqb3VybmFsaW5nIG9yIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQgb2YgdGhlIE5URlMgZmlsZXN5c3RlbSwgaWYgYXBwbGljYWJsZT8gRG9lcyBpdCBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeT8gQW55IGludGVyYWN0aW9uIHdpdGggbG9nZ2luZyB3aWxsIGhhdmUgdG8gYmUgZXhhbWluZWQgZm9yIGNvcnJlY3RuZXNzIGFuZCBzcGVlZC4gRG9lcyBpdCBoYXZlIGFueSBpbXBsaWNhdGlvbnMgZm9yIGNyYXNoIHJlY292ZXJ5LCBkYXRhIGludGVncml0eSwgb3IgYW55IG90aGVyIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucz8gVGhvc2UgYXJlIHRoZSBjcnVjaWFsIGNvbnNpZGVyYXRpb25zLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBpbnZvbHZlcyBjYXJlZnVsIGhhbmRsaW5nIG9mIG1ldGFkYXRhIGFuZCBkYXRhIGJsb2Nrcywgd2hpY2gsIGlmIG5vdCBwcm9wZXJseSBjb29yZGluYXRlZCwgY291bGQgbGVhZCB0byBmaWxlc3lzdGVtIGNvcnJ1cHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBhbnkgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IG1lY2hhbmlzbXMsIHRvbywgdG8gYXNzZXNzIGl0cyByb2J1c3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNjA6XHR9XG4yMjYxOlx0XG4yMjYyOlx0LypcbjIyNjM6XHQgKiBudGZzX2V2aWN0X2JpZ19pbm9kZSAtIGNsZWFuIHVwIHRoZSBudGZzIHNwZWNpZmljIHBhcnQgb2YgYW4gaW5vZGVcbjIyNjQ6XHQgKiBAdmk6XHRcdHZmcyBpbm9kZSBwZW5kaW5nIGFubmloaWxhdGlvblxuMjI2NTpcdCAqXG4yMjY2Olx0ICogV2hlbiB0aGUgVkZTIGlzIGdvaW5nIHRvIHJlbW92ZSBhbiBpbm9kZSBmcm9tIG1lbW9yeSwgbnRmc19jbGVhcl9iaWdfaW5vZGUoKVxuMjI2NzpcdCAqIGlzIGNhbGxlZCwgd2hpY2ggZGVhbGxvY2F0ZXMgYWxsIG1lbW9yeSBiZWxvbmdpbmcgdG8gdGhlIE5URlMgc3BlY2lmaWMgcGFydFxuMjI2ODpcdCAqIG9mIHRoZSBpbm9kZSBhbmQgcmV0dXJucy5cbjIyNjk6XHQgKlxuMjI3MDpcdCAqIElmIHRoZSBNRlQgcmVjb3JkIGlzIGRpcnR5LCB3ZSBjb21taXQgaXQgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuXG4yMjcxOlx0ICovXG4yMjcyOlx0dm9pZCBudGZzX2V2aWN0X2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKVxuMjI3MzpcdHtcbjIyNzQ6XHRcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSSh2aSk7XG4yMjc1Olx0XG4yMjc2Olx0XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcdTAwMjZ2aS1cdTAwM2VpX2RhdGEpO1xuMjI3NzpcdFxuMjI3ODpcdFx0aWYgKCF2aS1cdTAwM2VpX25saW5rKSB7XG4yMjc5Olx0XHRcdGlmICghTklub0F0dHIobmkpKSB7XG4yMjgwOlx0XHRcdFx0LyogTmV2ZXIgY2FsbGVkIHdpdGggZXh0ZW50IGlub2RlcyAqL1xuMjI4MTpcdFx0XHRcdFdBUk5fT04obmktXHUwMDNlbnJfZXh0ZW50cyA9PSAtMSk7XG4yMjgyOlx0XHRcdFx0bnRmc19kZWxldGVfYmFzZV9pbm9kZShuaSk7XG4yMjgzOlx0XHRcdH1cbjIyODQ6XHRcdFx0Z290byByZWxlYXNlO1xuMjI4NTpcdFx0fVxuMjI4NjpcdFxuMjI4NzpcdFx0aWYgKE5Jbm9EaXJ0eShuaSkpIHtcbjIyODg6XHRcdFx0LyogQ29tbWl0dGluZyB0aGUgaW5vZGUgYWxzbyBjb21taXRzIGFsbCBleHRlbnQgaW5vZGVzLiAqL1xuMjI4OTpcdFx0XHRudGZzX2NvbW1pdF9pbm9kZSh2aSk7XG4yMjkwOlx0XG4yMjkxOlx0XHRcdGlmIChOSW5vRGlydHkobmkpKSB7XG4yMjkyOlx0XHRcdFx0bnRmc19kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gY29tbWl0IGRpcnR5IGlub2RlIDB4JWxseC4gIExvc2luZyBkYXRhIVwmIzM0OyxcbjIyOTM6XHRcdFx0XHRcdCAgIG5pLVx1MDAzZW1mdF9ubyk7XG4yMjk0Olx0XHRcdFx0Tklub0NsZWFyQXR0ckxpc3REaXJ0eShuaSk7XG4yMjk1Olx0XHRcdFx0Tklub0NsZWFyRGlydHkobmkpO1xuMjI5NjpcdFx0XHR9XG4yMjk3Olx0XHR9XG4yMjk4Olx0XG4yMjk5Olx0XHQvKiBObyBuZWVkIHRvIGxvY2sgYXQgdGhpcyBzdGFnZSBhcyBubyBvbmUgZWxzZSBoYXMgYSByZWZlcmVuY2UuICovXG4yMzAwOlx0XHRpZiAobmktXHUwMDNlbnJfZXh0ZW50cyBcdTAwM2UgMCkge1xuMjMwMTpcdFx0XHRpbnQgaTtcbjIzMDI6XHRcbjIzMDM6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmktXHUwMDNlbnJfZXh0ZW50czsgaSYjNDM7JiM0MzspIHtcbjIzMDQ6XHRcdFx0XHRpZiAobmktXHUwMDNlZXh0LmV4dGVudF9udGZzX2lub3NbaV0pXG4yMzA1Olx0XHRcdFx0XHRudGZzX2NsZWFyX2V4dGVudF9pbm9kZShuaS1cdTAwM2VleHQuZXh0ZW50X250ZnNfaW5vc1tpXSk7XG4yMzA2Olx0XHRcdH1cbjIzMDc6XHRcdFx0bmktXHUwMDNlbnJfZXh0ZW50cyA9IDA7XG4yMzA4Olx0XHRcdGt2ZnJlZShuaS1cdTAwM2VleHQuZXh0ZW50X250ZnNfaW5vcyk7XG4yMzA5Olx0XHR9XG4yMzEwOlx0XG4yMzExOlx0cmVsZWFzZTpcbjIzMTI6XHRcdGNsZWFyX2lub2RlKHZpKTtcbjIzMTM6XHRcdF9fbnRmc19jbGVhcl9pbm9kZShuaSk7XG4yMzE0Olx0XG4yMzE1Olx0XHRpZiAoTklub0F0dHIobmkpKSB7XG4yMzE2Olx0XHRcdC8qIFJlbGVhc2UgdGhlIGJhc2UgaW5vZGUgaWYgd2UgYXJlIGhvbGRpbmcgaXQuICovXG4yMzE3Olx0XHRcdGlmIChuaS1cdTAwM2Vucl9leHRlbnRzID09IC0xKSB7XG4yMzE4Olx0XHRcdFx0aXB1dChWRlNfSShuaS1cdTAwM2VleHQuYmFzZV9udGZzX2lubykpO1xuMjMxOTpcdFx0XHRcdG5pLVx1MDAzZW5yX2V4dGVudHMgPSAwO1xuMjMyMDpcdFx0XHRcdG5pLVx1MDAzZWV4dC5iYXNlX250ZnNfaW5vID0gTlVMTDtcbjIzMjE6XHRcdFx0fVxuMjMyMjpcdFx0fVxuMjMyMzpcdFxuMjMyNDpcdFx0aWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNm5pLVx1MDAzZWNvdW50KSlcbjIzMjU6XHRcdFx0V0FSTl9PTigxKTtcbjIzMjY6XHRcdGlmIChuaS1cdTAwM2Vmb2xpbylcbjIzMjc6XHRcdFx0Zm9saW9fcHV0KG5pLVx1MDAzZWZvbGlvKTtcbjIzMjg6XHRcdGtmcmVlKG5pLVx1MDAzZW1yZWMpO1xuMjMyOTpcdFx0a3ZmcmVlKG5pLVx1MDAzZXRhcmdldCk7XG4yMzMwOlx0fVxuMjMzMTpcdFxuMjMzMjpcdC8qXG4yMzMzOlx0ICogbnRmc19zaG93X29wdGlvbnMgLSBzaG93IG1vdW50IG9wdGlvbnMgaW4gL3Byb2MvbW91bnRzXG4yMzM0Olx0ICogQHNmOlx0XHRzZXFfZmlsZSBpbiB3aGljaCB0byB3cml0ZSBvdXIgbW91bnQgb3B0aW9uc1xuMjMzNTpcdCAqIEByb290Olx0cm9vdCBvZiB0aGUgbW91bnRlZCB0cmVlIHdob3NlIG1vdW50IG9wdGlvbnMgdG8gZGlzcGxheVxuMjMzNjpcdCAqXG4yMzM3Olx0ICogQ2FsbGVkIGJ5IHRoZSBWRlMgb25jZSBmb3IgZWFjaCBtb3VudGVkIG50ZnMgdm9sdW1lIHdoZW4gc29tZW9uZSByZWFkc1xuMjMzODpcdCAqIC9wcm9jL21vdW50cyBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSBOVEZTIHNwZWNpZmljIG1vdW50IG9wdGlvbnMgb2YgZWFjaFxuMjMzOTpcdCAqIG1vdW50LiBUaGUgbW91bnQgb3B0aW9ucyBvZiBmcyBzcGVjaWZpZWQgYnkgQHJvb3QgYXJlIHdyaXR0ZW4gdG8gdGhlIHNlcSBmaWxlXG4yMzQwOlx0ICogQHNmIGFuZCBzdWNjZXNzIGlzIHJldHVybmVkLlxuMjM0MTpcdCAqL1xuMjM0MjpcdGludCBudGZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuMjM0MzpcdHtcbjIzNDQ6XHRcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gTlRGU19TQihyb290LVx1MDAzZWRfc2IpO1xuMjM0NTpcdFx0aW50IGk7XG4yMzQ2Olx0XG4yMzQ3Olx0XHRpZiAodWlkX3ZhbGlkKHZvbC1cdTAwM2V1aWQpKVxuMjM0ODpcdFx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDssdWlkPSVpXCYjMzQ7LCBmcm9tX2t1aWRfbXVuZ2VkKFx1MDAyNmluaXRfdXNlcl9ucywgdm9sLVx1MDAzZXVpZCkpO1xuMjM0OTpcdFx0aWYgKGdpZF92YWxpZCh2b2wtXHUwMDNlZ2lkKSlcbjIzNTA6XHRcdFx0c2VxX3ByaW50ZihzZiwgXCYjMzQ7LGdpZD0laVwmIzM0OywgZnJvbV9rZ2lkX211bmdlZChcdTAwMjZpbml0X3VzZXJfbnMsIHZvbC1cdTAwM2VnaWQpKTtcbjIzNTE6XHRcdGlmICh2b2wtXHUwMDNlZm1hc2sgPT0gdm9sLVx1MDAzZWRtYXNrKVxuMjM1MjpcdFx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDssdW1hc2s9MCVvXCYjMzQ7LCB2b2wtXHUwMDNlZm1hc2spO1xuMjM1MzpcdFx0ZWxzZSB7XG4yMzU0Olx0XHRcdHNlcV9wcmludGYoc2YsIFwmIzM0OyxmbWFzaz0wJW9cJiMzNDssIHZvbC1cdTAwM2VmbWFzayk7XG4yMzU1Olx0XHRcdHNlcV9wcmludGYoc2YsIFwmIzM0OyxkbWFzaz0wJW9cJiMzNDssIHZvbC1cdTAwM2VkbWFzayk7XG4yMzU2Olx0XHR9XG4yMzU3Olx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDssaW9jaGFyc2V0PSVzXCYjMzQ7LCB2b2wtXHUwMDNlbmxzX21hcC1cdTAwM2VjaGFyc2V0KTtcbjIzNTg6XHRcdGlmIChOVm9sQ2FzZVNlbnNpdGl2ZSh2b2wpKVxuMjM1OTpcdFx0XHRzZXFfcHV0cyhzZiwgXCYjMzQ7LGNhc2Vfc2Vuc2l0aXZlXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIE5URlMgSW5vZGUgVXBkYXRlIExvb3AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbnRmc19ldmljdF9iaWdfaW5vZGVgIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJiMzOTtzIHBpbmdpbmcgbXkgcmFkYXIuIEl0IGxvb2tzIGxpa2UgaXQgY2FsbHMgYG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGUobmkpYC4gTm93LCB0aGF0IGZ1bmN0aW9uIG5hbWUgaXMgaW1tZWRpYXRlbHkgcmFpc2luZyBhIGZsYWcuIENvdWxkICp0aGF0KiBiZSBjYWxsaW5nIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgYXMgcGFydCBvZiBpdHMgY2xlYW51cD8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZS4gSWYgaXQgZG9lcywgYW5kIGlmIHdlJiMzOTtyZSBub3QgY2FyZWZ1bCwgd2UgY291bGQgaGF2ZSBhbiB1cGRhdGUgbG9vcCB3aXRoIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHZlcnkgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaXNzdWVzLiBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCBgbnRmc19kZWxldGVfYmFzZV9pbm9kZWAgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udHJvbCBmbG93IHRvIGNvbmZpcm0gb3IgZGVueSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2RlbGV0ZV9iYXNlX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbm9kZS5jPTIyMjI9dm9pZCBudGZzX2NsZWFyX2V4dGVudF9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIyMzItXG5mcy9udGZzL2lub2RlLmM6MjIzMzpzdGF0aWMgaW50IG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuZnMvbnRmcy9pbm9kZS5jLTIyMzQte1xuLS1cbmZzL250ZnMvaW5vZGUuYz0yMjcyPXZvaWQgbnRmc19ldmljdF9iaWdfaW5vZGUoc3RydWN0IGlub2RlICp2aSlcbi0tXG5mcy9udGZzL2lub2RlLmMtMjI4MS1cdFx0XHRXQVJOX09OKG5pLVx1MDAzZW5yX2V4dGVudHMgPT0gLTEpO1xuZnMvbnRmcy9pbm9kZS5jOjIyODI6XHRcdFx0bnRmc19kZWxldGVfYmFzZV9pbm9kZShuaSk7XG5mcy9udGZzL2lub2RlLmMtMjI4My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI4NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBudGZzX2RlbGV0ZV9iYXNlX2lub2RlYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBudWFuY2VzIGludm9sdmVkIGhlcmUuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGxpbmNocGluIGZvciBjbGVhbmluZyB1cCBpbm9kZXMgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBiYXNlIGlub2RlLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgZnVuZGFtZW50YWwgZGlyZWN0b3J5IGVudHJ5IG9yIGZpbGUgbWV0YWRhdGEgYmxvY2suIAoKSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBhc3NvY2lhdGVkIE1GVCBlbnRyaWVzIGFuZCBhbnkgcmVmZXJlbmNlIGNvdW50cy4gSSBleHBlY3QgYSBjYXJlZnVsIGRhbmNlIHRvIGVuc3VyZSB0aGF0IHdoZW4gdGhpcyBiYXNlIGlub2RlIGlzIGdvbmUsIGFueSBkZXBlbmRlbnQgc3RydWN0dXJlcyDigJMgbGlrZSBleHRlbmRlZCBhdHRyaWJ1dGUgZGF0YSBvciB0aGUgZGF0YSBydW5zIOKAkyBhcmUgZWl0aGVyIHByb3Blcmx5IGRlYWxsb2NhdGVkIG9yIHJlYXNzaWduZWQsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBzaXR1YXRpb24uIAoKSSYjMzk7bGwgYmUgZm9jdXNpbmcgb24gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBzdHJhdGVnaWVzIGhlcmU7IE5URlMgaXMga25vd24gZm9yIGl0cyBzb3BoaXN0aWNhdGlvbiwgc28gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBmaW5lLWdyYWluZWQgbG9ja2luZyB0byBhdm9pZCBjb3JydXB0aW9uIG9yIGRhdGEgbG9zcywgZXNwZWNpYWxseSB3aXRoIHNpbXVsdGFuZW91cyB3cml0ZXMgb3IgZGVsZXRlcy4gSXMgdGhpcyB1c2luZyBhIHRyYW5zYWN0aW9uYWwgYXBwcm9hY2gsIG9yIHNvbWV0aGluZyBtb3JlIGltbWVkaWF0ZT8gSSYjMzk7bGwgbmVlZCB0byBwYXJzZSB0aGUgY29kZSBmb3IgdGhvc2UgaW5kaWNhdG9ycy4gQWxzbywgSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyByb3V0aW5lIGRlYWxzIHdpdGggb3JwaGFuZWQgaW5vZGVzIG9yIHBhcnRpYWxseSBkZWxldGVkIHN0cnVjdHVyZXMg4oCTIGhvdyB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIG1haW50YWluIGNvbnNpc3RlbmN5IGluIHRoZSBmYWNlIG9mIHVuZXhwZWN0ZWQgZmFpbHVyZXMgaXMgYWx3YXlzIGludGVyZXN0aW5nLiBUaGUgcmVjb3ZlcnkgbWVjaGFuaXNtcyBhcmUgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIzMzpcdHN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4yMjM0Olx0e1xuMjIzNTpcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG5pLVx1MDAzZXZvbC1cdTAwM2VzYjtcbjIyMzY6XHRcdGludCBlcnI7XG4yMjM3Olx0XG4yMjM4Olx0XHRpZiAoTklub0F0dHIobmkpIHx8IG5pLVx1MDAzZW5yX2V4dGVudHMgPT0gLTEpXG4yMjM5Olx0XHRcdHJldHVybiAwO1xuMjI0MDpcdFxuMjI0MTpcdFx0ZXJyID0gbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVycyhuaSk7XG4yMjQyOlx0XG4yMjQzOlx0XHQvKlxuMjI0NDpcdFx0ICogRGVhbGxvY2F0ZSBleHRlbnQgbWZ0IHJlY29yZHMgYW5kIGZyZWUgZXh0ZW50IGlub2Rlcy5cbjIyNDU6XHRcdCAqIE5vIG5lZWQgdG8gbG9jayBhcyBubyBvbmUgZWxzZSBoYXMgYSByZWZlcmVuY2UuXG4yMjQ2Olx0XHQgKi9cbjIyNDc6XHRcdHdoaWxlIChuaS1cdTAwM2Vucl9leHRlbnRzKSB7XG4yMjQ4Olx0XHRcdGVyciA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVx1MDAzZXZvbCwgKihuaS1cdTAwM2VleHQuZXh0ZW50X250ZnNfaW5vcykpO1xuMjI0OTpcdFx0XHRpZiAoZXJyKVxuMjI1MDpcdFx0XHRcdG50ZnNfZXJyb3Ioc2IsXG4yMjUxOlx0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZnJlZSBleHRlbnQgTUZUIHJlY29yZC4gTGVhdmluZyBpbmNvbnNpc3RlbnQgbWV0YWRhdGEuXFxuXCYjMzQ7KTtcbjIyNTI6XHRcdFx0bnRmc19pbm9kZV9jbG9zZSgqKG5pLVx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zKSk7XG4yMjUzOlx0XHR9XG4yMjU0Olx0XG4yMjU1Olx0XHQvKiBEZWFsbG9jYXRlIGJhc2UgbWZ0IHJlY29yZCAqL1xuMjI1NjpcdFx0ZXJyID0gbnRmc19tZnRfcmVjb3JkX2ZyZWUobmktXHUwMDNldm9sLCBuaSk7XG4yMjU3Olx0XHRpZiAoZXJyKVxuMjI1ODpcdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtGYWlsZWQgdG8gZnJlZSBiYXNlIE1GVCByZWNvcmQuIExlYXZpbmcgaW5jb25zaXN0ZW50IG1ldGFkYXRhLlxcblwmIzM0Oyk7XG4yMjU5Olx0XHRyZXR1cm4gZXJyO1xuMjI2MDpcdH1cbjIyNjE6XHRcbjIyNjI6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkRlYWxsb2NhdGluZyBDbHVzdGVycyBhbmQgQXR0cmlidXRlIExpc3RzOiBBIFBvdGVudGlhbCBJbnRlcmFjdGlvbioqCgpIbW0sIGEgcXVlc3Rpb24ganVzdCBwb3BwZWQgaW50byBteSBoZWFkLiBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgYG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnNgIGZ1bmN0aW9uLiBJIHNlZW0gdG8gcmVjYWxsIGEgcG90ZW50aWFsIGludGVyYWN0aW9uIHRoZXJlLiBDb3VsZCB0aGlzIGZ1bmN0aW9uIGJlIGNhbGxpbmcgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBhdCBzb21lIHBvaW50PyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgZm9yIHRoZSBkZWFsbG9jYXRpb24gZnVuY3Rpb24uIFRpbWUgdG8gZGl2ZSBpbiBhbmQgY29uZmlybSAob3IgZGVueSkgdGhpcyBzdXNwZWN0ZWQgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuYz0zMTg9dm9pZCBudGZzX2ZyZWVfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTMyMi1cbmZzL250ZnMvaW5vZGUuYzozMjM6c3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbmZzL250ZnMvaW5vZGUuYy0zMjQte1xuLS1cbmZzL250ZnMvaW5vZGUuYz0yMjMzPXN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIyNDAtXG5mcy9udGZzL2lub2RlLmM6MjI0MTpcdGVyciA9IG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnMobmkpO1xuZnMvbnRmcy9pbm9kZS5jLTIyNDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDU0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AqKgoKQWxyaWdodCwgSSYjMzk7bSBmb2N1c2luZyBvbiBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gb3IgcHJvY2VzcyB3aXRoaW4gdGhlIE5URlMgZmlsZSBzeXN0ZW0uICYjMzQ7RGVhbGxvY2F0aW5nIGNsdXN0ZXJzJiMzNDsuLi4gdGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIHNwYWNlIG1hbmFnZW1lbnQsIHJpZ2h0PyBTbywgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZnJlZWluZyB1cCBkaXNrIHNwYWNlIHRoYXQgd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIHRvIG5vbi1yZXNpZGVudCBmaWxlIGRhdGEuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBmcmFnbWVudGF0aW9uLCBwZXJmb3JtYW5jZSwgYW5kIHBlcmhhcHMgZXZlbiBkYXRhIHJlY292ZXJ5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGlzIGRlYWxsb2NhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgcm9idXN0IHRoaXMgcm91dGluZSBpcyDigJMgd2hhdCBzYWZlZ3VhcmRzIGFyZSBpbiBwbGFjZSB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbiBvciBpbmNvbnNpc3RlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIE1hc3RlciBGaWxlIFRhYmxlIChNRlQpIGFuZCBob3cgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHRoZXJlLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhpcyBhcyAmIzM0O1RoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGZyZWVpbmcgdXAgc3BhY2UgdGhhdCB3YXNuJiMzOTt0IGRpcmVjdGx5IGluIHRoZSBNRlQgZW50cmllcy4mIzM0OyBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZXRhZGF0YSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIzOlx0c3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbiAzMjQ6XHR7XG4gMzI1Olx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbmktXHUwMDNldm9sLVx1MDAzZXNiO1xuIDMyNjpcdFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICphY3R4O1xuIDMyNzpcdFx0aW50IGVyciA9IDA7XG4gMzI4Olx0XG4gMzI5Olx0XHRhY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiAzMzA6XHRcdGlmICghYWN0eClcbiAzMzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzMyOlx0XHRXQVJOX09OKGFjdHgtXHUwMDNlbXJlYy1cdTAwM2VsaW5rX2NvdW50ICE9IDApO1xuIDMzMzpcdFxuIDMzNDpcdFx0LyoqXG4gMzM1Olx0XHQgKiBudGZzX3RydW5jYXRlX3ZmcyBjYW5ub3QgYmUgY2FsbGVkIGluIGV2aWN0KCkgY29udGV4dCBkdWVcbiAzMzY6XHRcdCAqIHRvIHNvbWUgbGltaXRhdGlvbnMsIHdoaWNoIGFyZSB0aGUgQG5pIHZmcyBpbm9kZSBpcyBtYXJrZWRcbiAzMzc6XHRcdCAqIHdpdGggSV9GUkVFSU5HLCBhbmQgZXRjLlxuIDMzODpcdFx0ICovXG4gMzM5Olx0XHRpZiAoTklub1J1bmxpc3REaXJ0eShuaSkpIHtcbiAzNDA6XHRcdFx0ZXJyID0gbnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybChuaS1cdTAwM2V2b2wsIG5pLVx1MDAzZXJ1bmxpc3QucmwpO1xuIDM0MTpcdFx0XHRpZiAoZXJyKVxuIDM0MjpcdFx0XHRcdG50ZnNfZXJyb3Ioc2IsXG4gMzQzOlx0XHRcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byBmcmVlIGNsdXN0ZXJzLiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXG5cJiMzNDspO1xuIDM0NDpcdFx0fVxuIDM0NTpcdFxuIDM0NjpcdFx0d2hpbGUgKChlcnIgPSBudGZzX2F0dHJzX3dhbGsoYWN0eCkpID09IDApIHtcbiAzNDc6XHRcdFx0aWYgKGFjdHgtXHUwMDNlYXR0ci1cdTAwM2Vub25fcmVzaWRlbnQgXHUwMDI2XHUwMDI2XG4gMzQ4Olx0XHRcdFx0XHQoIU5Jbm9SdW5saXN0RGlydHkobmkpIHx8IGFjdHgtXHUwMDNlYXR0ci1cdTAwM2V0eXBlICE9IEFUX0RBVEEpKSB7XG4gMzQ5Olx0XHRcdFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmw7XG4gMzUwOlx0XHRcdFx0c2l6ZV90IG5ld19ybF9jb3VudDtcbiAzNTE6XHRcbiAzNTI6XHRcdFx0XHRybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKG5pLVx1MDAzZXZvbCwgYWN0eC1cdTAwM2VhdHRyLCBOVUxMLFxuIDM1MzpcdFx0XHRcdFx0XHRcdTAwMjZuZXdfcmxfY291bnQpO1xuIDM1NDpcdFx0XHRcdGlmIChJU19FUlIocmwpKSB7XG4gMzU1Olx0XHRcdFx0XHRlcnIgPSBQVFJfRVJSKHJsKTtcbiAzNTY6XHRcdFx0XHRcdG50ZnNfZXJyb3Ioc2IsXG4gMzU3Olx0XHRcdFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byBkZWNvbXByZXNzIHJ1bmxpc3QuIExlYXZpbmcgaW5jb25zaXN0ZW50IG1ldGFkYXRhLlxcblwmIzM0Oyk7XG4gMzU4Olx0XHRcdFx0XHRjb250aW51ZTtcbiAzNTk6XHRcdFx0XHR9XG4gMzYwOlx0XG4gMzYxOlx0XHRcdFx0ZXJyID0gbnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybChuaS1cdTAwM2V2b2wsIHJsKTtcbiAzNjI6XHRcdFx0XHRpZiAoZXJyKVxuIDM2MzpcdFx0XHRcdFx0bnRmc19lcnJvcihzYixcbiAzNjQ6XHRcdFx0XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIGZyZWUgYXR0cmlidXRlIGNsdXN0ZXJzLiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXG5cJiMzNDspO1xuIDM2NTpcdFx0XHRcdGt2ZnJlZShybCk7XG4gMzY2Olx0XHRcdH1cbiAzNjc6XHRcdH1cbiAzNjg6XHRcbiAzNjk6XHRcdG50ZnNfcmVsZWFzZV9kaXJ0eV9jbHVzdGVycyhuaS1cdTAwM2V2b2wsIG5pLVx1MDAzZWlfZGVhbGxvY19jbHVzdGVycyk7XG4gMzcwOlx0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoYWN0eCk7XG4gMzcxOlx0XHRyZXR1cm4gZXJyO1xuIDM3MjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gTlRGUyBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24qKgoKSG9sZCBvbiBhIHNlY29uZCwgc29tZXRoaW5nIGRvZXNuJiMzOTt0IHF1aXRlIHNpdCByaWdodCBoZXJlLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgbnRmc19hdHRybGlzdF91cGRhdGVgIGZ1bmN0aW9uIHdvdWxkIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzYC4gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHRoZSBjYXNlLiBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IGF0dHJpYnV0ZXMgYXJlIGJlaW5nIG1hbmFnZWQgZHVyaW5nIGNsdXN0ZXIgZGVhbGxvY2F0aW9uLCBwYXJ0aWN1bGFybHkgZm9yIG5vbi1yZXNpZGVudCBkYXRhLgoKTGV0IG1lIHJldGhpbmsgdGhpcy4gSWYgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpc24mIzM5O3QgY2FsbGVkIHRoZXJlLCB0aGVuIHdoZXJlIGlzIHRoZSByZWxldmFudCBtZXRhZGF0YSBiZWluZyB1cGRhdGVkPyBDb3VsZCB0aGUgYXR0cmlidXRlIGxpc3QgdXBkYXRlIGJlIGhhbmRsZWQgYnkgYG50ZnNfbWZ0X3JlY29yZF9mcmVlYD8gSXQgbWFrZXMgc2Vuc2UgdGhhdCBmcmVlaW5nIGEgTWFzdGVyIEZpbGUgVGFibGUgKE1GVCkgcmVjb3JkIHdvdWxkIG5lY2Vzc2l0YXRlIHVwZGF0ZXMgdG8gdGhlIGF0dHJpYnV0ZSBsaXN0LCBwb3RlbnRpYWxseSByZWZsZWN0aW5nIHRoZSByZW1vdmFsIG9mIGRhdGEgb3IgdGhlIGZyZWVpbmcgb2YgYXNzb2NpYXRlZCBjbHVzdGVycy4gSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBzdGFjayBhZ2FpbiBhbmQgY29uZmlybSB0aGUgbG9naWNhbCBmbG93IG9mIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19tZnRfcmVjb3JkX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTI2MjI9aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0yNjcwLVx0XHRcdGxlMTZfdG9fY3B1KGN0eC1cdTAwM2VtcmVjLVx1MDAzZWF0dHJzX29mZnNldCkgPT0gOCkge1xuZnMvbnRmcy9hdHRyaWIuYzoyNjcxOlx0XHRpZiAobnRmc19tZnRfcmVjb3JkX2ZyZWUobmktXHUwMDNldm9sLCBuaSkpIHtcbmZzL250ZnMvYXR0cmliLmMtMjY3Mi1cdFx0XHRudGZzX2RlYnVnKFwmIzM0O0NvdWxkbiYjMzk7dCBmcmVlIE1GVCByZWNvcmQuXFxuXCYjMzQ7KTtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTI3NTk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI5NjgtXHRcdGlmIChhdHRyX3NpemUgPT0gOCkge1xuZnMvbnRmcy9hdHRyaWIuYzoyOTY5Olx0XHRcdGlmIChudGZzX21mdF9yZWNvcmRfZnJlZShhdHRyX25pLVx1MDAzZXZvbCwgYXR0cl9uaSkpXG5mcy9udGZzL2F0dHJpYi5jLTI5NzAtXHRcdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtGYWlsZWQgdG8gZnJlZSBNRlQgcmVjb3JkXCYjMzQ7KTtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTM2ODA9aW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3Zjbilcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTM5NTMtXHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7Q291bGQgbm90IG1hcCBuZXcgTUZUIHJlY29yZFwmIzM0Oyk7XG5mcy9udGZzL2F0dHJpYi5jOjM5NTQ6XHRcdFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVx1MDAzZXZvbCwgZXh0X25pKSlcbmZzL250ZnMvYXR0cmliLmMtMzk1NS1cdFx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0NvdWxkIG5vdCBmcmVlIE1GVCByZWNvcmRcJiMzNDspO1xuLS1cbmZzL250ZnMvYXR0cmliLmMtMzk5MC1cdFx0XHR1bm1hcF9tZnRfcmVjb3JkKGV4dF9uaSk7XG5mcy9udGZzL2F0dHJpYi5jOjM5OTE6XHRcdFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVx1MDAzZXZvbCwgZXh0X25pKSlcbmZzL250ZnMvYXR0cmliLmMtMzk5Mi1cdFx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0NvdWxkIG5vdCBmcmVlIE1GVCByZWNvcmRcJiMzNDspO1xuLS1cbmZzL250ZnMvYXR0cmliLmMtNDAwNC1cdFx0XHR1bm1hcF9tZnRfcmVjb3JkKGV4dF9uaSk7XG5mcy9udGZzL2F0dHJpYi5jOjQwMDU6XHRcdFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVx1MDAzZXZvbCwgZXh0X25pKSlcbmZzL250ZnMvYXR0cmliLmMtNDAwNi1cdFx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0NvdWxkbiYjMzk7dCBmcmVlIE1GVCByZWNvcmRcJiMzNDspO1xuLS1cbmZzL250ZnMvaW5vZGUuYz0yMjMzPXN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIyNDctXHR3aGlsZSAobmktXHUwMDNlbnJfZXh0ZW50cykge1xuZnMvbnRmcy9pbm9kZS5jOjIyNDg6XHRcdGVyciA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVx1MDAzZXZvbCwgKihuaS1cdTAwM2VleHQuZXh0ZW50X250ZnNfaW5vcykpO1xuZnMvbnRmcy9pbm9kZS5jLTIyNDktXHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIyNTUtXHQvKiBEZWFsbG9jYXRlIGJhc2UgbWZ0IHJlY29yZCAqL1xuZnMvbnRmcy9pbm9kZS5jOjIyNTY6XHRlcnIgPSBudGZzX21mdF9yZWNvcmRfZnJlZShuaS1cdTAwM2V2b2wsIG5pKTtcbmZzL250ZnMvaW5vZGUuYy0yMjU3LVx0aWYgKGVycilcbi0tXG5mcy9udGZzL21mdC5jPTIwMTM9aW50IG50ZnNfbWZ0X3JlY29yZF9hbGxvYyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgaW50IG1vZGUsXG4tLVxuZnMvbnRmcy9tZnQuYy0yNDg5LS8qXG5mcy9udGZzL21mdC5jOjI0OTA6ICogbnRmc19tZnRfcmVjb3JkX2ZyZWUgLSBmcmVlIGFuIG1mdCByZWNvcmQgb24gYW4gbnRmcyB2b2x1bWVcbmZzL250ZnMvbWZ0LmMtMjQ5MS0gKiBAdm9sOlx0dm9sdW1lIG9uIHdoaWNoIHRvIGZyZWUgdGhlIG1mdCByZWNvcmRcbi0tXG5mcy9udGZzL21mdC5jLTI0OTktICovXG5mcy9udGZzL21mdC5jOjI1MDA6aW50IG50ZnNfbWZ0X3JlY29yZF9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG5mcy9udGZzL21mdC5jLTI1MDEte1xuLS1cbmZzL250ZnMvbWZ0Lmg9Nzk9aW50IG50ZnNfbWZ0X3JlY29yZF9hbGxvYyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgaW50IG1vZGUsXG4tLVxuZnMvbnRmcy9tZnQuaC04MS1cdFx0c3RydWN0IG1mdF9yZWNvcmQgKipuaV9tcmVjKTtcbmZzL250ZnMvbWZ0Lmg6ODI6aW50IG50ZnNfbWZ0X3JlY29yZF9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuZnMvbnRmcy9tZnQuaC04My1pbnQgbnRmc19tZnRfcmVjb3Jkc193cml0ZShjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgdTY0IG1yZWYsXG4tLVxuZnMvbnRmcy9uYW1laS5jPTM5ND1zdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy03MTYtXG5mcy9udGZzL25hbWVpLmM6NzE3Olx0XHRlcnIyID0gbnRmc19tZnRfcmVjb3JkX2ZyZWUobmktXHUwMDNldm9sLCAqKG5pLVx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zKSk7XG5mcy9udGZzL25hbWVpLmMtNzE4LVx0XHRpZiAoZXJyMilcbi0tXG5mcy9udGZzL25hbWVpLmMtNzIyLVx0fVxuZnMvbnRmcy9uYW1laS5jOjcyMzpcdGlmIChudGZzX21mdF9yZWNvcmRfZnJlZShuaS1cdTAwM2V2b2wsIG5pKSlcbmZzL250ZnMvbmFtZWkuYy03MjQtXHRcdG50ZnNfZXJyb3Ioc2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbnRmc19tZnRfcmVjb3JkX2ZyZWVgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgbmFtZSwgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gdGhpbmtpbmcgTlRGUywgTUZULCBhbmQgKmZyZWUqLiBUaGF0IHRlbGxzIG1lIHRoaXMgbGlrZWx5IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgTWFzdGVyIEZpbGUgVGFibGUsIHRoZSBoZWFydCBvZiBOVEZTIGZpbGUgc3lzdGVtIG1ldGFkYXRhLCBtYW5hZ2VzIHJlY29yZHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHVzZS4gSSBleHBlY3Qgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgcmVjbGFpbWluZyBzcGFjZSBmcm9tIGRlbGV0ZWQgZmlsZXMgb3IgcGVyaGFwcyBkZWFsbG9jYXRpbmcgcmVjb3JkcyB0aGF0IHdlcmUgdXNlZCBmb3IgdmVyeSB0cmFuc2llbnQgZGF0YS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHNpbXBseSBtYXJraW5nIHRoZSBNRlQgZW50cnkgYXMgZnJlZSwgb3IgaWYgaXQgYWxzbyBoYXMgcmVzcG9uc2liaWxpdHkgZm9yIHplcm9pbmcgYW55IHNlbnNpdGl2ZSBkYXRhLCBvciBtYXliZSBldmVuIGNvbnNvbGlkYXRpbmcgZnJlZSBzcGFjZSB3aXRoaW4gdGhlIE1GVC4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBiaXRtYXAgdGhhdCB0cmFja3MgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIE1GVC4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkgd2hlbiBtb2RpZnlpbmcgdGhpcyBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bSBlYWdlciB0byBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBpdCBhbGwgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9tZnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjUwMDpcdGludCBudGZzX21mdF9yZWNvcmRfZnJlZShzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuMjUwMTpcdHtcbjI1MDI6XHRcdHU2NCBtZnRfbm87XG4yNTAzOlx0XHRpbnQgZXJyO1xuMjUwNDpcdFx0dTE2IHNlcV9ubztcbjI1MDU6XHRcdF9fbGUxNiBvbGRfc2VxX25vO1xuMjUwNjpcdFx0c3RydWN0IG1mdF9yZWNvcmQgKm5pX21yZWM7XG4yNTA3Olx0XHR1bnNpZ25lZCBpbnQgbWVtYWxsb2NfZmxhZ3M7XG4yNTA4Olx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaTtcbjI1MDk6XHRcbjI1MTA6XHRcdGlmICghdm9sIHx8ICFuaSlcbjI1MTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNTEyOlx0XG4yNTEzOlx0XHRudGZzX2RlYnVnKFwmIzM0O0VudGVyaW5nIGZvciBpbm9kZSAweCVsbHguXFxuXCYjMzQ7LCAobG9uZyBsb25nKW5pLVx1MDAzZW1mdF9ubyk7XG4yNTE0Olx0XG4yNTE1Olx0XHRuaV9tcmVjID0gbWFwX21mdF9yZWNvcmQobmkpO1xuMjUxNjpcdFx0aWYgKElTX0VSUihuaV9tcmVjKSlcbjI1MTc6XHRcdFx0cmV0dXJuIC1FSU87XG4yNTE4Olx0XG4yNTE5Olx0XHQvKiBDYWNoZSB0aGUgbWZ0IHJlZmVyZW5jZSBmb3IgbGF0ZXIuICovXG4yNTIwOlx0XHRtZnRfbm8gPSBuaS1cdTAwM2VtZnRfbm87XG4yNTIxOlx0XG4yNTIyOlx0XHQvKiBNYXJrIHRoZSBtZnQgcmVjb3JkIGFzIG5vdCBpbiB1c2UuICovXG4yNTIzOlx0XHRuaV9tcmVjLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk1GVF9SRUNPUkRfSU5fVVNFO1xuMjUyNDpcdFxuMjUyNTpcdFx0LyogSW5jcmVtZW50IHRoZSBzZXF1ZW5jZSBudW1iZXIsIHNraXBwaW5nIHplcm8sIGlmIGl0IGlzIG5vdCB6ZXJvLiAqL1xuMjUyNjpcdFx0b2xkX3NlcV9ubyA9IG5pX21yZWMtXHUwMDNlc2VxdWVuY2VfbnVtYmVyO1xuMjUyNzpcdFx0c2VxX25vID0gbGUxNl90b19jcHUob2xkX3NlcV9ubyk7XG4yNTI4Olx0XHRpZiAoc2VxX25vID09IDB4ZmZmZilcbjI1Mjk6XHRcdFx0c2VxX25vID0gMTtcbjI1MzA6XHRcdGVsc2UgaWYgKHNlcV9ubylcbjI1MzE6XHRcdFx0c2VxX25vJiM0MzsmIzQzOztcbjI1MzI6XHRcdG5pX21yZWMtXHUwMDNlc2VxdWVuY2VfbnVtYmVyID0gY3B1X3RvX2xlMTYoc2VxX25vKTtcbjI1MzM6XHRcbjI1MzQ6XHRcdGRvd25fcmVhZChcdTAwMjZOVEZTX0kodm9sLVx1MDAzZW1mdF9pbm8pLVx1MDAzZXJ1bmxpc3QubG9jayk7XG4yNTM1Olx0XHRlcnIgPSBudGZzX2dldF9ibG9ja19tZnRfcmVjb3JkKE5URlNfSSh2b2wtXHUwMDNlbWZ0X2lubyksIG5pKTtcbjI1MzY6XHRcdHVwX3JlYWQoXHUwMDI2TlRGU19JKHZvbC1cdTAwM2VtZnRfaW5vKS1cdTAwM2VydW5saXN0LmxvY2spO1xuMjUzNzpcdFx0aWYgKGVycikge1xuMjUzODpcdFx0XHR1bm1hcF9tZnRfcmVjb3JkKG5pKTtcbjI1Mzk6XHRcdFx0cmV0dXJuIGVycjtcbjI1NDA6XHRcdH1cbjI1NDE6XHRcbjI1NDI6XHRcdC8qXG4yNTQzOlx0XHQgKiBTZXQgdGhlIG50ZnMgaW5vZGUgZGlydHkgYW5kIHdyaXRlIGl0IG91dC4gIFdlIGRvIG5vdCBuZWVkIHRvIHdvcnJ5XG4yNTQ0Olx0XHQgKiBhYm91dCB0aGUgYmFzZSBpbm9kZSBoZXJlIHNpbmNlIHdoYXRldmVyIGNhdXNlZCB0aGUgZXh0ZW50IG1mdFxuMjU0NTpcdFx0ICogcmVjb3JkIHRvIGJlIGZyZWVkIGlzIGd1YXJhbnRlZWQgdG8gZG8gaXQgYWxyZWFkeS5cbjI1NDY6XHRcdCAqL1xuMjU0NzpcdFx0Tklub1NldERpcnR5KG5pKTtcbjI1NDg6XHRcdGVyciA9IHdyaXRlX21mdF9yZWNvcmQobmksIG5pX21yZWMsIDApO1xuMjU0OTpcdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipUcmFjaW5nIHRoZSBOVEZTIEF0dHJpYnV0ZSBMaXN0IFVwZGF0ZSBEdXJpbmcgRXZpY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBOVEZTIGNvZGUgYW5kIEkmIzM5O3ZlIGhpdCBhIHBvdGVudGlhbCBzbmFnLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHdoZW4gYSBNYXN0ZXIgRmlsZSBUYWJsZSAoTUZUKSByZWNvcmQgaXMgZnJlZWQgd2l0aCBgbnRmc19tZnRfcmVjb3JkX2ZyZWVgLCBpdCB3b3VsZCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgYW4gdXBkYXRlIG9mIHRoZSBhdHRyaWJ1dGUgbGlzdCB2aWEgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYC4gQnV0IGhvbGQgb24uLi4gaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBkb2luZyB0aGF0IGRpcmVjdGx5LiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQgYW5kIG5lZWRzIHNvbWUgY2xhcmlmaWNhdGlvbi4gV2hlcmUgZXhhY3RseSAqaXMqIHRoYXQgYWxsLWltcG9ydGFudCBgbnRmc19hdHRybGlzdF91cGRhdGVgIGNhbGwgaGFwcGVuaW5nIGR1cmluZyB0aGUgZXZpY3Rpb24gcHJvY2Vzcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBhdm9pZCBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYW5vdGhlciBlbnRyeSBwb2ludC4gUGVyaGFwcyBJJiMzOTt2ZSBtaXNzZWQgc29tZXRoaW5nLiBJZiBgbnRmc19tZnRfcmVjb3JkX2ZyZWVgIGlzbiYjMzk7dCB0aGUgZGlyZWN0IHRyaWdnZXIsIHRoZW4gSSBzaG91bGQgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBudGZzX2F0dHJsaXN0X2VudHJ5X3JtYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBkZWVwZXIuIE1heWJlLCBqdXN0ICptYXliZSosIHRoZSBjcnVjaWFsIHVwZGF0ZSBpcyBoYXBwZW5pbmcgaW5zaWRlIHRoZSBmdW5jdGlvbiBmb3IgcmVtb3ZpbmcgYW4gZW50cnkgZnJvbSB0aGUgYXR0cmlidXRlIGxpc3QuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2F0dHJsaXN0X2VudHJ5X3JtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9hdHRyaWIuYz0yNjIyPWludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuLS1cbmZzL250ZnMvYXR0cmliLmMtMjY1Mi1cdGlmIChOSW5vQXR0ckxpc3QoYmFzZV9uaSkgXHUwMDI2XHUwMDI2IHR5cGUgIT0gQVRfQVRUUklCVVRFX0xJU1QpIHtcbmZzL250ZnMvYXR0cmliLmM6MjY1MzpcdFx0ZXJyID0gbnRmc19hdHRybGlzdF9lbnRyeV9ybShjdHgpO1xuZnMvbnRmcy9hdHRyaWIuYy0yNjU0LVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jPTEyMT1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jLTI0OS0vKlxuZnMvbnRmcy9hdHRybGlzdC5jOjI1MDogKiBudGZzX2F0dHJsaXN0X2VudHJ5X3JtIC0gcmVtb3ZlIGFuIGF0dHJpYnV0ZSBsaXN0IGF0dHJpYnV0ZSBlbnRyeVxuZnMvbnRmcy9hdHRybGlzdC5jLTI1MS0gKiBAY3R4Olx0YXR0cmlidXRlIHNlYXJjaCBjb250ZXh0IGRlc2NyaWJpbmcgdGhlIGF0dHJpYnV0ZSBsaXN0IGVudHJ5XG4tLVxuZnMvbnRmcy9hdHRybGlzdC5jLTI1Ni0gKi9cbmZzL250ZnMvYXR0cmxpc3QuYzoyNTc6aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG5mcy9udGZzL2F0dHJsaXN0LmMtMjU4LXtcbi0tXG5mcy9udGZzL2F0dHJsaXN0Lmg9MTY9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKTtcbmZzL250ZnMvYXR0cmxpc3QuaDoxNzppbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7XG5mcy9udGZzL2F0dHJsaXN0LmgtMTgtaW50IG50ZnNfYXR0cmxpc3RfdXBkYXRlKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5URlMgQXR0cmlidXRlIExpc3QgUmVtb3ZhbCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbnRmc19hdHRybGlzdF9lbnRyeV9ybWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBudGZzX2F0dHJfcmVjb3JkX3JtYCwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHVzZS1jYXNlcyBvZiBgbnRmc19hdHRyX3JlY29yZF9ybWAuIFdoZXJlIGlzICp0aGF0KiBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIG9mIGBudGZzX2F0dHJfcmVjb3JkX3JtYCB3aWxsIHRlbGwgbWUgd2hpY2ggc2l0dWF0aW9ucyB0cmlnZ2VyIHRoZSBhdHRyaWJ1dGUgcmVjb3JkIHJlbW92YWwgcHJvY2VzcywgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCB0aGUgaGlnaGVyLWxldmVsIGdvYWxzIHRoYXQgYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gIHVsdGltYXRlbHkgc3VwcG9ydHMuIElzIGl0IGR1cmluZyBmaWxlIGRlbGV0aW9uLCBhdHRyaWJ1dGUgcmVzaXppbmcsIGF0dHJpYnV0ZSBsaXN0IHJlLW9yZ2FuaXphdGlvbiwgb3Igc29tZSBvdGhlciBvcGVyYXRpb24/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZXN0YWJsaXNoLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyB0aGUgY29ycmVjdCByZW1vdmFsIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIGFjdGlvbiwgYW5kIGlmIGEgZGlmZmVyZW50IGFwcHJvYWNoIHdvdWxkIGJlIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19hdHRyX3JlY29yZF9ybSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvYXR0cmliLmM9MjQ4Nj1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcmVjb3JkX2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiB0eXBlLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtMjYxNS0vKlxuZnMvbnRmcy9hdHRyaWIuYzoyNjE2OiAqIG50ZnNfYXR0cl9yZWNvcmRfcm0gLSByZW1vdmUgYXR0cmlidXRlIGV4dGVudFxuZnMvbnRmcy9hdHRyaWIuYy0yNjE3LSAqIEBjdHg6XHRzZWFyY2ggY29udGV4dCBkZXNjcmliaW5nIHRoZSBhdHRyaWJ1dGUgd2hpY2ggc2hvdWxkIGJlIHJlbW92ZWRcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI2MjEtICovXG5mcy9udGZzL2F0dHJpYi5jOjI2MjI6aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG5mcy9udGZzL2F0dHJpYi5jLTI2MjMte1xuLS1cbmZzL250ZnMvYXR0cmliLmMtMjcxMS1cdFx0LyogUmVtb3ZlIGF0dHJpYnV0ZSByZWNvcmQgaXRzZWxmLiAqL1xuZnMvbnRmcy9hdHRyaWIuYzoyNzEyOlx0XHRpZiAobnRmc19hdHRyX3JlY29yZF9ybShjdHgpKSB7XG5mcy9udGZzL2F0dHJpYi5jLTI3MTMtXHRcdFx0bnRmc19kZWJ1ZyhcJiMzNDtDb3VsZG4mIzM5O3QgcmVtb3ZlIGF0dHJpYnV0ZSBsaXN0LiBTdWNjZWVkIGFueXdheS5cXG5cJiMzNDspO1xuLS1cbmZzL250ZnMvYXR0cmliLmM9MzY4MD1pbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxuLS1cbmZzL250ZnMvYXR0cmliLmMtMzkxOS1cdFx0XHQvKiBSZW1vdmUgdW51c2VkIGF0dHJpYnV0ZSByZWNvcmQuICovXG5mcy9udGZzL2F0dHJpYi5jOjM5MjA6XHRcdFx0ZXJyID0gbnRmc19hdHRyX3JlY29yZF9ybShjdHgpO1xuZnMvbnRmcy9hdHRyaWIuYy0zOTIxLVx0XHRcdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTUxMjc9aW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy01MTY5LVx0XHRcdFx0Q0FTRV9TRU5TSVRJVkUsIDAsIE5VTEwsIDAsIGN0eCkpKSB7XG5mcy9udGZzL2F0dHJpYi5jOjUxNzA6XHRcdGVyciA9IG50ZnNfYXR0cl9yZWNvcmRfcm0oY3R4KTtcbmZzL250ZnMvYXR0cmliLmMtNTE3MS1cdFx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvYXR0cmliLmg9MTIwPWludCBudGZzX2F0dHJfcmVtb3ZlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgX19sZTMyIHR5cGUsIF9fbGUxNiAqbmFtZSxcbmZzL250ZnMvYXR0cmliLmgtMTIxLVx0XHR1MzIgbmFtZV9sZW4pO1xuZnMvbnRmcy9hdHRyaWIuaDoxMjI6aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuZnMvbnRmcy9hdHRyaWIuaC0xMjMtaW50IG50ZnNfYXR0cl9yZWNvcmRfbW92ZV90byhzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbi0tXG5mcy9udGZzL2lub2RlLmM9MzAzMT1pbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuLS1cbmZzL250ZnMvaW5vZGUuYy0zMTU1LVx0XHRcdFx0Q0FTRV9TRU5TSVRJVkUsIDAsIE5VTEwsIDAsIGN0eCkpIHtcbmZzL250ZnMvaW5vZGUuYzozMTU2Olx0XHRpZiAobnRmc19hdHRyX3JlY29yZF9ybShjdHgpKVxuZnMvbnRmcy9pbm9kZS5jLTMxNTctXHRcdFx0bnRmc19lcnJvcihuaS1cdTAwM2V2b2wtXHUwMDNlc2IsIFwmIzM0O1JvbGxiYWNrIGZhaWxlZCB0byByZW1vdmUgYXR0cmxpc3RcJiMzNDspO1xuLS1cbmZzL250ZnMvbmFtZWkuYz04MzA9c3RhdGljIGludCBudGZzX2RlbGV0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBudGZzX2lub2RlICpkaXJfbmksXG4tLVxuZnMvbnRmcy9uYW1laS5jLTk0My1cbmZzL250ZnMvbmFtZWkuYzo5NDQ6XHRlcnIgPSBudGZzX2F0dHJfcmVjb3JkX3JtKGFjdHgpO1xuZnMvbnRmcy9uYW1laS5jLTk0NS1cdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9zdXBlci5jPTQ0Mj1pbnQgbnRmc193cml0ZV92b2x1bWVfbGFiZWwoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNoYXIgKmxhYmVsKVxuLS1cbmZzL250ZnMvc3VwZXIuYy00ODctXHRpZiAoIXJldClcbmZzL250ZnMvc3VwZXIuYzo0ODg6XHRcdHJldCA9IG50ZnNfYXR0cl9yZWNvcmRfcm0oY3R4KTtcbmZzL250ZnMvc3VwZXIuYy00ODktXHRlbHNlIGlmIChyZXQgPT0gLUVOT0VOVClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NzMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG50ZnNfYXR0cl9ybWAgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBgbnRmc19hdHRyX3JtYCBwb3AgdXAgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBpc3N1ZS4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCAmIzM0O1dhaXQsIGlzIHRoaXMgZnVuY3Rpb24gKmFjdHVhbGx5KiBiZWluZyBjYWxsZWQgZnJvbSBzb21ld2hlcmUgdW5leHBlY3RlZD8mIzM0OyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgc3VjaCBhIGxvdy1sZXZlbCBmdW5jdGlvbiByZWxhdGVkIHRvIE5URlMgYXR0cmlidXRlIG1hbmFnZW1lbnQgaXMgdXN1YWxseSB0aWdodGx5IGNvdXBsZWQgd2l0aCBhIHNwZWNpZmljIG1vZHVsZSBvciBzdWJzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwgb3IgZmlsZXN5c3RlbSBkcml2ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjYWxsIGNoYWluIHRoYXQgbGVhZHMgdG8gYG50ZnNfYXR0cl9ybWAuIEFueSB1bmV4cGVjdGVkIHVzYWdlIHBhdHRlcm5zIGNvdWxkIHN1Z2dlc3QgYSBidWcsIHZ1bG5lcmFiaWxpdHksIG9yIG1pc2NvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHJpZ2h0IG5vdy4gSSBoYXZlIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHRoaXMgY29kZSBpcyBiZWluZyBpbnZva2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2F0dHJfcm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTI3NTk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI5MzktXHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIGp1c3QgYWRkZWQgYXR0cmlidXRlXCYjMzQ7KTtcbmZzL250ZnMvYXR0cmliLmM6Mjk0MDpcdFx0aWYgKG50ZnNfYXR0cl9ybShhdHRyX25pKSlcbmZzL250ZnMvYXR0cmliLmMtMjk0MS1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtGYWlsZWQgdG8gcmVtb3ZlIGp1c3QgYWRkZWQgYXR0cmlidXRlXCYjMzQ7KTtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTQ5NzA9aW50IG50ZnNfYXR0cl9tYXBfY2x1c3RlcihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCB2Y25fc3RhcnQsIHM2NCAqbGNuX3N0YXJ0LFxuLS1cbmZzL250ZnMvYXR0cmliLmMtNTEyMC0vKlxuZnMvbnRmcy9hdHRyaWIuYzo1MTIxOiAqIG50ZnNfYXR0cl9ybSAtIHJlbW92ZSBhdHRyaWJ1dGUgZnJvbSBudGZzIGlub2RlXG5mcy9udGZzL2F0dHJpYi5jLTUxMjItICogQG5pOlx0XHRvcGVuZWQgbnRmcyBhdHRyaWJ1dGUgdG8gZGVsZXRlXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy01MTI2LSAqL1xuZnMvbnRmcy9hdHRyaWIuYzo1MTI3OmludCBudGZzX2F0dHJfcm0oc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuZnMvbnRmcy9hdHRyaWIuYy01MTI4LXtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTUyMDk9aW50IG50ZnNfYXR0cl9yZW1vdmUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwgX19sZTE2ICpuYW1lLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtNTIyOS1cbmZzL250ZnMvYXR0cmliLmM6NTIzMDpcdGVyciA9IG50ZnNfYXR0cl9ybShhdHRyX25pKTtcbmZzL250ZnMvYXR0cmliLmMtNTIzMS1cdGlmIChlcnIpXG4tLVxuZnMvbnRmcy9hdHRyaWIuaD0xMTY9aW50IG50ZnNfYXR0cl90cnVuY2F0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXplKTtcbmZzL250ZnMvYXR0cmliLmg6MTE3OmludCBudGZzX2F0dHJfcm0oc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbmZzL250ZnMvYXR0cmliLmgtMTE4LWludCBudGZzX2F0dHJfZXhpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwgX19sZTE2ICpuYW1lLFxuLS1cbmZzL250ZnMvcmVwYXJzZS5jPTU5Mz1zdGF0aWMgaW50IHVwZGF0ZV9yZXBhcnNlX2RhdGEoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICp4cixcbi0tXG5mcy9udGZzL3JlcGFyc2UuYy02MjktXHRcdCAqL1xuZnMvbnRmcy9yZXBhcnNlLmM6NjMwOlx0XHRudGZzX2F0dHJfcm0ocnBfbmkpO1xuZnMvbnRmcy9yZXBhcnNlLmMtNjMxLVx0XHRudGZzX2Vycm9yKG5pLVx1MDAzZXZvbC1cdTAwM2VzYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb25zdHJ1Y3RpbmcgdGhlIE5URlMgSW5vZGUgRXZpY3Rpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgTlRGUyBpbm9kZSBldmljdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIG9mZjsgSSB0aG91Z2h0IGBudGZzX2F0dHJfcmVtb3ZlYCB3YXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGVgLCBidXQgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IHNlZW1zIGBudGZzX2RlbGV0ZV9iYXNlX2lub2RlYCBhY3R1YWxseSBjYWxscyBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AgYW5kIGBudGZzX21mdF9yZWNvcmRfZnJlZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LgoKQWgsIGhlcmUmIzM5O3MgdGhlIGtleTogdGhpcyBwYXRjaCBpcyBzYXlpbmcgdGhhdCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpYCBjbGVhcnMgYFNCX0FDVElWRWAgKmJlZm9yZSogZXZpY3RpbmcgY2FjaGVkIGlub2Rlcy4gV2hpY2ggbWVhbnMgd2UgKmNhbiYjMzk7dCogbG9vayB1cCB0aGUgYXR0cmlidXRlLWxpc3QgaW5vZGUgYWZ0ZXIgYFNCX0FDVElWRWAgaXMgY2xlYXJlZCBiZWNhdXNlIGl0IG1pZ2h0IGFscmVhZHkgYmUgaW4gdGhlIGBJX0ZSRUVJTkdgIHN0YXRlLCBhbmQgd2FpdGluZyBvbiBpdCBjb3VsZCBjYXVzZSBhIG5hc3R5IHNlbGYtZGVhZGxvY2suIFRoYXQgcmVhbGx5IGNsYXJpZmllcyB0aGUgcHJvYmxlbSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nLgoKU28sIHRoaXMgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCByb3V0aW5lIGlzIGRlZmluaXRlbHkgdHJpZ2dlcmVkIGR1cmluZyBldmljdGlvbi4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGVsc2UgaXQmIzM5O3MgY2FsbGVkIGZyb20uIExldCYjMzk7cyBzZWUuLi4gaXQmIzM5O3MgY2FsbGVkIGZyb20gYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gLCBgbnRmc19hdHRybGlzdF9lbnRyeV9hZGRgLCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCwgYG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemVgLCBgbnRmc19hdHRyX3VwZGF0ZV9tZXRhYCwgYG50ZnNfaXJfcmVwYXJlbnRgLCBhbmQgYG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0YC4gVGhhdCBnaXZlcyBtZSBhIGJyb2FkZXIgcGljdHVyZSBvZiBpdHMgcm9sZS4KClNwZWNpZmljYWxseSwgZHVyaW5nIGV2aWN0aW9uLCBgbnRmc19ldmljdF9iaWdfaW5vZGVgIGNhbGxzIGBudGZzX2RlbGV0ZV9iYXNlX2lub2RlYCwgd2hpY2gsIGFzIHdlIGVzdGFibGlzaGVkLCBjYWxscyBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AuIEFuZCB0aGVuIGBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzYCBjYWxscyBgbnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybGAuIEdvdCBpdC4KCkJ1dCBob2xkIG9uLCBgbnRmc19ldmljdF9iaWdfaW5vZGVgICphbHNvKiBjYWxscyBgbnRmc19jb21taXRfaW5vZGVgIGlmIHRoZSBpbm9kZSBpcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBudGZzX2NvbW1pdF9pbm9kZWAgaW4gdGhpcyBjb250ZXh0LiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkmIzM5O2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGZ1bmN0aW9uIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfY29tbWl0X2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbm9kZS5jPTIyNzI9dm9pZCBudGZzX2V2aWN0X2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKVxuLS1cbmZzL250ZnMvaW5vZGUuYy0yMjg4LVx0XHQvKiBDb21taXR0aW5nIHRoZSBpbm9kZSBhbHNvIGNvbW1pdHMgYWxsIGV4dGVudCBpbm9kZXMuICovXG5mcy9udGZzL2lub2RlLmM6MjI4OTpcdFx0bnRmc19jb21taXRfaW5vZGUodmkpO1xuZnMvbnRmcy9pbm9kZS5jLTIyOTAtXG4tLVxuZnMvbnRmcy9pbm9kZS5oPTM0Nj1pbnQgbnRmc19pbm9kZV9jbG9zZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuZnMvbnRmcy9pbm9kZS5oLTM0Ny1cbmZzL250ZnMvaW5vZGUuaDozNDg6c3RhdGljIGlubGluZSB2b2lkIG50ZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpXG5mcy9udGZzL2lub2RlLmgtMzQ5LXtcbi0tXG5mcy9udGZzL3N1cGVyLmM9MTcxMT1zdGF0aWMgdm9pZCBudGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0xNzIyLVx0ICovXG5mcy9udGZzL3N1cGVyLmM6MTcyMzpcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cdTAwM2V2b2xfaW5vKTtcbmZzL250ZnMvc3VwZXIuYy0xNzI0LVxuLS1cbmZzL250ZnMvc3VwZXIuYy0xNzI3LVx0XHRpZiAodm9sLVx1MDAzZWV4dGVuZF9pbm8pXG5mcy9udGZzL3N1cGVyLmM6MTcyODpcdFx0XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlZXh0ZW5kX2lubyk7XG5mcy9udGZzL3N1cGVyLmMtMTcyOS1cdFx0aWYgKHZvbC1cdTAwM2VzZWN1cmVfaW5vKVxuZnMvbnRmcy9zdXBlci5jOjE3MzA6XHRcdFx0bnRmc19jb21taXRfaW5vZGUodm9sLVx1MDAzZXNlY3VyZV9pbm8pO1xuZnMvbnRmcy9zdXBlci5jLTE3MzEtXHR9XG5mcy9udGZzL3N1cGVyLmMtMTczMi1cbmZzL250ZnMvc3VwZXIuYzoxNzMzOlx0bnRmc19jb21taXRfaW5vZGUodm9sLVx1MDAzZXJvb3RfaW5vKTtcbmZzL250ZnMvc3VwZXIuYy0xNzM0LVxuZnMvbnRmcy9zdXBlci5jOjE3MzU6XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlbGNuYm1wX2lubyk7XG5mcy9udGZzL3N1cGVyLmMtMTczNi1cbmZzL250ZnMvc3VwZXIuYy0xNzM3LVx0LypcbmZzL250ZnMvc3VwZXIuYzoxNzM4Olx0ICogdGhlIEdGUF9OT0ZTIHNjb3BlIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSBudGZzX2NvbW1pdF9pbm9kZVxuZnMvbnRmcy9zdXBlci5jLTE3MzktXHQgKiBkb2VzIG5vdGhpbmdcbmZzL250ZnMvc3VwZXIuYy0xNzQwLVx0ICovXG5mcy9udGZzL3N1cGVyLmM6MTc0MTpcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cdTAwM2VtZnRibXBfaW5vKTtcbmZzL250ZnMvc3VwZXIuYy0xNzQyLVxuZnMvbnRmcy9zdXBlci5jLTE3NDMtXHRpZiAodm9sLVx1MDAzZWxvZ2ZpbGVfaW5vKVxuZnMvbnRmcy9zdXBlci5jOjE3NDQ6XHRcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cdTAwM2Vsb2dmaWxlX2lubyk7XG5mcy9udGZzL3N1cGVyLmMtMTc0NS1cbmZzL250ZnMvc3VwZXIuYy0xNzQ2LVx0aWYgKHZvbC1cdTAwM2VtZnRtaXJyX2lubylcbmZzL250ZnMvc3VwZXIuYzoxNzQ3Olx0XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlbWZ0bWlycl9pbm8pO1xuZnMvbnRmcy9zdXBlci5jOjE3NDg6XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlbWZ0X2lubyk7XG5mcy9udGZzL3N1cGVyLmMtMTc0OS1cbi0tXG5mcy9udGZzL3N1cGVyLmMtMTc1OC1cdFx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGNsZWFyIGRpcnR5IGJpdCBpbiB2b2x1bWUgaW5mb3JtYXRpb24gZmxhZ3MuICBSdW4gY2hrZHNrLlwmIzM0Oyk7XG5mcy9udGZzL3N1cGVyLmM6MTc1OTpcdFx0XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNldm9sX2lubyk7XG5mcy9udGZzL3N1cGVyLmM6MTc2MDpcdFx0XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlcm9vdF9pbm8pO1xuZnMvbnRmcy9zdXBlci5jLTE3NjEtXHRcdFx0aWYgKHZvbC1cdTAwM2VtZnRtaXJyX2lubylcbmZzL250ZnMvc3VwZXIuYzoxNzYyOlx0XHRcdFx0bnRmc19jb21taXRfaW5vZGUodm9sLVx1MDAzZW1mdG1pcnJfaW5vKTtcbmZzL250ZnMvc3VwZXIuYzoxNzYzOlx0XHRcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cdTAwM2VtZnRfaW5vKTtcbmZzL250ZnMvc3VwZXIuYy0xNzY0LVx0XHR9IGVsc2Uge1xuLS1cbmZzL250ZnMvc3VwZXIuYy0xNzk5LVx0XHQvKiBSZS1jb21taXQgdGhlIG1mdCBtaXJyb3IgYW5kIG1mdCBqdXN0IGluIGNhc2UuICovXG5mcy9udGZzL3N1cGVyLmM6MTgwMDpcdFx0bnRmc19jb21taXRfaW5vZGUodm9sLVx1MDAzZW1mdG1pcnJfaW5vKTtcbmZzL250ZnMvc3VwZXIuYzoxODAxOlx0XHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXHUwMDNlbWZ0X2lubyk7XG5mcy9udGZzL3N1cGVyLmMtMTgwMi1cdFx0aXB1dCh2b2wtXHUwMDNlbWZ0bWlycl9pbm8pO1xuLS1cbmZzL250ZnMvc3VwZXIuYy0xODA5LVx0ICovXG5mcy9udGZzL3N1cGVyLmM6MTgxMDpcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cdTAwM2VtZnRfaW5vKTtcbmZzL250ZnMvc3VwZXIuYy0xODExLVx0d3JpdGVfaW5vZGVfbm93KHZvbC1cdTAwM2VtZnRfaW5vLCAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBJbm9kZSBDb21taXQqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IChvciBwZXJoYXBzIGRlbHZlIGRlZXBlcikgaW50byB0aGUgbWVjaGFuaWNzIG9mIGBudGZzX2NvbW1pdF9pbm9kZWAuIEdpdmVuIGl0cyBuYW1lLCBpdCYjMzk7cyBvYnZpb3VzbHkgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGlub2RlIG1ldGFkYXRhIGludGVncml0eSB3aXRoaW4gdGhlIE5URlMgZmlsZXN5c3RlbSwgc28gbmF0dXJhbGx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O3doZXJlIGlzIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbj8mIzM0OyBJdCB3b3VsZCBtYWtlIHNlbnNlIGZvciB0aGF0IHRvIGxpdmUgd2l0aGluIGBmcy9udGZzL2lub2RlLmhgLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFkZXIgZmlsZSBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpbmdzLCB3aGF0IHNwaW5sb2NrcyBvciBzZW1hcGhvcmVzIG1pZ2h0IGJlIGludm9sdmVkLCBhbmQgd2hhdCBjb25zaXN0ZW5jeSBtb2RlbHMgYXJlIHVzZWQuIEkgYXNzdW1lIHRoYXQgaXQmIzM5O3MgZ29pbmcgdG8gaW5jbHVkZSBkZWFsaW5nIHdpdGggd3JpdGluZyBkaXJ0eSBtZXRhZGF0YSB0byB0aGUgTUZUIChNYXN0ZXIgRmlsZSBUYWJsZSkuIFdvbmRlcmluZyBob3cgaXQgbWFuYWdlcyBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHJhY2UgY29uZGl0aW9ucyBhbmQgd2hhdCBsZXZlbCBvZiBhdG9taWNpdHkgaXMgZ3VhcmFudGVlZCwgdGhpbmtpbmcgcGVyaGFwcyBpdCByZWxpZXMgb24gam91cm5hbGVkIG1ldGFkYXRhIHVwZGF0ZXMgdG8gcmVjb3ZlciBmcm9tIGlzc3Vlcy4gVGhpcyBpcyB0aGUgbHluY2hwaW4gb2YgaW5vZGUgbWFuYWdlbWVudCBmb3IgTlRGUywgYW5kIGdldHRpbmcgdGhlIGRldGFpbHMgcmlnaHQgaGVyZSBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5vZGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQ4Olx0c3RhdGljIGlubGluZSB2b2lkIG50ZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpXG4gMzQ5Olx0e1xuIDM1MDpcdFx0X19udGZzX3dyaXRlX2lub2RlKHZpLCAxKTtcbiAzNTE6XHR9XG4gMzUyOlx0XG4gMzUzOlx0aW50IG50ZnNfaW5vZGVfc3luY19maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xuIDM1NDpcdGludCBudGZzX2V4dGVuZF9pbml0aWFsaXplZF9zaXplKHN0cnVjdCBpbm9kZSAqdmksIGNvbnN0IGxvZmZfdCBvZmZzZXQsXG4gMzU1Olx0XHRcdGNvbnN0IGxvZmZfdCBuZXdfc2l6ZSwgYm9vbCBic3luYyk7XG4gMzU2Olx0dm9pZCBudGZzX3NldF92ZnNfb3BlcmF0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiAzNTc6XHRzdHJ1Y3QgZm9saW8gKm50ZnNfZ2V0X2xvY2tlZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiAzNTg6XHRcdFx0cGdvZmZfdCBpbmRleCwgcGdvZmZfdCBlbmRfaW5kZXgsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSk7XG4gMzU5Olx0XG4gMzYwOlx0I2VuZGlmIC8qIF9MSU5VWF9OVEZTX0lOT0RFX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBJbm9kZSBXcml0ZSBQYXRoKioKCkFscmlnaHQsIHNvIGBudGZzX2NvbW1pdF9pbm9kZWAgdHJpZ2dlcnMgYSBjaGFpbiByZWFjdGlvbiwgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYF9fbnRmc193cml0ZV9pbm9kZSh2aSwgMSlgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24uIE5vdywgYF9fbnRmc193cml0ZV9pbm9kZWAsIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSXQmIzM5O3MgY2FsbGluZyBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCB3aGljaCwgaW4gdHVybiwgY2FsbHMgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYC4gQ2xlYXJseSwgdGhpcyBpcyB0aGUgY29yZSBvZiBob3cgdGhlIGF0dHJpYnV0ZSBsaXN0IGRhdGEgaXMgYmVpbmcgdXBkYXRlZC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19udGZzX3dyaXRlX2lub2RlYCwgc28gSSYjMzk7bGwganVtcCBvdmVyIHRvIGBmcy9udGZzL2lub2RlLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzIzOlx0aW50IF9fbnRmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpLCBpbnQgc3luYylcbjI3MjQ6XHR7XG4yNzI1Olx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0kodmkpO1xuMjcyNjpcdFx0c3RydWN0IG50ZnNfaW5vZGUgKm1mdF9uaSA9IE5URlNfSShuaS1cdTAwM2V2b2wtXHUwMDNlbWZ0X2lubyk7XG4yNzI3Olx0XHRzdHJ1Y3QgbWZ0X3JlY29yZCAqbTtcbjI3Mjg6XHRcdGludCBlcnIgPSAwO1xuMjcyOTpcdFx0Ym9vbCBuZWVkX2lwdXQgPSBmYWxzZTtcbjI3MzA6XHRcbjI3MzE6XHRcdG50ZnNfZGVidWcoXCYjMzQ7RW50ZXJpbmcgZm9yICVzaW5vZGUgMHglbGx4LlwmIzM0OywgTklub0F0dHIobmkpID8gXCYjMzQ7YXR0ciBcJiMzNDsgOiBcJiMzNDtcJiMzNDssXG4yNzMyOlx0XHRcdFx0bmktXHUwMDNlbWZ0X25vKTtcbjI3MzM6XHRcbjI3MzQ6XHRcdGlmIChOVm9sU2h1dGRvd24obmktXHUwMDNldm9sKSlcbjI3MzU6XHRcdFx0cmV0dXJuIC1FSU87XG4yNzM2Olx0XG4yNzM3Olx0XHQvKlxuMjczODpcdFx0ICogRGlydHkgYXR0cmlidXRlIGlub2RlcyBhcmUgd3JpdHRlbiB2aWEgdGhlaXIgcmVhbCBpbm9kZXMgc28ganVzdFxuMjczOTpcdFx0ICogY2xlYW4gdGhlbSBoZXJlLiAgQWNjZXNzIHRpbWUgdXBkYXRlcyBhcmUgdGFrZW4gY2FyZSBvZmYgd2hlbiB0aGVcbjI3NDA6XHRcdCAqIHJlYWwgaW5vZGUgaXMgd3JpdHRlbi5cbjI3NDE6XHRcdCAqL1xuMjc0MjpcdFx0aWYgKE5Jbm9BdHRyKG5pKSB8fCBuaS1cdTAwM2Vucl9leHRlbnRzID09IC0xKSB7XG4yNzQzOlx0XHRcdE5Jbm9DbGVhckRpcnR5KG5pKTtcbjI3NDQ6XHRcdFx0bnRmc19kZWJ1ZyhcJiMzNDtEb25lLlwmIzM0Oyk7XG4yNzQ1Olx0XHRcdHJldHVybiAwO1xuMjc0NjpcdFx0fVxuMjc0NzpcdFxuMjc0ODpcdFx0LyogaWdyYWIgcHJldmVudHMgdmkgZnJvbSBiZWluZyBldmljdGVkIHdoaWxlIG1yZWNfbG9jayBpcyBob2xkLiAqL1xuMjc0OTpcdFx0aWYgKGlncmFiKHZpKSAhPSBOVUxMKVxuMjc1MDpcdFx0XHRuZWVkX2lwdXQgPSB0cnVlO1xuMjc1MTpcdFxuMjc1MjpcdFx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7XG4yNzUzOlx0XHQvKiBNYXAsIHBpbiwgYW5kIGxvY2sgdGhlIG1mdCByZWNvcmQgYmVsb25naW5nIHRvIHRoZSBpbm9kZS4gKi9cbjI3NTQ6XHRcdG0gPSBtYXBfbWZ0X3JlY29yZChuaSk7XG4yNzU1Olx0XHRpZiAoSVNfRVJSKG0pKSB7XG4yNzU2Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuMjc1NzpcdFx0XHRlcnIgPSBQVFJfRVJSKG0pO1xuMjc1ODpcdFx0XHRnb3RvIGVycl9vdXQ7XG4yNzU5Olx0XHR9XG4yNzYwOlx0XG4yNzYxOlx0XHRpZiAoTklub05vblJlc2lkZW50KG5pKSBcdTAwMjZcdTAwMjYgTklub1J1bmxpc3REaXJ0eShuaSkpIHtcbjI3NjI6XHRcdFx0ZG93bl93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuMjc2MzpcdFx0XHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xuMjc2NDpcdFx0XHRpZiAoIWVycilcbjI3NjU6XHRcdFx0XHROSW5vQ2xlYXJSdW5saXN0RGlydHkobmkpO1xuMjc2NjpcdFx0XHR1cF93cml0ZShcdTAwMjZuaS1cdTAwM2VydW5saXN0LmxvY2spO1xuMjc2NzpcdFx0fVxuMjc2ODpcdFxuMjc2OTpcdFx0ZXJyID0gbnRmc19pbm9kZV9zeW5jX3N0YW5kYXJkX2luZm9ybWF0aW9uKHZpLCBtKTtcbjI3NzA6XHRcdGlmIChlcnIpXG4yNzcxOlx0XHRcdGdvdG8gdW5tX2Vycl9vdXQ7XG4yNzcyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlRGUyBFdmljdGlvbiBEZWFkbG9jayBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBOVEZTIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IGJyZWFrZG93bi4gSXQgbG9va3MgbGlrZSBgbnRmc19hdHRybGlzdF91cGRhdGVgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGR1cmluZyB0aGUgZXZpY3Rpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGZyb20gYF9fbnRmc193cml0ZV9pbm9kZWAsIHdoaWNoIGlzIGl0c2VsZiBjYWxsZWQgdGhyb3VnaCBgbnRmc19jb21taXRfaW5vZGVgIHdpdGhpbiBgbnRmc19ldmljdF9iaWdfaW5vZGVgLiBUaGUga2V5IHBhcnQgb2YgdGhpcyBwYXRjaCBpcyB0aGUgYWRkaXRpb24gb2YgYSBjaGVjayBmb3IgYFNCX0FDVElWRWAgd2l0aGluIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAsIGFuZCByZXR1cm5pbmcgYC1FSU9gIGlmIGl0JiMzOTtzIG5vdCBzZXQuCgpUaGUgY29yZSBvZiBteSBhbmFseXNpcyBpcyB0cnlpbmcgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kICpob3cqIGl0IHByZXZlbnRzIGEgcG90ZW50aWFsIGRlYWRsb2NrLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gVGhlIHNjZW5hcmlvIGlzIHRoaXM6IHdlIG1vdW50IGFuIE5URlMgdm9sdW1lLCBkbyBzb21ldGhpbmcgdGhhdCBkaXJ0aWVzIHRoZSBydW5saXN0IG9mIGFuIGlub2RlIHdpdGggYW4gYXR0cmlidXRlIGxpc3QsIGFuZCB0aGVuIHVubW91bnQgaXQuIER1cmluZyB1bm1vdW50LCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAgY2xlYXJzIHRoZSBgU0JfQUNUSVZFYCBmbGFnLCB3aGljaCBpcyBjcnVjaWFsLiBUaGVuLCBgZXZpY3RfaW5vZGVzYCBnZXRzIGNhbGxlZCwga2lja2luZyBvZmYgdGhlIGlub2RlIGV2aWN0aW9uIHByb2Nlc3MuIFRoaXMgbGVhZHMgdG8gYG50ZnNfZXZpY3RfYmlnX2lub2RlYCwgd2hpY2ggY2FsbHMgYG50ZnNfY29tbWl0X2lub2RlYCwgd2hpY2ggY2FsbHMgYF9fbnRmc193cml0ZV9pbm9kZWAuIFRoaXMgdGhlbiBjYWxscyBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCBhbmQgKnRoYXQqIGNhbGxzIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAuCgpUaGUgcG90ZW50aWFsIGlzc3VlIGlzIHdpdGhpbiBgbnRmc19hdHRybGlzdF91cGRhdGVgIGl0c2VsZi4gSXQgdHJpZXMgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgbGlzdCBpbm9kZSB1c2luZyBgbnRmc19hdHRyX2lnZXRgLiBOb3csIGBudGZzX2F0dHJfaWdldGAgY2FsbHMgYGlnZXQ1X2xvY2tlZGAuIEhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogaWYgdGhlIGlub2RlIGlzIGFscmVhZHkgYmVpbmcgZnJlZWQgKElfRlJFRUlORyksIGBpZ2V0NV9sb2NrZWRgIHdpbGwgd2FpdCBvbiBgX193YWl0X29uX2ZyZWVpbmdfaW5vZGVgLiBTaW5jZSB3ZSYjMzk7cmUgaW4gYGV2aWN0X2lub2Rlc2AgYW5kIGBTQl9BQ1RJVkVgIGlzIGNsZWFyZWQsIHdlIGNvdWxkIGJlIHdhaXRpbmcgb24gYW4gaW5vZGUgdGhhdCBpcyBzaW11bHRhbmVvdXNseSBiZWluZyBldmljdGVkLCBsZWFkaW5nIHRvIGEgZGVhZGxvY2suIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzIGJ5IHJldHVybmluZyBgLUVJT2AgaWYgYFNCX0FDVElWRWAgaXMgY2xlYXIgYmVmb3JlIGV2ZW4gYXR0ZW1wdGluZyB0byBnZXQgdGhlIGlub2RlLiBUaGlzIHByZXZlbnRzIHRoZSB3YWl0aW5nIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyBpcyBhIGNsZXZlciBhbmQgZnVuY3Rpb25hbCBmaXguCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgaW4gYGZzL250ZnMvYXR0cmxpc3QuY2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9hdHRybGlzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NDpcdGludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSlcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgaW5vZGUgKmF0dHJfdmk7XG4gIDU3Olx0XHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaTtcbiAgNTg6XHRcdGludCBlcnI7XG4gIDU5Olx0XG4gIDYwOlx0XHQvKlxuICA2MTpcdFx0ICogZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpIGNsZWFycyBTQl9BQ1RJVkUgYmVmb3JlIGV2aWN0aW5nIGNhY2hlZFxuICA2MjpcdFx0ICogaW5vZGVzLiBEbyBub3QgbG9vayB1cCB0aGUgYXR0cmlidXRlLWxpc3QgaW5vZGUgYWZ0ZXIgU0JfQUNUSVZFIGhhc1xuICA2MzpcdFx0ICogYmVlbiBjbGVhcmVkOyBpdCBtYXkgYWxyZWFkeSBiZSBJX0ZSRUVJTkcsIGFuZCB3YWl0aW5nIG9uIGl0IGNhblxuICA2NDpcdFx0ICogc2VsZi1kZWFkbG9jay5cbiAgNjU6XHRcdCAqL1xuICA2NjpcdFx0aWYgKCEoVkZTX0koYmFzZV9uaSktXHUwMDNlaV9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9BQ1RJVkUpKVxuICA2NzpcdFx0XHRyZXR1cm4gLUVJTztcbiAgNjg6XHRcbiAgNjk6XHRcdGF0dHJfdmkgPSBudGZzX2F0dHJfaWdldChWRlNfSShiYXNlX25pKSwgQVRfQVRUUklCVVRFX0xJU1QsIEFUX1VOTkFNRUQsIDApO1xuICA3MDpcdFx0aWYgKElTX0VSUihhdHRyX3ZpKSkge1xuICA3MTpcdFx0XHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xuICA3MjpcdFx0XHRyZXR1cm4gZXJyO1xuICA3MzpcdFx0fVxuICA3NDpcdFx0YXR0cl9uaSA9IE5URlNfSShhdHRyX3ZpKTtcbiAgNzU6XHRcbiAgNzY6XHRcdGVyciA9IG50ZnNfYXR0cl90cnVuY2F0ZV9pKGF0dHJfbmksIGJhc2VfbmktXHUwMDNlYXR0cl9saXN0X3NpemUsIEhPTEVTX05PKTtcbiAgNzc6XHRcdGlmIChlcnIgPT0gLUVOT1NQQyBcdTAwMjZcdTAwMjYgYXR0cl9uaS1cdTAwM2VtZnRfbm8gPT0gRklMRV9NRlQpIHtcbiAgNzg6XHRcdFx0ZXJyID0gbnRmc19hdHRyX3RydW5jYXRlKGF0dHJfbmksIDApO1xuICA3OTpcdFx0XHRpZiAoZXJyIHx8IG50ZnNfYXR0cl90cnVuY2F0ZV9pKGF0dHJfbmksIGJhc2VfbmktXHUwMDNlYXR0cl9saXN0X3NpemUsIEhPTEVTX05PKSAhPSAwKSB7XG4gIDgwOlx0XHRcdFx0aXB1dChhdHRyX3ZpKTtcbiAgODE6XHRcdFx0XHRudGZzX2Vycm9yKGJhc2VfbmktXHUwMDNldm9sLVx1MDAzZXNiLFxuICA4MjpcdFx0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gdHJ1bmNhdGUgYXR0cmlidXRlIGxpc3Qgb2YgaW5vZGUgJSNsbHhcJiMzNDssXG4gIDgzOlx0XHRcdFx0XHRcdChsb25nIGxvbmcpYmFzZV9uaS1cdTAwM2VtZnRfbm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc4MAoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiA3MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE5URlMgRmlsZXN5c3RlbSBEZWFkbG9jayBGaXgqKgoKT2theSwgdGhpcyBwYXRjaCBpcyB0aGUgcmVhbCBkZWFsLCBmaXhpbmcgYSBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIuIFRoZSBjaGFuZ2VzIGFyZSBjbGVhcmx5IGZ1bmN0aW9uYWwgYW5kIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUuIE15IGFuYWx5c2lzIHBvaW50cyBkaXJlY3RseSB0byBhIGhpZ2ggZnV6emluZyB2YWx1ZTsgd2UmIzM5O3JlIGRlZmluaXRlbHkgbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIHRoZSBjcml0aWNhbCBwaWVjZTogaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgbnRmc19hdHRybGlzdF91cGRhdGVgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBmaXggYW5kIHNob3VsZCBiZSB0aGUgcHJpbWFyeSB0YXJnZXQuIFdlIGFsc28gaGF2ZSBgbnRmc19ldmljdF9iaWdfaW5vZGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBldmljdGlvbiBwcm9jZXNzIHdoZXJlIHRoZSBidWcgb2NjdXJzLiBUaGUgcGF0aCBhbHNvIGluY2x1ZGVzIGBudGZzX2NvbW1pdF9pbm9kZWAsIGBfX250ZnNfd3JpdGVfaW5vZGVgIGFuZCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCBidXQgbGV0JiMzOTtzIGluaXRpYWxseSBjb25jZW50cmF0ZSBvbiBgbnRmc19hdHRybGlzdF91cGRhdGVgIGFuZCBgbnRmc19ldmljdF9iaWdfaW5vZGVgLiBXaGlsZSBgbnRmc19ldmljdF9iaWdfaW5vZGVgIGlzIGNhbGxlZCBieSB0aGUgVkZTLCBpdCYjMzk7cyBzdGlsbCBjcnVjaWFsIHRvIGluY2x1ZGUsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGZhaWx1cmUgaXMgc2Vlbi4gVGhlIGZ1bmN0aW9ucyBgbnRmc19hdHRybGlzdF9lbnRyeV9hZGRgIGFuZCBgbnRmc19hdHRybGlzdF9lbnRyeV9ybWAgYWxzbyBjYWxsIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgc28gaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSB0aGVtIGFzIHdlbGwuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaW5jbHVkZSBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCB0b28uCgpBZnRlciBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSwgaXQmIzM5O3MgY29uZmlybWVkIHRoYXQgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBhbmQgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBhcmUgZ2xvYmFsIGZ1bmN0aW9ucywgZGVmaW5lZCBhbmQgZXhwb3J0ZWQsIHNvIGZ1enppbmcgYWNjZXNzIGlzIHN0cmFpZ2h0IGZvcndhcmQuCgpJJiMzOTttIGNvbmZpZGVudCB3ZSBoYXZlIHRoZSByaWdodCBmb2N1cy4gVGhlIGV2aWN0aW9uIHByb2Nlc3MgaXMga2V5IGhlcmUgYW5kIHRoYXQgaXMgdGhlIHNjb3BlIG9mIGJvdGggYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBhbmQgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCwgYW5kIHdlIG11c3Qgbm90IGZvcmdldCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYC4KCkxldCYjMzk7cyB2ZXJpZnkgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLiBBZnRlciBkb3VibGUtY2hlY2tpbmcgYGZzL250ZnMvS2NvbmZpZ2AsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIG9ubHkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gaXMgYE5URlNfRlNgLiBXaGlsZSBgTlRGU19GU19QT1NJWF9BQ0xgIGlzIGF2YWlsYWJsZSwgYE5URlNfRlNgIGlzIHN1ZmZpY2llbnQgYW5kIHdlIHNob3VsZG4mIzM5O3QgaW50cm9kdWNlIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuCgpTdW1tYXJpemluZyB0aGUgcmVxdWlyZW1lbnRzOgoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCiogICBgRm9jdXNTeW1ib2xzOiBbJiMzNDtudGZzX2F0dHJsaXN0X3VwZGF0ZSYjMzQ7LCAmIzM0O250ZnNfZXZpY3RfYmlnX2lub2RlJiMzNDssICYjMzQ7bnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzJiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O05URlNfRlMmIzM0O11gCiogICBgUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBOVEZTIGRyaXZlciBkdXJpbmcgdW5tb3VudC9ldmljdGlvbiBieSBjaGVja2luZyBTQl9BQ1RJVkUgaW4gbnRmc19hdHRybGlzdF91cGRhdGUuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgaW4gdGhlIE5URlMgZmlsZXN5c3RlbS4mIzM0O2AKCk5vdywgbGV0JiMzOTtzIHdyaXRlIHRoaXMgdXAgYW5kIGdldCBpdCBpbnRvIHRoZSBmdXp6aW5nIGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfYXR0cmxpc3RfdXBkYXRlJiMzNDssCiAgICAmIzM0O250ZnNfZXZpY3RfYmlnX2lub2RlJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfYXR0cmxpc3RfdXBkYXRlJiMzNDssCiAgICAmIzM0O250ZnNfZXZpY3RfYmlnX2lub2RlJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjI2LjIwMDU1OTEyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDE1NTQwMTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRybGlzdF91cGRhdGVcIixcbiAgICBcIm50ZnNfZXZpY3RfYmlnX2lub2RlXCIsXG4gICAgXCJudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6MjYuMjAwNTY2OTQ2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIwMTYwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODI1ODkwNGI3Y2I5OTIxZTBkN2Q2MzEzZDdjYmUwNjI1NTU0MDU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDYgMDQ6MjU6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRybGlzdC5jIGIvZnMvbnRmcy9hdHRybGlzdC5jXFxuaW5kZXggYWZiMTMwMzhiYTQyNWYuLmJlMzA4NmQzNDMzODE2IDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvYXR0cmxpc3QuY1xcbisrKyBiL2ZzL250ZnMvYXR0cmxpc3QuY1xcbkBAIC01Nyw2ICs1NywxNSBAQCBpbnQgbnRmc19hdHRybGlzdF91cGRhdGUoc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkpXFxuIFxcdHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpIGNsZWFycyBTQl9BQ1RJVkUgYmVmb3JlIGV2aWN0aW5nIGNhY2hlZFxcbitcXHQgKiBpbm9kZXMuIERvIG5vdCBsb29rIHVwIHRoZSBhdHRyaWJ1dGUtbGlzdCBpbm9kZSBhZnRlciBTQl9BQ1RJVkUgaGFzXFxuK1xcdCAqIGJlZW4gY2xlYXJlZDsgaXQgbWF5IGFscmVhZHkgYmUgSV9GUkVFSU5HLCBhbmQgd2FpdGluZyBvbiBpdCBjYW5cXG4rXFx0ICogc2VsZi1kZWFkbG9jay5cXG4rXFx0ICovXFxuK1xcdGlmICghKFZGU19JKGJhc2VfbmkpLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgU0JfQUNUSVZFKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbiBcXHRhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0koYmFzZV9uaSksIEFUX0FUVFJJQlVURV9MSVNULCBBVF9VTk5BTUVELCAwKTtcXG4gXFx0aWYgKElTX0VSUihhdHRyX3ZpKSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNToyNi42NjM1OTQ1NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MzY5MjM1Mjc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRybGlzdF91cGRhdGVcIixcbiAgICBcIm50ZnNfZXZpY3RfYmlnX2lub2RlXCIsXG4gICAgXCJudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmODI1ODkwNGI3Y2I5OTIxZTBkN2Q2MzEzZDdjYmUwNjI1NTU0MDU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAwNDoyNToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmxpc3QuYyBiL2ZzL250ZnMvYXR0cmxpc3QuY1xuaW5kZXggYWZiMTMwMzhiYTQyNWYuLmJlMzA4NmQzNDMzODE2IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9hdHRybGlzdC5jXG4rKysgYi9mcy9udGZzL2F0dHJsaXN0LmNcbkBAIC01Nyw2ICs1NywxNSBAQCBpbnQgbnRmc19hdHRybGlzdF91cGRhdGUoc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkpXG4gXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaTtcbiBcdGludCBlcnI7XG4gXG4rXHQvKlxuK1x0ICogZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpIGNsZWFycyBTQl9BQ1RJVkUgYmVmb3JlIGV2aWN0aW5nIGNhY2hlZFxuK1x0ICogaW5vZGVzLiBEbyBub3QgbG9vayB1cCB0aGUgYXR0cmlidXRlLWxpc3QgaW5vZGUgYWZ0ZXIgU0JfQUNUSVZFIGhhc1xuK1x0ICogYmVlbiBjbGVhcmVkOyBpdCBtYXkgYWxyZWFkeSBiZSBJX0ZSRUVJTkcsIGFuZCB3YWl0aW5nIG9uIGl0IGNhblxuK1x0ICogc2VsZi1kZWFkbG9jay5cbitcdCAqL1xuK1x0aWYgKCEoVkZTX0koYmFzZV9uaSktXHUwMDNlaV9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9BQ1RJVkUpKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbiBcdGF0dHJfdmkgPSBudGZzX2F0dHJfaWdldChWRlNfSShiYXNlX25pKSwgQVRfQVRUUklCVVRFX0xJU1QsIEFUX1VOTkFNRUQsIDApO1xuIFx0aWYgKElTX0VSUihhdHRyX3ZpKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6MjYuNjYzNTk3MTE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyNjEzMjA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGaWxlIFN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL250ZnMvYXR0cmxpc3QuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiBgbnRmc19hdHRybGlzdF91cGRhdGUoKWAuIFNwZWNpZmljYWxseSwgdGhpcyBiaXQ6XG5gYGBjXG5cdGlmICghKFZGU19JKGJhc2VfbmkpLVx1MDAzZWlfc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfQUNUSVZFKSlcblx0XHRyZXR1cm4gLUVJTztcbmBgYFxuVGhhdCdzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIExldCdzIGRpZyBpbnRvIHRoYXQgYGZzL250ZnMvYXR0cmxpc3QuY2AgZmlsZSBhbmQgdGhlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgZnVuY3Rpb24gaXRzZWxmIHRvIHNlZSB0aGUgY29udGV4dC5cblxuUmlnaHQsIHRoZSBwYXRoIGlzIGBmcy9udGZzL2F0dHJsaXN0LmNgLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgTlRGUyBpcyBhY3R1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQncyBnYXRpbmcgdGhpcy4gSSdtIHVzdWFsbHkgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgYE5URlNfRlNgLCBidXQgb2YgY291cnNlLCB0aGVyZSdzIGFsd2F5cyBgTlRGUzNfRlNgIGluIGBmcy9udGZzMy9gLCBzbyBJIGhhdmUgdG8gYmUgY2FyZWZ1bCB0aGF0IHRoaXMgaXMgdGhlIGNsYXNzaWMgTlRGUy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZSBpbiBgZnMvbnRmcy9gIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6MzEuMTg5NzMzNTExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDgwMTIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXFxuLS1cXG5mcy9udGZzL0tjb25maWctMzQtXFxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNTozMS4zMjA1NDA3ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDAyOTQzODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBOVEZTX0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gQnV0IGhvbGQgb24sIHdhc24ndCB0aGF0IHRoZSAqb2xkKiBOVEZTIGRyaXZlcj8gRGlkbid0IHdlIG1vdmUgb24gdG8gYE5URlMzX0ZTYCBhIHdoaWxlIGJhY2s/IEkgdGhvdWdodCBgTlRGU19GU2Agd2FzIGVpdGhlciByZW1vdmVkIG9yIGF0IGxlYXN0IGhlYXZpbHkgZGVwcmVjYXRlZCBhdCB0aGlzIHBvaW50LiBKdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZmlsZXN5c3RlbSBkcml2ZXJzLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5IHRvIGNvbmZpcm0uIEkgc2hvdWxkIHNlZSBpZiB0aGUgYGZzL250ZnMvYCBkaXJlY3RvcnkgaXMgc3RpbGwgcHJlc2VudC4gVGhhdCB3aWxsIHRlbGwgdGhlIHRhbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNTozNC4zMjM0ODcwMDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImZzL250ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYW9wcy5jXCIsXG4gICAgXCJhdHRyaWIuY1wiLFxuICAgIFwiYXR0cmliLmhcIixcbiAgICBcImF0dHJsaXN0LmNcIixcbiAgICBcImF0dHJsaXN0LmhcIixcbiAgICBcImJkZXYtaW8uY1wiLFxuICAgIFwiYml0bWFwLmNcIixcbiAgICBcImJpdG1hcC5oXCIsXG4gICAgXCJjb2xsYXRlLmNcIixcbiAgICBcImNvbGxhdGUuaFwiLFxuICAgIFwiY29tcHJlc3MuY1wiLFxuICAgIFwiZGVidWcuY1wiLFxuICAgIFwiZGVidWcuaFwiLFxuICAgIFwiZGlyLmNcIixcbiAgICBcImRpci5oXCIsXG4gICAgXCJlYS5jXCIsXG4gICAgXCJlYS5oXCIsXG4gICAgXCJmaWxlLmNcIixcbiAgICBcImluZGV4LmNcIixcbiAgICBcImluZGV4LmhcIixcbiAgICBcImlub2RlLmNcIixcbiAgICBcImlub2RlLmhcIixcbiAgICBcImlvbWFwLmNcIixcbiAgICBcImlvbWFwLmhcIixcbiAgICBcImxheW91dC5oXCIsXG4gICAgXCJsY25hbGxvYy5jXCIsXG4gICAgXCJsY25hbGxvYy5oXCIsXG4gICAgXCJsb2dmaWxlLmNcIixcbiAgICBcImxvZ2ZpbGUuaFwiLFxuICAgIFwibWFsbG9jLmhcIixcbiAgICBcIm1mdC5jXCIsXG4gICAgXCJtZnQuaFwiLFxuICAgIFwibXN0LmNcIixcbiAgICBcIm5hbWVpLmNcIixcbiAgICBcIm50ZnMuaFwiLFxuICAgIFwib2JqZWN0X2lkLmNcIixcbiAgICBcIm9iamVjdF9pZC5oXCIsXG4gICAgXCJyZXBhcnNlLmNcIixcbiAgICBcInJlcGFyc2UuaFwiLFxuICAgIFwicnVubGlzdC5jXCIsXG4gICAgXCJydW5saXN0LmhcIixcbiAgICBcInN1cGVyLmNcIixcbiAgICBcInN5c2N0bC5jXCIsXG4gICAgXCJzeXNjdGwuaFwiLFxuICAgIFwidGltZS5oXCIsXG4gICAgXCJ1bmlzdHIuY1wiLFxuICAgIFwidXBjYXNlLmNcIixcbiAgICBcInZvbHVtZS5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjM0LjMyMzYxMDgwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODA2OTU1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpcm1pbmcgRXhpc3RlbmNlIGFuZCBEaXZpbmcgSW4qKlxuXG5ZZXAsIGl0J3MgZGVmaW5pdGVseSBhIHJlYWwgdGhpbmcuIE9rYXksIEknbSB0aGlua2luZywgbGV0J3MgZ2V0IHJpZ2h0IHRvIGl0LiBUaGUgcGxhY2UgdG8gc3RhcnQgcG9raW5nIGFyb3VuZCBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGlzIGdvaW5nIHRvIGJlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgaW4gYGZzL250ZnMvYXR0cmxpc3QuY2AuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgYW55IGF0dHJpYnV0ZSBsaXN0IHVwZGF0ZSBsb2dpYyByZXNpZGVzLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNTozNi45MDQzMDg5OTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMzA1NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfYXR0cmxpc3RfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvYXR0cmliLmM9MzU0MT1zdGF0aWMgaW50IG50ZnNfYXR0cl91cGRhdGVfbWV0YShzdHJ1Y3QgYXR0cl9yZWNvcmQgKmEsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMzU5MC1cXG5mcy9udGZzL2F0dHJpYi5jOjM1OTE6XFx0XFx0XFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XFxuZnMvbnRmcy9hdHRyaWIuYy0zNTkyLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTM2ODA9aW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMzgxNi1cXHRcXHRcXHRcXHR9XFxuZnMvbnRmcy9hdHRyaWIuYzozODE3OlxcdFxcdFxcdFxcdGlmIChudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKSlcXG5mcy9udGZzL2F0dHJpYi5jLTM4MTgtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTM4NTYtXFx0XFx0XFx0Y3R4LVxcdTAwM2VhbF9lbnRyeS1cXHUwMDNlbG93ZXN0X3ZjbiA9IGNwdV90b19sZTY0KHN0b3BfdmNuKTtcXG5mcy9udGZzL2F0dHJpYi5jOjM4NTc6XFx0XFx0XFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XFxuZnMvbnRmcy9hdHRyaWIuYy0zODU4LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTQ1OTU9c3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDc1Mi1cXHRcXHR9XFxuZnMvbnRmcy9hdHRyaWIuYzo0NzUzOlxcdFxcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xcbmZzL250ZnMvYXR0cmliLmMtNDc1NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy00ODA4LVxcbmZzL250ZnMvYXR0cmliLmM6NDgwOTpcXHRlcnIgPSBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTtcXG5mcy9udGZzL2F0dHJpYi5jLTQ4MTAtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0LmM9MjU9aW50IG50ZnNfYXR0cmxpc3RfbmVlZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0LmMtNTMtXFxuZnMvbnRmcy9hdHRybGlzdC5jOjU0OmludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSlcXG5mcy9udGZzL2F0dHJsaXN0LmMtNTUte1xcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jPTEyMT1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0LmMtMjM1LVxcbmZzL250ZnMvYXR0cmxpc3QuYzoyMzY6XFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUobmkpO1xcbmZzL250ZnMvYXR0cmxpc3QuYy0yMzctXFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jPTI1Nz1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG4tLVxcbmZzL250ZnMvYXR0cmxpc3QuYy0zMDAtXFxuZnMvbnRmcy9hdHRybGlzdC5jOjMwMTpcXHRyZXR1cm4gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XFxuZnMvbnRmcy9hdHRybGlzdC5jLTMwMi19XFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0Lmg9MTc9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xcbmZzL250ZnMvYXR0cmxpc3QuaDoxODppbnQgbnRmc19hdHRybGlzdF91cGRhdGUoc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkpO1xcbmZzL250ZnMvYXR0cmxpc3QuaC0xOS1cXG4tLVxcbmZzL250ZnMvaW5kZXguYz0xMjM2PXN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTM0MC1cXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShjdHgtXFx1MDAzZWF0dHItXFx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKSkpIHtcXG5mcy9udGZzL2luZGV4LmM6MTM0MTpcXHRcXHRcXHRpZiAobnRmc19hdHRybGlzdF91cGRhdGUoY3R4LVxcdTAwM2ViYXNlX250ZnNfaW5vID9cXG5mcy9udGZzL2luZGV4LmMtMTM0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgY3R4LVxcdTAwM2ViYXNlX250ZnNfaW5vIDogY3R4LVxcdTAwM2VudGZzX2lubykpXFxuLS1cXG5mcy9udGZzL2lub2RlLmM9MzAzMT1pbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTMxMzktXFxuZnMvbnRmcy9pbm9kZS5jOjMxNDA6XFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUobmkpO1xcbmZzL250ZnMvaW5vZGUuYy0zMTQxLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNTozNy4zMzU2MjE2NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYwMDk3OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBBdHRyaWJ1dGUgTGlzdCBVcGRhdGUqKlxuXG5Pa2F5LCBzbyB0aGUgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBmdW5jdGlvbiwgaW50ZXJlc3RpbmcuIEl0J3MgdXNlZCBhbGwgb3ZlciB0aGUgTlRGUyBmaWxlc3lzdGVtIGNvZGUg4oCTIGBhdHRyaWIuY2AsIGBhdHRybGlzdC5jYCwgYGluZGV4LmNgLCBhbmQgYGlub2RlLmNgLiBUaGF0IG1lYW5zIGl0J3MgcHJldHR5IGZ1bmRhbWVudGFsIHRvIHRoZSB3YXkgTlRGUyBtYW5hZ2VzIGl0cyBhdHRyaWJ1dGVzLiBUaGlzIHBhdGNoLCBhaCwgaXQgYWRkcyBhIGNoZWNrIGZvciBgU0JfQUNUSVZFYCB3aXRoaW4gdGhlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgZnVuY3Rpb24uIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiwgZGVmaW5pdGVseSBjaGFuZ2luZyBob3cgdGhpcyB1cGRhdGUgb3BlcmF0aW9uIGJlaGF2ZXMgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBOb3csIHRoZSBjb250ZXh0IGlzIE5URlMsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGBOVEZTX0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdhaXQsIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IElzIGBOVEZTX1JXYCBhbHNvIHJlbGV2YW50PyBCZXN0IHRvIGRvdWJsZS1jaGVjayB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZSBhbmQgbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIGltcGFjdHMuIE5lZWQgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCAqYWxsKiByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjQxLjA5NTcyMjA5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNTkyNTA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjQxLjIyNzMyMjE2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzA0MjAwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipIdW50aW5nIERvd24gUmVhZC9Xcml0ZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHJlYWQvd3JpdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBmb3IgdGhlIE5URlMgZmlsZXN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgaXMgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSdkIGJlIHN1cnByaXNlZCBpZiBpdCB3YXNuJ3QgdGhlcmUuIExldCdzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGBSV2Agb3IgaXRzIGVxdWl2YWxlbnQgaXMgZGVmaW5lZCBhcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgYGNvbmZpZ2Agb3B0aW9uIG9yIHNvbWUgb3RoZXIgdmFyaWFibGUgdGhhdCBJIGNhbiB0d2VhaywgbWF5YmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19OVEZTX1JXYCwgb3IgYSByZWxhdGVkIHN5bWJvbC4gVGltZSB0byBjaGVjayBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjQzLjkzMTUyNDM5OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NjAyOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEZTX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTEyLVxcbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xcbmZzL250ZnMvS2NvbmZpZy0xNC1cXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NDQuMDM3MTM0MTk1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDU3NjIwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5URlMgUmVhZC9Xcml0ZSBTdXBwb3J0KipcblxuSG9sZCBvbiBhIHNlY29uZC4uLiBkaWRuJ3QgSSByZW1lbWJlciBzZWVpbmcgYW4gYE5URlNfUldgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNvbWV3aGVyZT8gSSB3YXMgY2VydGFpbiB3ZSBoYWQgYSBkZWRpY2F0ZWQgZmxhZyBmb3IgcmVhZC93cml0ZSBjYXBhYmlsaXR5LCBub3QganVzdCByZWFkLW9ubHkuIEJldHRlciB2ZXJpZnkgdGhhdC4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSBpdCdzIGRlZmluZWQgd2l0aGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0ncyBLY29uZmlnIGZpbGUuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbmZpcm0gYW5kIGVuc3VyZSBpdOKAmXMgZW5hYmxlZCwgdW5kZXIgdGhlIGBmcy9udGZzL0tjb25maWdgIHBhdGguIExldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZCByZWdhcmRpbmcgYFJXYCBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjM0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NDcuMDQyODk4NjgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3MjYwODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJXXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NDcuMTQzNjMyOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQ5Mjk5NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTlRGUyBXcml0ZSBJbXBsZW1lbnRhdGlvbiBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaW4gdGFja2xpbmcgdGhpcyB3cml0ZSBmdW5jdGlvbmFsaXR5IHF1ZXN0aW9uIGluIHRoZSBOVEZTIG1vZHVsZSBpcyBwcmV0dHkgY2xlYXIgdG8gbWU6IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoYXQgdGhlIHJlbGV2YW50IHNldHRpbmdzIHdpbGwgbGlrZWx5IGJlIGZvdW5kIGluIHRoZSBgZnMvbnRmcy9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIGFueXRoaW5nIHJlbGF0ZWQgdG8gXCJ3cml0ZVwiIGNhcGFiaWxpdHkuIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25maWd1cmF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIG9yIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBzaGVkIGxpZ2h0IG9uIGhvdyB3cml0ZSBzdXBwb3J0IGlzIGNvbnRyb2xsZWQgYW5kIGVuYWJsZWQgd2l0aGluIHRoZSBkcml2ZXIuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgZm9yIGV4YW1pbmluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgd2hpY2ggc2hvdWxkIHJldmVhbCB0aGUgY29uZGl0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIGhvdyB3cml0ZSBzdXBwb3J0IGlzIGNvbXBpbGVkIGludG8gdGhlIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjQ5Ljg5MjkzNTQ1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5MTE2OTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NDkuOTg4ODU2MjM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTQ3NTAyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqSW52ZXN0aWdhdGluZyBOVEZTIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkhtbSwgc28gbG9va2luZyBhdCBgZnMvbnRmcy9LY29uZmlnYCAqbm93KiwgYWxsIEkgc2VlIGFyZSBgTlRGU19GU2AsIGBOVEZTX0RFQlVHYCwgYW5kIGBOVEZTX0ZTX1BPU0lYX0FDTGAuIFRoYXQncyBpdD8gSSdtIHN1cmUgSSd2ZSBzZWVuIG1vcmUgb3B0aW9ucyByZWxhdGVkIHRvIE5URlMgYXQgc29tZSBwb2ludC4gSXQncyBib3RoZXJpbmcgbWUuLi4gV2FpdCwgSSB2YWd1ZWx5IHJlY2FsbCBhbiBgTlRGU19SV2Agb3B0aW9uIGluIHRoZSBwYXN0LCBtYXliZSBpbiBhbiBvbGRlciBrZXJuZWwgdmVyc2lvbidzIEtjb25maWc/IERpZCBpdCBnZXQgcmVtb3ZlZD8gVGhhdCdzIHdoYXQgSSB3YW50IHRvIGtub3cuIE9rYXksIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gYGZzL250ZnMvS2NvbmZpZ2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5LCBjb25maXJtIHdoYXQncyB0aGVyZSBhbmQgd2hhdCdzIG1pc3NpbmcsIGFuZCBzZWUgaWYgSSBjYW4gZmlndXJlIG91dCB3aGF0IGhhcHBlbmVkIHdpdGggdGhhdCBgTlRGU19SV2Agc2V0dGluZy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2ODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNTo1My4yMDM2MTAwNTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBOVEZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDU6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cXG4gICA4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICAxMTpcXHRcXHQgIG50ZnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBOVEZTX0RFQlVHXFxuICAxNDpcXHRcXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBOVEZTIGZpbGUgc3lzdGVtLCBzYXlcXG4gIDE4OlxcdFxcdCAgWSBoZXJlLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBiZVxcbiAgMTk6XFx0XFx0ICBwZXJmb3JtZWQgYnkgdGhlIGRyaXZlciBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzIHRvXFxuICAyMDpcXHRcXHQgIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbSBsb2cuICBOb3RlIHRoYXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZVxcbiAgMjE6XFx0XFx0ICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVG8gZW5hYmxlIHRoZW0sIHN1cHBseSB0aGUgb3B0aW9uIGRlYnVnX21zZ3M9MVxcbiAgMjI6XFx0XFx0ICBhdCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB3aGVuIGJvb3RpbmcgdGhlIGtlcm5lbCBvciBhcyBhbiBvcHRpb25cXG4gIDIzOlxcdFxcdCAgdG8gaW5zbW9kIHdoZW4gbG9hZGluZyB0aGUgbnRmcyBtb2R1bGUuICBPbmNlIHRoZSBkcml2ZXIgaXMgYWN0aXZlLFxcbiAgMjQ6XFx0XFx0ICB5b3UgY2FuIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYnkgZG9pbmcgKGFzIHJvb3QpOlxcbiAgMjU6XFx0XFx0ICBlY2hvIDEgXFx1MDAzZSAvcHJvYy9zeXMvZnMvbnRmcy1kZWJ1Z1xcbiAgMjY6XFx0XFx0ICBSZXBsYWNpbmcgdGhlIFxcXCIxXFxcIiB3aXRoIFxcXCIwXFxcIiB3b3VsZCBkaXNhYmxlIGRlYnVnIG1lc3NhZ2VzLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIElmIHlvdSBsZWF2ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgZGlzYWJsZWQsIHRoaXMgcmVzdWx0cyBpbiBsaXR0bGVcXG4gIDI5OlxcdFxcdCAgb3ZlcmhlYWQsIGJ1dCBlbmFibGluZyBkZWJ1ZyBtZXNzYWdlcyByZXN1bHRzIGluIHZlcnkgc2lnbmlmaWNhbnRcXG4gIDMwOlxcdFxcdCAgc2xvd2Rvd24gb2YgdGhlIHN5c3RlbS5cXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBXaGVuIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mXFxuICAzMzpcXHRcXHQgIGRlYnVnZ2luZyBtZXNzYWdlcyB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gTlRGU19GU1xcbiAgMzg6XFx0XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbiAgMzk6XFx0XFx0aGVscFxcbiAgNDA6XFx0XFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcXG4gIDQxOlxcdFxcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBBQ0wgc3VwcG9ydCBmb3IgbnRmcywgcHJvdmlkaW5nIGZ1bmN0aW9uYWwgcGFyaXR5XFxuICA0NDpcXHRcXHQgIHdpdGggbnRmczMgZHJpdmllci5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBOT1RFOiB0aGlzIGlzIGxpbnV4IG9ubHkgZmVhdHVyZS4gV2luZG93cyB3aWxsIGlnbm9yZSB0aGVzZSBBQ0xzLlxcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NTMuMjAzNzQ5NDQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODMxMDIyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVtb3ZhbCBvZiBOVEZTIFdyaXRlIFN1cHBvcnQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBOVEZTX1JXYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIG9uZSB0aGF0IGVuYWJsZWQgd3JpdGUgc3VwcG9ydCBmb3IgTlRGUywgd2FzIHJlbW92ZWQgYXQgc29tZSBwb2ludC4gSSB2YWd1ZWx5IHJlbWVtYmVyIGEgY29tbWl0IHJlbGF0ZWQgdG8gcmVtb3ZpbmcgTlRGUyB3cml0ZSBzdXBwb3J0LCBzb21ldGhpbmcgbGlrZSBgYTQ2MDQ0YTgwNzExYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIEkgdGhpbmsgdGhhdOKAmXMgd2hhdCBkaWQgaXQuIEp1c3QgdG8gY29uZmlybSwgbGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIE1ha2VmaWxlIGZvciB0aGUgTlRGUyBmaWxlIHN5c3RlbSBzaG91bGQgY29udGFpbiB0aGUga2V5IHRvIHVubG9jayB3aGF0IGhhcHBlbmVkLiBTbyBsZXQncyBnbyBjaGVjayB0aGUgYGZzL250ZnMvTWFrZWZpbGVgIHRvIHZlcmlmeSB0aGlzIHRoZW9yeSwgYW5kIGNvbmZpcm0gd2hhdCB0aGUgY29tbWl0IGRpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcxMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjU6NTYuNTg2ODU3Njc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLSQoQ09ORklHX05URlNfRlMpICs9IG50ZnMub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRudGZzLXkgOj0gYW9wcy5vIGF0dHJpYi5vIGNvbGxhdGUubyBkaXIubyBmaWxlLm8gaW5kZXgubyBpbm9kZS5vIFxcXFxcXG4gICA2OlxcdFxcdCAgbWZ0Lm8gbXN0Lm8gbmFtZWkubyBydW5saXN0Lm8gc3VwZXIubyB1bmlzdHIubyBhdHRybGlzdC5vIGVhLm8gXFxcXFxcbiAgIDc6XFx0XFx0ICB1cGNhc2UubyBiaXRtYXAubyBsY25hbGxvYy5vIGxvZ2ZpbGUubyByZXBhcnNlLm8gY29tcHJlc3MubyBcXFxcXFxuICAgODpcXHRcXHQgIGlvbWFwLm8gZGVidWcubyBzeXNjdGwubyBvYmplY3RfaWQubyBiZGV2LWlvLm9cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y2NmbGFncy0kKENPTkZJR19OVEZTX0RFQlVHKSArPSAtRERFQlVHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI1OjU2LjU4Njk5MjE3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDkxNjUwOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5URlMgS2VybmVsIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgTlRGU19GU2AgY29uZmlnIG9wdGlvbiDigJMgbG9va3MgbGlrZSB0aGF0J3MgdGhlIGtleS4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmN0aW9uIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAuIERlZmluaXRlbHkgc2VlbXMgcmVhY2hhYmxlIGlmIEknbSBtb3VudGluZyBhbiBOVEZTIGZpbGVzeXN0ZW0gYW5kIHBva2luZyBhcm91bmQsIGRvaW5nIHNvbWUgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIHRyaWdnZXIgaXQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IG9wZXJhdGlvbnMgKnNwZWNpZmljYWxseSogdHJpZ2dlciBgbnRmc19hdHRybGlzdF91cGRhdGVgP1xuXG5Pa2F5LCBkaWdnaW5nIGlu4oCmIGl0J3Mgd2hlbiB0aGUgYXR0cmlidXRlIGxpc3QgbmVlZHMgYSByZWZyZXNoLCBzbyBhZGRpbmcsIHJlbW92aW5nLCBvciByZXNpemluZyBhdHRyaWJ1dGVzLiBUaGF0IG1ha2VzIHNlbnNlLiBOb3csIHdhc24ndCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgd3JpdGUgc3VwcG9ydCBiZWluZyByZW1vdmVkPyBPciB3YXMgdGhhdCBqdXN0IGZvciBhIHNwZWNpZmljIHZlcnNpb24/IEhtbSwgKmNoZWNrcyBmaWxlcyrigKYgYGFvcHMuY2AsIGBmaWxlLmNgLCBhbmQgYGlub2RlLmNgIGFyZSBhbGwgaGVyZS4gU28sIHRoZSBiYXNlIGZ1bmN0aW9uYWxpdHkgaXMgc3RpbGwgdGhlcmUuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiB3cml0ZSBzdXBwb3J0ICppcyogYWN0dWFsbHkgZ29uZSwgb3IgaWYgdGhpcyBpcyBhbiBpc3N1ZSBvZiBkZWdyZWUuXG5cbldhaXQgYSBzZWNvbmTigKYgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpcyBkaXJlY3RseSBjYWxsZWQgYnkgYG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkYCwgYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gLCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCwgYW5kIGBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplYC4gVGhvc2UgYXJlIGFsbCwgaWYgSSdtIHJlbWVtYmVyaW5nIGNvcnJlY3RseSwgd3JpdGUgb3BlcmF0aW9ucy4gSWYgd3JpdGUgc3VwcG9ydCAqd2FzKiByZW1vdmVkLCBob3cgYXJlIHRob3NlIGZ1bmN0aW9ucyBldmVuIGNhbGxhYmxlPyBTb21ldGhpbmcgZG9lc24ndCBhZGQgdXAuIEJlc3QgYmV0IGlzIHRvIGNoZWNrIHRoZSBtb3VudCBvcHRpb25zLiBJJ2xsIHBlZWsgYXQgYGZzL250ZnMvc3VwZXIuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYSByZWFkLXdyaXRlIG9wdGlvbiBhdmFpbGFibGUsIG9yIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgYXMgcmVhZC1vbmx5LiBUaGF0IHNob3VsZCBjbGVhciB0aGluZ3MgdXAgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjAxLjY3ODY0NjY0MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1ODk2NjU0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNU19SRE9OTFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjowMi4xMzQ1NjI1NjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NjEyMTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgU0JfUkRPTkxZYCoqXG5cbk9rYXksIHNvIEknbSBqdW1waW5nIHJpZ2h0IGludG8gY2hlY2tpbmcgYFNCX1JET05MWWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBmaWxlIHN5c3RlbSBmbGFncy4gR290dGEgbWFrZSBzdXJlIGl0J3MgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkuXCIgSSdtIGV4cGVjdGluZyB0aGlzIGlzIGFib3V0IGVuc3VyaW5nIHdlJ3JlIGFkaGVyaW5nIHRvIHJlYWQtb25seSBzZW1hbnRpY3MuIElmIGEgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCByZWFkLW9ubHksIHdlIGFic29sdXRlbHkgKmNhbm5vdCogYWxsb3cgd3JpdGUgb3BlcmF0aW9ucywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaXMgYWNjb3VudGluZyBmb3IgdGhpcy4gSSBuZWVkIHRvIGJlIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaGVyZSwgcGVybWlzc2lvbiBpc3N1ZXMsIGFuZCBob3cgdGhlIHByb2dyYW0gaXMgaGFuZGxpbmcgdmFyaW91cyBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgYW55IHBsYWNlcyB3aGVyZSB3cml0ZXMgbWlnaHQgYWNjaWRlbnRhbGx5IGJlIGF0dGVtcHRlZC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGNoZWNrIGZvciBzdWJ0bGUgZWRnZSBjYXNlcyB3aGVyZSByZWFkLW9ubHkgYmVoYXZpb3IgbWlnaHQgbm90IGJlIGVuZm9yY2VkIGFzIHN0cmljdGx5IGFzIGl0IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgxMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjA1LjY4MDY4NjcxMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5OTI0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0JfUkRPTkxZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjY1PXN0YXRpYyBpbnQgbnRmc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjg0LVxcdCAqL1xcbmZzL250ZnMvc3VwZXIuYzoyODU6XFx0aWYgKHNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgIShmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuZnMvbnRmcy9zdXBlci5jLTI4Ni1cXHRcXHRzdGF0aWMgY29uc3QgY2hhciAqZXMgPSBcXFwiLiAgQ2Fubm90IHJlbW91bnQgcmVhZC13cml0ZS5cXFwiO1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTMxMi1cXHRcXHR9XFxuZnMvbnRmcy9zdXBlci5jOjMxMzpcXHR9IGVsc2UgaWYgKCFzYl9yZG9ubHkoc2IpIFxcdTAwMjZcXHUwMDI2IChmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuZnMvbnRmcy9zdXBlci5jLTMxNC1cXHRcXHQvKiBSZW1vdW50aW5nIHJlYWQtb25seS4gKi9cXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0zMzM9dm9pZCBudGZzX2hhbmRsZV9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTM0MC1cXHRpZiAodm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MzQxOlxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMzQyLVxcdFxcdHByX2NyaXQoXFxcIihkZXZpY2UgJXMpOiBGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHlcXFxcblxcXCIsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MTM5OT1zdGF0aWMgYm9vbCBsb2FkX3N5c3RlbV9maWxlcyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNDE2LVxcbmZzL250ZnMvc3VwZXIuYzoxNDE3OlxcdFxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTQxOC1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXMuICBNb3VudGluZyByZWFkLW9ubHklc1xcXCIsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTU0Mi1cXHRcXHRpZiAoIXNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgdm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MTU0MzpcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuZnMvbnRmcy9zdXBlci5jLTE1NDQtXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIiVzLiAgTW91bnRpbmcgcmVhZC1vbmx5JXNcXFwiLCBlczEsIGVzMik7XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTU1OS1cXHRcXHRpZiAoIXNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgdm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MTU2MDpcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuZnMvbnRmcy9zdXBlci5jLTE1NjEtXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkZhaWxlZCB0byBsb2FkIExvZ0ZpbGUuIE1vdW50aW5nIHJlYWQtb25seS5cXFwiKTtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNTkxLVxcdFxcdGlmICghc2JfcmRvbmx5KHNiKSBcXHUwMDI2XFx1MDAyNiB2b2wtXFx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xcbmZzL250ZnMvc3VwZXIuYzoxNTkyOlxcdFxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTU5My1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXMuICBNb3VudGluZyByZWFkLW9ubHklc1xcXCIsIGVzMSwgZXMyKTtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNjA2LVxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCIlcy4gIE1vdW50aW5nIHJlYWQtb25seSVzXFxcIiwgZXMxLCBlczIpO1xcbmZzL250ZnMvc3VwZXIuYzoxNjA3OlxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTYwOC1cXHRcXHROVm9sU2V0RXJyb3JzKHZvbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjA1Ljc3MTcyMzExOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU4MDk3NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5URlMgV3JpdGUgU3VwcG9ydDogQSBLZXJuZWwgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggTlRGUyBhbmQgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWFkL3dyaXRlIGNhcGFiaWxpdGllcy4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQgKmNhbiogYmUgbW91bnRlZCByZWFkLXdyaXRlLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LiBCdXQgbGV0J3MgdmVyaWZ5IHRoaXMgdGhvcm91Z2hseTsgSSBuZWVkIHRvIGdldCB0aGlzIHJpZ2h0LiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBmcy9udGZzL0tjb25maWdgLiBSaWdodCwganVzdCBjb25maXJtaW5nLCBpdCdzIGp1c3QgYE5URlNfRlNgIHRoYXQncyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGl0ZW0/IE9rYXksIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBIb2xkIG9uLi4uIGRpZCBJIHJlYWQgc29tZXRoaW5nIGFib3V0IGBOVEZTX1JXYCBiZWluZyBkZXByZWNhdGVkIG9yIHJlbW92ZWQsIG1heWJlIGluIDIwMjQ/IFRoYXQncyBjb25jZXJuaW5nLCBsZXQncyBzZWUgd2hhdCB0aGUgY29tbWl0IGhpc3Rvcnkgc2F5cywgb3IgYXQgbGVhc3Qgc2VhcmNoIHRoZSBjb25maWcgZmlsZSBmb3IgYSBtZW50aW9uLiBJIGNhbid0IHVzZSBgZ2l0IGxvZ2AgaGVyZSwgYnV0IEkgY2FuIHVzZSBncmVwLCB3aGljaCBJJ3ZlIHVzZWQgYWxyZWFkeS4gT2gsIHJpZ2h0LCBJICpkaWQqIGdyZXAgZm9yIGBOVEZTX1JXYCwgYW5kIHRoZSByZXN1bHRzIHdlcmUgZW1wdHkuIFRoYXQncyBpbnRlcmVzdGluZywgc28gZWl0aGVyIGBOVEZTX0ZTYCBub3cgaW1wbGljaXRseSBpbmNsdWRlcyB3cml0ZSBzdXBwb3J0LCBvciB3cml0ZSBzdXBwb3J0IHdhcyBjb21wbGV0ZWx5IGRyb3BwZWQgYXQgc29tZSBwb2ludC4gSXQncyB0aW1lIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIhIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgd2hldGhlciBJIGNhbiB0cmFjZSBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyB3cml0ZSBvcGVyYXRpb25zLiBMZXQgbWUgc2VlIGlmIEkgY2FuIGZpbmQgaG93IHRoZSB1cGRhdGUgb2YgdGhlIGF0dHJpYnV0ZXMgbGlzdHMgYXJlIGhhbmRsZWQgYnkgc2VhcmNoaW5nIGlmIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgaXMgcmVhY2hhYmxlIHNvbWV3aGVyZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgd3JpdGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjoxMC4yMjk4MjIzOTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODUxNTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2F0dHJsaXN0X3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTM1NDE9c3RhdGljIGludCBudGZzX2F0dHJfdXBkYXRlX21ldGEoc3RydWN0IGF0dHJfcmVjb3JkICphLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTM1OTAtXFxuZnMvbnRmcy9hdHRyaWIuYzozNTkxOlxcdFxcdFxcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xcbmZzL250ZnMvYXR0cmliLmMtMzU5Mi1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz0zNjgwPWludCBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgZnJvbV92Y24pXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTM4MTYtXFx0XFx0XFx0XFx0fVxcbmZzL250ZnMvYXR0cmliLmM6MzgxNzpcXHRcXHRcXHRcXHRpZiAobnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSkpXFxuZnMvbnRmcy9hdHRyaWIuYy0zODE4LVxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0zODU2LVxcdFxcdFxcdGN0eC1cXHUwMDNlYWxfZW50cnktXFx1MDAzZWxvd2VzdF92Y24gPSBjcHVfdG9fbGU2NChzdG9wX3Zjbik7XFxuZnMvbnRmcy9hdHRyaWIuYzozODU3OlxcdFxcdFxcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xcbmZzL250ZnMvYXR0cmliLmMtMzg1OC1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz00NTk1PXN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpemUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTQ3NTItXFx0XFx0fVxcbmZzL250ZnMvYXR0cmliLmM6NDc1MzpcXHRcXHRlcnIgPSBudGZzX2F0dHJsaXN0X3VwZGF0ZShiYXNlX25pKTtcXG5mcy9udGZzL2F0dHJpYi5jLTQ3NTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDgwOC1cXG5mcy9udGZzL2F0dHJpYi5jOjQ4MDk6XFx0ZXJyID0gbnRmc19hdHRybGlzdF91cGRhdGUoYmFzZV9uaSk7XFxuZnMvbnRmcy9hdHRyaWIuYy00ODEwLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jPTI1PWludCBudGZzX2F0dHJsaXN0X25lZWQoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jLTUzLVxcbmZzL250ZnMvYXR0cmxpc3QuYzo1NDppbnQgbnRmc19hdHRybGlzdF91cGRhdGUoc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkpXFxuZnMvbnRmcy9hdHRybGlzdC5jLTU1LXtcXG4tLVxcbmZzL250ZnMvYXR0cmxpc3QuYz0xMjE9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyKVxcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jLTIzNS1cXG5mcy9udGZzL2F0dHJsaXN0LmM6MjM2OlxcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKG5pKTtcXG5mcy9udGZzL2F0dHJsaXN0LmMtMjM3LVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmxpc3QuYz0yNTc9aW50IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0LmMtMzAwLVxcbmZzL250ZnMvYXR0cmxpc3QuYzozMDE6XFx0cmV0dXJuIG50ZnNfYXR0cmxpc3RfdXBkYXRlKGJhc2VfbmkpO1xcbmZzL250ZnMvYXR0cmxpc3QuYy0zMDItfVxcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5oPTE3PWludCBudGZzX2F0dHJsaXN0X2VudHJ5X3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KTtcXG5mcy9udGZzL2F0dHJsaXN0Lmg6MTg6aW50IG50ZnNfYXR0cmxpc3RfdXBkYXRlKHN0cnVjdCBudGZzX2lub2RlICpiYXNlX25pKTtcXG5mcy9udGZzL2F0dHJsaXN0LmgtMTktXFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTIzNj1zdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEzNDAtXFx0XFx0XFx0XFx0bGUzMl90b19jcHUoY3R4LVxcdTAwM2VhdHRyLVxcdTAwM2VkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCkpKSB7XFxuZnMvbnRmcy9pbmRleC5jOjEzNDE6XFx0XFx0XFx0aWYgKG50ZnNfYXR0cmxpc3RfdXBkYXRlKGN0eC1cXHUwMDNlYmFzZV9udGZzX2lubyA/XFxuZnMvbnRmcy9pbmRleC5jLTEzNDItXFx0XFx0XFx0XFx0XFx0XFx0IGN0eC1cXHUwMDNlYmFzZV9udGZzX2lubyA6IGN0eC1cXHUwMDNlbnRmc19pbm8pKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jPTMwMzE9aW50IG50ZnNfaW5vZGVfYWRkX2F0dHJsaXN0KHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0zMTM5LVxcbmZzL250ZnMvaW5vZGUuYzozMTQwOlxcdGVyciA9IG50ZnNfYXR0cmxpc3RfdXBkYXRlKG5pKTtcXG5mcy9udGZzL2lub2RlLmMtMzE0MS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6MTAuMzM4MzQzNzQ5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzgwNzQ5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKlRyYWNpbmcgdGhlIE5URlMgQXR0cmlidXRlIFVwZGF0ZSBQYXRoKipcblxuSG1tLCBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgbnRmc19hdHRybGlzdF91cGRhdGVgIGdldHMgaW52b2tlZCBkaXJlY3RseSBmcm9tIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSAqdGhhdCogZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20uIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCB3aHkgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpcyBiZWluZyB0cmlnZ2VyZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzIHNob3VsZCBoZWxwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjEzLjQ3NjQyMzE4M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNjYyMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTM1NDE9c3RhdGljIGludCBudGZzX2F0dHJfdXBkYXRlX21ldGEoc3RydWN0IGF0dHJfcmVjb3JkICphLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTM2NjctLypcXG5mcy9udGZzL2F0dHJpYi5jOjM2Njg6ICogbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzIC0gdXBkYXRlIG1hcHBpbmcgcGFpcnMgZm9yIG50ZnMgYXR0cmlidXRlXFxuZnMvbnRmcy9hdHRyaWIuYy0zNjY5LSAqIEBuaTpcXHRcXHRub24tcmVzaWRlbnQgbnRmcyBpbm9kZSBmb3Igd2hpY2ggd2UgbmVlZCB1cGRhdGVcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMzY3OS0gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjM2ODA6aW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcXG5mcy9udGZzL2F0dHJpYi5jLTM2ODEte1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz00MTYyPXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmsoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDI2Mi1cXHRcXHQvKiBXcml0ZSBtYXBwaW5nIHBhaXJzIGZvciBuZXcgcnVubGlzdC4gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjQyNjM6XFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwIC8qZmlyc3RfZnJlZV92Y24qLyk7XFxuZnMvbnRmcy9hdHRyaWIuYy00MjY0LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NDMyOT1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTQ1MDEtXFx0XFx0bmktXFx1MDAzZWFsbG9jYXRlZF9zaXplID0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgZmlyc3RfZnJlZV92Y24pO1xcbmZzL250ZnMvYXR0cmliLmM6NDUwMjpcXHRcXHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbmZzL250ZnMvYXR0cmliLmMtNDUwMy1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTQ1NjUtXFx0XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG5mcy9udGZzL2F0dHJpYi5jOjQ1NjY6XFx0XFx0aWYgKG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCkpXFxuZnMvbnRmcy9hdHRyaWIuYy00NTY3LVxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBvbGQgbWFwcGluZyBwYWlyc1xcXCIpO1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz00OTcwPWludCBudGZzX2F0dHJfbWFwX2NsdXN0ZXIoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuX3N0YXJ0LCBzNjQgKmxjbl9zdGFydCxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNTA5NS1cXHRcXHRudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoY3R4KTtcXG5mcy9udGZzL2F0dHJpYi5jOjUwOTY6XFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcXG5mcy9udGZzL2F0dHJpYi5jLTUwOTctXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz01MzAxPWludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTUzNTEtXFx0XFx0bmktXFx1MDAzZWluaXRpYWxpemVkX3NpemUgKz0gbnRmc19jbHVzdGVyX3RvX2J5dGVzKHZvbCwgbGVuKTtcXG5mcy9udGZzL2F0dHJpYi5jOjUzNTI6XFx0cmV0ID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcXG5mcy9udGZzL2F0dHJpYi5jLTUzNTMtXFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz01Mzc5PWludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHN0YXJ0X3ZjbiwgczY0IGxlbilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNTQzNi1cXHRpZiAobmktXFx1MDAzZWFsbG9jYXRlZF9zaXplIFxcdTAwM2UgMCkge1xcbmZzL250ZnMvYXR0cmliLmM6NTQzNzpcXHRcXHRyZXQgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbmZzL250ZnMvYXR0cmliLmMtNTQzOC1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTU0NzQ9aW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBzdGFydF92Y24sIHM2NCBsZW4pXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTU1MTQtXFxuZnMvbnRmcy9hdHRyaWIuYzo1NTE1OlxcdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuZnMvbnRmcy9hdHRyaWIuYy01NTE2LVxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NTUzMT1pbnQgbnRmc19hdHRyX2ZhbGxvY2F0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBzdGFydCwgbG9mZl90IGJ5dGVfbGVuLCBib29sIGtlZXBfc2l6ZSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNTY4Mi1cXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG5mcy9udGZzL2F0dHJpYi5jOjU2ODM6XFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcXG5mcy9udGZzL2F0dHJpYi5jLTU2ODQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmg9MTMyPWludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVjb3JkX2FkZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUzMiB0eXBlLFxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuaC0xMzQtXFx0XFx0X19sZTE2IGZsYWdzKTtcXG5mcy9udGZzL2F0dHJpYi5oOjEzNTppbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKTtcXG5mcy9udGZzL2F0dHJpYi5oLTEzNi1zdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX2F0dHJfdmNuX3RvX3JsKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbiwgczY0ICpsY24pO1xcbi0tXFxuZnMvbnRmcy9jb21wcmVzcy5jPTEyNzQ9c3RhdGljIGludCBudGZzX3dyaXRlX2NiKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4tLVxcbmZzL250ZnMvY29tcHJlc3MuYy0xNDA3LVxcbmZzL250ZnMvY29tcHJlc3MuYzoxNDA4OlxcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuZnMvbnRmcy9jb21wcmVzcy5jLTE0MDktXFx0dXBfd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbi0tXFxuZnMvbnRmcy9maWxlLmM9Nzg9c3RhdGljIGludCBudGZzX3RyaW1fcHJlYWxsb2Moc3RydWN0IGlub2RlICp2aSlcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTExMy1cXHRcXHRcXHRuaS1cXHUwMDNlYWxsb2NhdGVkX3NpemUgPSBudGZzX2NsdXN0ZXJfdG9fYnl0ZXModm9sLCB2Y25fdHIpO1xcbmZzL250ZnMvZmlsZS5jOjExNDpcXHRcXHRcXHRlcnIgPSBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnMobmksIDApO1xcbmZzL250ZnMvZmlsZS5jLTExNS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jPTI3MjM9aW50IF9fbnRmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpLCBpbnQgc3luYylcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0yNzYyLVxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbmZzL250ZnMvaW5vZGUuYzoyNzYzOlxcdFxcdGVyciA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuZnMvbnRmcy9pbm9kZS5jLTI3NjQtXFx0XFx0aWYgKCFlcnIpXFxuLS1cXG5mcy9udGZzL21mdC5jPTEwMDc9c3RhdGljIGludCBudGZzX21mdF9hdHRyX2V4dGVuZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL21mdC5jLTEwMjctXFxuZnMvbnRmcy9tZnQuYzoxMDI4OlxcdHJldCA9IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhuaSwgMCk7XFxuZnMvbnRmcy9tZnQuYy0xMDI5LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9udGZzL21mdC5jPTEwNTM9c3RhdGljIGludCBudGZzX21mdF9iaXRtYXBfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbi0tXFxuZnMvbnRmcy9tZnQuYy0xMzI2LVxcdFxcdG1hcmtfbWZ0X3JlY29yZF9kaXJ0eShjdHgtXFx1MDAzZW50ZnNfaW5vKTtcXG5mcy9udGZzL21mdC5jOjEzMjc6XFx0fSBlbHNlIGlmIChzdGF0dXMubXBfZXh0ZW5kZWQgXFx1MDAyNlxcdTAwMjYgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG1mdGJtcF9uaSwgMCkpIHtcXG5mcy9udGZzL21mdC5jLTEzMjgtXFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiRmFpbGVkIHRvIHJlc3RvcmUgbWFwcGluZyBwYWlycy4lc1xcXCIsIGVzKTtcXG4tLVxcbmZzL250ZnMvbWZ0LmM9MTQ4Nj1zdGF0aWMgaW50IG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbi0tXFxuZnMvbnRmcy9tZnQuYy0xNzM4LVxcdH1cXG5mcy9udGZzL21mdC5jOjE3Mzk6XFx0aWYgKG1wX2V4dGVuZGVkIFxcdTAwMjZcXHUwMDI2IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhtZnRfbmksIDApKSB7XFxuZnMvbnRmcy9tZnQuYy0xNzQwLVxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYiwgXFxcIkZhaWxlZCB0byByZXN0b3JlIG1hcHBpbmcgcGFpcnMuJXNcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjoxMy42MjkwOTE5NjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMjkzMTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTlRGUyBEcml2ZXIgV3JpdGUgQ2FwYWJpbGl0aWVzKipcblxuT2theSwgbGV0J3Mgc2VlLi4uIHNvIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgIGlzIGNhbGxlZCBmcm9tIGBfX250ZnNfd3JpdGVfaW5vZGVgLCB3aGljaCBpcyBpdHNlbGYgdHJpZ2dlcmVkIGR1cmluZyBpbm9kZSB3cml0aW5nLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzICp3cml0ZSogb3BlcmF0aW9ucyBhcmUgaW5kZWVkIGhhbmRsZWQgd2l0aGluIHRoaXMgYGZzL250ZnMvYCBkcml2ZXIuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gbWl4IHRoaW5ncyB1cC4gQW0gSSB0aGlua2luZyBvZiB0aGUgb3JpZ2luYWwgYGZzL250ZnMvYCBkcml2ZXIsIG9yIGFtIEkgY29uZmxhdGluZyBpdCB3aXRoIHRoYXQgbmV3ZXIgYGZzL250ZnMzL2AgZHJpdmVyIGRldmVsb3BlZCBieSBQYXJhZ29uPyBUaGUgb2xkIGBmcy9udGZzL2AgaXMgdGhlIEFudG9uIEFsdGFwYXJtYWtvdiB2ZXJzaW9uLCByaWdodD8gUmlnaHQuIFRoYXQgdmVyc2lvbiAqZGlkKiBoYXZlIHdyaXRlIHN1cHBvcnQsIGJ1dCBpdCB3YXMgaGVhdmlseSByZXN0cmljdGVkLCB3YXNuJ3QgaXQ/IExpbWl0ZWQgdG8gb3ZlcndyaXRpbmcgZXhpc3RpbmcgZGF0YSB3aXRob3V0IHJlc2l6aW5nIG9yIHdoYXRub3QuIEp1c3QgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpbiBgZnMvbnRmcy9maWxlLmNgIHRvIHNlZSBpZiB0aGVyZSdzIGEgZnVuY3Rpb24gbGlrZSBgbnRmc19maWxlX3dyaXRlX2l0ZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBqdXN0IHRvIGNvbmZpcm0gbXkgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjoxNy45MzIwMjY1MjhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDExMjkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2ZpbGVfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2ZpbGUuYz00OTU9c3RhdGljIHNzaXplX3QgbnRmc19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTUzNy1cXG5mcy9udGZzL2ZpbGUuYzo1Mzg6c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZnMvbnRmcy9maWxlLmMtNTM5LXtcXG4tLVxcbmZzL250ZnMvZmlsZS5jPTExNDY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudGZzX2ZpbGVfb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTE0OC1cXHQucmVhZF9pdGVyXFx0PSBudGZzX2ZpbGVfcmVhZF9pdGVyLFxcbmZzL250ZnMvZmlsZS5jOjExNDk6XFx0LndyaXRlX2l0ZXJcXHQ9IG50ZnNfZmlsZV93cml0ZV9pdGVyLFxcbmZzL250ZnMvZmlsZS5jLTExNTAtXFx0LmZzeW5jXFx0XFx0PSBudGZzX2ZpbGVfZnN5bmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjE4LjAzNjE0Mzg4NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTgwMzM0OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIE5URlMgRmlsZXN5c3RlbSBIaXN0b3J5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHRyeWluZyB0byByZW1lbWJlci4uLiB3YXNuJ3QgdGhlcmUgYW4gYG50ZnNfZmlsZV9haW9fd3JpdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGluIHRoZSBsZWdhY3kgYGZzL250ZnMvYCBkcml2ZXI/IExldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4gUmlnaHQsIHJpZ2h0LCBsZXQncyBzZWUgd2hlbiB0aGF0IHdhcyBpbXBsZW1lbnRlZC4gQWgsIGhlcmUgd2UgYXJlOiBcIk1vbiBKdWwgNiAwNDoyNToyNCAyMDI2XCIuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgYSB0aW1lIGZyYW1lIGF0IGxlYXN0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSBpZiBgbnRmc19maWxlX3dyaXRlX2l0ZXJgIGV4aXN0cyDigJMgSSdtIHByZXR0eSBzdXJlIEkgc2F3IHRoYXQgb25lIHJlY2VudGx5IGluIGBmcy9udGZzL2ZpbGUuY2AuIFllcCwgdGhlcmUgaXQgaXMuIE9rYXksIHRoYXQncyB3aGF0IEkgdGhvdWdodC5cblxuQnV0LCBhIG5hZ2dpbmcgcXVlc3Rpb24gcmVtYWlucy4gV2FzIGBmcy9udGZzL2AgYWN0dWFsbHkganVzdCBgbnRmczNgIHJlbmFtZWQgYXQgc29tZSBwb2ludD8gTXkgbWluZCBpcyBwbGF5aW5nIHRyaWNrcyBvbiBtZSBzb21ldGltZXMgd2l0aCBhbGwgdGhlc2UgcmV2aXNpb25zLiBJbiBtb3JlIHJlY2VudCBrZXJuZWxzLCB0aGUgZGlyZWN0b3JpZXMgYXJlIGZsdWlkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IGdvaW5nIGRvd24gdGhlIHdyb25nIHRyYWNrLiBEaWQgdGhleSByZW1vdmUgYGZzL250ZnMvYCBhbmQga2VlcCBgZnMvbnRmczMvYCwgb3IgbWF5YmUgcmVuYW1lIGBmcy9udGZzMy9gIHRvIGBmcy9udGZzL2A/IEkgcmVhbGx5IG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ28gYmFjayB0byB0aGUgc291cmNlLiBMZXQgbWUganVzdCBvcGVuIHVwIGBmcy9udGZzL0tjb25maWdgIG9uZSBtb3JlIHRpbWUgYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlIEknbSBvcmllbnRlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjY3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjIyLjYxNjQ4MDgzNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NDgyMTc2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQYXJhZ29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6MjIuNzM0OTc2ODZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcyMzkyODg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBOVEZTIFN1cGVyYmxvY2sgQXV0aG9yc2hpcCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdobydzIGJlZW4gd29ya2luZyBvbiB0aGUgTlRGUyBzdXBlcmJsb2NrIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byB0aGUgc291cmNlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgZnMvbnRmcy9zdXBlci5jYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3VwZXJibG9jaydzIGltcGxlbWVudGF0aW9uLCBhbmQgaG9wZWZ1bGx5LCBJIGNhbiBnbGVhbiBzb21lIGF1dGhvcnNoaXAgZGV0YWlscyBkaXJlY3RseSBmcm9tIHRoZSBjb21tZW50cyBvciByZXZpc2lvbiBoaXN0b3J5IHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIEl0J3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aG8ncyBjb250cmlidXRlZCBhbmQgd2hlbi4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgcm91dGluZSBpbnZlc3RpZ2F0aW9uIGZvciBtZSwgYmVpbmcgYSBzZWFzb25lZCBkZXZlbG9wZXIgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjI1LjQ1ODkwNzgxOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3Mjc5MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1PRFVMRV9BVVRIT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvc3VwZXIuYz0yNzA1PW1vZHVsZV9leGl0KGV4aXRfbnRmc19mcyk7XFxuZnMvbnRmcy9zdXBlci5jLTI3MDYtXFxuZnMvbnRmcy9zdXBlci5jOjI3MDc6TU9EVUxFX0FVVEhPUihcXFwiQW50b24gQWx0YXBhcm1ha292IFxcdTAwM2NhbnRvbkB0dXhlcmEuY29tXFx1MDAzZVxcXCIpOyAvKiBPcmlnaW5hbCByZWFkLW9ubHkgTlRGUyBkcml2ZXIgKi9cXG5mcy9udGZzL3N1cGVyLmM6MjcwODpNT0RVTEVfQVVUSE9SKFxcXCJOYW1qYWUgSmVvbiBcXHUwMDNjbGlua2luamVvbkBrZXJuZWwub3JnXFx1MDAzZVxcXCIpOyAvKiBBZGQgd3JpdGUsIGlvbWFwIGFuZCB2YXJpb3VzIGZlYXR1cmVzICovXFxuZnMvbnRmcy9zdXBlci5jLTI3MDktTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJOVEZTIHJlYWQtd3JpdGUgZmlsZXN5c3RlbSBkcml2ZXJcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6MjUuNjM2MTk3NDAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDA5ODEwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTlRGUyBGaWxlc3lzdGVtIFVwZGF0ZSoqXG5cbk9rYXksIHNvIE5hbWphZSBKZW9uJ3MgYmVlbiBidXN5ISBJdCBsb29rcyBsaWtlIGhlJ3MgYWRkZWQgd3JpdGUsIGlvbWFwLCBhbmQgYSBidW5jaCBvZiBvdGhlciBmZWF0dXJlcyB0byB0aGUgYGZzL250ZnMvYCBkcml2ZXIuIEhtbSwgSSB3b25kZXIgaWYgdGhpcyBpcyBhIGNvbXBsZXRlIG92ZXJoYXVsLCBhIGJyYW5kIG5ldyBkcml2ZXIsIG9yIGp1c3QgYSBzaWduaWZpY2FudCB1cGRhdGUgdG8gdGhlIGV4aXN0aW5nIG9uZS4gR2l2ZW4gSmVvbidzIHdvcmsgb24gYGtzbWJkYCBhbmQgYGV4ZmF0YCwgaXQncyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgcG9zc2liaWxpdHkgdGhhdCBoZSdzIGJlZW4gcmV2aXNpdGluZyBhbmQgaW1wcm92aW5nIHRoZSBgZnMvbnRmcy9gIGNvZGViYXNlIHJlY2VudGx5LiBSaWdodCwgdGhlIGNvbmZpZyBvcHRpb24gaXMgYE5URlNfRlNgLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBtb2RpZnlpbmcgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCB3aXRoaW4gYGZzL250ZnMvYXR0cmxpc3QuY2AuIFRoZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQ6XG5cbmBgYGNcblx0aWYgKCEoVkZTX0koYmFzZV9uaSktXHUwMDNlaV9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9BQ1RJVkUpKVxuXHRcdHJldHVybiAtRUlPO1xuYGBgXG5cbkFoLCBJIHNlZS4gVGhpcyBpcyBkZXNpZ25lZCB0byBhZGRyZXNzIGEgcG90ZW50aWFsIGRlYWRsb2NrIHNpdHVhdGlvbi4gVGhlIGNoZWNrIGhlcmUgZW5zdXJlcyB0aGUgc3VwZXJibG9jayBpcyBzdGlsbCBhY3RpdmUgYmVmb3JlIHByb2NlZWRpbmcuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoKWAgY2xlYXJzIHRoZSBgU0JfQUNUSVZFYCBmbGFnIGJlZm9yZSBpbm9kZXMgYXJlIGV2aWN0ZWQgZnJvbSB0aGUgY2FjaGUuIFNvLCBpZiBgbnRmc19hdHRybGlzdF91cGRhdGVgIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgZXZpY3Rpb24gcHJvY2VzcyBpdHNlbGYgKHBlcmhhcHMgdGhyb3VnaCBgbnRmc19ldmljdF9pbm9kZWAsIHdoaWNoIGxlYWRzIHRvIGBudGZzX2NsZWFyX2lub2RlYCwgYW5kIHRoZW4uLi4pLCBpdCBjYW4gZW5jb3VudGVyIGEgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gbWlnaHQgZW5kIHVwIHdhaXRpbmcgb24gYW4gYXR0cmlidXRlIGxpc3QgaW5vZGUgdGhhdCdzIGFscmVhZHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQsIGkuZS4sIGluIHRoZSBgSV9GUkVFSU5HYCBzdGF0ZS4gVGhpcyBuZXcgY2hlY2sgcHJldmVudHMgdGhhdC4gSW5zdGVhZCBvZiBnZXR0aW5nIHN0dWNrLCBpdCByZXR1cm5zIGEgYC1FSU9gIGVycm9yLCB3aGljaCBpcyBtdWNoIGJldHRlciB0aGFuIGEgZGVhZGxvY2suXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoZXJlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgaXMgY2FsbGVkIGR1cmluZyB0aGUgZXZpY3Rpb24gc2VxdWVuY2UuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBiZSBjb21wbGV0ZWx5IHN1cmUgYWJvdXQgdGhlIGV4YWN0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjMxLjA3NzE4MTg1MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MTc1NzMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2V2aWN0X2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjozMS4zMzYzNjg5MTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMDU4NzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGV2aWN0X2lub2RlYCBmb3IgTlRGUyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgZXZpY3RfaW5vZGVgIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBOVEZTIGZpbGVzeXN0ZW1zIGltcGxlbWVudGF0aW9uLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhY2llcyBvZiBpdHMgb3BlcmF0aW9uIHdpdGhpbiB0aGUgYGZzL250ZnMvc3VwZXIuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gdG8gc3BlYWssIHdoZW4gYSB2bm9kZSBpcyBiZWluZyBkaXNjYXJkZWQuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSBoYW5kbGUgY2xlYW51cCwgYW55IHVuaXF1ZSBOVEZTLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGFyb3VuZCBqb3VybmFsaW5nLCBhdHRyaWJ1dGUgbGlzdHMsIG9yIHBvdGVudGlhbGx5IGRlZmVycmVkIHdvcmsgcmVxdWlyZWQgZHVyaW5nIGFuIGV2aWN0aW9uLiBMZXQncyBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IHRoYXQncyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbSBJJ20gd29ya2luZyBvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBzcGVjaWZpYyBOVEZTIGRhdGEgc3RydWN0dXJlcyBhbmQgYSBwb3NzaWJsZSBjb25uZWN0aW9uIHRvIHRoZSB2YXJpb3VzIGF0dHJpYnV0ZSBsaXN0cyBmb3IgdGhlIGdpdmVuIGZpbGUgb3IgZGlyZWN0b3J5LiBJJ20gYWxzbyBsb29raW5nIGZvciBhbnkgY2FsbHMgdG8gdGhlIGpvdXJuYWxpbmcgZnVuY3Rpb25zLCBwZXJoYXBzIHRvIGZsdXNoIGNoYW5nZXMgb3IgdG8gdXBkYXRlIGFueSByZWxldmFudCBtZXRhZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjozNC43MzY5NTg2OTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTg4NzI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJldmljdF9pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2lub2RlLmM9Mzc0PWludCBudGZzX2Ryb3BfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMzg1LVxcbmZzL250ZnMvaW5vZGUuYzozODY6XFx0XFx0XFx0XFx0LyogVG8gYXZvaWQgZXZpY3RfaW5vZGUgY2FsbCBzaW11bHRhbmVvdXNseSAqL1xcbmZzL250ZnMvaW5vZGUuYy0zODctXFx0XFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfY291bnQpO1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTIxNjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG50ZnNfc29wcyA9IHtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMTY4LVxcdC5zdGF0ZnNcXHRcXHQ9IG50ZnNfc3RhdGZzLFxcdFxcdC8qIFN5c2NhbGw6IHN0YXRmcyAqL1xcbmZzL250ZnMvc3VwZXIuYzoyMTY5OlxcdC5ldmljdF9pbm9kZVxcdD0gbnRmc19ldmljdF9iaWdfaW5vZGUsXFxuZnMvbnRmcy9zdXBlci5jLTIxNzAtXFx0LnNob3dfb3B0aW9uc1xcdD0gbnRmc19zaG93X29wdGlvbnMsXFx0LyogU2hvdyBtb3VudCBvcHRpb25zIGluIHByb2MuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjM1LjAzNjg1NjcxM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzgzMTAwMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIFRoZSBrZXJuZWwncyBmaWxlIHN5c3RlbSBjb2RlIGlzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4gU3BlY2lmaWNhbGx5LCBJJ20gY2hlY2tpbmcgb3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbnRmc19ldmljdF9iaWdfaW5vZGVgIHdpdGhpbiBgZnMvbnRmcy9pbm9kZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGV2aWN0aW9uIG9mIGxhcmdlIGlub2RlcyBpbiB0aGUgTlRGUyBmaWxlIHN5c3RlbS4gTXkgZ29hbCBpcyB0byBncmFzcCBpdHMgbG9naWMsIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCBlZGdlIGNhc2VzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGFuZCBlbnN1cmUgaXQgYWxpZ25zIHdpdGggYmVzdCBwcmFjdGljZXMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuIEknbGwgbWVudGFsbHkgbWFwIG91dCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBhbmQgdGhlIGNvbnRyb2wgZmxvdyB0aHJvdWdoIHRoZSBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjM3LjgxOTk2MjMxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI4NjM1MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfZXZpY3RfYmlnX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5vZGUuYz0yMjMzPXN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMjI2Mi0vKlxcbmZzL250ZnMvaW5vZGUuYzoyMjYzOiAqIG50ZnNfZXZpY3RfYmlnX2lub2RlIC0gY2xlYW4gdXAgdGhlIG50ZnMgc3BlY2lmaWMgcGFydCBvZiBhbiBpbm9kZVxcbmZzL250ZnMvaW5vZGUuYy0yMjY0LSAqIEB2aTpcXHRcXHR2ZnMgaW5vZGUgcGVuZGluZyBhbm5paGlsYXRpb25cXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0yMjcxLSAqL1xcbmZzL250ZnMvaW5vZGUuYzoyMjcyOnZvaWQgbnRmc19ldmljdF9iaWdfaW5vZGUoc3RydWN0IGlub2RlICp2aSlcXG5mcy9udGZzL2lub2RlLmMtMjI3My17XFxuLS1cXG5mcy9udGZzL2lub2RlLmg9MzEyPWludCBudGZzX2Ryb3BfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL250ZnMvaW5vZGUuaDozMTM6dm9pZCBudGZzX2V2aWN0X2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKTtcXG5mcy9udGZzL2lub2RlLmgtMzE0LXZvaWQgX19udGZzX2luaXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcXG4tLVxcbmZzL250ZnMvbWZ0LmM9NjY1PXN0YXRpYyBpbnQgbnRmc190ZXN0X2lub2RlX3diKHN0cnVjdCBpbm9kZSAqdmksIHU2NCBpbm8sIHZvaWQgKmRhdGEpXFxuLS1cXG5mcy9udGZzL21mdC5jLTY3My1cXHQgKiBXaXRob3V0IHRoaXMsIG50ZnNfd3JpdGVfbXN0X2Jsb2NrKCkgY291bGQgY2FsbCBpcHV0X2ZpbmFsKClcXG5mcy9udGZzL21mdC5jOjY3NDpcXHQgKiAsIGFuZCBudGZzX2V2aWN0X2JpZ19pbm9kZSgpIGNvdWxkIHRyeSB0byB1bmxpbmsgdGhpcyBpbm9kZVxcbmZzL250ZnMvbWZ0LmMtNjc1LVxcdCAqIGFuZCB0aGUgY29udGV4IGNvdWxkIGJlIGJsb2NrZWQgaW5maW5pdGx5IGluIG1hcF9tZnRfcmVjb3JkKCkuXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MjE2MD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbnRmc19zb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTIxNjgtXFx0LnN0YXRmc1xcdFxcdD0gbnRmc19zdGF0ZnMsXFx0XFx0LyogU3lzY2FsbDogc3RhdGZzICovXFxuZnMvbnRmcy9zdXBlci5jOjIxNjk6XFx0LmV2aWN0X2lub2RlXFx0PSBudGZzX2V2aWN0X2JpZ19pbm9kZSxcXG5mcy9udGZzL3N1cGVyLmMtMjE3MC1cXHQuc2hvd19vcHRpb25zXFx0PSBudGZzX3Nob3dfb3B0aW9ucyxcXHQvKiBTaG93IG1vdW50IG9wdGlvbnMgaW4gcHJvYy4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6MzkuMTQ4NjA1NjIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzAzNjU1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG50ZnNfZXZpY3RfYmlnX2lub2RlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaWcgaW50byB0aGUgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgcmV2b2x2ZXMgYXJvdW5kIGl0cyAqcHVycG9zZSouIEJhc2VkIG9uIHRoZSBuYW1lLCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjb3JlIHJvdXRpbmUgd2l0aGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgZXZpY3Rpb24gb2YgbGFyZ2UgaW5vZGVzLiBFdmljdGlvbi4uLnRoYXQgdGVsbHMgbWUgdGhpcyBsaWtlbHkgcGxheXMgYSByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgZmx1c2hpbmcgb2YgaW5vZGUgZGF0YSBmcm9tIHRoZSBjYWNoZSwgcHJlc3VtYWJseSB0byBtYWtlIHNwYWNlIGZvciBvdGhlciBhY3RpdmUgaW5vZGVzIG9yIHRvIGZyZWUgdXAgdmFsdWFibGUgUkFNLlxuXG5JJ20gaW5zdGFudGx5IGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0LiAqV2hlbiogaXMgdGhpcyBmdW5jdGlvbiB0cmlnZ2VyZWQ/IElzIGl0IGEgYmFja2dyb3VuZCBwcm9jZXNzLCBzb21ldGhpbmcgZHJpdmVuIGJ5IG1lbW9yeSBwcmVzc3VyZSwgb3IgaXMgaXQgaW52b2tlZCBkaXJlY3RseSBpbiByZXNwb25zZSB0byBzcGVjaWZpYyBvcGVyYXRpb25zIGxpa2UgYSBmaWxlIGNsb3NlLCBvciBtZXRhZGF0YSB3cml0ZT8gVW5kZXJzdGFuZGluZyB0aGUgdHJpZ2dlcmluZyBldmVudHMgaXMgY3JpdGljYWwgdG8gYXNzZXNzIGl0cyBvdmVyYWxsIGltcGFjdCBvbiBwZXJmb3JtYW5jZS5cblxuTmV4dCwgSSdsbCBiZSBsb29raW5nIGZvciBrZXkgcGllY2VzIG9mIGluZm9ybWF0aW9uLiBJJ2xsIGZvY3VzIG9uIGhvdyBpdCBpZGVudGlmaWVzIFwiYmlnXCIgaW5vZGVzLiBJcyBpdCBiYXNlZCBvbiBhIHN0YXRpYyB0aHJlc2hvbGQsIGNhbGN1bGF0ZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gc3lzdGVtIG1lbW9yeSwgb3IgaXMgaXQgYSBmdW5jdGlvbiBvZiB0aGUgaW5vZGUncyBzaXplIG9yIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIGV4dGVudHM/IEkgd291bGQgZXhwZWN0IHRoaXMgdG8gYmUgYSBwZXJmb3JtYW5jZSBjb25jZXJuIGFuZCB0aGVyZWZvcmUgc2hvdWxkIGJlIGZpbmUtdHVuZWQuIEhvdyBpcyB0aGF0IGluZm9ybWF0aW9uIGVuY29kZWQsIGFuZCBob3cgYXJlIHRoZSBpbm9kZXMgc2VsZWN0ZWQ/IFRoYXQgd2lsbCBpbmZsdWVuY2UgaXRzIGVmZmljaWVuY3kuXG5cbldoYXQgc3RyYXRlZ2llcyBkb2VzIGl0IGVtcGxveSB0byBhY3R1YWxseSBldmljdCB0aGUgZGF0YT8gRG9lcyBpdCBpbnZvbHZlIGRpcnR5IHBhZ2UgZmx1c2hpbmcsIGludmFsaWRhdGluZyBjYWNoZSBlbnRyaWVzLCBvciBwZXJmb3JtaW5nIGFueSBkaXJlY3QgZGlzayBJL08/IFdoYXQgYXJlIHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkPyBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQgdXNlcyBhbnkgZ2xvYmFsIGxvY2tzIG9yIHBlci1pbm9kZSBsb2NrcywgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbmN1cnJlbmN5IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBQZXJmb3JtYW5jZSBhbmQgY29ycmVjdCBvcGVyYXRpb24gYXJlIGJvdGggaGlnaC1wcmlvcml0eSBjb25jZXJucy5cblxuQW5kIGZpbmFsbHksIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIGpvdXJuYWxpbmcgb3IgdHJhbnNhY3Rpb24gbWFuYWdlbWVudCBvZiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBpZiBhcHBsaWNhYmxlPyBEb2VzIGl0IGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5PyBBbnkgaW50ZXJhY3Rpb24gd2l0aCBsb2dnaW5nIHdpbGwgaGF2ZSB0byBiZSBleGFtaW5lZCBmb3IgY29ycmVjdG5lc3MgYW5kIHNwZWVkLiBEb2VzIGl0IGhhdmUgYW55IGltcGxpY2F0aW9ucyBmb3IgY3Jhc2ggcmVjb3ZlcnksIGRhdGEgaW50ZWdyaXR5LCBvciBhbnkgb3RoZXIgaGlnaC1sZXZlbCBvcGVyYXRpb25zPyBUaG9zZSBhcmUgdGhlIGNydWNpYWwgY29uc2lkZXJhdGlvbnMuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGludm9sdmVzIGNhcmVmdWwgaGFuZGxpbmcgb2YgbWV0YWRhdGEgYW5kIGRhdGEgYmxvY2tzLCB3aGljaCwgaWYgbm90IHByb3Blcmx5IGNvb3JkaW5hdGVkLCBjb3VsZCBsZWFkIHRvIGZpbGVzeXN0ZW0gY29ycnVwdGlvbi4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYW55IGVycm9yIGhhbmRsaW5nIGFuZCByZWNvdmVyeSBtZWNoYW5pc21zLCB0b28sIHRvIGFzc2VzcyBpdHMgcm9idXN0bmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjo0NC4xMTg5NzU1MjdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjYwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI2MDpcXHR9XFxuMjI2MTpcXHRcXG4yMjYyOlxcdC8qXFxuMjI2MzpcXHQgKiBudGZzX2V2aWN0X2JpZ19pbm9kZSAtIGNsZWFuIHVwIHRoZSBudGZzIHNwZWNpZmljIHBhcnQgb2YgYW4gaW5vZGVcXG4yMjY0OlxcdCAqIEB2aTpcXHRcXHR2ZnMgaW5vZGUgcGVuZGluZyBhbm5paGlsYXRpb25cXG4yMjY1OlxcdCAqXFxuMjI2NjpcXHQgKiBXaGVuIHRoZSBWRlMgaXMgZ29pbmcgdG8gcmVtb3ZlIGFuIGlub2RlIGZyb20gbWVtb3J5LCBudGZzX2NsZWFyX2JpZ19pbm9kZSgpXFxuMjI2NzpcXHQgKiBpcyBjYWxsZWQsIHdoaWNoIGRlYWxsb2NhdGVzIGFsbCBtZW1vcnkgYmVsb25naW5nIHRvIHRoZSBOVEZTIHNwZWNpZmljIHBhcnRcXG4yMjY4OlxcdCAqIG9mIHRoZSBpbm9kZSBhbmQgcmV0dXJucy5cXG4yMjY5OlxcdCAqXFxuMjI3MDpcXHQgKiBJZiB0aGUgTUZUIHJlY29yZCBpcyBkaXJ0eSwgd2UgY29tbWl0IGl0IGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLlxcbjIyNzE6XFx0ICovXFxuMjI3MjpcXHR2b2lkIG50ZnNfZXZpY3RfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpXFxuMjI3MzpcXHR7XFxuMjI3NDpcXHRcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0kodmkpO1xcbjIyNzU6XFx0XFxuMjI3NjpcXHRcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcXHUwMDI2dmktXFx1MDAzZWlfZGF0YSk7XFxuMjI3NzpcXHRcXG4yMjc4OlxcdFxcdGlmICghdmktXFx1MDAzZWlfbmxpbmspIHtcXG4yMjc5OlxcdFxcdFxcdGlmICghTklub0F0dHIobmkpKSB7XFxuMjI4MDpcXHRcXHRcXHRcXHQvKiBOZXZlciBjYWxsZWQgd2l0aCBleHRlbnQgaW5vZGVzICovXFxuMjI4MTpcXHRcXHRcXHRcXHRXQVJOX09OKG5pLVxcdTAwM2Vucl9leHRlbnRzID09IC0xKTtcXG4yMjgyOlxcdFxcdFxcdFxcdG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGUobmkpO1xcbjIyODM6XFx0XFx0XFx0fVxcbjIyODQ6XFx0XFx0XFx0Z290byByZWxlYXNlO1xcbjIyODU6XFx0XFx0fVxcbjIyODY6XFx0XFxuMjI4NzpcXHRcXHRpZiAoTklub0RpcnR5KG5pKSkge1xcbjIyODg6XFx0XFx0XFx0LyogQ29tbWl0dGluZyB0aGUgaW5vZGUgYWxzbyBjb21taXRzIGFsbCBleHRlbnQgaW5vZGVzLiAqL1xcbjIyODk6XFx0XFx0XFx0bnRmc19jb21taXRfaW5vZGUodmkpO1xcbjIyOTA6XFx0XFxuMjI5MTpcXHRcXHRcXHRpZiAoTklub0RpcnR5KG5pKSkge1xcbjIyOTI6XFx0XFx0XFx0XFx0bnRmc19kZWJ1ZyhcXFwiRmFpbGVkIHRvIGNvbW1pdCBkaXJ0eSBpbm9kZSAweCVsbHguICBMb3NpbmcgZGF0YSFcXFwiLFxcbjIyOTM6XFx0XFx0XFx0XFx0XFx0ICAgbmktXFx1MDAzZW1mdF9ubyk7XFxuMjI5NDpcXHRcXHRcXHRcXHROSW5vQ2xlYXJBdHRyTGlzdERpcnR5KG5pKTtcXG4yMjk1OlxcdFxcdFxcdFxcdE5Jbm9DbGVhckRpcnR5KG5pKTtcXG4yMjk2OlxcdFxcdFxcdH1cXG4yMjk3OlxcdFxcdH1cXG4yMjk4OlxcdFxcbjIyOTk6XFx0XFx0LyogTm8gbmVlZCB0byBsb2NrIGF0IHRoaXMgc3RhZ2UgYXMgbm8gb25lIGVsc2UgaGFzIGEgcmVmZXJlbmNlLiAqL1xcbjIzMDA6XFx0XFx0aWYgKG5pLVxcdTAwM2Vucl9leHRlbnRzIFxcdTAwM2UgMCkge1xcbjIzMDE6XFx0XFx0XFx0aW50IGk7XFxuMjMwMjpcXHRcXG4yMzAzOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuaS1cXHUwMDNlbnJfZXh0ZW50czsgaSsrKSB7XFxuMjMwNDpcXHRcXHRcXHRcXHRpZiAobmktXFx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zW2ldKVxcbjIzMDU6XFx0XFx0XFx0XFx0XFx0bnRmc19jbGVhcl9leHRlbnRfaW5vZGUobmktXFx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zW2ldKTtcXG4yMzA2OlxcdFxcdFxcdH1cXG4yMzA3OlxcdFxcdFxcdG5pLVxcdTAwM2Vucl9leHRlbnRzID0gMDtcXG4yMzA4OlxcdFxcdFxcdGt2ZnJlZShuaS1cXHUwMDNlZXh0LmV4dGVudF9udGZzX2lub3MpO1xcbjIzMDk6XFx0XFx0fVxcbjIzMTA6XFx0XFxuMjMxMTpcXHRyZWxlYXNlOlxcbjIzMTI6XFx0XFx0Y2xlYXJfaW5vZGUodmkpO1xcbjIzMTM6XFx0XFx0X19udGZzX2NsZWFyX2lub2RlKG5pKTtcXG4yMzE0OlxcdFxcbjIzMTU6XFx0XFx0aWYgKE5Jbm9BdHRyKG5pKSkge1xcbjIzMTY6XFx0XFx0XFx0LyogUmVsZWFzZSB0aGUgYmFzZSBpbm9kZSBpZiB3ZSBhcmUgaG9sZGluZyBpdC4gKi9cXG4yMzE3OlxcdFxcdFxcdGlmIChuaS1cXHUwMDNlbnJfZXh0ZW50cyA9PSAtMSkge1xcbjIzMTg6XFx0XFx0XFx0XFx0aXB1dChWRlNfSShuaS1cXHUwMDNlZXh0LmJhc2VfbnRmc19pbm8pKTtcXG4yMzE5OlxcdFxcdFxcdFxcdG5pLVxcdTAwM2Vucl9leHRlbnRzID0gMDtcXG4yMzIwOlxcdFxcdFxcdFxcdG5pLVxcdTAwM2VleHQuYmFzZV9udGZzX2lubyA9IE5VTEw7XFxuMjMyMTpcXHRcXHRcXHR9XFxuMjMyMjpcXHRcXHR9XFxuMjMyMzpcXHRcXG4yMzI0OlxcdFxcdGlmICghYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2bmktXFx1MDAzZWNvdW50KSlcXG4yMzI1OlxcdFxcdFxcdFdBUk5fT04oMSk7XFxuMjMyNjpcXHRcXHRpZiAobmktXFx1MDAzZWZvbGlvKVxcbjIzMjc6XFx0XFx0XFx0Zm9saW9fcHV0KG5pLVxcdTAwM2Vmb2xpbyk7XFxuMjMyODpcXHRcXHRrZnJlZShuaS1cXHUwMDNlbXJlYyk7XFxuMjMyOTpcXHRcXHRrdmZyZWUobmktXFx1MDAzZXRhcmdldCk7XFxuMjMzMDpcXHR9XFxuMjMzMTpcXHRcXG4yMzMyOlxcdC8qXFxuMjMzMzpcXHQgKiBudGZzX3Nob3dfb3B0aW9ucyAtIHNob3cgbW91bnQgb3B0aW9ucyBpbiAvcHJvYy9tb3VudHNcXG4yMzM0OlxcdCAqIEBzZjpcXHRcXHRzZXFfZmlsZSBpbiB3aGljaCB0byB3cml0ZSBvdXIgbW91bnQgb3B0aW9uc1xcbjIzMzU6XFx0ICogQHJvb3Q6XFx0cm9vdCBvZiB0aGUgbW91bnRlZCB0cmVlIHdob3NlIG1vdW50IG9wdGlvbnMgdG8gZGlzcGxheVxcbjIzMzY6XFx0ICpcXG4yMzM3OlxcdCAqIENhbGxlZCBieSB0aGUgVkZTIG9uY2UgZm9yIGVhY2ggbW91bnRlZCBudGZzIHZvbHVtZSB3aGVuIHNvbWVvbmUgcmVhZHNcXG4yMzM4OlxcdCAqIC9wcm9jL21vdW50cyBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSBOVEZTIHNwZWNpZmljIG1vdW50IG9wdGlvbnMgb2YgZWFjaFxcbjIzMzk6XFx0ICogbW91bnQuIFRoZSBtb3VudCBvcHRpb25zIG9mIGZzIHNwZWNpZmllZCBieSBAcm9vdCBhcmUgd3JpdHRlbiB0byB0aGUgc2VxIGZpbGVcXG4yMzQwOlxcdCAqIEBzZiBhbmQgc3VjY2VzcyBpcyByZXR1cm5lZC5cXG4yMzQxOlxcdCAqL1xcbjIzNDI6XFx0aW50IG50ZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuMjM0MzpcXHR7XFxuMjM0NDpcXHRcXHRzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IE5URlNfU0Iocm9vdC1cXHUwMDNlZF9zYik7XFxuMjM0NTpcXHRcXHRpbnQgaTtcXG4yMzQ2OlxcdFxcbjIzNDc6XFx0XFx0aWYgKHVpZF92YWxpZCh2b2wtXFx1MDAzZXVpZCkpXFxuMjM0ODpcXHRcXHRcXHRzZXFfcHJpbnRmKHNmLCBcXFwiLHVpZD0laVxcXCIsIGZyb21fa3VpZF9tdW5nZWQoXFx1MDAyNmluaXRfdXNlcl9ucywgdm9sLVxcdTAwM2V1aWQpKTtcXG4yMzQ5OlxcdFxcdGlmIChnaWRfdmFsaWQodm9sLVxcdTAwM2VnaWQpKVxcbjIzNTA6XFx0XFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIixnaWQ9JWlcXFwiLCBmcm9tX2tnaWRfbXVuZ2VkKFxcdTAwMjZpbml0X3VzZXJfbnMsIHZvbC1cXHUwMDNlZ2lkKSk7XFxuMjM1MTpcXHRcXHRpZiAodm9sLVxcdTAwM2VmbWFzayA9PSB2b2wtXFx1MDAzZWRtYXNrKVxcbjIzNTI6XFx0XFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIix1bWFzaz0wJW9cXFwiLCB2b2wtXFx1MDAzZWZtYXNrKTtcXG4yMzUzOlxcdFxcdGVsc2Uge1xcbjIzNTQ6XFx0XFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIixmbWFzaz0wJW9cXFwiLCB2b2wtXFx1MDAzZWZtYXNrKTtcXG4yMzU1OlxcdFxcdFxcdHNlcV9wcmludGYoc2YsIFxcXCIsZG1hc2s9MCVvXFxcIiwgdm9sLVxcdTAwM2VkbWFzayk7XFxuMjM1NjpcXHRcXHR9XFxuMjM1NzpcXHRcXHRzZXFfcHJpbnRmKHNmLCBcXFwiLGlvY2hhcnNldD0lc1xcXCIsIHZvbC1cXHUwMDNlbmxzX21hcC1cXHUwMDNlY2hhcnNldCk7XFxuMjM1ODpcXHRcXHRpZiAoTlZvbENhc2VTZW5zaXRpdmUodm9sKSlcXG4yMzU5OlxcdFxcdFxcdHNlcV9wdXRzKHNmLCBcXFwiLGNhc2Vfc2Vuc2l0aXZlXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjQ0LjExOTE3MDI0N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU1MzM3ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgTlRGUyBJbm9kZSBVcGRhdGUgTG9vcCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbnRmc19ldmljdF9iaWdfaW5vZGVgIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJ3MgcGluZ2luZyBteSByYWRhci4gSXQgbG9va3MgbGlrZSBpdCBjYWxscyBgbnRmc19kZWxldGVfYmFzZV9pbm9kZShuaSlgLiBOb3csIHRoYXQgZnVuY3Rpb24gbmFtZSBpcyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZy4gQ291bGQgKnRoYXQqIGJlIGNhbGxpbmcgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBhcyBwYXJ0IG9mIGl0cyBjbGVhbnVwPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuIElmIGl0IGRvZXMsIGFuZCBpZiB3ZSdyZSBub3QgY2FyZWZ1bCwgd2UgY291bGQgaGF2ZSBhbiB1cGRhdGUgbG9vcCB3aXRoIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHZlcnkgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaXNzdWVzLiBMZXQncyB0cmFjZSB0aHJvdWdoIGBudGZzX2RlbGV0ZV9iYXNlX2lub2RlYCBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRyb2wgZmxvdyB0byBjb25maXJtIG9yIGRlbnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjQ3LjI3NDUxMzJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjQzODgwNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19kZWxldGVfYmFzZV9pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2lub2RlLmM9MjIyMj12b2lkIG50ZnNfY2xlYXJfZXh0ZW50X2lub2RlKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0yMjMyLVxcbmZzL250ZnMvaW5vZGUuYzoyMjMzOnN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuZnMvbnRmcy9pbm9kZS5jLTIyMzQte1xcbi0tXFxuZnMvbnRmcy9pbm9kZS5jPTIyNzI9dm9pZCBudGZzX2V2aWN0X2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTIyODEtXFx0XFx0XFx0V0FSTl9PTihuaS1cXHUwMDNlbnJfZXh0ZW50cyA9PSAtMSk7XFxuZnMvbnRmcy9pbm9kZS5jOjIyODI6XFx0XFx0XFx0bnRmc19kZWxldGVfYmFzZV9pbm9kZShuaSk7XFxuZnMvbnRmcy9pbm9kZS5jLTIyODMtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNjo0OC41Mzg5MDc5NTNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MjAzNzk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBudGZzX2RlbGV0ZV9iYXNlX2lub2RlYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIG51YW5jZXMgaW52b2x2ZWQgaGVyZS4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgbGluY2hwaW4gZm9yIGNsZWFuaW5nIHVwIGlub2RlcyBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGJhc2UgaW5vZGUuIEknbSBndWVzc2luZyB0aGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgZnVuZGFtZW50YWwgZGlyZWN0b3J5IGVudHJ5IG9yIGZpbGUgbWV0YWRhdGEgYmxvY2suIFxuXG5JJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgaXQgaGFuZGxlcyB0aGUgYXNzb2NpYXRlZCBNRlQgZW50cmllcyBhbmQgYW55IHJlZmVyZW5jZSBjb3VudHMuIEkgZXhwZWN0IGEgY2FyZWZ1bCBkYW5jZSB0byBlbnN1cmUgdGhhdCB3aGVuIHRoaXMgYmFzZSBpbm9kZSBpcyBnb25lLCBhbnkgZGVwZW5kZW50IHN0cnVjdHVyZXMg4oCTIGxpa2UgZXh0ZW5kZWQgYXR0cmlidXRlIGRhdGEgb3IgdGhlIGRhdGEgcnVucyDigJMgYXJlIGVpdGhlciBwcm9wZXJseSBkZWFsbG9jYXRlZCBvciByZWFzc2lnbmVkLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgc2l0dWF0aW9uLiBcblxuSSdsbCBiZSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMgaGVyZTsgTlRGUyBpcyBrbm93biBmb3IgaXRzIHNvcGhpc3RpY2F0aW9uLCBzbyBJJ20gZXhwZWN0aW5nIHNvbWUgZmluZS1ncmFpbmVkIGxvY2tpbmcgdG8gYXZvaWQgY29ycnVwdGlvbiBvciBkYXRhIGxvc3MsIGVzcGVjaWFsbHkgd2l0aCBzaW11bHRhbmVvdXMgd3JpdGVzIG9yIGRlbGV0ZXMuIElzIHRoaXMgdXNpbmcgYSB0cmFuc2FjdGlvbmFsIGFwcHJvYWNoLCBvciBzb21ldGhpbmcgbW9yZSBpbW1lZGlhdGU/IEknbGwgbmVlZCB0byBwYXJzZSB0aGUgY29kZSBmb3IgdGhvc2UgaW5kaWNhdG9ycy4gQWxzbywgSSdsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIHJvdXRpbmUgZGVhbHMgd2l0aCBvcnBoYW5lZCBpbm9kZXMgb3IgcGFydGlhbGx5IGRlbGV0ZWQgc3RydWN0dXJlcyDigJMgaG93IHRoZSBzeXN0ZW0gYXR0ZW1wdHMgdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgaW4gdGhlIGZhY2Ugb2YgdW5leHBlY3RlZCBmYWlsdXJlcyBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIFRoZSByZWNvdmVyeSBtZWNoYW5pc21zIGFyZSBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Mjg3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6NTEuOTAwOTQ5MzM4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIzMyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIzMzpcXHRzdGF0aWMgaW50IG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbjIyMzQ6XFx0e1xcbjIyMzU6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG5pLVxcdTAwM2V2b2wtXFx1MDAzZXNiO1xcbjIyMzY6XFx0XFx0aW50IGVycjtcXG4yMjM3OlxcdFxcbjIyMzg6XFx0XFx0aWYgKE5Jbm9BdHRyKG5pKSB8fCBuaS1cXHUwMDNlbnJfZXh0ZW50cyA9PSAtMSlcXG4yMjM5OlxcdFxcdFxcdHJldHVybiAwO1xcbjIyNDA6XFx0XFxuMjI0MTpcXHRcXHRlcnIgPSBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzKG5pKTtcXG4yMjQyOlxcdFxcbjIyNDM6XFx0XFx0LypcXG4yMjQ0OlxcdFxcdCAqIERlYWxsb2NhdGUgZXh0ZW50IG1mdCByZWNvcmRzIGFuZCBmcmVlIGV4dGVudCBpbm9kZXMuXFxuMjI0NTpcXHRcXHQgKiBObyBuZWVkIHRvIGxvY2sgYXMgbm8gb25lIGVsc2UgaGFzIGEgcmVmZXJlbmNlLlxcbjIyNDY6XFx0XFx0ICovXFxuMjI0NzpcXHRcXHR3aGlsZSAobmktXFx1MDAzZW5yX2V4dGVudHMpIHtcXG4yMjQ4OlxcdFxcdFxcdGVyciA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsICoobmktXFx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zKSk7XFxuMjI0OTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIyNTA6XFx0XFx0XFx0XFx0bnRmc19lcnJvcihzYixcXG4yMjUxOlxcdFxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZnJlZSBleHRlbnQgTUZUIHJlY29yZC4gTGVhdmluZyBpbmNvbnNpc3RlbnQgbWV0YWRhdGEuXFxcXG5cXFwiKTtcXG4yMjUyOlxcdFxcdFxcdG50ZnNfaW5vZGVfY2xvc2UoKihuaS1cXHUwMDNlZXh0LmV4dGVudF9udGZzX2lub3MpKTtcXG4yMjUzOlxcdFxcdH1cXG4yMjU0OlxcdFxcbjIyNTU6XFx0XFx0LyogRGVhbGxvY2F0ZSBiYXNlIG1mdCByZWNvcmQgKi9cXG4yMjU2OlxcdFxcdGVyciA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsIG5pKTtcXG4yMjU3OlxcdFxcdGlmIChlcnIpXFxuMjI1ODpcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiRmFpbGVkIHRvIGZyZWUgYmFzZSBNRlQgcmVjb3JkLiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXFxcblxcXCIpO1xcbjIyNTk6XFx0XFx0cmV0dXJuIGVycjtcXG4yMjYwOlxcdH1cXG4yMjYxOlxcdFxcbjIyNjI6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6NTEuOTAxMzcwNTM4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjA2Mjg5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRlYWxsb2NhdGluZyBDbHVzdGVycyBhbmQgQXR0cmlidXRlIExpc3RzOiBBIFBvdGVudGlhbCBJbnRlcmFjdGlvbioqXG5cbkhtbSwgYSBxdWVzdGlvbiBqdXN0IHBvcHBlZCBpbnRvIG15IGhlYWQuIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AgZnVuY3Rpb24uIEkgc2VlbSB0byByZWNhbGwgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gdGhlcmUuIENvdWxkIHRoaXMgZnVuY3Rpb24gYmUgY2FsbGluZyBgbnRmc19hdHRybGlzdF91cGRhdGVgIGF0IHNvbWUgcG9pbnQ/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBmb3IgdGhlIGRlYWxsb2NhdGlvbiBmdW5jdGlvbi4gVGltZSB0byBkaXZlIGluIGFuZCBjb25maXJtIChvciBkZW55KSB0aGlzIHN1c3BlY3RlZCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6NTQuNTIyMDAxNDcxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg4ODY0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2lub2RlLmM9MzE4PXZvaWQgbnRmc19mcmVlX2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTMyMi1cXG5mcy9udGZzL2lub2RlLmM6MzIzOnN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuZnMvbnRmcy9pbm9kZS5jLTMyNC17XFxuLS1cXG5mcy9udGZzL2lub2RlLmM9MjIzMz1zdGF0aWMgaW50IG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTIyNDAtXFxuZnMvbnRmcy9pbm9kZS5jOjIyNDE6XFx0ZXJyID0gbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVycyhuaSk7XFxuZnMvbnRmcy9pbm9kZS5jLTIyNDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjU0Ljc0MDg5NTA0M1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc3NDM2NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AqKlxuXG5BbHJpZ2h0LCBJJ20gZm9jdXNpbmcgb24gYG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIG9yIHByb2Nlc3Mgd2l0aGluIHRoZSBOVEZTIGZpbGUgc3lzdGVtLiBcIkRlYWxsb2NhdGluZyBjbHVzdGVyc1wiLi4uIHRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyBzcGFjZSBtYW5hZ2VtZW50LCByaWdodD8gU28sIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZnJlZWluZyB1cCBkaXNrIHNwYWNlIHRoYXQgd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIHRvIG5vbi1yZXNpZGVudCBmaWxlIGRhdGEuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGZyYWdtZW50YXRpb24sIHBlcmZvcm1hbmNlLCBhbmQgcGVyaGFwcyBldmVuIGRhdGEgcmVjb3ZlcnkgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIHRoaXMgZGVhbGxvY2F0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyByb2J1c3QgdGhpcyByb3V0aW5lIGlzIOKAkyB3aGF0IHNhZmVndWFyZHMgYXJlIGluIHBsYWNlIHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgTWFzdGVyIEZpbGUgVGFibGUgKE1GVCkgYW5kIGhvdyBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgdGhlcmUuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoaXMgYXMgXCJUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBmcmVlaW5nIHVwIHNwYWNlIHRoYXQgd2Fzbid0IGRpcmVjdGx5IGluIHRoZSBNRlQgZW50cmllcy5cIiBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZXRhZGF0YSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI2OjU5LjQxODMzMzg4OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmcy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMzpcXHRzdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbiAzMjQ6XFx0e1xcbiAzMjU6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG5pLVxcdTAwM2V2b2wtXFx1MDAzZXNiO1xcbiAzMjY6XFx0XFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICphY3R4O1xcbiAzMjc6XFx0XFx0aW50IGVyciA9IDA7XFxuIDMyODpcXHRcXG4gMzI5OlxcdFxcdGFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbiAzMzA6XFx0XFx0aWYgKCFhY3R4KVxcbiAzMzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMzMjpcXHRcXHRXQVJOX09OKGFjdHgtXFx1MDAzZW1yZWMtXFx1MDAzZWxpbmtfY291bnQgIT0gMCk7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdC8qKlxcbiAzMzU6XFx0XFx0ICogbnRmc190cnVuY2F0ZV92ZnMgY2Fubm90IGJlIGNhbGxlZCBpbiBldmljdCgpIGNvbnRleHQgZHVlXFxuIDMzNjpcXHRcXHQgKiB0byBzb21lIGxpbWl0YXRpb25zLCB3aGljaCBhcmUgdGhlIEBuaSB2ZnMgaW5vZGUgaXMgbWFya2VkXFxuIDMzNzpcXHRcXHQgKiB3aXRoIElfRlJFRUlORywgYW5kIGV0Yy5cXG4gMzM4OlxcdFxcdCAqL1xcbiAzMzk6XFx0XFx0aWYgKE5Jbm9SdW5saXN0RGlydHkobmkpKSB7XFxuIDM0MDpcXHRcXHRcXHRlcnIgPSBudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKG5pLVxcdTAwM2V2b2wsIG5pLVxcdTAwM2VydW5saXN0LnJsKTtcXG4gMzQxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDM0MjpcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLFxcbiAzNDM6XFx0XFx0XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBmcmVlIGNsdXN0ZXJzLiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXFxcblxcXCIpO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHR3aGlsZSAoKGVyciA9IG50ZnNfYXR0cnNfd2FsayhhY3R4KSkgPT0gMCkge1xcbiAzNDc6XFx0XFx0XFx0aWYgKGFjdHgtXFx1MDAzZWF0dHItXFx1MDAzZW5vbl9yZXNpZGVudCBcXHUwMDI2XFx1MDAyNlxcbiAzNDg6XFx0XFx0XFx0XFx0XFx0KCFOSW5vUnVubGlzdERpcnR5KG5pKSB8fCBhY3R4LVxcdTAwM2VhdHRyLVxcdTAwM2V0eXBlICE9IEFUX0RBVEEpKSB7XFxuIDM0OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpybDtcXG4gMzUwOlxcdFxcdFxcdFxcdHNpemVfdCBuZXdfcmxfY291bnQ7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdFxcdFxcdHJsID0gbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MobmktXFx1MDAzZXZvbCwgYWN0eC1cXHUwMDNlYXR0ciwgTlVMTCxcXG4gMzUzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZuZXdfcmxfY291bnQpO1xcbiAzNTQ6XFx0XFx0XFx0XFx0aWYgKElTX0VSUihybCkpIHtcXG4gMzU1OlxcdFxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIocmwpO1xcbiAzNTY6XFx0XFx0XFx0XFx0XFx0bnRmc19lcnJvcihzYixcXG4gMzU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gZGVjb21wcmVzcyBydW5saXN0LiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXFxcblxcXCIpO1xcbiAzNTg6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDM1OTpcXHRcXHRcXHRcXHR9XFxuIDM2MDpcXHRcXG4gMzYxOlxcdFxcdFxcdFxcdGVyciA9IG50ZnNfY2x1c3Rlcl9mcmVlX2Zyb21fcmwobmktXFx1MDAzZXZvbCwgcmwpO1xcbiAzNjI6XFx0XFx0XFx0XFx0aWYgKGVycilcXG4gMzYzOlxcdFxcdFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsXFxuIDM2NDpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIGZyZWUgYXR0cmlidXRlIGNsdXN0ZXJzLiBMZWF2aW5nIGluY29uc2lzdGVudCBtZXRhZGF0YS5cXFxcblxcXCIpO1xcbiAzNjU6XFx0XFx0XFx0XFx0a3ZmcmVlKHJsKTtcXG4gMzY2OlxcdFxcdFxcdH1cXG4gMzY3OlxcdFxcdH1cXG4gMzY4OlxcdFxcbiAzNjk6XFx0XFx0bnRmc19yZWxlYXNlX2RpcnR5X2NsdXN0ZXJzKG5pLVxcdTAwM2V2b2wsIG5pLVxcdTAwM2VpX2RlYWxsb2NfY2x1c3RlcnMpO1xcbiAzNzA6XFx0XFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGFjdHgpO1xcbiAzNzE6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzcyOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6MjY6NTkuNDE4NTYwODJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMDA2MTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6XG5cbioqRGlnZ2luZyBpbnRvIE5URlMgQWxsb2NhdGlvbiBhbmQgRGVhbGxvY2F0aW9uKipcblxuSG9sZCBvbiBhIHNlY29uZCwgc29tZXRoaW5nIGRvZXNuJ3QgcXVpdGUgc2l0IHJpZ2h0IGhlcmUuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgZnVuY3Rpb24gd291bGQgYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnNgLiBUaGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgY2FzZS4gSSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBhdHRyaWJ1dGVzIGFyZSBiZWluZyBtYW5hZ2VkIGR1cmluZyBjbHVzdGVyIGRlYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IGZvciBub24tcmVzaWRlbnQgZGF0YS5cblxuTGV0IG1lIHJldGhpbmsgdGhpcy4gSWYgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBpc24ndCBjYWxsZWQgdGhlcmUsIHRoZW4gd2hlcmUgaXMgdGhlIHJlbGV2YW50IG1ldGFkYXRhIGJlaW5nIHVwZGF0ZWQ/IENvdWxkIHRoZSBhdHRyaWJ1dGUgbGlzdCB1cGRhdGUgYmUgaGFuZGxlZCBieSBgbnRmc19tZnRfcmVjb3JkX2ZyZWVgPyBJdCBtYWtlcyBzZW5zZSB0aGF0IGZyZWVpbmcgYSBNYXN0ZXIgRmlsZSBUYWJsZSAoTUZUKSByZWNvcmQgd291bGQgbmVjZXNzaXRhdGUgdXBkYXRlcyB0byB0aGUgYXR0cmlidXRlIGxpc3QsIHBvdGVudGlhbGx5IHJlZmxlY3RpbmcgdGhlIHJlbW92YWwgb2YgZGF0YSBvciB0aGUgZnJlZWluZyBvZiBhc3NvY2lhdGVkIGNsdXN0ZXJzLiBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHN0YWNrIGFnYWluIGFuZCBjb25maXJtIHRoZSBsb2dpY2FsIGZsb3cgb2YgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU0OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6MDIuNzM4NjI1OTU2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc5NDY5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19tZnRfcmVjb3JkX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hdHRyaWIuYz0yNjIyPWludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0yNjcwLVxcdFxcdFxcdGxlMTZfdG9fY3B1KGN0eC1cXHUwMDNlbXJlYy1cXHUwMDNlYXR0cnNfb2Zmc2V0KSA9PSA4KSB7XFxuZnMvbnRmcy9hdHRyaWIuYzoyNjcxOlxcdFxcdGlmIChudGZzX21mdF9yZWNvcmRfZnJlZShuaS1cXHUwMDNldm9sLCBuaSkpIHtcXG5mcy9udGZzL2F0dHJpYi5jLTI2NzItXFx0XFx0XFx0bnRmc19kZWJ1ZyhcXFwiQ291bGRuJ3QgZnJlZSBNRlQgcmVjb3JkLlxcXFxuXFxcIik7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTI3NTk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjk2OC1cXHRcXHRpZiAoYXR0cl9zaXplID09IDgpIHtcXG5mcy9udGZzL2F0dHJpYi5jOjI5Njk6XFx0XFx0XFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKGF0dHJfbmktXFx1MDAzZXZvbCwgYXR0cl9uaSkpXFxuZnMvbnRmcy9hdHRyaWIuYy0yOTcwLVxcdFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJGYWlsZWQgdG8gZnJlZSBNRlQgcmVjb3JkXFxcIik7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTM2ODA9aW50IG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHM2NCBmcm9tX3ZjbilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMzk1My1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiQ291bGQgbm90IG1hcCBuZXcgTUZUIHJlY29yZFxcXCIpO1xcbmZzL250ZnMvYXR0cmliLmM6Mzk1NDpcXHRcXHRcXHRpZiAobnRmc19tZnRfcmVjb3JkX2ZyZWUobmktXFx1MDAzZXZvbCwgZXh0X25pKSlcXG5mcy9udGZzL2F0dHJpYi5jLTM5NTUtXFx0XFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkNvdWxkIG5vdCBmcmVlIE1GVCByZWNvcmRcXFwiKTtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMzk5MC1cXHRcXHRcXHR1bm1hcF9tZnRfcmVjb3JkKGV4dF9uaSk7XFxuZnMvbnRmcy9hdHRyaWIuYzozOTkxOlxcdFxcdFxcdGlmIChudGZzX21mdF9yZWNvcmRfZnJlZShuaS1cXHUwMDNldm9sLCBleHRfbmkpKVxcbmZzL250ZnMvYXR0cmliLmMtMzk5Mi1cXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiQ291bGQgbm90IGZyZWUgTUZUIHJlY29yZFxcXCIpO1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy00MDA0LVxcdFxcdFxcdHVubWFwX21mdF9yZWNvcmQoZXh0X25pKTtcXG5mcy9udGZzL2F0dHJpYi5jOjQwMDU6XFx0XFx0XFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsIGV4dF9uaSkpXFxuZnMvbnRmcy9hdHRyaWIuYy00MDA2LVxcdFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJDb3VsZG4ndCBmcmVlIE1GVCByZWNvcmRcXFwiKTtcXG4tLVxcbmZzL250ZnMvaW5vZGUuYz0yMjMzPXN0YXRpYyBpbnQgbnRmc19kZWxldGVfYmFzZV9pbm9kZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMjI0Ny1cXHR3aGlsZSAobmktXFx1MDAzZW5yX2V4dGVudHMpIHtcXG5mcy9udGZzL2lub2RlLmM6MjI0ODpcXHRcXHRlcnIgPSBudGZzX21mdF9yZWNvcmRfZnJlZShuaS1cXHUwMDNldm9sLCAqKG5pLVxcdTAwM2VleHQuZXh0ZW50X250ZnNfaW5vcykpO1xcbmZzL250ZnMvaW5vZGUuYy0yMjQ5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMjI1NS1cXHQvKiBEZWFsbG9jYXRlIGJhc2UgbWZ0IHJlY29yZCAqL1xcbmZzL250ZnMvaW5vZGUuYzoyMjU2OlxcdGVyciA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsIG5pKTtcXG5mcy9udGZzL2lub2RlLmMtMjI1Ny1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9tZnQuYz0yMDEzPWludCBudGZzX21mdF9yZWNvcmRfYWxsb2Moc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNvbnN0IGludCBtb2RlLFxcbi0tXFxuZnMvbnRmcy9tZnQuYy0yNDg5LS8qXFxuZnMvbnRmcy9tZnQuYzoyNDkwOiAqIG50ZnNfbWZ0X3JlY29yZF9mcmVlIC0gZnJlZSBhbiBtZnQgcmVjb3JkIG9uIGFuIG50ZnMgdm9sdW1lXFxuZnMvbnRmcy9tZnQuYy0yNDkxLSAqIEB2b2w6XFx0dm9sdW1lIG9uIHdoaWNoIHRvIGZyZWUgdGhlIG1mdCByZWNvcmRcXG4tLVxcbmZzL250ZnMvbWZ0LmMtMjQ5OS0gKi9cXG5mcy9udGZzL21mdC5jOjI1MDA6aW50IG50ZnNfbWZ0X3JlY29yZF9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuZnMvbnRmcy9tZnQuYy0yNTAxLXtcXG4tLVxcbmZzL250ZnMvbWZ0Lmg9Nzk9aW50IG50ZnNfbWZ0X3JlY29yZF9hbGxvYyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgaW50IG1vZGUsXFxuLS1cXG5mcy9udGZzL21mdC5oLTgxLVxcdFxcdHN0cnVjdCBtZnRfcmVjb3JkICoqbmlfbXJlYyk7XFxuZnMvbnRmcy9tZnQuaDo4MjppbnQgbnRmc19tZnRfcmVjb3JkX2ZyZWUoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuZnMvbnRmcy9tZnQuaC04My1pbnQgbnRmc19tZnRfcmVjb3Jkc193cml0ZShjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgdTY0IG1yZWYsXFxuLS1cXG5mcy9udGZzL25hbWVpLmM9Mzk0PXN0YXRpYyBzdHJ1Y3QgbnRmc19pbm9kZSAqX19udGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtNzE2LVxcbmZzL250ZnMvbmFtZWkuYzo3MTc6XFx0XFx0ZXJyMiA9IG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsICoobmktXFx1MDAzZWV4dC5leHRlbnRfbnRmc19pbm9zKSk7XFxuZnMvbnRmcy9uYW1laS5jLTcxOC1cXHRcXHRpZiAoZXJyMilcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy03MjItXFx0fVxcbmZzL250ZnMvbmFtZWkuYzo3MjM6XFx0aWYgKG50ZnNfbWZ0X3JlY29yZF9mcmVlKG5pLVxcdTAwM2V2b2wsIG5pKSlcXG5mcy9udGZzL25hbWVpLmMtNzI0LVxcdFxcdG50ZnNfZXJyb3Ioc2IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI3OjAzLjA3NjU3OTA4NFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDEzMjE4MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbnRmc19tZnRfcmVjb3JkX2ZyZWVgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgbmFtZSwgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZyBOVEZTLCBNRlQsIGFuZCAqZnJlZSouIFRoYXQgdGVsbHMgbWUgdGhpcyBsaWtlbHkgaGFzIHRvIGRvIHdpdGggaG93IHRoZSBNYXN0ZXIgRmlsZSBUYWJsZSwgdGhlIGhlYXJ0IG9mIE5URlMgZmlsZSBzeXN0ZW0gbWV0YWRhdGEsIG1hbmFnZXMgcmVjb3JkcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdXNlLiBJIGV4cGVjdCB3ZSdyZSBkZWFsaW5nIHdpdGggZWl0aGVyIHJlY2xhaW1pbmcgc3BhY2UgZnJvbSBkZWxldGVkIGZpbGVzIG9yIHBlcmhhcHMgZGVhbGxvY2F0aW5nIHJlY29yZHMgdGhhdCB3ZXJlIHVzZWQgZm9yIHZlcnkgdHJhbnNpZW50IGRhdGEuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHNpbXBseSBtYXJraW5nIHRoZSBNRlQgZW50cnkgYXMgZnJlZSwgb3IgaWYgaXQgYWxzbyBoYXMgcmVzcG9uc2liaWxpdHkgZm9yIHplcm9pbmcgYW55IHNlbnNpdGl2ZSBkYXRhLCBvciBtYXliZSBldmVuIGNvbnNvbGlkYXRpbmcgZnJlZSBzcGFjZSB3aXRoaW4gdGhlIE1GVC4gSSdtIGhvcGluZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGJpdG1hcCB0aGF0IHRyYWNrcyBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgTUZULiBBbmQgb2YgY291cnNlLCBJJ20gY3VyaW91cyBhYm91dCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGVtcGxveWVkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IHdoZW4gbW9kaWZ5aW5nIHRoaXMgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmUuIEknbSBlYWdlciB0byBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBpdCBhbGwgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjUyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6MDcuMDg5ODAxOTE1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL21mdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1MDA6XFx0aW50IG50ZnNfbWZ0X3JlY29yZF9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuMjUwMTpcXHR7XFxuMjUwMjpcXHRcXHR1NjQgbWZ0X25vO1xcbjI1MDM6XFx0XFx0aW50IGVycjtcXG4yNTA0OlxcdFxcdHUxNiBzZXFfbm87XFxuMjUwNTpcXHRcXHRfX2xlMTYgb2xkX3NlcV9ubztcXG4yNTA2OlxcdFxcdHN0cnVjdCBtZnRfcmVjb3JkICpuaV9tcmVjO1xcbjI1MDc6XFx0XFx0dW5zaWduZWQgaW50IG1lbWFsbG9jX2ZsYWdzO1xcbjI1MDg6XFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKmJhc2Vfbmk7XFxuMjUwOTpcXHRcXG4yNTEwOlxcdFxcdGlmICghdm9sIHx8ICFuaSlcXG4yNTExOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI1MTI6XFx0XFxuMjUxMzpcXHRcXHRudGZzX2RlYnVnKFxcXCJFbnRlcmluZyBmb3IgaW5vZGUgMHglbGx4LlxcXFxuXFxcIiwgKGxvbmcgbG9uZyluaS1cXHUwMDNlbWZ0X25vKTtcXG4yNTE0OlxcdFxcbjI1MTU6XFx0XFx0bmlfbXJlYyA9IG1hcF9tZnRfcmVjb3JkKG5pKTtcXG4yNTE2OlxcdFxcdGlmIChJU19FUlIobmlfbXJlYykpXFxuMjUxNzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4yNTE4OlxcdFxcbjI1MTk6XFx0XFx0LyogQ2FjaGUgdGhlIG1mdCByZWZlcmVuY2UgZm9yIGxhdGVyLiAqL1xcbjI1MjA6XFx0XFx0bWZ0X25vID0gbmktXFx1MDAzZW1mdF9ubztcXG4yNTIxOlxcdFxcbjI1MjI6XFx0XFx0LyogTWFyayB0aGUgbWZ0IHJlY29yZCBhcyBub3QgaW4gdXNlLiAqL1xcbjI1MjM6XFx0XFx0bmlfbXJlYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfk1GVF9SRUNPUkRfSU5fVVNFO1xcbjI1MjQ6XFx0XFxuMjUyNTpcXHRcXHQvKiBJbmNyZW1lbnQgdGhlIHNlcXVlbmNlIG51bWJlciwgc2tpcHBpbmcgemVybywgaWYgaXQgaXMgbm90IHplcm8uICovXFxuMjUyNjpcXHRcXHRvbGRfc2VxX25vID0gbmlfbXJlYy1cXHUwMDNlc2VxdWVuY2VfbnVtYmVyO1xcbjI1Mjc6XFx0XFx0c2VxX25vID0gbGUxNl90b19jcHUob2xkX3NlcV9ubyk7XFxuMjUyODpcXHRcXHRpZiAoc2VxX25vID09IDB4ZmZmZilcXG4yNTI5OlxcdFxcdFxcdHNlcV9ubyA9IDE7XFxuMjUzMDpcXHRcXHRlbHNlIGlmIChzZXFfbm8pXFxuMjUzMTpcXHRcXHRcXHRzZXFfbm8rKztcXG4yNTMyOlxcdFxcdG5pX21yZWMtXFx1MDAzZXNlcXVlbmNlX251bWJlciA9IGNwdV90b19sZTE2KHNlcV9ubyk7XFxuMjUzMzpcXHRcXG4yNTM0OlxcdFxcdGRvd25fcmVhZChcXHUwMDI2TlRGU19JKHZvbC1cXHUwMDNlbWZ0X2lubyktXFx1MDAzZXJ1bmxpc3QubG9jayk7XFxuMjUzNTpcXHRcXHRlcnIgPSBudGZzX2dldF9ibG9ja19tZnRfcmVjb3JkKE5URlNfSSh2b2wtXFx1MDAzZW1mdF9pbm8pLCBuaSk7XFxuMjUzNjpcXHRcXHR1cF9yZWFkKFxcdTAwMjZOVEZTX0kodm9sLVxcdTAwM2VtZnRfaW5vKS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4yNTM3OlxcdFxcdGlmIChlcnIpIHtcXG4yNTM4OlxcdFxcdFxcdHVubWFwX21mdF9yZWNvcmQobmkpO1xcbjI1Mzk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNTQwOlxcdFxcdH1cXG4yNTQxOlxcdFxcbjI1NDI6XFx0XFx0LypcXG4yNTQzOlxcdFxcdCAqIFNldCB0aGUgbnRmcyBpbm9kZSBkaXJ0eSBhbmQgd3JpdGUgaXQgb3V0LiAgV2UgZG8gbm90IG5lZWQgdG8gd29ycnlcXG4yNTQ0OlxcdFxcdCAqIGFib3V0IHRoZSBiYXNlIGlub2RlIGhlcmUgc2luY2Ugd2hhdGV2ZXIgY2F1c2VkIHRoZSBleHRlbnQgbWZ0XFxuMjU0NTpcXHRcXHQgKiByZWNvcmQgdG8gYmUgZnJlZWQgaXMgZ3VhcmFudGVlZCB0byBkbyBpdCBhbHJlYWR5LlxcbjI1NDY6XFx0XFx0ICovXFxuMjU0NzpcXHRcXHROSW5vU2V0RGlydHkobmkpO1xcbjI1NDg6XFx0XFx0ZXJyID0gd3JpdGVfbWZ0X3JlY29yZChuaSwgbmlfbXJlYywgMCk7XFxuMjU0OTpcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzowNy4wOTAwMzYxOTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxMzMwODM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqVHJhY2luZyB0aGUgTlRGUyBBdHRyaWJ1dGUgTGlzdCBVcGRhdGUgRHVyaW5nIEV2aWN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIE5URlMgY29kZSBhbmQgSSd2ZSBoaXQgYSBwb3RlbnRpYWwgc25hZy4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB3aGVuIGEgTWFzdGVyIEZpbGUgVGFibGUgKE1GVCkgcmVjb3JkIGlzIGZyZWVkIHdpdGggYG50ZnNfbWZ0X3JlY29yZF9mcmVlYCwgaXQgd291bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIGFuIHVwZGF0ZSBvZiB0aGUgYXR0cmlidXRlIGxpc3QgdmlhIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAuIEJ1dCBob2xkIG9uLi4uIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBkb2luZyB0aGF0IGRpcmVjdGx5LiBUaGF0J3MgdW5leHBlY3RlZCBhbmQgbmVlZHMgc29tZSBjbGFyaWZpY2F0aW9uLiBXaGVyZSBleGFjdGx5ICppcyogdGhhdCBhbGwtaW1wb3J0YW50IGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgY2FsbCBoYXBwZW5pbmcgZHVyaW5nIHRoZSBldmljdGlvbiBwcm9jZXNzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlciB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkIHBvdGVudGlhbCBpbmNvbnNpc3RlbmNpZXMuXG5cbkFscmlnaHQsIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYW5vdGhlciBlbnRyeSBwb2ludC4gUGVyaGFwcyBJJ3ZlIG1pc3NlZCBzb21ldGhpbmcuIElmIGBudGZzX21mdF9yZWNvcmRfZnJlZWAgaXNuJ3QgdGhlIGRpcmVjdCB0cmlnZ2VyLCB0aGVuIEkgc2hvdWxkIHNoaWZ0IG15IGF0dGVudGlvbiB0byBgbnRmc19hdHRybGlzdF9lbnRyeV9ybWAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayBkZWVwZXIuIE1heWJlLCBqdXN0ICptYXliZSosIHRoZSBjcnVjaWFsIHVwZGF0ZSBpcyBoYXBwZW5pbmcgaW5zaWRlIHRoZSBmdW5jdGlvbiBmb3IgcmVtb3ZpbmcgYW4gZW50cnkgZnJvbSB0aGUgYXR0cmlidXRlIGxpc3QuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6MTEuNjAzMzQ3NDY4WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM4NjgwNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19hdHRybGlzdF9lbnRyeV9ybVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTI2MjI9aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI2NTItXFx0aWYgKE5Jbm9BdHRyTGlzdChiYXNlX25pKSBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IEFUX0FUVFJJQlVURV9MSVNUKSB7XFxuZnMvbnRmcy9hdHRyaWIuYzoyNjUzOlxcdFxcdGVyciA9IG50ZnNfYXR0cmxpc3RfZW50cnlfcm0oY3R4KTtcXG5mcy9udGZzL2F0dHJpYi5jLTI2NTQtXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRybGlzdC5jPTEyMT1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpXFxuLS1cXG5mcy9udGZzL2F0dHJsaXN0LmMtMjQ5LS8qXFxuZnMvbnRmcy9hdHRybGlzdC5jOjI1MDogKiBudGZzX2F0dHJsaXN0X2VudHJ5X3JtIC0gcmVtb3ZlIGFuIGF0dHJpYnV0ZSBsaXN0IGF0dHJpYnV0ZSBlbnRyeVxcbmZzL250ZnMvYXR0cmxpc3QuYy0yNTEtICogQGN0eDpcXHRhdHRyaWJ1dGUgc2VhcmNoIGNvbnRleHQgZGVzY3JpYmluZyB0aGUgYXR0cmlidXRlIGxpc3QgZW50cnlcXG4tLVxcbmZzL250ZnMvYXR0cmxpc3QuYy0yNTYtICovXFxuZnMvbnRmcy9hdHRybGlzdC5jOjI1NzppbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG5mcy9udGZzL2F0dHJsaXN0LmMtMjU4LXtcXG4tLVxcbmZzL250ZnMvYXR0cmxpc3QuaD0xNj1pbnQgbnRmc19hdHRybGlzdF9lbnRyeV9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIpO1xcbmZzL250ZnMvYXR0cmxpc3QuaDoxNzppbnQgbnRmc19hdHRybGlzdF9lbnRyeV9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7XFxuZnMvbnRmcy9hdHRybGlzdC5oLTE4LWludCBudGZzX2F0dHJsaXN0X3VwZGF0ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYmFzZV9uaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI3OjExLjgyNzIyMTg4OVoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ2MTkyNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5URlMgQXR0cmlidXRlIExpc3QgUmVtb3ZhbCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGJ5IGBudGZzX2F0dHJfcmVjb3JkX3JtYCwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHVzZS1jYXNlcyBvZiBgbnRmc19hdHRyX3JlY29yZF9ybWAuIFdoZXJlIGlzICp0aGF0KiBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIG9mIGBudGZzX2F0dHJfcmVjb3JkX3JtYCB3aWxsIHRlbGwgbWUgd2hpY2ggc2l0dWF0aW9ucyB0cmlnZ2VyIHRoZSBhdHRyaWJ1dGUgcmVjb3JkIHJlbW92YWwgcHJvY2VzcywgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCB0aGUgaGlnaGVyLWxldmVsIGdvYWxzIHRoYXQgYG50ZnNfYXR0cmxpc3RfZW50cnlfcm1gIHVsdGltYXRlbHkgc3VwcG9ydHMuIElzIGl0IGR1cmluZyBmaWxlIGRlbGV0aW9uLCBhdHRyaWJ1dGUgcmVzaXppbmcsIGF0dHJpYnV0ZSBsaXN0IHJlLW9yZ2FuaXphdGlvbiwgb3Igc29tZSBvdGhlciBvcGVyYXRpb24/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBlc3RhYmxpc2guIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSBjb3JyZWN0IHJlbW92YWwgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgYWN0aW9uLCBhbmQgaWYgYSBkaWZmZXJlbnQgYXBwcm9hY2ggd291bGQgYmUgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE0MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI3OjE1LjE3MzQxNzEwNVoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMDE1NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfYXR0cl9yZWNvcmRfcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hdHRyaWIuYz0yNDg2PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI2MTUtLypcXG5mcy9udGZzL2F0dHJpYi5jOjI2MTY6ICogbnRmc19hdHRyX3JlY29yZF9ybSAtIHJlbW92ZSBhdHRyaWJ1dGUgZXh0ZW50XFxuZnMvbnRmcy9hdHRyaWIuYy0yNjE3LSAqIEBjdHg6XFx0c2VhcmNoIGNvbnRleHQgZGVzY3JpYmluZyB0aGUgYXR0cmlidXRlIHdoaWNoIHNob3VsZCBiZSByZW1vdmVkXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI2MjEtICovXFxuZnMvbnRmcy9hdHRyaWIuYzoyNjIyOmludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxcbmZzL250ZnMvYXR0cmliLmMtMjYyMy17XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI3MTEtXFx0XFx0LyogUmVtb3ZlIGF0dHJpYnV0ZSByZWNvcmQgaXRzZWxmLiAqL1xcbmZzL250ZnMvYXR0cmliLmM6MjcxMjpcXHRcXHRpZiAobnRmc19hdHRyX3JlY29yZF9ybShjdHgpKSB7XFxuZnMvbnRmcy9hdHRyaWIuYy0yNzEzLVxcdFxcdFxcdG50ZnNfZGVidWcoXFxcIkNvdWxkbid0IHJlbW92ZSBhdHRyaWJ1dGUgbGlzdC4gU3VjY2VlZCBhbnl3YXkuXFxcXG5cXFwiKTtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9MzY4MD1pbnQgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IGZyb21fdmNuKVxcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0zOTE5LVxcdFxcdFxcdC8qIFJlbW92ZSB1bnVzZWQgYXR0cmlidXRlIHJlY29yZC4gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjM5MjA6XFx0XFx0XFx0ZXJyID0gbnRmc19hdHRyX3JlY29yZF9ybShjdHgpO1xcbmZzL250ZnMvYXR0cmliLmMtMzkyMS1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTUxMjc9aW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTUxNjktXFx0XFx0XFx0XFx0Q0FTRV9TRU5TSVRJVkUsIDAsIE5VTEwsIDAsIGN0eCkpKSB7XFxuZnMvbnRmcy9hdHRyaWIuYzo1MTcwOlxcdFxcdGVyciA9IG50ZnNfYXR0cl9yZWNvcmRfcm0oY3R4KTtcXG5mcy9udGZzL2F0dHJpYi5jLTUxNzEtXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuaD0xMjA9aW50IG50ZnNfYXR0cl9yZW1vdmUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwgX19sZTE2ICpuYW1lLFxcbmZzL250ZnMvYXR0cmliLmgtMTIxLVxcdFxcdHUzMiBuYW1lX2xlbik7XFxuZnMvbnRmcy9hdHRyaWIuaDoxMjI6aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xcbmZzL250ZnMvYXR0cmliLmgtMTIzLWludCBudGZzX2F0dHJfcmVjb3JkX21vdmVfdG8oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuLS1cXG5mcy9udGZzL2lub2RlLmM9MzAzMT1pbnQgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTMxNTUtXFx0XFx0XFx0XFx0Q0FTRV9TRU5TSVRJVkUsIDAsIE5VTEwsIDAsIGN0eCkpIHtcXG5mcy9udGZzL2lub2RlLmM6MzE1NjpcXHRcXHRpZiAobnRmc19hdHRyX3JlY29yZF9ybShjdHgpKVxcbmZzL250ZnMvaW5vZGUuYy0zMTU3LVxcdFxcdFxcdG50ZnNfZXJyb3IobmktXFx1MDAzZXZvbC1cXHUwMDNlc2IsIFxcXCJSb2xsYmFjayBmYWlsZWQgdG8gcmVtb3ZlIGF0dHJsaXN0XFxcIik7XFxuLS1cXG5mcy9udGZzL25hbWVpLmM9ODMwPXN0YXRpYyBpbnQgbnRmc19kZWxldGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbm9kZSAqZGlyX25pLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTk0My1cXG5mcy9udGZzL25hbWVpLmM6OTQ0OlxcdGVyciA9IG50ZnNfYXR0cl9yZWNvcmRfcm0oYWN0eCk7XFxuZnMvbnRmcy9uYW1laS5jLTk0NS1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTQ0Mj1pbnQgbnRmc193cml0ZV92b2x1bWVfbGFiZWwoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNoYXIgKmxhYmVsKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTQ4Ny1cXHRpZiAoIXJldClcXG5mcy9udGZzL3N1cGVyLmM6NDg4OlxcdFxcdHJldCA9IG50ZnNfYXR0cl9yZWNvcmRfcm0oY3R4KTtcXG5mcy9udGZzL3N1cGVyLmMtNDg5LVxcdGVsc2UgaWYgKHJldCA9PSAtRU5PRU5UKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzoxNS4zMjY0NzA3MVoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc1MzgxNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG50ZnNfYXR0cl9ybWAgQ2FsbCBTaXRlcyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYG50ZnNfYXR0cl9ybWAgcG9wIHVwIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgaXNzdWUuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgXCJXYWl0LCBpcyB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogYmVpbmcgY2FsbGVkIGZyb20gc29tZXdoZXJlIHVuZXhwZWN0ZWQ/XCIgTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBsb3ctbGV2ZWwgZnVuY3Rpb24gcmVsYXRlZCB0byBOVEZTIGF0dHJpYnV0ZSBtYW5hZ2VtZW50IGlzIHVzdWFsbHkgdGlnaHRseSBjb3VwbGVkIHdpdGggYSBzcGVjaWZpYyBtb2R1bGUgb3Igc3Vic3lzdGVtIHdpdGhpbiB0aGUga2VybmVsIG9yIGZpbGVzeXN0ZW0gZHJpdmVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY2FsbCBjaGFpbiB0aGF0IGxlYWRzIHRvIGBudGZzX2F0dHJfcm1gLiBBbnkgdW5leHBlY3RlZCB1c2FnZSBwYXR0ZXJucyBjb3VsZCBzdWdnZXN0IGEgYnVnLCB2dWxuZXJhYmlsaXR5LCBvciBtaXNjb25maWd1cmF0aW9uLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yIHJpZ2h0IG5vdy4gSSBoYXZlIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHRoaXMgY29kZSBpcyBiZWluZyBpbnZva2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI3OjE4LjYwMTg1NTIwOFoiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNzk4NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfYXR0cl9ybVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTI3NTk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjkzOS1cXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUganVzdCBhZGRlZCBhdHRyaWJ1dGVcXFwiKTtcXG5mcy9udGZzL2F0dHJpYi5jOjI5NDA6XFx0XFx0aWYgKG50ZnNfYXR0cl9ybShhdHRyX25pKSlcXG5mcy9udGZzL2F0dHJpYi5jLTI5NDEtXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkZhaWxlZCB0byByZW1vdmUganVzdCBhZGRlZCBhdHRyaWJ1dGVcXFwiKTtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NDk3MD1pbnQgbnRmc19hdHRyX21hcF9jbHVzdGVyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbl9zdGFydCwgczY0ICpsY25fc3RhcnQsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTUxMjAtLypcXG5mcy9udGZzL2F0dHJpYi5jOjUxMjE6ICogbnRmc19hdHRyX3JtIC0gcmVtb3ZlIGF0dHJpYnV0ZSBmcm9tIG50ZnMgaW5vZGVcXG5mcy9udGZzL2F0dHJpYi5jLTUxMjItICogQG5pOlxcdFxcdG9wZW5lZCBudGZzIGF0dHJpYnV0ZSB0byBkZWxldGVcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNTEyNi0gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjUxMjc6aW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuZnMvbnRmcy9hdHRyaWIuYy01MTI4LXtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NTIwOT1pbnQgbnRmc19hdHRyX3JlbW92ZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IF9fbGUzMiB0eXBlLCBfX2xlMTYgKm5hbWUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTUyMjktXFxuZnMvbnRmcy9hdHRyaWIuYzo1MjMwOlxcdGVyciA9IG50ZnNfYXR0cl9ybShhdHRyX25pKTtcXG5mcy9udGZzL2F0dHJpYi5jLTUyMzEtXFx0aWYgKGVycilcXG4tLVxcbmZzL250ZnMvYXR0cmliLmg9MTE2PWludCBudGZzX2F0dHJfdHJ1bmNhdGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSk7XFxuZnMvbnRmcy9hdHRyaWIuaDoxMTc6aW50IG50ZnNfYXR0cl9ybShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xcbmZzL250ZnMvYXR0cmliLmgtMTE4LWludCBudGZzX2F0dHJfZXhpc3Qoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBfX2xlMzIgdHlwZSwgX19sZTE2ICpuYW1lLFxcbi0tXFxuZnMvbnRmcy9yZXBhcnNlLmM9NTkzPXN0YXRpYyBpbnQgdXBkYXRlX3JlcGFyc2VfZGF0YShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKnhyLFxcbi0tXFxuZnMvbnRmcy9yZXBhcnNlLmMtNjI5LVxcdFxcdCAqL1xcbmZzL250ZnMvcmVwYXJzZS5jOjYzMDpcXHRcXHRudGZzX2F0dHJfcm0ocnBfbmkpO1xcbmZzL250ZnMvcmVwYXJzZS5jLTYzMS1cXHRcXHRudGZzX2Vycm9yKG5pLVxcdTAwM2V2b2wtXFx1MDAzZXNiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzoxOC43MzU2NjE2OTNaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ5NzA2OTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgTlRGUyBJbm9kZSBFdmljdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgTlRGUyBpbm9kZSBldmljdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIG9mZjsgSSB0aG91Z2h0IGBudGZzX2F0dHJfcmVtb3ZlYCB3YXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGVgLCBidXQgdGhhdCdzIG5vdCBxdWl0ZSByaWdodC4gSXQgc2VlbXMgYG50ZnNfZGVsZXRlX2Jhc2VfaW5vZGVgIGFjdHVhbGx5IGNhbGxzIGBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzYCBhbmQgYG50ZnNfbWZ0X3JlY29yZF9mcmVlYC4gVGhhdCdzIGltcG9ydGFudC5cblxuQWgsIGhlcmUncyB0aGUga2V5OiB0aGlzIHBhdGNoIGlzIHNheWluZyB0aGF0IGBnZW5lcmljX3NodXRkb3duX3N1cGVyKClgIGNsZWFycyBgU0JfQUNUSVZFYCAqYmVmb3JlKiBldmljdGluZyBjYWNoZWQgaW5vZGVzLiBXaGljaCBtZWFucyB3ZSAqY2FuJ3QqIGxvb2sgdXAgdGhlIGF0dHJpYnV0ZS1saXN0IGlub2RlIGFmdGVyIGBTQl9BQ1RJVkVgIGlzIGNsZWFyZWQgYmVjYXVzZSBpdCBtaWdodCBhbHJlYWR5IGJlIGluIHRoZSBgSV9GUkVFSU5HYCBzdGF0ZSwgYW5kIHdhaXRpbmcgb24gaXQgY291bGQgY2F1c2UgYSBuYXN0eSBzZWxmLWRlYWRsb2NrLiBUaGF0IHJlYWxseSBjbGFyaWZpZXMgdGhlIHByb2JsZW0gdGhleSdyZSBhZGRyZXNzaW5nLlxuXG5TbywgdGhpcyBgbnRmc19hdHRybGlzdF91cGRhdGVgIHJvdXRpbmUgaXMgZGVmaW5pdGVseSB0cmlnZ2VyZWQgZHVyaW5nIGV2aWN0aW9uLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgZWxzZSBpdCdzIGNhbGxlZCBmcm9tLiBMZXQncyBzZWUuLi4gaXQncyBjYWxsZWQgZnJvbSBgbnRmc19hdHRybGlzdF9lbnRyeV9ybWAsIGBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZGAsIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgLCBgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZWAsIGBudGZzX2F0dHJfdXBkYXRlX21ldGFgLCBgbnRmc19pcl9yZXBhcmVudGAsIGFuZCBgbnRmc19pbm9kZV9hZGRfYXR0cmxpc3RgLiBUaGF0IGdpdmVzIG1lIGEgYnJvYWRlciBwaWN0dXJlIG9mIGl0cyByb2xlLlxuXG5TcGVjaWZpY2FsbHksIGR1cmluZyBldmljdGlvbiwgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBjYWxscyBgbnRmc19kZWxldGVfYmFzZV9pbm9kZWAsIHdoaWNoLCBhcyB3ZSBlc3RhYmxpc2hlZCwgY2FsbHMgYG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnNgLiBBbmQgdGhlbiBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AgY2FsbHMgYG50ZnNfY2x1c3Rlcl9mcmVlX2Zyb21fcmxgLiBHb3QgaXQuXG5cbkJ1dCBob2xkIG9uLCBgbnRmc19ldmljdF9iaWdfaW5vZGVgICphbHNvKiBjYWxscyBgbnRmc19jb21taXRfaW5vZGVgIGlmIHRoZSBpbm9kZSBpcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYG50ZnNfY29tbWl0X2lub2RlYCBpbiB0aGlzIGNvbnRleHQuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSdsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM2NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzoyNS4yMzI3MzQxOTJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NzY5MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfY29tbWl0X2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5vZGUuYz0yMjcyPXZvaWQgbnRmc19ldmljdF9iaWdfaW5vZGUoc3RydWN0IGlub2RlICp2aSlcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0yMjg4LVxcdFxcdC8qIENvbW1pdHRpbmcgdGhlIGlub2RlIGFsc28gY29tbWl0cyBhbGwgZXh0ZW50IGlub2Rlcy4gKi9cXG5mcy9udGZzL2lub2RlLmM6MjI4OTpcXHRcXHRudGZzX2NvbW1pdF9pbm9kZSh2aSk7XFxuZnMvbnRmcy9pbm9kZS5jLTIyOTAtXFxuLS1cXG5mcy9udGZzL2lub2RlLmg9MzQ2PWludCBudGZzX2lub2RlX2Nsb3NlKHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuZnMvbnRmcy9pbm9kZS5oLTM0Ny1cXG5mcy9udGZzL2lub2RlLmg6MzQ4OnN0YXRpYyBpbmxpbmUgdm9pZCBudGZzX2NvbW1pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKVxcbmZzL250ZnMvaW5vZGUuaC0zNDkte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTE3MTE9c3RhdGljIHZvaWQgbnRmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNzIyLVxcdCAqL1xcbmZzL250ZnMvc3VwZXIuYzoxNzIzOlxcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cXHUwMDNldm9sX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jLTE3MjQtXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTcyNy1cXHRcXHRpZiAodm9sLVxcdTAwM2VleHRlbmRfaW5vKVxcbmZzL250ZnMvc3VwZXIuYzoxNzI4OlxcdFxcdFxcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cXHUwMDNlZXh0ZW5kX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jLTE3MjktXFx0XFx0aWYgKHZvbC1cXHUwMDNlc2VjdXJlX2lubylcXG5mcy9udGZzL3N1cGVyLmM6MTczMDpcXHRcXHRcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZXNlY3VyZV9pbm8pO1xcbmZzL250ZnMvc3VwZXIuYy0xNzMxLVxcdH1cXG5mcy9udGZzL3N1cGVyLmMtMTczMi1cXG5mcy9udGZzL3N1cGVyLmM6MTczMzpcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZXJvb3RfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmMtMTczNC1cXG5mcy9udGZzL3N1cGVyLmM6MTczNTpcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZWxjbmJtcF9pbm8pO1xcbmZzL250ZnMvc3VwZXIuYy0xNzM2LVxcbmZzL250ZnMvc3VwZXIuYy0xNzM3LVxcdC8qXFxuZnMvbnRmcy9zdXBlci5jOjE3Mzg6XFx0ICogdGhlIEdGUF9OT0ZTIHNjb3BlIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSBudGZzX2NvbW1pdF9pbm9kZVxcbmZzL250ZnMvc3VwZXIuYy0xNzM5LVxcdCAqIGRvZXMgbm90aGluZ1xcbmZzL250ZnMvc3VwZXIuYy0xNzQwLVxcdCAqL1xcbmZzL250ZnMvc3VwZXIuYzoxNzQxOlxcdG50ZnNfY29tbWl0X2lub2RlKHZvbC1cXHUwMDNlbWZ0Ym1wX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jLTE3NDItXFxuZnMvbnRmcy9zdXBlci5jLTE3NDMtXFx0aWYgKHZvbC1cXHUwMDNlbG9nZmlsZV9pbm8pXFxuZnMvbnRmcy9zdXBlci5jOjE3NDQ6XFx0XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2Vsb2dmaWxlX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jLTE3NDUtXFxuZnMvbnRmcy9zdXBlci5jLTE3NDYtXFx0aWYgKHZvbC1cXHUwMDNlbWZ0bWlycl9pbm8pXFxuZnMvbnRmcy9zdXBlci5jOjE3NDc6XFx0XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2VtZnRtaXJyX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jOjE3NDg6XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2VtZnRfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmMtMTc0OS1cXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNzU4LVxcdFxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gY2xlYXIgZGlydHkgYml0IGluIHZvbHVtZSBpbmZvcm1hdGlvbiBmbGFncy4gIFJ1biBjaGtkc2suXFxcIik7XFxuZnMvbnRmcy9zdXBlci5jOjE3NTk6XFx0XFx0XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2V2b2xfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmM6MTc2MDpcXHRcXHRcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZXJvb3RfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmMtMTc2MS1cXHRcXHRcXHRpZiAodm9sLVxcdTAwM2VtZnRtaXJyX2lubylcXG5mcy9udGZzL3N1cGVyLmM6MTc2MjpcXHRcXHRcXHRcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZW1mdG1pcnJfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmM6MTc2MzpcXHRcXHRcXHRudGZzX2NvbW1pdF9pbm9kZSh2b2wtXFx1MDAzZW1mdF9pbm8pO1xcbmZzL250ZnMvc3VwZXIuYy0xNzY0LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTc5OS1cXHRcXHQvKiBSZS1jb21taXQgdGhlIG1mdCBtaXJyb3IgYW5kIG1mdCBqdXN0IGluIGNhc2UuICovXFxuZnMvbnRmcy9zdXBlci5jOjE4MDA6XFx0XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2VtZnRtaXJyX2lubyk7XFxuZnMvbnRmcy9zdXBlci5jOjE4MDE6XFx0XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2VtZnRfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmMtMTgwMi1cXHRcXHRpcHV0KHZvbC1cXHUwMDNlbWZ0bWlycl9pbm8pO1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE4MDktXFx0ICovXFxuZnMvbnRmcy9zdXBlci5jOjE4MTA6XFx0bnRmc19jb21taXRfaW5vZGUodm9sLVxcdTAwM2VtZnRfaW5vKTtcXG5mcy9udGZzL3N1cGVyLmMtMTgxMS1cXHR3cml0ZV9pbm9kZV9ub3codm9sLVxcdTAwM2VtZnRfaW5vLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6MjUuMzI5NTE5MDY5WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjI0MjI4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVEZTIElub2RlIENvbW1pdCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IChvciBwZXJoYXBzIGRlbHZlIGRlZXBlcikgaW50byB0aGUgbWVjaGFuaWNzIG9mIGBudGZzX2NvbW1pdF9pbm9kZWAuIEdpdmVuIGl0cyBuYW1lLCBpdCdzIG9idmlvdXNseSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgaW5vZGUgbWV0YWRhdGEgaW50ZWdyaXR5IHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtLCBzbyBuYXR1cmFsbHksIEknbSB0aGlua2luZywgXCJ3aGVyZSBpcyB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24/XCIgSXQgd291bGQgbWFrZSBzZW5zZSBmb3IgdGhhdCB0byBsaXZlIHdpdGhpbiBgZnMvbnRmcy9pbm9kZS5oYC4gVGltZSB0byBkaWcgaW50byB0aGUgaGVhZGVyIGZpbGUgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMuIEknbSBrZWVuIHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGluZ3MsIHdoYXQgc3BpbmxvY2tzIG9yIHNlbWFwaG9yZXMgbWlnaHQgYmUgaW52b2x2ZWQsIGFuZCB3aGF0IGNvbnNpc3RlbmN5IG1vZGVscyBhcmUgdXNlZC4gSSBhc3N1bWUgdGhhdCBpdCdzIGdvaW5nIHRvIGluY2x1ZGUgZGVhbGluZyB3aXRoIHdyaXRpbmcgZGlydHkgbWV0YWRhdGEgdG8gdGhlIE1GVCAoTWFzdGVyIEZpbGUgVGFibGUpLiBXb25kZXJpbmcgaG93IGl0IG1hbmFnZXMgcG90ZW50aWFsIGNvbmZsaWN0cyBvciByYWNlIGNvbmRpdGlvbnMgYW5kIHdoYXQgbGV2ZWwgb2YgYXRvbWljaXR5IGlzIGd1YXJhbnRlZWQsIHRoaW5raW5nIHBlcmhhcHMgaXQgcmVsaWVzIG9uIGpvdXJuYWxlZCBtZXRhZGF0YSB1cGRhdGVzIHRvIHJlY292ZXIgZnJvbSBpc3N1ZXMuIFRoaXMgaXMgdGhlIGx5bmNocGluIG9mIGlub2RlIG1hbmFnZW1lbnQgZm9yIE5URlMsIGFuZCBnZXR0aW5nIHRoZSBkZXRhaWxzIHJpZ2h0IGhlcmUgaXMgYWJzb2x1dGVseSBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzoyOS4wOTE5NDUxNDlaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvaW5vZGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNDgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDg6XFx0c3RhdGljIGlubGluZSB2b2lkIG50ZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqdmkpXFxuIDM0OTpcXHR7XFxuIDM1MDpcXHRcXHRfX250ZnNfd3JpdGVfaW5vZGUodmksIDEpO1xcbiAzNTE6XFx0fVxcbiAzNTI6XFx0XFxuIDM1MzpcXHRpbnQgbnRmc19pbm9kZV9zeW5jX2ZpbGVuYW1lKHN0cnVjdCBudGZzX2lub2RlICpuaSk7XFxuIDM1NDpcXHRpbnQgbnRmc19leHRlbmRfaW5pdGlhbGl6ZWRfc2l6ZShzdHJ1Y3QgaW5vZGUgKnZpLCBjb25zdCBsb2ZmX3Qgb2Zmc2V0LFxcbiAzNTU6XFx0XFx0XFx0Y29uc3QgbG9mZl90IG5ld19zaXplLCBib29sIGJzeW5jKTtcXG4gMzU2OlxcdHZvaWQgbnRmc19zZXRfdmZzX29wZXJhdGlvbnMoc3RydWN0IGlub2RlICppbm9kZSwgbW9kZV90IG1vZGUsIGRldl90IGRldik7XFxuIDM1NzpcXHRzdHJ1Y3QgZm9saW8gKm50ZnNfZ2V0X2xvY2tlZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gMzU4OlxcdFxcdFxcdHBnb2ZmX3QgaW5kZXgsIHBnb2ZmX3QgZW5kX2luZGV4LCBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEpO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHQjZW5kaWYgLyogX0xJTlVYX05URlNfSU5PREVfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzoyOS4wOTIwODE1NzlaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NDExNjIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqRGl2aW5nIGludG8gdGhlIE5URlMgSW5vZGUgV3JpdGUgUGF0aCoqXG5cbkFscmlnaHQsIHNvIGBudGZzX2NvbW1pdF9pbm9kZWAgdHJpZ2dlcnMgYSBjaGFpbiByZWFjdGlvbiwgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYF9fbnRmc193cml0ZV9pbm9kZSh2aSwgMSlgLiBUaGF0J3MgdGhlIGtleSBmdW5jdGlvbi4gTm93LCBgX19udGZzX3dyaXRlX2lub2RlYCwgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEl0J3MgY2FsbGluZyBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCB3aGljaCwgaW4gdHVybiwgY2FsbHMgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYC4gQ2xlYXJseSwgdGhpcyBpcyB0aGUgY29yZSBvZiBob3cgdGhlIGF0dHJpYnV0ZSBsaXN0IGRhdGEgaXMgYmVpbmcgdXBkYXRlZC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19udGZzX3dyaXRlX2lub2RlYCwgc28gSSdsbCBqdW1wIG92ZXIgdG8gYGZzL250ZnMvaW5vZGUuY2AgdG8gc2VlIGhvdyBpdCdzIGFjdHVhbGx5IGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA1MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6MzIuMzc2MjAyNjI3WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcyMyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjcyMzpcXHRpbnQgX19udGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqdmksIGludCBzeW5jKVxcbjI3MjQ6XFx0e1xcbjI3MjU6XFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTtcXG4yNzI2OlxcdFxcdHN0cnVjdCBudGZzX2lub2RlICptZnRfbmkgPSBOVEZTX0kobmktXFx1MDAzZXZvbC1cXHUwMDNlbWZ0X2lubyk7XFxuMjcyNzpcXHRcXHRzdHJ1Y3QgbWZ0X3JlY29yZCAqbTtcXG4yNzI4OlxcdFxcdGludCBlcnIgPSAwO1xcbjI3Mjk6XFx0XFx0Ym9vbCBuZWVkX2lwdXQgPSBmYWxzZTtcXG4yNzMwOlxcdFxcbjI3MzE6XFx0XFx0bnRmc19kZWJ1ZyhcXFwiRW50ZXJpbmcgZm9yICVzaW5vZGUgMHglbGx4LlxcXCIsIE5Jbm9BdHRyKG5pKSA/IFxcXCJhdHRyIFxcXCIgOiBcXFwiXFxcIixcXG4yNzMyOlxcdFxcdFxcdFxcdG5pLVxcdTAwM2VtZnRfbm8pO1xcbjI3MzM6XFx0XFxuMjczNDpcXHRcXHRpZiAoTlZvbFNodXRkb3duKG5pLVxcdTAwM2V2b2wpKVxcbjI3MzU6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuMjczNjpcXHRcXG4yNzM3OlxcdFxcdC8qXFxuMjczODpcXHRcXHQgKiBEaXJ0eSBhdHRyaWJ1dGUgaW5vZGVzIGFyZSB3cml0dGVuIHZpYSB0aGVpciByZWFsIGlub2RlcyBzbyBqdXN0XFxuMjczOTpcXHRcXHQgKiBjbGVhbiB0aGVtIGhlcmUuICBBY2Nlc3MgdGltZSB1cGRhdGVzIGFyZSB0YWtlbiBjYXJlIG9mZiB3aGVuIHRoZVxcbjI3NDA6XFx0XFx0ICogcmVhbCBpbm9kZSBpcyB3cml0dGVuLlxcbjI3NDE6XFx0XFx0ICovXFxuMjc0MjpcXHRcXHRpZiAoTklub0F0dHIobmkpIHx8IG5pLVxcdTAwM2Vucl9leHRlbnRzID09IC0xKSB7XFxuMjc0MzpcXHRcXHRcXHROSW5vQ2xlYXJEaXJ0eShuaSk7XFxuMjc0NDpcXHRcXHRcXHRudGZzX2RlYnVnKFxcXCJEb25lLlxcXCIpO1xcbjI3NDU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjc0NjpcXHRcXHR9XFxuMjc0NzpcXHRcXG4yNzQ4OlxcdFxcdC8qIGlncmFiIHByZXZlbnRzIHZpIGZyb20gYmVpbmcgZXZpY3RlZCB3aGlsZSBtcmVjX2xvY2sgaXMgaG9sZC4gKi9cXG4yNzQ5OlxcdFxcdGlmIChpZ3JhYih2aSkgIT0gTlVMTClcXG4yNzUwOlxcdFxcdFxcdG5lZWRfaXB1dCA9IHRydWU7XFxuMjc1MTpcXHRcXG4yNzUyOlxcdFxcdG11dGV4X2xvY2tfbmVzdGVkKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrLCBOVEZTX0lOT0RFX01VVEVYX05PUk1BTCk7XFxuMjc1MzpcXHRcXHQvKiBNYXAsIHBpbiwgYW5kIGxvY2sgdGhlIG1mdCByZWNvcmQgYmVsb25naW5nIHRvIHRoZSBpbm9kZS4gKi9cXG4yNzU0OlxcdFxcdG0gPSBtYXBfbWZ0X3JlY29yZChuaSk7XFxuMjc1NTpcXHRcXHRpZiAoSVNfRVJSKG0pKSB7XFxuMjc1NjpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5pLVxcdTAwM2VtcmVjX2xvY2spO1xcbjI3NTc6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihtKTtcXG4yNzU4OlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4yNzU5OlxcdFxcdH1cXG4yNzYwOlxcdFxcbjI3NjE6XFx0XFx0aWYgKE5Jbm9Ob25SZXNpZGVudChuaSkgXFx1MDAyNlxcdTAwMjYgTklub1J1bmxpc3REaXJ0eShuaSkpIHtcXG4yNzYyOlxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LmxvY2spO1xcbjI3NjM6XFx0XFx0XFx0ZXJyID0gbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzKG5pLCAwKTtcXG4yNzY0OlxcdFxcdFxcdGlmICghZXJyKVxcbjI3NjU6XFx0XFx0XFx0XFx0Tklub0NsZWFyUnVubGlzdERpcnR5KG5pKTtcXG4yNzY2OlxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdC5sb2NrKTtcXG4yNzY3OlxcdFxcdH1cXG4yNzY4OlxcdFxcbjI3Njk6XFx0XFx0ZXJyID0gbnRmc19pbm9kZV9zeW5jX3N0YW5kYXJkX2luZm9ybWF0aW9uKHZpLCBtKTtcXG4yNzcwOlxcdFxcdGlmIChlcnIpXFxuMjc3MTpcXHRcXHRcXHRnb3RvIHVubV9lcnJfb3V0O1xcbjI3NzI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA0OjI3OjMyLjM3NjUxOTY4N1oiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTE3OTUxMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBFdmljdGlvbiBEZWFkbG9jayBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgTlRGUyBwYXRjaCBhbmQgaGVyZSdzIG15IGJyZWFrZG93bi4gSXQgbG9va3MgbGlrZSBgbnRmc19hdHRybGlzdF91cGRhdGVgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGR1cmluZyB0aGUgZXZpY3Rpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGZyb20gYF9fbnRmc193cml0ZV9pbm9kZWAsIHdoaWNoIGlzIGl0c2VsZiBjYWxsZWQgdGhyb3VnaCBgbnRmc19jb21taXRfaW5vZGVgIHdpdGhpbiBgbnRmc19ldmljdF9iaWdfaW5vZGVgLiBUaGUga2V5IHBhcnQgb2YgdGhpcyBwYXRjaCBpcyB0aGUgYWRkaXRpb24gb2YgYSBjaGVjayBmb3IgYFNCX0FDVElWRWAgd2l0aGluIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAsIGFuZCByZXR1cm5pbmcgYC1FSU9gIGlmIGl0J3Mgbm90IHNldC5cblxuVGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMgaXMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCAqaG93KiBpdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBkZWFkbG9jay4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gVGhlIHNjZW5hcmlvIGlzIHRoaXM6IHdlIG1vdW50IGFuIE5URlMgdm9sdW1lLCBkbyBzb21ldGhpbmcgdGhhdCBkaXJ0aWVzIHRoZSBydW5saXN0IG9mIGFuIGlub2RlIHdpdGggYW4gYXR0cmlidXRlIGxpc3QsIGFuZCB0aGVuIHVubW91bnQgaXQuIER1cmluZyB1bm1vdW50LCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAgY2xlYXJzIHRoZSBgU0JfQUNUSVZFYCBmbGFnLCB3aGljaCBpcyBjcnVjaWFsLiBUaGVuLCBgZXZpY3RfaW5vZGVzYCBnZXRzIGNhbGxlZCwga2lja2luZyBvZmYgdGhlIGlub2RlIGV2aWN0aW9uIHByb2Nlc3MuIFRoaXMgbGVhZHMgdG8gYG50ZnNfZXZpY3RfYmlnX2lub2RlYCwgd2hpY2ggY2FsbHMgYG50ZnNfY29tbWl0X2lub2RlYCwgd2hpY2ggY2FsbHMgYF9fbnRmc193cml0ZV9pbm9kZWAuIFRoaXMgdGhlbiBjYWxscyBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYCBhbmQgKnRoYXQqIGNhbGxzIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAuXG5cblRoZSBwb3RlbnRpYWwgaXNzdWUgaXMgd2l0aGluIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAgaXRzZWxmLiBJdCB0cmllcyB0byBnZXQgdGhlIGF0dHJpYnV0ZSBsaXN0IGlub2RlIHVzaW5nIGBudGZzX2F0dHJfaWdldGAuIE5vdywgYG50ZnNfYXR0cl9pZ2V0YCBjYWxscyBgaWdldDVfbG9ja2VkYC4gSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGlmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGJlaW5nIGZyZWVkIChJX0ZSRUVJTkcpLCBgaWdldDVfbG9ja2VkYCB3aWxsIHdhaXQgb24gYF9fd2FpdF9vbl9mcmVlaW5nX2lub2RlYC4gU2luY2Ugd2UncmUgaW4gYGV2aWN0X2lub2Rlc2AgYW5kIGBTQl9BQ1RJVkVgIGlzIGNsZWFyZWQsIHdlIGNvdWxkIGJlIHdhaXRpbmcgb24gYW4gaW5vZGUgdGhhdCBpcyBzaW11bHRhbmVvdXNseSBiZWluZyBldmljdGVkLCBsZWFkaW5nIHRvIGEgZGVhZGxvY2suIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzIGJ5IHJldHVybmluZyBgLUVJT2AgaWYgYFNCX0FDVElWRWAgaXMgY2xlYXIgYmVmb3JlIGV2ZW4gYXR0ZW1wdGluZyB0byBnZXQgdGhlIGlub2RlLiBUaGlzIHByZXZlbnRzIHRoZSB3YWl0aW5nIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyBpcyBhIGNsZXZlciBhbmQgZnVuY3Rpb25hbCBmaXguXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgY29kZSBpbiBgZnMvbnRmcy9hdHRybGlzdC5jYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExMzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzo0MC40OTQ0NzQ0MTZaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvYXR0cmxpc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NDpcXHRpbnQgbnRmc19hdHRybGlzdF91cGRhdGUoc3RydWN0IG50ZnNfaW5vZGUgKmJhc2VfbmkpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmF0dHJfdmk7XFxuICA1NzpcXHRcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaTtcXG4gIDU4OlxcdFxcdGludCBlcnI7XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdC8qXFxuICA2MTpcXHRcXHQgKiBnZW5lcmljX3NodXRkb3duX3N1cGVyKCkgY2xlYXJzIFNCX0FDVElWRSBiZWZvcmUgZXZpY3RpbmcgY2FjaGVkXFxuICA2MjpcXHRcXHQgKiBpbm9kZXMuIERvIG5vdCBsb29rIHVwIHRoZSBhdHRyaWJ1dGUtbGlzdCBpbm9kZSBhZnRlciBTQl9BQ1RJVkUgaGFzXFxuICA2MzpcXHRcXHQgKiBiZWVuIGNsZWFyZWQ7IGl0IG1heSBhbHJlYWR5IGJlIElfRlJFRUlORywgYW5kIHdhaXRpbmcgb24gaXQgY2FuXFxuICA2NDpcXHRcXHQgKiBzZWxmLWRlYWRsb2NrLlxcbiAgNjU6XFx0XFx0ICovXFxuICA2NjpcXHRcXHRpZiAoIShWRlNfSShiYXNlX25pKS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX0FDVElWRSkpXFxuICA2NzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0YXR0cl92aSA9IG50ZnNfYXR0cl9pZ2V0KFZGU19JKGJhc2VfbmkpLCBBVF9BVFRSSUJVVEVfTElTVCwgQVRfVU5OQU1FRCwgMCk7XFxuICA3MDpcXHRcXHRpZiAoSVNfRVJSKGF0dHJfdmkpKSB7XFxuICA3MTpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xcbiAgNzI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gIDczOlxcdFxcdH1cXG4gIDc0OlxcdFxcdGF0dHJfbmkgPSBOVEZTX0koYXR0cl92aSk7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGVyciA9IG50ZnNfYXR0cl90cnVuY2F0ZV9pKGF0dHJfbmksIGJhc2VfbmktXFx1MDAzZWF0dHJfbGlzdF9zaXplLCBIT0xFU19OTyk7XFxuICA3NzpcXHRcXHRpZiAoZXJyID09IC1FTk9TUEMgXFx1MDAyNlxcdTAwMjYgYXR0cl9uaS1cXHUwMDNlbWZ0X25vID09IEZJTEVfTUZUKSB7XFxuICA3ODpcXHRcXHRcXHRlcnIgPSBudGZzX2F0dHJfdHJ1bmNhdGUoYXR0cl9uaSwgMCk7XFxuICA3OTpcXHRcXHRcXHRpZiAoZXJyIHx8IG50ZnNfYXR0cl90cnVuY2F0ZV9pKGF0dHJfbmksIGJhc2VfbmktXFx1MDAzZWF0dHJfbGlzdF9zaXplLCBIT0xFU19OTykgIT0gMCkge1xcbiAgODA6XFx0XFx0XFx0XFx0aXB1dChhdHRyX3ZpKTtcXG4gIDgxOlxcdFxcdFxcdFxcdG50ZnNfZXJyb3IoYmFzZV9uaS1cXHUwMDNldm9sLVxcdTAwM2VzYixcXG4gIDgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gdHJ1bmNhdGUgYXR0cmlidXRlIGxpc3Qgb2YgaW5vZGUgJSNsbHhcXFwiLFxcbiAgODM6XFx0XFx0XFx0XFx0XFx0XFx0KGxvbmcgbG9uZyliYXNlX25pLVxcdTAwM2VtZnRfbm8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwNDoyNzo0MC40OTQ2MzA2OTZaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcxNTY3MTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTlRGUyBGaWxlc3lzdGVtIERlYWRsb2NrIEZpeCoqXG5cbk9rYXksIHRoaXMgcGF0Y2ggaXMgdGhlIHJlYWwgZGVhbCwgZml4aW5nIGEgZGVhZGxvY2sgaW4gdGhlIE5URlMgZHJpdmVyLiBUaGUgY2hhbmdlcyBhcmUgY2xlYXJseSBmdW5jdGlvbmFsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLiBNeSBhbmFseXNpcyBwb2ludHMgZGlyZWN0bHkgdG8gYSBoaWdoIGZ1enppbmcgdmFsdWU7IHdlJ3JlIGRlZmluaXRlbHkgbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHBpZWNlOiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBudGZzX2F0dHJsaXN0X3VwZGF0ZWAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGZpeCBhbmQgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IHRhcmdldC4gV2UgYWxzbyBoYXZlIGBudGZzX2V2aWN0X2JpZ19pbm9kZWAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIGV2aWN0aW9uIHByb2Nlc3Mgd2hlcmUgdGhlIGJ1ZyBvY2N1cnMuIFRoZSBwYXRoIGFsc28gaW5jbHVkZXMgYG50ZnNfY29tbWl0X2lub2RlYCwgYF9fbnRmc193cml0ZV9pbm9kZWAgYW5kIGBudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNgIGJ1dCBsZXQncyBpbml0aWFsbHkgY29uY2VudHJhdGUgb24gYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBhbmQgYG50ZnNfZXZpY3RfYmlnX2lub2RlYC4gV2hpbGUgYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBpcyBjYWxsZWQgYnkgdGhlIFZGUywgaXQncyBzdGlsbCBjcnVjaWFsIHRvIGluY2x1ZGUsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgZmFpbHVyZSBpcyBzZWVuLiBUaGUgZnVuY3Rpb25zIGBudGZzX2F0dHJsaXN0X2VudHJ5X2FkZGAgYW5kIGBudGZzX2F0dHJsaXN0X2VudHJ5X3JtYCBhbHNvIGNhbGwgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCBzbyBpdCBtYWtlcyBzZW5zZSB0byBpbmNsdWRlIHRoZW0gYXMgd2VsbC4gTGV0J3MgbWFrZSBzdXJlIHdlIGluY2x1ZGUgYG50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc2AgdG9vLlxuXG5BZnRlciBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSwgaXQncyBjb25maXJtZWQgdGhhdCBgbnRmc19hdHRybGlzdF91cGRhdGVgIGFuZCBgbnRmc19ldmljdF9iaWdfaW5vZGVgIGFyZSBnbG9iYWwgZnVuY3Rpb25zLCBkZWZpbmVkIGFuZCBleHBvcnRlZCwgc28gZnV6emluZyBhY2Nlc3MgaXMgc3RyYWlnaHQgZm9yd2FyZC5cblxuSSdtIGNvbmZpZGVudCB3ZSBoYXZlIHRoZSByaWdodCBmb2N1cy4gVGhlIGV2aWN0aW9uIHByb2Nlc3MgaXMga2V5IGhlcmUgYW5kIHRoYXQgaXMgdGhlIHNjb3BlIG9mIGJvdGggYG50ZnNfZXZpY3RfYmlnX2lub2RlYCBhbmQgYG50ZnNfYXR0cmxpc3RfdXBkYXRlYCwgYW5kIHdlIG11c3Qgbm90IGZvcmdldCBgbnRmc19hdHRyX3VwZGF0ZV9tYXBwaW5nX3BhaXJzYC5cblxuTGV0J3MgdmVyaWZ5IHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucy4gQWZ0ZXIgZG91YmxlLWNoZWNraW5nIGBmcy9udGZzL0tjb25maWdgLCBpdCdzIGNsZWFyIHRoYXQgdGhlIG9ubHkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gaXMgYE5URlNfRlNgLiBXaGlsZSBgTlRGU19GU19QT1NJWF9BQ0xgIGlzIGF2YWlsYWJsZSwgYE5URlNfRlNgIGlzIHN1ZmZpY2llbnQgYW5kIHdlIHNob3VsZG4ndCBpbnRyb2R1Y2UgdW5uZWNlc3NhcnkgY29tcGxleGl0eS5cblxuU3VtbWFyaXppbmcgdGhlIHJlcXVpcmVtZW50czpcblxuKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgXG4qICAgYEZvY3VzU3ltYm9sczogW1wibnRmc19hdHRybGlzdF91cGRhdGVcIiwgXCJudGZzX2V2aWN0X2JpZ19pbm9kZVwiLCBcIm50ZnNfYXR0cl91cGRhdGVfbWFwcGluZ19wYWlyc1wiXWBcbiogICBgRW5hYmxlQ29uZmlnczogW1wiTlRGU19GU1wiXWBcbiogICBgUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBOVEZTIGRyaXZlciBkdXJpbmcgdW5tb3VudC9ldmljdGlvbiBieSBjaGVja2luZyBTQl9BQ1RJVkUgaW4gbnRmc19hdHRybGlzdF91cGRhdGUuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgaW4gdGhlIE5URlMgZmlsZXN5c3RlbS5cImBcblxuTm93LCBsZXQncyB3cml0ZSB0aGlzIHVwIGFuZCBnZXQgaXQgaW50byB0aGUgZnV6emluZyBjYW1wYWlnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3ODAsIk91dHB1dFRva2VucyI6MTEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDQ6Mjc6NTAuMjEwMzA2MjI2WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NjM0NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRybGlzdF91cGRhdGVcIixcbiAgICBcIm50ZnNfZXZpY3RfYmlnX2lub2RlXCIsXG4gICAgXCJudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRybGlzdF91cGRhdGVcIixcbiAgICBcIm50ZnNfZXZpY3RfYmlnX2lub2RlXCIsXG4gICAgXCJudGZzX2F0dHJfdXBkYXRlX21hcHBpbmdfcGFpcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0aGUgTlRGUyBkcml2ZXIgZHVyaW5nIHVubW91bnQvZXZpY3Rpb24gYnkgY2hlY2tpbmcgdGhlIFNCX0FDVElWRSBmbGFnIGluIG50ZnNfYXR0cmxpc3RfdXBkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow87g8z[1] Phase: Succeeded StartedAt: 2026-07-06 04:28:47 +0000 UTC FinishedAt: 2026-07-06 04:28:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 04:28:47 +0000 UTC FinishedAt: 2026-07-06 04:28:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2] Phase: Succeeded StartedAt: 2026-07-06 04:28:47 +0000 UTC FinishedAt: 2026-07-06 06:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-06 04:28:47 +0000 UTC FinishedAt: 2026-07-06 06:22:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-06 04:28:47 +0000 UTC FinishedAt: 2026-07-06 04:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-06 04:28:47 +0000 UTC FinishedAt: 2026-07-06 04:29:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow87g8z/series-workflow87g8z-convert-artifact-2336809547/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-06 04:29:33 +0000 UTC FinishedAt: 2026-07-06 05:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-06 04:29:33 +0000 UTC FinishedAt: 2026-07-06 05:06:26 +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:*6cd638d3-7dd9-4a49-99cd-5bdea2fe8fe1,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-workflow87g8z/series-workflow87g8z-convert-artifact-2336809547/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": "0c5bb5e0-3768-40d2-9606-3a82721d81e8", "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-workflow87g8z/series-workflow87g8z-build-action-1812748617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-06 04:29:33 +0000 UTC FinishedAt: 2026-07-06 05:06:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6cd638d3-7dd9-4a49-99cd-5bdea2fe8fe1,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-workflow87g8z/series-workflow87g8z-convert-artifact-2336809547/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": "0c5bb5e0-3768-40d2-9606-3a82721d81e8", "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-workflow87g8z/series-workflow87g8z-build-action-1812748617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-06 05:06:26 +0000 UTC FinishedAt: 2026-07-06 05:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-06 05:06:26 +0000 UTC FinishedAt: 2026-07-06 05:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-06 05:06:26 +0000 UTC FinishedAt: 2026-07-06 05:06:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-06 05:06:26 +0000 UTC FinishedAt: 2026-07-06 05:06:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow87g8z/series-workflow87g8z-convert-artifact-3384345506/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-06 05:06:46 +0000 UTC FinishedAt: 2026-07-06 05:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-06 05:06:46 +0000 UTC FinishedAt: 2026-07-06 05:08:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0c5bb5e0-3768-40d2-9606-3a82721d81e8,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-workflow87g8z/series-workflow87g8z-build-action-1812748617/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-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-06 05:08:20 +0000 UTC FinishedAt: 2026-07-06 05:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-06 05:08:20 +0000 UTC FinishedAt: 2026-07-06 05:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-06 05:08:20 +0000 UTC FinishedAt: 2026-07-06 05:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-06 05:08:20 +0000 UTC FinishedAt: 2026-07-06 05:36: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:*6cd638d3-7dd9-4a49-99cd-5bdea2fe8fe1,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-workflow87g8z/series-workflow87g8z-convert-artifact-3384345506/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": "8ffb0a2a-f3f9-41d3-a1fa-bb62f54e213d", "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-workflow87g8z/series-workflow87g8z-build-action-1469203446/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-06 05:08:20 +0000 UTC FinishedAt: 2026-07-06 05:35:54 +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:*6cd638d3-7dd9-4a49-99cd-5bdea2fe8fe1,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-workflow87g8z/series-workflow87g8z-convert-artifact-3384345506/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": "8ffb0a2a-f3f9-41d3-a1fa-bb62f54e213d", "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-workflow87g8z/series-workflow87g8z-build-action-1469203446/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-06 05:36:17 +0000 UTC FinishedAt: 2026-07-06 05:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-06 05:36:17 +0000 UTC FinishedAt: 2026-07-06 05:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-06 05:36:17 +0000 UTC FinishedAt: 2026-07-06 05:38:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-06 05:36:17 +0000 UTC FinishedAt: 2026-07-06 05:38:00 +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:*8ffb0a2a-f3f9-41d3-a1fa-bb62f54e213d,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-workflow87g8z/series-workflow87g8z-build-action-1469203446/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-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-06 05:38:09 +0000 UTC FinishedAt: 2026-07-06 06:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-06 05:38:09 +0000 UTC FinishedAt: 2026-07-06 06:22:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0c5bb5e0-3768-40d2-9606-3a82721d81e8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8ffb0a2a-f3f9-41d3-a1fa-bb62f54e213d,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-workflow87g8z/series-workflow87g8z-build-action-1812748617/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-workflow87g8z/series-workflow87g8z-build-action-1469203446/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-06 05:38:09 +0000 UTC FinishedAt: 2026-07-06 05:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-06 05:38:09 +0000 UTC FinishedAt: 2026-07-06 05:38:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow87g8z/series-workflow87g8z-convert-artifact-2671048407/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-06 05:38:09 +0000 UTC FinishedAt: 2026-07-06 05:38:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-06 05:38:09 +0000 UTC FinishedAt: 2026-07-06 05:38:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-06 05:38:09 +0000 UTC FinishedAt: 2026-07-06 05:38:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-06 05:38:19 +0000 UTC FinishedAt: 2026-07-06 06:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87g8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attrlist_update","ntfs_evict_big_inode","ntfs_attr_update_mapping_pairs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a3746ccbb0a97bed3c06ccde6b880013b1dddc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"55ca1f47-6926-4e9d-bf89-879dde7fbb0f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-06 05:38:19 +0000 UTC FinishedAt: 2026-07-06 06:21:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0c5bb5e0-3768-40d2-9606-3a82721d81e8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8ffb0a2a-f3f9-41d3-a1fa-bb62f54e213d,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-workflow87g8z/series-workflow87g8z-build-action-1812748617/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-workflow87g8z/series-workflow87g8z-build-action-1469203446/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-workflow87g8z/series-workflow87g8z-convert-artifact-2671048407/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,}