Name: series-workflowwd279 Phase: Succeeded StartedAt: 2026-08-01 16:01:43 +0000 UTC FinishedAt: 2026-08-01 20:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[0] Phase: Succeeded StartedAt: 2026-08-01 16:01:43 +0000 UTC FinishedAt: 2026-08-01 16:19:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 16:01:43 +0000 UTC FinishedAt: 2026-08-01 16:19:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "e6b2ea7d-8d90-42da-a94e-5ee452f78d32" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vm_ioctl", "kvm_vm_ioctl_enable_cap", "kvm_tdp_mmu_map" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9lbmFibGVfY2FwJiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBjYXBhYmlsaXR5IGBLVk1fQ0FQX0VWRVJfTUFQUEVEYCBhbmQgYSBuZXcgaW9jdGwgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYCB0byB0cmFjayB3aGljaCBndWVzdCBwYWdlcyBoYXZlIGV2ZXIgYmVlbiBtYXBwZWQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0tWTWAgYW5kIGlzIHNwZWNpZmljIHRvIHg4Ni4gV2UgZm9jdXMgb24gdGhlIGlvY3RsIGVudHJ5IHBvaW50cyBhbmQgdGhlIFREUCBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZXJlIHRoZSB0cmFja2luZyBpcyB1cGRhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDEzNDVhZWQ0MWMxMjRjZWI0OTFhNWFjNDc4ZGU4NzYwZTQwODMzMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTY6MTg6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5pbmRleCBhNWY5ZWU5MmY0M2U4Li5jZTZlMWQxNWQ0OGQ1IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbkBAIC02NTY2LDYgJiM0Mzs2NTY2LDUzIEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuJiM0Mzs0LjE0NSBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPR1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfRVZFUl9NQVBQRURcbiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NlxuJiM0Mzs6VHlwZTogdm0gaW9jdGxcbiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nXG4mIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvbiBlcnJvclxuJiM0MztcbiYjNDM7RXJyb3JzOlxuJiM0MztcbiYjNDM7ICA9PT09PT0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsgIEVOT0VOVCAgICAgS1ZNX0NBUF9FVkVSX01BUFBFRCBoYXMgbm90IGJlZW4gZW5hYmxlZCBmb3IgdGhpcyBWTVxuJiM0MzsgIEVJTlZBTCAgICAgYGBncmFudWxlX3NoaWZ0YGAgaXMgYmVsb3cgMjEgKGludGVybmFsIHRyYWNraW5nIGdyYW51bGFyaXR5KSBvclxuJiM0MzsgICAgICAgICAgICAgYWJvdmUgNjNcbiYjNDM7ICBFSU5WQUwgICAgIGBgZmlyc3RfZ3JhbnVsZWBgICYjNDM7IGBgbnVtX2dyYW51bGVzYGAgZXh0ZW5kZW5kcyBiZXlvbmQgdGhlIG1heGdwYVxuJiM0MzsgICAgICAgICAgICAgc2V0IHVwIHdoZW4gS1ZNX0NBUF9FVkVSX01BUFBFRCB3YXMgZW5hYmxlZFxuJiM0MzsgIEVJTlZBTCAgICAgYGBmbGFnc2BgIGlzIG5vdCAwXG4mIzQzOyAgRUZBVUxUICAgICBjb3B5X3tmcm9tLHRvfV91c2VyIG9mIGBgYml0bWFwYGAgZmFpbGVkLCBlLmcuLCBiaXRtYXAgd2FzbiYjMzk7dFxuJiM0MzsgICAgICAgICAgICAgc3VmZmljaWVudGx5IHNpemVkXG4mIzQzOyAgRU5PTUVNICAgICBzZXR0aW5nIHVwIHRlbXBvcmFyeSBiaXRtYXAgZm9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGZhaWxlZFxuJiM0MzsgID09PT09PSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztUaGlzIHJlcXVpcmVzIEtWTV9DQVBfRVZFUl9NQVBQRUQgdG8gaGF2ZSBiZWVuIGVuYWJsZWQgZm9yIHRoZSBWTSB3aXRoIGEgbWF4Z3BhXG4mIzQzO3BhcmFtZXRlci5cbiYjNDM7XG4mIzQzOzo6XG4mIzQzO1xuJiM0MzsgIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIHtcbiYjNDM7XHRfX3U2NCBmaXJzdF9ncmFudWxlO1xuJiM0MztcdF9fdTY0IG51bV9ncmFudWxlcztcbiYjNDM7XHRfX3UzMiBncmFudWxlX3NoaWZ0O1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHZvaWQgX191c2VyICpiaXRtYXA7XG4mIzQzO1x0XHRfX3U2NCBwYWRkaW5nO1xuJiM0MztcdH07XG4mIzQzO1x0X191NjQgcmVzZXJ2ZWRbNF07XG4mIzQzOyAgfTtcbiYjNDM7XG4mIzQzO2BgZmlyc3RfZ3JhbnVsZWBgLCBgYG51bV9ncmFudWxlc2BgLCBhbmQgYGBncmFudWxlX3NoaWZ0YGAgZW5jb2RlIHRoZSBHUEEgcmFuZ2VcbiYjNDM7dGhlIGNhbGxlciBpbnF1aXJlcyBhYm91dC4gRm9yIGV4YW1wbGUsIHZhbHVlcyBvZiAyLCAyNSwgYW5kIDIxLCByZXNwZWN0aXZlbHksXG4mIzQzO2lucXVpcmUgYWJvdXQgdGhlIGFkZHJlc3MgcmFuZ2UgWzRNQiwgNTRNQikuIFRoZSBjYWxsZXIgcHJvdmlkZXMgYSBgYGJpdG1hcGBgXG4mIzQzO29mIHRoZSByZXF1aXJlZCBsZW5ndGggKGluIHRoZSBhYm92ZSBjYXNlIDQgYnl0ZXMpLiBUaGUgY2FsbCB3aWxsIHdyaXRlIGEgMSBpZlxuJiM0MzthbnkgbWVtb3J5IGluIHRoZSBncmFudWxlIGhhcyBiZWVuIG1hcHBlZCBhdCBzb21lIHBvaW50IHNpbmNlXG4mIzQzO0tWTV9DQVBfRVZFUl9NQVBQRUQgd2FzIGVuYWJsZWQsIDAgaWYgbm90LlxuJiM0MztcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbkBAIC04OTQ5LDYgJiM0Mzs4OTk2LDI2IEBAIGVuYWJsZWQsIGNtbWEgY2FuJiMzOTt0IGJlIGVuYWJsZWQgYW55bW9yZSBhbmQgcGZtZmkgYW5kIHRoZSBzdG9yYWdlIGtleVxuIGludGVycHJldGF0aW9uIGFyZSBkaXNhYmxlZC4gSWYgY21tYSBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQgb3IgdGhlXG4gaHBhZ2VfMmcgbW9kdWxlIHBhcmFtZXRlciBpcyBub3Qgc2V0IHRvIDEsIC1FSU5WQUwgaXMgcmV0dXJuZWQuXG4gXG4mIzQzOzcuNDggS1ZNX0NBUF9FVkVSX01BUFBFRFxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzOzpBcmNoaXRlY3R1cmVzOiB4ODZcbiYjNDM7OlBhcmFtZXRlcnM6IGFyZ3NbMF0gLSBtYXhpbXVtIEdQQSB0byB0cmFjayBtYXBwZWQgbWVtb3J5XG4mIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIFREUCBpcyBub3QgYXZhaWxhYmxlLCAtRUlOVkFMIGlmIGFyZ3NbMF1cbiYjNDM7ICAgICAgICAgIGlzIDAgb3IgYmV5b25kIHRoZSBtYXhpbXVtIHBvc3NpYmxlIEdQQSwgLUVOT01FTSBpZiB0cmFja2luZyBzZXR1cFxuJiM0MzsgICAgICAgICAgZmFpbGVkLCAtRUVYSVNUIGlmIGFscmVhZHkgc2V0IHVwLlxuJiM0MztcbiYjNDM7VGhlIHByZXNlbmNlIG9mIHRoaXMgY2FwYWJpbGl0eSBpbmRpY2F0ZXMgdGhhdCBLVk0gY2FuIHRyYWNrIGlmIHBhZ2VzIGhhdmUgZXZlclxuJiM0MztiZWVuIG1hcHBlZCBieSB0aGUgZ3Vlc3QuIFRoaXMgYWxsb3dzIGEgY29uc2VydmF0aXZlIGVzdGltYXRlIG9mIHdoaWNoIHBhZ2VzXG4mIzQzO2FyZSBub3QgemVybyBhbnkgbW9yZS5cbiYjNDM7XG4mIzQzO09uIGVuYWJsaW5nIHRoZSBjYXBhYmlsaXR5LCB0aGUgY2FsbGVyIHByb3ZpZGVzIGEgbWF4IEdQQSB2YWx1ZS4gS1ZNIHdpbGwgdGhlblxuJiM0Mzt0cmFjayBHUEFzIGJldHdlZW4gMCBhbmQgdGhpcyB2YWx1ZS4gTm90ZSB0aGF0IHRoaXMgY2FwYWJpbGl0eSBjYW4gYmUgZW5hYmxlZFxuJiM0MzthdCBhbnkgdGltZSwgYnV0IGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGVuYWJsZSBpdCBiZWZvcmUgdkNQVXMgc3RhcnRcbiYjNDM7cnVubmluZy4gQW55IHBhZ2UgYWNjZXNzZXMgYnkgdGhlIGd1ZXN0IGJlZm9yZSBjYXBhYmlsaXR5IGVuYWJsZW1lbnQgd2lsbCBub3RcbiYjNDM7YmUgdHJhY2tlZC4gVGhlIG1heCBHUEEgdmFsdWUgY2FuIG9ubHkgYmUgc2V0IG9uY2U7IHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG9cbiYjNDM7ZW5hYmxlIHRoZSBjYXBhYmlsaXR5IHdpdGggYSBkaWZmZXJlbnQgb3IgZXZlbiBzYW1lIHZhbHVlIHdpbGwgZmFpbC5cbiYjNDM7XG4gOC4gT3RoZXIgY2FwYWJpbGl0aWVzLlxuID09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjUxNzI1N2E2MzE1My4uYzYwN2E5MTkzZjQwMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNTMzLDYgJiM0MzsxNTMzLDE1IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHQgKi9cbiBcdGJvb2wgc2hhZG93X3Jvb3RfYWxsb2NhdGVkO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVHJhY2tzIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBhbGxvd3NcbiYjNDM7XHQgKiB0cmFja2luZyB3aGljaCBtZW1vcnkgaXMgZ3VhcmFudGVlZCB0byBzdGlsbCBiZSB6ZXJvLCBlLmcuLCBmb3JcbiYjNDM7XHQgKiBzdXBwb3J0aW5nIHRoZSBIdkV4dENhbGxHZXRCb290WmVyb2VkTWVtb3J5IGVubGlnaHRlbm1lbnQuXG4mIzQzO1x0ICogVGhlIGdyYW51bGFyaXR5IGlzIGRlZmluZWQgYnkgS1ZNX0VWRVJfTUFQUEVEX1NISUZULlxuJiM0MztcdCAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgKmV2ZXJfbWFwcGVkX2JpdG1hcDtcbiYjNDM7XHR1NjQgZXZlcl9tYXBwZWRfbWF4X2dwYTtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbiBcdC8qXG4gXHQgKiBJZiBzZXQsIHRoZSBWTSBoYXMgKG9yIGhhZCkgYW4gZXh0ZXJuYWwgd3JpdGUgdHJhY2tpbmcgdXNlciwgYW5kXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oIGIvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjc5NTMzN2U2ODQ4NlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oXG5AQCAtMCwwICYjNDM7MSwzMyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9fS1ZNX1g4Nl9FVkVSX01BUFBFRF9IXG4mIzQzOyNkZWZpbmUgX19LVk1fWDg2X0VWRVJfTUFQUEVEX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRyYWNrIGlmIHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZCBhdCBhbiBpbnRlcm5hbCBncmFudWxhcml0eSBvZiAyIE1CLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBLVk1fRVZFUl9NQVBQRURfU0hJRlQgMjFcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZXZlcl9tYXBwZWRfc2V0X3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuJiM0MztcdFx0XHRcdFx0ICAgICB1NjQgbnBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgaW50IHNoaWZ0ID0gS1ZNX0VWRVJfTUFQUEVEX1NISUZUIC0gUEFHRV9TSElGVDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gZ2ZuIFx1MDAzZVx1MDAzZSBzaGlmdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGVuZCA9IChnZm4gJiM0MzsgbnBhZ2VzICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0KSAtIDEpIFx1MDAzZVx1MDAzZSBzaGlmdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGVuZCA9IG1pbihlbmQsIGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX21heF9ncGEgXHUwMDNlXHUwMDNlIEtWTV9FVkVSX01BUFBFRF9TSElGVCk7XG4mIzQzO1x0Zm9yIChpID0gc3RhcnQ7IGkgXHUwMDNjIGVuZDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiByZS1tYXBwaW5nIHphcHBlZCBwYWdlcyBhbmQgYnJlYWtpbmcgdXAgb2YgaHVnZSBwYWdlcyBjYW5cbiYjNDM7XHRcdCAqIHRyaWdnZXIgYSBudW1iZXIgb2Ygc2V0cyBvbiBhbHJlYWR5IHNldCBiaXRzLCBzbyB0ZXN0IGZpcnN0XG4mIzQzO1x0XHQgKiBiZWZvcmUgYXRvbWljLXNldC4gU2luY2UgYml0cyBjYW4gbmV2ZXIgYmUgdW5zZXQgYWdhaW4sIHRoaXNcbiYjNDM7XHRcdCAqIGlzIHNhZmUgYWdhaW5zdCByYWNlcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCF0ZXN0X2JpdChpLCBrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApKVxuJiM0MztcdFx0XHRzZXRfYml0KGksIGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19LVk1fWDg2X0VWRVJfTUFQUEVEX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5pbmRleCBjZTNmMmVmYWRiMDViLi5lYTJhMzdhMDRiMmZmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5AQCAtMSw2ICYjNDM7MSw3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtldmVyX21hcHBlZC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bW11LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttbXVfaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O21tdXRyYWNlLmhcJiMzNDtcbkBAIC01NTQsNiAmIzQzOzU1NSwxNyBAQCBzdGF0aWMgaW50IF9faGFuZGxlX2NoYW5nZWRfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoZW5ldmVyIGEgcGFnZSBiZWNvbWVzIGEgZnJlc2ggbGVhZiwgbWFyayB0aGUgbWVtb3J5IGFzIG1hcHBlZC5cbiYjNDM7XHQgKiBPbiBodWdlcGFnZSBicmVha3VwLCB0aGlzIHRyaWdnZXJzIGZvciBlYWNoIG5ldyBsb3dlci1sZXZlbCBwYWdlLFxuJiM0MztcdCAqIGV2ZW4gdGhvdWdoIHRoZSBtZW1vcnkgd2FzIGFscmVhZHkgbWFya2VkIHdoZW4gdGhlIGh1Z2VwYWdlIHdhc1xuJiM0MztcdCAqIG1hcHBlZCwgYnV0IHRoZSBvdmVyaGVhZCBpcyBuZWdsaWdpYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpc19sZWFmIFx1MDAyNlx1MDAyNiAhd2FzX2xlYWYpIHtcbiYjNDM7XHRcdGt2bV9ldmVyX21hcHBlZF9zZXRfcmFuZ2Uoa3ZtLCBnZm4sIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIFJlY3Vyc2l2ZWx5IGhhbmRsZSBjaGlsZCBQVHMgaWYgdGhlIGNoYW5nZSByZW1vdmVkIGEgc3VidHJlZSBmcm9tXG4gXHQgKiB0aGUgcGFnaW5nIHN0cnVjdHVyZS4gIE5vdGUgdGhlIFdBUk4gb24gdGhlIFBGTiBjaGFuZ2luZyB3aXRob3V0IHRoZVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNy4uODljYmNmODM5OWY0OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMjUsNiAmIzQzOzI1LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt0c3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3JlZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2t2bV9lbXVsYXRlLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bW11L2V2ZXJfbWFwcGVkLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttbXUvcGFnZV90cmFjay5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eDg2LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtjcHVpZC5oXCYjMzQ7XG5AQCAtMjM5MSw2ICYjNDM7MjM5Miw5IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRjYXNlIEtWTV9DQVBfUkVBRE9OTFlfTUVNOlxuIFx0XHRyID0ga3ZtID8ga3ZtX2FyY2hfaGFzX3JlYWRvbmx5X21lbShrdm0pIDogMTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX0VWRVJfTUFQUEVEOlxuJiM0MztcdFx0ciA9ICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQxOTAsNiAmIzQzOzQxOTQsMzYgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX0VWRVJfTUFQUEVEOiB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nICptYXBwZWRfYml0bWFwO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBudW1fZ3JhbnVsZXM7XG4mIzQzO1xuJiM0MztcdFx0ciA9IDA7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdGlmICghdGRwX2VuYWJsZWQpIHtcbiYjNDM7XHRcdFx0ciA9IC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fSBlbHNlIGlmIChrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApIHtcbiYjNDM7XHRcdFx0ciA9IC1FRVhJU1Q7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGNhcC1cdTAwM2VhcmdzWzBdID09IDAgfHxcbiYjNDM7XHRcdFx0ICAgY2FwLVx1MDAzZWFyZ3NbMF0gXHUwMDNlICgxVUxMIFx1MDAzY1x1MDAzYyBrdm1faG9zdC5tYXhwaHlhZGRyKSkge1xuJiM0MztcdFx0XHRyID0gLUVJTlZBTDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdG51bV9ncmFudWxlcyA9IERJVl9ST1VORF9VUChjYXAtXHUwMDNlYXJnc1swXSwgMVVMTCBcdTAwM2NcdTAwM2MgS1ZNX0VWRVJfTUFQUEVEX1NISUZUKTtcbiYjNDM7XHRcdFx0bWFwcGVkX2JpdG1hcCA9XG4mIzQzO1x0XHRcdFx0a3ZjYWxsb2MoQklUU19UT19MT05HUyhudW1fZ3JhbnVsZXMpLFxuJiM0MztcdFx0XHRcdFx0IHNpemVvZihsb25nKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRcdFx0aWYgKCFtYXBwZWRfYml0bWFwKVxuJiM0MztcdFx0XHRcdHIgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRlbHNlIHtcbiYjNDM7XHRcdFx0XHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1x0XHRcdFx0a3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwID0gbWFwcGVkX2JpdG1hcDtcbiYjNDM7XHRcdFx0XHRrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9tYXhfZ3BhID0gbnVtX2dyYW51bGVzIFx1MDAzY1x1MDAzYyBLVk1fRVZFUl9NQVBQRURfU0hJRlQ7XG4mIzQzO1x0XHRcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG5AQCAtNDE5Nyw2ICYjNDM7NDIzMSw3MyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIHI7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyAqbG9nKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG1heF9ncmFudWxlcztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY29hcnNlbmVzcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nICpiaXRtYXA7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdGlmIChsb2ctXHUwMDNlZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGxvZy1cdTAwM2VncmFudWxlX3NoaWZ0IFx1MDAzYyBLVk1fRVZFUl9NQVBQRURfU0hJRlQgfHwgbG9nLVx1MDAzZWdyYW51bGVfc2hpZnQgXHUwMDNlPSA2NClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRtYXhfZ3JhbnVsZXMgPSBrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9tYXhfZ3BhIFx1MDAzZVx1MDAzZSBsb2ctXHUwMDNlZ3JhbnVsZV9zaGlmdDtcbiYjNDM7XHRpZiAobG9nLVx1MDAzZW51bV9ncmFudWxlcyBcdTAwM2UgbWF4X2dyYW51bGVzIHx8XG4mIzQzO1x0ICAgIGxvZy1cdTAwM2VmaXJzdF9ncmFudWxlIFx1MDAzZSBtYXhfZ3JhbnVsZXMgLSBsb2ctXHUwMDNlbnVtX2dyYW51bGVzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSByZXF1ZXN0IHVzZXMgdGhlIHNhbWUgZ3JhbnVsYXJpdHkgYXMgb3VyIGludGVybmFsXG4mIzQzO1x0ICogdHJhY2tpbmcsIGFuZCB3ZSBhcmUgYnl0ZS1hbGlnbmVkICh0aGUgZXhwZWN0ZWQgY29tbW9uIGNhc2UpLCB3ZSBjYW5cbiYjNDM7XHQgKiBqdXN0IGNvcHlfdG9fdXNlci4gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaXRtYXAgdG8gcGFzcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdlIGRvIG5vdCBsb2NrIGFnYWluc3QgY29uY3VycmVudCB2Q1BVcyBtYXBwaW5nIG5ldyBtZW1vcnkgb24gYW55IG9mXG4mIzQzO1x0ICogdGhlc2Ugb3BlcmF0aW9ucy4gQml0cyBhcmUgc2V0IGF0b21pY2FsbHkgYW5kIG5ldmVyIGNsZWFyZWQsIHNvIGFueSByYWNlXG4mIzQzO1x0ICogaGVyZSBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgd3JpdGUgaGFwcGVuaW5nIGFmdGVyIHRoaXMgaGFuZGxlclxuJiM0MztcdCAqIGZpbmlzaGVzIGJ1dCBiZWZvcmUgdGhlIGNhbGxlciByZWFkcyB0aGUgcmVzdWx0cy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjb2Fyc2VuZXNzID0gbG9nLVx1MDAzZWdyYW51bGVfc2hpZnQgLSBLVk1fRVZFUl9NQVBQRURfU0hJRlQ7XG4mIzQzO1x0aWYgKGNvYXJzZW5lc3MgPT0gMCBcdTAwMjZcdTAwMjYgIShsb2ctXHUwMDNlZmlyc3RfZ3JhbnVsZSBcdTAwMjYgNykgXHUwMDI2XHUwMDI2ICEobG9nLVx1MDAzZW51bV9ncmFudWxlcyBcdTAwMjYgNykpIHtcbiYjNDM7XHRcdGlmIChjb3B5X3RvX3VzZXIobG9nLVx1MDAzZWJpdG1hcCxcbiYjNDM7XHRcdFx0XHQgKHU4ICopa3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwICYjNDM7IGxvZy1cdTAwM2VmaXJzdF9ncmFudWxlIC8gOCxcbiYjNDM7XHRcdFx0XHQgbG9nLVx1MDAzZW51bV9ncmFudWxlcyAvIDgpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Yml0bWFwID0ga3Z6YWxsb2MoRElWX1JPVU5EX1VQKGxvZy1cdTAwM2VudW1fZ3JhbnVsZXMsIDgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGlmICghYml0bWFwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGZvciAodTY0IGdyYW4gPSBsb2ctXHUwMDNlZmlyc3RfZ3JhbnVsZTtcbiYjNDM7XHQgICAgIGdyYW4gXHUwMDNjIGxvZy1cdTAwM2VmaXJzdF9ncmFudWxlICYjNDM7IGxvZy1cdTAwM2VudW1fZ3JhbnVsZXM7XG4mIzQzO1x0ICAgICBncmFuJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGdyYW4gXHUwMDNjXHUwMDNjIGNvYXJzZW5lc3M7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIGNvYXJzZW5lc3MpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmaW5kX25leHRfYml0KGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCwgZW5kLCBzdGFydCkgXHUwMDNjIGVuZClcbiYjNDM7XHRcdFx0X19zZXRfYml0KGdyYW4gLSBsb2ctXHUwMDNlZmlyc3RfZ3JhbnVsZSwgYml0bWFwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X3RvX3VzZXIobG9nLVx1MDAzZWJpdG1hcCwgYml0bWFwLCBESVZfUk9VTkRfVVAobG9nLVx1MDAzZW51bV9ncmFudWxlcywgOCkpKSB7XG4mIzQzO1x0XHRyID0gLUVGQVVMVDtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyID0gMDtcbiYjNDM7XG4mIzQzO291dF9mcmVlOlxuJiM0MztcdGt2ZnJlZShiaXRtYXApO1xuJiM0MztcdHJldHVybiByO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfS1ZNX0NPTVBBVFxuIC8qIGZvciBLVk1fWDg2X1NFVF9NU1JfRklMVEVSICovXG4gc3RydWN0IGt2bV9tc3JfZmlsdGVyX3JhbmdlX2NvbXBhdCB7XG5AQCAtNDcxMCw2ICYjNDM7NDgxMSwxNSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSBrdm1fdm1faW9jdGxfc2V0X21zcl9maWx0ZXIoa3ZtLCBcdTAwMjZmaWx0ZXIpO1xuIFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XHRjYXNlIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HOiB7XG4mIzQzO1x0XHRzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyBtYXBwZWRfbG9nO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZtYXBwZWRfbG9nLCBhcmdwLCBzaXplb2YobWFwcGVkX2xvZykpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0XHRyID0ga3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2coa3ZtLCBcdTAwMjZtYXBwZWRfbG9nKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcdGRlZmF1bHQ6XG4gXHRcdHIgPSAtRU5PVFRZO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uZDBiZTk0OTQ2YTc3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbiYjNDM7I2RlZmluZSBLVk1fQ0FQX0VWRVJfTUFQUEVEIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTE2NzAsNCAmIzQzOzE2NzEsMTggQEAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcbiBcdF9fdTY0IHBhZGRpbmdbNV07XG4gfTtcbiBcbiYjNDM7I2RlZmluZSBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRyAgX0lPVyhLVk1JTywgIDB4ZDYsIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nKVxuJiM0MztcbiYjNDM7c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cge1xuJiM0MztcdF9fdTY0IGZpcnN0X2dyYW51bGU7XG4mIzQzO1x0X191NjQgbnVtX2dyYW51bGVzO1xuJiM0MztcdF9fdTMyIGdyYW51bGVfc2hpZnQ7XG4mIzQzO1x0X191MzIgZmxhZ3M7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0dm9pZCBfX3VzZXIgKmJpdG1hcDtcbiYjNDM7XHRcdF9fdTY0IHBhZGRpbmc7XG4mIzQzO1x0fTtcbiYjNDM7XHRfX3U2NCByZXNlcnZlZFs0XTtcbiYjNDM7fTtcbiYjNDM7XG4gI2VuZGlmIC8qIF9fTElOVVhfS1ZNX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNGFjZTEyNjA2ZTkzNy4uMWViMGJhYzE5MjBkYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC0xNjIsNiAmIzQzOzE2Miw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzdGVhbF90aW1lXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzeXN0ZW1fY291bnRlcl9vZmZzZXRfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0XG4mIzQzO1RFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gZXZlcl9tYXBwZWRfdGVzdFxuIFxuICMgQ29tcGlsZWQgb3V0cHV0cyB1c2VkIGJ5IHRlc3QgdGFyZ2V0c1xuIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEX3g4NiAmIzQzOz0geDg2L254X2h1Z2VfcGFnZXNfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ldmVyX21hcHBlZF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZXZlcl9tYXBwZWRfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzY3MjNmMGM5ZWUyY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2V2ZXJfbWFwcGVkX3Rlc3QuY1xuQEAgLTAsMCAmIzQzOzEsMTkxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIEtWTSBldmVyLW1hcHBlZCBiaXRtYXAgdGVzdFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIE51dGFuaXgsIEluYy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nrdm1fdXRpbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Byb2Nlc3Nvci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEtpQiAxMDI0dVxuJiM0MzsjZGVmaW5lIE1pQiAoMTAyNCAqIEtpQilcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodWludDY0X3QgYmFzZV9ncGEsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRHVUVTVF9ET05FKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFzc2VydF9iaXRtYXBzX2VxdWFsKHU4IGV4cGVjdGVkW10sIHU4IGFjdHVhbFtdLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIGxlbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFRFU1RfQVNTRVJUKGV4cGVjdGVkW2ldID09IGFjdHVhbFtpXSxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O2J5dGUgJWxkLCBleHBlY3RlZCAweCUwMngsIGdvdCAweCUwMnhcJiMzNDssXG4mIzQzO1x0XHRcdCAgICBpLCBleHBlY3RlZFtpXSwgYWN0dWFsW2ldKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHByZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzdGFydCwgdTY0IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZSA9IHtcbiYjNDM7XHRcdC5ncGEgPSBzdGFydCxcbiYjNDM7XHRcdC5zaXplID0gbGVuLFxuJiM0MztcdFx0LmZsYWdzID0gMCxcbiYjNDM7XHR9O1xuJiM0MztcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX1BSRV9GQVVMVF9NRU1PUlksIFx1MDAyNnJhbmdlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9vbmVfcGFnZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZSA9IHtcbiYjNDM7XHRcdC5ncGEgPSAweDAsXG4mIzQzO1x0XHQuc2l6ZSA9IFBBR0VfU0laRSxcbiYjNDM7XHRcdC5mbGFncyA9IDAsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIG1hcHBlZF9iaXRtYXA7XG4mIzQzO1x0c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0ge1xuJiM0MztcdFx0LmZpcnN0X2dyYW51bGUgPSAwLFxuJiM0MztcdFx0Lm51bV9ncmFudWxlcyA9IDEsXG4mIzQzO1x0XHQuZ3JhbnVsZV9zaGlmdCA9IDIxLFxuJiM0MztcdFx0LmZsYWdzID0gMCxcbiYjNDM7XHRcdC5iaXRtYXAgPSBcdTAwMjZtYXBwZWRfYml0bWFwLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1xuJiM0MztcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVZFUl9NQVBQRUQsIFBBR0VfU0laRSk7XG4mIzQzO1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fUFJFX0ZBVUxUX01FTU9SWSwgXHUwMDI2cmFuZ2UpO1xuJiM0MztcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFx1MDAyNmxvZyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWFwcGVkX2JpdG1hcCA9PSAweDEsIFwmIzM0O2V4cGVjdGVkIDB4MSwgZ290IDB4JXhcJiMzNDssIG1hcHBlZF9iaXRtYXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBZGQgNjRNQiBvciBtZW1vcnkgYXQgR1BBIDE2TUIgKCAtLVx1MDAzZSBbMTZNQiwgODBNQikgKSxcbiYjNDM7ICogcHJlLWZhdWx0IFsxNk1CLCA0OE1CKSwgcmVxdWVzdCBhbmQgY2hlY2sgYml0bWFwIGZvciBbMTZNQiwgODBNQikuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X29uZV9ibG9jayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgbWFwX3N0YXJ0ID0gMHgxMDAwMDAwO1xuJiM0MztcdGNvbnN0IHVpbnQ2NF90IG1hcF9sZW4gPSAweDQwMDAwMDA7XG4mIzQzO1x0dTggbWFwcGVkX2JpdG1hcFs0XSA9IHsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9O1xuJiM0MztcdHU4IGV4cGVjdGVkX2JpdG1hcFs0XSA9IHsgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCB9O1xuJiM0MztcdHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIGxvZyA9IHtcbiYjNDM7XHRcdC5maXJzdF9ncmFudWxlID0gMHg4LFxuJiM0MztcdFx0Lm51bV9ncmFudWxlcyA9IDB4MjAsXG4mIzQzO1x0XHQuZ3JhbnVsZV9zaGlmdCA9IDIxLFxuJiM0MztcdFx0LmZsYWdzID0gMCxcbiYjNDM7XHRcdC5iaXRtYXAgPSBtYXBwZWRfYml0bWFwLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgbWFwX3N0YXJ0LCAxLCBtYXBfbGVuIC8gUEFHRV9TSVpFLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFx1MDAyNmxvZyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0IFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9FTlQsXG4mIzQzO1x0XHQgICAgXCYjMzQ7ZXhwZWN0ZWQgRU5PRU5UIHdoZW4gcXVlcnlpbmcgZXZlci1tYXBwZWQgbG9nIGJlZm9yZSBlbmFibGVtZW50LCBnb3QgJWRcJiMzNDssXG4mIzQzO1x0XHQgICAgZXJybm8pO1xuJiM0MztcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVZFUl9NQVBQRUQsIG1hcF9zdGFydCAmIzQzOyBtYXBfbGVuKTtcbiYjNDM7XHRwcmVfZmF1bHQodmNwdSwgMTYgKiBNaUIsIDMyICogTWlCKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBQQUdFX1NJWkUpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxuJiM0MztcdFx0ICAgIFwmIzM0O2V4cGVjdGVkIEVFWElTVCB3aGVuIGVuYWJsaW5nIEtWTV9DQVBfRVZFUl9NQVBQRUQgdHdpY2UsIGdvdCAlZFwmIzM0OyxcbiYjNDM7XHRcdCAgICBlcnJubyk7XG4mIzQzO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbiYjNDM7XHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xuJiM0MztcbiYjNDM7XHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDIyO1xuJiM0MztcdGxvZy5maXJzdF9ncmFudWxlID0gMHg0O1xuJiM0MztcdGxvZy5udW1fZ3JhbnVsZXMgPSAweDEwO1xuJiM0MztcdG1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XG4mIzQzO1x0bWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweGZmLCAweDAwLCAweGE1LCAweGE1IH0sIDQpO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbiYjNDM7XHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xuJiM0MztcbiYjNDM7XHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDIzO1xuJiM0MztcdGxvZy5maXJzdF9ncmFudWxlID0gMHgyO1xuJiM0MztcdGxvZy5udW1fZ3JhbnVsZXMgPSAweDg7XG4mIzQzO1x0bWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9LCA0KTtcbiYjNDM7XHRtZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4MGYsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XG4mIzQzO1x0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuJiM0MztcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XG4mIzQzO1xuJiM0MztcdGxvZy5udW1fZ3JhbnVsZXMgPSAweGZmO1xuJiM0MztcdHJldCA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuJiM0MztcdFx0ICAgIFwmIzM0O2V4cGVjdGVkIEVJTlZBTCB3aGVuIHF1ZXJ5aW5nIGJleW9uZCByYW5nZSwgZ290ICVkXCYjMzQ7LFxuJiM0MztcdFx0ICAgIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0bG9nLm51bV9ncmFudWxlcyA9IDB4MTA7XG4mIzQzO1x0bG9nLmdyYW51bGVfc2hpZnQgPSAxO1xuJiM0MztcdHJldCA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuJiM0MztcdFx0ICAgIFwmIzM0O2V4cGVjdGVkIEVJTlZBTCB3aXRoIHRvbyBzbWFsbCBncm5hdWxlIHNoaWZ0LCBnb3QgJWRcJiMzNDssXG4mIzQzO1x0XHQgICAgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBZGQgMTI4TUIgb3IgbWVtb3J5IGF0IEdQQSAzMk1CICggLS1cdTAwM2UgWzMyTUIsIDE2ME1CKSApLFxuJiM0MzsgKiBwcmUtZmF1bHQgWzMyTUIsIDY0TUIpLCBhbmQgWzkwTUIsIDk0TUIpLFxuJiM0MzsgKiByZXF1ZXN0IGFuZCBjaGVjayBiaXRtYXAgZm9yIFsxNk1CLCAxMjBNQikuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3R3b19ibG9ja3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRjb25zdCB1aW50NjRfdCBtYXBfc3RhcnQgPSAweDIwMDAwMDA7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgbWFwX2xlbiA9IDB4ODAwMDAwMDtcbiYjNDM7XHR1OCBtYXBwZWRfYml0bWFwWzddID0geyAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH07XG4mIzQzO1x0dTggZXhwZWN0ZWRfYml0bWFwWzddID0geyAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDYwLCAweDAwLCAweDAwIH07XG4mIzQzO1x0c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0ge1xuJiM0MztcdFx0LmZpcnN0X2dyYW51bGUgPSAweDgsXG4mIzQzO1x0XHQubnVtX2dyYW51bGVzID0gMHgzNCxcbiYjNDM7XHRcdC5ncmFudWxlX3NoaWZ0ID0gMjEsXG4mIzQzO1x0XHQuZmxhZ3MgPSAwLFxuJiM0MztcdFx0LmJpdG1hcCA9IG1hcHBlZF9iaXRtYXAsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcbiYjNDM7XHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBtYXBfc3RhcnQsIDEsIG1hcF9sZW4gLyBQQUdFX1NJWkUsIDApO1xuJiM0MztcbiYjNDM7XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBtYXBfc3RhcnQgJiM0MzsgbWFwX2xlbik7XG4mIzQzO1x0cHJlX2ZhdWx0KHZjcHUsIDMyICogTWlCLCAzMiAqIE1pQik7XG4mIzQzO1x0cHJlX2ZhdWx0KHZjcHUsIDkwICogTWlCLCA0ICogTWlCKTtcbiYjNDM7XG4mIzQzO1x0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuJiM0MztcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XG4mIzQzO1xuJiM0MztcdGxvZy5ncmFudWxlX3NoaWZ0ID0gMjI7XG4mIzQzO1x0bG9nLmZpcnN0X2dyYW51bGUgPSAweDQ7XG4mIzQzO1x0bG9nLm51bV9ncmFudWxlcyA9IDB4MWE7XG4mIzQzO1x0bWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNX0sIDcpO1xuJiM0MztcdG1lbWNweShleHBlY3RlZF9iaXRtYXAsICh1OFtdKXsgMHhmMCwgMHgwZiwgMHgwYywgMHgwMCwgMHhhNSwgMHhhNSwgMHhhNSB9LCA3KTtcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFx1MDAyNmxvZyk7XG4mIzQzO1x0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcbiYjNDM7XG4mIzQzO1x0bG9nLmdyYW51bGVfc2hpZnQgPSAyMztcbiYjNDM7XHRsb2cuZmlyc3RfZ3JhbnVsZSA9IDB4MjtcbiYjNDM7XHRsb2cubnVtX2dyYW51bGVzID0gMHhkO1xuJiM0MztcdG1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNyk7XG4mIzQzO1x0bWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweDNjLCAweDAyLCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDcpO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbiYjNDM7XHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZKSk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9FVkVSX01BUFBFRCkpO1xuJiM0MztcbiYjNDM7XHR0ZXN0X29uZV9wYWdlKCk7XG4mIzQzO1x0dGVzdF9vbmVfYmxvY2soKTtcbiYjNDM7XHR0ZXN0X3R3b19ibG9ja3MoKTtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fdm1faW9jdGxfZW5hYmxlX2NhcCYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gY2FwYWJpbGl0eSBgS1ZNX0NBUF9FVkVSX01BUFBFRGAgYW5kIGEgbmV3IGlvY3RsIGBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPR2AgdG8gdHJhY2sgd2hpY2ggZ3Vlc3QgcGFnZXMgaGF2ZSBldmVyIGJlZW4gbWFwcGVkLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3Rscy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19LVk1gIGFuZCBpcyBzcGVjaWZpYyB0byB4ODYuIFdlIGZvY3VzIG9uIHRoZSBpb2N0bCBlbnRyeSBwb2ludHMgYW5kIHRoZSBURFAgTU1VIHBhZ2UgZmF1bHQgaGFuZGxlciB3aGVyZSB0aGUgdHJhY2tpbmcgaXMgdXBkYXRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMzQ1YWVkNDFjMTI0Y2ViNDkxYTVhYzQ3OGRlODc2MGU0MDgzMzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDE2OjE4OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CmluZGV4IGE1ZjllZTkyZjQzZTguLmNlNmUxZDE1ZDQ4ZDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKQEAgLTY1NjYsNiAmIzQzOzY1NjYsNTMgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRQogICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleQogICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLgogCiYjNDM7NC4xNDUgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0cKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0VWRVJfTUFQUEVECiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NgomIzQzOzpUeXBlOiB2bSBpb2N0bAomIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZwomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvbiBlcnJvcgomIzQzOwomIzQzO0Vycm9yczoKJiM0MzsKJiM0MzsgID09PT09PSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ICBFTk9FTlQgICAgIEtWTV9DQVBfRVZFUl9NQVBQRUQgaGFzIG5vdCBiZWVuIGVuYWJsZWQgZm9yIHRoaXMgVk0KJiM0MzsgIEVJTlZBTCAgICAgYGBncmFudWxlX3NoaWZ0YGAgaXMgYmVsb3cgMjEgKGludGVybmFsIHRyYWNraW5nIGdyYW51bGFyaXR5KSBvcgomIzQzOyAgICAgICAgICAgICBhYm92ZSA2MwomIzQzOyAgRUlOVkFMICAgICBgYGZpcnN0X2dyYW51bGVgYCAmIzQzOyBgYG51bV9ncmFudWxlc2BgIGV4dGVuZGVuZHMgYmV5b25kIHRoZSBtYXhncGEKJiM0MzsgICAgICAgICAgICAgc2V0IHVwIHdoZW4gS1ZNX0NBUF9FVkVSX01BUFBFRCB3YXMgZW5hYmxlZAomIzQzOyAgRUlOVkFMICAgICBgYGZsYWdzYGAgaXMgbm90IDAKJiM0MzsgIEVGQVVMVCAgICAgY29weV97ZnJvbSx0b31fdXNlciBvZiBgYGJpdG1hcGBgIGZhaWxlZCwgZS5nLiwgYml0bWFwIHdhc24mIzM5O3QKJiM0MzsgICAgICAgICAgICAgc3VmZmljaWVudGx5IHNpemVkCiYjNDM7ICBFTk9NRU0gICAgIHNldHRpbmcgdXAgdGVtcG9yYXJ5IGJpdG1hcCBmb3IgY29weWluZyB0byB1c2Vyc3BhY2UgZmFpbGVkCiYjNDM7ICA9PT09PT0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1RoaXMgcmVxdWlyZXMgS1ZNX0NBUF9FVkVSX01BUFBFRCB0byBoYXZlIGJlZW4gZW5hYmxlZCBmb3IgdGhlIFZNIHdpdGggYSBtYXhncGEKJiM0MztwYXJhbWV0ZXIuCiYjNDM7CiYjNDM7OjoKJiM0MzsKJiM0MzsgIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIHsKJiM0MzsJX191NjQgZmlyc3RfZ3JhbnVsZTsKJiM0MzsJX191NjQgbnVtX2dyYW51bGVzOwomIzQzOwlfX3UzMiBncmFudWxlX3NoaWZ0OwomIzQzOwlfX3UzMiBmbGFnczsKJiM0MzsJdW5pb24gewomIzQzOwkJdm9pZCBfX3VzZXIgKmJpdG1hcDsKJiM0MzsJCV9fdTY0IHBhZGRpbmc7CiYjNDM7CX07CiYjNDM7CV9fdTY0IHJlc2VydmVkWzRdOwomIzQzOyAgfTsKJiM0MzsKJiM0MztgYGZpcnN0X2dyYW51bGVgYCwgYGBudW1fZ3JhbnVsZXNgYCwgYW5kIGBgZ3JhbnVsZV9zaGlmdGBgIGVuY29kZSB0aGUgR1BBIHJhbmdlCiYjNDM7dGhlIGNhbGxlciBpbnF1aXJlcyBhYm91dC4gRm9yIGV4YW1wbGUsIHZhbHVlcyBvZiAyLCAyNSwgYW5kIDIxLCByZXNwZWN0aXZlbHksCiYjNDM7aW5xdWlyZSBhYm91dCB0aGUgYWRkcmVzcyByYW5nZSBbNE1CLCA1NE1CKS4gVGhlIGNhbGxlciBwcm92aWRlcyBhIGBgYml0bWFwYGAKJiM0MztvZiB0aGUgcmVxdWlyZWQgbGVuZ3RoIChpbiB0aGUgYWJvdmUgY2FzZSA0IGJ5dGVzKS4gVGhlIGNhbGwgd2lsbCB3cml0ZSBhIDEgaWYKJiM0MzthbnkgbWVtb3J5IGluIHRoZSBncmFudWxlIGhhcyBiZWVuIG1hcHBlZCBhdCBzb21lIHBvaW50IHNpbmNlCiYjNDM7S1ZNX0NBUF9FVkVSX01BUFBFRCB3YXMgZW5hYmxlZCwgMCBpZiBub3QuCiYjNDM7CiAuLiBfa3ZtX3J1bjoKIAogNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlCkBAIC04OTQ5LDYgJiM0Mzs4OTk2LDI2IEBAIGVuYWJsZWQsIGNtbWEgY2FuJiMzOTt0IGJlIGVuYWJsZWQgYW55bW9yZSBhbmQgcGZtZmkgYW5kIHRoZSBzdG9yYWdlIGtleQogaW50ZXJwcmV0YXRpb24gYXJlIGRpc2FibGVkLiBJZiBjbW1hIGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZCBvciB0aGUKIGhwYWdlXzJnIG1vZHVsZSBwYXJhbWV0ZXIgaXMgbm90IHNldCB0byAxLCAtRUlOVkFMIGlzIHJldHVybmVkLgogCiYjNDM7Ny40OCBLVk1fQ0FQX0VWRVJfTUFQUEVECiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NgomIzQzOzpQYXJhbWV0ZXJzOiBhcmdzWzBdIC0gbWF4aW11bSBHUEEgdG8gdHJhY2sgbWFwcGVkIG1lbW9yeQomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIFREUCBpcyBub3QgYXZhaWxhYmxlLCAtRUlOVkFMIGlmIGFyZ3NbMF0KJiM0MzsgICAgICAgICAgaXMgMCBvciBiZXlvbmQgdGhlIG1heGltdW0gcG9zc2libGUgR1BBLCAtRU5PTUVNIGlmIHRyYWNraW5nIHNldHVwCiYjNDM7ICAgICAgICAgIGZhaWxlZCwgLUVFWElTVCBpZiBhbHJlYWR5IHNldCB1cC4KJiM0MzsKJiM0MztUaGUgcHJlc2VuY2Ugb2YgdGhpcyBjYXBhYmlsaXR5IGluZGljYXRlcyB0aGF0IEtWTSBjYW4gdHJhY2sgaWYgcGFnZXMgaGF2ZSBldmVyCiYjNDM7YmVlbiBtYXBwZWQgYnkgdGhlIGd1ZXN0LiBUaGlzIGFsbG93cyBhIGNvbnNlcnZhdGl2ZSBlc3RpbWF0ZSBvZiB3aGljaCBwYWdlcwomIzQzO2FyZSBub3QgemVybyBhbnkgbW9yZS4KJiM0MzsKJiM0MztPbiBlbmFibGluZyB0aGUgY2FwYWJpbGl0eSwgdGhlIGNhbGxlciBwcm92aWRlcyBhIG1heCBHUEEgdmFsdWUuIEtWTSB3aWxsIHRoZW4KJiM0Mzt0cmFjayBHUEFzIGJldHdlZW4gMCBhbmQgdGhpcyB2YWx1ZS4gTm90ZSB0aGF0IHRoaXMgY2FwYWJpbGl0eSBjYW4gYmUgZW5hYmxlZAomIzQzO2F0IGFueSB0aW1lLCBidXQgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gZW5hYmxlIGl0IGJlZm9yZSB2Q1BVcyBzdGFydAomIzQzO3J1bm5pbmcuIEFueSBwYWdlIGFjY2Vzc2VzIGJ5IHRoZSBndWVzdCBiZWZvcmUgY2FwYWJpbGl0eSBlbmFibGVtZW50IHdpbGwgbm90CiYjNDM7YmUgdHJhY2tlZC4gVGhlIG1heCBHUEEgdmFsdWUgY2FuIG9ubHkgYmUgc2V0IG9uY2U7IHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8KJiM0MztlbmFibGUgdGhlIGNhcGFiaWxpdHkgd2l0aCBhIGRpZmZlcmVudCBvciBldmVuIHNhbWUgdmFsdWUgd2lsbCBmYWlsLgomIzQzOwogOC4gT3RoZXIgY2FwYWJpbGl0aWVzLgogPT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBiNTE3MjU3YTYzMTUzLi5jNjA3YTkxOTNmNDAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE1MzMsNiAmIzQzOzE1MzMsMTUgQEAgc3RydWN0IGt2bV9hcmNoIHsKIAkgKi8KIAlib29sIHNoYWRvd19yb290X2FsbG9jYXRlZDsKIAomIzQzOwkvKgomIzQzOwkgKiBUcmFja3Mgd2hpY2ggZ3Vlc3QgcGFnZXMgaGF2ZSBldmVyIGJlZW4gbWFwcGVkLiBUaGlzIGFsbG93cwomIzQzOwkgKiB0cmFja2luZyB3aGljaCBtZW1vcnkgaXMgZ3VhcmFudGVlZCB0byBzdGlsbCBiZSB6ZXJvLCBlLmcuLCBmb3IKJiM0MzsJICogc3VwcG9ydGluZyB0aGUgSHZFeHRDYWxsR2V0Qm9vdFplcm9lZE1lbW9yeSBlbmxpZ2h0ZW5tZW50LgomIzQzOwkgKiBUaGUgZ3JhbnVsYXJpdHkgaXMgZGVmaW5lZCBieSBLVk1fRVZFUl9NQVBQRURfU0hJRlQuCiYjNDM7CSAqLwomIzQzOwl1bnNpZ25lZCBsb25nICpldmVyX21hcHBlZF9iaXRtYXA7CiYjNDM7CXU2NCBldmVyX21hcHBlZF9tYXhfZ3BhOwomIzQzOwogI2lmZGVmIENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkcKIAkvKgogCSAqIElmIHNldCwgdGhlIFZNIGhhcyAob3IgaGFkKSBhbiBleHRlcm5hbCB3cml0ZSB0cmFja2luZyB1c2VyLCBhbmQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvZXZlcl9tYXBwZWQuaCBiL2FyY2gveDg2L2t2bS9tbXUvZXZlcl9tYXBwZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mNzk1MzM3ZTY4NDg2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oCkBAIC0wLDAgJiM0MzsxLDMzIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9fS1ZNX1g4Nl9FVkVSX01BUFBFRF9ICiYjNDM7I2RlZmluZSBfX0tWTV9YODZfRVZFUl9NQVBQRURfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVHJhY2sgaWYgcGFnZXMgaGF2ZSBldmVyIGJlZW4gbWFwcGVkIGF0IGFuIGludGVybmFsIGdyYW51bGFyaXR5IG9mIDIgTUIuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLVk1fRVZFUl9NQVBQRURfU0hJRlQgMjEKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKJiM0MzsJCQkJCSAgICAgdTY0IG5wYWdlcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGludCBzaGlmdCA9IEtWTV9FVkVSX01BUFBFRF9TSElGVCAtIFBBR0VfU0hJRlQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBnZm4gJmd0OyZndDsgc2hpZnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW5kID0gKGdmbiAmIzQzOyBucGFnZXMgJiM0MzsgKDFVTCAmbHQ7Jmx0OyBzaGlmdCkgLSAxKSAmZ3Q7Jmd0OyBzaGlmdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwomIzQzOwllbmQgPSBtaW4oZW5kLCBrdm0tJmd0O2FyY2guZXZlcl9tYXBwZWRfbWF4X2dwYSAmZ3Q7Jmd0OyBLVk1fRVZFUl9NQVBQRURfU0hJRlQpOwomIzQzOwlmb3IgKGkgPSBzdGFydDsgaSAmbHQ7IGVuZDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiByZS1tYXBwaW5nIHphcHBlZCBwYWdlcyBhbmQgYnJlYWtpbmcgdXAgb2YgaHVnZSBwYWdlcyBjYW4KJiM0MzsJCSAqIHRyaWdnZXIgYSBudW1iZXIgb2Ygc2V0cyBvbiBhbHJlYWR5IHNldCBiaXRzLCBzbyB0ZXN0IGZpcnN0CiYjNDM7CQkgKiBiZWZvcmUgYXRvbWljLXNldC4gU2luY2UgYml0cyBjYW4gbmV2ZXIgYmUgdW5zZXQgYWdhaW4sIHRoaXMKJiM0MzsJCSAqIGlzIHNhZmUgYWdhaW5zdCByYWNlcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCF0ZXN0X2JpdChpLCBrdm0tJmd0O2FyY2guZXZlcl9tYXBwZWRfYml0bWFwKSkKJiM0MzsJCQlzZXRfYml0KGksIGt2bS0mZ3Q7YXJjaC5ldmVyX21hcHBlZF9iaXRtYXApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZiAvKiBfX0tWTV9YODZfRVZFUl9NQVBQRURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwppbmRleCBjZTNmMmVmYWRiMDViLi5lYTJhMzdhMDRiMmZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwpAQCAtMSw2ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAmIzM0OzogJiMzNDsgZm10CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2V2ZXJfbWFwcGVkLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttbXUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O21tdV9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bW11dHJhY2UuaCYjMzQ7CkBAIC01NTQsNiAmIzQzOzU1NSwxNyBAQCBzdGF0aWMgaW50IF9faGFuZGxlX2NoYW5nZWRfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLAogCQlyZXR1cm4gMDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogV2hlbmV2ZXIgYSBwYWdlIGJlY29tZXMgYSBmcmVzaCBsZWFmLCBtYXJrIHRoZSBtZW1vcnkgYXMgbWFwcGVkLgomIzQzOwkgKiBPbiBodWdlcGFnZSBicmVha3VwLCB0aGlzIHRyaWdnZXJzIGZvciBlYWNoIG5ldyBsb3dlci1sZXZlbCBwYWdlLAomIzQzOwkgKiBldmVuIHRob3VnaCB0aGUgbWVtb3J5IHdhcyBhbHJlYWR5IG1hcmtlZCB3aGVuIHRoZSBodWdlcGFnZSB3YXMKJiM0MzsJICogbWFwcGVkLCBidXQgdGhlIG92ZXJoZWFkIGlzIG5lZ2xpZ2libGUuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkoa3ZtLSZndDthcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCkgJmFtcDsmYW1wOwomIzQzOwkgICAgaXNfbGVhZiAmYW1wOyZhbXA7ICF3YXNfbGVhZikgewomIzQzOwkJa3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZShrdm0sIGdmbiwgS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBSZWN1cnNpdmVseSBoYW5kbGUgY2hpbGQgUFRzIGlmIHRoZSBjaGFuZ2UgcmVtb3ZlZCBhIHN1YnRyZWUgZnJvbQogCSAqIHRoZSBwYWdpbmcgc3RydWN0dXJlLiAgTm90ZSB0aGUgV0FSTiBvbiB0aGUgUEZOIGNoYW5naW5nIHdpdGhvdXQgdGhlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggMDYyNmU4MzVlOWViNy4uODljYmNmODM5OWY0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMjUsNiAmIzQzOzI1LDcgQEAKICNpbmNsdWRlICYjMzQ7dHNzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtyZWdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrdm1fZW11bGF0ZS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O21tdS9ldmVyX21hcHBlZC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bW11L3BhZ2VfdHJhY2suaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3g4Ni5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Y3B1aWQuaCYjMzQ7CkBAIC0yMzkxLDYgJiM0MzsyMzkyLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dCkKIAljYXNlIEtWTV9DQVBfUkVBRE9OTFlfTUVNOgogCQlyID0ga3ZtID8ga3ZtX2FyY2hfaGFzX3JlYWRvbmx5X21lbShrdm0pIDogMTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgS1ZNX0NBUF9FVkVSX01BUFBFRDoKJiM0MzsJCXIgPSAodGRwX2VuYWJsZWQgJmFtcDsmYW1wOyBJU19FTkFCTEVEKENPTkZJR19YODZfNjQpKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTQxOTAsNiAmIzQzOzQxOTQsMzYgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKIAkJYnJlYWs7CiAJfQomIzQzOwljYXNlIEtWTV9DQVBfRVZFUl9NQVBQRUQ6IHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgKm1hcHBlZF9iaXRtYXA7CiYjNDM7CQl1bnNpZ25lZCBsb25nIG51bV9ncmFudWxlczsKJiM0MzsKJiM0MzsJCXIgPSAwOwomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAoIXRkcF9lbmFibGVkKSB7CiYjNDM7CQkJciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJfSBlbHNlIGlmIChrdm0tJmd0O2FyY2guZXZlcl9tYXBwZWRfYml0bWFwKSB7CiYjNDM7CQkJciA9IC1FRVhJU1Q7CiYjNDM7CQl9IGVsc2UgaWYgKGNhcC0mZ3Q7YXJnc1swXSA9PSAwIHx8CiYjNDM7CQkJICAgY2FwLSZndDthcmdzWzBdICZndDsgKDFVTEwgJmx0OyZsdDsga3ZtX2hvc3QubWF4cGh5YWRkcikpIHsKJiM0MzsJCQlyID0gLUVJTlZBTDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbnVtX2dyYW51bGVzID0gRElWX1JPVU5EX1VQKGNhcC0mZ3Q7YXJnc1swXSwgMVVMTCAmbHQ7Jmx0OyBLVk1fRVZFUl9NQVBQRURfU0hJRlQpOwomIzQzOwkJCW1hcHBlZF9iaXRtYXAgPQomIzQzOwkJCQlrdmNhbGxvYyhCSVRTX1RPX0xPTkdTKG51bV9ncmFudWxlcyksCiYjNDM7CQkJCQkgc2l6ZW9mKGxvbmcpLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwkJCWlmICghbWFwcGVkX2JpdG1hcCkKJiM0MzsJCQkJciA9IC1FTk9NRU07CiYjNDM7CQkJZWxzZSB7CiYjNDM7CQkJCXdyaXRlX2xvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJCQkJa3ZtLSZndDthcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCA9IG1hcHBlZF9iaXRtYXA7CiYjNDM7CQkJCWt2bS0mZ3Q7YXJjaC5ldmVyX21hcHBlZF9tYXhfZ3BhID0gbnVtX2dyYW51bGVzICZsdDsmbHQ7IEtWTV9FVkVSX01BUFBFRF9TSElGVDsKJiM0MzsJCQkJd3JpdGVfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiAJZGVmYXVsdDoKIAkJciA9IC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtNDE5Nyw2ICYjNDM7NDIzMSw3MyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLAogCXJldHVybiByOwogfQogCiYjNDM7c3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZyhzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQkgICAgc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgKmxvZykKJiM0Mzt7CiYjNDM7CXU2NCBtYXhfZ3JhbnVsZXM7CiYjNDM7CXVuc2lnbmVkIGludCBjb2Fyc2VuZXNzOwomIzQzOwl1bnNpZ25lZCBsb25nICpiaXRtYXA7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpZiAoIWt2bS0mZ3Q7YXJjaC5ldmVyX21hcHBlZF9iaXRtYXApCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKGxvZy0mZ3Q7ZmxhZ3MpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGxvZy0mZ3Q7Z3JhbnVsZV9zaGlmdCAmbHQ7IEtWTV9FVkVSX01BUFBFRF9TSElGVCB8fCBsb2ctJmd0O2dyYW51bGVfc2hpZnQgJmd0Oz0gNjQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbWF4X2dyYW51bGVzID0ga3ZtLSZndDthcmNoLmV2ZXJfbWFwcGVkX21heF9ncGEgJmd0OyZndDsgbG9nLSZndDtncmFudWxlX3NoaWZ0OwomIzQzOwlpZiAobG9nLSZndDtudW1fZ3JhbnVsZXMgJmd0OyBtYXhfZ3JhbnVsZXMgfHwKJiM0MzsJICAgIGxvZy0mZ3Q7Zmlyc3RfZ3JhbnVsZSAmZ3Q7IG1heF9ncmFudWxlcyAtIGxvZy0mZ3Q7bnVtX2dyYW51bGVzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgcmVxdWVzdCB1c2VzIHRoZSBzYW1lIGdyYW51bGFyaXR5IGFzIG91ciBpbnRlcm5hbAomIzQzOwkgKiB0cmFja2luZywgYW5kIHdlIGFyZSBieXRlLWFsaWduZWQgKHRoZSBleHBlY3RlZCBjb21tb24gY2FzZSksIHdlIGNhbgomIzQzOwkgKiBqdXN0IGNvcHlfdG9fdXNlci4gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaXRtYXAgdG8gcGFzcy4KJiM0MzsJICoKJiM0MzsJICogV2UgZG8gbm90IGxvY2sgYWdhaW5zdCBjb25jdXJyZW50IHZDUFVzIG1hcHBpbmcgbmV3IG1lbW9yeSBvbiBhbnkgb2YKJiM0MzsJICogdGhlc2Ugb3BlcmF0aW9ucy4gQml0cyBhcmUgc2V0IGF0b21pY2FsbHkgYW5kIG5ldmVyIGNsZWFyZWQsIHNvIGFueSByYWNlCiYjNDM7CSAqIGhlcmUgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIHdyaXRlIGhhcHBlbmluZyBhZnRlciB0aGlzIGhhbmRsZXIKJiM0MzsJICogZmluaXNoZXMgYnV0IGJlZm9yZSB0aGUgY2FsbGVyIHJlYWRzIHRoZSByZXN1bHRzLgomIzQzOwkgKi8KJiM0MzsJY29hcnNlbmVzcyA9IGxvZy0mZ3Q7Z3JhbnVsZV9zaGlmdCAtIEtWTV9FVkVSX01BUFBFRF9TSElGVDsKJiM0MzsJaWYgKGNvYXJzZW5lc3MgPT0gMCAmYW1wOyZhbXA7ICEobG9nLSZndDtmaXJzdF9ncmFudWxlICZhbXA7IDcpICZhbXA7JmFtcDsgIShsb2ctJmd0O251bV9ncmFudWxlcyAmYW1wOyA3KSkgewomIzQzOwkJaWYgKGNvcHlfdG9fdXNlcihsb2ctJmd0O2JpdG1hcCwKJiM0MzsJCQkJICh1OCAqKWt2bS0mZ3Q7YXJjaC5ldmVyX21hcHBlZF9iaXRtYXAgJiM0MzsgbG9nLSZndDtmaXJzdF9ncmFudWxlIC8gOCwKJiM0MzsJCQkJIGxvZy0mZ3Q7bnVtX2dyYW51bGVzIC8gOCkpCiYjNDM7CQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwliaXRtYXAgPSBrdnphbGxvYyhESVZfUk9VTkRfVVAobG9nLSZndDtudW1fZ3JhbnVsZXMsIDgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwlpZiAoIWJpdG1hcCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlmb3IgKHU2NCBncmFuID0gbG9nLSZndDtmaXJzdF9ncmFudWxlOwomIzQzOwkgICAgIGdyYW4gJmx0OyBsb2ctJmd0O2ZpcnN0X2dyYW51bGUgJiM0MzsgbG9nLSZndDtudW1fZ3JhbnVsZXM7CiYjNDM7CSAgICAgZ3JhbiYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBncmFuICZsdDsmbHQ7IGNvYXJzZW5lc3M7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICYjNDM7ICgxVUwgJmx0OyZsdDsgY29hcnNlbmVzcyk7CiYjNDM7CiYjNDM7CQlpZiAoZmluZF9uZXh0X2JpdChrdm0tJmd0O2FyY2guZXZlcl9tYXBwZWRfYml0bWFwLCBlbmQsIHN0YXJ0KSAmbHQ7IGVuZCkKJiM0MzsJCQlfX3NldF9iaXQoZ3JhbiAtIGxvZy0mZ3Q7Zmlyc3RfZ3JhbnVsZSwgYml0bWFwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY29weV90b191c2VyKGxvZy0mZ3Q7Yml0bWFwLCBiaXRtYXAsIERJVl9ST1VORF9VUChsb2ctJmd0O251bV9ncmFudWxlcywgOCkpKSB7CiYjNDM7CQlyID0gLUVGQVVMVDsKJiM0MzsJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJciA9IDA7CiYjNDM7CiYjNDM7b3V0X2ZyZWU6CiYjNDM7CWt2ZnJlZShiaXRtYXApOwomIzQzOwlyZXR1cm4gcjsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX0tWTV9DT01QQVQKIC8qIGZvciBLVk1fWDg2X1NFVF9NU1JfRklMVEVSICovCiBzdHJ1Y3Qga3ZtX21zcl9maWx0ZXJfcmFuZ2VfY29tcGF0IHsKQEAgLTQ3MTAsNiAmIzQzOzQ4MTEsMTUgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9tc3JfZmlsdGVyKGt2bSwgJmFtcDtmaWx0ZXIpOwogCQlicmVhazsKIAl9CiYjNDM7CWNhc2UgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0c6IHsKJiM0MzsJCXN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIG1hcHBlZF9sb2c7CiYjNDM7CiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDttYXBwZWRfbG9nLCBhcmdwLCBzaXplb2YobWFwcGVkX2xvZykpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwkJciA9IGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nKGt2bSwgJmFtcDttYXBwZWRfbG9nKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiAJZGVmYXVsdDoKIAkJciA9IC1FTk9UVFk7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCmluZGV4IDQxOTAxMTA5N2ZhOGUuLmQwYmU5NDk0NmE3N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0NwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5CiYjNDM7I2RlZmluZSBLVk1fQ0FQX0VWRVJfTUFQUEVEIDI1MAogCiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgewogCV9fdTMyIGlycWNoaXA7CkBAIC0xNjcwLDQgJiM0MzsxNjcxLDE4IEBAIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7CiAJX191NjQgcGFkZGluZ1s1XTsKIH07CiAKJiM0MzsjZGVmaW5lIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HICBfSU9XKEtWTUlPLCAgMHhkNiwgc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cpCiYjNDM7CiYjNDM7c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgewomIzQzOwlfX3U2NCBmaXJzdF9ncmFudWxlOwomIzQzOwlfX3U2NCBudW1fZ3JhbnVsZXM7CiYjNDM7CV9fdTMyIGdyYW51bGVfc2hpZnQ7CiYjNDM7CV9fdTMyIGZsYWdzOwomIzQzOwl1bmlvbiB7CiYjNDM7CQl2b2lkIF9fdXNlciAqYml0bWFwOwomIzQzOwkJX191NjQgcGFkZGluZzsKJiM0MzsJfTsKJiM0MzsJX191NjQgcmVzZXJ2ZWRbNF07CiYjNDM7fTsKJiM0MzsKICNlbmRpZiAvKiBfX0xJTlVYX0tWTV9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQppbmRleCA0YWNlMTI2MDZlOTM3Li4xZWIwYmFjMTkyMGRjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTE2Miw2ICYjNDM7MTYyLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSByc2VxX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gc3RlYWxfdGltZQogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzeXN0ZW1fY291bnRlcl9vZmZzZXRfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGV2ZXJfbWFwcGVkX3Rlc3QKIAogIyBDb21waWxlZCBvdXRwdXRzIHVzZWQgYnkgdGVzdCB0YXJnZXRzCiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRF94ODYgJiM0Mzs9IHg4Ni9ueF9odWdlX3BhZ2VzX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ldmVyX21hcHBlZF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZXZlcl9tYXBwZWRfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjc2NzIzZjBjOWVlMmMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZXZlcl9tYXBwZWRfdGVzdC5jCkBAIC0wLDAgJiM0MzsxLDE5MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBLVk0gZXZlci1tYXBwZWQgYml0bWFwIHRlc3QKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiwgTnV0YW5peCwgSW5jLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3V0aWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7a3ZtX3V0aWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cHJvY2Vzc29yLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBLaUIgMTAyNHUKJiM0MzsjZGVmaW5lIE1pQiAoMTAyNCAqIEtpQikKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHVpbnQ2NF90IGJhc2VfZ3BhLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfYml0bWFwc19lcXVhbCh1OCBleHBlY3RlZFtdLCB1OCBhY3R1YWxbXSwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykgewomIzQzOwkJVEVTVF9BU1NFUlQoZXhwZWN0ZWRbaV0gPT0gYWN0dWFsW2ldLAomIzQzOwkJCSAgICAmIzM0O2J5dGUgJWxkLCBleHBlY3RlZCAweCUwMngsIGdvdCAweCUwMngmIzM0OywKJiM0MzsJCQkgICAgaSwgZXhwZWN0ZWRbaV0sIGFjdHVhbFtpXSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcHJlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHN0YXJ0LCB1NjQgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHJhbmdlID0gewomIzQzOwkJLmdwYSA9IHN0YXJ0LAomIzQzOwkJLnNpemUgPSBsZW4sCiYjNDM7CQkuZmxhZ3MgPSAwLAomIzQzOwl9OwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCAmYW1wO3JhbmdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9vbmVfcGFnZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHJhbmdlID0gewomIzQzOwkJLmdwYSA9IDB4MCwKJiM0MzsJCS5zaXplID0gUEFHRV9TSVpFLAomIzQzOwkJLmZsYWdzID0gMCwKJiM0MzsJfTsKJiM0MzsJdW5zaWduZWQgY2hhciBtYXBwZWRfYml0bWFwOwomIzQzOwlzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyBsb2cgPSB7CiYjNDM7CQkuZmlyc3RfZ3JhbnVsZSA9IDAsCiYjNDM7CQkubnVtX2dyYW51bGVzID0gMSwKJiM0MzsJCS5ncmFudWxlX3NoaWZ0ID0gMjEsCiYjNDM7CQkuZmxhZ3MgPSAwLAomIzQzOwkJLmJpdG1hcCA9ICZhbXA7bWFwcGVkX2JpdG1hcCwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X2NvZGUpOwomIzQzOwomIzQzOwl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBQQUdFX1NJWkUpOwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCAmYW1wO3JhbmdlKTsKJiM0MzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCAmYW1wO2xvZyk7CiYjNDM7CVRFU1RfQVNTRVJUKG1hcHBlZF9iaXRtYXAgPT0gMHgxLCAmIzM0O2V4cGVjdGVkIDB4MSwgZ290IDB4JXgmIzM0OywgbWFwcGVkX2JpdG1hcCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQWRkIDY0TUIgb3IgbWVtb3J5IGF0IEdQQSAxNk1CICggLS0mZ3Q7IFsxNk1CLCA4ME1CKSApLAomIzQzOyAqIHByZS1mYXVsdCBbMTZNQiwgNDhNQiksIHJlcXVlc3QgYW5kIGNoZWNrIGJpdG1hcCBmb3IgWzE2TUIsIDgwTUIpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfb25lX2Jsb2NrKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwljb25zdCB1aW50NjRfdCBtYXBfc3RhcnQgPSAweDEwMDAwMDA7CiYjNDM7CWNvbnN0IHVpbnQ2NF90IG1hcF9sZW4gPSAweDQwMDAwMDA7CiYjNDM7CXU4IG1hcHBlZF9iaXRtYXBbNF0gPSB7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfTsKJiM0MzsJdTggZXhwZWN0ZWRfYml0bWFwWzRdID0geyAweGZmLCAweGZmLCAweDAwLCAweDAwIH07CiYjNDM7CXN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIGxvZyA9IHsKJiM0MzsJCS5maXJzdF9ncmFudWxlID0gMHg4LAomIzQzOwkJLm51bV9ncmFudWxlcyA9IDB4MjAsCiYjNDM7CQkuZ3JhbnVsZV9zaGlmdCA9IDIxLAomIzQzOwkJLmZsYWdzID0gMCwKJiM0MzsJCS5iaXRtYXAgPSBtYXBwZWRfYml0bWFwLAomIzQzOwl9OwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfY29kZSk7CiYjNDM7CXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIG1hcF9zdGFydCwgMSwgbWFwX2xlbiAvIFBBR0VfU0laRSwgMCk7CiYjNDM7CiYjNDM7CXJldCA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCAmYW1wO2xvZyk7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCAmYW1wOyZhbXA7IGVycm5vID09IEVOT0VOVCwKJiM0MzsJCSAgICAmIzM0O2V4cGVjdGVkIEVOT0VOVCB3aGVuIHF1ZXJ5aW5nIGV2ZXItbWFwcGVkIGxvZyBiZWZvcmUgZW5hYmxlbWVudCwgZ290ICVkJiMzNDssCiYjNDM7CQkgICAgZXJybm8pOwomIzQzOwl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBtYXBfc3RhcnQgJiM0MzsgbWFwX2xlbik7CiYjNDM7CXByZV9mYXVsdCh2Y3B1LCAxNiAqIE1pQiwgMzIgKiBNaUIpOwomIzQzOwomIzQzOwlyZXQgPSBfX3ZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVZFUl9NQVBQRUQsIFBBR0VfU0laRSk7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCAmYW1wOyZhbXA7IGVycm5vID09IEVFWElTVCwKJiM0MzsJCSAgICAmIzM0O2V4cGVjdGVkIEVFWElTVCB3aGVuIGVuYWJsaW5nIEtWTV9DQVBfRVZFUl9NQVBQRUQgdHdpY2UsIGdvdCAlZCYjMzQ7LAomIzQzOwkJICAgIGVycm5vKTsKJiM0MzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCAmYW1wO2xvZyk7CiYjNDM7CWFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7CiYjNDM7CiYjNDM7CWxvZy5ncmFudWxlX3NoaWZ0ID0gMjI7CiYjNDM7CWxvZy5maXJzdF9ncmFudWxlID0gMHg0OwomIzQzOwlsb2cubnVtX2dyYW51bGVzID0gMHgxMDsKJiM0MzsJbWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9LCA0KTsKJiM0MzsJbWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweGZmLCAweDAwLCAweGE1LCAweGE1IH0sIDQpOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csICZhbXA7bG9nKTsKJiM0MzsJYXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTsKJiM0MzsKJiM0MzsJbG9nLmdyYW51bGVfc2hpZnQgPSAyMzsKJiM0MzsJbG9nLmZpcnN0X2dyYW51bGUgPSAweDI7CiYjNDM7CWxvZy5udW1fZ3JhbnVsZXMgPSAweDg7CiYjNDM7CW1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7CiYjNDM7CW1lbWNweShleHBlY3RlZF9iaXRtYXAsICh1OFtdKXsgMHgwZiwgMHhhNSwgMHhhNSwgMHhhNSB9LCA0KTsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCAmYW1wO2xvZyk7CiYjNDM7CWFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7CiYjNDM7CiYjNDM7CWxvZy5udW1fZ3JhbnVsZXMgPSAweGZmOwomIzQzOwlyZXQgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgJmFtcDtsb2cpOwomIzQzOwlURVNUX0FTU0VSVChyZXQgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5WQUwsCiYjNDM7CQkgICAgJiMzNDtleHBlY3RlZCBFSU5WQUwgd2hlbiBxdWVyeWluZyBiZXlvbmQgcmFuZ2UsIGdvdCAlZCYjMzQ7LAomIzQzOwkJICAgIGVycm5vKTsKJiM0MzsKJiM0MzsJbG9nLm51bV9ncmFudWxlcyA9IDB4MTA7CiYjNDM7CWxvZy5ncmFudWxlX3NoaWZ0ID0gMTsKJiM0MzsJcmV0ID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csICZhbXA7bG9nKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVkFMLAomIzQzOwkJICAgICYjMzQ7ZXhwZWN0ZWQgRUlOVkFMIHdpdGggdG9vIHNtYWxsIGdybmF1bGUgc2hpZnQsIGdvdCAlZCYjMzQ7LAomIzQzOwkJICAgIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBZGQgMTI4TUIgb3IgbWVtb3J5IGF0IEdQQSAzMk1CICggLS0mZ3Q7IFszMk1CLCAxNjBNQikgKSwKJiM0MzsgKiBwcmUtZmF1bHQgWzMyTUIsIDY0TUIpLCBhbmQgWzkwTUIsIDk0TUIpLAomIzQzOyAqIHJlcXVlc3QgYW5kIGNoZWNrIGJpdG1hcCBmb3IgWzE2TUIsIDEyME1CKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3R3b19ibG9ja3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CWNvbnN0IHVpbnQ2NF90IG1hcF9zdGFydCA9IDB4MjAwMDAwMDsKJiM0MzsJY29uc3QgdWludDY0X3QgbWFwX2xlbiA9IDB4ODAwMDAwMDsKJiM0MzsJdTggbWFwcGVkX2JpdG1hcFs3XSA9IHsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9OwomIzQzOwl1OCBleHBlY3RlZF9iaXRtYXBbN10gPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAgfTsKJiM0MzsJc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0gewomIzQzOwkJLmZpcnN0X2dyYW51bGUgPSAweDgsCiYjNDM7CQkubnVtX2dyYW51bGVzID0gMHgzNCwKJiM0MzsJCS5ncmFudWxlX3NoaWZ0ID0gMjEsCiYjNDM7CQkuZmxhZ3MgPSAwLAomIzQzOwkJLmJpdG1hcCA9IG1hcHBlZF9iaXRtYXAsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF9jb2RlKTsKJiM0MzsJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgbWFwX3N0YXJ0LCAxLCBtYXBfbGVuIC8gUEFHRV9TSVpFLCAwKTsKJiM0MzsKJiM0MzsJdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FVkVSX01BUFBFRCwgbWFwX3N0YXJ0ICYjNDM7IG1hcF9sZW4pOwomIzQzOwlwcmVfZmF1bHQodmNwdSwgMzIgKiBNaUIsIDMyICogTWlCKTsKJiM0MzsJcHJlX2ZhdWx0KHZjcHUsIDkwICogTWlCLCA0ICogTWlCKTsKJiM0MzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCAmYW1wO2xvZyk7CiYjNDM7CWFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7CiYjNDM7CiYjNDM7CWxvZy5ncmFudWxlX3NoaWZ0ID0gMjI7CiYjNDM7CWxvZy5maXJzdF9ncmFudWxlID0gMHg0OwomIzQzOwlsb2cubnVtX2dyYW51bGVzID0gMHgxYTsKJiM0MzsJbWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNX0sIDcpOwomIzQzOwltZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4ZjAsIDB4MGYsIDB4MGMsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNyk7CiYjNDM7CXZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgJmFtcDtsb2cpOwomIzQzOwlhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpOwomIzQzOwomIzQzOwlsb2cuZ3JhbnVsZV9zaGlmdCA9IDIzOwomIzQzOwlsb2cuZmlyc3RfZ3JhbnVsZSA9IDB4MjsKJiM0MzsJbG9nLm51bV9ncmFudWxlcyA9IDB4ZDsKJiM0MzsJbWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9LCA3KTsKJiM0MzsJbWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweDNjLCAweDAyLCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDcpOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csICZhbXA7bG9nKTsKJiM0MzsJYXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSkpOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX0VWRVJfTUFQUEVEKSk7CiYjNDM7CiYjNDM7CXRlc3Rfb25lX3BhZ2UoKTsKJiM0MzsJdGVzdF9vbmVfYmxvY2soKTsKJiM0MzsJdGVzdF90d29fYmxvY2tzKCk7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjU5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIEV2ZXItTWFwcGVkIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNpbmcgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCB0aGUgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYCBpb2N0bCBmb3IgeDg2IEtWTS4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBkZXNpZ25lZCB0byB0cmFjayB3aGljaCBndWVzdCBwYWdlcyBoYXZlICpldmVyKiBiZWVuIG1hcHBlZCwgd2hpY2ggaXMgYSBuZWF0IGNhcGFiaWxpdHkuCgpGaXJzdCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4gWWVwLCBuZXcgaW9jdGwsIG5ldyBjYXBhYmlsaXR5IOKAkyB0aGF0IHNjcmVhbXMgZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFFFTVUsIHN5emthbGxlciwgYWxsIHRob3NlIHRvb2xzIHdpbGwgYmUgYWJsZSB0byB1dGlsaXplIHRoaXMuIEdvb2QuCgpOb3csIHdoZXJlIGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scz8gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3Q6CgoqICAgYGt2bV9ldmVyX21hcHBlZF9zZXRfcmFuZ2VgIC0gc291bmRzIGxpa2UgdGhlIHdvcmtob3JzZSBzZXR0aW5nIGV2ZXItbWFwcGVkIHN0YXR1cywgaW5saW5lZCBpbnRvIGBfX2hhbmRsZV9jaGFuZ2VkX3NwdGVgIHdpdGhpbiBgdGRwX21tdS5jYC4KKiAgIGBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZ2AgLSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgCiogICBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIC0gbW9kaWZpZWQgdG8gaGFuZGxlIHRoZSBuZXcgYEtWTV9DQVBfRVZFUl9NQVBQRURgCiogICBga3ZtX2FyY2hfdm1faW9jdGxgIC0gbW9kaWZpZWQgdG8gaGFuZGxlIHRoZSBuZXcgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYAoKU2luY2UgYGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nYCBpcyBzdGF0aWMsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgdXNlZC4gQWgsIHllcywgaXQgaXMuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5IGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAuIFRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMuCgpMZXQmIzM5O3MgY2hlY2sgYGFyY2gveDg2L2t2bS94ODYuY2AgZm9yIGBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTM5MzE9aW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDIzMy1cbmFyY2gveDg2L2t2bS94ODYuYzo0MjM0OnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2coc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQyMzUtXHRcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyAqbG9nKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz00NDU1PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDgxOS1cbmFyY2gveDg2L2t2bS94ODYuYzo0ODIwOlx0XHRyID0ga3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2coa3ZtLCBcdTAwMjZtYXBwZWRfbG9nKTtcbmFyY2gveDg2L2t2bS94ODYuYy00ODIxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyNQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIEFyY2hpdGVjdHVyZSBmb3IgUG90ZW50aWFsIENhbGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBLVk0gY29kZSBhbmQgdHJ5aW5nIHRvIHRyYWNlIGhvdyB0aGlzIGBfX2hhbmRsZV9jaGFuZ2VkX3NwdGVgIGZ1bmN0aW9uLCB3aGljaCBpcywgaW1wb3J0YW50bHksICpzdGF0aWMqLCBpcyB1c2VkIGluIHRoZSBgdGRwX21tdS5jYCBmaWxlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIC0gSSBrbm93IGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgYXJlIHRoZSBvbmVzIHRvIHN0YXJ0IHdpdGguIEJ1dCByZWFsbHkgd2hhdCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlzLCBkb2VzIGEgKm5vbi1zdGF0aWMqIGZ1bmN0aW9uICppbiB0aGlzIGZpbGUqLCBgdGRwX21tdS5jYCwgY2FsbCB0aGlzIGludGVybmFsIGBfX2hhbmRsZV9jaGFuZ2VkX3NwdGVgIGZ1bmN0aW9uPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbi4gSWYgaXQmIzM5O3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseSwgdGhhdCBuYXJyb3dzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIHNpZ25pZmljYW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19oYW5kbGVfY2hhbmdlZF9zcHRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTM4Nj1zdGF0aWMgdm9pZCBoYW5kbGVfcmVtb3ZlZF9wdChzdHJ1Y3Qga3ZtICprdm0sIHRkcF9wdGVwX3QgcHQsIGJvb2wgc2hhcmVkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTQ3MS0vKipcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQ3MjogKiBfX2hhbmRsZV9jaGFuZ2VkX3NwdGUgLSBoYW5kbGUgYm9va2tlZXBpbmcgYXNzb2NpYXRlZCB3aXRoIGFuIFNQVEUgY2hhbmdlXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00NzMtICogQGt2bToga3ZtIGluc3RhbmNlXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDg2LSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NDg3OnN0YXRpYyBpbnQgX19oYW5kbGVfY2hhbmdlZF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00ODgtXHRcdFx0XHQgZ2ZuX3QgZ2ZuLCB1NjQgb2xkX3NwdGUsIHU2NCBuZXdfc3B0ZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz01OTc9c3RhdGljIHZvaWQgaGFuZGxlX2NoYW5nZWRfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTYwMC17XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo2MDE6XHRLVk1fQlVHX09OKF9faGFuZGxlX2NoYW5nZWRfc3B0ZShrdm0sIHNwLCBnZm4sIG9sZF9zcHRlLCBuZXdfc3B0ZSxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTYwMi1cdFx0XHRcdFx0IGxldmVsLCBzaGFyZWQpLCBrdm0pO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTY0Nz1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgdGRwX21tdV9zZXRfc3B0ZV9hdG9taWMoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTY4MC1cdCAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NjgxOlx0cmV0ID0gX19oYW5kbGVfY2hhbmdlZF9zcHRlKGt2bSwgc3AsIGl0ZXItXHUwMDNlZ2ZuLCBpdGVyLVx1MDAzZW9sZF9zcHRlLFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNjgyLVx0XHRcdFx0ICAgIG5ld19zcHRlLCBpdGVyLVx1MDAzZWxldmVsLCB0cnVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk1MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFBvdGVudGlhbCBLZXkgRnVuY3Rpb25zIGluIGB0ZHBfbW11LmNgKioKCk9rYXksIHNvIGBoYW5kbGVfY2hhbmdlZF9zcHRlYCBhbmQgYHRkcF9tbXVfc2V0X3NwdGVfYXRvbWljYCBib3RoIHVsdGltYXRlbHkgZnVubmVsIGludG8gYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAuIFRoYXQmIzM5O3MgYSBjbGVhciBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgU1BURSBjaGFuZ2VzIGFyZSBtYW5hZ2VkIGluIHRoaXMgVERQIE1NVSBjb250ZXh0LiBNeSB0YXNrIG5vdyBpcyB0byBpZGVudGlmeSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHRkcF9tbXUuY2AgdGhhdCBtaWdodCBwcm92aWRlIGFkZGl0aW9uYWwgaW5zaWdodHMsIHNlcnZpbmcgYXMgcG90ZW50aWFsICYjMzQ7Zm9jdXMgc3ltYm9scyYjMzQ7IHRvIGJ1aWxkIGEgbW9yZSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuIEZpbmRpbmcgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIFNQVEUgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhpcyBtb2R1bGUuIEkgbmVlZCB0byBsb29rIGZvciBmdW5jdGlvbnMgdGhhdCBlaXRoZXIgaW50ZXJhY3Qgd2l0aCBTUFRFcyBkaXJlY3RseSBvciB0aGF0IGNvbnRyb2wgcmVsYXRlZCBhc3BlY3RzIG9mIHRoZSBURFAgTU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQga3ZtX3RkcF9tbXVfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUuaD0zMzE9c3RhdGljIGlubGluZSBib29sIGt2bV9zaGFkb3dfcm9vdF9hbGxvY2F0ZWQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUuaC0zNDEtXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MzQyOmludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pO1xuYXJjaC94ODYva3ZtL21tdS5oLTM0My1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxMzU9c3RhdGljIHZvaWQga3ZtX2Fzc2VydF9nbWVtX2ludmFsaWRhdGVfbG9ja19oZWxkKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTQ2LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTQ3OmludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNDgte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTEyMjI9c3RhdGljIGludCB0ZHBfbW11X3NwbGl0X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMjI4LSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTIyOTppbnQga3ZtX3RkcF9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEyMzAte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTE4OTE9Ym9vbCBrdm1fdGRwX21tdV93cml0ZV9wcm90ZWN0X2dmbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTkxMC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjE5MTE6aW50IGt2bV90ZHBfbW11X2dldF93YWxrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIHU2NCAqc3B0ZXMsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xOTEyLVx0XHRcdCBpbnQgKnJvb3RfbGV2ZWwpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NzI9dm9pZCBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoc3RydWN0IGt2bSAqa3ZtLCBib29sIHNoYXJlZCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC03My1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjc0OmludCBrdm1fdGRwX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTc1LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTEwNj1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3RkcF9tbXVfd2Fsa19sb2NrbGVzc19lbmQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC0xMTAtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDoxMTE6aW50IGt2bV90ZHBfbW11X2dldF93YWxrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIHU2NCAqc3B0ZXMsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC0xMTItXHRcdFx0IGludCAqcm9vdF9sZXZlbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNjQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBLVk0gY29kZSwgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgZmV3IGtleSBmdW5jdGlvbnMgdG8gemVybyBpbiBvbi4gYGt2bV90ZHBfbW11X21hcGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBhZ2UgZmF1bHQgcGF0aCwgYnV0IHRoZSByZWFsIGVudHJ5IHBvaW50cyBmb3IgdGhlc2UgY2FwYWJpbGl0aWVzIGFyZSBga3ZtX2FyY2hfdm1faW9jdGxgIGZvciBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgIGFuZCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGZvciBgS1ZNX0NBUF9FVkVSX01BUFBFRGAuIFRob3NlIHR3byBhcmUgZGVmaW5pdGVseSB3b3J0aCBwcmlvcml0aXppbmcgaW4gbXkgYW5hbHlzaXMsIGFsb25nIHdpdGggdGhlIGB0ZHBfbW11X21hcGAgZnVuY3Rpb24sIHdoaWNoIGFwcGVhcnMgY2VudHJhbCB0byB0aGUgVERQIE1NVSBvcGVyYXRpb25zLgoKTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGFuZCBgYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNgLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGlzIGlzIHNwZWNpZmljIHRvIHg4NiBLVk0uIFRoZSBwcmVzZW5jZSBvZiBgdGRwX2VuYWJsZWRgIGNvbmZpcm1zIHRoYXQuIEkga25vdyBgQ09ORklHX0tWTWAgaXMgYSBnaXZlbiwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBlbHNlLiBMZXQmIzM5O3MgY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZz0xNj1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE3LVxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjE4OmNvbmZpZyBLVk1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMC1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzozMTpjb25maWcgS1ZNX01JUFNfREVCVUdfQ09QMF9DT1VOVEVSU1xuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtNYWludGFpbiBjb3VudGVycyBmb3IgQ09QMCBhY2Nlc3Nlc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjY6Y29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI3LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI5OmNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMC1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNy1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozODpjb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM5LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQzLVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ0LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQ1OmNvbmZpZyBLVk1fQk9PSzNTXzMyXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfMzIgcHJvY2Vzc29yc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyNS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjY6Y29uZmlnIEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjctXHRib29sXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyOTpjb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O0RldGFpbGVkIHRpbWluZyBmb3IgdGhlIFA5IGVudHJ5IHBvaW50XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDhfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCB0aW1pbmcgZm9yIGh5cGVydmlzb3IgcmVhbC1tb2RlIGNvZGUgKGZvciBQT1dFUjgpXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTc6Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BNVVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O0h5cGVydmlzb3IgUGVyZiBldmVudHMgZm9yIEtWTSBCb29rM3MtSFZcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTgzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4NDpjb25maWcgS1ZNX0JPT0tFX0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg1LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODc6Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7RGV0YWlsZWQgZXhpdCB0aW1pbmdcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk3LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE5ODpjb25maWcgS1ZNX0U1MDBWMlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OS1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMHYyIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEyLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIxMzpjb25maWcgS1ZNX0U1MDBNQ1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxNC1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwME1DL0U1NTAwL0U2NTAwIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX01QSUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMzAtXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgTVBJQyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI0MTpjb25maWcgS1ZNX1hJQ1NcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDItXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgWElDUyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI1MTpjb25maWcgS1ZNX1hJVkVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTItXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcJiMzNDthcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21pY3Jvd2F0dC9LY29uZmlnXCYjMzQ7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc6MjQ6Y29uZmlnIEtWTV9HVUVTVFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtLVk0gR3Vlc3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9ODM5PXNvdXJjZSBcJiMzNDthcmNoL3g4Ni94ZW4vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYvS2NvbmZpZy04NDAtXG5hcmNoL3g4Ni9LY29uZmlnOjg0MTpjb25maWcgS1ZNX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTg0Mi1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnQgKGluY2x1ZGluZyBrdm1jbG9jaylcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTMtXG52aXJ0L2t2bS9LY29uZmlnOjQ6Y29uZmlnIEtWTV9DT01NT05cbnZpcnQva3ZtL0tjb25maWctNS0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL0tjb25maWc9Mzk9Y29uZmlnIE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQyLVxudmlydC9rdm0vS2NvbmZpZzo0Mzpjb25maWcgS1ZNX01NSU9cbnZpcnQva3ZtL0tjb25maWctNDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNDUtXG52aXJ0L2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fQVNZTkNfUEZcbnZpcnQva3ZtL0tjb25maWctNDctICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQ5LSMgVG9nZ2xlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpcmVjdCBub3RpZmljYXRpb24gYW5kIGJhdGNoIGpvYlxudmlydC9rdm0vS2NvbmZpZzo1MDpjb25maWcgS1ZNX0FTWU5DX1BGX1NZTkNcbnZpcnQva3ZtL0tjb25maWctNTEtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTU5PWNvbmZpZyBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4tLVxudmlydC9rdm0vS2NvbmZpZy02MS1cbnZpcnQva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9WRklPXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZz02NT1jb25maWcgSEFWRV9LVk1fSU5WQUxJRF9XQUtFVVBTXG4tLVxudmlydC9rdm0vS2NvbmZpZy02Ny1cbnZpcnQva3ZtL0tjb25maWc6Njg6Y29uZmlnIEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxudmlydC9rdm0vS2NvbmZpZy02OS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy03MC1cbnZpcnQva3ZtL0tjb25maWc6NzE6Y29uZmlnIEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbnZpcnQva3ZtL0tjb25maWctNzItICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNzMtXG52aXJ0L2t2bS9LY29uZmlnOjc0OmNvbmZpZyBLVk1fQ09NUEFUXG52aXJ0L2t2bS9LY29uZmlnLTc1LSAgICAgICBkZWZfYm9vbCB5XG4tLVxudmlydC9rdm0vS2NvbmZpZz05MT1jb25maWcgSEFWRV9LVk1fUE1fTk9USUZJRVJcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTkzLVxudmlydC9rdm0vS2NvbmZpZzo5NDpjb25maWcgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbnZpcnQva3ZtL0tjb25maWctOTUtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctOTYtXG52aXJ0L2t2bS9LY29uZmlnOjk3OmNvbmZpZyBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG52aXJ0L2t2bS9LY29uZmlnLTk4LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTk5LVxudmlydC9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbnZpcnQva3ZtL0tjb25maWctMTAxLSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5OTUKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogOTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRXZlci1NYXBwZWQgVHJhY2tpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgS1ZNIGZ1bmN0aW9uYWxpdHkg4oCTIHRoZSAmIzM0O2V2ZXItbWFwcGVkJiMzNDsgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIGBLVk1gIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIGBYODZfNjRgIGlzIGltcGxpY2l0bHkgcmVxdWlyZWQgZHVlIHRvIHRoZSBgdGRwX2VuYWJsZWRgIGNoZWNrLCB3aGljaCBzZWVtcyB0byByZXF1aXJlIHRoZSA2NC1iaXQgYXJjaGl0ZWN0dXJlLiBTbywgcHJpbWFyaWx5LCBgS1ZNYCBpcyB3aGF0IHdlIG5lZWQgdG8gZm9jdXMgb24uCgpJIGNoZWNrZWQgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSSBjb25maXJtZWQgdGhhdCBgdGRwX2VuYWJsZWRgIGlzIHJlcXVpcmVkLCB3aGljaCBpcyB0cnVlIGJ5IGRlZmF1bHQgZm9yIEludGVsIEVQVCBhbmQgQU1EIE5QVC4gVGhpcyBjb25maXJtcyB0aGUgaW1wb3J0YW5jZSBvZiBLVk0gYmVpbmcgZW5hYmxlZC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBjb2RlIGZsb3cuIEkgd2FudCB0byBoaWdobGlnaHQgc29tZSBrZXkgc3ltYm9scyB0aGF0IHJldmVhbCBob3cgdGhpcyBuZXcgdHJhY2tpbmcgd29ya3MuIEkgZmlndXJlZCBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBhbmQgYGt2bV90ZHBfbW11X21hcGAgYXJlIHJlbGV2YW50IGVudHJ5IHBvaW50cy4gSSYjMzk7bSBmb2N1c2luZyBvbiBga3ZtX3RkcF9tbXVfbWFwYCBiZWNhdXNlIGl0JiMzOTtzIHdoZXJlIHRoZSBURFAgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcgb2NjdXJzIGFuZCB3aGVyZSB3ZSYjMzk7bGwgZmluZCB0aGUgbG9naWMgZm9yIHNldHRpbmcgdGhlIGV2ZXItbWFwcGVkIGJpdHMuCgpJIGNvbmZpcm1lZCB0aGF0IGBrdm1fdGRwX21tdV9tYXBgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBURFAgTU1VIHBhZ2UgZmF1bHRzIGluIGBhcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY2AuIEkgY2hlY2tlZCBmb3Igb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzYCwgYnV0IGBrdm1fdGRwX21tdV9tYXBgIGlzIHRoZSBjcnVjaWFsIG9uZSBiZWNhdXNlIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIG5ldyBTUFRFcywgd2hpY2ggdGhlbiB0cmlnZ2VycyB0aGUgZXZlci1tYXBwZWQgdHJhY2tpbmcgbG9naWMuCgpSZXZpc2l0aW5nIHRoZSBmb2N1cyBzeW1ib2xzOiBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBhbmQgZXNwZWNpYWxseSBga3ZtX3RkcF9tbXVfbWFwYC4KClRoZSByZWFzb25pbmcgaXMgc29saWQ6IFRoZSBuZXcgS1ZNIGNhcGFiaWxpdHkgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCBpdHMgY29ycmVzcG9uZGluZyBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgIGlvY3RsIGFsbG93IHVzIHRvIHRyYWNrIGd1ZXN0IHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hcHBlZC4gVGhpcyBpcyBhY2Nlc3NlZCB0aHJvdWdoIEtWTSBpb2N0bHMsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgdXNlci1zcGFjZS1hY2Nlc3NpYmxlIGZlYXR1cmUuIFRoZSBwYXRjaCByZXF1aXJlcyBib3RoIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19YODZfNjRgLCB3aXRoIEtWTSBiZWluZyB0aGUgY3JpdGljYWwgb25lLiBUaGUgY29yZSBvZiB0aGlzIHRyYWNraW5nIG9jY3VycyB3aXRoaW4gdGhlIGlvY3RsIGVudHJ5IHBvaW50cyBhbmQgdGhlIFREUCBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBga3ZtX3RkcF9tbXVfbWFwYC4gWWVzLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHBhZ2UgZmF1bHRzIGFuZCBTUFRFIGNyZWF0aW9uLiBMb29raW5nIGF0IHRoZSBjb2RlOgoKYGBgYwoJaWYgKHVubGlrZWx5KGt2bS0mZ3Q7YXJjaC5ldmVyX21hcHBlZF9iaXRtYXApICZhbXA7JmFtcDsKCSAgICBpc19sZWFmICZhbXA7JmFtcDsgIXdhc19sZWFmKSB7CgkJa3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZShrdm0sIGdmbiwgS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpOwoJfQpgYGAKClRoaXMgc25pcHBldCBpbnNpZGUgYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAgaXMgd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBmb3IsIGNvbmZpcm1pbmcgdGhhdCBga3ZtX3RkcF9tbXVfbWFwYCBpcyB0aGUgcmlnaHQgcGxhY2UuClNwZWNpZmljYWxseSwgYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAgaXMgY2FsbGVkIGJ5IGB0ZHBfbW11X3NldF9zcHRlX2F0b21pY2AsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGJ5IGBrdm1fdGRwX21tdV9tYXBgLiBUaGlzIGNvbmZpcm1zIHdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2shIFRpbWUgdG8gcnVuIHRoZSB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAmIzM0OywKICAgICYjMzQ7a3ZtX3RkcF9tbXVfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGNhcGFiaWxpdHkgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCBhIG5ldyBpb2N0bCBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgIHRvIHRyYWNrIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfS1ZNYCBhbmQgaXMgc3BlY2lmaWMgdG8geDg2LiBXZSBmb2N1cyBvbiB0aGUgaW9jdGwgZW50cnkgcG9pbnRzIGFuZCB0aGUgVERQIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgd2hlcmUgdGhlIHRyYWNraW5nIGlzIHVwZGF0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9lbmFibGVfY2FwJiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBjYXBhYmlsaXR5IGBLVk1fQ0FQX0VWRVJfTUFQUEVEYCBhbmQgYSBuZXcgaW9jdGwgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYCB0byB0cmFjayB3aGljaCBndWVzdCBwYWdlcyBoYXZlIGV2ZXIgYmVlbiBtYXBwZWQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0tWTWAgYW5kIGlzIHNwZWNpZmljIHRvIHg4Ni4gV2UgZm9jdXMgb24gdGhlIGlvY3RsIGVudHJ5IHBvaW50cyBhbmQgdGhlIFREUCBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZXJlIHRoZSB0cmFja2luZyBpcyB1cGRhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MTg6MTkuNDk4Njk4MTE4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NDM4NDE5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV92bV9pb2N0bF9lbmFibGVfY2FwXCIsXG4gICAgXCJrdm1fdGRwX21tdV9tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBjYXBhYmlsaXR5IGBLVk1fQ0FQX0VWRVJfTUFQUEVEYCBhbmQgYSBuZXcgaW9jdGwgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYCB0byB0cmFjayB3aGljaCBndWVzdCBwYWdlcyBoYXZlIGV2ZXIgYmVlbiBtYXBwZWQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0tWTWAgYW5kIGlzIHNwZWNpZmljIHRvIHg4Ni4gV2UgZm9jdXMgb24gdGhlIGlvY3RsIGVudHJ5IHBvaW50cyBhbmQgdGhlIFREUCBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZXJlIHRoZSB0cmFja2luZyBpcyB1cGRhdGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODoxOS40OTg3MDQ4NDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTQ3NjA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAxMzQ1YWVkNDFjMTI0Y2ViNDkxYTVhYzQ3OGRlODc2MGU0MDgzMzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxNjoxODoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5pbmRleCBhNWY5ZWU5MmY0M2U4Li5jZTZlMWQxNWQ0OGQ1IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbkBAIC02NTY2LDYgKzY1NjYsNTMgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRVxcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XFxuICAgc3BlY2lmaWVkIGluIGBga2V5YGAsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaW4gYGBrZXlgYC5cXG4gXFxuKzQuMTQ1IEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9FVkVSX01BUFBFRFxcbis6QXJjaGl0ZWN0dXJlczogeDg2XFxuKzpUeXBlOiB2bSBpb2N0bFxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2dcXG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgLUVSUk5PIG9uIGVycm9yXFxuK1xcbitFcnJvcnM6XFxuK1xcbisgID09PT09PSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAgRU5PRU5UICAgICBLVk1fQ0FQX0VWRVJfTUFQUEVEIGhhcyBub3QgYmVlbiBlbmFibGVkIGZvciB0aGlzIFZNXFxuKyAgRUlOVkFMICAgICBgYGdyYW51bGVfc2hpZnRgYCBpcyBiZWxvdyAyMSAoaW50ZXJuYWwgdHJhY2tpbmcgZ3JhbnVsYXJpdHkpIG9yXFxuKyAgICAgICAgICAgICBhYm92ZSA2M1xcbisgIEVJTlZBTCAgICAgYGBmaXJzdF9ncmFudWxlYGAgKyBgYG51bV9ncmFudWxlc2BgIGV4dGVuZGVuZHMgYmV5b25kIHRoZSBtYXhncGFcXG4rICAgICAgICAgICAgIHNldCB1cCB3aGVuIEtWTV9DQVBfRVZFUl9NQVBQRUQgd2FzIGVuYWJsZWRcXG4rICBFSU5WQUwgICAgIGBgZmxhZ3NgYCBpcyBub3QgMFxcbisgIEVGQVVMVCAgICAgY29weV97ZnJvbSx0b31fdXNlciBvZiBgYGJpdG1hcGBgIGZhaWxlZCwgZS5nLiwgYml0bWFwIHdhc24ndFxcbisgICAgICAgICAgICAgc3VmZmljaWVudGx5IHNpemVkXFxuKyAgRU5PTUVNICAgICBzZXR0aW5nIHVwIHRlbXBvcmFyeSBiaXRtYXAgZm9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGZhaWxlZFxcbisgID09PT09PSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitUaGlzIHJlcXVpcmVzIEtWTV9DQVBfRVZFUl9NQVBQRUQgdG8gaGF2ZSBiZWVuIGVuYWJsZWQgZm9yIHRoZSBWTSB3aXRoIGEgbWF4Z3BhXFxuK3BhcmFtZXRlci5cXG4rXFxuKzo6XFxuK1xcbisgIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIHtcXG4rXFx0X191NjQgZmlyc3RfZ3JhbnVsZTtcXG4rXFx0X191NjQgbnVtX2dyYW51bGVzO1xcbitcXHRfX3UzMiBncmFudWxlX3NoaWZ0O1xcbitcXHRfX3UzMiBmbGFncztcXG4rXFx0dW5pb24ge1xcbitcXHRcXHR2b2lkIF9fdXNlciAqYml0bWFwO1xcbitcXHRcXHRfX3U2NCBwYWRkaW5nO1xcbitcXHR9O1xcbitcXHRfX3U2NCByZXNlcnZlZFs0XTtcXG4rICB9O1xcbitcXG4rYGBmaXJzdF9ncmFudWxlYGAsIGBgbnVtX2dyYW51bGVzYGAsIGFuZCBgYGdyYW51bGVfc2hpZnRgYCBlbmNvZGUgdGhlIEdQQSByYW5nZVxcbit0aGUgY2FsbGVyIGlucXVpcmVzIGFib3V0LiBGb3IgZXhhbXBsZSwgdmFsdWVzIG9mIDIsIDI1LCBhbmQgMjEsIHJlc3BlY3RpdmVseSxcXG4raW5xdWlyZSBhYm91dCB0aGUgYWRkcmVzcyByYW5nZSBbNE1CLCA1NE1CKS4gVGhlIGNhbGxlciBwcm92aWRlcyBhIGBgYml0bWFwYGBcXG4rb2YgdGhlIHJlcXVpcmVkIGxlbmd0aCAoaW4gdGhlIGFib3ZlIGNhc2UgNCBieXRlcykuIFRoZSBjYWxsIHdpbGwgd3JpdGUgYSAxIGlmXFxuK2FueSBtZW1vcnkgaW4gdGhlIGdyYW51bGUgaGFzIGJlZW4gbWFwcGVkIGF0IHNvbWUgcG9pbnQgc2luY2VcXG4rS1ZNX0NBUF9FVkVSX01BUFBFRCB3YXMgZW5hYmxlZCwgMCBpZiBub3QuXFxuK1xcbiAuLiBfa3ZtX3J1bjpcXG4gXFxuIDUuIFRoZSBrdm1fcnVuIHN0cnVjdHVyZVxcbkBAIC04OTQ5LDYgKzg5OTYsMjYgQEAgZW5hYmxlZCwgY21tYSBjYW4ndCBiZSBlbmFibGVkIGFueW1vcmUgYW5kIHBmbWZpIGFuZCB0aGUgc3RvcmFnZSBrZXlcXG4gaW50ZXJwcmV0YXRpb24gYXJlIGRpc2FibGVkLiBJZiBjbW1hIGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZCBvciB0aGVcXG4gaHBhZ2VfMmcgbW9kdWxlIHBhcmFtZXRlciBpcyBub3Qgc2V0IHRvIDEsIC1FSU5WQUwgaXMgcmV0dXJuZWQuXFxuIFxcbis3LjQ4IEtWTV9DQVBfRVZFUl9NQVBQRURcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbis6QXJjaGl0ZWN0dXJlczogeDg2XFxuKzpQYXJhbWV0ZXJzOiBhcmdzWzBdIC0gbWF4aW11bSBHUEEgdG8gdHJhY2sgbWFwcGVkIG1lbW9yeVxcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBURFAgaXMgbm90IGF2YWlsYWJsZSwgLUVJTlZBTCBpZiBhcmdzWzBdXFxuKyAgICAgICAgICBpcyAwIG9yIGJleW9uZCB0aGUgbWF4aW11bSBwb3NzaWJsZSBHUEEsIC1FTk9NRU0gaWYgdHJhY2tpbmcgc2V0dXBcXG4rICAgICAgICAgIGZhaWxlZCwgLUVFWElTVCBpZiBhbHJlYWR5IHNldCB1cC5cXG4rXFxuK1RoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgS1ZNIGNhbiB0cmFjayBpZiBwYWdlcyBoYXZlIGV2ZXJcXG4rYmVlbiBtYXBwZWQgYnkgdGhlIGd1ZXN0LiBUaGlzIGFsbG93cyBhIGNvbnNlcnZhdGl2ZSBlc3RpbWF0ZSBvZiB3aGljaCBwYWdlc1xcbithcmUgbm90IHplcm8gYW55IG1vcmUuXFxuK1xcbitPbiBlbmFibGluZyB0aGUgY2FwYWJpbGl0eSwgdGhlIGNhbGxlciBwcm92aWRlcyBhIG1heCBHUEEgdmFsdWUuIEtWTSB3aWxsIHRoZW5cXG4rdHJhY2sgR1BBcyBiZXR3ZWVuIDAgYW5kIHRoaXMgdmFsdWUuIE5vdGUgdGhhdCB0aGlzIGNhcGFiaWxpdHkgY2FuIGJlIGVuYWJsZWRcXG4rYXQgYW55IHRpbWUsIGJ1dCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBlbmFibGUgaXQgYmVmb3JlIHZDUFVzIHN0YXJ0XFxuK3J1bm5pbmcuIEFueSBwYWdlIGFjY2Vzc2VzIGJ5IHRoZSBndWVzdCBiZWZvcmUgY2FwYWJpbGl0eSBlbmFibGVtZW50IHdpbGwgbm90XFxuK2JlIHRyYWNrZWQuIFRoZSBtYXggR1BBIHZhbHVlIGNhbiBvbmx5IGJlIHNldCBvbmNlOyBzdWJzZXF1ZW50IGF0dGVtcHRzIHRvXFxuK2VuYWJsZSB0aGUgY2FwYWJpbGl0eSB3aXRoIGEgZGlmZmVyZW50IG9yIGV2ZW4gc2FtZSB2YWx1ZSB3aWxsIGZhaWwuXFxuK1xcbiA4LiBPdGhlciBjYXBhYmlsaXRpZXMuXFxuID09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggYjUxNzI1N2E2MzE1My4uYzYwN2E5MTkzZjQwMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xNTMzLDYgKzE1MzMsMTUgQEAgc3RydWN0IGt2bV9hcmNoIHtcXG4gXFx0ICovXFxuIFxcdGJvb2wgc2hhZG93X3Jvb3RfYWxsb2NhdGVkO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVHJhY2tzIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBhbGxvd3NcXG4rXFx0ICogdHJhY2tpbmcgd2hpY2ggbWVtb3J5IGlzIGd1YXJhbnRlZWQgdG8gc3RpbGwgYmUgemVybywgZS5nLiwgZm9yXFxuK1xcdCAqIHN1cHBvcnRpbmcgdGhlIEh2RXh0Q2FsbEdldEJvb3RaZXJvZWRNZW1vcnkgZW5saWdodGVubWVudC5cXG4rXFx0ICogVGhlIGdyYW51bGFyaXR5IGlzIGRlZmluZWQgYnkgS1ZNX0VWRVJfTUFQUEVEX1NISUZULlxcbitcXHQgKi9cXG4rXFx0dW5zaWduZWQgbG9uZyAqZXZlcl9tYXBwZWRfYml0bWFwO1xcbitcXHR1NjQgZXZlcl9tYXBwZWRfbWF4X2dwYTtcXG4rXFxuICNpZmRlZiBDT05GSUdfS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuIFxcdC8qXFxuIFxcdCAqIElmIHNldCwgdGhlIFZNIGhhcyAob3IgaGFkKSBhbiBleHRlcm5hbCB3cml0ZSB0cmFja2luZyB1c2VyLCBhbmRcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oIGIvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNzk1MzM3ZTY4NDg2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvZXZlcl9tYXBwZWQuaFxcbkBAIC0wLDAgKzEsMzMgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfX0tWTV9YODZfRVZFUl9NQVBQRURfSFxcbisjZGVmaW5lIF9fS1ZNX1g4Nl9FVkVSX01BUFBFRF9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4rXFxuKy8qXFxuKyAqIFRyYWNrIGlmIHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZCBhdCBhbiBpbnRlcm5hbCBncmFudWxhcml0eSBvZiAyIE1CLlxcbisgKi9cXG4rI2RlZmluZSBLVk1fRVZFUl9NQVBQRURfU0hJRlQgMjFcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZXZlcl9tYXBwZWRfc2V0X3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHU2NCBucGFnZXMpXFxuK3tcXG4rXFx0Y29uc3QgdW5zaWduZWQgaW50IHNoaWZ0ID0gS1ZNX0VWRVJfTUFQUEVEX1NISUZUIC0gUEFHRV9TSElGVDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGdmbiBcXHUwMDNlXFx1MDAzZSBzaGlmdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBlbmQgPSAoZ2ZuICsgbnBhZ2VzICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgLSAxKSBcXHUwMDNlXFx1MDAzZSBzaGlmdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0ZW5kID0gbWluKGVuZCwga3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX21heF9ncGEgXFx1MDAzZVxcdTAwM2UgS1ZNX0VWRVJfTUFQUEVEX1NISUZUKTtcXG4rXFx0Zm9yIChpID0gc3RhcnQ7IGkgXFx1MDAzYyBlbmQ7IGkrKykge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiByZS1tYXBwaW5nIHphcHBlZCBwYWdlcyBhbmQgYnJlYWtpbmcgdXAgb2YgaHVnZSBwYWdlcyBjYW5cXG4rXFx0XFx0ICogdHJpZ2dlciBhIG51bWJlciBvZiBzZXRzIG9uIGFscmVhZHkgc2V0IGJpdHMsIHNvIHRlc3QgZmlyc3RcXG4rXFx0XFx0ICogYmVmb3JlIGF0b21pYy1zZXQuIFNpbmNlIGJpdHMgY2FuIG5ldmVyIGJlIHVuc2V0IGFnYWluLCB0aGlzXFxuK1xcdFxcdCAqIGlzIHNhZmUgYWdhaW5zdCByYWNlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghdGVzdF9iaXQoaSwga3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCkpXFxuK1xcdFxcdFxcdHNldF9iaXQoaSwga3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rI2VuZGlmIC8qIF9fS1ZNX1g4Nl9FVkVSX01BUFBFRF9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcXG5pbmRleCBjZTNmMmVmYWRiMDViLi5lYTJhMzdhMDRiMmZmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcXG5AQCAtMSw2ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiBcXG4rI2luY2x1ZGUgXFxcImV2ZXJfbWFwcGVkLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtbXUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm1tdV9pbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibW11dHJhY2UuaFxcXCJcXG5AQCAtNTU0LDYgKzU1NSwxNyBAQCBzdGF0aWMgaW50IF9faGFuZGxlX2NoYW5nZWRfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogV2hlbmV2ZXIgYSBwYWdlIGJlY29tZXMgYSBmcmVzaCBsZWFmLCBtYXJrIHRoZSBtZW1vcnkgYXMgbWFwcGVkLlxcbitcXHQgKiBPbiBodWdlcGFnZSBicmVha3VwLCB0aGlzIHRyaWdnZXJzIGZvciBlYWNoIG5ldyBsb3dlci1sZXZlbCBwYWdlLFxcbitcXHQgKiBldmVuIHRob3VnaCB0aGUgbWVtb3J5IHdhcyBhbHJlYWR5IG1hcmtlZCB3aGVuIHRoZSBodWdlcGFnZSB3YXNcXG4rXFx0ICogbWFwcGVkLCBidXQgdGhlIG92ZXJoZWFkIGlzIG5lZ2xpZ2libGUuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkoa3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGlzX2xlYWYgXFx1MDAyNlxcdTAwMjYgIXdhc19sZWFmKSB7XFxuK1xcdFxcdGt2bV9ldmVyX21hcHBlZF9zZXRfcmFuZ2Uoa3ZtLCBnZm4sIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKTtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogUmVjdXJzaXZlbHkgaGFuZGxlIGNoaWxkIFBUcyBpZiB0aGUgY2hhbmdlIHJlbW92ZWQgYSBzdWJ0cmVlIGZyb21cXG4gXFx0ICogdGhlIHBhZ2luZyBzdHJ1Y3R1cmUuICBOb3RlIHRoZSBXQVJOIG9uIHRoZSBQRk4gY2hhbmdpbmcgd2l0aG91dCB0aGVcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggMDYyNmU4MzVlOWViNy4uODljYmNmODM5OWY0OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMjUsNiArMjUsNyBAQFxcbiAjaW5jbHVkZSBcXFwidHNzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJyZWdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrdm1fZW11bGF0ZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwibW11L2V2ZXJfbWFwcGVkLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtbXUvcGFnZV90cmFjay5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieDg2LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJjcHVpZC5oXFxcIlxcbkBAIC0yMzkxLDYgKzIzOTIsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbiBcXHRjYXNlIEtWTV9DQVBfUkVBRE9OTFlfTUVNOlxcbiBcXHRcXHRyID0ga3ZtID8ga3ZtX2FyY2hfaGFzX3JlYWRvbmx5X21lbShrdm0pIDogMTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgS1ZNX0NBUF9FVkVSX01BUFBFRDpcXG4rXFx0XFx0ciA9ICh0ZHBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19YODZfNjQpKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQxOTAsNiArNDE5NCwzNiBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcdGNhc2UgS1ZNX0NBUF9FVkVSX01BUFBFRDoge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nICptYXBwZWRfYml0bWFwO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIG51bV9ncmFudWxlcztcXG4rXFxuK1xcdFxcdHIgPSAwO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRcXHRpZiAoIXRkcF9lbmFibGVkKSB7XFxuK1xcdFxcdFxcdHIgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0fSBlbHNlIGlmIChrdm0tXFx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwKSB7XFxuK1xcdFxcdFxcdHIgPSAtRUVYSVNUO1xcbitcXHRcXHR9IGVsc2UgaWYgKGNhcC1cXHUwMDNlYXJnc1swXSA9PSAwIHx8XFxuK1xcdFxcdFxcdCAgIGNhcC1cXHUwMDNlYXJnc1swXSBcXHUwMDNlICgxVUxMIFxcdTAwM2NcXHUwMDNjIGt2bV9ob3N0Lm1heHBoeWFkZHIpKSB7XFxuK1xcdFxcdFxcdHIgPSAtRUlOVkFMO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRudW1fZ3JhbnVsZXMgPSBESVZfUk9VTkRfVVAoY2FwLVxcdTAwM2VhcmdzWzBdLCAxVUxMIFxcdTAwM2NcXHUwMDNjIEtWTV9FVkVSX01BUFBFRF9TSElGVCk7XFxuK1xcdFxcdFxcdG1hcHBlZF9iaXRtYXAgPVxcbitcXHRcXHRcXHRcXHRrdmNhbGxvYyhCSVRTX1RPX0xPTkdTKG51bV9ncmFudWxlcyksXFxuK1xcdFxcdFxcdFxcdFxcdCBzaXplb2YobG9uZyksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdFxcdFxcdGlmICghbWFwcGVkX2JpdG1hcClcXG4rXFx0XFx0XFx0XFx0ciA9IC1FTk9NRU07XFxuK1xcdFxcdFxcdGVsc2Uge1xcbitcXHRcXHRcXHRcXHR3cml0ZV9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4rXFx0XFx0XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCA9IG1hcHBlZF9iaXRtYXA7XFxuK1xcdFxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9tYXhfZ3BhID0gbnVtX2dyYW51bGVzIFxcdTAwM2NcXHUwMDNjIEtWTV9FVkVSX01BUFBFRF9TSElGVDtcXG4rXFx0XFx0XFx0XFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0ciA9IC1FSU5WQUw7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC00MTk3LDYgKzQyMzEsNzMgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIHI7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2coc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgKmxvZylcXG4re1xcbitcXHR1NjQgbWF4X2dyYW51bGVzO1xcbitcXHR1bnNpZ25lZCBpbnQgY29hcnNlbmVzcztcXG4rXFx0dW5zaWduZWQgbG9uZyAqYml0bWFwO1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcClcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRpZiAobG9nLVxcdTAwM2VmbGFncylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAobG9nLVxcdTAwM2VncmFudWxlX3NoaWZ0IFxcdTAwM2MgS1ZNX0VWRVJfTUFQUEVEX1NISUZUIHx8IGxvZy1cXHUwMDNlZ3JhbnVsZV9zaGlmdCBcXHUwMDNlPSA2NClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtYXhfZ3JhbnVsZXMgPSBrdm0tXFx1MDAzZWFyY2guZXZlcl9tYXBwZWRfbWF4X2dwYSBcXHUwMDNlXFx1MDAzZSBsb2ctXFx1MDAzZWdyYW51bGVfc2hpZnQ7XFxuK1xcdGlmIChsb2ctXFx1MDAzZW51bV9ncmFudWxlcyBcXHUwMDNlIG1heF9ncmFudWxlcyB8fFxcbitcXHQgICAgbG9nLVxcdTAwM2VmaXJzdF9ncmFudWxlIFxcdTAwM2UgbWF4X2dyYW51bGVzIC0gbG9nLVxcdTAwM2VudW1fZ3JhbnVsZXMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSByZXF1ZXN0IHVzZXMgdGhlIHNhbWUgZ3JhbnVsYXJpdHkgYXMgb3VyIGludGVybmFsXFxuK1xcdCAqIHRyYWNraW5nLCBhbmQgd2UgYXJlIGJ5dGUtYWxpZ25lZCAodGhlIGV4cGVjdGVkIGNvbW1vbiBjYXNlKSwgd2UgY2FuXFxuK1xcdCAqIGp1c3QgY29weV90b191c2VyLiBPdGhlcndpc2UsIHdlIGhhdmUgdG8gY3JlYXRlIGEgbmV3IGJpdG1hcCB0byBwYXNzLlxcbitcXHQgKlxcbitcXHQgKiBXZSBkbyBub3QgbG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgdkNQVXMgbWFwcGluZyBuZXcgbWVtb3J5IG9uIGFueSBvZlxcbitcXHQgKiB0aGVzZSBvcGVyYXRpb25zLiBCaXRzIGFyZSBzZXQgYXRvbWljYWxseSBhbmQgbmV2ZXIgY2xlYXJlZCwgc28gYW55IHJhY2VcXG4rXFx0ICogaGVyZSBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgd3JpdGUgaGFwcGVuaW5nIGFmdGVyIHRoaXMgaGFuZGxlclxcbitcXHQgKiBmaW5pc2hlcyBidXQgYmVmb3JlIHRoZSBjYWxsZXIgcmVhZHMgdGhlIHJlc3VsdHMuXFxuK1xcdCAqL1xcbitcXHRjb2Fyc2VuZXNzID0gbG9nLVxcdTAwM2VncmFudWxlX3NoaWZ0IC0gS1ZNX0VWRVJfTUFQUEVEX1NISUZUO1xcbitcXHRpZiAoY29hcnNlbmVzcyA9PSAwIFxcdTAwMjZcXHUwMDI2ICEobG9nLVxcdTAwM2VmaXJzdF9ncmFudWxlIFxcdTAwMjYgNykgXFx1MDAyNlxcdTAwMjYgIShsb2ctXFx1MDAzZW51bV9ncmFudWxlcyBcXHUwMDI2IDcpKSB7XFxuK1xcdFxcdGlmIChjb3B5X3RvX3VzZXIobG9nLVxcdTAwM2ViaXRtYXAsXFxuK1xcdFxcdFxcdFxcdCAodTggKilrdm0tXFx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwICsgbG9nLVxcdTAwM2VmaXJzdF9ncmFudWxlIC8gOCxcXG4rXFx0XFx0XFx0XFx0IGxvZy1cXHUwMDNlbnVtX2dyYW51bGVzIC8gOCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0Yml0bWFwID0ga3Z6YWxsb2MoRElWX1JPVU5EX1VQKGxvZy1cXHUwMDNlbnVtX2dyYW51bGVzLCA4KSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0aWYgKCFiaXRtYXApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yICh1NjQgZ3JhbiA9IGxvZy1cXHUwMDNlZmlyc3RfZ3JhbnVsZTtcXG4rXFx0ICAgICBncmFuIFxcdTAwM2MgbG9nLVxcdTAwM2VmaXJzdF9ncmFudWxlICsgbG9nLVxcdTAwM2VudW1fZ3JhbnVsZXM7XFxuK1xcdCAgICAgZ3JhbisrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBncmFuIFxcdTAwM2NcXHUwMDNjIGNvYXJzZW5lc3M7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIGNvYXJzZW5lc3MpO1xcbitcXG4rXFx0XFx0aWYgKGZpbmRfbmV4dF9iaXQoa3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCwgZW5kLCBzdGFydCkgXFx1MDAzYyBlbmQpXFxuK1xcdFxcdFxcdF9fc2V0X2JpdChncmFuIC0gbG9nLVxcdTAwM2VmaXJzdF9ncmFudWxlLCBiaXRtYXApO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY29weV90b191c2VyKGxvZy1cXHUwMDNlYml0bWFwLCBiaXRtYXAsIERJVl9ST1VORF9VUChsb2ctXFx1MDAzZW51bV9ncmFudWxlcywgOCkpKSB7XFxuK1xcdFxcdHIgPSAtRUZBVUxUO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHRyID0gMDtcXG4rXFxuK291dF9mcmVlOlxcbitcXHRrdmZyZWUoYml0bWFwKTtcXG4rXFx0cmV0dXJuIHI7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfS1ZNX0NPTVBBVFxcbiAvKiBmb3IgS1ZNX1g4Nl9TRVRfTVNSX0ZJTFRFUiAqL1xcbiBzdHJ1Y3Qga3ZtX21zcl9maWx0ZXJfcmFuZ2VfY29tcGF0IHtcXG5AQCAtNDcxMCw2ICs0ODExLDE1IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0ciA9IGt2bV92bV9pb2N0bF9zZXRfbXNyX2ZpbHRlcihrdm0sIFxcdTAwMjZmaWx0ZXIpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRjYXNlIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HOiB7XFxuK1xcdFxcdHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIG1hcHBlZF9sb2c7XFxuK1xcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNm1hcHBlZF9sb2csIGFyZ3AsIHNpemVvZihtYXBwZWRfbG9nKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0XFx0ciA9IGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nKGt2bSwgXFx1MDAyNm1hcHBlZF9sb2cpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyID0gLUVOT1RUWTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5pbmRleCA0MTkwMTEwOTdmYThlLi5kMGJlOTQ5NDZhNzdjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxcbkBAIC05OTcsNiArOTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHtcXG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcXG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5XFxuKyNkZWZpbmUgS1ZNX0NBUF9FVkVSX01BUFBFRCAyNTBcXG4gXFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XFxuIFxcdF9fdTMyIGlycWNoaXA7XFxuQEAgLTE2NzAsNCArMTY3MSwxOCBAQCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xcbiBcXHRfX3U2NCBwYWRkaW5nWzVdO1xcbiB9O1xcbiBcXG4rI2RlZmluZSBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRyAgX0lPVyhLVk1JTywgIDB4ZDYsIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nKVxcbitcXG4rc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cge1xcbitcXHRfX3U2NCBmaXJzdF9ncmFudWxlO1xcbitcXHRfX3U2NCBudW1fZ3JhbnVsZXM7XFxuK1xcdF9fdTMyIGdyYW51bGVfc2hpZnQ7XFxuK1xcdF9fdTMyIGZsYWdzO1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHZvaWQgX191c2VyICpiaXRtYXA7XFxuK1xcdFxcdF9fdTY0IHBhZGRpbmc7XFxuK1xcdH07XFxuK1xcdF9fdTY0IHJlc2VydmVkWzRdO1xcbit9O1xcbitcXG4gI2VuZGlmIC8qIF9fTElOVVhfS1ZNX0ggKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5pbmRleCA0YWNlMTI2MDZlOTM3Li4xZWIwYmFjMTkyMGRjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuQEAgLTE2Miw2ICsxNjIsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBzdGVhbF90aW1lXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBzeXN0ZW1fY291bnRlcl9vZmZzZXRfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0XFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSBldmVyX21hcHBlZF90ZXN0XFxuIFxcbiAjIENvbXBpbGVkIG91dHB1dHMgdXNlZCBieSB0ZXN0IHRhcmdldHNcXG4gVEVTVF9HRU5fUFJPR1NfRVhURU5ERURfeDg2ICs9IHg4Ni9ueF9odWdlX3BhZ2VzX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2V2ZXJfbWFwcGVkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ldmVyX21hcHBlZF90ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc2NzIzZjBjOWVlMmNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2V2ZXJfbWFwcGVkX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMTkxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIEtWTSBldmVyLW1hcHBlZCBiaXRtYXAgdGVzdFxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIE51dGFuaXgsIEluYy5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF91dGlsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nrdm1fdXRpbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcHJvY2Vzc29yLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIEtpQiAxMDI0dVxcbisjZGVmaW5lIE1pQiAoMTAyNCAqIEtpQilcXG4rXFxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodWludDY0X3QgYmFzZV9ncGEsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0R1VFU1RfRE9ORSgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhc3NlcnRfYml0bWFwc19lcXVhbCh1OCBleHBlY3RlZFtdLCB1OCBhY3R1YWxbXSwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKSB7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKGV4cGVjdGVkW2ldID09IGFjdHVhbFtpXSxcXG4rXFx0XFx0XFx0ICAgIFxcXCJieXRlICVsZCwgZXhwZWN0ZWQgMHglMDJ4LCBnb3QgMHglMDJ4XFxcIixcXG4rXFx0XFx0XFx0ICAgIGksIGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0pO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHByZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzdGFydCwgdTY0IGxlbilcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgcmFuZ2UgPSB7XFxuK1xcdFxcdC5ncGEgPSBzdGFydCxcXG4rXFx0XFx0LnNpemUgPSBsZW4sXFxuK1xcdFxcdC5mbGFncyA9IDAsXFxuK1xcdH07XFxuK1xcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX1BSRV9GQVVMVF9NRU1PUlksIFxcdTAwMjZyYW5nZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfb25lX3BhZ2Uodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgcmFuZ2UgPSB7XFxuK1xcdFxcdC5ncGEgPSAweDAsXFxuK1xcdFxcdC5zaXplID0gUEFHRV9TSVpFLFxcbitcXHRcXHQuZmxhZ3MgPSAwLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBjaGFyIG1hcHBlZF9iaXRtYXA7XFxuK1xcdHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIGxvZyA9IHtcXG4rXFx0XFx0LmZpcnN0X2dyYW51bGUgPSAwLFxcbitcXHRcXHQubnVtX2dyYW51bGVzID0gMSxcXG4rXFx0XFx0LmdyYW51bGVfc2hpZnQgPSAyMSxcXG4rXFx0XFx0LmZsYWdzID0gMCxcXG4rXFx0XFx0LmJpdG1hcCA9IFxcdTAwMjZtYXBwZWRfYml0bWFwLFxcbitcXHR9O1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuK1xcbitcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBQQUdFX1NJWkUpO1xcbitcXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCBcXHUwMDI2cmFuZ2UpO1xcbitcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcXHUwMDI2bG9nKTtcXG4rXFx0VEVTVF9BU1NFUlQobWFwcGVkX2JpdG1hcCA9PSAweDEsIFxcXCJleHBlY3RlZCAweDEsIGdvdCAweCV4XFxcIiwgbWFwcGVkX2JpdG1hcCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFkZCA2NE1CIG9yIG1lbW9yeSBhdCBHUEEgMTZNQiAoIC0tXFx1MDAzZSBbMTZNQiwgODBNQikgKSxcXG4rICogcHJlLWZhdWx0IFsxNk1CLCA0OE1CKSwgcmVxdWVzdCBhbmQgY2hlY2sgYml0bWFwIGZvciBbMTZNQiwgODBNQikuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0X29uZV9ibG9jayh2b2lkKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IG1hcF9zdGFydCA9IDB4MTAwMDAwMDtcXG4rXFx0Y29uc3QgdWludDY0X3QgbWFwX2xlbiA9IDB4NDAwMDAwMDtcXG4rXFx0dTggbWFwcGVkX2JpdG1hcFs0XSA9IHsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9O1xcbitcXHR1OCBleHBlY3RlZF9iaXRtYXBbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAgfTtcXG4rXFx0c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0ge1xcbitcXHRcXHQuZmlyc3RfZ3JhbnVsZSA9IDB4OCxcXG4rXFx0XFx0Lm51bV9ncmFudWxlcyA9IDB4MjAsXFxuK1xcdFxcdC5ncmFudWxlX3NoaWZ0ID0gMjEsXFxuK1xcdFxcdC5mbGFncyA9IDAsXFxuK1xcdFxcdC5iaXRtYXAgPSBtYXBwZWRfYml0bWFwLFxcbitcXHR9O1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuK1xcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIG1hcF9zdGFydCwgMSwgbWFwX2xlbiAvIFBBR0VfU0laRSwgMCk7XFxuK1xcbitcXHRyZXQgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXFx1MDAyNmxvZyk7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTk9FTlQsXFxuK1xcdFxcdCAgICBcXFwiZXhwZWN0ZWQgRU5PRU5UIHdoZW4gcXVlcnlpbmcgZXZlci1tYXBwZWQgbG9nIGJlZm9yZSBlbmFibGVtZW50LCBnb3QgJWRcXFwiLFxcbitcXHRcXHQgICAgZXJybm8pO1xcbitcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBtYXBfc3RhcnQgKyBtYXBfbGVuKTtcXG4rXFx0cHJlX2ZhdWx0KHZjcHUsIDE2ICogTWlCLCAzMiAqIE1pQik7XFxuK1xcbitcXHRyZXQgPSBfX3ZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVZFUl9NQVBQRUQsIFBBR0VfU0laRSk7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXFxuK1xcdFxcdCAgICBcXFwiZXhwZWN0ZWQgRUVYSVNUIHdoZW4gZW5hYmxpbmcgS1ZNX0NBUF9FVkVSX01BUFBFRCB0d2ljZSwgZ290ICVkXFxcIixcXG4rXFx0XFx0ICAgIGVycm5vKTtcXG4rXFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXFx1MDAyNmxvZyk7XFxuK1xcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XFxuK1xcbitcXHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDIyO1xcbitcXHRsb2cuZmlyc3RfZ3JhbnVsZSA9IDB4NDtcXG4rXFx0bG9nLm51bV9ncmFudWxlcyA9IDB4MTA7XFxuK1xcdG1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XFxuK1xcdG1lbWNweShleHBlY3RlZF9iaXRtYXAsICh1OFtdKXsgMHhmZiwgMHgwMCwgMHhhNSwgMHhhNSB9LCA0KTtcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcXHUwMDI2bG9nKTtcXG4rXFx0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcXG4rXFxuK1xcdGxvZy5ncmFudWxlX3NoaWZ0ID0gMjM7XFxuK1xcdGxvZy5maXJzdF9ncmFudWxlID0gMHgyO1xcbitcXHRsb2cubnVtX2dyYW51bGVzID0gMHg4O1xcbitcXHRtZW1jcHkobWFwcGVkX2JpdG1hcCwgKHU4W10peyAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDQpO1xcbitcXHRtZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4MGYsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXFx1MDAyNmxvZyk7XFxuK1xcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XFxuK1xcbitcXHRsb2cubnVtX2dyYW51bGVzID0gMHhmZjtcXG4rXFx0cmV0ID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFxcdTAwMjZsb2cpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbitcXHRcXHQgICAgXFxcImV4cGVjdGVkIEVJTlZBTCB3aGVuIHF1ZXJ5aW5nIGJleW9uZCByYW5nZSwgZ290ICVkXFxcIixcXG4rXFx0XFx0ICAgIGVycm5vKTtcXG4rXFxuK1xcdGxvZy5udW1fZ3JhbnVsZXMgPSAweDEwO1xcbitcXHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDE7XFxuK1xcdHJldCA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcXHUwMDI2bG9nKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0IFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTCxcXG4rXFx0XFx0ICAgIFxcXCJleHBlY3RlZCBFSU5WQUwgd2l0aCB0b28gc21hbGwgZ3JuYXVsZSBzaGlmdCwgZ290ICVkXFxcIixcXG4rXFx0XFx0ICAgIGVycm5vKTtcXG4rfVxcbitcXG4rLypcXG4rICogQWRkIDEyOE1CIG9yIG1lbW9yeSBhdCBHUEEgMzJNQiAoIC0tXFx1MDAzZSBbMzJNQiwgMTYwTUIpICksXFxuKyAqIHByZS1mYXVsdCBbMzJNQiwgNjRNQiksIGFuZCBbOTBNQiwgOTRNQiksXFxuKyAqIHJlcXVlc3QgYW5kIGNoZWNrIGJpdG1hcCBmb3IgWzE2TUIsIDEyME1CKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHRlc3RfdHdvX2Jsb2Nrcyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IG1hcF9zdGFydCA9IDB4MjAwMDAwMDtcXG4rXFx0Y29uc3QgdWludDY0X3QgbWFwX2xlbiA9IDB4ODAwMDAwMDtcXG4rXFx0dTggbWFwcGVkX2JpdG1hcFs3XSA9IHsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9O1xcbitcXHR1OCBleHBlY3RlZF9iaXRtYXBbN10gPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAgfTtcXG4rXFx0c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0ge1xcbitcXHRcXHQuZmlyc3RfZ3JhbnVsZSA9IDB4OCxcXG4rXFx0XFx0Lm51bV9ncmFudWxlcyA9IDB4MzQsXFxuK1xcdFxcdC5ncmFudWxlX3NoaWZ0ID0gMjEsXFxuK1xcdFxcdC5mbGFncyA9IDAsXFxuK1xcdFxcdC5iaXRtYXAgPSBtYXBwZWRfYml0bWFwLFxcbitcXHR9O1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuK1xcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIG1hcF9zdGFydCwgMSwgbWFwX2xlbiAvIFBBR0VfU0laRSwgMCk7XFxuK1xcbitcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBtYXBfc3RhcnQgKyBtYXBfbGVuKTtcXG4rXFx0cHJlX2ZhdWx0KHZjcHUsIDMyICogTWlCLCAzMiAqIE1pQik7XFxuK1xcdHByZV9mYXVsdCh2Y3B1LCA5MCAqIE1pQiwgNCAqIE1pQik7XFxuK1xcbitcXHR2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFxcdTAwMjZsb2cpO1xcbitcXHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xcbitcXG4rXFx0bG9nLmdyYW51bGVfc2hpZnQgPSAyMjtcXG4rXFx0bG9nLmZpcnN0X2dyYW51bGUgPSAweDQ7XFxuK1xcdGxvZy5udW1fZ3JhbnVsZXMgPSAweDFhO1xcbitcXHRtZW1jcHkobWFwcGVkX2JpdG1hcCwgKHU4W10peyAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1fSwgNyk7XFxuK1xcdG1lbWNweShleHBlY3RlZF9iaXRtYXAsICh1OFtdKXsgMHhmMCwgMHgwZiwgMHgwYywgMHgwMCwgMHhhNSwgMHhhNSwgMHhhNSB9LCA3KTtcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcXHUwMDI2bG9nKTtcXG4rXFx0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcXG4rXFxuK1xcdGxvZy5ncmFudWxlX3NoaWZ0ID0gMjM7XFxuK1xcdGxvZy5maXJzdF9ncmFudWxlID0gMHgyO1xcbitcXHRsb2cubnVtX2dyYW51bGVzID0gMHhkO1xcbitcXHRtZW1jcHkobWFwcGVkX2JpdG1hcCwgKHU4W10peyAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDcpO1xcbitcXHRtZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4M2MsIDB4MDIsIDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNyk7XFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXFx1MDAyNmxvZyk7XFxuK1xcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZKSk7XFxuK1xcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfRVZFUl9NQVBQRUQpKTtcXG4rXFxuK1xcdHRlc3Rfb25lX3BhZ2UoKTtcXG4rXFx0dGVzdF9vbmVfYmxvY2soKTtcXG4rXFx0dGVzdF90d29fYmxvY2tzKCk7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MTg6MjAuMDE1MTE1MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NjQyNzQxNTU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBcIixcbiAgICBcImt2bV90ZHBfbW11X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGNhcGFiaWxpdHkgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCBhIG5ldyBpb2N0bCBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgIHRvIHRyYWNrIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfS1ZNYCBhbmQgaXMgc3BlY2lmaWMgdG8geDg2LiBXZSBmb2N1cyBvbiB0aGUgaW9jdGwgZW50cnkgcG9pbnRzIGFuZCB0aGUgVERQIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgd2hlcmUgdGhlIHRyYWNraW5nIGlzIHVwZGF0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAxMzQ1YWVkNDFjMTI0Y2ViNDkxYTVhYzQ3OGRlODc2MGU0MDgzMzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE2OjE4OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5pbmRleCBhNWY5ZWU5MmY0M2U4Li5jZTZlMWQxNWQ0OGQ1IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbkBAIC02NTY2LDYgKzY1NjYsNTMgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRVxuICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXlcbiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuXG4gXG4rNC4xNDUgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0VWRVJfTUFQUEVEXG4rOkFyY2hpdGVjdHVyZXM6IHg4NlxuKzpUeXBlOiB2bSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZ1xuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvbiBlcnJvclxuK1xuK0Vycm9yczpcbitcbisgID09PT09PSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICBFTk9FTlQgICAgIEtWTV9DQVBfRVZFUl9NQVBQRUQgaGFzIG5vdCBiZWVuIGVuYWJsZWQgZm9yIHRoaXMgVk1cbisgIEVJTlZBTCAgICAgYGBncmFudWxlX3NoaWZ0YGAgaXMgYmVsb3cgMjEgKGludGVybmFsIHRyYWNraW5nIGdyYW51bGFyaXR5KSBvclxuKyAgICAgICAgICAgICBhYm92ZSA2M1xuKyAgRUlOVkFMICAgICBgYGZpcnN0X2dyYW51bGVgYCArIGBgbnVtX2dyYW51bGVzYGAgZXh0ZW5kZW5kcyBiZXlvbmQgdGhlIG1heGdwYVxuKyAgICAgICAgICAgICBzZXQgdXAgd2hlbiBLVk1fQ0FQX0VWRVJfTUFQUEVEIHdhcyBlbmFibGVkXG4rICBFSU5WQUwgICAgIGBgZmxhZ3NgYCBpcyBub3QgMFxuKyAgRUZBVUxUICAgICBjb3B5X3tmcm9tLHRvfV91c2VyIG9mIGBgYml0bWFwYGAgZmFpbGVkLCBlLmcuLCBiaXRtYXAgd2Fzbid0XG4rICAgICAgICAgICAgIHN1ZmZpY2llbnRseSBzaXplZFxuKyAgRU5PTUVNICAgICBzZXR0aW5nIHVwIHRlbXBvcmFyeSBiaXRtYXAgZm9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGZhaWxlZFxuKyAgPT09PT09ICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitUaGlzIHJlcXVpcmVzIEtWTV9DQVBfRVZFUl9NQVBQRUQgdG8gaGF2ZSBiZWVuIGVuYWJsZWQgZm9yIHRoZSBWTSB3aXRoIGEgbWF4Z3BhXG4rcGFyYW1ldGVyLlxuK1xuKzo6XG4rXG4rICBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyB7XG4rXHRfX3U2NCBmaXJzdF9ncmFudWxlO1xuK1x0X191NjQgbnVtX2dyYW51bGVzO1xuK1x0X191MzIgZ3JhbnVsZV9zaGlmdDtcbitcdF9fdTMyIGZsYWdzO1xuK1x0dW5pb24ge1xuK1x0XHR2b2lkIF9fdXNlciAqYml0bWFwO1xuK1x0XHRfX3U2NCBwYWRkaW5nO1xuK1x0fTtcbitcdF9fdTY0IHJlc2VydmVkWzRdO1xuKyAgfTtcbitcbitgYGZpcnN0X2dyYW51bGVgYCwgYGBudW1fZ3JhbnVsZXNgYCwgYW5kIGBgZ3JhbnVsZV9zaGlmdGBgIGVuY29kZSB0aGUgR1BBIHJhbmdlXG4rdGhlIGNhbGxlciBpbnF1aXJlcyBhYm91dC4gRm9yIGV4YW1wbGUsIHZhbHVlcyBvZiAyLCAyNSwgYW5kIDIxLCByZXNwZWN0aXZlbHksXG4raW5xdWlyZSBhYm91dCB0aGUgYWRkcmVzcyByYW5nZSBbNE1CLCA1NE1CKS4gVGhlIGNhbGxlciBwcm92aWRlcyBhIGBgYml0bWFwYGBcbitvZiB0aGUgcmVxdWlyZWQgbGVuZ3RoIChpbiB0aGUgYWJvdmUgY2FzZSA0IGJ5dGVzKS4gVGhlIGNhbGwgd2lsbCB3cml0ZSBhIDEgaWZcbithbnkgbWVtb3J5IGluIHRoZSBncmFudWxlIGhhcyBiZWVuIG1hcHBlZCBhdCBzb21lIHBvaW50IHNpbmNlXG4rS1ZNX0NBUF9FVkVSX01BUFBFRCB3YXMgZW5hYmxlZCwgMCBpZiBub3QuXG4rXG4gLi4gX2t2bV9ydW46XG4gXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXG5AQCAtODk0OSw2ICs4OTk2LDI2IEBAIGVuYWJsZWQsIGNtbWEgY2FuJ3QgYmUgZW5hYmxlZCBhbnltb3JlIGFuZCBwZm1maSBhbmQgdGhlIHN0b3JhZ2Uga2V5XG4gaW50ZXJwcmV0YXRpb24gYXJlIGRpc2FibGVkLiBJZiBjbW1hIGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZCBvciB0aGVcbiBocGFnZV8yZyBtb2R1bGUgcGFyYW1ldGVyIGlzIG5vdCBzZXQgdG8gMSwgLUVJTlZBTCBpcyByZXR1cm5lZC5cbiBcbis3LjQ4IEtWTV9DQVBfRVZFUl9NQVBQRURcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbis6QXJjaGl0ZWN0dXJlczogeDg2XG4rOlBhcmFtZXRlcnM6IGFyZ3NbMF0gLSBtYXhpbXVtIEdQQSB0byB0cmFjayBtYXBwZWQgbWVtb3J5XG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgVERQIGlzIG5vdCBhdmFpbGFibGUsIC1FSU5WQUwgaWYgYXJnc1swXVxuKyAgICAgICAgICBpcyAwIG9yIGJleW9uZCB0aGUgbWF4aW11bSBwb3NzaWJsZSBHUEEsIC1FTk9NRU0gaWYgdHJhY2tpbmcgc2V0dXBcbisgICAgICAgICAgZmFpbGVkLCAtRUVYSVNUIGlmIGFscmVhZHkgc2V0IHVwLlxuK1xuK1RoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgS1ZNIGNhbiB0cmFjayBpZiBwYWdlcyBoYXZlIGV2ZXJcbitiZWVuIG1hcHBlZCBieSB0aGUgZ3Vlc3QuIFRoaXMgYWxsb3dzIGEgY29uc2VydmF0aXZlIGVzdGltYXRlIG9mIHdoaWNoIHBhZ2VzXG4rYXJlIG5vdCB6ZXJvIGFueSBtb3JlLlxuK1xuK09uIGVuYWJsaW5nIHRoZSBjYXBhYmlsaXR5LCB0aGUgY2FsbGVyIHByb3ZpZGVzIGEgbWF4IEdQQSB2YWx1ZS4gS1ZNIHdpbGwgdGhlblxuK3RyYWNrIEdQQXMgYmV0d2VlbiAwIGFuZCB0aGlzIHZhbHVlLiBOb3RlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGNhbiBiZSBlbmFibGVkXG4rYXQgYW55IHRpbWUsIGJ1dCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBlbmFibGUgaXQgYmVmb3JlIHZDUFVzIHN0YXJ0XG4rcnVubmluZy4gQW55IHBhZ2UgYWNjZXNzZXMgYnkgdGhlIGd1ZXN0IGJlZm9yZSBjYXBhYmlsaXR5IGVuYWJsZW1lbnQgd2lsbCBub3RcbitiZSB0cmFja2VkLiBUaGUgbWF4IEdQQSB2YWx1ZSBjYW4gb25seSBiZSBzZXQgb25jZTsgc3Vic2VxdWVudCBhdHRlbXB0cyB0b1xuK2VuYWJsZSB0aGUgY2FwYWJpbGl0eSB3aXRoIGEgZGlmZmVyZW50IG9yIGV2ZW4gc2FtZSB2YWx1ZSB3aWxsIGZhaWwuXG4rXG4gOC4gT3RoZXIgY2FwYWJpbGl0aWVzLlxuID09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjUxNzI1N2E2MzE1My4uYzYwN2E5MTkzZjQwMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNTMzLDYgKzE1MzMsMTUgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdCAqL1xuIFx0Ym9vbCBzaGFkb3dfcm9vdF9hbGxvY2F0ZWQ7XG4gXG4rXHQvKlxuK1x0ICogVHJhY2tzIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBhbGxvd3NcbitcdCAqIHRyYWNraW5nIHdoaWNoIG1lbW9yeSBpcyBndWFyYW50ZWVkIHRvIHN0aWxsIGJlIHplcm8sIGUuZy4sIGZvclxuK1x0ICogc3VwcG9ydGluZyB0aGUgSHZFeHRDYWxsR2V0Qm9vdFplcm9lZE1lbW9yeSBlbmxpZ2h0ZW5tZW50LlxuK1x0ICogVGhlIGdyYW51bGFyaXR5IGlzIGRlZmluZWQgYnkgS1ZNX0VWRVJfTUFQUEVEX1NISUZULlxuK1x0ICovXG4rXHR1bnNpZ25lZCBsb25nICpldmVyX21hcHBlZF9iaXRtYXA7XG4rXHR1NjQgZXZlcl9tYXBwZWRfbWF4X2dwYTtcbitcbiAjaWZkZWYgQ09ORklHX0tWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuIFx0LypcbiBcdCAqIElmIHNldCwgdGhlIFZNIGhhcyAob3IgaGFkKSBhbiBleHRlcm5hbCB3cml0ZSB0cmFja2luZyB1c2VyLCBhbmRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L2V2ZXJfbWFwcGVkLmggYi9hcmNoL3g4Ni9rdm0vbW11L2V2ZXJfbWFwcGVkLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNzk1MzM3ZTY4NDg2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L2V2ZXJfbWFwcGVkLmhcbkBAIC0wLDAgKzEsMzMgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX19LVk1fWDg2X0VWRVJfTUFQUEVEX0hcbisjZGVmaW5lIF9fS1ZNX1g4Nl9FVkVSX01BUFBFRF9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuK1xuKy8qXG4rICogVHJhY2sgaWYgcGFnZXMgaGF2ZSBldmVyIGJlZW4gbWFwcGVkIGF0IGFuIGludGVybmFsIGdyYW51bGFyaXR5IG9mIDIgTUIuXG4rICovXG4rI2RlZmluZSBLVk1fRVZFUl9NQVBQRURfU0hJRlQgMjFcbitcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbitcdFx0XHRcdFx0ICAgICB1NjQgbnBhZ2VzKVxuK3tcbitcdGNvbnN0IHVuc2lnbmVkIGludCBzaGlmdCA9IEtWTV9FVkVSX01BUFBFRF9TSElGVCAtIFBBR0VfU0hJRlQ7XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gZ2ZuIFx1MDAzZVx1MDAzZSBzaGlmdDtcbitcdHVuc2lnbmVkIGxvbmcgZW5kID0gKGdmbiArIG5wYWdlcyArICgxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0KSAtIDEpIFx1MDAzZVx1MDAzZSBzaGlmdDtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGVuZCA9IG1pbihlbmQsIGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX21heF9ncGEgXHUwMDNlXHUwMDNlIEtWTV9FVkVSX01BUFBFRF9TSElGVCk7XG4rXHRmb3IgKGkgPSBzdGFydDsgaSBcdTAwM2MgZW5kOyBpKyspIHtcbitcdFx0LypcbitcdFx0ICogcmUtbWFwcGluZyB6YXBwZWQgcGFnZXMgYW5kIGJyZWFraW5nIHVwIG9mIGh1Z2UgcGFnZXMgY2FuXG4rXHRcdCAqIHRyaWdnZXIgYSBudW1iZXIgb2Ygc2V0cyBvbiBhbHJlYWR5IHNldCBiaXRzLCBzbyB0ZXN0IGZpcnN0XG4rXHRcdCAqIGJlZm9yZSBhdG9taWMtc2V0LiBTaW5jZSBiaXRzIGNhbiBuZXZlciBiZSB1bnNldCBhZ2FpbiwgdGhpc1xuK1x0XHQgKiBpcyBzYWZlIGFnYWluc3QgcmFjZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXRlc3RfYml0KGksIGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCkpXG4rXHRcdFx0c2V0X2JpdChpLCBrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApO1xuK1x0fVxuK31cbitcbisjZW5kaWYgLyogX19LVk1fWDg2X0VWRVJfTUFQUEVEX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5pbmRleCBjZTNmMmVmYWRiMDViLi5lYTJhMzdhMDRiMmZmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5AQCAtMSw2ICsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCI6IFwiIGZtdFxuIFxuKyNpbmNsdWRlIFwiZXZlcl9tYXBwZWQuaFwiXG4gI2luY2x1ZGUgXCJtbXUuaFwiXG4gI2luY2x1ZGUgXCJtbXVfaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJtbXV0cmFjZS5oXCJcbkBAIC01NTQsNiArNTU1LDE3IEBAIHN0YXRpYyBpbnQgX19oYW5kbGVfY2hhbmdlZF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIFdoZW5ldmVyIGEgcGFnZSBiZWNvbWVzIGEgZnJlc2ggbGVhZiwgbWFyayB0aGUgbWVtb3J5IGFzIG1hcHBlZC5cbitcdCAqIE9uIGh1Z2VwYWdlIGJyZWFrdXAsIHRoaXMgdHJpZ2dlcnMgZm9yIGVhY2ggbmV3IGxvd2VyLWxldmVsIHBhZ2UsXG4rXHQgKiBldmVuIHRob3VnaCB0aGUgbWVtb3J5IHdhcyBhbHJlYWR5IG1hcmtlZCB3aGVuIHRoZSBodWdlcGFnZSB3YXNcbitcdCAqIG1hcHBlZCwgYnV0IHRoZSBvdmVyaGVhZCBpcyBuZWdsaWdpYmxlLlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoa3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwKSBcdTAwMjZcdTAwMjZcbitcdCAgICBpc19sZWFmIFx1MDAyNlx1MDAyNiAhd2FzX2xlYWYpIHtcbitcdFx0a3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZShrdm0sIGdmbiwgS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpO1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIFJlY3Vyc2l2ZWx5IGhhbmRsZSBjaGlsZCBQVHMgaWYgdGhlIGNoYW5nZSByZW1vdmVkIGEgc3VidHJlZSBmcm9tXG4gXHQgKiB0aGUgcGFnaW5nIHN0cnVjdHVyZS4gIE5vdGUgdGhlIFdBUk4gb24gdGhlIFBGTiBjaGFuZ2luZyB3aXRob3V0IHRoZVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNy4uODljYmNmODM5OWY0OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMjUsNiArMjUsNyBAQFxuICNpbmNsdWRlIFwidHNzLmhcIlxuICNpbmNsdWRlIFwicmVncy5oXCJcbiAjaW5jbHVkZSBcImt2bV9lbXVsYXRlLmhcIlxuKyNpbmNsdWRlIFwibW11L2V2ZXJfbWFwcGVkLmhcIlxuICNpbmNsdWRlIFwibW11L3BhZ2VfdHJhY2suaFwiXG4gI2luY2x1ZGUgXCJ4ODYuaFwiXG4gI2luY2x1ZGUgXCJjcHVpZC5oXCJcbkBAIC0yMzkxLDYgKzIzOTIsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX1JFQURPTkxZX01FTTpcbiBcdFx0ciA9IGt2bSA/IGt2bV9hcmNoX2hhc19yZWFkb25seV9tZW0oa3ZtKSA6IDE7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBLVk1fQ0FQX0VWRVJfTUFQUEVEOlxuK1x0XHRyID0gKHRkcF9lbmFibGVkIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19YODZfNjQpKTtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC00MTkwLDYgKzQxOTQsMzYgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4rXHRjYXNlIEtWTV9DQVBfRVZFUl9NQVBQRUQ6IHtcbitcdFx0dW5zaWduZWQgbG9uZyAqbWFwcGVkX2JpdG1hcDtcbitcdFx0dW5zaWduZWQgbG9uZyBudW1fZ3JhbnVsZXM7XG4rXG4rXHRcdHIgPSAwO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0aWYgKCF0ZHBfZW5hYmxlZCkge1xuK1x0XHRcdHIgPSAtRU9QTk9UU1VQUDtcbitcdFx0fSBlbHNlIGlmIChrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApIHtcbitcdFx0XHRyID0gLUVFWElTVDtcbitcdFx0fSBlbHNlIGlmIChjYXAtXHUwMDNlYXJnc1swXSA9PSAwIHx8XG4rXHRcdFx0ICAgY2FwLVx1MDAzZWFyZ3NbMF0gXHUwMDNlICgxVUxMIFx1MDAzY1x1MDAzYyBrdm1faG9zdC5tYXhwaHlhZGRyKSkge1xuK1x0XHRcdHIgPSAtRUlOVkFMO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG51bV9ncmFudWxlcyA9IERJVl9ST1VORF9VUChjYXAtXHUwMDNlYXJnc1swXSwgMVVMTCBcdTAwM2NcdTAwM2MgS1ZNX0VWRVJfTUFQUEVEX1NISUZUKTtcbitcdFx0XHRtYXBwZWRfYml0bWFwID1cbitcdFx0XHRcdGt2Y2FsbG9jKEJJVFNfVE9fTE9OR1MobnVtX2dyYW51bGVzKSxcbitcdFx0XHRcdFx0IHNpemVvZihsb25nKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdFx0XHRpZiAoIW1hcHBlZF9iaXRtYXApXG4rXHRcdFx0XHRyID0gLUVOT01FTTtcbitcdFx0XHRlbHNlIHtcbitcdFx0XHRcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdFx0XHRcdGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCA9IG1hcHBlZF9iaXRtYXA7XG4rXHRcdFx0XHRrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9tYXhfZ3BhID0gbnVtX2dyYW51bGVzIFx1MDAzY1x1MDAzYyBLVk1fRVZFUl9NQVBQRURfU0hJRlQ7XG4rXHRcdFx0XHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG5AQCAtNDE5Nyw2ICs0MjMxLDczIEBAIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gcjtcbiB9XG4gXG4rc3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZyhzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyAqbG9nKVxuK3tcbitcdHU2NCBtYXhfZ3JhbnVsZXM7XG4rXHR1bnNpZ25lZCBpbnQgY29hcnNlbmVzcztcbitcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcDtcbitcdGludCByO1xuK1xuK1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0aWYgKGxvZy1cdTAwM2VmbGFncylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobG9nLVx1MDAzZWdyYW51bGVfc2hpZnQgXHUwMDNjIEtWTV9FVkVSX01BUFBFRF9TSElGVCB8fCBsb2ctXHUwMDNlZ3JhbnVsZV9zaGlmdCBcdTAwM2U9IDY0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG1heF9ncmFudWxlcyA9IGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX21heF9ncGEgXHUwMDNlXHUwMDNlIGxvZy1cdTAwM2VncmFudWxlX3NoaWZ0O1xuK1x0aWYgKGxvZy1cdTAwM2VudW1fZ3JhbnVsZXMgXHUwMDNlIG1heF9ncmFudWxlcyB8fFxuK1x0ICAgIGxvZy1cdTAwM2VmaXJzdF9ncmFudWxlIFx1MDAzZSBtYXhfZ3JhbnVsZXMgLSBsb2ctXHUwMDNlbnVtX2dyYW51bGVzKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHJlcXVlc3QgdXNlcyB0aGUgc2FtZSBncmFudWxhcml0eSBhcyBvdXIgaW50ZXJuYWxcbitcdCAqIHRyYWNraW5nLCBhbmQgd2UgYXJlIGJ5dGUtYWxpZ25lZCAodGhlIGV4cGVjdGVkIGNvbW1vbiBjYXNlKSwgd2UgY2FuXG4rXHQgKiBqdXN0IGNvcHlfdG9fdXNlci4gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaXRtYXAgdG8gcGFzcy5cbitcdCAqXG4rXHQgKiBXZSBkbyBub3QgbG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgdkNQVXMgbWFwcGluZyBuZXcgbWVtb3J5IG9uIGFueSBvZlxuK1x0ICogdGhlc2Ugb3BlcmF0aW9ucy4gQml0cyBhcmUgc2V0IGF0b21pY2FsbHkgYW5kIG5ldmVyIGNsZWFyZWQsIHNvIGFueSByYWNlXG4rXHQgKiBoZXJlIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSB3cml0ZSBoYXBwZW5pbmcgYWZ0ZXIgdGhpcyBoYW5kbGVyXG4rXHQgKiBmaW5pc2hlcyBidXQgYmVmb3JlIHRoZSBjYWxsZXIgcmVhZHMgdGhlIHJlc3VsdHMuXG4rXHQgKi9cbitcdGNvYXJzZW5lc3MgPSBsb2ctXHUwMDNlZ3JhbnVsZV9zaGlmdCAtIEtWTV9FVkVSX01BUFBFRF9TSElGVDtcbitcdGlmIChjb2Fyc2VuZXNzID09IDAgXHUwMDI2XHUwMDI2ICEobG9nLVx1MDAzZWZpcnN0X2dyYW51bGUgXHUwMDI2IDcpIFx1MDAyNlx1MDAyNiAhKGxvZy1cdTAwM2VudW1fZ3JhbnVsZXMgXHUwMDI2IDcpKSB7XG4rXHRcdGlmIChjb3B5X3RvX3VzZXIobG9nLVx1MDAzZWJpdG1hcCxcbitcdFx0XHRcdCAodTggKilrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXAgKyBsb2ctXHUwMDNlZmlyc3RfZ3JhbnVsZSAvIDgsXG4rXHRcdFx0XHQgbG9nLVx1MDAzZW51bV9ncmFudWxlcyAvIDgpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGJpdG1hcCA9IGt2emFsbG9jKERJVl9ST1VORF9VUChsb2ctXHUwMDNlbnVtX2dyYW51bGVzLCA4KSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghYml0bWFwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAodTY0IGdyYW4gPSBsb2ctXHUwMDNlZmlyc3RfZ3JhbnVsZTtcbitcdCAgICAgZ3JhbiBcdTAwM2MgbG9nLVx1MDAzZWZpcnN0X2dyYW51bGUgKyBsb2ctXHUwMDNlbnVtX2dyYW51bGVzO1xuK1x0ICAgICBncmFuKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGdyYW4gXHUwMDNjXHUwMDNjIGNvYXJzZW5lc3M7XG4rXHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyAoMVVMIFx1MDAzY1x1MDAzYyBjb2Fyc2VuZXNzKTtcbitcbitcdFx0aWYgKGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwLCBlbmQsIHN0YXJ0KSBcdTAwM2MgZW5kKVxuK1x0XHRcdF9fc2V0X2JpdChncmFuIC0gbG9nLVx1MDAzZWZpcnN0X2dyYW51bGUsIGJpdG1hcCk7XG4rXHR9XG4rXG4rXHRpZiAoY29weV90b191c2VyKGxvZy1cdTAwM2ViaXRtYXAsIGJpdG1hcCwgRElWX1JPVU5EX1VQKGxvZy1cdTAwM2VudW1fZ3JhbnVsZXMsIDgpKSkge1xuK1x0XHRyID0gLUVGQVVMVDtcbitcdFx0Z290byBvdXRfZnJlZTtcbitcdH1cbitcbitcdHIgPSAwO1xuK1xuK291dF9mcmVlOlxuK1x0a3ZmcmVlKGJpdG1hcCk7XG4rXHRyZXR1cm4gcjtcbit9XG4rXG4gI2lmZGVmIENPTkZJR19LVk1fQ09NUEFUXG4gLyogZm9yIEtWTV9YODZfU0VUX01TUl9GSUxURVIgKi9cbiBzdHJ1Y3Qga3ZtX21zcl9maWx0ZXJfcmFuZ2VfY29tcGF0IHtcbkBAIC00NzEwLDYgKzQ4MTEsMTUgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0ga3ZtX3ZtX2lvY3RsX3NldF9tc3JfZmlsdGVyKGt2bSwgXHUwMDI2ZmlsdGVyKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4rXHRjYXNlIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HOiB7XG4rXHRcdHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIG1hcHBlZF9sb2c7XG4rXG4rXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZtYXBwZWRfbG9nLCBhcmdwLCBzaXplb2YobWFwcGVkX2xvZykpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0XHRyID0ga3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2coa3ZtLCBcdTAwMjZtYXBwZWRfbG9nKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbmluZGV4IDQxOTAxMTA5N2ZhOGUuLmQwYmU5NDk0NmE3N2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuQEAgLTk5Nyw2ICs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbisjZGVmaW5lIEtWTV9DQVBfRVZFUl9NQVBQRUQgMjUwXG4gXG4gc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHtcbiBcdF9fdTMyIGlycWNoaXA7XG5AQCAtMTY3MCw0ICsxNjcxLDE4IEBAIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7XG4gXHRfX3U2NCBwYWRkaW5nWzVdO1xuIH07XG4gXG4rI2RlZmluZSBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRyAgX0lPVyhLVk1JTywgIDB4ZDYsIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nKVxuK1xuK3N0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIHtcbitcdF9fdTY0IGZpcnN0X2dyYW51bGU7XG4rXHRfX3U2NCBudW1fZ3JhbnVsZXM7XG4rXHRfX3UzMiBncmFudWxlX3NoaWZ0O1xuK1x0X191MzIgZmxhZ3M7XG4rXHR1bmlvbiB7XG4rXHRcdHZvaWQgX191c2VyICpiaXRtYXA7XG4rXHRcdF9fdTY0IHBhZGRpbmc7XG4rXHR9O1xuK1x0X191NjQgcmVzZXJ2ZWRbNF07XG4rfTtcbitcbiAjZW5kaWYgLyogX19MSU5VWF9LVk1fSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA0YWNlMTI2MDZlOTM3Li4xZWIwYmFjMTkyMGRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTE2Miw2ICsxNjIsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN0ZWFsX3RpbWVcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gc3lzdGVtX2NvdW50ZXJfb2Zmc2V0X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0XG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGV2ZXJfbWFwcGVkX3Rlc3RcbiBcbiAjIENvbXBpbGVkIG91dHB1dHMgdXNlZCBieSB0ZXN0IHRhcmdldHNcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRF94ODYgKz0geDg2L254X2h1Z2VfcGFnZXNfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ldmVyX21hcHBlZF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZXZlcl9tYXBwZWRfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzY3MjNmMGM5ZWUyY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2V2ZXJfbWFwcGVkX3Rlc3QuY1xuQEAgLTAsMCArMSwxOTEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogS1ZNIGV2ZXItbWFwcGVkIGJpdG1hcCB0ZXN0XG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIE51dGFuaXgsIEluYy5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2t2bV91dGlsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nwcm9jZXNzb3IuaFx1MDAzZVxuK1xuKyNkZWZpbmUgS2lCIDEwMjR1XG4rI2RlZmluZSBNaUIgKDEwMjQgKiBLaUIpXG4rXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh1aW50NjRfdCBiYXNlX2dwYSwgc2l6ZV90IGxlbilcbit7XG4rXHRHVUVTVF9ET05FKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFzc2VydF9iaXRtYXBzX2VxdWFsKHU4IGV4cGVjdGVkW10sIHU4IGFjdHVhbFtdLCBzaXplX3QgbGVuKVxuK3tcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKykge1xuK1x0XHRURVNUX0FTU0VSVChleHBlY3RlZFtpXSA9PSBhY3R1YWxbaV0sXG4rXHRcdFx0ICAgIFwiYnl0ZSAlbGQsIGV4cGVjdGVkIDB4JTAyeCwgZ290IDB4JTAyeFwiLFxuK1x0XHRcdCAgICBpLCBleHBlY3RlZFtpXSwgYWN0dWFsW2ldKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcHJlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHN0YXJ0LCB1NjQgbGVuKVxuK3tcbitcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZSA9IHtcbitcdFx0LmdwYSA9IHN0YXJ0LFxuK1x0XHQuc2l6ZSA9IGxlbixcbitcdFx0LmZsYWdzID0gMCxcbitcdH07XG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCBcdTAwMjZyYW5nZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfb25lX3BhZ2Uodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZSA9IHtcbitcdFx0LmdwYSA9IDB4MCxcbitcdFx0LnNpemUgPSBQQUdFX1NJWkUsXG4rXHRcdC5mbGFncyA9IDAsXG4rXHR9O1xuK1x0dW5zaWduZWQgY2hhciBtYXBwZWRfYml0bWFwO1xuK1x0c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0ge1xuK1x0XHQuZmlyc3RfZ3JhbnVsZSA9IDAsXG4rXHRcdC5udW1fZ3JhbnVsZXMgPSAxLFxuK1x0XHQuZ3JhbnVsZV9zaGlmdCA9IDIxLFxuK1x0XHQuZmxhZ3MgPSAwLFxuK1x0XHQuYml0bWFwID0gXHUwMDI2bWFwcGVkX2JpdG1hcCxcbitcdH07XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuK1xuK1x0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FVkVSX01BUFBFRCwgUEFHRV9TSVpFKTtcbitcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX1BSRV9GQVVMVF9NRU1PUlksIFx1MDAyNnJhbmdlKTtcbitcbitcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbitcdFRFU1RfQVNTRVJUKG1hcHBlZF9iaXRtYXAgPT0gMHgxLCBcImV4cGVjdGVkIDB4MSwgZ290IDB4JXhcIiwgbWFwcGVkX2JpdG1hcCk7XG4rfVxuK1xuKy8qXG4rICogQWRkIDY0TUIgb3IgbWVtb3J5IGF0IEdQQSAxNk1CICggLS1cdTAwM2UgWzE2TUIsIDgwTUIpICksXG4rICogcHJlLWZhdWx0IFsxNk1CLCA0OE1CKSwgcmVxdWVzdCBhbmQgY2hlY2sgYml0bWFwIGZvciBbMTZNQiwgODBNQikuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF9vbmVfYmxvY2sodm9pZClcbit7XG4rXHRpbnQgcmV0O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRjb25zdCB1aW50NjRfdCBtYXBfc3RhcnQgPSAweDEwMDAwMDA7XG4rXHRjb25zdCB1aW50NjRfdCBtYXBfbGVuID0gMHg0MDAwMDAwO1xuK1x0dTggbWFwcGVkX2JpdG1hcFs0XSA9IHsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9O1xuK1x0dTggZXhwZWN0ZWRfYml0bWFwWzRdID0geyAweGZmLCAweGZmLCAweDAwLCAweDAwIH07XG4rXHRzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyBsb2cgPSB7XG4rXHRcdC5maXJzdF9ncmFudWxlID0gMHg4LFxuK1x0XHQubnVtX2dyYW51bGVzID0gMHgyMCxcbitcdFx0LmdyYW51bGVfc2hpZnQgPSAyMSxcbitcdFx0LmZsYWdzID0gMCxcbitcdFx0LmJpdG1hcCA9IG1hcHBlZF9iaXRtYXAsXG4rXHR9O1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcbitcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIG1hcF9zdGFydCwgMSwgbWFwX2xlbiAvIFBBR0VfU0laRSwgMCk7XG4rXG4rXHRyZXQgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbitcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5PRU5ULFxuK1x0XHQgICAgXCJleHBlY3RlZCBFTk9FTlQgd2hlbiBxdWVyeWluZyBldmVyLW1hcHBlZCBsb2cgYmVmb3JlIGVuYWJsZW1lbnQsIGdvdCAlZFwiLFxuK1x0XHQgICAgZXJybm8pO1xuK1x0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FVkVSX01BUFBFRCwgbWFwX3N0YXJ0ICsgbWFwX2xlbik7XG4rXHRwcmVfZmF1bHQodmNwdSwgMTYgKiBNaUIsIDMyICogTWlCKTtcbitcbitcdHJldCA9IF9fdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FVkVSX01BUFBFRCwgUEFHRV9TSVpFKTtcbitcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxuK1x0XHQgICAgXCJleHBlY3RlZCBFRVhJU1Qgd2hlbiBlbmFibGluZyBLVk1fQ0FQX0VWRVJfTUFQUEVEIHR3aWNlLCBnb3QgJWRcIixcbitcdFx0ICAgIGVycm5vKTtcbitcbitcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbitcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XG4rXG4rXHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDIyO1xuK1x0bG9nLmZpcnN0X2dyYW51bGUgPSAweDQ7XG4rXHRsb2cubnVtX2dyYW51bGVzID0gMHgxMDtcbitcdG1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XG4rXHRtZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4ZmYsIDB4MDAsIDB4YTUsIDB4YTUgfSwgNCk7XG4rXHR2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFx1MDAyNmxvZyk7XG4rXHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xuK1xuK1x0bG9nLmdyYW51bGVfc2hpZnQgPSAyMztcbitcdGxvZy5maXJzdF9ncmFudWxlID0gMHgyO1xuK1x0bG9nLm51bV9ncmFudWxlcyA9IDB4ODtcbitcdG1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XG4rXHRtZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4MGYsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XG4rXHR2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFx1MDAyNmxvZyk7XG4rXHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xuK1xuK1x0bG9nLm51bV9ncmFudWxlcyA9IDB4ZmY7XG4rXHRyZXQgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbitcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuK1x0XHQgICAgXCJleHBlY3RlZCBFSU5WQUwgd2hlbiBxdWVyeWluZyBiZXlvbmQgcmFuZ2UsIGdvdCAlZFwiLFxuK1x0XHQgICAgZXJybm8pO1xuK1xuK1x0bG9nLm51bV9ncmFudWxlcyA9IDB4MTA7XG4rXHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDE7XG4rXHRyZXQgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbitcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuK1x0XHQgICAgXCJleHBlY3RlZCBFSU5WQUwgd2l0aCB0b28gc21hbGwgZ3JuYXVsZSBzaGlmdCwgZ290ICVkXCIsXG4rXHRcdCAgICBlcnJubyk7XG4rfVxuK1xuKy8qXG4rICogQWRkIDEyOE1CIG9yIG1lbW9yeSBhdCBHUEEgMzJNQiAoIC0tXHUwMDNlIFszMk1CLCAxNjBNQikgKSxcbisgKiBwcmUtZmF1bHQgWzMyTUIsIDY0TUIpLCBhbmQgWzkwTUIsIDk0TUIpLFxuKyAqIHJlcXVlc3QgYW5kIGNoZWNrIGJpdG1hcCBmb3IgWzE2TUIsIDEyME1CKS5cbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0X3R3b19ibG9ja3Modm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdGNvbnN0IHVpbnQ2NF90IG1hcF9zdGFydCA9IDB4MjAwMDAwMDtcbitcdGNvbnN0IHVpbnQ2NF90IG1hcF9sZW4gPSAweDgwMDAwMDA7XG4rXHR1OCBtYXBwZWRfYml0bWFwWzddID0geyAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH07XG4rXHR1OCBleHBlY3RlZF9iaXRtYXBbN10gPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAgfTtcbitcdHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIGxvZyA9IHtcbitcdFx0LmZpcnN0X2dyYW51bGUgPSAweDgsXG4rXHRcdC5udW1fZ3JhbnVsZXMgPSAweDM0LFxuK1x0XHQuZ3JhbnVsZV9zaGlmdCA9IDIxLFxuK1x0XHQuZmxhZ3MgPSAwLFxuK1x0XHQuYml0bWFwID0gbWFwcGVkX2JpdG1hcCxcbitcdH07XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuK1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgbWFwX3N0YXJ0LCAxLCBtYXBfbGVuIC8gUEFHRV9TSVpFLCAwKTtcbitcbitcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVZFUl9NQVBQRUQsIG1hcF9zdGFydCArIG1hcF9sZW4pO1xuK1x0cHJlX2ZhdWx0KHZjcHUsIDMyICogTWlCLCAzMiAqIE1pQik7XG4rXHRwcmVfZmF1bHQodmNwdSwgOTAgKiBNaUIsIDQgKiBNaUIpO1xuK1xuK1x0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuK1x0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcbitcbitcdGxvZy5ncmFudWxlX3NoaWZ0ID0gMjI7XG4rXHRsb2cuZmlyc3RfZ3JhbnVsZSA9IDB4NDtcbitcdGxvZy5udW1fZ3JhbnVsZXMgPSAweDFhO1xuK1x0bWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNX0sIDcpO1xuK1x0bWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweGYwLCAweDBmLCAweDBjLCAweDAwLCAweGE1LCAweGE1LCAweGE1IH0sIDcpO1xuK1x0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuK1x0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcbitcbitcdGxvZy5ncmFudWxlX3NoaWZ0ID0gMjM7XG4rXHRsb2cuZmlyc3RfZ3JhbnVsZSA9IDB4MjtcbitcdGxvZy5udW1fZ3JhbnVsZXMgPSAweGQ7XG4rXHRtZW1jcHkobWFwcGVkX2JpdG1hcCwgKHU4W10peyAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDcpO1xuK1x0bWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweDNjLCAweDAyLCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDcpO1xuK1x0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuK1x0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfRVZFUl9NQVBQRUQpKTtcbitcbitcdHRlc3Rfb25lX3BhZ2UoKTtcbitcdHRlc3Rfb25lX2Jsb2NrKCk7XG4rXHR0ZXN0X3R3b19ibG9ja3MoKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODoyMC4wMTUxMTY4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MTY4MDE5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gRXZlci1NYXBwZWQgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNpbmcgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCB0aGUgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYCBpb2N0bCBmb3IgeDg2IEtWTS4gSXQgc2VlbXMgbGlrZSBpdCdzIGRlc2lnbmVkIHRvIHRyYWNrIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgKmV2ZXIqIGJlZW4gbWFwcGVkLCB3aGljaCBpcyBhIG5lYXQgY2FwYWJpbGl0eS5cblxuRmlyc3QsIGxldCdzIG1ha2Ugc3VyZSB0aGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4gWWVwLCBuZXcgaW9jdGwsIG5ldyBjYXBhYmlsaXR5IOKAkyB0aGF0IHNjcmVhbXMgZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFFFTVUsIHN5emthbGxlciwgYWxsIHRob3NlIHRvb2xzIHdpbGwgYmUgYWJsZSB0byB1dGlsaXplIHRoaXMuIEdvb2QuXG5cbk5vdywgd2hlcmUgYXJlIHRoZSBjcml0aWNhbCBzeW1ib2xzPyBMZXQncyBzZWUuLi4gSSd2ZSBnb3Q6XG5cbiogICBga3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZWAgLSBzb3VuZHMgbGlrZSB0aGUgd29ya2hvcnNlIHNldHRpbmcgZXZlci1tYXBwZWQgc3RhdHVzLCBpbmxpbmVkIGludG8gYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAgd2l0aGluIGB0ZHBfbW11LmNgLlxuKiAgIGBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZ2AgLSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgXG4qICAgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCAtIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgbmV3IGBLVk1fQ0FQX0VWRVJfTUFQUEVEYFxuKiAgIGBrdm1fYXJjaF92bV9pb2N0bGAgLSBtb2RpZmllZCB0byBoYW5kbGUgdGhlIG5ldyBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgXG5cblNpbmNlIGBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZ2AgaXMgc3RhdGljLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGFjdHVhbGx5IHVzZWQuIEFoLCB5ZXMsIGl0IGlzLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseSBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLiBUaGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzLlxuXG5MZXQncyBjaGVjayBgYXJjaC94ODYva3ZtL3g4Ni5jYCBmb3IgYGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY1OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjE4OjI4LjQzMTkyMjcwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc0NTQ3MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz0zOTMxPWludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDIzMy1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDIzNDpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDIzNS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgKmxvZylcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz00NDU1PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy00ODE5LVxcbmFyY2gveDg2L2t2bS94ODYuYzo0ODIwOlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZyhrdm0sIFxcdTAwMjZtYXBwZWRfbG9nKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDgyMS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MTg6MzAuODA2NDc1MTY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzNjA5NDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIEFyY2hpdGVjdHVyZSBmb3IgUG90ZW50aWFsIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgS1ZNIGNvZGUgYW5kIHRyeWluZyB0byB0cmFjZSBob3cgdGhpcyBgX19oYW5kbGVfY2hhbmdlZF9zcHRlYCBmdW5jdGlvbiwgd2hpY2ggaXMsIGltcG9ydGFudGx5LCAqc3RhdGljKiwgaXMgdXNlZCBpbiB0aGUgYHRkcF9tbXUuY2AgZmlsZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyAtIEkga25vdyBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGFyZSB0aGUgb25lcyB0byBzdGFydCB3aXRoLiBCdXQgcmVhbGx5IHdoYXQgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlzLCBkb2VzIGEgKm5vbi1zdGF0aWMqIGZ1bmN0aW9uICppbiB0aGlzIGZpbGUqLCBgdGRwX21tdS5jYCwgY2FsbCB0aGlzIGludGVybmFsIGBfX2hhbmRsZV9jaGFuZ2VkX3NwdGVgIGZ1bmN0aW9uPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLiBJZiBpdCdzIG9ubHkgY2FsbGVkIGludGVybmFsbHksIHRoYXQgbmFycm93cyB0aGUgc2NvcGUgb2YgaW52ZXN0aWdhdGlvbiBzaWduaWZpY2FudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODozNC42NDI1NzE4MThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzOTQ3MDc2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2hhbmRsZV9jaGFuZ2VkX3NwdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9Mzg2PXN0YXRpYyB2b2lkIGhhbmRsZV9yZW1vdmVkX3B0KHN0cnVjdCBrdm0gKmt2bSwgdGRwX3B0ZXBfdCBwdCwgYm9vbCBzaGFyZWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00NzEtLyoqXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NDcyOiAqIF9faGFuZGxlX2NoYW5nZWRfc3B0ZSAtIGhhbmRsZSBib29ra2VlcGluZyBhc3NvY2lhdGVkIHdpdGggYW4gU1BURSBjaGFuZ2VcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00NzMtICogQGt2bToga3ZtIGluc3RhbmNlXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00ODYtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NDg3OnN0YXRpYyBpbnQgX19oYW5kbGVfY2hhbmdlZF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDg4LVxcdFxcdFxcdFxcdCBnZm5fdCBnZm4sIHU2NCBvbGRfc3B0ZSwgdTY0IG5ld19zcHRlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9NTk3PXN0YXRpYyB2b2lkIGhhbmRsZV9jaGFuZ2VkX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTYwMC17XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NjAxOlxcdEtWTV9CVUdfT04oX19oYW5kbGVfY2hhbmdlZF9zcHRlKGt2bSwgc3AsIGdmbiwgb2xkX3NwdGUsIG5ld19zcHRlLFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTYwMi1cXHRcXHRcXHRcXHRcXHQgbGV2ZWwsIHNoYXJlZCksIGt2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz02NDc9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHRkcF9tbXVfc2V0X3NwdGVfYXRvbWljKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTY4MC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo2ODE6XFx0cmV0ID0gX19oYW5kbGVfY2hhbmdlZF9zcHRlKGt2bSwgc3AsIGl0ZXItXFx1MDAzZWdmbiwgaXRlci1cXHUwMDNlb2xkX3NwdGUsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNjgyLVxcdFxcdFxcdFxcdCAgICBuZXdfc3B0ZSwgaXRlci1cXHUwMDNlbGV2ZWwsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODozNy4wODIwNTA4ODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkyMTUzMzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFBvdGVudGlhbCBLZXkgRnVuY3Rpb25zIGluIGB0ZHBfbW11LmNgKipcblxuT2theSwgc28gYGhhbmRsZV9jaGFuZ2VkX3NwdGVgIGFuZCBgdGRwX21tdV9zZXRfc3B0ZV9hdG9taWNgIGJvdGggdWx0aW1hdGVseSBmdW5uZWwgaW50byBgX19oYW5kbGVfY2hhbmdlZF9zcHRlYC4gVGhhdCdzIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFNQVEUgY2hhbmdlcyBhcmUgbWFuYWdlZCBpbiB0aGlzIFREUCBNTVUgY29udGV4dC4gTXkgdGFzayBub3cgaXMgdG8gaWRlbnRpZnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGB0ZHBfbW11LmNgIHRoYXQgbWlnaHQgcHJvdmlkZSBhZGRpdGlvbmFsIGluc2lnaHRzLCBzZXJ2aW5nIGFzIHBvdGVudGlhbCBcImZvY3VzIHN5bWJvbHNcIiB0byBidWlsZCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBGaW5kaW5nIHRoZSByaWdodCBmdW5jdGlvbnMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiBTUFRFIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoaXMgbW9kdWxlLiBJIG5lZWQgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgZWl0aGVyIGludGVyYWN0IHdpdGggU1BURXMgZGlyZWN0bHkgb3IgdGhhdCBjb250cm9sIHJlbGF0ZWQgYXNwZWN0cyBvZiB0aGUgVERQIE1NVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NTIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODo0MS44NzQyMDY1NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyODExMzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGt2bV90ZHBfbW11X1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc2hhZG93X3Jvb3RfYWxsb2NhdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUuaC0zNDEtXFxuYXJjaC94ODYva3ZtL21tdS5oOjM0MjppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQzLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM1PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTQ2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE0NzppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE0OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMjIyPXN0YXRpYyBpbnQgdGRwX21tdV9zcGxpdF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMjI4LSAqL1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEyMjk6aW50IGt2bV90ZHBfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTIzMC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xODkxPWJvb2wga3ZtX3RkcF9tbXVfd3JpdGVfcHJvdGVjdF9nZm4oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTkxMC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxOTExOmludCBrdm1fdGRwX21tdV9nZXRfd2FsayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCB1NjQgKnNwdGVzLFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTE5MTItXFx0XFx0XFx0IGludCAqcm9vdF9sZXZlbClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTcyPXZvaWQga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBzaGFyZWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTczLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjc0OmludCBrdm1fdGRwX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC03NS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTEwNj1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3RkcF9tbXVfd2Fsa19sb2NrbGVzc19lbmQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTExMC1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDoxMTE6aW50IGt2bV90ZHBfbW11X2dldF93YWxrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIHU2NCAqc3B0ZXMsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtMTEyLVxcdFxcdFxcdCBpbnQgKnJvb3RfbGV2ZWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODo0NC41MDIzMjU2OTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDY0MDk3MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEtWTSBjb2RlLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uLiBga3ZtX3RkcF9tbXVfbWFwYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGFnZSBmYXVsdCBwYXRoLCBidXQgdGhlIHJlYWwgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBjYXBhYmlsaXRpZXMgYXJlIGBrdm1fYXJjaF92bV9pb2N0bGAgZm9yIGBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPR2AgYW5kIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgZm9yIGBLVk1fQ0FQX0VWRVJfTUFQUEVEYC4gVGhvc2UgdHdvIGFyZSBkZWZpbml0ZWx5IHdvcnRoIHByaW9yaXRpemluZyBpbiBteSBhbmFseXNpcywgYWxvbmcgd2l0aCB0aGUgYHRkcF9tbXVfbWFwYCBmdW5jdGlvbiwgd2hpY2ggYXBwZWFycyBjZW50cmFsIHRvIHRoZSBURFAgTU1VIG9wZXJhdGlvbnMuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgcGF0Y2ggdG91Y2hlcyBgYXJjaC94ODYva3ZtL3g4Ni5jYCBhbmQgYGFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBzcGVjaWZpYyB0byB4ODYgS1ZNLiBUaGUgcHJlc2VuY2Ugb2YgYHRkcF9lbmFibGVkYCBjb25maXJtcyB0aGF0LiBJIGtub3cgYENPTkZJR19LVk1gIGlzIGEgZ2l2ZW4sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyBlbHNlLiBMZXQncyBjaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTY0LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjE4OjQ5LjU2NjQyNTE4MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NjY2NzE5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc9MTY9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTctXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjE4OmNvbmZpZyBLVk1cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMC1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc6MzE6Y29uZmlnIEtWTV9NSVBTX0RFQlVHX0NPUDBfQ09VTlRFUlNcXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzItXFx0Ym9vbCBcXFwiTWFpbnRhaW4gY291bnRlcnMgZm9yIENPUDAgYWNjZXNzZXNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNjpjb25maWcgS1ZNX0JPT0szU19IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI3LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI5OmNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzAtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozNDpjb25maWcgS1ZNX0JPT0szU182NF9IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNy1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mzg6Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzktXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ0LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0NTpjb25maWcgS1ZNX0JPT0szU18zMlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzMyIHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjUtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyNjpjb25maWcgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjctXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyOTpjb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIkRldGFpbGVkIHRpbWluZyBmb3IgdGhlIFA5IGVudHJ5IHBvaW50XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDMtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgdGltaW5nIGZvciBoeXBlcnZpc29yIHJlYWwtbW9kZSBjb2RlIChmb3IgUE9XRVI4KVxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNTYtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE1Nzpjb25maWcgS1ZNX0JPT0szU19IVl9ORVNURURfUE1VX1dPUktBUk9VTkRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIk5lc3RlZCBMMCBob3N0IHdvcmthcm91bmQgZm9yIEwxIEtWTSBob3N0IFBNVSBoYW5kbGluZyBidWdcXFwiIGlmIEVYUEVSVFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BNVVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIkh5cGVydmlzb3IgUGVyZiBldmVudHMgZm9yIEtWTSBCb29rM3MtSFZcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTgzLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODQ6Y29uZmlnIEtWTV9CT09LRV9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODUtXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODYtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4Nzpjb25maWcgS1ZNX0VYSVRfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJEZXRhaWxlZCBleGl0IHRpbWluZ1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTctXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE5ODpjb25maWcgS1ZNX0U1MDBWMlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTktXFx0Ym9vbCBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMHYyIHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEyLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMTM6Y29uZmlnIEtWTV9FNTAwTUNcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjE0LVxcdGJvb2wgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDBNQy9FNTUwMC9FNjUwMCBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fTVBJQ1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbCBcXFwiS1ZNIGluLWtlcm5lbCBNUElDIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDAtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI0MTpjb25maWcgS1ZNX1hJQ1NcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQyLVxcdGJvb2wgXFxcIktWTSBpbi1rZXJuZWwgWElDUyBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUwLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTE6Y29uZmlnIEtWTV9YSVZFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1Mi1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc9MjI9c291cmNlIFxcXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21pY3Jvd2F0dC9LY29uZmlnXFxcIlxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yMy1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc6MjQ6Y29uZmlnIEtWTV9HVUVTVFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9ODM5PXNvdXJjZSBcXFwiYXJjaC94ODYveGVuL0tjb25maWdcXFwiXFxuYXJjaC94ODYvS2NvbmZpZy04NDAtXFxuYXJjaC94ODYvS2NvbmZpZzo4NDE6Y29uZmlnIEtWTV9HVUVTVFxcbmFyY2gveDg2L0tjb25maWctODQyLVxcdGJvb2wgXFxcIktWTSBHdWVzdCBzdXBwb3J0IChpbmNsdWRpbmcga3ZtY2xvY2spXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctMy1cXG52aXJ0L2t2bS9LY29uZmlnOjQ6Y29uZmlnIEtWTV9DT01NT05cXG52aXJ0L2t2bS9LY29uZmlnLTUtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9Mzk9Y29uZmlnIE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNDItXFxudmlydC9rdm0vS2NvbmZpZzo0Mzpjb25maWcgS1ZNX01NSU9cXG52aXJ0L2t2bS9LY29uZmlnLTQ0LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy00NS1cXG52aXJ0L2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fQVNZTkNfUEZcXG52aXJ0L2t2bS9LY29uZmlnLTQ3LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTQ5LSMgVG9nZ2xlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpcmVjdCBub3RpZmljYXRpb24gYW5kIGJhdGNoIGpvYlxcbnZpcnQva3ZtL0tjb25maWc6NTA6Y29uZmlnIEtWTV9BU1lOQ19QRl9TWU5DXFxudmlydC9rdm0vS2NvbmZpZy01MS0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz01OT1jb25maWcgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy02MS1cXG52aXJ0L2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fVkZJT1xcbnZpcnQva3ZtL0tjb25maWctNjMtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9NjU9Y29uZmlnIEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy02Ny1cXG52aXJ0L2t2bS9LY29uZmlnOjY4OmNvbmZpZyBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG52aXJ0L2t2bS9LY29uZmlnLTY5LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy03MC1cXG52aXJ0L2t2bS9LY29uZmlnOjcxOmNvbmZpZyBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxudmlydC9rdm0vS2NvbmZpZy03Mi0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNzMtXFxudmlydC9rdm0vS2NvbmZpZzo3NDpjb25maWcgS1ZNX0NPTVBBVFxcbnZpcnQva3ZtL0tjb25maWctNzUtICAgICAgIGRlZl9ib29sIHlcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9OTE9Y29uZmlnIEhBVkVfS1ZNX1BNX05PVElGSUVSXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTkzLVxcbnZpcnQva3ZtL0tjb25maWc6OTQ6Y29uZmlnIEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxudmlydC9rdm0vS2NvbmZpZy05NS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctOTYtXFxudmlydC9rdm0vS2NvbmZpZzo5Nzpjb25maWcgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbnZpcnQva3ZtL0tjb25maWctOTgtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTk5LVxcbnZpcnQva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXFxudmlydC9rdm0vS2NvbmZpZy0xMDEtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cXG52aXJ0L2t2bS9LY29uZmlnOjEwMzpjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG52aXJ0L2t2bS9LY29uZmlnLTEwNC0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctMTA1LVxcbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODo1MS45NTMwOTgyNDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzNDI0ODQ2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBFdmVyLU1hcHBlZCBUcmFja2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1ZNIGZ1bmN0aW9uYWxpdHkg4oCTIHRoZSBcImV2ZXItbWFwcGVkXCIgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIGBLVk1gIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIGBYODZfNjRgIGlzIGltcGxpY2l0bHkgcmVxdWlyZWQgZHVlIHRvIHRoZSBgdGRwX2VuYWJsZWRgIGNoZWNrLCB3aGljaCBzZWVtcyB0byByZXF1aXJlIHRoZSA2NC1iaXQgYXJjaGl0ZWN0dXJlLiBTbywgcHJpbWFyaWx5LCBgS1ZNYCBpcyB3aGF0IHdlIG5lZWQgdG8gZm9jdXMgb24uXG5cbkkgY2hlY2tlZCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBJIGNvbmZpcm1lZCB0aGF0IGB0ZHBfZW5hYmxlZGAgaXMgcmVxdWlyZWQsIHdoaWNoIGlzIHRydWUgYnkgZGVmYXVsdCBmb3IgSW50ZWwgRVBUIGFuZCBBTUQgTlBULiBUaGlzIGNvbmZpcm1zIHRoZSBpbXBvcnRhbmNlIG9mIEtWTSBiZWluZyBlbmFibGVkLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBjb2RlIGZsb3cuIEkgd2FudCB0byBoaWdobGlnaHQgc29tZSBrZXkgc3ltYm9scyB0aGF0IHJldmVhbCBob3cgdGhpcyBuZXcgdHJhY2tpbmcgd29ya3MuIEkgZmlndXJlZCBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBhbmQgYGt2bV90ZHBfbW11X21hcGAgYXJlIHJlbGV2YW50IGVudHJ5IHBvaW50cy4gSSdtIGZvY3VzaW5nIG9uIGBrdm1fdGRwX21tdV9tYXBgIGJlY2F1c2UgaXQncyB3aGVyZSB0aGUgVERQIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nIG9jY3VycyBhbmQgd2hlcmUgd2UnbGwgZmluZCB0aGUgbG9naWMgZm9yIHNldHRpbmcgdGhlIGV2ZXItbWFwcGVkIGJpdHMuXG5cbkkgY29uZmlybWVkIHRoYXQgYGt2bV90ZHBfbW11X21hcGAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIFREUCBNTVUgcGFnZSBmYXVsdHMgaW4gYGFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jYC4gSSBjaGVja2VkIGZvciBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHNgLCBidXQgYGt2bV90ZHBfbW11X21hcGAgaXMgdGhlIGNydWNpYWwgb25lIGJlY2F1c2UgaXQncyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBuZXcgU1BURXMsIHdoaWNoIHRoZW4gdHJpZ2dlcnMgdGhlIGV2ZXItbWFwcGVkIHRyYWNraW5nIGxvZ2ljLlxuXG5SZXZpc2l0aW5nIHRoZSBmb2N1cyBzeW1ib2xzOiBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBhbmQgZXNwZWNpYWxseSBga3ZtX3RkcF9tbXVfbWFwYC5cblxuVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogVGhlIG5ldyBLVk0gY2FwYWJpbGl0eSBgS1ZNX0NBUF9FVkVSX01BUFBFRGAgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPR2AgaW9jdGwgYWxsb3cgdXMgdG8gdHJhY2sgZ3Vlc3QgcGFnZXMgdGhhdCBoYXZlIGJlZW4gbWFwcGVkLiBUaGlzIGlzIGFjY2Vzc2VkIHRocm91Z2ggS1ZNIGlvY3Rscywgc28gd2UncmUgbG9va2luZyBhdCBhIHVzZXItc3BhY2UtYWNjZXNzaWJsZSBmZWF0dXJlLiBUaGUgcGF0Y2ggcmVxdWlyZXMgYm90aCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfWDg2XzY0YCwgd2l0aCBLVk0gYmVpbmcgdGhlIGNyaXRpY2FsIG9uZS4gVGhlIGNvcmUgb2YgdGhpcyB0cmFja2luZyBvY2N1cnMgd2l0aGluIHRoZSBpb2N0bCBlbnRyeSBwb2ludHMgYW5kIHRoZSBURFAgTU1VIHBhZ2UgZmF1bHQgaGFuZGxlci5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGBrdm1fdGRwX21tdV9tYXBgLiBZZXMsIGl0J3MgY2FsbGVkIGR1cmluZyBwYWdlIGZhdWx0cyBhbmQgU1BURSBjcmVhdGlvbi4gTG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuXHRpZiAodW5saWtlbHkoa3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwKSBcdTAwMjZcdTAwMjZcblx0ICAgIGlzX2xlYWYgXHUwMDI2XHUwMDI2ICF3YXNfbGVhZikge1xuXHRcdGt2bV9ldmVyX21hcHBlZF9zZXRfcmFuZ2Uoa3ZtLCBnZm4sIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKTtcblx0fVxuYGBgXG5cblRoaXMgc25pcHBldCBpbnNpZGUgYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAgaXMgd2hhdCB3ZSdyZSBsb29raW5nIGZvciwgY29uZmlybWluZyB0aGF0IGBrdm1fdGRwX21tdV9tYXBgIGlzIHRoZSByaWdodCBwbGFjZS5cblNwZWNpZmljYWxseSwgYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAgaXMgY2FsbGVkIGJ5IGB0ZHBfbW11X3NldF9zcHRlX2F0b21pY2AsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGJ5IGBrdm1fdGRwX21tdV9tYXBgLiBUaGlzIGNvbmZpcm1zIHdlJ3JlIG9uIHRoZSByaWdodCB0cmFjayEgVGltZSB0byBydW4gdGhlIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTk1LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxOTowNi4yOTU1ODU4MThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY5NDA5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfZW5hYmxlX2NhcFwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gY2FwYWJpbGl0eSBgS1ZNX0NBUF9FVkVSX01BUFBFRGAgYW5kIGEgbmV3IGlvY3RsIGBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPR2AgdG8gdHJhY2sgd2hpY2ggZ3Vlc3QgcGFnZXMgaGF2ZSBldmVyIGJlZW4gbWFwcGVkLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3Rscy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19LVk1gIGFuZCBpcyBzcGVjaWZpYyB0byB4ODYuIFdlIGZvY3VzIG9uIHRoZSBpb2N0bCBlbnRyeSBwb2ludHMgYW5kIHRoZSBURFAgTU1VIHBhZ2UgZmF1bHQgaGFuZGxlciB3aGVyZSB0aGUgdHJhY2tpbmcgaXMgdXBkYXRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBcIixcbiAgICBcImt2bV90ZHBfbW11X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGNhcGFiaWxpdHkgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCBhIG5ldyBpb2N0bCBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgIHRvIHRyYWNrIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfS1ZNYCBhbmQgaXMgc3BlY2lmaWMgdG8geDg2LiBXZSBmb2N1cyBvbiB0aGUgaW9jdGwgZW50cnkgcG9pbnRzIGFuZCB0aGUgVERQIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgd2hlcmUgdGhlIHRyYWNraW5nIGlzIHVwZGF0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwd279[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 16:01:43 +0000 UTC FinishedAt: 2026-08-01 16:19:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "e6b2ea7d-8d90-42da-a94e-5ee452f78d32" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vm_ioctl", "kvm_vm_ioctl_enable_cap", "kvm_tdp_mmu_map" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9lbmFibGVfY2FwJiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBjYXBhYmlsaXR5IGBLVk1fQ0FQX0VWRVJfTUFQUEVEYCBhbmQgYSBuZXcgaW9jdGwgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYCB0byB0cmFjayB3aGljaCBndWVzdCBwYWdlcyBoYXZlIGV2ZXIgYmVlbiBtYXBwZWQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0tWTWAgYW5kIGlzIHNwZWNpZmljIHRvIHg4Ni4gV2UgZm9jdXMgb24gdGhlIGlvY3RsIGVudHJ5IHBvaW50cyBhbmQgdGhlIFREUCBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZXJlIHRoZSB0cmFja2luZyBpcyB1cGRhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDEzNDVhZWQ0MWMxMjRjZWI0OTFhNWFjNDc4ZGU4NzYwZTQwODMzMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTY6MTg6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5pbmRleCBhNWY5ZWU5MmY0M2U4Li5jZTZlMWQxNWQ0OGQ1IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbkBAIC02NTY2LDYgJiM0Mzs2NTY2LDUzIEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuJiM0Mzs0LjE0NSBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPR1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfRVZFUl9NQVBQRURcbiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NlxuJiM0Mzs6VHlwZTogdm0gaW9jdGxcbiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nXG4mIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvbiBlcnJvclxuJiM0MztcbiYjNDM7RXJyb3JzOlxuJiM0MztcbiYjNDM7ICA9PT09PT0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsgIEVOT0VOVCAgICAgS1ZNX0NBUF9FVkVSX01BUFBFRCBoYXMgbm90IGJlZW4gZW5hYmxlZCBmb3IgdGhpcyBWTVxuJiM0MzsgIEVJTlZBTCAgICAgYGBncmFudWxlX3NoaWZ0YGAgaXMgYmVsb3cgMjEgKGludGVybmFsIHRyYWNraW5nIGdyYW51bGFyaXR5KSBvclxuJiM0MzsgICAgICAgICAgICAgYWJvdmUgNjNcbiYjNDM7ICBFSU5WQUwgICAgIGBgZmlyc3RfZ3JhbnVsZWBgICYjNDM7IGBgbnVtX2dyYW51bGVzYGAgZXh0ZW5kZW5kcyBiZXlvbmQgdGhlIG1heGdwYVxuJiM0MzsgICAgICAgICAgICAgc2V0IHVwIHdoZW4gS1ZNX0NBUF9FVkVSX01BUFBFRCB3YXMgZW5hYmxlZFxuJiM0MzsgIEVJTlZBTCAgICAgYGBmbGFnc2BgIGlzIG5vdCAwXG4mIzQzOyAgRUZBVUxUICAgICBjb3B5X3tmcm9tLHRvfV91c2VyIG9mIGBgYml0bWFwYGAgZmFpbGVkLCBlLmcuLCBiaXRtYXAgd2FzbiYjMzk7dFxuJiM0MzsgICAgICAgICAgICAgc3VmZmljaWVudGx5IHNpemVkXG4mIzQzOyAgRU5PTUVNICAgICBzZXR0aW5nIHVwIHRlbXBvcmFyeSBiaXRtYXAgZm9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGZhaWxlZFxuJiM0MzsgID09PT09PSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztUaGlzIHJlcXVpcmVzIEtWTV9DQVBfRVZFUl9NQVBQRUQgdG8gaGF2ZSBiZWVuIGVuYWJsZWQgZm9yIHRoZSBWTSB3aXRoIGEgbWF4Z3BhXG4mIzQzO3BhcmFtZXRlci5cbiYjNDM7XG4mIzQzOzo6XG4mIzQzO1xuJiM0MzsgIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIHtcbiYjNDM7XHRfX3U2NCBmaXJzdF9ncmFudWxlO1xuJiM0MztcdF9fdTY0IG51bV9ncmFudWxlcztcbiYjNDM7XHRfX3UzMiBncmFudWxlX3NoaWZ0O1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHZvaWQgX191c2VyICpiaXRtYXA7XG4mIzQzO1x0XHRfX3U2NCBwYWRkaW5nO1xuJiM0MztcdH07XG4mIzQzO1x0X191NjQgcmVzZXJ2ZWRbNF07XG4mIzQzOyAgfTtcbiYjNDM7XG4mIzQzO2BgZmlyc3RfZ3JhbnVsZWBgLCBgYG51bV9ncmFudWxlc2BgLCBhbmQgYGBncmFudWxlX3NoaWZ0YGAgZW5jb2RlIHRoZSBHUEEgcmFuZ2VcbiYjNDM7dGhlIGNhbGxlciBpbnF1aXJlcyBhYm91dC4gRm9yIGV4YW1wbGUsIHZhbHVlcyBvZiAyLCAyNSwgYW5kIDIxLCByZXNwZWN0aXZlbHksXG4mIzQzO2lucXVpcmUgYWJvdXQgdGhlIGFkZHJlc3MgcmFuZ2UgWzRNQiwgNTRNQikuIFRoZSBjYWxsZXIgcHJvdmlkZXMgYSBgYGJpdG1hcGBgXG4mIzQzO29mIHRoZSByZXF1aXJlZCBsZW5ndGggKGluIHRoZSBhYm92ZSBjYXNlIDQgYnl0ZXMpLiBUaGUgY2FsbCB3aWxsIHdyaXRlIGEgMSBpZlxuJiM0MzthbnkgbWVtb3J5IGluIHRoZSBncmFudWxlIGhhcyBiZWVuIG1hcHBlZCBhdCBzb21lIHBvaW50IHNpbmNlXG4mIzQzO0tWTV9DQVBfRVZFUl9NQVBQRUQgd2FzIGVuYWJsZWQsIDAgaWYgbm90LlxuJiM0MztcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbkBAIC04OTQ5LDYgJiM0Mzs4OTk2LDI2IEBAIGVuYWJsZWQsIGNtbWEgY2FuJiMzOTt0IGJlIGVuYWJsZWQgYW55bW9yZSBhbmQgcGZtZmkgYW5kIHRoZSBzdG9yYWdlIGtleVxuIGludGVycHJldGF0aW9uIGFyZSBkaXNhYmxlZC4gSWYgY21tYSBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQgb3IgdGhlXG4gaHBhZ2VfMmcgbW9kdWxlIHBhcmFtZXRlciBpcyBub3Qgc2V0IHRvIDEsIC1FSU5WQUwgaXMgcmV0dXJuZWQuXG4gXG4mIzQzOzcuNDggS1ZNX0NBUF9FVkVSX01BUFBFRFxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzOzpBcmNoaXRlY3R1cmVzOiB4ODZcbiYjNDM7OlBhcmFtZXRlcnM6IGFyZ3NbMF0gLSBtYXhpbXVtIEdQQSB0byB0cmFjayBtYXBwZWQgbWVtb3J5XG4mIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIFREUCBpcyBub3QgYXZhaWxhYmxlLCAtRUlOVkFMIGlmIGFyZ3NbMF1cbiYjNDM7ICAgICAgICAgIGlzIDAgb3IgYmV5b25kIHRoZSBtYXhpbXVtIHBvc3NpYmxlIEdQQSwgLUVOT01FTSBpZiB0cmFja2luZyBzZXR1cFxuJiM0MzsgICAgICAgICAgZmFpbGVkLCAtRUVYSVNUIGlmIGFscmVhZHkgc2V0IHVwLlxuJiM0MztcbiYjNDM7VGhlIHByZXNlbmNlIG9mIHRoaXMgY2FwYWJpbGl0eSBpbmRpY2F0ZXMgdGhhdCBLVk0gY2FuIHRyYWNrIGlmIHBhZ2VzIGhhdmUgZXZlclxuJiM0MztiZWVuIG1hcHBlZCBieSB0aGUgZ3Vlc3QuIFRoaXMgYWxsb3dzIGEgY29uc2VydmF0aXZlIGVzdGltYXRlIG9mIHdoaWNoIHBhZ2VzXG4mIzQzO2FyZSBub3QgemVybyBhbnkgbW9yZS5cbiYjNDM7XG4mIzQzO09uIGVuYWJsaW5nIHRoZSBjYXBhYmlsaXR5LCB0aGUgY2FsbGVyIHByb3ZpZGVzIGEgbWF4IEdQQSB2YWx1ZS4gS1ZNIHdpbGwgdGhlblxuJiM0Mzt0cmFjayBHUEFzIGJldHdlZW4gMCBhbmQgdGhpcyB2YWx1ZS4gTm90ZSB0aGF0IHRoaXMgY2FwYWJpbGl0eSBjYW4gYmUgZW5hYmxlZFxuJiM0MzthdCBhbnkgdGltZSwgYnV0IGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGVuYWJsZSBpdCBiZWZvcmUgdkNQVXMgc3RhcnRcbiYjNDM7cnVubmluZy4gQW55IHBhZ2UgYWNjZXNzZXMgYnkgdGhlIGd1ZXN0IGJlZm9yZSBjYXBhYmlsaXR5IGVuYWJsZW1lbnQgd2lsbCBub3RcbiYjNDM7YmUgdHJhY2tlZC4gVGhlIG1heCBHUEEgdmFsdWUgY2FuIG9ubHkgYmUgc2V0IG9uY2U7IHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG9cbiYjNDM7ZW5hYmxlIHRoZSBjYXBhYmlsaXR5IHdpdGggYSBkaWZmZXJlbnQgb3IgZXZlbiBzYW1lIHZhbHVlIHdpbGwgZmFpbC5cbiYjNDM7XG4gOC4gT3RoZXIgY2FwYWJpbGl0aWVzLlxuID09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjUxNzI1N2E2MzE1My4uYzYwN2E5MTkzZjQwMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNTMzLDYgJiM0MzsxNTMzLDE1IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHQgKi9cbiBcdGJvb2wgc2hhZG93X3Jvb3RfYWxsb2NhdGVkO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVHJhY2tzIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBhbGxvd3NcbiYjNDM7XHQgKiB0cmFja2luZyB3aGljaCBtZW1vcnkgaXMgZ3VhcmFudGVlZCB0byBzdGlsbCBiZSB6ZXJvLCBlLmcuLCBmb3JcbiYjNDM7XHQgKiBzdXBwb3J0aW5nIHRoZSBIdkV4dENhbGxHZXRCb290WmVyb2VkTWVtb3J5IGVubGlnaHRlbm1lbnQuXG4mIzQzO1x0ICogVGhlIGdyYW51bGFyaXR5IGlzIGRlZmluZWQgYnkgS1ZNX0VWRVJfTUFQUEVEX1NISUZULlxuJiM0MztcdCAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgKmV2ZXJfbWFwcGVkX2JpdG1hcDtcbiYjNDM7XHR1NjQgZXZlcl9tYXBwZWRfbWF4X2dwYTtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbiBcdC8qXG4gXHQgKiBJZiBzZXQsIHRoZSBWTSBoYXMgKG9yIGhhZCkgYW4gZXh0ZXJuYWwgd3JpdGUgdHJhY2tpbmcgdXNlciwgYW5kXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oIGIvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjc5NTMzN2U2ODQ4NlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oXG5AQCAtMCwwICYjNDM7MSwzMyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9fS1ZNX1g4Nl9FVkVSX01BUFBFRF9IXG4mIzQzOyNkZWZpbmUgX19LVk1fWDg2X0VWRVJfTUFQUEVEX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRyYWNrIGlmIHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZCBhdCBhbiBpbnRlcm5hbCBncmFudWxhcml0eSBvZiAyIE1CLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBLVk1fRVZFUl9NQVBQRURfU0hJRlQgMjFcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZXZlcl9tYXBwZWRfc2V0X3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuJiM0MztcdFx0XHRcdFx0ICAgICB1NjQgbnBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgaW50IHNoaWZ0ID0gS1ZNX0VWRVJfTUFQUEVEX1NISUZUIC0gUEFHRV9TSElGVDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gZ2ZuIFx1MDAzZVx1MDAzZSBzaGlmdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGVuZCA9IChnZm4gJiM0MzsgbnBhZ2VzICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0KSAtIDEpIFx1MDAzZVx1MDAzZSBzaGlmdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGVuZCA9IG1pbihlbmQsIGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX21heF9ncGEgXHUwMDNlXHUwMDNlIEtWTV9FVkVSX01BUFBFRF9TSElGVCk7XG4mIzQzO1x0Zm9yIChpID0gc3RhcnQ7IGkgXHUwMDNjIGVuZDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiByZS1tYXBwaW5nIHphcHBlZCBwYWdlcyBhbmQgYnJlYWtpbmcgdXAgb2YgaHVnZSBwYWdlcyBjYW5cbiYjNDM7XHRcdCAqIHRyaWdnZXIgYSBudW1iZXIgb2Ygc2V0cyBvbiBhbHJlYWR5IHNldCBiaXRzLCBzbyB0ZXN0IGZpcnN0XG4mIzQzO1x0XHQgKiBiZWZvcmUgYXRvbWljLXNldC4gU2luY2UgYml0cyBjYW4gbmV2ZXIgYmUgdW5zZXQgYWdhaW4sIHRoaXNcbiYjNDM7XHRcdCAqIGlzIHNhZmUgYWdhaW5zdCByYWNlcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCF0ZXN0X2JpdChpLCBrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApKVxuJiM0MztcdFx0XHRzZXRfYml0KGksIGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19LVk1fWDg2X0VWRVJfTUFQUEVEX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5pbmRleCBjZTNmMmVmYWRiMDViLi5lYTJhMzdhMDRiMmZmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5AQCAtMSw2ICYjNDM7MSw3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtldmVyX21hcHBlZC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bW11LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttbXVfaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O21tdXRyYWNlLmhcJiMzNDtcbkBAIC01NTQsNiAmIzQzOzU1NSwxNyBAQCBzdGF0aWMgaW50IF9faGFuZGxlX2NoYW5nZWRfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoZW5ldmVyIGEgcGFnZSBiZWNvbWVzIGEgZnJlc2ggbGVhZiwgbWFyayB0aGUgbWVtb3J5IGFzIG1hcHBlZC5cbiYjNDM7XHQgKiBPbiBodWdlcGFnZSBicmVha3VwLCB0aGlzIHRyaWdnZXJzIGZvciBlYWNoIG5ldyBsb3dlci1sZXZlbCBwYWdlLFxuJiM0MztcdCAqIGV2ZW4gdGhvdWdoIHRoZSBtZW1vcnkgd2FzIGFscmVhZHkgbWFya2VkIHdoZW4gdGhlIGh1Z2VwYWdlIHdhc1xuJiM0MztcdCAqIG1hcHBlZCwgYnV0IHRoZSBvdmVyaGVhZCBpcyBuZWdsaWdpYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpc19sZWFmIFx1MDAyNlx1MDAyNiAhd2FzX2xlYWYpIHtcbiYjNDM7XHRcdGt2bV9ldmVyX21hcHBlZF9zZXRfcmFuZ2Uoa3ZtLCBnZm4sIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIFJlY3Vyc2l2ZWx5IGhhbmRsZSBjaGlsZCBQVHMgaWYgdGhlIGNoYW5nZSByZW1vdmVkIGEgc3VidHJlZSBmcm9tXG4gXHQgKiB0aGUgcGFnaW5nIHN0cnVjdHVyZS4gIE5vdGUgdGhlIFdBUk4gb24gdGhlIFBGTiBjaGFuZ2luZyB3aXRob3V0IHRoZVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNy4uODljYmNmODM5OWY0OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMjUsNiAmIzQzOzI1LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt0c3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3JlZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2t2bV9lbXVsYXRlLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bW11L2V2ZXJfbWFwcGVkLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttbXUvcGFnZV90cmFjay5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eDg2LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtjcHVpZC5oXCYjMzQ7XG5AQCAtMjM5MSw2ICYjNDM7MjM5Miw5IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRjYXNlIEtWTV9DQVBfUkVBRE9OTFlfTUVNOlxuIFx0XHRyID0ga3ZtID8ga3ZtX2FyY2hfaGFzX3JlYWRvbmx5X21lbShrdm0pIDogMTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX0VWRVJfTUFQUEVEOlxuJiM0MztcdFx0ciA9ICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQxOTAsNiAmIzQzOzQxOTQsMzYgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX0VWRVJfTUFQUEVEOiB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nICptYXBwZWRfYml0bWFwO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBudW1fZ3JhbnVsZXM7XG4mIzQzO1xuJiM0MztcdFx0ciA9IDA7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdGlmICghdGRwX2VuYWJsZWQpIHtcbiYjNDM7XHRcdFx0ciA9IC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fSBlbHNlIGlmIChrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApIHtcbiYjNDM7XHRcdFx0ciA9IC1FRVhJU1Q7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGNhcC1cdTAwM2VhcmdzWzBdID09IDAgfHxcbiYjNDM7XHRcdFx0ICAgY2FwLVx1MDAzZWFyZ3NbMF0gXHUwMDNlICgxVUxMIFx1MDAzY1x1MDAzYyBrdm1faG9zdC5tYXhwaHlhZGRyKSkge1xuJiM0MztcdFx0XHRyID0gLUVJTlZBTDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdG51bV9ncmFudWxlcyA9IERJVl9ST1VORF9VUChjYXAtXHUwMDNlYXJnc1swXSwgMVVMTCBcdTAwM2NcdTAwM2MgS1ZNX0VWRVJfTUFQUEVEX1NISUZUKTtcbiYjNDM7XHRcdFx0bWFwcGVkX2JpdG1hcCA9XG4mIzQzO1x0XHRcdFx0a3ZjYWxsb2MoQklUU19UT19MT05HUyhudW1fZ3JhbnVsZXMpLFxuJiM0MztcdFx0XHRcdFx0IHNpemVvZihsb25nKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRcdFx0aWYgKCFtYXBwZWRfYml0bWFwKVxuJiM0MztcdFx0XHRcdHIgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRlbHNlIHtcbiYjNDM7XHRcdFx0XHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1x0XHRcdFx0a3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwID0gbWFwcGVkX2JpdG1hcDtcbiYjNDM7XHRcdFx0XHRrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9tYXhfZ3BhID0gbnVtX2dyYW51bGVzIFx1MDAzY1x1MDAzYyBLVk1fRVZFUl9NQVBQRURfU0hJRlQ7XG4mIzQzO1x0XHRcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG5AQCAtNDE5Nyw2ICYjNDM7NDIzMSw3MyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIHI7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyAqbG9nKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG1heF9ncmFudWxlcztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY29hcnNlbmVzcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nICpiaXRtYXA7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdGlmIChsb2ctXHUwMDNlZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGxvZy1cdTAwM2VncmFudWxlX3NoaWZ0IFx1MDAzYyBLVk1fRVZFUl9NQVBQRURfU0hJRlQgfHwgbG9nLVx1MDAzZWdyYW51bGVfc2hpZnQgXHUwMDNlPSA2NClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRtYXhfZ3JhbnVsZXMgPSBrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9tYXhfZ3BhIFx1MDAzZVx1MDAzZSBsb2ctXHUwMDNlZ3JhbnVsZV9zaGlmdDtcbiYjNDM7XHRpZiAobG9nLVx1MDAzZW51bV9ncmFudWxlcyBcdTAwM2UgbWF4X2dyYW51bGVzIHx8XG4mIzQzO1x0ICAgIGxvZy1cdTAwM2VmaXJzdF9ncmFudWxlIFx1MDAzZSBtYXhfZ3JhbnVsZXMgLSBsb2ctXHUwMDNlbnVtX2dyYW51bGVzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSByZXF1ZXN0IHVzZXMgdGhlIHNhbWUgZ3JhbnVsYXJpdHkgYXMgb3VyIGludGVybmFsXG4mIzQzO1x0ICogdHJhY2tpbmcsIGFuZCB3ZSBhcmUgYnl0ZS1hbGlnbmVkICh0aGUgZXhwZWN0ZWQgY29tbW9uIGNhc2UpLCB3ZSBjYW5cbiYjNDM7XHQgKiBqdXN0IGNvcHlfdG9fdXNlci4gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaXRtYXAgdG8gcGFzcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdlIGRvIG5vdCBsb2NrIGFnYWluc3QgY29uY3VycmVudCB2Q1BVcyBtYXBwaW5nIG5ldyBtZW1vcnkgb24gYW55IG9mXG4mIzQzO1x0ICogdGhlc2Ugb3BlcmF0aW9ucy4gQml0cyBhcmUgc2V0IGF0b21pY2FsbHkgYW5kIG5ldmVyIGNsZWFyZWQsIHNvIGFueSByYWNlXG4mIzQzO1x0ICogaGVyZSBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgd3JpdGUgaGFwcGVuaW5nIGFmdGVyIHRoaXMgaGFuZGxlclxuJiM0MztcdCAqIGZpbmlzaGVzIGJ1dCBiZWZvcmUgdGhlIGNhbGxlciByZWFkcyB0aGUgcmVzdWx0cy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjb2Fyc2VuZXNzID0gbG9nLVx1MDAzZWdyYW51bGVfc2hpZnQgLSBLVk1fRVZFUl9NQVBQRURfU0hJRlQ7XG4mIzQzO1x0aWYgKGNvYXJzZW5lc3MgPT0gMCBcdTAwMjZcdTAwMjYgIShsb2ctXHUwMDNlZmlyc3RfZ3JhbnVsZSBcdTAwMjYgNykgXHUwMDI2XHUwMDI2ICEobG9nLVx1MDAzZW51bV9ncmFudWxlcyBcdTAwMjYgNykpIHtcbiYjNDM7XHRcdGlmIChjb3B5X3RvX3VzZXIobG9nLVx1MDAzZWJpdG1hcCxcbiYjNDM7XHRcdFx0XHQgKHU4ICopa3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwICYjNDM7IGxvZy1cdTAwM2VmaXJzdF9ncmFudWxlIC8gOCxcbiYjNDM7XHRcdFx0XHQgbG9nLVx1MDAzZW51bV9ncmFudWxlcyAvIDgpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Yml0bWFwID0ga3Z6YWxsb2MoRElWX1JPVU5EX1VQKGxvZy1cdTAwM2VudW1fZ3JhbnVsZXMsIDgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGlmICghYml0bWFwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGZvciAodTY0IGdyYW4gPSBsb2ctXHUwMDNlZmlyc3RfZ3JhbnVsZTtcbiYjNDM7XHQgICAgIGdyYW4gXHUwMDNjIGxvZy1cdTAwM2VmaXJzdF9ncmFudWxlICYjNDM7IGxvZy1cdTAwM2VudW1fZ3JhbnVsZXM7XG4mIzQzO1x0ICAgICBncmFuJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGdyYW4gXHUwMDNjXHUwMDNjIGNvYXJzZW5lc3M7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIGNvYXJzZW5lc3MpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmaW5kX25leHRfYml0KGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCwgZW5kLCBzdGFydCkgXHUwMDNjIGVuZClcbiYjNDM7XHRcdFx0X19zZXRfYml0KGdyYW4gLSBsb2ctXHUwMDNlZmlyc3RfZ3JhbnVsZSwgYml0bWFwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X3RvX3VzZXIobG9nLVx1MDAzZWJpdG1hcCwgYml0bWFwLCBESVZfUk9VTkRfVVAobG9nLVx1MDAzZW51bV9ncmFudWxlcywgOCkpKSB7XG4mIzQzO1x0XHRyID0gLUVGQVVMVDtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyID0gMDtcbiYjNDM7XG4mIzQzO291dF9mcmVlOlxuJiM0MztcdGt2ZnJlZShiaXRtYXApO1xuJiM0MztcdHJldHVybiByO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfS1ZNX0NPTVBBVFxuIC8qIGZvciBLVk1fWDg2X1NFVF9NU1JfRklMVEVSICovXG4gc3RydWN0IGt2bV9tc3JfZmlsdGVyX3JhbmdlX2NvbXBhdCB7XG5AQCAtNDcxMCw2ICYjNDM7NDgxMSwxNSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSBrdm1fdm1faW9jdGxfc2V0X21zcl9maWx0ZXIoa3ZtLCBcdTAwMjZmaWx0ZXIpO1xuIFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XHRjYXNlIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HOiB7XG4mIzQzO1x0XHRzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyBtYXBwZWRfbG9nO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZtYXBwZWRfbG9nLCBhcmdwLCBzaXplb2YobWFwcGVkX2xvZykpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0XHRyID0ga3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2coa3ZtLCBcdTAwMjZtYXBwZWRfbG9nKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcdGRlZmF1bHQ6XG4gXHRcdHIgPSAtRU5PVFRZO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uZDBiZTk0OTQ2YTc3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbiYjNDM7I2RlZmluZSBLVk1fQ0FQX0VWRVJfTUFQUEVEIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTE2NzAsNCAmIzQzOzE2NzEsMTggQEAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcbiBcdF9fdTY0IHBhZGRpbmdbNV07XG4gfTtcbiBcbiYjNDM7I2RlZmluZSBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRyAgX0lPVyhLVk1JTywgIDB4ZDYsIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nKVxuJiM0MztcbiYjNDM7c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cge1xuJiM0MztcdF9fdTY0IGZpcnN0X2dyYW51bGU7XG4mIzQzO1x0X191NjQgbnVtX2dyYW51bGVzO1xuJiM0MztcdF9fdTMyIGdyYW51bGVfc2hpZnQ7XG4mIzQzO1x0X191MzIgZmxhZ3M7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0dm9pZCBfX3VzZXIgKmJpdG1hcDtcbiYjNDM7XHRcdF9fdTY0IHBhZGRpbmc7XG4mIzQzO1x0fTtcbiYjNDM7XHRfX3U2NCByZXNlcnZlZFs0XTtcbiYjNDM7fTtcbiYjNDM7XG4gI2VuZGlmIC8qIF9fTElOVVhfS1ZNX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNGFjZTEyNjA2ZTkzNy4uMWViMGJhYzE5MjBkYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC0xNjIsNiAmIzQzOzE2Miw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzdGVhbF90aW1lXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzeXN0ZW1fY291bnRlcl9vZmZzZXRfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0XG4mIzQzO1RFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gZXZlcl9tYXBwZWRfdGVzdFxuIFxuICMgQ29tcGlsZWQgb3V0cHV0cyB1c2VkIGJ5IHRlc3QgdGFyZ2V0c1xuIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEX3g4NiAmIzQzOz0geDg2L254X2h1Z2VfcGFnZXNfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ldmVyX21hcHBlZF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZXZlcl9tYXBwZWRfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzY3MjNmMGM5ZWUyY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2V2ZXJfbWFwcGVkX3Rlc3QuY1xuQEAgLTAsMCAmIzQzOzEsMTkxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIEtWTSBldmVyLW1hcHBlZCBiaXRtYXAgdGVzdFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIE51dGFuaXgsIEluYy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nrdm1fdXRpbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Byb2Nlc3Nvci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEtpQiAxMDI0dVxuJiM0MzsjZGVmaW5lIE1pQiAoMTAyNCAqIEtpQilcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodWludDY0X3QgYmFzZV9ncGEsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRHVUVTVF9ET05FKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFzc2VydF9iaXRtYXBzX2VxdWFsKHU4IGV4cGVjdGVkW10sIHU4IGFjdHVhbFtdLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIGxlbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFRFU1RfQVNTRVJUKGV4cGVjdGVkW2ldID09IGFjdHVhbFtpXSxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O2J5dGUgJWxkLCBleHBlY3RlZCAweCUwMngsIGdvdCAweCUwMnhcJiMzNDssXG4mIzQzO1x0XHRcdCAgICBpLCBleHBlY3RlZFtpXSwgYWN0dWFsW2ldKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHByZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzdGFydCwgdTY0IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZSA9IHtcbiYjNDM7XHRcdC5ncGEgPSBzdGFydCxcbiYjNDM7XHRcdC5zaXplID0gbGVuLFxuJiM0MztcdFx0LmZsYWdzID0gMCxcbiYjNDM7XHR9O1xuJiM0MztcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX1BSRV9GQVVMVF9NRU1PUlksIFx1MDAyNnJhbmdlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9vbmVfcGFnZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZSA9IHtcbiYjNDM7XHRcdC5ncGEgPSAweDAsXG4mIzQzO1x0XHQuc2l6ZSA9IFBBR0VfU0laRSxcbiYjNDM7XHRcdC5mbGFncyA9IDAsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIG1hcHBlZF9iaXRtYXA7XG4mIzQzO1x0c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0ge1xuJiM0MztcdFx0LmZpcnN0X2dyYW51bGUgPSAwLFxuJiM0MztcdFx0Lm51bV9ncmFudWxlcyA9IDEsXG4mIzQzO1x0XHQuZ3JhbnVsZV9zaGlmdCA9IDIxLFxuJiM0MztcdFx0LmZsYWdzID0gMCxcbiYjNDM7XHRcdC5iaXRtYXAgPSBcdTAwMjZtYXBwZWRfYml0bWFwLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1xuJiM0MztcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVZFUl9NQVBQRUQsIFBBR0VfU0laRSk7XG4mIzQzO1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fUFJFX0ZBVUxUX01FTU9SWSwgXHUwMDI2cmFuZ2UpO1xuJiM0MztcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFx1MDAyNmxvZyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWFwcGVkX2JpdG1hcCA9PSAweDEsIFwmIzM0O2V4cGVjdGVkIDB4MSwgZ290IDB4JXhcJiMzNDssIG1hcHBlZF9iaXRtYXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBZGQgNjRNQiBvciBtZW1vcnkgYXQgR1BBIDE2TUIgKCAtLVx1MDAzZSBbMTZNQiwgODBNQikgKSxcbiYjNDM7ICogcHJlLWZhdWx0IFsxNk1CLCA0OE1CKSwgcmVxdWVzdCBhbmQgY2hlY2sgYml0bWFwIGZvciBbMTZNQiwgODBNQikuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X29uZV9ibG9jayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgbWFwX3N0YXJ0ID0gMHgxMDAwMDAwO1xuJiM0MztcdGNvbnN0IHVpbnQ2NF90IG1hcF9sZW4gPSAweDQwMDAwMDA7XG4mIzQzO1x0dTggbWFwcGVkX2JpdG1hcFs0XSA9IHsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9O1xuJiM0MztcdHU4IGV4cGVjdGVkX2JpdG1hcFs0XSA9IHsgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCB9O1xuJiM0MztcdHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIGxvZyA9IHtcbiYjNDM7XHRcdC5maXJzdF9ncmFudWxlID0gMHg4LFxuJiM0MztcdFx0Lm51bV9ncmFudWxlcyA9IDB4MjAsXG4mIzQzO1x0XHQuZ3JhbnVsZV9zaGlmdCA9IDIxLFxuJiM0MztcdFx0LmZsYWdzID0gMCxcbiYjNDM7XHRcdC5iaXRtYXAgPSBtYXBwZWRfYml0bWFwLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgbWFwX3N0YXJ0LCAxLCBtYXBfbGVuIC8gUEFHRV9TSVpFLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFx1MDAyNmxvZyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0IFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9FTlQsXG4mIzQzO1x0XHQgICAgXCYjMzQ7ZXhwZWN0ZWQgRU5PRU5UIHdoZW4gcXVlcnlpbmcgZXZlci1tYXBwZWQgbG9nIGJlZm9yZSBlbmFibGVtZW50LCBnb3QgJWRcJiMzNDssXG4mIzQzO1x0XHQgICAgZXJybm8pO1xuJiM0MztcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVZFUl9NQVBQRUQsIG1hcF9zdGFydCAmIzQzOyBtYXBfbGVuKTtcbiYjNDM7XHRwcmVfZmF1bHQodmNwdSwgMTYgKiBNaUIsIDMyICogTWlCKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBQQUdFX1NJWkUpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxuJiM0MztcdFx0ICAgIFwmIzM0O2V4cGVjdGVkIEVFWElTVCB3aGVuIGVuYWJsaW5nIEtWTV9DQVBfRVZFUl9NQVBQRUQgdHdpY2UsIGdvdCAlZFwmIzM0OyxcbiYjNDM7XHRcdCAgICBlcnJubyk7XG4mIzQzO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbiYjNDM7XHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xuJiM0MztcbiYjNDM7XHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDIyO1xuJiM0MztcdGxvZy5maXJzdF9ncmFudWxlID0gMHg0O1xuJiM0MztcdGxvZy5udW1fZ3JhbnVsZXMgPSAweDEwO1xuJiM0MztcdG1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XG4mIzQzO1x0bWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweGZmLCAweDAwLCAweGE1LCAweGE1IH0sIDQpO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbiYjNDM7XHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xuJiM0MztcbiYjNDM7XHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDIzO1xuJiM0MztcdGxvZy5maXJzdF9ncmFudWxlID0gMHgyO1xuJiM0MztcdGxvZy5udW1fZ3JhbnVsZXMgPSAweDg7XG4mIzQzO1x0bWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9LCA0KTtcbiYjNDM7XHRtZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4MGYsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XG4mIzQzO1x0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuJiM0MztcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XG4mIzQzO1xuJiM0MztcdGxvZy5udW1fZ3JhbnVsZXMgPSAweGZmO1xuJiM0MztcdHJldCA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuJiM0MztcdFx0ICAgIFwmIzM0O2V4cGVjdGVkIEVJTlZBTCB3aGVuIHF1ZXJ5aW5nIGJleW9uZCByYW5nZSwgZ290ICVkXCYjMzQ7LFxuJiM0MztcdFx0ICAgIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0bG9nLm51bV9ncmFudWxlcyA9IDB4MTA7XG4mIzQzO1x0bG9nLmdyYW51bGVfc2hpZnQgPSAxO1xuJiM0MztcdHJldCA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuJiM0MztcdFx0ICAgIFwmIzM0O2V4cGVjdGVkIEVJTlZBTCB3aXRoIHRvbyBzbWFsbCBncm5hdWxlIHNoaWZ0LCBnb3QgJWRcJiMzNDssXG4mIzQzO1x0XHQgICAgZXJybm8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBZGQgMTI4TUIgb3IgbWVtb3J5IGF0IEdQQSAzMk1CICggLS1cdTAwM2UgWzMyTUIsIDE2ME1CKSApLFxuJiM0MzsgKiBwcmUtZmF1bHQgWzMyTUIsIDY0TUIpLCBhbmQgWzkwTUIsIDk0TUIpLFxuJiM0MzsgKiByZXF1ZXN0IGFuZCBjaGVjayBiaXRtYXAgZm9yIFsxNk1CLCAxMjBNQikuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3R3b19ibG9ja3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRjb25zdCB1aW50NjRfdCBtYXBfc3RhcnQgPSAweDIwMDAwMDA7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgbWFwX2xlbiA9IDB4ODAwMDAwMDtcbiYjNDM7XHR1OCBtYXBwZWRfYml0bWFwWzddID0geyAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH07XG4mIzQzO1x0dTggZXhwZWN0ZWRfYml0bWFwWzddID0geyAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDYwLCAweDAwLCAweDAwIH07XG4mIzQzO1x0c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0ge1xuJiM0MztcdFx0LmZpcnN0X2dyYW51bGUgPSAweDgsXG4mIzQzO1x0XHQubnVtX2dyYW51bGVzID0gMHgzNCxcbiYjNDM7XHRcdC5ncmFudWxlX3NoaWZ0ID0gMjEsXG4mIzQzO1x0XHQuZmxhZ3MgPSAwLFxuJiM0MztcdFx0LmJpdG1hcCA9IG1hcHBlZF9iaXRtYXAsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcbiYjNDM7XHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBtYXBfc3RhcnQsIDEsIG1hcF9sZW4gLyBQQUdFX1NJWkUsIDApO1xuJiM0MztcbiYjNDM7XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBtYXBfc3RhcnQgJiM0MzsgbWFwX2xlbik7XG4mIzQzO1x0cHJlX2ZhdWx0KHZjcHUsIDMyICogTWlCLCAzMiAqIE1pQik7XG4mIzQzO1x0cHJlX2ZhdWx0KHZjcHUsIDkwICogTWlCLCA0ICogTWlCKTtcbiYjNDM7XG4mIzQzO1x0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuJiM0MztcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XG4mIzQzO1xuJiM0MztcdGxvZy5ncmFudWxlX3NoaWZ0ID0gMjI7XG4mIzQzO1x0bG9nLmZpcnN0X2dyYW51bGUgPSAweDQ7XG4mIzQzO1x0bG9nLm51bV9ncmFudWxlcyA9IDB4MWE7XG4mIzQzO1x0bWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNX0sIDcpO1xuJiM0MztcdG1lbWNweShleHBlY3RlZF9iaXRtYXAsICh1OFtdKXsgMHhmMCwgMHgwZiwgMHgwYywgMHgwMCwgMHhhNSwgMHhhNSwgMHhhNSB9LCA3KTtcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFx1MDAyNmxvZyk7XG4mIzQzO1x0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcbiYjNDM7XG4mIzQzO1x0bG9nLmdyYW51bGVfc2hpZnQgPSAyMztcbiYjNDM7XHRsb2cuZmlyc3RfZ3JhbnVsZSA9IDB4MjtcbiYjNDM7XHRsb2cubnVtX2dyYW51bGVzID0gMHhkO1xuJiM0MztcdG1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNyk7XG4mIzQzO1x0bWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweDNjLCAweDAyLCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDcpO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbiYjNDM7XHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZKSk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9FVkVSX01BUFBFRCkpO1xuJiM0MztcbiYjNDM7XHR0ZXN0X29uZV9wYWdlKCk7XG4mIzQzO1x0dGVzdF9vbmVfYmxvY2soKTtcbiYjNDM7XHR0ZXN0X3R3b19ibG9ja3MoKTtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fdm1faW9jdGxfZW5hYmxlX2NhcCYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gY2FwYWJpbGl0eSBgS1ZNX0NBUF9FVkVSX01BUFBFRGAgYW5kIGEgbmV3IGlvY3RsIGBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPR2AgdG8gdHJhY2sgd2hpY2ggZ3Vlc3QgcGFnZXMgaGF2ZSBldmVyIGJlZW4gbWFwcGVkLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3Rscy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19LVk1gIGFuZCBpcyBzcGVjaWZpYyB0byB4ODYuIFdlIGZvY3VzIG9uIHRoZSBpb2N0bCBlbnRyeSBwb2ludHMgYW5kIHRoZSBURFAgTU1VIHBhZ2UgZmF1bHQgaGFuZGxlciB3aGVyZSB0aGUgdHJhY2tpbmcgaXMgdXBkYXRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAxMzQ1YWVkNDFjMTI0Y2ViNDkxYTVhYzQ3OGRlODc2MGU0MDgzMzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDE2OjE4OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CmluZGV4IGE1ZjllZTkyZjQzZTguLmNlNmUxZDE1ZDQ4ZDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKQEAgLTY1NjYsNiAmIzQzOzY1NjYsNTMgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRQogICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleQogICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLgogCiYjNDM7NC4xNDUgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0cKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0VWRVJfTUFQUEVECiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NgomIzQzOzpUeXBlOiB2bSBpb2N0bAomIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZwomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvbiBlcnJvcgomIzQzOwomIzQzO0Vycm9yczoKJiM0MzsKJiM0MzsgID09PT09PSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ICBFTk9FTlQgICAgIEtWTV9DQVBfRVZFUl9NQVBQRUQgaGFzIG5vdCBiZWVuIGVuYWJsZWQgZm9yIHRoaXMgVk0KJiM0MzsgIEVJTlZBTCAgICAgYGBncmFudWxlX3NoaWZ0YGAgaXMgYmVsb3cgMjEgKGludGVybmFsIHRyYWNraW5nIGdyYW51bGFyaXR5KSBvcgomIzQzOyAgICAgICAgICAgICBhYm92ZSA2MwomIzQzOyAgRUlOVkFMICAgICBgYGZpcnN0X2dyYW51bGVgYCAmIzQzOyBgYG51bV9ncmFudWxlc2BgIGV4dGVuZGVuZHMgYmV5b25kIHRoZSBtYXhncGEKJiM0MzsgICAgICAgICAgICAgc2V0IHVwIHdoZW4gS1ZNX0NBUF9FVkVSX01BUFBFRCB3YXMgZW5hYmxlZAomIzQzOyAgRUlOVkFMICAgICBgYGZsYWdzYGAgaXMgbm90IDAKJiM0MzsgIEVGQVVMVCAgICAgY29weV97ZnJvbSx0b31fdXNlciBvZiBgYGJpdG1hcGBgIGZhaWxlZCwgZS5nLiwgYml0bWFwIHdhc24mIzM5O3QKJiM0MzsgICAgICAgICAgICAgc3VmZmljaWVudGx5IHNpemVkCiYjNDM7ICBFTk9NRU0gICAgIHNldHRpbmcgdXAgdGVtcG9yYXJ5IGJpdG1hcCBmb3IgY29weWluZyB0byB1c2Vyc3BhY2UgZmFpbGVkCiYjNDM7ICA9PT09PT0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1RoaXMgcmVxdWlyZXMgS1ZNX0NBUF9FVkVSX01BUFBFRCB0byBoYXZlIGJlZW4gZW5hYmxlZCBmb3IgdGhlIFZNIHdpdGggYSBtYXhncGEKJiM0MztwYXJhbWV0ZXIuCiYjNDM7CiYjNDM7OjoKJiM0MzsKJiM0MzsgIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIHsKJiM0MzsJX191NjQgZmlyc3RfZ3JhbnVsZTsKJiM0MzsJX191NjQgbnVtX2dyYW51bGVzOwomIzQzOwlfX3UzMiBncmFudWxlX3NoaWZ0OwomIzQzOwlfX3UzMiBmbGFnczsKJiM0MzsJdW5pb24gewomIzQzOwkJdm9pZCBfX3VzZXIgKmJpdG1hcDsKJiM0MzsJCV9fdTY0IHBhZGRpbmc7CiYjNDM7CX07CiYjNDM7CV9fdTY0IHJlc2VydmVkWzRdOwomIzQzOyAgfTsKJiM0MzsKJiM0MztgYGZpcnN0X2dyYW51bGVgYCwgYGBudW1fZ3JhbnVsZXNgYCwgYW5kIGBgZ3JhbnVsZV9zaGlmdGBgIGVuY29kZSB0aGUgR1BBIHJhbmdlCiYjNDM7dGhlIGNhbGxlciBpbnF1aXJlcyBhYm91dC4gRm9yIGV4YW1wbGUsIHZhbHVlcyBvZiAyLCAyNSwgYW5kIDIxLCByZXNwZWN0aXZlbHksCiYjNDM7aW5xdWlyZSBhYm91dCB0aGUgYWRkcmVzcyByYW5nZSBbNE1CLCA1NE1CKS4gVGhlIGNhbGxlciBwcm92aWRlcyBhIGBgYml0bWFwYGAKJiM0MztvZiB0aGUgcmVxdWlyZWQgbGVuZ3RoIChpbiB0aGUgYWJvdmUgY2FzZSA0IGJ5dGVzKS4gVGhlIGNhbGwgd2lsbCB3cml0ZSBhIDEgaWYKJiM0MzthbnkgbWVtb3J5IGluIHRoZSBncmFudWxlIGhhcyBiZWVuIG1hcHBlZCBhdCBzb21lIHBvaW50IHNpbmNlCiYjNDM7S1ZNX0NBUF9FVkVSX01BUFBFRCB3YXMgZW5hYmxlZCwgMCBpZiBub3QuCiYjNDM7CiAuLiBfa3ZtX3J1bjoKIAogNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlCkBAIC04OTQ5LDYgJiM0Mzs4OTk2LDI2IEBAIGVuYWJsZWQsIGNtbWEgY2FuJiMzOTt0IGJlIGVuYWJsZWQgYW55bW9yZSBhbmQgcGZtZmkgYW5kIHRoZSBzdG9yYWdlIGtleQogaW50ZXJwcmV0YXRpb24gYXJlIGRpc2FibGVkLiBJZiBjbW1hIGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZCBvciB0aGUKIGhwYWdlXzJnIG1vZHVsZSBwYXJhbWV0ZXIgaXMgbm90IHNldCB0byAxLCAtRUlOVkFMIGlzIHJldHVybmVkLgogCiYjNDM7Ny40OCBLVk1fQ0FQX0VWRVJfTUFQUEVECiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NgomIzQzOzpQYXJhbWV0ZXJzOiBhcmdzWzBdIC0gbWF4aW11bSBHUEEgdG8gdHJhY2sgbWFwcGVkIG1lbW9yeQomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIFREUCBpcyBub3QgYXZhaWxhYmxlLCAtRUlOVkFMIGlmIGFyZ3NbMF0KJiM0MzsgICAgICAgICAgaXMgMCBvciBiZXlvbmQgdGhlIG1heGltdW0gcG9zc2libGUgR1BBLCAtRU5PTUVNIGlmIHRyYWNraW5nIHNldHVwCiYjNDM7ICAgICAgICAgIGZhaWxlZCwgLUVFWElTVCBpZiBhbHJlYWR5IHNldCB1cC4KJiM0MzsKJiM0MztUaGUgcHJlc2VuY2Ugb2YgdGhpcyBjYXBhYmlsaXR5IGluZGljYXRlcyB0aGF0IEtWTSBjYW4gdHJhY2sgaWYgcGFnZXMgaGF2ZSBldmVyCiYjNDM7YmVlbiBtYXBwZWQgYnkgdGhlIGd1ZXN0LiBUaGlzIGFsbG93cyBhIGNvbnNlcnZhdGl2ZSBlc3RpbWF0ZSBvZiB3aGljaCBwYWdlcwomIzQzO2FyZSBub3QgemVybyBhbnkgbW9yZS4KJiM0MzsKJiM0MztPbiBlbmFibGluZyB0aGUgY2FwYWJpbGl0eSwgdGhlIGNhbGxlciBwcm92aWRlcyBhIG1heCBHUEEgdmFsdWUuIEtWTSB3aWxsIHRoZW4KJiM0Mzt0cmFjayBHUEFzIGJldHdlZW4gMCBhbmQgdGhpcyB2YWx1ZS4gTm90ZSB0aGF0IHRoaXMgY2FwYWJpbGl0eSBjYW4gYmUgZW5hYmxlZAomIzQzO2F0IGFueSB0aW1lLCBidXQgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gZW5hYmxlIGl0IGJlZm9yZSB2Q1BVcyBzdGFydAomIzQzO3J1bm5pbmcuIEFueSBwYWdlIGFjY2Vzc2VzIGJ5IHRoZSBndWVzdCBiZWZvcmUgY2FwYWJpbGl0eSBlbmFibGVtZW50IHdpbGwgbm90CiYjNDM7YmUgdHJhY2tlZC4gVGhlIG1heCBHUEEgdmFsdWUgY2FuIG9ubHkgYmUgc2V0IG9uY2U7IHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8KJiM0MztlbmFibGUgdGhlIGNhcGFiaWxpdHkgd2l0aCBhIGRpZmZlcmVudCBvciBldmVuIHNhbWUgdmFsdWUgd2lsbCBmYWlsLgomIzQzOwogOC4gT3RoZXIgY2FwYWJpbGl0aWVzLgogPT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBiNTE3MjU3YTYzMTUzLi5jNjA3YTkxOTNmNDAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE1MzMsNiAmIzQzOzE1MzMsMTUgQEAgc3RydWN0IGt2bV9hcmNoIHsKIAkgKi8KIAlib29sIHNoYWRvd19yb290X2FsbG9jYXRlZDsKIAomIzQzOwkvKgomIzQzOwkgKiBUcmFja3Mgd2hpY2ggZ3Vlc3QgcGFnZXMgaGF2ZSBldmVyIGJlZW4gbWFwcGVkLiBUaGlzIGFsbG93cwomIzQzOwkgKiB0cmFja2luZyB3aGljaCBtZW1vcnkgaXMgZ3VhcmFudGVlZCB0byBzdGlsbCBiZSB6ZXJvLCBlLmcuLCBmb3IKJiM0MzsJICogc3VwcG9ydGluZyB0aGUgSHZFeHRDYWxsR2V0Qm9vdFplcm9lZE1lbW9yeSBlbmxpZ2h0ZW5tZW50LgomIzQzOwkgKiBUaGUgZ3JhbnVsYXJpdHkgaXMgZGVmaW5lZCBieSBLVk1fRVZFUl9NQVBQRURfU0hJRlQuCiYjNDM7CSAqLwomIzQzOwl1bnNpZ25lZCBsb25nICpldmVyX21hcHBlZF9iaXRtYXA7CiYjNDM7CXU2NCBldmVyX21hcHBlZF9tYXhfZ3BhOwomIzQzOwogI2lmZGVmIENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkcKIAkvKgogCSAqIElmIHNldCwgdGhlIFZNIGhhcyAob3IgaGFkKSBhbiBleHRlcm5hbCB3cml0ZSB0cmFja2luZyB1c2VyLCBhbmQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvZXZlcl9tYXBwZWQuaCBiL2FyY2gveDg2L2t2bS9tbXUvZXZlcl9tYXBwZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mNzk1MzM3ZTY4NDg2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oCkBAIC0wLDAgJiM0MzsxLDMzIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9fS1ZNX1g4Nl9FVkVSX01BUFBFRF9ICiYjNDM7I2RlZmluZSBfX0tWTV9YODZfRVZFUl9NQVBQRURfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVHJhY2sgaWYgcGFnZXMgaGF2ZSBldmVyIGJlZW4gbWFwcGVkIGF0IGFuIGludGVybmFsIGdyYW51bGFyaXR5IG9mIDIgTUIuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLVk1fRVZFUl9NQVBQRURfU0hJRlQgMjEKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKJiM0MzsJCQkJCSAgICAgdTY0IG5wYWdlcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGludCBzaGlmdCA9IEtWTV9FVkVSX01BUFBFRF9TSElGVCAtIFBBR0VfU0hJRlQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBnZm4gJmd0OyZndDsgc2hpZnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW5kID0gKGdmbiAmIzQzOyBucGFnZXMgJiM0MzsgKDFVTCAmbHQ7Jmx0OyBzaGlmdCkgLSAxKSAmZ3Q7Jmd0OyBzaGlmdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwomIzQzOwllbmQgPSBtaW4oZW5kLCBrdm0tJmd0O2FyY2guZXZlcl9tYXBwZWRfbWF4X2dwYSAmZ3Q7Jmd0OyBLVk1fRVZFUl9NQVBQRURfU0hJRlQpOwomIzQzOwlmb3IgKGkgPSBzdGFydDsgaSAmbHQ7IGVuZDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiByZS1tYXBwaW5nIHphcHBlZCBwYWdlcyBhbmQgYnJlYWtpbmcgdXAgb2YgaHVnZSBwYWdlcyBjYW4KJiM0MzsJCSAqIHRyaWdnZXIgYSBudW1iZXIgb2Ygc2V0cyBvbiBhbHJlYWR5IHNldCBiaXRzLCBzbyB0ZXN0IGZpcnN0CiYjNDM7CQkgKiBiZWZvcmUgYXRvbWljLXNldC4gU2luY2UgYml0cyBjYW4gbmV2ZXIgYmUgdW5zZXQgYWdhaW4sIHRoaXMKJiM0MzsJCSAqIGlzIHNhZmUgYWdhaW5zdCByYWNlcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCF0ZXN0X2JpdChpLCBrdm0tJmd0O2FyY2guZXZlcl9tYXBwZWRfYml0bWFwKSkKJiM0MzsJCQlzZXRfYml0KGksIGt2bS0mZ3Q7YXJjaC5ldmVyX21hcHBlZF9iaXRtYXApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZiAvKiBfX0tWTV9YODZfRVZFUl9NQVBQRURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwppbmRleCBjZTNmMmVmYWRiMDViLi5lYTJhMzdhMDRiMmZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwpAQCAtMSw2ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAmIzM0OzogJiMzNDsgZm10CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2V2ZXJfbWFwcGVkLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttbXUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O21tdV9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bW11dHJhY2UuaCYjMzQ7CkBAIC01NTQsNiAmIzQzOzU1NSwxNyBAQCBzdGF0aWMgaW50IF9faGFuZGxlX2NoYW5nZWRfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLAogCQlyZXR1cm4gMDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogV2hlbmV2ZXIgYSBwYWdlIGJlY29tZXMgYSBmcmVzaCBsZWFmLCBtYXJrIHRoZSBtZW1vcnkgYXMgbWFwcGVkLgomIzQzOwkgKiBPbiBodWdlcGFnZSBicmVha3VwLCB0aGlzIHRyaWdnZXJzIGZvciBlYWNoIG5ldyBsb3dlci1sZXZlbCBwYWdlLAomIzQzOwkgKiBldmVuIHRob3VnaCB0aGUgbWVtb3J5IHdhcyBhbHJlYWR5IG1hcmtlZCB3aGVuIHRoZSBodWdlcGFnZSB3YXMKJiM0MzsJICogbWFwcGVkLCBidXQgdGhlIG92ZXJoZWFkIGlzIG5lZ2xpZ2libGUuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkoa3ZtLSZndDthcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCkgJmFtcDsmYW1wOwomIzQzOwkgICAgaXNfbGVhZiAmYW1wOyZhbXA7ICF3YXNfbGVhZikgewomIzQzOwkJa3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZShrdm0sIGdmbiwgS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBSZWN1cnNpdmVseSBoYW5kbGUgY2hpbGQgUFRzIGlmIHRoZSBjaGFuZ2UgcmVtb3ZlZCBhIHN1YnRyZWUgZnJvbQogCSAqIHRoZSBwYWdpbmcgc3RydWN0dXJlLiAgTm90ZSB0aGUgV0FSTiBvbiB0aGUgUEZOIGNoYW5naW5nIHdpdGhvdXQgdGhlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggMDYyNmU4MzVlOWViNy4uODljYmNmODM5OWY0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMjUsNiAmIzQzOzI1LDcgQEAKICNpbmNsdWRlICYjMzQ7dHNzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtyZWdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrdm1fZW11bGF0ZS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O21tdS9ldmVyX21hcHBlZC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bW11L3BhZ2VfdHJhY2suaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3g4Ni5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Y3B1aWQuaCYjMzQ7CkBAIC0yMzkxLDYgJiM0MzsyMzkyLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dCkKIAljYXNlIEtWTV9DQVBfUkVBRE9OTFlfTUVNOgogCQlyID0ga3ZtID8ga3ZtX2FyY2hfaGFzX3JlYWRvbmx5X21lbShrdm0pIDogMTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgS1ZNX0NBUF9FVkVSX01BUFBFRDoKJiM0MzsJCXIgPSAodGRwX2VuYWJsZWQgJmFtcDsmYW1wOyBJU19FTkFCTEVEKENPTkZJR19YODZfNjQpKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTQxOTAsNiAmIzQzOzQxOTQsMzYgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKIAkJYnJlYWs7CiAJfQomIzQzOwljYXNlIEtWTV9DQVBfRVZFUl9NQVBQRUQ6IHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgKm1hcHBlZF9iaXRtYXA7CiYjNDM7CQl1bnNpZ25lZCBsb25nIG51bV9ncmFudWxlczsKJiM0MzsKJiM0MzsJCXIgPSAwOwomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAoIXRkcF9lbmFibGVkKSB7CiYjNDM7CQkJciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJfSBlbHNlIGlmIChrdm0tJmd0O2FyY2guZXZlcl9tYXBwZWRfYml0bWFwKSB7CiYjNDM7CQkJciA9IC1FRVhJU1Q7CiYjNDM7CQl9IGVsc2UgaWYgKGNhcC0mZ3Q7YXJnc1swXSA9PSAwIHx8CiYjNDM7CQkJICAgY2FwLSZndDthcmdzWzBdICZndDsgKDFVTEwgJmx0OyZsdDsga3ZtX2hvc3QubWF4cGh5YWRkcikpIHsKJiM0MzsJCQlyID0gLUVJTlZBTDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbnVtX2dyYW51bGVzID0gRElWX1JPVU5EX1VQKGNhcC0mZ3Q7YXJnc1swXSwgMVVMTCAmbHQ7Jmx0OyBLVk1fRVZFUl9NQVBQRURfU0hJRlQpOwomIzQzOwkJCW1hcHBlZF9iaXRtYXAgPQomIzQzOwkJCQlrdmNhbGxvYyhCSVRTX1RPX0xPTkdTKG51bV9ncmFudWxlcyksCiYjNDM7CQkJCQkgc2l6ZW9mKGxvbmcpLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwkJCWlmICghbWFwcGVkX2JpdG1hcCkKJiM0MzsJCQkJciA9IC1FTk9NRU07CiYjNDM7CQkJZWxzZSB7CiYjNDM7CQkJCXdyaXRlX2xvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJCQkJa3ZtLSZndDthcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCA9IG1hcHBlZF9iaXRtYXA7CiYjNDM7CQkJCWt2bS0mZ3Q7YXJjaC5ldmVyX21hcHBlZF9tYXhfZ3BhID0gbnVtX2dyYW51bGVzICZsdDsmbHQ7IEtWTV9FVkVSX01BUFBFRF9TSElGVDsKJiM0MzsJCQkJd3JpdGVfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiAJZGVmYXVsdDoKIAkJciA9IC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtNDE5Nyw2ICYjNDM7NDIzMSw3MyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLAogCXJldHVybiByOwogfQogCiYjNDM7c3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZyhzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQkgICAgc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgKmxvZykKJiM0Mzt7CiYjNDM7CXU2NCBtYXhfZ3JhbnVsZXM7CiYjNDM7CXVuc2lnbmVkIGludCBjb2Fyc2VuZXNzOwomIzQzOwl1bnNpZ25lZCBsb25nICpiaXRtYXA7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpZiAoIWt2bS0mZ3Q7YXJjaC5ldmVyX21hcHBlZF9iaXRtYXApCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKGxvZy0mZ3Q7ZmxhZ3MpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGxvZy0mZ3Q7Z3JhbnVsZV9zaGlmdCAmbHQ7IEtWTV9FVkVSX01BUFBFRF9TSElGVCB8fCBsb2ctJmd0O2dyYW51bGVfc2hpZnQgJmd0Oz0gNjQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbWF4X2dyYW51bGVzID0ga3ZtLSZndDthcmNoLmV2ZXJfbWFwcGVkX21heF9ncGEgJmd0OyZndDsgbG9nLSZndDtncmFudWxlX3NoaWZ0OwomIzQzOwlpZiAobG9nLSZndDtudW1fZ3JhbnVsZXMgJmd0OyBtYXhfZ3JhbnVsZXMgfHwKJiM0MzsJICAgIGxvZy0mZ3Q7Zmlyc3RfZ3JhbnVsZSAmZ3Q7IG1heF9ncmFudWxlcyAtIGxvZy0mZ3Q7bnVtX2dyYW51bGVzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgcmVxdWVzdCB1c2VzIHRoZSBzYW1lIGdyYW51bGFyaXR5IGFzIG91ciBpbnRlcm5hbAomIzQzOwkgKiB0cmFja2luZywgYW5kIHdlIGFyZSBieXRlLWFsaWduZWQgKHRoZSBleHBlY3RlZCBjb21tb24gY2FzZSksIHdlIGNhbgomIzQzOwkgKiBqdXN0IGNvcHlfdG9fdXNlci4gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaXRtYXAgdG8gcGFzcy4KJiM0MzsJICoKJiM0MzsJICogV2UgZG8gbm90IGxvY2sgYWdhaW5zdCBjb25jdXJyZW50IHZDUFVzIG1hcHBpbmcgbmV3IG1lbW9yeSBvbiBhbnkgb2YKJiM0MzsJICogdGhlc2Ugb3BlcmF0aW9ucy4gQml0cyBhcmUgc2V0IGF0b21pY2FsbHkgYW5kIG5ldmVyIGNsZWFyZWQsIHNvIGFueSByYWNlCiYjNDM7CSAqIGhlcmUgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIHdyaXRlIGhhcHBlbmluZyBhZnRlciB0aGlzIGhhbmRsZXIKJiM0MzsJICogZmluaXNoZXMgYnV0IGJlZm9yZSB0aGUgY2FsbGVyIHJlYWRzIHRoZSByZXN1bHRzLgomIzQzOwkgKi8KJiM0MzsJY29hcnNlbmVzcyA9IGxvZy0mZ3Q7Z3JhbnVsZV9zaGlmdCAtIEtWTV9FVkVSX01BUFBFRF9TSElGVDsKJiM0MzsJaWYgKGNvYXJzZW5lc3MgPT0gMCAmYW1wOyZhbXA7ICEobG9nLSZndDtmaXJzdF9ncmFudWxlICZhbXA7IDcpICZhbXA7JmFtcDsgIShsb2ctJmd0O251bV9ncmFudWxlcyAmYW1wOyA3KSkgewomIzQzOwkJaWYgKGNvcHlfdG9fdXNlcihsb2ctJmd0O2JpdG1hcCwKJiM0MzsJCQkJICh1OCAqKWt2bS0mZ3Q7YXJjaC5ldmVyX21hcHBlZF9iaXRtYXAgJiM0MzsgbG9nLSZndDtmaXJzdF9ncmFudWxlIC8gOCwKJiM0MzsJCQkJIGxvZy0mZ3Q7bnVtX2dyYW51bGVzIC8gOCkpCiYjNDM7CQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwliaXRtYXAgPSBrdnphbGxvYyhESVZfUk9VTkRfVVAobG9nLSZndDtudW1fZ3JhbnVsZXMsIDgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwlpZiAoIWJpdG1hcCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlmb3IgKHU2NCBncmFuID0gbG9nLSZndDtmaXJzdF9ncmFudWxlOwomIzQzOwkgICAgIGdyYW4gJmx0OyBsb2ctJmd0O2ZpcnN0X2dyYW51bGUgJiM0MzsgbG9nLSZndDtudW1fZ3JhbnVsZXM7CiYjNDM7CSAgICAgZ3JhbiYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBncmFuICZsdDsmbHQ7IGNvYXJzZW5lc3M7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICYjNDM7ICgxVUwgJmx0OyZsdDsgY29hcnNlbmVzcyk7CiYjNDM7CiYjNDM7CQlpZiAoZmluZF9uZXh0X2JpdChrdm0tJmd0O2FyY2guZXZlcl9tYXBwZWRfYml0bWFwLCBlbmQsIHN0YXJ0KSAmbHQ7IGVuZCkKJiM0MzsJCQlfX3NldF9iaXQoZ3JhbiAtIGxvZy0mZ3Q7Zmlyc3RfZ3JhbnVsZSwgYml0bWFwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY29weV90b191c2VyKGxvZy0mZ3Q7Yml0bWFwLCBiaXRtYXAsIERJVl9ST1VORF9VUChsb2ctJmd0O251bV9ncmFudWxlcywgOCkpKSB7CiYjNDM7CQlyID0gLUVGQVVMVDsKJiM0MzsJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJciA9IDA7CiYjNDM7CiYjNDM7b3V0X2ZyZWU6CiYjNDM7CWt2ZnJlZShiaXRtYXApOwomIzQzOwlyZXR1cm4gcjsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX0tWTV9DT01QQVQKIC8qIGZvciBLVk1fWDg2X1NFVF9NU1JfRklMVEVSICovCiBzdHJ1Y3Qga3ZtX21zcl9maWx0ZXJfcmFuZ2VfY29tcGF0IHsKQEAgLTQ3MTAsNiAmIzQzOzQ4MTEsMTUgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9tc3JfZmlsdGVyKGt2bSwgJmFtcDtmaWx0ZXIpOwogCQlicmVhazsKIAl9CiYjNDM7CWNhc2UgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0c6IHsKJiM0MzsJCXN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIG1hcHBlZF9sb2c7CiYjNDM7CiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDttYXBwZWRfbG9nLCBhcmdwLCBzaXplb2YobWFwcGVkX2xvZykpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwkJciA9IGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nKGt2bSwgJmFtcDttYXBwZWRfbG9nKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiAJZGVmYXVsdDoKIAkJciA9IC1FTk9UVFk7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCmluZGV4IDQxOTAxMTA5N2ZhOGUuLmQwYmU5NDk0NmE3N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0NwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5CiYjNDM7I2RlZmluZSBLVk1fQ0FQX0VWRVJfTUFQUEVEIDI1MAogCiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgewogCV9fdTMyIGlycWNoaXA7CkBAIC0xNjcwLDQgJiM0MzsxNjcxLDE4IEBAIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7CiAJX191NjQgcGFkZGluZ1s1XTsKIH07CiAKJiM0MzsjZGVmaW5lIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HICBfSU9XKEtWTUlPLCAgMHhkNiwgc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cpCiYjNDM7CiYjNDM7c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgewomIzQzOwlfX3U2NCBmaXJzdF9ncmFudWxlOwomIzQzOwlfX3U2NCBudW1fZ3JhbnVsZXM7CiYjNDM7CV9fdTMyIGdyYW51bGVfc2hpZnQ7CiYjNDM7CV9fdTMyIGZsYWdzOwomIzQzOwl1bmlvbiB7CiYjNDM7CQl2b2lkIF9fdXNlciAqYml0bWFwOwomIzQzOwkJX191NjQgcGFkZGluZzsKJiM0MzsJfTsKJiM0MzsJX191NjQgcmVzZXJ2ZWRbNF07CiYjNDM7fTsKJiM0MzsKICNlbmRpZiAvKiBfX0xJTlVYX0tWTV9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQppbmRleCA0YWNlMTI2MDZlOTM3Li4xZWIwYmFjMTkyMGRjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTE2Miw2ICYjNDM7MTYyLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSByc2VxX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gc3RlYWxfdGltZQogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzeXN0ZW1fY291bnRlcl9vZmZzZXRfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGV2ZXJfbWFwcGVkX3Rlc3QKIAogIyBDb21waWxlZCBvdXRwdXRzIHVzZWQgYnkgdGVzdCB0YXJnZXRzCiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRF94ODYgJiM0Mzs9IHg4Ni9ueF9odWdlX3BhZ2VzX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ldmVyX21hcHBlZF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZXZlcl9tYXBwZWRfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjc2NzIzZjBjOWVlMmMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZXZlcl9tYXBwZWRfdGVzdC5jCkBAIC0wLDAgJiM0MzsxLDE5MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBLVk0gZXZlci1tYXBwZWQgYml0bWFwIHRlc3QKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiwgTnV0YW5peCwgSW5jLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3V0aWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7a3ZtX3V0aWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cHJvY2Vzc29yLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBLaUIgMTAyNHUKJiM0MzsjZGVmaW5lIE1pQiAoMTAyNCAqIEtpQikKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHVpbnQ2NF90IGJhc2VfZ3BhLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfYml0bWFwc19lcXVhbCh1OCBleHBlY3RlZFtdLCB1OCBhY3R1YWxbXSwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykgewomIzQzOwkJVEVTVF9BU1NFUlQoZXhwZWN0ZWRbaV0gPT0gYWN0dWFsW2ldLAomIzQzOwkJCSAgICAmIzM0O2J5dGUgJWxkLCBleHBlY3RlZCAweCUwMngsIGdvdCAweCUwMngmIzM0OywKJiM0MzsJCQkgICAgaSwgZXhwZWN0ZWRbaV0sIGFjdHVhbFtpXSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcHJlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHN0YXJ0LCB1NjQgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHJhbmdlID0gewomIzQzOwkJLmdwYSA9IHN0YXJ0LAomIzQzOwkJLnNpemUgPSBsZW4sCiYjNDM7CQkuZmxhZ3MgPSAwLAomIzQzOwl9OwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCAmYW1wO3JhbmdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9vbmVfcGFnZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHJhbmdlID0gewomIzQzOwkJLmdwYSA9IDB4MCwKJiM0MzsJCS5zaXplID0gUEFHRV9TSVpFLAomIzQzOwkJLmZsYWdzID0gMCwKJiM0MzsJfTsKJiM0MzsJdW5zaWduZWQgY2hhciBtYXBwZWRfYml0bWFwOwomIzQzOwlzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyBsb2cgPSB7CiYjNDM7CQkuZmlyc3RfZ3JhbnVsZSA9IDAsCiYjNDM7CQkubnVtX2dyYW51bGVzID0gMSwKJiM0MzsJCS5ncmFudWxlX3NoaWZ0ID0gMjEsCiYjNDM7CQkuZmxhZ3MgPSAwLAomIzQzOwkJLmJpdG1hcCA9ICZhbXA7bWFwcGVkX2JpdG1hcCwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X2NvZGUpOwomIzQzOwomIzQzOwl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBQQUdFX1NJWkUpOwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCAmYW1wO3JhbmdlKTsKJiM0MzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCAmYW1wO2xvZyk7CiYjNDM7CVRFU1RfQVNTRVJUKG1hcHBlZF9iaXRtYXAgPT0gMHgxLCAmIzM0O2V4cGVjdGVkIDB4MSwgZ290IDB4JXgmIzM0OywgbWFwcGVkX2JpdG1hcCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQWRkIDY0TUIgb3IgbWVtb3J5IGF0IEdQQSAxNk1CICggLS0mZ3Q7IFsxNk1CLCA4ME1CKSApLAomIzQzOyAqIHByZS1mYXVsdCBbMTZNQiwgNDhNQiksIHJlcXVlc3QgYW5kIGNoZWNrIGJpdG1hcCBmb3IgWzE2TUIsIDgwTUIpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfb25lX2Jsb2NrKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwljb25zdCB1aW50NjRfdCBtYXBfc3RhcnQgPSAweDEwMDAwMDA7CiYjNDM7CWNvbnN0IHVpbnQ2NF90IG1hcF9sZW4gPSAweDQwMDAwMDA7CiYjNDM7CXU4IG1hcHBlZF9iaXRtYXBbNF0gPSB7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfTsKJiM0MzsJdTggZXhwZWN0ZWRfYml0bWFwWzRdID0geyAweGZmLCAweGZmLCAweDAwLCAweDAwIH07CiYjNDM7CXN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIGxvZyA9IHsKJiM0MzsJCS5maXJzdF9ncmFudWxlID0gMHg4LAomIzQzOwkJLm51bV9ncmFudWxlcyA9IDB4MjAsCiYjNDM7CQkuZ3JhbnVsZV9zaGlmdCA9IDIxLAomIzQzOwkJLmZsYWdzID0gMCwKJiM0MzsJCS5iaXRtYXAgPSBtYXBwZWRfYml0bWFwLAomIzQzOwl9OwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfY29kZSk7CiYjNDM7CXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIG1hcF9zdGFydCwgMSwgbWFwX2xlbiAvIFBBR0VfU0laRSwgMCk7CiYjNDM7CiYjNDM7CXJldCA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCAmYW1wO2xvZyk7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCAmYW1wOyZhbXA7IGVycm5vID09IEVOT0VOVCwKJiM0MzsJCSAgICAmIzM0O2V4cGVjdGVkIEVOT0VOVCB3aGVuIHF1ZXJ5aW5nIGV2ZXItbWFwcGVkIGxvZyBiZWZvcmUgZW5hYmxlbWVudCwgZ290ICVkJiMzNDssCiYjNDM7CQkgICAgZXJybm8pOwomIzQzOwl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBtYXBfc3RhcnQgJiM0MzsgbWFwX2xlbik7CiYjNDM7CXByZV9mYXVsdCh2Y3B1LCAxNiAqIE1pQiwgMzIgKiBNaUIpOwomIzQzOwomIzQzOwlyZXQgPSBfX3ZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVZFUl9NQVBQRUQsIFBBR0VfU0laRSk7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCAmYW1wOyZhbXA7IGVycm5vID09IEVFWElTVCwKJiM0MzsJCSAgICAmIzM0O2V4cGVjdGVkIEVFWElTVCB3aGVuIGVuYWJsaW5nIEtWTV9DQVBfRVZFUl9NQVBQRUQgdHdpY2UsIGdvdCAlZCYjMzQ7LAomIzQzOwkJICAgIGVycm5vKTsKJiM0MzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCAmYW1wO2xvZyk7CiYjNDM7CWFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7CiYjNDM7CiYjNDM7CWxvZy5ncmFudWxlX3NoaWZ0ID0gMjI7CiYjNDM7CWxvZy5maXJzdF9ncmFudWxlID0gMHg0OwomIzQzOwlsb2cubnVtX2dyYW51bGVzID0gMHgxMDsKJiM0MzsJbWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9LCA0KTsKJiM0MzsJbWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweGZmLCAweDAwLCAweGE1LCAweGE1IH0sIDQpOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csICZhbXA7bG9nKTsKJiM0MzsJYXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTsKJiM0MzsKJiM0MzsJbG9nLmdyYW51bGVfc2hpZnQgPSAyMzsKJiM0MzsJbG9nLmZpcnN0X2dyYW51bGUgPSAweDI7CiYjNDM7CWxvZy5udW1fZ3JhbnVsZXMgPSAweDg7CiYjNDM7CW1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7CiYjNDM7CW1lbWNweShleHBlY3RlZF9iaXRtYXAsICh1OFtdKXsgMHgwZiwgMHhhNSwgMHhhNSwgMHhhNSB9LCA0KTsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCAmYW1wO2xvZyk7CiYjNDM7CWFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7CiYjNDM7CiYjNDM7CWxvZy5udW1fZ3JhbnVsZXMgPSAweGZmOwomIzQzOwlyZXQgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgJmFtcDtsb2cpOwomIzQzOwlURVNUX0FTU0VSVChyZXQgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5WQUwsCiYjNDM7CQkgICAgJiMzNDtleHBlY3RlZCBFSU5WQUwgd2hlbiBxdWVyeWluZyBiZXlvbmQgcmFuZ2UsIGdvdCAlZCYjMzQ7LAomIzQzOwkJICAgIGVycm5vKTsKJiM0MzsKJiM0MzsJbG9nLm51bV9ncmFudWxlcyA9IDB4MTA7CiYjNDM7CWxvZy5ncmFudWxlX3NoaWZ0ID0gMTsKJiM0MzsJcmV0ID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csICZhbXA7bG9nKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVkFMLAomIzQzOwkJICAgICYjMzQ7ZXhwZWN0ZWQgRUlOVkFMIHdpdGggdG9vIHNtYWxsIGdybmF1bGUgc2hpZnQsIGdvdCAlZCYjMzQ7LAomIzQzOwkJICAgIGVycm5vKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBZGQgMTI4TUIgb3IgbWVtb3J5IGF0IEdQQSAzMk1CICggLS0mZ3Q7IFszMk1CLCAxNjBNQikgKSwKJiM0MzsgKiBwcmUtZmF1bHQgWzMyTUIsIDY0TUIpLCBhbmQgWzkwTUIsIDk0TUIpLAomIzQzOyAqIHJlcXVlc3QgYW5kIGNoZWNrIGJpdG1hcCBmb3IgWzE2TUIsIDEyME1CKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3R3b19ibG9ja3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CWNvbnN0IHVpbnQ2NF90IG1hcF9zdGFydCA9IDB4MjAwMDAwMDsKJiM0MzsJY29uc3QgdWludDY0X3QgbWFwX2xlbiA9IDB4ODAwMDAwMDsKJiM0MzsJdTggbWFwcGVkX2JpdG1hcFs3XSA9IHsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9OwomIzQzOwl1OCBleHBlY3RlZF9iaXRtYXBbN10gPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAgfTsKJiM0MzsJc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0gewomIzQzOwkJLmZpcnN0X2dyYW51bGUgPSAweDgsCiYjNDM7CQkubnVtX2dyYW51bGVzID0gMHgzNCwKJiM0MzsJCS5ncmFudWxlX3NoaWZ0ID0gMjEsCiYjNDM7CQkuZmxhZ3MgPSAwLAomIzQzOwkJLmJpdG1hcCA9IG1hcHBlZF9iaXRtYXAsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF9jb2RlKTsKJiM0MzsJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgbWFwX3N0YXJ0LCAxLCBtYXBfbGVuIC8gUEFHRV9TSVpFLCAwKTsKJiM0MzsKJiM0MzsJdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FVkVSX01BUFBFRCwgbWFwX3N0YXJ0ICYjNDM7IG1hcF9sZW4pOwomIzQzOwlwcmVfZmF1bHQodmNwdSwgMzIgKiBNaUIsIDMyICogTWlCKTsKJiM0MzsJcHJlX2ZhdWx0KHZjcHUsIDkwICogTWlCLCA0ICogTWlCKTsKJiM0MzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCAmYW1wO2xvZyk7CiYjNDM7CWFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7CiYjNDM7CiYjNDM7CWxvZy5ncmFudWxlX3NoaWZ0ID0gMjI7CiYjNDM7CWxvZy5maXJzdF9ncmFudWxlID0gMHg0OwomIzQzOwlsb2cubnVtX2dyYW51bGVzID0gMHgxYTsKJiM0MzsJbWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNX0sIDcpOwomIzQzOwltZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4ZjAsIDB4MGYsIDB4MGMsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNyk7CiYjNDM7CXZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgJmFtcDtsb2cpOwomIzQzOwlhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpOwomIzQzOwomIzQzOwlsb2cuZ3JhbnVsZV9zaGlmdCA9IDIzOwomIzQzOwlsb2cuZmlyc3RfZ3JhbnVsZSA9IDB4MjsKJiM0MzsJbG9nLm51bV9ncmFudWxlcyA9IDB4ZDsKJiM0MzsJbWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9LCA3KTsKJiM0MzsJbWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweDNjLCAweDAyLCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDcpOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csICZhbXA7bG9nKTsKJiM0MzsJYXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSkpOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX0VWRVJfTUFQUEVEKSk7CiYjNDM7CiYjNDM7CXRlc3Rfb25lX3BhZ2UoKTsKJiM0MzsJdGVzdF9vbmVfYmxvY2soKTsKJiM0MzsJdGVzdF90d29fYmxvY2tzKCk7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjU5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIEV2ZXItTWFwcGVkIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNpbmcgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCB0aGUgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYCBpb2N0bCBmb3IgeDg2IEtWTS4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBkZXNpZ25lZCB0byB0cmFjayB3aGljaCBndWVzdCBwYWdlcyBoYXZlICpldmVyKiBiZWVuIG1hcHBlZCwgd2hpY2ggaXMgYSBuZWF0IGNhcGFiaWxpdHkuCgpGaXJzdCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4gWWVwLCBuZXcgaW9jdGwsIG5ldyBjYXBhYmlsaXR5IOKAkyB0aGF0IHNjcmVhbXMgZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFFFTVUsIHN5emthbGxlciwgYWxsIHRob3NlIHRvb2xzIHdpbGwgYmUgYWJsZSB0byB1dGlsaXplIHRoaXMuIEdvb2QuCgpOb3csIHdoZXJlIGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scz8gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3Q6CgoqICAgYGt2bV9ldmVyX21hcHBlZF9zZXRfcmFuZ2VgIC0gc291bmRzIGxpa2UgdGhlIHdvcmtob3JzZSBzZXR0aW5nIGV2ZXItbWFwcGVkIHN0YXR1cywgaW5saW5lZCBpbnRvIGBfX2hhbmRsZV9jaGFuZ2VkX3NwdGVgIHdpdGhpbiBgdGRwX21tdS5jYC4KKiAgIGBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZ2AgLSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgCiogICBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIC0gbW9kaWZpZWQgdG8gaGFuZGxlIHRoZSBuZXcgYEtWTV9DQVBfRVZFUl9NQVBQRURgCiogICBga3ZtX2FyY2hfdm1faW9jdGxgIC0gbW9kaWZpZWQgdG8gaGFuZGxlIHRoZSBuZXcgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYAoKU2luY2UgYGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nYCBpcyBzdGF0aWMsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgdXNlZC4gQWgsIHllcywgaXQgaXMuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5IGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAuIFRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMuCgpMZXQmIzM5O3MgY2hlY2sgYGFyY2gveDg2L2t2bS94ODYuY2AgZm9yIGBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTM5MzE9aW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDIzMy1cbmFyY2gveDg2L2t2bS94ODYuYzo0MjM0OnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2coc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQyMzUtXHRcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyAqbG9nKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz00NDU1PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDgxOS1cbmFyY2gveDg2L2t2bS94ODYuYzo0ODIwOlx0XHRyID0ga3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2coa3ZtLCBcdTAwMjZtYXBwZWRfbG9nKTtcbmFyY2gveDg2L2t2bS94ODYuYy00ODIxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyNQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIEFyY2hpdGVjdHVyZSBmb3IgUG90ZW50aWFsIENhbGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBLVk0gY29kZSBhbmQgdHJ5aW5nIHRvIHRyYWNlIGhvdyB0aGlzIGBfX2hhbmRsZV9jaGFuZ2VkX3NwdGVgIGZ1bmN0aW9uLCB3aGljaCBpcywgaW1wb3J0YW50bHksICpzdGF0aWMqLCBpcyB1c2VkIGluIHRoZSBgdGRwX21tdS5jYCBmaWxlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIC0gSSBrbm93IGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgYXJlIHRoZSBvbmVzIHRvIHN0YXJ0IHdpdGguIEJ1dCByZWFsbHkgd2hhdCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlzLCBkb2VzIGEgKm5vbi1zdGF0aWMqIGZ1bmN0aW9uICppbiB0aGlzIGZpbGUqLCBgdGRwX21tdS5jYCwgY2FsbCB0aGlzIGludGVybmFsIGBfX2hhbmRsZV9jaGFuZ2VkX3NwdGVgIGZ1bmN0aW9uPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbi4gSWYgaXQmIzM5O3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseSwgdGhhdCBuYXJyb3dzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIHNpZ25pZmljYW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19oYW5kbGVfY2hhbmdlZF9zcHRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTM4Nj1zdGF0aWMgdm9pZCBoYW5kbGVfcmVtb3ZlZF9wdChzdHJ1Y3Qga3ZtICprdm0sIHRkcF9wdGVwX3QgcHQsIGJvb2wgc2hhcmVkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTQ3MS0vKipcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQ3MjogKiBfX2hhbmRsZV9jaGFuZ2VkX3NwdGUgLSBoYW5kbGUgYm9va2tlZXBpbmcgYXNzb2NpYXRlZCB3aXRoIGFuIFNQVEUgY2hhbmdlXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00NzMtICogQGt2bToga3ZtIGluc3RhbmNlXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDg2LSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NDg3OnN0YXRpYyBpbnQgX19oYW5kbGVfY2hhbmdlZF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00ODgtXHRcdFx0XHQgZ2ZuX3QgZ2ZuLCB1NjQgb2xkX3NwdGUsIHU2NCBuZXdfc3B0ZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz01OTc9c3RhdGljIHZvaWQgaGFuZGxlX2NoYW5nZWRfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTYwMC17XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo2MDE6XHRLVk1fQlVHX09OKF9faGFuZGxlX2NoYW5nZWRfc3B0ZShrdm0sIHNwLCBnZm4sIG9sZF9zcHRlLCBuZXdfc3B0ZSxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTYwMi1cdFx0XHRcdFx0IGxldmVsLCBzaGFyZWQpLCBrdm0pO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTY0Nz1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgdGRwX21tdV9zZXRfc3B0ZV9hdG9taWMoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTY4MC1cdCAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NjgxOlx0cmV0ID0gX19oYW5kbGVfY2hhbmdlZF9zcHRlKGt2bSwgc3AsIGl0ZXItXHUwMDNlZ2ZuLCBpdGVyLVx1MDAzZW9sZF9zcHRlLFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNjgyLVx0XHRcdFx0ICAgIG5ld19zcHRlLCBpdGVyLVx1MDAzZWxldmVsLCB0cnVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk1MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFBvdGVudGlhbCBLZXkgRnVuY3Rpb25zIGluIGB0ZHBfbW11LmNgKioKCk9rYXksIHNvIGBoYW5kbGVfY2hhbmdlZF9zcHRlYCBhbmQgYHRkcF9tbXVfc2V0X3NwdGVfYXRvbWljYCBib3RoIHVsdGltYXRlbHkgZnVubmVsIGludG8gYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAuIFRoYXQmIzM5O3MgYSBjbGVhciBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgU1BURSBjaGFuZ2VzIGFyZSBtYW5hZ2VkIGluIHRoaXMgVERQIE1NVSBjb250ZXh0LiBNeSB0YXNrIG5vdyBpcyB0byBpZGVudGlmeSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHRkcF9tbXUuY2AgdGhhdCBtaWdodCBwcm92aWRlIGFkZGl0aW9uYWwgaW5zaWdodHMsIHNlcnZpbmcgYXMgcG90ZW50aWFsICYjMzQ7Zm9jdXMgc3ltYm9scyYjMzQ7IHRvIGJ1aWxkIGEgbW9yZSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuIEZpbmRpbmcgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIFNQVEUgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhpcyBtb2R1bGUuIEkgbmVlZCB0byBsb29rIGZvciBmdW5jdGlvbnMgdGhhdCBlaXRoZXIgaW50ZXJhY3Qgd2l0aCBTUFRFcyBkaXJlY3RseSBvciB0aGF0IGNvbnRyb2wgcmVsYXRlZCBhc3BlY3RzIG9mIHRoZSBURFAgTU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQga3ZtX3RkcF9tbXVfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUuaD0zMzE9c3RhdGljIGlubGluZSBib29sIGt2bV9zaGFkb3dfcm9vdF9hbGxvY2F0ZWQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUuaC0zNDEtXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MzQyOmludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pO1xuYXJjaC94ODYva3ZtL21tdS5oLTM0My1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxMzU9c3RhdGljIHZvaWQga3ZtX2Fzc2VydF9nbWVtX2ludmFsaWRhdGVfbG9ja19oZWxkKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTQ2LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTQ3OmludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNDgte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTEyMjI9c3RhdGljIGludCB0ZHBfbW11X3NwbGl0X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMjI4LSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTIyOTppbnQga3ZtX3RkcF9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEyMzAte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTE4OTE9Ym9vbCBrdm1fdGRwX21tdV93cml0ZV9wcm90ZWN0X2dmbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTkxMC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjE5MTE6aW50IGt2bV90ZHBfbW11X2dldF93YWxrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIHU2NCAqc3B0ZXMsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xOTEyLVx0XHRcdCBpbnQgKnJvb3RfbGV2ZWwpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NzI9dm9pZCBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoc3RydWN0IGt2bSAqa3ZtLCBib29sIHNoYXJlZCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC03My1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjc0OmludCBrdm1fdGRwX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTc1LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTEwNj1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3RkcF9tbXVfd2Fsa19sb2NrbGVzc19lbmQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC0xMTAtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDoxMTE6aW50IGt2bV90ZHBfbW11X2dldF93YWxrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIHU2NCAqc3B0ZXMsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC0xMTItXHRcdFx0IGludCAqcm9vdF9sZXZlbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNjQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBLVk0gY29kZSwgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgZmV3IGtleSBmdW5jdGlvbnMgdG8gemVybyBpbiBvbi4gYGt2bV90ZHBfbW11X21hcGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBhZ2UgZmF1bHQgcGF0aCwgYnV0IHRoZSByZWFsIGVudHJ5IHBvaW50cyBmb3IgdGhlc2UgY2FwYWJpbGl0aWVzIGFyZSBga3ZtX2FyY2hfdm1faW9jdGxgIGZvciBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgIGFuZCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGZvciBgS1ZNX0NBUF9FVkVSX01BUFBFRGAuIFRob3NlIHR3byBhcmUgZGVmaW5pdGVseSB3b3J0aCBwcmlvcml0aXppbmcgaW4gbXkgYW5hbHlzaXMsIGFsb25nIHdpdGggdGhlIGB0ZHBfbW11X21hcGAgZnVuY3Rpb24sIHdoaWNoIGFwcGVhcnMgY2VudHJhbCB0byB0aGUgVERQIE1NVSBvcGVyYXRpb25zLgoKTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGFuZCBgYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNgLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGlzIGlzIHNwZWNpZmljIHRvIHg4NiBLVk0uIFRoZSBwcmVzZW5jZSBvZiBgdGRwX2VuYWJsZWRgIGNvbmZpcm1zIHRoYXQuIEkga25vdyBgQ09ORklHX0tWTWAgaXMgYSBnaXZlbiwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBlbHNlLiBMZXQmIzM5O3MgY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZz0xNj1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE3LVxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjE4OmNvbmZpZyBLVk1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMC1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzozMTpjb25maWcgS1ZNX01JUFNfREVCVUdfQ09QMF9DT1VOVEVSU1xuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtNYWludGFpbiBjb3VudGVycyBmb3IgQ09QMCBhY2Nlc3Nlc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjY6Y29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI3LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI5OmNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMC1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNy1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozODpjb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM5LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQzLVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ0LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQ1OmNvbmZpZyBLVk1fQk9PSzNTXzMyXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfMzIgcHJvY2Vzc29yc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyNS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjY6Y29uZmlnIEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjctXHRib29sXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyOTpjb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O0RldGFpbGVkIHRpbWluZyBmb3IgdGhlIFA5IGVudHJ5IHBvaW50XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDhfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCB0aW1pbmcgZm9yIGh5cGVydmlzb3IgcmVhbC1tb2RlIGNvZGUgKGZvciBQT1dFUjgpXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTc6Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BNVVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O0h5cGVydmlzb3IgUGVyZiBldmVudHMgZm9yIEtWTSBCb29rM3MtSFZcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTgzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4NDpjb25maWcgS1ZNX0JPT0tFX0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg1LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODc6Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7RGV0YWlsZWQgZXhpdCB0aW1pbmdcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk3LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE5ODpjb25maWcgS1ZNX0U1MDBWMlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OS1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMHYyIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEyLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIxMzpjb25maWcgS1ZNX0U1MDBNQ1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxNC1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwME1DL0U1NTAwL0U2NTAwIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX01QSUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMzAtXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgTVBJQyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI0MTpjb25maWcgS1ZNX1hJQ1NcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDItXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgWElDUyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI1MTpjb25maWcgS1ZNX1hJVkVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTItXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcJiMzNDthcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21pY3Jvd2F0dC9LY29uZmlnXCYjMzQ7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc6MjQ6Y29uZmlnIEtWTV9HVUVTVFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtLVk0gR3Vlc3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9ODM5PXNvdXJjZSBcJiMzNDthcmNoL3g4Ni94ZW4vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYvS2NvbmZpZy04NDAtXG5hcmNoL3g4Ni9LY29uZmlnOjg0MTpjb25maWcgS1ZNX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTg0Mi1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnQgKGluY2x1ZGluZyBrdm1jbG9jaylcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTMtXG52aXJ0L2t2bS9LY29uZmlnOjQ6Y29uZmlnIEtWTV9DT01NT05cbnZpcnQva3ZtL0tjb25maWctNS0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL0tjb25maWc9Mzk9Y29uZmlnIE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQyLVxudmlydC9rdm0vS2NvbmZpZzo0Mzpjb25maWcgS1ZNX01NSU9cbnZpcnQva3ZtL0tjb25maWctNDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNDUtXG52aXJ0L2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fQVNZTkNfUEZcbnZpcnQva3ZtL0tjb25maWctNDctICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQ5LSMgVG9nZ2xlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpcmVjdCBub3RpZmljYXRpb24gYW5kIGJhdGNoIGpvYlxudmlydC9rdm0vS2NvbmZpZzo1MDpjb25maWcgS1ZNX0FTWU5DX1BGX1NZTkNcbnZpcnQva3ZtL0tjb25maWctNTEtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTU5PWNvbmZpZyBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4tLVxudmlydC9rdm0vS2NvbmZpZy02MS1cbnZpcnQva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9WRklPXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZz02NT1jb25maWcgSEFWRV9LVk1fSU5WQUxJRF9XQUtFVVBTXG4tLVxudmlydC9rdm0vS2NvbmZpZy02Ny1cbnZpcnQva3ZtL0tjb25maWc6Njg6Y29uZmlnIEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxudmlydC9rdm0vS2NvbmZpZy02OS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy03MC1cbnZpcnQva3ZtL0tjb25maWc6NzE6Y29uZmlnIEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbnZpcnQva3ZtL0tjb25maWctNzItICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNzMtXG52aXJ0L2t2bS9LY29uZmlnOjc0OmNvbmZpZyBLVk1fQ09NUEFUXG52aXJ0L2t2bS9LY29uZmlnLTc1LSAgICAgICBkZWZfYm9vbCB5XG4tLVxudmlydC9rdm0vS2NvbmZpZz05MT1jb25maWcgSEFWRV9LVk1fUE1fTk9USUZJRVJcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTkzLVxudmlydC9rdm0vS2NvbmZpZzo5NDpjb25maWcgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbnZpcnQva3ZtL0tjb25maWctOTUtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctOTYtXG52aXJ0L2t2bS9LY29uZmlnOjk3OmNvbmZpZyBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG52aXJ0L2t2bS9LY29uZmlnLTk4LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTk5LVxudmlydC9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbnZpcnQva3ZtL0tjb25maWctMTAxLSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5OTUKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogOTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRXZlci1NYXBwZWQgVHJhY2tpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgS1ZNIGZ1bmN0aW9uYWxpdHkg4oCTIHRoZSAmIzM0O2V2ZXItbWFwcGVkJiMzNDsgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIGBLVk1gIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIGBYODZfNjRgIGlzIGltcGxpY2l0bHkgcmVxdWlyZWQgZHVlIHRvIHRoZSBgdGRwX2VuYWJsZWRgIGNoZWNrLCB3aGljaCBzZWVtcyB0byByZXF1aXJlIHRoZSA2NC1iaXQgYXJjaGl0ZWN0dXJlLiBTbywgcHJpbWFyaWx5LCBgS1ZNYCBpcyB3aGF0IHdlIG5lZWQgdG8gZm9jdXMgb24uCgpJIGNoZWNrZWQgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSSBjb25maXJtZWQgdGhhdCBgdGRwX2VuYWJsZWRgIGlzIHJlcXVpcmVkLCB3aGljaCBpcyB0cnVlIGJ5IGRlZmF1bHQgZm9yIEludGVsIEVQVCBhbmQgQU1EIE5QVC4gVGhpcyBjb25maXJtcyB0aGUgaW1wb3J0YW5jZSBvZiBLVk0gYmVpbmcgZW5hYmxlZC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBjb2RlIGZsb3cuIEkgd2FudCB0byBoaWdobGlnaHQgc29tZSBrZXkgc3ltYm9scyB0aGF0IHJldmVhbCBob3cgdGhpcyBuZXcgdHJhY2tpbmcgd29ya3MuIEkgZmlndXJlZCBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBhbmQgYGt2bV90ZHBfbW11X21hcGAgYXJlIHJlbGV2YW50IGVudHJ5IHBvaW50cy4gSSYjMzk7bSBmb2N1c2luZyBvbiBga3ZtX3RkcF9tbXVfbWFwYCBiZWNhdXNlIGl0JiMzOTtzIHdoZXJlIHRoZSBURFAgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcgb2NjdXJzIGFuZCB3aGVyZSB3ZSYjMzk7bGwgZmluZCB0aGUgbG9naWMgZm9yIHNldHRpbmcgdGhlIGV2ZXItbWFwcGVkIGJpdHMuCgpJIGNvbmZpcm1lZCB0aGF0IGBrdm1fdGRwX21tdV9tYXBgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBURFAgTU1VIHBhZ2UgZmF1bHRzIGluIGBhcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY2AuIEkgY2hlY2tlZCBmb3Igb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzYCwgYnV0IGBrdm1fdGRwX21tdV9tYXBgIGlzIHRoZSBjcnVjaWFsIG9uZSBiZWNhdXNlIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIG5ldyBTUFRFcywgd2hpY2ggdGhlbiB0cmlnZ2VycyB0aGUgZXZlci1tYXBwZWQgdHJhY2tpbmcgbG9naWMuCgpSZXZpc2l0aW5nIHRoZSBmb2N1cyBzeW1ib2xzOiBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBhbmQgZXNwZWNpYWxseSBga3ZtX3RkcF9tbXVfbWFwYC4KClRoZSByZWFzb25pbmcgaXMgc29saWQ6IFRoZSBuZXcgS1ZNIGNhcGFiaWxpdHkgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCBpdHMgY29ycmVzcG9uZGluZyBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgIGlvY3RsIGFsbG93IHVzIHRvIHRyYWNrIGd1ZXN0IHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hcHBlZC4gVGhpcyBpcyBhY2Nlc3NlZCB0aHJvdWdoIEtWTSBpb2N0bHMsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgdXNlci1zcGFjZS1hY2Nlc3NpYmxlIGZlYXR1cmUuIFRoZSBwYXRjaCByZXF1aXJlcyBib3RoIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19YODZfNjRgLCB3aXRoIEtWTSBiZWluZyB0aGUgY3JpdGljYWwgb25lLiBUaGUgY29yZSBvZiB0aGlzIHRyYWNraW5nIG9jY3VycyB3aXRoaW4gdGhlIGlvY3RsIGVudHJ5IHBvaW50cyBhbmQgdGhlIFREUCBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBga3ZtX3RkcF9tbXVfbWFwYC4gWWVzLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHBhZ2UgZmF1bHRzIGFuZCBTUFRFIGNyZWF0aW9uLiBMb29raW5nIGF0IHRoZSBjb2RlOgoKYGBgYwoJaWYgKHVubGlrZWx5KGt2bS0mZ3Q7YXJjaC5ldmVyX21hcHBlZF9iaXRtYXApICZhbXA7JmFtcDsKCSAgICBpc19sZWFmICZhbXA7JmFtcDsgIXdhc19sZWFmKSB7CgkJa3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZShrdm0sIGdmbiwgS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpOwoJfQpgYGAKClRoaXMgc25pcHBldCBpbnNpZGUgYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAgaXMgd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBmb3IsIGNvbmZpcm1pbmcgdGhhdCBga3ZtX3RkcF9tbXVfbWFwYCBpcyB0aGUgcmlnaHQgcGxhY2UuClNwZWNpZmljYWxseSwgYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAgaXMgY2FsbGVkIGJ5IGB0ZHBfbW11X3NldF9zcHRlX2F0b21pY2AsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGJ5IGBrdm1fdGRwX21tdV9tYXBgLiBUaGlzIGNvbmZpcm1zIHdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2shIFRpbWUgdG8gcnVuIHRoZSB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAmIzM0OywKICAgICYjMzQ7a3ZtX3RkcF9tbXVfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGNhcGFiaWxpdHkgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCBhIG5ldyBpb2N0bCBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgIHRvIHRyYWNrIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfS1ZNYCBhbmQgaXMgc3BlY2lmaWMgdG8geDg2LiBXZSBmb2N1cyBvbiB0aGUgaW9jdGwgZW50cnkgcG9pbnRzIGFuZCB0aGUgVERQIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgd2hlcmUgdGhlIHRyYWNraW5nIGlzIHVwZGF0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9lbmFibGVfY2FwJiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBjYXBhYmlsaXR5IGBLVk1fQ0FQX0VWRVJfTUFQUEVEYCBhbmQgYSBuZXcgaW9jdGwgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYCB0byB0cmFjayB3aGljaCBndWVzdCBwYWdlcyBoYXZlIGV2ZXIgYmVlbiBtYXBwZWQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0tWTWAgYW5kIGlzIHNwZWNpZmljIHRvIHg4Ni4gV2UgZm9jdXMgb24gdGhlIGlvY3RsIGVudHJ5IHBvaW50cyBhbmQgdGhlIFREUCBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZXJlIHRoZSB0cmFja2luZyBpcyB1cGRhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MTg6MTkuNDk4Njk4MTE4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NDM4NDE5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV92bV9pb2N0bF9lbmFibGVfY2FwXCIsXG4gICAgXCJrdm1fdGRwX21tdV9tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBjYXBhYmlsaXR5IGBLVk1fQ0FQX0VWRVJfTUFQUEVEYCBhbmQgYSBuZXcgaW9jdGwgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYCB0byB0cmFjayB3aGljaCBndWVzdCBwYWdlcyBoYXZlIGV2ZXIgYmVlbiBtYXBwZWQuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0tWTWAgYW5kIGlzIHNwZWNpZmljIHRvIHg4Ni4gV2UgZm9jdXMgb24gdGhlIGlvY3RsIGVudHJ5IHBvaW50cyBhbmQgdGhlIFREUCBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZXJlIHRoZSB0cmFja2luZyBpcyB1cGRhdGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODoxOS40OTg3MDQ4NDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTQ3NjA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAxMzQ1YWVkNDFjMTI0Y2ViNDkxYTVhYzQ3OGRlODc2MGU0MDgzMzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxNjoxODoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5pbmRleCBhNWY5ZWU5MmY0M2U4Li5jZTZlMWQxNWQ0OGQ1IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbkBAIC02NTY2LDYgKzY1NjYsNTMgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRVxcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XFxuICAgc3BlY2lmaWVkIGluIGBga2V5YGAsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaW4gYGBrZXlgYC5cXG4gXFxuKzQuMTQ1IEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9FVkVSX01BUFBFRFxcbis6QXJjaGl0ZWN0dXJlczogeDg2XFxuKzpUeXBlOiB2bSBpb2N0bFxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2dcXG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgLUVSUk5PIG9uIGVycm9yXFxuK1xcbitFcnJvcnM6XFxuK1xcbisgID09PT09PSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAgRU5PRU5UICAgICBLVk1fQ0FQX0VWRVJfTUFQUEVEIGhhcyBub3QgYmVlbiBlbmFibGVkIGZvciB0aGlzIFZNXFxuKyAgRUlOVkFMICAgICBgYGdyYW51bGVfc2hpZnRgYCBpcyBiZWxvdyAyMSAoaW50ZXJuYWwgdHJhY2tpbmcgZ3JhbnVsYXJpdHkpIG9yXFxuKyAgICAgICAgICAgICBhYm92ZSA2M1xcbisgIEVJTlZBTCAgICAgYGBmaXJzdF9ncmFudWxlYGAgKyBgYG51bV9ncmFudWxlc2BgIGV4dGVuZGVuZHMgYmV5b25kIHRoZSBtYXhncGFcXG4rICAgICAgICAgICAgIHNldCB1cCB3aGVuIEtWTV9DQVBfRVZFUl9NQVBQRUQgd2FzIGVuYWJsZWRcXG4rICBFSU5WQUwgICAgIGBgZmxhZ3NgYCBpcyBub3QgMFxcbisgIEVGQVVMVCAgICAgY29weV97ZnJvbSx0b31fdXNlciBvZiBgYGJpdG1hcGBgIGZhaWxlZCwgZS5nLiwgYml0bWFwIHdhc24ndFxcbisgICAgICAgICAgICAgc3VmZmljaWVudGx5IHNpemVkXFxuKyAgRU5PTUVNICAgICBzZXR0aW5nIHVwIHRlbXBvcmFyeSBiaXRtYXAgZm9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGZhaWxlZFxcbisgID09PT09PSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitUaGlzIHJlcXVpcmVzIEtWTV9DQVBfRVZFUl9NQVBQRUQgdG8gaGF2ZSBiZWVuIGVuYWJsZWQgZm9yIHRoZSBWTSB3aXRoIGEgbWF4Z3BhXFxuK3BhcmFtZXRlci5cXG4rXFxuKzo6XFxuK1xcbisgIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIHtcXG4rXFx0X191NjQgZmlyc3RfZ3JhbnVsZTtcXG4rXFx0X191NjQgbnVtX2dyYW51bGVzO1xcbitcXHRfX3UzMiBncmFudWxlX3NoaWZ0O1xcbitcXHRfX3UzMiBmbGFncztcXG4rXFx0dW5pb24ge1xcbitcXHRcXHR2b2lkIF9fdXNlciAqYml0bWFwO1xcbitcXHRcXHRfX3U2NCBwYWRkaW5nO1xcbitcXHR9O1xcbitcXHRfX3U2NCByZXNlcnZlZFs0XTtcXG4rICB9O1xcbitcXG4rYGBmaXJzdF9ncmFudWxlYGAsIGBgbnVtX2dyYW51bGVzYGAsIGFuZCBgYGdyYW51bGVfc2hpZnRgYCBlbmNvZGUgdGhlIEdQQSByYW5nZVxcbit0aGUgY2FsbGVyIGlucXVpcmVzIGFib3V0LiBGb3IgZXhhbXBsZSwgdmFsdWVzIG9mIDIsIDI1LCBhbmQgMjEsIHJlc3BlY3RpdmVseSxcXG4raW5xdWlyZSBhYm91dCB0aGUgYWRkcmVzcyByYW5nZSBbNE1CLCA1NE1CKS4gVGhlIGNhbGxlciBwcm92aWRlcyBhIGBgYml0bWFwYGBcXG4rb2YgdGhlIHJlcXVpcmVkIGxlbmd0aCAoaW4gdGhlIGFib3ZlIGNhc2UgNCBieXRlcykuIFRoZSBjYWxsIHdpbGwgd3JpdGUgYSAxIGlmXFxuK2FueSBtZW1vcnkgaW4gdGhlIGdyYW51bGUgaGFzIGJlZW4gbWFwcGVkIGF0IHNvbWUgcG9pbnQgc2luY2VcXG4rS1ZNX0NBUF9FVkVSX01BUFBFRCB3YXMgZW5hYmxlZCwgMCBpZiBub3QuXFxuK1xcbiAuLiBfa3ZtX3J1bjpcXG4gXFxuIDUuIFRoZSBrdm1fcnVuIHN0cnVjdHVyZVxcbkBAIC04OTQ5LDYgKzg5OTYsMjYgQEAgZW5hYmxlZCwgY21tYSBjYW4ndCBiZSBlbmFibGVkIGFueW1vcmUgYW5kIHBmbWZpIGFuZCB0aGUgc3RvcmFnZSBrZXlcXG4gaW50ZXJwcmV0YXRpb24gYXJlIGRpc2FibGVkLiBJZiBjbW1hIGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZCBvciB0aGVcXG4gaHBhZ2VfMmcgbW9kdWxlIHBhcmFtZXRlciBpcyBub3Qgc2V0IHRvIDEsIC1FSU5WQUwgaXMgcmV0dXJuZWQuXFxuIFxcbis3LjQ4IEtWTV9DQVBfRVZFUl9NQVBQRURcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbis6QXJjaGl0ZWN0dXJlczogeDg2XFxuKzpQYXJhbWV0ZXJzOiBhcmdzWzBdIC0gbWF4aW11bSBHUEEgdG8gdHJhY2sgbWFwcGVkIG1lbW9yeVxcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBURFAgaXMgbm90IGF2YWlsYWJsZSwgLUVJTlZBTCBpZiBhcmdzWzBdXFxuKyAgICAgICAgICBpcyAwIG9yIGJleW9uZCB0aGUgbWF4aW11bSBwb3NzaWJsZSBHUEEsIC1FTk9NRU0gaWYgdHJhY2tpbmcgc2V0dXBcXG4rICAgICAgICAgIGZhaWxlZCwgLUVFWElTVCBpZiBhbHJlYWR5IHNldCB1cC5cXG4rXFxuK1RoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgS1ZNIGNhbiB0cmFjayBpZiBwYWdlcyBoYXZlIGV2ZXJcXG4rYmVlbiBtYXBwZWQgYnkgdGhlIGd1ZXN0LiBUaGlzIGFsbG93cyBhIGNvbnNlcnZhdGl2ZSBlc3RpbWF0ZSBvZiB3aGljaCBwYWdlc1xcbithcmUgbm90IHplcm8gYW55IG1vcmUuXFxuK1xcbitPbiBlbmFibGluZyB0aGUgY2FwYWJpbGl0eSwgdGhlIGNhbGxlciBwcm92aWRlcyBhIG1heCBHUEEgdmFsdWUuIEtWTSB3aWxsIHRoZW5cXG4rdHJhY2sgR1BBcyBiZXR3ZWVuIDAgYW5kIHRoaXMgdmFsdWUuIE5vdGUgdGhhdCB0aGlzIGNhcGFiaWxpdHkgY2FuIGJlIGVuYWJsZWRcXG4rYXQgYW55IHRpbWUsIGJ1dCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBlbmFibGUgaXQgYmVmb3JlIHZDUFVzIHN0YXJ0XFxuK3J1bm5pbmcuIEFueSBwYWdlIGFjY2Vzc2VzIGJ5IHRoZSBndWVzdCBiZWZvcmUgY2FwYWJpbGl0eSBlbmFibGVtZW50IHdpbGwgbm90XFxuK2JlIHRyYWNrZWQuIFRoZSBtYXggR1BBIHZhbHVlIGNhbiBvbmx5IGJlIHNldCBvbmNlOyBzdWJzZXF1ZW50IGF0dGVtcHRzIHRvXFxuK2VuYWJsZSB0aGUgY2FwYWJpbGl0eSB3aXRoIGEgZGlmZmVyZW50IG9yIGV2ZW4gc2FtZSB2YWx1ZSB3aWxsIGZhaWwuXFxuK1xcbiA4LiBPdGhlciBjYXBhYmlsaXRpZXMuXFxuID09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggYjUxNzI1N2E2MzE1My4uYzYwN2E5MTkzZjQwMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xNTMzLDYgKzE1MzMsMTUgQEAgc3RydWN0IGt2bV9hcmNoIHtcXG4gXFx0ICovXFxuIFxcdGJvb2wgc2hhZG93X3Jvb3RfYWxsb2NhdGVkO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVHJhY2tzIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBhbGxvd3NcXG4rXFx0ICogdHJhY2tpbmcgd2hpY2ggbWVtb3J5IGlzIGd1YXJhbnRlZWQgdG8gc3RpbGwgYmUgemVybywgZS5nLiwgZm9yXFxuK1xcdCAqIHN1cHBvcnRpbmcgdGhlIEh2RXh0Q2FsbEdldEJvb3RaZXJvZWRNZW1vcnkgZW5saWdodGVubWVudC5cXG4rXFx0ICogVGhlIGdyYW51bGFyaXR5IGlzIGRlZmluZWQgYnkgS1ZNX0VWRVJfTUFQUEVEX1NISUZULlxcbitcXHQgKi9cXG4rXFx0dW5zaWduZWQgbG9uZyAqZXZlcl9tYXBwZWRfYml0bWFwO1xcbitcXHR1NjQgZXZlcl9tYXBwZWRfbWF4X2dwYTtcXG4rXFxuICNpZmRlZiBDT05GSUdfS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuIFxcdC8qXFxuIFxcdCAqIElmIHNldCwgdGhlIFZNIGhhcyAob3IgaGFkKSBhbiBleHRlcm5hbCB3cml0ZSB0cmFja2luZyB1c2VyLCBhbmRcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oIGIvYXJjaC94ODYva3ZtL21tdS9ldmVyX21hcHBlZC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNzk1MzM3ZTY4NDg2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvZXZlcl9tYXBwZWQuaFxcbkBAIC0wLDAgKzEsMzMgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfX0tWTV9YODZfRVZFUl9NQVBQRURfSFxcbisjZGVmaW5lIF9fS1ZNX1g4Nl9FVkVSX01BUFBFRF9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4rXFxuKy8qXFxuKyAqIFRyYWNrIGlmIHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZCBhdCBhbiBpbnRlcm5hbCBncmFudWxhcml0eSBvZiAyIE1CLlxcbisgKi9cXG4rI2RlZmluZSBLVk1fRVZFUl9NQVBQRURfU0hJRlQgMjFcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZXZlcl9tYXBwZWRfc2V0X3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHU2NCBucGFnZXMpXFxuK3tcXG4rXFx0Y29uc3QgdW5zaWduZWQgaW50IHNoaWZ0ID0gS1ZNX0VWRVJfTUFQUEVEX1NISUZUIC0gUEFHRV9TSElGVDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGdmbiBcXHUwMDNlXFx1MDAzZSBzaGlmdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBlbmQgPSAoZ2ZuICsgbnBhZ2VzICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgLSAxKSBcXHUwMDNlXFx1MDAzZSBzaGlmdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0ZW5kID0gbWluKGVuZCwga3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX21heF9ncGEgXFx1MDAzZVxcdTAwM2UgS1ZNX0VWRVJfTUFQUEVEX1NISUZUKTtcXG4rXFx0Zm9yIChpID0gc3RhcnQ7IGkgXFx1MDAzYyBlbmQ7IGkrKykge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiByZS1tYXBwaW5nIHphcHBlZCBwYWdlcyBhbmQgYnJlYWtpbmcgdXAgb2YgaHVnZSBwYWdlcyBjYW5cXG4rXFx0XFx0ICogdHJpZ2dlciBhIG51bWJlciBvZiBzZXRzIG9uIGFscmVhZHkgc2V0IGJpdHMsIHNvIHRlc3QgZmlyc3RcXG4rXFx0XFx0ICogYmVmb3JlIGF0b21pYy1zZXQuIFNpbmNlIGJpdHMgY2FuIG5ldmVyIGJlIHVuc2V0IGFnYWluLCB0aGlzXFxuK1xcdFxcdCAqIGlzIHNhZmUgYWdhaW5zdCByYWNlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghdGVzdF9iaXQoaSwga3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCkpXFxuK1xcdFxcdFxcdHNldF9iaXQoaSwga3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rI2VuZGlmIC8qIF9fS1ZNX1g4Nl9FVkVSX01BUFBFRF9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcXG5pbmRleCBjZTNmMmVmYWRiMDViLi5lYTJhMzdhMDRiMmZmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcXG5AQCAtMSw2ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiBcXG4rI2luY2x1ZGUgXFxcImV2ZXJfbWFwcGVkLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtbXUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm1tdV9pbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibW11dHJhY2UuaFxcXCJcXG5AQCAtNTU0LDYgKzU1NSwxNyBAQCBzdGF0aWMgaW50IF9faGFuZGxlX2NoYW5nZWRfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogV2hlbmV2ZXIgYSBwYWdlIGJlY29tZXMgYSBmcmVzaCBsZWFmLCBtYXJrIHRoZSBtZW1vcnkgYXMgbWFwcGVkLlxcbitcXHQgKiBPbiBodWdlcGFnZSBicmVha3VwLCB0aGlzIHRyaWdnZXJzIGZvciBlYWNoIG5ldyBsb3dlci1sZXZlbCBwYWdlLFxcbitcXHQgKiBldmVuIHRob3VnaCB0aGUgbWVtb3J5IHdhcyBhbHJlYWR5IG1hcmtlZCB3aGVuIHRoZSBodWdlcGFnZSB3YXNcXG4rXFx0ICogbWFwcGVkLCBidXQgdGhlIG92ZXJoZWFkIGlzIG5lZ2xpZ2libGUuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkoa3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGlzX2xlYWYgXFx1MDAyNlxcdTAwMjYgIXdhc19sZWFmKSB7XFxuK1xcdFxcdGt2bV9ldmVyX21hcHBlZF9zZXRfcmFuZ2Uoa3ZtLCBnZm4sIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKTtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogUmVjdXJzaXZlbHkgaGFuZGxlIGNoaWxkIFBUcyBpZiB0aGUgY2hhbmdlIHJlbW92ZWQgYSBzdWJ0cmVlIGZyb21cXG4gXFx0ICogdGhlIHBhZ2luZyBzdHJ1Y3R1cmUuICBOb3RlIHRoZSBXQVJOIG9uIHRoZSBQRk4gY2hhbmdpbmcgd2l0aG91dCB0aGVcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggMDYyNmU4MzVlOWViNy4uODljYmNmODM5OWY0OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMjUsNiArMjUsNyBAQFxcbiAjaW5jbHVkZSBcXFwidHNzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJyZWdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrdm1fZW11bGF0ZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwibW11L2V2ZXJfbWFwcGVkLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtbXUvcGFnZV90cmFjay5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieDg2LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJjcHVpZC5oXFxcIlxcbkBAIC0yMzkxLDYgKzIzOTIsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbiBcXHRjYXNlIEtWTV9DQVBfUkVBRE9OTFlfTUVNOlxcbiBcXHRcXHRyID0ga3ZtID8ga3ZtX2FyY2hfaGFzX3JlYWRvbmx5X21lbShrdm0pIDogMTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgS1ZNX0NBUF9FVkVSX01BUFBFRDpcXG4rXFx0XFx0ciA9ICh0ZHBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19YODZfNjQpKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQxOTAsNiArNDE5NCwzNiBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcdGNhc2UgS1ZNX0NBUF9FVkVSX01BUFBFRDoge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nICptYXBwZWRfYml0bWFwO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIG51bV9ncmFudWxlcztcXG4rXFxuK1xcdFxcdHIgPSAwO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRcXHRpZiAoIXRkcF9lbmFibGVkKSB7XFxuK1xcdFxcdFxcdHIgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0fSBlbHNlIGlmIChrdm0tXFx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwKSB7XFxuK1xcdFxcdFxcdHIgPSAtRUVYSVNUO1xcbitcXHRcXHR9IGVsc2UgaWYgKGNhcC1cXHUwMDNlYXJnc1swXSA9PSAwIHx8XFxuK1xcdFxcdFxcdCAgIGNhcC1cXHUwMDNlYXJnc1swXSBcXHUwMDNlICgxVUxMIFxcdTAwM2NcXHUwMDNjIGt2bV9ob3N0Lm1heHBoeWFkZHIpKSB7XFxuK1xcdFxcdFxcdHIgPSAtRUlOVkFMO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRudW1fZ3JhbnVsZXMgPSBESVZfUk9VTkRfVVAoY2FwLVxcdTAwM2VhcmdzWzBdLCAxVUxMIFxcdTAwM2NcXHUwMDNjIEtWTV9FVkVSX01BUFBFRF9TSElGVCk7XFxuK1xcdFxcdFxcdG1hcHBlZF9iaXRtYXAgPVxcbitcXHRcXHRcXHRcXHRrdmNhbGxvYyhCSVRTX1RPX0xPTkdTKG51bV9ncmFudWxlcyksXFxuK1xcdFxcdFxcdFxcdFxcdCBzaXplb2YobG9uZyksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdFxcdFxcdGlmICghbWFwcGVkX2JpdG1hcClcXG4rXFx0XFx0XFx0XFx0ciA9IC1FTk9NRU07XFxuK1xcdFxcdFxcdGVsc2Uge1xcbitcXHRcXHRcXHRcXHR3cml0ZV9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4rXFx0XFx0XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCA9IG1hcHBlZF9iaXRtYXA7XFxuK1xcdFxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9tYXhfZ3BhID0gbnVtX2dyYW51bGVzIFxcdTAwM2NcXHUwMDNjIEtWTV9FVkVSX01BUFBFRF9TSElGVDtcXG4rXFx0XFx0XFx0XFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0ciA9IC1FSU5WQUw7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC00MTk3LDYgKzQyMzEsNzMgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIHI7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2coc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgKmxvZylcXG4re1xcbitcXHR1NjQgbWF4X2dyYW51bGVzO1xcbitcXHR1bnNpZ25lZCBpbnQgY29hcnNlbmVzcztcXG4rXFx0dW5zaWduZWQgbG9uZyAqYml0bWFwO1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcClcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRpZiAobG9nLVxcdTAwM2VmbGFncylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAobG9nLVxcdTAwM2VncmFudWxlX3NoaWZ0IFxcdTAwM2MgS1ZNX0VWRVJfTUFQUEVEX1NISUZUIHx8IGxvZy1cXHUwMDNlZ3JhbnVsZV9zaGlmdCBcXHUwMDNlPSA2NClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtYXhfZ3JhbnVsZXMgPSBrdm0tXFx1MDAzZWFyY2guZXZlcl9tYXBwZWRfbWF4X2dwYSBcXHUwMDNlXFx1MDAzZSBsb2ctXFx1MDAzZWdyYW51bGVfc2hpZnQ7XFxuK1xcdGlmIChsb2ctXFx1MDAzZW51bV9ncmFudWxlcyBcXHUwMDNlIG1heF9ncmFudWxlcyB8fFxcbitcXHQgICAgbG9nLVxcdTAwM2VmaXJzdF9ncmFudWxlIFxcdTAwM2UgbWF4X2dyYW51bGVzIC0gbG9nLVxcdTAwM2VudW1fZ3JhbnVsZXMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSByZXF1ZXN0IHVzZXMgdGhlIHNhbWUgZ3JhbnVsYXJpdHkgYXMgb3VyIGludGVybmFsXFxuK1xcdCAqIHRyYWNraW5nLCBhbmQgd2UgYXJlIGJ5dGUtYWxpZ25lZCAodGhlIGV4cGVjdGVkIGNvbW1vbiBjYXNlKSwgd2UgY2FuXFxuK1xcdCAqIGp1c3QgY29weV90b191c2VyLiBPdGhlcndpc2UsIHdlIGhhdmUgdG8gY3JlYXRlIGEgbmV3IGJpdG1hcCB0byBwYXNzLlxcbitcXHQgKlxcbitcXHQgKiBXZSBkbyBub3QgbG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgdkNQVXMgbWFwcGluZyBuZXcgbWVtb3J5IG9uIGFueSBvZlxcbitcXHQgKiB0aGVzZSBvcGVyYXRpb25zLiBCaXRzIGFyZSBzZXQgYXRvbWljYWxseSBhbmQgbmV2ZXIgY2xlYXJlZCwgc28gYW55IHJhY2VcXG4rXFx0ICogaGVyZSBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgd3JpdGUgaGFwcGVuaW5nIGFmdGVyIHRoaXMgaGFuZGxlclxcbitcXHQgKiBmaW5pc2hlcyBidXQgYmVmb3JlIHRoZSBjYWxsZXIgcmVhZHMgdGhlIHJlc3VsdHMuXFxuK1xcdCAqL1xcbitcXHRjb2Fyc2VuZXNzID0gbG9nLVxcdTAwM2VncmFudWxlX3NoaWZ0IC0gS1ZNX0VWRVJfTUFQUEVEX1NISUZUO1xcbitcXHRpZiAoY29hcnNlbmVzcyA9PSAwIFxcdTAwMjZcXHUwMDI2ICEobG9nLVxcdTAwM2VmaXJzdF9ncmFudWxlIFxcdTAwMjYgNykgXFx1MDAyNlxcdTAwMjYgIShsb2ctXFx1MDAzZW51bV9ncmFudWxlcyBcXHUwMDI2IDcpKSB7XFxuK1xcdFxcdGlmIChjb3B5X3RvX3VzZXIobG9nLVxcdTAwM2ViaXRtYXAsXFxuK1xcdFxcdFxcdFxcdCAodTggKilrdm0tXFx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwICsgbG9nLVxcdTAwM2VmaXJzdF9ncmFudWxlIC8gOCxcXG4rXFx0XFx0XFx0XFx0IGxvZy1cXHUwMDNlbnVtX2dyYW51bGVzIC8gOCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0Yml0bWFwID0ga3Z6YWxsb2MoRElWX1JPVU5EX1VQKGxvZy1cXHUwMDNlbnVtX2dyYW51bGVzLCA4KSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0aWYgKCFiaXRtYXApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yICh1NjQgZ3JhbiA9IGxvZy1cXHUwMDNlZmlyc3RfZ3JhbnVsZTtcXG4rXFx0ICAgICBncmFuIFxcdTAwM2MgbG9nLVxcdTAwM2VmaXJzdF9ncmFudWxlICsgbG9nLVxcdTAwM2VudW1fZ3JhbnVsZXM7XFxuK1xcdCAgICAgZ3JhbisrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBncmFuIFxcdTAwM2NcXHUwMDNjIGNvYXJzZW5lc3M7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIGNvYXJzZW5lc3MpO1xcbitcXG4rXFx0XFx0aWYgKGZpbmRfbmV4dF9iaXQoa3ZtLVxcdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCwgZW5kLCBzdGFydCkgXFx1MDAzYyBlbmQpXFxuK1xcdFxcdFxcdF9fc2V0X2JpdChncmFuIC0gbG9nLVxcdTAwM2VmaXJzdF9ncmFudWxlLCBiaXRtYXApO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY29weV90b191c2VyKGxvZy1cXHUwMDNlYml0bWFwLCBiaXRtYXAsIERJVl9ST1VORF9VUChsb2ctXFx1MDAzZW51bV9ncmFudWxlcywgOCkpKSB7XFxuK1xcdFxcdHIgPSAtRUZBVUxUO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHRyID0gMDtcXG4rXFxuK291dF9mcmVlOlxcbitcXHRrdmZyZWUoYml0bWFwKTtcXG4rXFx0cmV0dXJuIHI7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfS1ZNX0NPTVBBVFxcbiAvKiBmb3IgS1ZNX1g4Nl9TRVRfTVNSX0ZJTFRFUiAqL1xcbiBzdHJ1Y3Qga3ZtX21zcl9maWx0ZXJfcmFuZ2VfY29tcGF0IHtcXG5AQCAtNDcxMCw2ICs0ODExLDE1IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0ciA9IGt2bV92bV9pb2N0bF9zZXRfbXNyX2ZpbHRlcihrdm0sIFxcdTAwMjZmaWx0ZXIpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRjYXNlIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HOiB7XFxuK1xcdFxcdHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIG1hcHBlZF9sb2c7XFxuK1xcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNm1hcHBlZF9sb2csIGFyZ3AsIHNpemVvZihtYXBwZWRfbG9nKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0XFx0ciA9IGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nKGt2bSwgXFx1MDAyNm1hcHBlZF9sb2cpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyID0gLUVOT1RUWTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5pbmRleCA0MTkwMTEwOTdmYThlLi5kMGJlOTQ5NDZhNzdjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxcbkBAIC05OTcsNiArOTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHtcXG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcXG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5XFxuKyNkZWZpbmUgS1ZNX0NBUF9FVkVSX01BUFBFRCAyNTBcXG4gXFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XFxuIFxcdF9fdTMyIGlycWNoaXA7XFxuQEAgLTE2NzAsNCArMTY3MSwxOCBAQCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xcbiBcXHRfX3U2NCBwYWRkaW5nWzVdO1xcbiB9O1xcbiBcXG4rI2RlZmluZSBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRyAgX0lPVyhLVk1JTywgIDB4ZDYsIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nKVxcbitcXG4rc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cge1xcbitcXHRfX3U2NCBmaXJzdF9ncmFudWxlO1xcbitcXHRfX3U2NCBudW1fZ3JhbnVsZXM7XFxuK1xcdF9fdTMyIGdyYW51bGVfc2hpZnQ7XFxuK1xcdF9fdTMyIGZsYWdzO1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHZvaWQgX191c2VyICpiaXRtYXA7XFxuK1xcdFxcdF9fdTY0IHBhZGRpbmc7XFxuK1xcdH07XFxuK1xcdF9fdTY0IHJlc2VydmVkWzRdO1xcbit9O1xcbitcXG4gI2VuZGlmIC8qIF9fTElOVVhfS1ZNX0ggKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5pbmRleCA0YWNlMTI2MDZlOTM3Li4xZWIwYmFjMTkyMGRjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuQEAgLTE2Miw2ICsxNjIsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBzdGVhbF90aW1lXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBzeXN0ZW1fY291bnRlcl9vZmZzZXRfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0XFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSBldmVyX21hcHBlZF90ZXN0XFxuIFxcbiAjIENvbXBpbGVkIG91dHB1dHMgdXNlZCBieSB0ZXN0IHRhcmdldHNcXG4gVEVTVF9HRU5fUFJPR1NfRVhURU5ERURfeDg2ICs9IHg4Ni9ueF9odWdlX3BhZ2VzX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2V2ZXJfbWFwcGVkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ldmVyX21hcHBlZF90ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc2NzIzZjBjOWVlMmNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2V2ZXJfbWFwcGVkX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMTkxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIEtWTSBldmVyLW1hcHBlZCBiaXRtYXAgdGVzdFxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIE51dGFuaXgsIEluYy5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF91dGlsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nrdm1fdXRpbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcHJvY2Vzc29yLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIEtpQiAxMDI0dVxcbisjZGVmaW5lIE1pQiAoMTAyNCAqIEtpQilcXG4rXFxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodWludDY0X3QgYmFzZV9ncGEsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0R1VFU1RfRE9ORSgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhc3NlcnRfYml0bWFwc19lcXVhbCh1OCBleHBlY3RlZFtdLCB1OCBhY3R1YWxbXSwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKSB7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKGV4cGVjdGVkW2ldID09IGFjdHVhbFtpXSxcXG4rXFx0XFx0XFx0ICAgIFxcXCJieXRlICVsZCwgZXhwZWN0ZWQgMHglMDJ4LCBnb3QgMHglMDJ4XFxcIixcXG4rXFx0XFx0XFx0ICAgIGksIGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0pO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHByZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzdGFydCwgdTY0IGxlbilcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgcmFuZ2UgPSB7XFxuK1xcdFxcdC5ncGEgPSBzdGFydCxcXG4rXFx0XFx0LnNpemUgPSBsZW4sXFxuK1xcdFxcdC5mbGFncyA9IDAsXFxuK1xcdH07XFxuK1xcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX1BSRV9GQVVMVF9NRU1PUlksIFxcdTAwMjZyYW5nZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfb25lX3BhZ2Uodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgcmFuZ2UgPSB7XFxuK1xcdFxcdC5ncGEgPSAweDAsXFxuK1xcdFxcdC5zaXplID0gUEFHRV9TSVpFLFxcbitcXHRcXHQuZmxhZ3MgPSAwLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBjaGFyIG1hcHBlZF9iaXRtYXA7XFxuK1xcdHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIGxvZyA9IHtcXG4rXFx0XFx0LmZpcnN0X2dyYW51bGUgPSAwLFxcbitcXHRcXHQubnVtX2dyYW51bGVzID0gMSxcXG4rXFx0XFx0LmdyYW51bGVfc2hpZnQgPSAyMSxcXG4rXFx0XFx0LmZsYWdzID0gMCxcXG4rXFx0XFx0LmJpdG1hcCA9IFxcdTAwMjZtYXBwZWRfYml0bWFwLFxcbitcXHR9O1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuK1xcbitcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBQQUdFX1NJWkUpO1xcbitcXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCBcXHUwMDI2cmFuZ2UpO1xcbitcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcXHUwMDI2bG9nKTtcXG4rXFx0VEVTVF9BU1NFUlQobWFwcGVkX2JpdG1hcCA9PSAweDEsIFxcXCJleHBlY3RlZCAweDEsIGdvdCAweCV4XFxcIiwgbWFwcGVkX2JpdG1hcCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFkZCA2NE1CIG9yIG1lbW9yeSBhdCBHUEEgMTZNQiAoIC0tXFx1MDAzZSBbMTZNQiwgODBNQikgKSxcXG4rICogcHJlLWZhdWx0IFsxNk1CLCA0OE1CKSwgcmVxdWVzdCBhbmQgY2hlY2sgYml0bWFwIGZvciBbMTZNQiwgODBNQikuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0X29uZV9ibG9jayh2b2lkKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IG1hcF9zdGFydCA9IDB4MTAwMDAwMDtcXG4rXFx0Y29uc3QgdWludDY0X3QgbWFwX2xlbiA9IDB4NDAwMDAwMDtcXG4rXFx0dTggbWFwcGVkX2JpdG1hcFs0XSA9IHsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9O1xcbitcXHR1OCBleHBlY3RlZF9iaXRtYXBbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAgfTtcXG4rXFx0c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0ge1xcbitcXHRcXHQuZmlyc3RfZ3JhbnVsZSA9IDB4OCxcXG4rXFx0XFx0Lm51bV9ncmFudWxlcyA9IDB4MjAsXFxuK1xcdFxcdC5ncmFudWxlX3NoaWZ0ID0gMjEsXFxuK1xcdFxcdC5mbGFncyA9IDAsXFxuK1xcdFxcdC5iaXRtYXAgPSBtYXBwZWRfYml0bWFwLFxcbitcXHR9O1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuK1xcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIG1hcF9zdGFydCwgMSwgbWFwX2xlbiAvIFBBR0VfU0laRSwgMCk7XFxuK1xcbitcXHRyZXQgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXFx1MDAyNmxvZyk7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTk9FTlQsXFxuK1xcdFxcdCAgICBcXFwiZXhwZWN0ZWQgRU5PRU5UIHdoZW4gcXVlcnlpbmcgZXZlci1tYXBwZWQgbG9nIGJlZm9yZSBlbmFibGVtZW50LCBnb3QgJWRcXFwiLFxcbitcXHRcXHQgICAgZXJybm8pO1xcbitcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBtYXBfc3RhcnQgKyBtYXBfbGVuKTtcXG4rXFx0cHJlX2ZhdWx0KHZjcHUsIDE2ICogTWlCLCAzMiAqIE1pQik7XFxuK1xcbitcXHRyZXQgPSBfX3ZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVZFUl9NQVBQRUQsIFBBR0VfU0laRSk7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXFxuK1xcdFxcdCAgICBcXFwiZXhwZWN0ZWQgRUVYSVNUIHdoZW4gZW5hYmxpbmcgS1ZNX0NBUF9FVkVSX01BUFBFRCB0d2ljZSwgZ290ICVkXFxcIixcXG4rXFx0XFx0ICAgIGVycm5vKTtcXG4rXFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXFx1MDAyNmxvZyk7XFxuK1xcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XFxuK1xcbitcXHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDIyO1xcbitcXHRsb2cuZmlyc3RfZ3JhbnVsZSA9IDB4NDtcXG4rXFx0bG9nLm51bV9ncmFudWxlcyA9IDB4MTA7XFxuK1xcdG1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XFxuK1xcdG1lbWNweShleHBlY3RlZF9iaXRtYXAsICh1OFtdKXsgMHhmZiwgMHgwMCwgMHhhNSwgMHhhNSB9LCA0KTtcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcXHUwMDI2bG9nKTtcXG4rXFx0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcXG4rXFxuK1xcdGxvZy5ncmFudWxlX3NoaWZ0ID0gMjM7XFxuK1xcdGxvZy5maXJzdF9ncmFudWxlID0gMHgyO1xcbitcXHRsb2cubnVtX2dyYW51bGVzID0gMHg4O1xcbitcXHRtZW1jcHkobWFwcGVkX2JpdG1hcCwgKHU4W10peyAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDQpO1xcbitcXHRtZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4MGYsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXFx1MDAyNmxvZyk7XFxuK1xcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XFxuK1xcbitcXHRsb2cubnVtX2dyYW51bGVzID0gMHhmZjtcXG4rXFx0cmV0ID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFxcdTAwMjZsb2cpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbitcXHRcXHQgICAgXFxcImV4cGVjdGVkIEVJTlZBTCB3aGVuIHF1ZXJ5aW5nIGJleW9uZCByYW5nZSwgZ290ICVkXFxcIixcXG4rXFx0XFx0ICAgIGVycm5vKTtcXG4rXFxuK1xcdGxvZy5udW1fZ3JhbnVsZXMgPSAweDEwO1xcbitcXHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDE7XFxuK1xcdHJldCA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcXHUwMDI2bG9nKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0IFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTCxcXG4rXFx0XFx0ICAgIFxcXCJleHBlY3RlZCBFSU5WQUwgd2l0aCB0b28gc21hbGwgZ3JuYXVsZSBzaGlmdCwgZ290ICVkXFxcIixcXG4rXFx0XFx0ICAgIGVycm5vKTtcXG4rfVxcbitcXG4rLypcXG4rICogQWRkIDEyOE1CIG9yIG1lbW9yeSBhdCBHUEEgMzJNQiAoIC0tXFx1MDAzZSBbMzJNQiwgMTYwTUIpICksXFxuKyAqIHByZS1mYXVsdCBbMzJNQiwgNjRNQiksIGFuZCBbOTBNQiwgOTRNQiksXFxuKyAqIHJlcXVlc3QgYW5kIGNoZWNrIGJpdG1hcCBmb3IgWzE2TUIsIDEyME1CKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHRlc3RfdHdvX2Jsb2Nrcyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IG1hcF9zdGFydCA9IDB4MjAwMDAwMDtcXG4rXFx0Y29uc3QgdWludDY0X3QgbWFwX2xlbiA9IDB4ODAwMDAwMDtcXG4rXFx0dTggbWFwcGVkX2JpdG1hcFs3XSA9IHsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9O1xcbitcXHR1OCBleHBlY3RlZF9iaXRtYXBbN10gPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAgfTtcXG4rXFx0c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0ge1xcbitcXHRcXHQuZmlyc3RfZ3JhbnVsZSA9IDB4OCxcXG4rXFx0XFx0Lm51bV9ncmFudWxlcyA9IDB4MzQsXFxuK1xcdFxcdC5ncmFudWxlX3NoaWZ0ID0gMjEsXFxuK1xcdFxcdC5mbGFncyA9IDAsXFxuK1xcdFxcdC5iaXRtYXAgPSBtYXBwZWRfYml0bWFwLFxcbitcXHR9O1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuK1xcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIG1hcF9zdGFydCwgMSwgbWFwX2xlbiAvIFBBR0VfU0laRSwgMCk7XFxuK1xcbitcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VWRVJfTUFQUEVELCBtYXBfc3RhcnQgKyBtYXBfbGVuKTtcXG4rXFx0cHJlX2ZhdWx0KHZjcHUsIDMyICogTWlCLCAzMiAqIE1pQik7XFxuK1xcdHByZV9mYXVsdCh2Y3B1LCA5MCAqIE1pQiwgNCAqIE1pQik7XFxuK1xcbitcXHR2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFxcdTAwMjZsb2cpO1xcbitcXHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xcbitcXG4rXFx0bG9nLmdyYW51bGVfc2hpZnQgPSAyMjtcXG4rXFx0bG9nLmZpcnN0X2dyYW51bGUgPSAweDQ7XFxuK1xcdGxvZy5udW1fZ3JhbnVsZXMgPSAweDFhO1xcbitcXHRtZW1jcHkobWFwcGVkX2JpdG1hcCwgKHU4W10peyAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1fSwgNyk7XFxuK1xcdG1lbWNweShleHBlY3RlZF9iaXRtYXAsICh1OFtdKXsgMHhmMCwgMHgwZiwgMHgwYywgMHgwMCwgMHhhNSwgMHhhNSwgMHhhNSB9LCA3KTtcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcXHUwMDI2bG9nKTtcXG4rXFx0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcXG4rXFxuK1xcdGxvZy5ncmFudWxlX3NoaWZ0ID0gMjM7XFxuK1xcdGxvZy5maXJzdF9ncmFudWxlID0gMHgyO1xcbitcXHRsb2cubnVtX2dyYW51bGVzID0gMHhkO1xcbitcXHRtZW1jcHkobWFwcGVkX2JpdG1hcCwgKHU4W10peyAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDcpO1xcbitcXHRtZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4M2MsIDB4MDIsIDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNyk7XFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXFx1MDAyNmxvZyk7XFxuK1xcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZKSk7XFxuK1xcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfRVZFUl9NQVBQRUQpKTtcXG4rXFxuK1xcdHRlc3Rfb25lX3BhZ2UoKTtcXG4rXFx0dGVzdF9vbmVfYmxvY2soKTtcXG4rXFx0dGVzdF90d29fYmxvY2tzKCk7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MTg6MjAuMDE1MTE1MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NjQyNzQxNTU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBcIixcbiAgICBcImt2bV90ZHBfbW11X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGNhcGFiaWxpdHkgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCBhIG5ldyBpb2N0bCBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgIHRvIHRyYWNrIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfS1ZNYCBhbmQgaXMgc3BlY2lmaWMgdG8geDg2LiBXZSBmb2N1cyBvbiB0aGUgaW9jdGwgZW50cnkgcG9pbnRzIGFuZCB0aGUgVERQIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgd2hlcmUgdGhlIHRyYWNraW5nIGlzIHVwZGF0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAxMzQ1YWVkNDFjMTI0Y2ViNDkxYTVhYzQ3OGRlODc2MGU0MDgzMzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE2OjE4OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5pbmRleCBhNWY5ZWU5MmY0M2U4Li5jZTZlMWQxNWQ0OGQ1IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbkBAIC02NTY2LDYgKzY1NjYsNTMgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRVxuICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXlcbiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuXG4gXG4rNC4xNDUgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0VWRVJfTUFQUEVEXG4rOkFyY2hpdGVjdHVyZXM6IHg4NlxuKzpUeXBlOiB2bSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZ1xuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvbiBlcnJvclxuK1xuK0Vycm9yczpcbitcbisgID09PT09PSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICBFTk9FTlQgICAgIEtWTV9DQVBfRVZFUl9NQVBQRUQgaGFzIG5vdCBiZWVuIGVuYWJsZWQgZm9yIHRoaXMgVk1cbisgIEVJTlZBTCAgICAgYGBncmFudWxlX3NoaWZ0YGAgaXMgYmVsb3cgMjEgKGludGVybmFsIHRyYWNraW5nIGdyYW51bGFyaXR5KSBvclxuKyAgICAgICAgICAgICBhYm92ZSA2M1xuKyAgRUlOVkFMICAgICBgYGZpcnN0X2dyYW51bGVgYCArIGBgbnVtX2dyYW51bGVzYGAgZXh0ZW5kZW5kcyBiZXlvbmQgdGhlIG1heGdwYVxuKyAgICAgICAgICAgICBzZXQgdXAgd2hlbiBLVk1fQ0FQX0VWRVJfTUFQUEVEIHdhcyBlbmFibGVkXG4rICBFSU5WQUwgICAgIGBgZmxhZ3NgYCBpcyBub3QgMFxuKyAgRUZBVUxUICAgICBjb3B5X3tmcm9tLHRvfV91c2VyIG9mIGBgYml0bWFwYGAgZmFpbGVkLCBlLmcuLCBiaXRtYXAgd2Fzbid0XG4rICAgICAgICAgICAgIHN1ZmZpY2llbnRseSBzaXplZFxuKyAgRU5PTUVNICAgICBzZXR0aW5nIHVwIHRlbXBvcmFyeSBiaXRtYXAgZm9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGZhaWxlZFxuKyAgPT09PT09ICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitUaGlzIHJlcXVpcmVzIEtWTV9DQVBfRVZFUl9NQVBQRUQgdG8gaGF2ZSBiZWVuIGVuYWJsZWQgZm9yIHRoZSBWTSB3aXRoIGEgbWF4Z3BhXG4rcGFyYW1ldGVyLlxuK1xuKzo6XG4rXG4rICBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyB7XG4rXHRfX3U2NCBmaXJzdF9ncmFudWxlO1xuK1x0X191NjQgbnVtX2dyYW51bGVzO1xuK1x0X191MzIgZ3JhbnVsZV9zaGlmdDtcbitcdF9fdTMyIGZsYWdzO1xuK1x0dW5pb24ge1xuK1x0XHR2b2lkIF9fdXNlciAqYml0bWFwO1xuK1x0XHRfX3U2NCBwYWRkaW5nO1xuK1x0fTtcbitcdF9fdTY0IHJlc2VydmVkWzRdO1xuKyAgfTtcbitcbitgYGZpcnN0X2dyYW51bGVgYCwgYGBudW1fZ3JhbnVsZXNgYCwgYW5kIGBgZ3JhbnVsZV9zaGlmdGBgIGVuY29kZSB0aGUgR1BBIHJhbmdlXG4rdGhlIGNhbGxlciBpbnF1aXJlcyBhYm91dC4gRm9yIGV4YW1wbGUsIHZhbHVlcyBvZiAyLCAyNSwgYW5kIDIxLCByZXNwZWN0aXZlbHksXG4raW5xdWlyZSBhYm91dCB0aGUgYWRkcmVzcyByYW5nZSBbNE1CLCA1NE1CKS4gVGhlIGNhbGxlciBwcm92aWRlcyBhIGBgYml0bWFwYGBcbitvZiB0aGUgcmVxdWlyZWQgbGVuZ3RoIChpbiB0aGUgYWJvdmUgY2FzZSA0IGJ5dGVzKS4gVGhlIGNhbGwgd2lsbCB3cml0ZSBhIDEgaWZcbithbnkgbWVtb3J5IGluIHRoZSBncmFudWxlIGhhcyBiZWVuIG1hcHBlZCBhdCBzb21lIHBvaW50IHNpbmNlXG4rS1ZNX0NBUF9FVkVSX01BUFBFRCB3YXMgZW5hYmxlZCwgMCBpZiBub3QuXG4rXG4gLi4gX2t2bV9ydW46XG4gXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXG5AQCAtODk0OSw2ICs4OTk2LDI2IEBAIGVuYWJsZWQsIGNtbWEgY2FuJ3QgYmUgZW5hYmxlZCBhbnltb3JlIGFuZCBwZm1maSBhbmQgdGhlIHN0b3JhZ2Uga2V5XG4gaW50ZXJwcmV0YXRpb24gYXJlIGRpc2FibGVkLiBJZiBjbW1hIGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZCBvciB0aGVcbiBocGFnZV8yZyBtb2R1bGUgcGFyYW1ldGVyIGlzIG5vdCBzZXQgdG8gMSwgLUVJTlZBTCBpcyByZXR1cm5lZC5cbiBcbis3LjQ4IEtWTV9DQVBfRVZFUl9NQVBQRURcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbis6QXJjaGl0ZWN0dXJlczogeDg2XG4rOlBhcmFtZXRlcnM6IGFyZ3NbMF0gLSBtYXhpbXVtIEdQQSB0byB0cmFjayBtYXBwZWQgbWVtb3J5XG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgVERQIGlzIG5vdCBhdmFpbGFibGUsIC1FSU5WQUwgaWYgYXJnc1swXVxuKyAgICAgICAgICBpcyAwIG9yIGJleW9uZCB0aGUgbWF4aW11bSBwb3NzaWJsZSBHUEEsIC1FTk9NRU0gaWYgdHJhY2tpbmcgc2V0dXBcbisgICAgICAgICAgZmFpbGVkLCAtRUVYSVNUIGlmIGFscmVhZHkgc2V0IHVwLlxuK1xuK1RoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgS1ZNIGNhbiB0cmFjayBpZiBwYWdlcyBoYXZlIGV2ZXJcbitiZWVuIG1hcHBlZCBieSB0aGUgZ3Vlc3QuIFRoaXMgYWxsb3dzIGEgY29uc2VydmF0aXZlIGVzdGltYXRlIG9mIHdoaWNoIHBhZ2VzXG4rYXJlIG5vdCB6ZXJvIGFueSBtb3JlLlxuK1xuK09uIGVuYWJsaW5nIHRoZSBjYXBhYmlsaXR5LCB0aGUgY2FsbGVyIHByb3ZpZGVzIGEgbWF4IEdQQSB2YWx1ZS4gS1ZNIHdpbGwgdGhlblxuK3RyYWNrIEdQQXMgYmV0d2VlbiAwIGFuZCB0aGlzIHZhbHVlLiBOb3RlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGNhbiBiZSBlbmFibGVkXG4rYXQgYW55IHRpbWUsIGJ1dCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBlbmFibGUgaXQgYmVmb3JlIHZDUFVzIHN0YXJ0XG4rcnVubmluZy4gQW55IHBhZ2UgYWNjZXNzZXMgYnkgdGhlIGd1ZXN0IGJlZm9yZSBjYXBhYmlsaXR5IGVuYWJsZW1lbnQgd2lsbCBub3RcbitiZSB0cmFja2VkLiBUaGUgbWF4IEdQQSB2YWx1ZSBjYW4gb25seSBiZSBzZXQgb25jZTsgc3Vic2VxdWVudCBhdHRlbXB0cyB0b1xuK2VuYWJsZSB0aGUgY2FwYWJpbGl0eSB3aXRoIGEgZGlmZmVyZW50IG9yIGV2ZW4gc2FtZSB2YWx1ZSB3aWxsIGZhaWwuXG4rXG4gOC4gT3RoZXIgY2FwYWJpbGl0aWVzLlxuID09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjUxNzI1N2E2MzE1My4uYzYwN2E5MTkzZjQwMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNTMzLDYgKzE1MzMsMTUgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdCAqL1xuIFx0Ym9vbCBzaGFkb3dfcm9vdF9hbGxvY2F0ZWQ7XG4gXG4rXHQvKlxuK1x0ICogVHJhY2tzIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBhbGxvd3NcbitcdCAqIHRyYWNraW5nIHdoaWNoIG1lbW9yeSBpcyBndWFyYW50ZWVkIHRvIHN0aWxsIGJlIHplcm8sIGUuZy4sIGZvclxuK1x0ICogc3VwcG9ydGluZyB0aGUgSHZFeHRDYWxsR2V0Qm9vdFplcm9lZE1lbW9yeSBlbmxpZ2h0ZW5tZW50LlxuK1x0ICogVGhlIGdyYW51bGFyaXR5IGlzIGRlZmluZWQgYnkgS1ZNX0VWRVJfTUFQUEVEX1NISUZULlxuK1x0ICovXG4rXHR1bnNpZ25lZCBsb25nICpldmVyX21hcHBlZF9iaXRtYXA7XG4rXHR1NjQgZXZlcl9tYXBwZWRfbWF4X2dwYTtcbitcbiAjaWZkZWYgQ09ORklHX0tWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuIFx0LypcbiBcdCAqIElmIHNldCwgdGhlIFZNIGhhcyAob3IgaGFkKSBhbiBleHRlcm5hbCB3cml0ZSB0cmFja2luZyB1c2VyLCBhbmRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L2V2ZXJfbWFwcGVkLmggYi9hcmNoL3g4Ni9rdm0vbW11L2V2ZXJfbWFwcGVkLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNzk1MzM3ZTY4NDg2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L2V2ZXJfbWFwcGVkLmhcbkBAIC0wLDAgKzEsMzMgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX19LVk1fWDg2X0VWRVJfTUFQUEVEX0hcbisjZGVmaW5lIF9fS1ZNX1g4Nl9FVkVSX01BUFBFRF9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuK1xuKy8qXG4rICogVHJhY2sgaWYgcGFnZXMgaGF2ZSBldmVyIGJlZW4gbWFwcGVkIGF0IGFuIGludGVybmFsIGdyYW51bGFyaXR5IG9mIDIgTUIuXG4rICovXG4rI2RlZmluZSBLVk1fRVZFUl9NQVBQRURfU0hJRlQgMjFcbitcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbitcdFx0XHRcdFx0ICAgICB1NjQgbnBhZ2VzKVxuK3tcbitcdGNvbnN0IHVuc2lnbmVkIGludCBzaGlmdCA9IEtWTV9FVkVSX01BUFBFRF9TSElGVCAtIFBBR0VfU0hJRlQ7XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gZ2ZuIFx1MDAzZVx1MDAzZSBzaGlmdDtcbitcdHVuc2lnbmVkIGxvbmcgZW5kID0gKGdmbiArIG5wYWdlcyArICgxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0KSAtIDEpIFx1MDAzZVx1MDAzZSBzaGlmdDtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGVuZCA9IG1pbihlbmQsIGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX21heF9ncGEgXHUwMDNlXHUwMDNlIEtWTV9FVkVSX01BUFBFRF9TSElGVCk7XG4rXHRmb3IgKGkgPSBzdGFydDsgaSBcdTAwM2MgZW5kOyBpKyspIHtcbitcdFx0LypcbitcdFx0ICogcmUtbWFwcGluZyB6YXBwZWQgcGFnZXMgYW5kIGJyZWFraW5nIHVwIG9mIGh1Z2UgcGFnZXMgY2FuXG4rXHRcdCAqIHRyaWdnZXIgYSBudW1iZXIgb2Ygc2V0cyBvbiBhbHJlYWR5IHNldCBiaXRzLCBzbyB0ZXN0IGZpcnN0XG4rXHRcdCAqIGJlZm9yZSBhdG9taWMtc2V0LiBTaW5jZSBiaXRzIGNhbiBuZXZlciBiZSB1bnNldCBhZ2FpbiwgdGhpc1xuK1x0XHQgKiBpcyBzYWZlIGFnYWluc3QgcmFjZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXRlc3RfYml0KGksIGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCkpXG4rXHRcdFx0c2V0X2JpdChpLCBrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApO1xuK1x0fVxuK31cbitcbisjZW5kaWYgLyogX19LVk1fWDg2X0VWRVJfTUFQUEVEX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5pbmRleCBjZTNmMmVmYWRiMDViLi5lYTJhMzdhMDRiMmZmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5AQCAtMSw2ICsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCI6IFwiIGZtdFxuIFxuKyNpbmNsdWRlIFwiZXZlcl9tYXBwZWQuaFwiXG4gI2luY2x1ZGUgXCJtbXUuaFwiXG4gI2luY2x1ZGUgXCJtbXVfaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJtbXV0cmFjZS5oXCJcbkBAIC01NTQsNiArNTU1LDE3IEBAIHN0YXRpYyBpbnQgX19oYW5kbGVfY2hhbmdlZF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIFdoZW5ldmVyIGEgcGFnZSBiZWNvbWVzIGEgZnJlc2ggbGVhZiwgbWFyayB0aGUgbWVtb3J5IGFzIG1hcHBlZC5cbitcdCAqIE9uIGh1Z2VwYWdlIGJyZWFrdXAsIHRoaXMgdHJpZ2dlcnMgZm9yIGVhY2ggbmV3IGxvd2VyLWxldmVsIHBhZ2UsXG4rXHQgKiBldmVuIHRob3VnaCB0aGUgbWVtb3J5IHdhcyBhbHJlYWR5IG1hcmtlZCB3aGVuIHRoZSBodWdlcGFnZSB3YXNcbitcdCAqIG1hcHBlZCwgYnV0IHRoZSBvdmVyaGVhZCBpcyBuZWdsaWdpYmxlLlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoa3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwKSBcdTAwMjZcdTAwMjZcbitcdCAgICBpc19sZWFmIFx1MDAyNlx1MDAyNiAhd2FzX2xlYWYpIHtcbitcdFx0a3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZShrdm0sIGdmbiwgS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpO1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIFJlY3Vyc2l2ZWx5IGhhbmRsZSBjaGlsZCBQVHMgaWYgdGhlIGNoYW5nZSByZW1vdmVkIGEgc3VidHJlZSBmcm9tXG4gXHQgKiB0aGUgcGFnaW5nIHN0cnVjdHVyZS4gIE5vdGUgdGhlIFdBUk4gb24gdGhlIFBGTiBjaGFuZ2luZyB3aXRob3V0IHRoZVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNy4uODljYmNmODM5OWY0OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMjUsNiArMjUsNyBAQFxuICNpbmNsdWRlIFwidHNzLmhcIlxuICNpbmNsdWRlIFwicmVncy5oXCJcbiAjaW5jbHVkZSBcImt2bV9lbXVsYXRlLmhcIlxuKyNpbmNsdWRlIFwibW11L2V2ZXJfbWFwcGVkLmhcIlxuICNpbmNsdWRlIFwibW11L3BhZ2VfdHJhY2suaFwiXG4gI2luY2x1ZGUgXCJ4ODYuaFwiXG4gI2luY2x1ZGUgXCJjcHVpZC5oXCJcbkBAIC0yMzkxLDYgKzIzOTIsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX1JFQURPTkxZX01FTTpcbiBcdFx0ciA9IGt2bSA/IGt2bV9hcmNoX2hhc19yZWFkb25seV9tZW0oa3ZtKSA6IDE7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBLVk1fQ0FQX0VWRVJfTUFQUEVEOlxuK1x0XHRyID0gKHRkcF9lbmFibGVkIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19YODZfNjQpKTtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC00MTkwLDYgKzQxOTQsMzYgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4rXHRjYXNlIEtWTV9DQVBfRVZFUl9NQVBQRUQ6IHtcbitcdFx0dW5zaWduZWQgbG9uZyAqbWFwcGVkX2JpdG1hcDtcbitcdFx0dW5zaWduZWQgbG9uZyBudW1fZ3JhbnVsZXM7XG4rXG4rXHRcdHIgPSAwO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0aWYgKCF0ZHBfZW5hYmxlZCkge1xuK1x0XHRcdHIgPSAtRU9QTk9UU1VQUDtcbitcdFx0fSBlbHNlIGlmIChrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApIHtcbitcdFx0XHRyID0gLUVFWElTVDtcbitcdFx0fSBlbHNlIGlmIChjYXAtXHUwMDNlYXJnc1swXSA9PSAwIHx8XG4rXHRcdFx0ICAgY2FwLVx1MDAzZWFyZ3NbMF0gXHUwMDNlICgxVUxMIFx1MDAzY1x1MDAzYyBrdm1faG9zdC5tYXhwaHlhZGRyKSkge1xuK1x0XHRcdHIgPSAtRUlOVkFMO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG51bV9ncmFudWxlcyA9IERJVl9ST1VORF9VUChjYXAtXHUwMDNlYXJnc1swXSwgMVVMTCBcdTAwM2NcdTAwM2MgS1ZNX0VWRVJfTUFQUEVEX1NISUZUKTtcbitcdFx0XHRtYXBwZWRfYml0bWFwID1cbitcdFx0XHRcdGt2Y2FsbG9jKEJJVFNfVE9fTE9OR1MobnVtX2dyYW51bGVzKSxcbitcdFx0XHRcdFx0IHNpemVvZihsb25nKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdFx0XHRpZiAoIW1hcHBlZF9iaXRtYXApXG4rXHRcdFx0XHRyID0gLUVOT01FTTtcbitcdFx0XHRlbHNlIHtcbitcdFx0XHRcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdFx0XHRcdGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX2JpdG1hcCA9IG1hcHBlZF9iaXRtYXA7XG4rXHRcdFx0XHRrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9tYXhfZ3BhID0gbnVtX2dyYW51bGVzIFx1MDAzY1x1MDAzYyBLVk1fRVZFUl9NQVBQRURfU0hJRlQ7XG4rXHRcdFx0XHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG5AQCAtNDE5Nyw2ICs0MjMxLDczIEBAIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gcjtcbiB9XG4gXG4rc3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZyhzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyAqbG9nKVxuK3tcbitcdHU2NCBtYXhfZ3JhbnVsZXM7XG4rXHR1bnNpZ25lZCBpbnQgY29hcnNlbmVzcztcbitcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcDtcbitcdGludCByO1xuK1xuK1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXApXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0aWYgKGxvZy1cdTAwM2VmbGFncylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobG9nLVx1MDAzZWdyYW51bGVfc2hpZnQgXHUwMDNjIEtWTV9FVkVSX01BUFBFRF9TSElGVCB8fCBsb2ctXHUwMDNlZ3JhbnVsZV9zaGlmdCBcdTAwM2U9IDY0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG1heF9ncmFudWxlcyA9IGt2bS1cdTAwM2VhcmNoLmV2ZXJfbWFwcGVkX21heF9ncGEgXHUwMDNlXHUwMDNlIGxvZy1cdTAwM2VncmFudWxlX3NoaWZ0O1xuK1x0aWYgKGxvZy1cdTAwM2VudW1fZ3JhbnVsZXMgXHUwMDNlIG1heF9ncmFudWxlcyB8fFxuK1x0ICAgIGxvZy1cdTAwM2VmaXJzdF9ncmFudWxlIFx1MDAzZSBtYXhfZ3JhbnVsZXMgLSBsb2ctXHUwMDNlbnVtX2dyYW51bGVzKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHJlcXVlc3QgdXNlcyB0aGUgc2FtZSBncmFudWxhcml0eSBhcyBvdXIgaW50ZXJuYWxcbitcdCAqIHRyYWNraW5nLCBhbmQgd2UgYXJlIGJ5dGUtYWxpZ25lZCAodGhlIGV4cGVjdGVkIGNvbW1vbiBjYXNlKSwgd2UgY2FuXG4rXHQgKiBqdXN0IGNvcHlfdG9fdXNlci4gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaXRtYXAgdG8gcGFzcy5cbitcdCAqXG4rXHQgKiBXZSBkbyBub3QgbG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgdkNQVXMgbWFwcGluZyBuZXcgbWVtb3J5IG9uIGFueSBvZlxuK1x0ICogdGhlc2Ugb3BlcmF0aW9ucy4gQml0cyBhcmUgc2V0IGF0b21pY2FsbHkgYW5kIG5ldmVyIGNsZWFyZWQsIHNvIGFueSByYWNlXG4rXHQgKiBoZXJlIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSB3cml0ZSBoYXBwZW5pbmcgYWZ0ZXIgdGhpcyBoYW5kbGVyXG4rXHQgKiBmaW5pc2hlcyBidXQgYmVmb3JlIHRoZSBjYWxsZXIgcmVhZHMgdGhlIHJlc3VsdHMuXG4rXHQgKi9cbitcdGNvYXJzZW5lc3MgPSBsb2ctXHUwMDNlZ3JhbnVsZV9zaGlmdCAtIEtWTV9FVkVSX01BUFBFRF9TSElGVDtcbitcdGlmIChjb2Fyc2VuZXNzID09IDAgXHUwMDI2XHUwMDI2ICEobG9nLVx1MDAzZWZpcnN0X2dyYW51bGUgXHUwMDI2IDcpIFx1MDAyNlx1MDAyNiAhKGxvZy1cdTAwM2VudW1fZ3JhbnVsZXMgXHUwMDI2IDcpKSB7XG4rXHRcdGlmIChjb3B5X3RvX3VzZXIobG9nLVx1MDAzZWJpdG1hcCxcbitcdFx0XHRcdCAodTggKilrdm0tXHUwMDNlYXJjaC5ldmVyX21hcHBlZF9iaXRtYXAgKyBsb2ctXHUwMDNlZmlyc3RfZ3JhbnVsZSAvIDgsXG4rXHRcdFx0XHQgbG9nLVx1MDAzZW51bV9ncmFudWxlcyAvIDgpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGJpdG1hcCA9IGt2emFsbG9jKERJVl9ST1VORF9VUChsb2ctXHUwMDNlbnVtX2dyYW51bGVzLCA4KSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghYml0bWFwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAodTY0IGdyYW4gPSBsb2ctXHUwMDNlZmlyc3RfZ3JhbnVsZTtcbitcdCAgICAgZ3JhbiBcdTAwM2MgbG9nLVx1MDAzZWZpcnN0X2dyYW51bGUgKyBsb2ctXHUwMDNlbnVtX2dyYW51bGVzO1xuK1x0ICAgICBncmFuKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGdyYW4gXHUwMDNjXHUwMDNjIGNvYXJzZW5lc3M7XG4rXHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyAoMVVMIFx1MDAzY1x1MDAzYyBjb2Fyc2VuZXNzKTtcbitcbitcdFx0aWYgKGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwLCBlbmQsIHN0YXJ0KSBcdTAwM2MgZW5kKVxuK1x0XHRcdF9fc2V0X2JpdChncmFuIC0gbG9nLVx1MDAzZWZpcnN0X2dyYW51bGUsIGJpdG1hcCk7XG4rXHR9XG4rXG4rXHRpZiAoY29weV90b191c2VyKGxvZy1cdTAwM2ViaXRtYXAsIGJpdG1hcCwgRElWX1JPVU5EX1VQKGxvZy1cdTAwM2VudW1fZ3JhbnVsZXMsIDgpKSkge1xuK1x0XHRyID0gLUVGQVVMVDtcbitcdFx0Z290byBvdXRfZnJlZTtcbitcdH1cbitcbitcdHIgPSAwO1xuK1xuK291dF9mcmVlOlxuK1x0a3ZmcmVlKGJpdG1hcCk7XG4rXHRyZXR1cm4gcjtcbit9XG4rXG4gI2lmZGVmIENPTkZJR19LVk1fQ09NUEFUXG4gLyogZm9yIEtWTV9YODZfU0VUX01TUl9GSUxURVIgKi9cbiBzdHJ1Y3Qga3ZtX21zcl9maWx0ZXJfcmFuZ2VfY29tcGF0IHtcbkBAIC00NzEwLDYgKzQ4MTEsMTUgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0ga3ZtX3ZtX2lvY3RsX3NldF9tc3JfZmlsdGVyKGt2bSwgXHUwMDI2ZmlsdGVyKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4rXHRjYXNlIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HOiB7XG4rXHRcdHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIG1hcHBlZF9sb2c7XG4rXG4rXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZtYXBwZWRfbG9nLCBhcmdwLCBzaXplb2YobWFwcGVkX2xvZykpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0XHRyID0ga3ZtX3ZtX2lvY3RsX2dldF9ldmVyX21hcHBlZF9sb2coa3ZtLCBcdTAwMjZtYXBwZWRfbG9nKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbmluZGV4IDQxOTAxMTA5N2ZhOGUuLmQwYmU5NDk0NmE3N2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuQEAgLTk5Nyw2ICs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbisjZGVmaW5lIEtWTV9DQVBfRVZFUl9NQVBQRUQgMjUwXG4gXG4gc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHtcbiBcdF9fdTMyIGlycWNoaXA7XG5AQCAtMTY3MCw0ICsxNjcxLDE4IEBAIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7XG4gXHRfX3U2NCBwYWRkaW5nWzVdO1xuIH07XG4gXG4rI2RlZmluZSBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRyAgX0lPVyhLVk1JTywgIDB4ZDYsIHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nKVxuK1xuK3N0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIHtcbitcdF9fdTY0IGZpcnN0X2dyYW51bGU7XG4rXHRfX3U2NCBudW1fZ3JhbnVsZXM7XG4rXHRfX3UzMiBncmFudWxlX3NoaWZ0O1xuK1x0X191MzIgZmxhZ3M7XG4rXHR1bmlvbiB7XG4rXHRcdHZvaWQgX191c2VyICpiaXRtYXA7XG4rXHRcdF9fdTY0IHBhZGRpbmc7XG4rXHR9O1xuK1x0X191NjQgcmVzZXJ2ZWRbNF07XG4rfTtcbitcbiAjZW5kaWYgLyogX19MSU5VWF9LVk1fSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA0YWNlMTI2MDZlOTM3Li4xZWIwYmFjMTkyMGRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTE2Miw2ICsxNjIsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN0ZWFsX3RpbWVcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gc3lzdGVtX2NvdW50ZXJfb2Zmc2V0X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0XG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGV2ZXJfbWFwcGVkX3Rlc3RcbiBcbiAjIENvbXBpbGVkIG91dHB1dHMgdXNlZCBieSB0ZXN0IHRhcmdldHNcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRF94ODYgKz0geDg2L254X2h1Z2VfcGFnZXNfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ldmVyX21hcHBlZF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZXZlcl9tYXBwZWRfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzY3MjNmMGM5ZWUyY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2V2ZXJfbWFwcGVkX3Rlc3QuY1xuQEAgLTAsMCArMSwxOTEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogS1ZNIGV2ZXItbWFwcGVkIGJpdG1hcCB0ZXN0XG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIE51dGFuaXgsIEluYy5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2t2bV91dGlsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nwcm9jZXNzb3IuaFx1MDAzZVxuK1xuKyNkZWZpbmUgS2lCIDEwMjR1XG4rI2RlZmluZSBNaUIgKDEwMjQgKiBLaUIpXG4rXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh1aW50NjRfdCBiYXNlX2dwYSwgc2l6ZV90IGxlbilcbit7XG4rXHRHVUVTVF9ET05FKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFzc2VydF9iaXRtYXBzX2VxdWFsKHU4IGV4cGVjdGVkW10sIHU4IGFjdHVhbFtdLCBzaXplX3QgbGVuKVxuK3tcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKykge1xuK1x0XHRURVNUX0FTU0VSVChleHBlY3RlZFtpXSA9PSBhY3R1YWxbaV0sXG4rXHRcdFx0ICAgIFwiYnl0ZSAlbGQsIGV4cGVjdGVkIDB4JTAyeCwgZ290IDB4JTAyeFwiLFxuK1x0XHRcdCAgICBpLCBleHBlY3RlZFtpXSwgYWN0dWFsW2ldKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcHJlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHN0YXJ0LCB1NjQgbGVuKVxuK3tcbitcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZSA9IHtcbitcdFx0LmdwYSA9IHN0YXJ0LFxuK1x0XHQuc2l6ZSA9IGxlbixcbitcdFx0LmZsYWdzID0gMCxcbitcdH07XG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCBcdTAwMjZyYW5nZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfb25lX3BhZ2Uodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZSA9IHtcbitcdFx0LmdwYSA9IDB4MCxcbitcdFx0LnNpemUgPSBQQUdFX1NJWkUsXG4rXHRcdC5mbGFncyA9IDAsXG4rXHR9O1xuK1x0dW5zaWduZWQgY2hhciBtYXBwZWRfYml0bWFwO1xuK1x0c3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgbG9nID0ge1xuK1x0XHQuZmlyc3RfZ3JhbnVsZSA9IDAsXG4rXHRcdC5udW1fZ3JhbnVsZXMgPSAxLFxuK1x0XHQuZ3JhbnVsZV9zaGlmdCA9IDIxLFxuK1x0XHQuZmxhZ3MgPSAwLFxuK1x0XHQuYml0bWFwID0gXHUwMDI2bWFwcGVkX2JpdG1hcCxcbitcdH07XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuK1xuK1x0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FVkVSX01BUFBFRCwgUEFHRV9TSVpFKTtcbitcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX1BSRV9GQVVMVF9NRU1PUlksIFx1MDAyNnJhbmdlKTtcbitcbitcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbitcdFRFU1RfQVNTRVJUKG1hcHBlZF9iaXRtYXAgPT0gMHgxLCBcImV4cGVjdGVkIDB4MSwgZ290IDB4JXhcIiwgbWFwcGVkX2JpdG1hcCk7XG4rfVxuK1xuKy8qXG4rICogQWRkIDY0TUIgb3IgbWVtb3J5IGF0IEdQQSAxNk1CICggLS1cdTAwM2UgWzE2TUIsIDgwTUIpICksXG4rICogcHJlLWZhdWx0IFsxNk1CLCA0OE1CKSwgcmVxdWVzdCBhbmQgY2hlY2sgYml0bWFwIGZvciBbMTZNQiwgODBNQikuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdF9vbmVfYmxvY2sodm9pZClcbit7XG4rXHRpbnQgcmV0O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRjb25zdCB1aW50NjRfdCBtYXBfc3RhcnQgPSAweDEwMDAwMDA7XG4rXHRjb25zdCB1aW50NjRfdCBtYXBfbGVuID0gMHg0MDAwMDAwO1xuK1x0dTggbWFwcGVkX2JpdG1hcFs0XSA9IHsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSB9O1xuK1x0dTggZXhwZWN0ZWRfYml0bWFwWzRdID0geyAweGZmLCAweGZmLCAweDAwLCAweDAwIH07XG4rXHRzdHJ1Y3Qga3ZtX2V2ZXJfbWFwcGVkX2xvZyBsb2cgPSB7XG4rXHRcdC5maXJzdF9ncmFudWxlID0gMHg4LFxuK1x0XHQubnVtX2dyYW51bGVzID0gMHgyMCxcbitcdFx0LmdyYW51bGVfc2hpZnQgPSAyMSxcbitcdFx0LmZsYWdzID0gMCxcbitcdFx0LmJpdG1hcCA9IG1hcHBlZF9iaXRtYXAsXG4rXHR9O1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcbitcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIG1hcF9zdGFydCwgMSwgbWFwX2xlbiAvIFBBR0VfU0laRSwgMCk7XG4rXG4rXHRyZXQgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbitcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5PRU5ULFxuK1x0XHQgICAgXCJleHBlY3RlZCBFTk9FTlQgd2hlbiBxdWVyeWluZyBldmVyLW1hcHBlZCBsb2cgYmVmb3JlIGVuYWJsZW1lbnQsIGdvdCAlZFwiLFxuK1x0XHQgICAgZXJybm8pO1xuK1x0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FVkVSX01BUFBFRCwgbWFwX3N0YXJ0ICsgbWFwX2xlbik7XG4rXHRwcmVfZmF1bHQodmNwdSwgMTYgKiBNaUIsIDMyICogTWlCKTtcbitcbitcdHJldCA9IF9fdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FVkVSX01BUFBFRCwgUEFHRV9TSVpFKTtcbitcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxuK1x0XHQgICAgXCJleHBlY3RlZCBFRVhJU1Qgd2hlbiBlbmFibGluZyBLVk1fQ0FQX0VWRVJfTUFQUEVEIHR3aWNlLCBnb3QgJWRcIixcbitcdFx0ICAgIGVycm5vKTtcbitcbitcdHZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbitcdGFzc2VydF9iaXRtYXBzX2VxdWFsKGV4cGVjdGVkX2JpdG1hcCwgbWFwcGVkX2JpdG1hcCwgNCk7XG4rXG4rXHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDIyO1xuK1x0bG9nLmZpcnN0X2dyYW51bGUgPSAweDQ7XG4rXHRsb2cubnVtX2dyYW51bGVzID0gMHgxMDtcbitcdG1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XG4rXHRtZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4ZmYsIDB4MDAsIDB4YTUsIDB4YTUgfSwgNCk7XG4rXHR2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFx1MDAyNmxvZyk7XG4rXHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xuK1xuK1x0bG9nLmdyYW51bGVfc2hpZnQgPSAyMztcbitcdGxvZy5maXJzdF9ncmFudWxlID0gMHgyO1xuK1x0bG9nLm51bV9ncmFudWxlcyA9IDB4ODtcbitcdG1lbWNweShtYXBwZWRfYml0bWFwLCAodThbXSl7IDB4YTUsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XG4rXHRtZW1jcHkoZXhwZWN0ZWRfYml0bWFwLCAodThbXSl7IDB4MGYsIDB4YTUsIDB4YTUsIDB4YTUgfSwgNCk7XG4rXHR2bV9pb2N0bCh2bSwgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0csIFx1MDAyNmxvZyk7XG4rXHRhc3NlcnRfYml0bWFwc19lcXVhbChleHBlY3RlZF9iaXRtYXAsIG1hcHBlZF9iaXRtYXAsIDQpO1xuK1xuK1x0bG9nLm51bV9ncmFudWxlcyA9IDB4ZmY7XG4rXHRyZXQgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbitcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuK1x0XHQgICAgXCJleHBlY3RlZCBFSU5WQUwgd2hlbiBxdWVyeWluZyBiZXlvbmQgcmFuZ2UsIGdvdCAlZFwiLFxuK1x0XHQgICAgZXJybm8pO1xuK1xuK1x0bG9nLm51bV9ncmFudWxlcyA9IDB4MTA7XG4rXHRsb2cuZ3JhbnVsZV9zaGlmdCA9IDE7XG4rXHRyZXQgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPRywgXHUwMDI2bG9nKTtcbitcdFRFU1RfQVNTRVJUKHJldCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuK1x0XHQgICAgXCJleHBlY3RlZCBFSU5WQUwgd2l0aCB0b28gc21hbGwgZ3JuYXVsZSBzaGlmdCwgZ290ICVkXCIsXG4rXHRcdCAgICBlcnJubyk7XG4rfVxuK1xuKy8qXG4rICogQWRkIDEyOE1CIG9yIG1lbW9yeSBhdCBHUEEgMzJNQiAoIC0tXHUwMDNlIFszMk1CLCAxNjBNQikgKSxcbisgKiBwcmUtZmF1bHQgWzMyTUIsIDY0TUIpLCBhbmQgWzkwTUIsIDk0TUIpLFxuKyAqIHJlcXVlc3QgYW5kIGNoZWNrIGJpdG1hcCBmb3IgWzE2TUIsIDEyME1CKS5cbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0X3R3b19ibG9ja3Modm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdGNvbnN0IHVpbnQ2NF90IG1hcF9zdGFydCA9IDB4MjAwMDAwMDtcbitcdGNvbnN0IHVpbnQ2NF90IG1hcF9sZW4gPSAweDgwMDAwMDA7XG4rXHR1OCBtYXBwZWRfYml0bWFwWzddID0geyAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH07XG4rXHR1OCBleHBlY3RlZF9iaXRtYXBbN10gPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAgfTtcbitcdHN0cnVjdCBrdm1fZXZlcl9tYXBwZWRfbG9nIGxvZyA9IHtcbitcdFx0LmZpcnN0X2dyYW51bGUgPSAweDgsXG4rXHRcdC5udW1fZ3JhbnVsZXMgPSAweDM0LFxuK1x0XHQuZ3JhbnVsZV9zaGlmdCA9IDIxLFxuK1x0XHQuZmxhZ3MgPSAwLFxuK1x0XHQuYml0bWFwID0gbWFwcGVkX2JpdG1hcCxcbitcdH07XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuK1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgbWFwX3N0YXJ0LCAxLCBtYXBfbGVuIC8gUEFHRV9TSVpFLCAwKTtcbitcbitcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVZFUl9NQVBQRUQsIG1hcF9zdGFydCArIG1hcF9sZW4pO1xuK1x0cHJlX2ZhdWx0KHZjcHUsIDMyICogTWlCLCAzMiAqIE1pQik7XG4rXHRwcmVfZmF1bHQodmNwdSwgOTAgKiBNaUIsIDQgKiBNaUIpO1xuK1xuK1x0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuK1x0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcbitcbitcdGxvZy5ncmFudWxlX3NoaWZ0ID0gMjI7XG4rXHRsb2cuZmlyc3RfZ3JhbnVsZSA9IDB4NDtcbitcdGxvZy5udW1fZ3JhbnVsZXMgPSAweDFhO1xuK1x0bWVtY3B5KG1hcHBlZF9iaXRtYXAsICh1OFtdKXsgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNX0sIDcpO1xuK1x0bWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweGYwLCAweDBmLCAweDBjLCAweDAwLCAweGE1LCAweGE1LCAweGE1IH0sIDcpO1xuK1x0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuK1x0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcbitcbitcdGxvZy5ncmFudWxlX3NoaWZ0ID0gMjM7XG4rXHRsb2cuZmlyc3RfZ3JhbnVsZSA9IDB4MjtcbitcdGxvZy5udW1fZ3JhbnVsZXMgPSAweGQ7XG4rXHRtZW1jcHkobWFwcGVkX2JpdG1hcCwgKHU4W10peyAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDcpO1xuK1x0bWVtY3B5KGV4cGVjdGVkX2JpdG1hcCwgKHU4W10peyAweDNjLCAweDAyLCAweGE1LCAweGE1LCAweGE1LCAweGE1LCAweGE1IH0sIDcpO1xuK1x0dm1faW9jdGwodm0sIEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HLCBcdTAwMjZsb2cpO1xuK1x0YXNzZXJ0X2JpdG1hcHNfZXF1YWwoZXhwZWN0ZWRfYml0bWFwLCBtYXBwZWRfYml0bWFwLCA0KTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfRVZFUl9NQVBQRUQpKTtcbitcbitcdHRlc3Rfb25lX3BhZ2UoKTtcbitcdHRlc3Rfb25lX2Jsb2NrKCk7XG4rXHR0ZXN0X3R3b19ibG9ja3MoKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODoyMC4wMTUxMTY4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MTY4MDE5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gRXZlci1NYXBwZWQgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNpbmcgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCB0aGUgYEtWTV9HRVRfRVZFUl9NQVBQRURfTE9HYCBpb2N0bCBmb3IgeDg2IEtWTS4gSXQgc2VlbXMgbGlrZSBpdCdzIGRlc2lnbmVkIHRvIHRyYWNrIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgKmV2ZXIqIGJlZW4gbWFwcGVkLCB3aGljaCBpcyBhIG5lYXQgY2FwYWJpbGl0eS5cblxuRmlyc3QsIGxldCdzIG1ha2Ugc3VyZSB0aGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4gWWVwLCBuZXcgaW9jdGwsIG5ldyBjYXBhYmlsaXR5IOKAkyB0aGF0IHNjcmVhbXMgZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFFFTVUsIHN5emthbGxlciwgYWxsIHRob3NlIHRvb2xzIHdpbGwgYmUgYWJsZSB0byB1dGlsaXplIHRoaXMuIEdvb2QuXG5cbk5vdywgd2hlcmUgYXJlIHRoZSBjcml0aWNhbCBzeW1ib2xzPyBMZXQncyBzZWUuLi4gSSd2ZSBnb3Q6XG5cbiogICBga3ZtX2V2ZXJfbWFwcGVkX3NldF9yYW5nZWAgLSBzb3VuZHMgbGlrZSB0aGUgd29ya2hvcnNlIHNldHRpbmcgZXZlci1tYXBwZWQgc3RhdHVzLCBpbmxpbmVkIGludG8gYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAgd2l0aGluIGB0ZHBfbW11LmNgLlxuKiAgIGBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZ2AgLSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgXG4qICAgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCAtIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgbmV3IGBLVk1fQ0FQX0VWRVJfTUFQUEVEYFxuKiAgIGBrdm1fYXJjaF92bV9pb2N0bGAgLSBtb2RpZmllZCB0byBoYW5kbGUgdGhlIG5ldyBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgXG5cblNpbmNlIGBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZ2AgaXMgc3RhdGljLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGFjdHVhbGx5IHVzZWQuIEFoLCB5ZXMsIGl0IGlzLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseSBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLiBUaGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzLlxuXG5MZXQncyBjaGVjayBgYXJjaC94ODYva3ZtL3g4Ni5jYCBmb3IgYGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY1OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjE4OjI4LjQzMTkyMjcwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc0NTQ3MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz0zOTMxPWludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDIzMy1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDIzNDpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfZXZlcl9tYXBwZWRfbG9nKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDIzNS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ldmVyX21hcHBlZF9sb2cgKmxvZylcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz00NDU1PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy00ODE5LVxcbmFyY2gveDg2L2t2bS94ODYuYzo0ODIwOlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfZ2V0X2V2ZXJfbWFwcGVkX2xvZyhrdm0sIFxcdTAwMjZtYXBwZWRfbG9nKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDgyMS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MTg6MzAuODA2NDc1MTY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzNjA5NDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIEFyY2hpdGVjdHVyZSBmb3IgUG90ZW50aWFsIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgS1ZNIGNvZGUgYW5kIHRyeWluZyB0byB0cmFjZSBob3cgdGhpcyBgX19oYW5kbGVfY2hhbmdlZF9zcHRlYCBmdW5jdGlvbiwgd2hpY2ggaXMsIGltcG9ydGFudGx5LCAqc3RhdGljKiwgaXMgdXNlZCBpbiB0aGUgYHRkcF9tbXUuY2AgZmlsZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyAtIEkga25vdyBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGFyZSB0aGUgb25lcyB0byBzdGFydCB3aXRoLiBCdXQgcmVhbGx5IHdoYXQgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlzLCBkb2VzIGEgKm5vbi1zdGF0aWMqIGZ1bmN0aW9uICppbiB0aGlzIGZpbGUqLCBgdGRwX21tdS5jYCwgY2FsbCB0aGlzIGludGVybmFsIGBfX2hhbmRsZV9jaGFuZ2VkX3NwdGVgIGZ1bmN0aW9uPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLiBJZiBpdCdzIG9ubHkgY2FsbGVkIGludGVybmFsbHksIHRoYXQgbmFycm93cyB0aGUgc2NvcGUgb2YgaW52ZXN0aWdhdGlvbiBzaWduaWZpY2FudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODozNC42NDI1NzE4MThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzOTQ3MDc2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2hhbmRsZV9jaGFuZ2VkX3NwdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9Mzg2PXN0YXRpYyB2b2lkIGhhbmRsZV9yZW1vdmVkX3B0KHN0cnVjdCBrdm0gKmt2bSwgdGRwX3B0ZXBfdCBwdCwgYm9vbCBzaGFyZWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00NzEtLyoqXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NDcyOiAqIF9faGFuZGxlX2NoYW5nZWRfc3B0ZSAtIGhhbmRsZSBib29ra2VlcGluZyBhc3NvY2lhdGVkIHdpdGggYW4gU1BURSBjaGFuZ2VcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00NzMtICogQGt2bToga3ZtIGluc3RhbmNlXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00ODYtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NDg3OnN0YXRpYyBpbnQgX19oYW5kbGVfY2hhbmdlZF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDg4LVxcdFxcdFxcdFxcdCBnZm5fdCBnZm4sIHU2NCBvbGRfc3B0ZSwgdTY0IG5ld19zcHRlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9NTk3PXN0YXRpYyB2b2lkIGhhbmRsZV9jaGFuZ2VkX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTYwMC17XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NjAxOlxcdEtWTV9CVUdfT04oX19oYW5kbGVfY2hhbmdlZF9zcHRlKGt2bSwgc3AsIGdmbiwgb2xkX3NwdGUsIG5ld19zcHRlLFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTYwMi1cXHRcXHRcXHRcXHRcXHQgbGV2ZWwsIHNoYXJlZCksIGt2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz02NDc9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHRkcF9tbXVfc2V0X3NwdGVfYXRvbWljKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTY4MC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo2ODE6XFx0cmV0ID0gX19oYW5kbGVfY2hhbmdlZF9zcHRlKGt2bSwgc3AsIGl0ZXItXFx1MDAzZWdmbiwgaXRlci1cXHUwMDNlb2xkX3NwdGUsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNjgyLVxcdFxcdFxcdFxcdCAgICBuZXdfc3B0ZSwgaXRlci1cXHUwMDNlbGV2ZWwsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODozNy4wODIwNTA4ODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkyMTUzMzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFBvdGVudGlhbCBLZXkgRnVuY3Rpb25zIGluIGB0ZHBfbW11LmNgKipcblxuT2theSwgc28gYGhhbmRsZV9jaGFuZ2VkX3NwdGVgIGFuZCBgdGRwX21tdV9zZXRfc3B0ZV9hdG9taWNgIGJvdGggdWx0aW1hdGVseSBmdW5uZWwgaW50byBgX19oYW5kbGVfY2hhbmdlZF9zcHRlYC4gVGhhdCdzIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFNQVEUgY2hhbmdlcyBhcmUgbWFuYWdlZCBpbiB0aGlzIFREUCBNTVUgY29udGV4dC4gTXkgdGFzayBub3cgaXMgdG8gaWRlbnRpZnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGB0ZHBfbW11LmNgIHRoYXQgbWlnaHQgcHJvdmlkZSBhZGRpdGlvbmFsIGluc2lnaHRzLCBzZXJ2aW5nIGFzIHBvdGVudGlhbCBcImZvY3VzIHN5bWJvbHNcIiB0byBidWlsZCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBGaW5kaW5nIHRoZSByaWdodCBmdW5jdGlvbnMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiBTUFRFIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoaXMgbW9kdWxlLiBJIG5lZWQgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgZWl0aGVyIGludGVyYWN0IHdpdGggU1BURXMgZGlyZWN0bHkgb3IgdGhhdCBjb250cm9sIHJlbGF0ZWQgYXNwZWN0cyBvZiB0aGUgVERQIE1NVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NTIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODo0MS44NzQyMDY1NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyODExMzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGt2bV90ZHBfbW11X1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc2hhZG93X3Jvb3RfYWxsb2NhdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUuaC0zNDEtXFxuYXJjaC94ODYva3ZtL21tdS5oOjM0MjppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQzLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM1PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTQ2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE0NzppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE0OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMjIyPXN0YXRpYyBpbnQgdGRwX21tdV9zcGxpdF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMjI4LSAqL1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEyMjk6aW50IGt2bV90ZHBfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTIzMC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xODkxPWJvb2wga3ZtX3RkcF9tbXVfd3JpdGVfcHJvdGVjdF9nZm4oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTkxMC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxOTExOmludCBrdm1fdGRwX21tdV9nZXRfd2FsayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCB1NjQgKnNwdGVzLFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTE5MTItXFx0XFx0XFx0IGludCAqcm9vdF9sZXZlbClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTcyPXZvaWQga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBzaGFyZWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTczLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjc0OmludCBrdm1fdGRwX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC03NS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTEwNj1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3RkcF9tbXVfd2Fsa19sb2NrbGVzc19lbmQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTExMC1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDoxMTE6aW50IGt2bV90ZHBfbW11X2dldF93YWxrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIHU2NCAqc3B0ZXMsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtMTEyLVxcdFxcdFxcdCBpbnQgKnJvb3RfbGV2ZWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODo0NC41MDIzMjU2OTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDY0MDk3MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEtWTSBjb2RlLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uLiBga3ZtX3RkcF9tbXVfbWFwYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGFnZSBmYXVsdCBwYXRoLCBidXQgdGhlIHJlYWwgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBjYXBhYmlsaXRpZXMgYXJlIGBrdm1fYXJjaF92bV9pb2N0bGAgZm9yIGBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPR2AgYW5kIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgZm9yIGBLVk1fQ0FQX0VWRVJfTUFQUEVEYC4gVGhvc2UgdHdvIGFyZSBkZWZpbml0ZWx5IHdvcnRoIHByaW9yaXRpemluZyBpbiBteSBhbmFseXNpcywgYWxvbmcgd2l0aCB0aGUgYHRkcF9tbXVfbWFwYCBmdW5jdGlvbiwgd2hpY2ggYXBwZWFycyBjZW50cmFsIHRvIHRoZSBURFAgTU1VIG9wZXJhdGlvbnMuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgcGF0Y2ggdG91Y2hlcyBgYXJjaC94ODYva3ZtL3g4Ni5jYCBhbmQgYGFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBzcGVjaWZpYyB0byB4ODYgS1ZNLiBUaGUgcHJlc2VuY2Ugb2YgYHRkcF9lbmFibGVkYCBjb25maXJtcyB0aGF0LiBJIGtub3cgYENPTkZJR19LVk1gIGlzIGEgZ2l2ZW4sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyBlbHNlLiBMZXQncyBjaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTY0LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjE4OjQ5LjU2NjQyNTE4MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NjY2NzE5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc9MTY9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTctXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjE4OmNvbmZpZyBLVk1cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMC1cXG5hcmNoL21pcHMva3ZtL0tjb25maWc6MzE6Y29uZmlnIEtWTV9NSVBTX0RFQlVHX0NPUDBfQ09VTlRFUlNcXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzItXFx0Ym9vbCBcXFwiTWFpbnRhaW4gY291bnRlcnMgZm9yIENPUDAgYWNjZXNzZXNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNjpjb25maWcgS1ZNX0JPT0szU19IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI3LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI5OmNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzAtXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozNDpjb25maWcgS1ZNX0JPT0szU182NF9IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNy1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mzg6Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzktXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ0LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0NTpjb25maWcgS1ZNX0JPT0szU18zMlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzMyIHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjUtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyNjpjb25maWcgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjctXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyOTpjb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIkRldGFpbGVkIHRpbWluZyBmb3IgdGhlIFA5IGVudHJ5IHBvaW50XFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDMtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgdGltaW5nIGZvciBoeXBlcnZpc29yIHJlYWwtbW9kZSBjb2RlIChmb3IgUE9XRVI4KVxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNTYtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE1Nzpjb25maWcgS1ZNX0JPT0szU19IVl9ORVNURURfUE1VX1dPUktBUk9VTkRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIk5lc3RlZCBMMCBob3N0IHdvcmthcm91bmQgZm9yIEwxIEtWTSBob3N0IFBNVSBoYW5kbGluZyBidWdcXFwiIGlmIEVYUEVSVFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BNVVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIkh5cGVydmlzb3IgUGVyZiBldmVudHMgZm9yIEtWTSBCb29rM3MtSFZcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTgzLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODQ6Y29uZmlnIEtWTV9CT09LRV9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODUtXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODYtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4Nzpjb25maWcgS1ZNX0VYSVRfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJEZXRhaWxlZCBleGl0IHRpbWluZ1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTctXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE5ODpjb25maWcgS1ZNX0U1MDBWMlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTktXFx0Ym9vbCBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMHYyIHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEyLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMTM6Y29uZmlnIEtWTV9FNTAwTUNcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjE0LVxcdGJvb2wgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDBNQy9FNTUwMC9FNjUwMCBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fTVBJQ1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbCBcXFwiS1ZNIGluLWtlcm5lbCBNUElDIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDAtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI0MTpjb25maWcgS1ZNX1hJQ1NcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQyLVxcdGJvb2wgXFxcIktWTSBpbi1rZXJuZWwgWElDUyBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUwLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTE6Y29uZmlnIEtWTV9YSVZFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1Mi1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc9MjI9c291cmNlIFxcXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21pY3Jvd2F0dC9LY29uZmlnXFxcIlxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yMy1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc6MjQ6Y29uZmlnIEtWTV9HVUVTVFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9ODM5PXNvdXJjZSBcXFwiYXJjaC94ODYveGVuL0tjb25maWdcXFwiXFxuYXJjaC94ODYvS2NvbmZpZy04NDAtXFxuYXJjaC94ODYvS2NvbmZpZzo4NDE6Y29uZmlnIEtWTV9HVUVTVFxcbmFyY2gveDg2L0tjb25maWctODQyLVxcdGJvb2wgXFxcIktWTSBHdWVzdCBzdXBwb3J0IChpbmNsdWRpbmcga3ZtY2xvY2spXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctMy1cXG52aXJ0L2t2bS9LY29uZmlnOjQ6Y29uZmlnIEtWTV9DT01NT05cXG52aXJ0L2t2bS9LY29uZmlnLTUtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9Mzk9Y29uZmlnIE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNDItXFxudmlydC9rdm0vS2NvbmZpZzo0Mzpjb25maWcgS1ZNX01NSU9cXG52aXJ0L2t2bS9LY29uZmlnLTQ0LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy00NS1cXG52aXJ0L2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fQVNZTkNfUEZcXG52aXJ0L2t2bS9LY29uZmlnLTQ3LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTQ5LSMgVG9nZ2xlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpcmVjdCBub3RpZmljYXRpb24gYW5kIGJhdGNoIGpvYlxcbnZpcnQva3ZtL0tjb25maWc6NTA6Y29uZmlnIEtWTV9BU1lOQ19QRl9TWU5DXFxudmlydC9rdm0vS2NvbmZpZy01MS0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz01OT1jb25maWcgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy02MS1cXG52aXJ0L2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fVkZJT1xcbnZpcnQva3ZtL0tjb25maWctNjMtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9NjU9Y29uZmlnIEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy02Ny1cXG52aXJ0L2t2bS9LY29uZmlnOjY4OmNvbmZpZyBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG52aXJ0L2t2bS9LY29uZmlnLTY5LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy03MC1cXG52aXJ0L2t2bS9LY29uZmlnOjcxOmNvbmZpZyBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxudmlydC9rdm0vS2NvbmZpZy03Mi0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNzMtXFxudmlydC9rdm0vS2NvbmZpZzo3NDpjb25maWcgS1ZNX0NPTVBBVFxcbnZpcnQva3ZtL0tjb25maWctNzUtICAgICAgIGRlZl9ib29sIHlcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9OTE9Y29uZmlnIEhBVkVfS1ZNX1BNX05PVElGSUVSXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTkzLVxcbnZpcnQva3ZtL0tjb25maWc6OTQ6Y29uZmlnIEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxudmlydC9rdm0vS2NvbmZpZy05NS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctOTYtXFxudmlydC9rdm0vS2NvbmZpZzo5Nzpjb25maWcgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbnZpcnQva3ZtL0tjb25maWctOTgtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTk5LVxcbnZpcnQva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXFxudmlydC9rdm0vS2NvbmZpZy0xMDEtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cXG52aXJ0L2t2bS9LY29uZmlnOjEwMzpjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG52aXJ0L2t2bS9LY29uZmlnLTEwNC0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctMTA1LVxcbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxODo1MS45NTMwOTgyNDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzNDI0ODQ2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBFdmVyLU1hcHBlZCBUcmFja2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1ZNIGZ1bmN0aW9uYWxpdHkg4oCTIHRoZSBcImV2ZXItbWFwcGVkXCIgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIGBLVk1gIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIGBYODZfNjRgIGlzIGltcGxpY2l0bHkgcmVxdWlyZWQgZHVlIHRvIHRoZSBgdGRwX2VuYWJsZWRgIGNoZWNrLCB3aGljaCBzZWVtcyB0byByZXF1aXJlIHRoZSA2NC1iaXQgYXJjaGl0ZWN0dXJlLiBTbywgcHJpbWFyaWx5LCBgS1ZNYCBpcyB3aGF0IHdlIG5lZWQgdG8gZm9jdXMgb24uXG5cbkkgY2hlY2tlZCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBJIGNvbmZpcm1lZCB0aGF0IGB0ZHBfZW5hYmxlZGAgaXMgcmVxdWlyZWQsIHdoaWNoIGlzIHRydWUgYnkgZGVmYXVsdCBmb3IgSW50ZWwgRVBUIGFuZCBBTUQgTlBULiBUaGlzIGNvbmZpcm1zIHRoZSBpbXBvcnRhbmNlIG9mIEtWTSBiZWluZyBlbmFibGVkLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBjb2RlIGZsb3cuIEkgd2FudCB0byBoaWdobGlnaHQgc29tZSBrZXkgc3ltYm9scyB0aGF0IHJldmVhbCBob3cgdGhpcyBuZXcgdHJhY2tpbmcgd29ya3MuIEkgZmlndXJlZCBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBhbmQgYGt2bV90ZHBfbW11X21hcGAgYXJlIHJlbGV2YW50IGVudHJ5IHBvaW50cy4gSSdtIGZvY3VzaW5nIG9uIGBrdm1fdGRwX21tdV9tYXBgIGJlY2F1c2UgaXQncyB3aGVyZSB0aGUgVERQIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nIG9jY3VycyBhbmQgd2hlcmUgd2UnbGwgZmluZCB0aGUgbG9naWMgZm9yIHNldHRpbmcgdGhlIGV2ZXItbWFwcGVkIGJpdHMuXG5cbkkgY29uZmlybWVkIHRoYXQgYGt2bV90ZHBfbW11X21hcGAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIFREUCBNTVUgcGFnZSBmYXVsdHMgaW4gYGFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jYC4gSSBjaGVja2VkIGZvciBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHNgLCBidXQgYGt2bV90ZHBfbW11X21hcGAgaXMgdGhlIGNydWNpYWwgb25lIGJlY2F1c2UgaXQncyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBuZXcgU1BURXMsIHdoaWNoIHRoZW4gdHJpZ2dlcnMgdGhlIGV2ZXItbWFwcGVkIHRyYWNraW5nIGxvZ2ljLlxuXG5SZXZpc2l0aW5nIHRoZSBmb2N1cyBzeW1ib2xzOiBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBhbmQgZXNwZWNpYWxseSBga3ZtX3RkcF9tbXVfbWFwYC5cblxuVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogVGhlIG5ldyBLVk0gY2FwYWJpbGl0eSBgS1ZNX0NBUF9FVkVSX01BUFBFRGAgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPR2AgaW9jdGwgYWxsb3cgdXMgdG8gdHJhY2sgZ3Vlc3QgcGFnZXMgdGhhdCBoYXZlIGJlZW4gbWFwcGVkLiBUaGlzIGlzIGFjY2Vzc2VkIHRocm91Z2ggS1ZNIGlvY3Rscywgc28gd2UncmUgbG9va2luZyBhdCBhIHVzZXItc3BhY2UtYWNjZXNzaWJsZSBmZWF0dXJlLiBUaGUgcGF0Y2ggcmVxdWlyZXMgYm90aCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfWDg2XzY0YCwgd2l0aCBLVk0gYmVpbmcgdGhlIGNyaXRpY2FsIG9uZS4gVGhlIGNvcmUgb2YgdGhpcyB0cmFja2luZyBvY2N1cnMgd2l0aGluIHRoZSBpb2N0bCBlbnRyeSBwb2ludHMgYW5kIHRoZSBURFAgTU1VIHBhZ2UgZmF1bHQgaGFuZGxlci5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGBrdm1fdGRwX21tdV9tYXBgLiBZZXMsIGl0J3MgY2FsbGVkIGR1cmluZyBwYWdlIGZhdWx0cyBhbmQgU1BURSBjcmVhdGlvbi4gTG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuXHRpZiAodW5saWtlbHkoa3ZtLVx1MDAzZWFyY2guZXZlcl9tYXBwZWRfYml0bWFwKSBcdTAwMjZcdTAwMjZcblx0ICAgIGlzX2xlYWYgXHUwMDI2XHUwMDI2ICF3YXNfbGVhZikge1xuXHRcdGt2bV9ldmVyX21hcHBlZF9zZXRfcmFuZ2Uoa3ZtLCBnZm4sIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKTtcblx0fVxuYGBgXG5cblRoaXMgc25pcHBldCBpbnNpZGUgYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAgaXMgd2hhdCB3ZSdyZSBsb29raW5nIGZvciwgY29uZmlybWluZyB0aGF0IGBrdm1fdGRwX21tdV9tYXBgIGlzIHRoZSByaWdodCBwbGFjZS5cblNwZWNpZmljYWxseSwgYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAgaXMgY2FsbGVkIGJ5IGB0ZHBfbW11X3NldF9zcHRlX2F0b21pY2AsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGJ5IGBrdm1fdGRwX21tdV9tYXBgLiBUaGlzIGNvbmZpcm1zIHdlJ3JlIG9uIHRoZSByaWdodCB0cmFjayEgVGltZSB0byBydW4gdGhlIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTk1LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoxOTowNi4yOTU1ODU4MThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY5NDA5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfZW5hYmxlX2NhcFwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gY2FwYWJpbGl0eSBgS1ZNX0NBUF9FVkVSX01BUFBFRGAgYW5kIGEgbmV3IGlvY3RsIGBLVk1fR0VUX0VWRVJfTUFQUEVEX0xPR2AgdG8gdHJhY2sgd2hpY2ggZ3Vlc3QgcGFnZXMgaGF2ZSBldmVyIGJlZW4gbWFwcGVkLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3Rscy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19LVk1gIGFuZCBpcyBzcGVjaWZpYyB0byB4ODYuIFdlIGZvY3VzIG9uIHRoZSBpb2N0bCBlbnRyeSBwb2ludHMgYW5kIHRoZSBURFAgTU1VIHBhZ2UgZmF1bHQgaGFuZGxlciB3aGVyZSB0aGUgdHJhY2tpbmcgaXMgdXBkYXRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBcIixcbiAgICBcImt2bV90ZHBfbW11X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGNhcGFiaWxpdHkgYEtWTV9DQVBfRVZFUl9NQVBQRURgIGFuZCBhIG5ldyBpb2N0bCBgS1ZNX0dFVF9FVkVSX01BUFBFRF9MT0dgIHRvIHRyYWNrIHdoaWNoIGd1ZXN0IHBhZ2VzIGhhdmUgZXZlciBiZWVuIG1hcHBlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfS1ZNYCBhbmQgaXMgc3BlY2lmaWMgdG8geDg2LiBXZSBmb2N1cyBvbiB0aGUgaW9jdGwgZW50cnkgcG9pbnRzIGFuZCB0aGUgVERQIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgd2hlcmUgdGhlIHRyYWNraW5nIGlzIHVwZGF0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwd279[1] Phase: Succeeded StartedAt: 2026-08-01 16:19:17 +0000 UTC FinishedAt: 2026-08-01 16:19:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 16:19:17 +0000 UTC FinishedAt: 2026-08-01 16:19:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2] Phase: Succeeded StartedAt: 2026-08-01 16:19:17 +0000 UTC FinishedAt: 2026-08-01 20:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 16:19:17 +0000 UTC FinishedAt: 2026-08-01 20:08:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 16:19:17 +0000 UTC FinishedAt: 2026-08-01 16:19:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 16:19:17 +0000 UTC FinishedAt: 2026-08-01 16:19:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowwd279/series-workflowwd279-convert-artifact-2598382069/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 16:19:27 +0000 UTC FinishedAt: 2026-08-01 16:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 16:19:27 +0000 UTC FinishedAt: 2026-08-01 16:37:30 +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:*9c53c32b-0e2e-4a43-a3b4-bcc2ff29869a,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-workflowwd279/series-workflowwd279-convert-artifact-2598382069/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": "9a36c432-fd77-41b3-9c40-adcf22b3554f", "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-workflowwd279/series-workflowwd279-build-action-3741549531/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 16:19:27 +0000 UTC FinishedAt: 2026-08-01 16:37:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9c53c32b-0e2e-4a43-a3b4-bcc2ff29869a,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-workflowwd279/series-workflowwd279-convert-artifact-2598382069/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": "9a36c432-fd77-41b3-9c40-adcf22b3554f", "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-workflowwd279/series-workflowwd279-build-action-3741549531/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 16:37:30 +0000 UTC FinishedAt: 2026-08-01 16:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 16:37:30 +0000 UTC FinishedAt: 2026-08-01 16:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 16:37:30 +0000 UTC FinishedAt: 2026-08-01 16:37:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 16:37:30 +0000 UTC FinishedAt: 2026-08-01 16:37:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowwd279/series-workflowwd279-convert-artifact-3539978064/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 16:37:50 +0000 UTC FinishedAt: 2026-08-01 16:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 16:37:50 +0000 UTC FinishedAt: 2026-08-01 16:39:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a36c432-fd77-41b3-9c40-adcf22b3554f,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-workflowwd279/series-workflowwd279-build-action-3741549531/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-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 16:39:49 +0000 UTC FinishedAt: 2026-08-01 16:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 16:39:49 +0000 UTC FinishedAt: 2026-08-01 16:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 16:39:49 +0000 UTC FinishedAt: 2026-08-01 17:03:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 16:39:49 +0000 UTC FinishedAt: 2026-08-01 17:03:15 +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:*9c53c32b-0e2e-4a43-a3b4-bcc2ff29869a,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-workflowwd279/series-workflowwd279-convert-artifact-3539978064/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": "3b38eb12-7616-4a73-acfe-3180d90bf777", "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-workflowwd279/series-workflowwd279-build-action-446989516/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 16:39:49 +0000 UTC FinishedAt: 2026-08-01 17:03:05 +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:*9c53c32b-0e2e-4a43-a3b4-bcc2ff29869a,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-workflowwd279/series-workflowwd279-convert-artifact-3539978064/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": "3b38eb12-7616-4a73-acfe-3180d90bf777", "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-workflowwd279/series-workflowwd279-build-action-446989516/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 17:03:15 +0000 UTC FinishedAt: 2026-08-01 17:03:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 17:03:15 +0000 UTC FinishedAt: 2026-08-01 17:03:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 17:03:15 +0000 UTC FinishedAt: 2026-08-01 17:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 17:03:15 +0000 UTC FinishedAt: 2026-08-01 17:05:11 +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:*3b38eb12-7616-4a73-acfe-3180d90bf777,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-workflowwd279/series-workflowwd279-build-action-446989516/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-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 17:05:23 +0000 UTC FinishedAt: 2026-08-01 20:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 17:05:23 +0000 UTC FinishedAt: 2026-08-01 20:08:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"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:*9a36c432-fd77-41b3-9c40-adcf22b3554f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3b38eb12-7616-4a73-acfe-3180d90bf777,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-workflowwd279/series-workflowwd279-build-action-3741549531/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-workflowwd279/series-workflowwd279-build-action-446989516/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 17:05:23 +0000 UTC FinishedAt: 2026-08-01 17:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 17:05:23 +0000 UTC FinishedAt: 2026-08-01 17:05:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"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-workflowwd279/series-workflowwd279-convert-artifact-740784457/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 17:05:23 +0000 UTC FinishedAt: 2026-08-01 17:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 17:05:23 +0000 UTC FinishedAt: 2026-08-01 17:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 17:05:23 +0000 UTC FinishedAt: 2026-08-01 17:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 17:06:01 +0000 UTC FinishedAt: 2026-08-01 20:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwd279[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_vm_ioctl_enable_cap","kvm_tdp_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"e6b2ea7d-8d90-42da-a94e-5ee452f78d32","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 17:06:01 +0000 UTC FinishedAt: 2026-08-01 20:08:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a36c432-fd77-41b3-9c40-adcf22b3554f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3b38eb12-7616-4a73-acfe-3180d90bf777,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-workflowwd279/series-workflowwd279-build-action-3741549531/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-workflowwd279/series-workflowwd279-build-action-446989516/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-workflowwd279/series-workflowwd279-convert-artifact-740784457/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,}