Name: series-workflow78nnx Phase: Succeeded StartedAt: 2026-07-08 22:48:51 +0000 UTC FinishedAt: 2026-07-09 03:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[0] Phase: Succeeded StartedAt: 2026-07-08 22:48:51 +0000 UTC FinishedAt: 2026-07-08 23:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 22:48:51 +0000 UTC FinishedAt: 2026-07-08 23:07:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_PAGE_MONITOR", "USERFAULTFD", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_PAGE_MONITOR", "USERFAULTFD", "TRANSPARENT_HUGEPAGE" ], "series_id": "43fe9f45-0a8c-4ae8-8831-d7847559ac91" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "pagemap_scan_pte_hole" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZW1hcF9zY2FuX3B0ZV9ob2xlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIG9uIC9wcm9jL3BpZC9wYWdlbWFwIHRvIGNvcnJlY3RseSByZXBvcnQgdW5wb3B1bGF0ZWQgcmFuZ2VzIChQVEUgaG9sZXMpIGFzIHdyaXR0ZW4gd2hlbiB0aGUgVk1BIGhhcyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC9wcm9jZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzEyMTdmZTEwNTJkMTBkNzYzOTAxYThiYmIzOWExYmFkMDQyMDljYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMjM6MDY6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXG5pbmRleCBlNDMwMmZjZjAyMjdkNy4uZTQ3ZjcxY2QzMGE1OGEgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTMwNTAsMTIgJiM0MzszMDUwLDI4IEBAIHN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVx1MDAzZXZtYTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXM7XG4gXHRpbnQgcmV0LCBlcnI7XG4gXG4tXHRpZiAoIXZtYSB8fCAhcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UocC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5LCBwKSlcbiYjNDM7XHRpZiAoIXZtYSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuIHVucG9wdWxhdGVkIHJhbmdlIHdpdGggbm8gcGFnZSB0YWJsZSAtLSBlLmcuIGEgMk1CIGFub24gVEhQXG4mIzQzO1x0ICogZHJvcHBlZCB2aWEgTUFEVl9ET05UTkVFRCwgd2hpY2ggcGFnZW1hcF9wYWdlX2NhdGVnb3J5KCkgbmV2ZXIgc2Vlc1xuJiM0MztcdCAqIC0tIHJlYWRzIGFzIHdyaXR0ZW4gb24gYSB1ZmZkLXdwIFZNQSwgbWF0Y2hpbmcgdGhlIHB0ZV9ub25lIGNhc2VcbiYjNDM7XHQgKiB0aGVyZS4gUmVwb3J0aW5nIGl0IGFsc28gbGV0cyB0aGUgUE1fU0NBTl9XUF9NQVRDSElORyBhcm1pbmcgYmVsb3dcbiYjNDM7XHQgKiBpbnN0YWxsIG1hcmtlcnMgKHVmZmRfd3BfcmFuZ2UoKSBhbGxvY2F0ZXMgdGhlIHBhZ2UgdGFibGUgdW5kZXJcbiYjNDM7XHQgKiBXUF9VTlBPUFVMQVRFRCksIHNvIHRoZSBuZXh0IHNjYW4gc2VlcyBpdCBjbGVhbiB1bnRpbCByZS13cml0dGVuLlxuJiM0MztcdCAqL1xuJiM0MztcdGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnk7XG4mIzQzO1x0aWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkpXG4mIzQzO1x0XHRjYXRlZ29yaWVzIHw9IFBBR0VfSVNfV1JJVFRFTjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCwgYWRkciwgXHUwMDI2ZW5kKTtcbiYjNDM7XHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIGFkZHIsIFx1MDAyNmVuZCk7XG4gXHRpZiAoYWRkciA9PSBlbmQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCBmOWJjZmY4ZTc4ZmFiYi4uYTRlOGNjOGFlYTRiN2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTI1LDYgJiM0MzsyNSwxMCBAQFxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuJiM0MzsjaWZuZGVmIE1BRFZfQ09MTEFQU0VcbiYjNDM7I2RlZmluZSBNQURWX0NPTExBUFNFIDI1XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTExcdFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcdFxcXG4gXHRcdFx0XHRcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFx0XFxcbiBcdFx0XHRcdFx0IFBBR0VfSVNfU1dBUFBFRCB8IFBBR0VfSVNfUEZOWkVSTyB8XHRcXFxuQEAgLTExMDIsNiAmIzQzOzExMDYsNTkgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KHZvaWQpXG4gXHRtdW5tYXAobWVtLCBtZW1fc2l6ZSk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBIDJNQiBhbm9uIFRIUCBkcm9wcGVkIHdpdGggTUFEVl9ET05UTkVFRCBsZWF2ZXMgYSBwbWRfbm9uZSBob2xlIHdpdGggbm9cbiYjNDM7ICogcGFnZSB0YWJsZSwgd2hpY2ggcGFnZW1hcF9wYWdlX2NhdGVnb3J5KCkgbmV2ZXIgc2Vlcy4gUEFHRU1BUF9TQ0FOIG11c3RcbiYjNDM7ICogc3RpbGwgcmVwb3J0IGl0IGFzIHdyaXR0ZW4gb24gYSB1ZmZkLXdwIFZNQSwgdmlhIHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfdGhwX2hvbGVfdGVzdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBucGFnZXMsIHdyaXR0ZW4gPSAwLCByZXQsIGk7XG4mIzQzO1x0c3RydWN0IHBhZ2VfcmVnaW9uIHJlZ2lvbnNbMTZdO1xuJiM0MztcdGNoYXIgKmFyZWEsICptZW07XG4mIzQzO1xuJiM0MztcdGlmICghaHBhZ2Vfc2l6ZSkge1xuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwmIzM0OyVzIFRIUCBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdG5wYWdlcyA9IGhwYWdlX3NpemUgLyBwYWdlX3NpemU7XG4mIzQzO1xuJiM0MztcdC8qIEdldCBhIFBNRC1hbGlnbmVkIHJhbmdlIHNvIHRoZSByYW5nZSBjYW4gYmUgYSBzaW5nbGUgVEhQLiAqL1xuJiM0MztcdGFyZWEgPSBtbWFwKE5VTEwsIDIgKiBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuJiM0MztcdGlmIChhcmVhID09IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXMgbW1hcCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRtZW0gPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpYXJlYSAmIzQzOyBocGFnZV9zaXplIC0gMSkgXHUwMDI2IH4oaHBhZ2Vfc2l6ZSAtIDEpKTtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KG1lbSwgMSwgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0aWYgKG1hZHZpc2UobWVtLCBocGFnZV9zaXplLCBNQURWX0NPTExBUFNFKSB8fFxuJiM0MztcdCAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgMSwgaHBhZ2Vfc2l6ZSkpIHtcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDslcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0bXVubWFwKGFyZWEsIDIgKiBocGFnZV9zaXplKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHdwX2luaXQobWVtLCBocGFnZV9zaXplKTtcbiYjNDM7XG4mIzQzO1x0LyogRHJvcCB0aGUgd2hvbGUgUE1EOiBpdCBpcyBjbGVhcmVkIHRvIGEgcG1kX25vbmUgaG9sZS4gKi9cbiYjNDM7XHRpZiAobWFkdmlzZShtZW0sIGhwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIE1BRFZfRE9OVE5FRUQgZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBhZ2VtYXBfaW9jdGwobWVtLCBocGFnZV9zaXplLCByZWdpb25zLCAxNiwgMCwgMCxcbiYjNDM7XHRcdFx0ICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIHNjYW4gZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmV0OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHdyaXR0ZW4gJiM0Mzs9IExFTihyZWdpb25zW2ldKTtcbiYjNDM7XG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdCh3cml0dGVuID09IG5wYWdlcyxcbiYjNDM7XHRcdFx0IFwmIzM0OyVzIHBtZC1ob2xlIHJlcG9ydGVkIHdyaXR0ZW4gKCVsZCBvZiAlbGQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgX19mdW5jX18sIHdyaXR0ZW4sIG5wYWdlcyk7XG4mIzQzO1xuJiM0MztcdHdwX2ZyZWUobWVtLCBocGFnZV9zaXplKTtcbiYjNDM7XHRtdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBzYW5pdHlfdGVzdHModm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplO1xuQEAgLTE2MTAsNyAmIzQzOzE2NjcsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoNCkpXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0h1Z2VUTEIgdGVzdCB3aWxsIGJlIHNraXBwZWRcXG5cJiMzNDspO1xuIFxuLVx0a3NmdF9zZXRfcGxhbigxMTgpO1xuJiM0MztcdGtzZnRfc2V0X3BsYW4oMTE5KTtcbiBcbiBcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHRocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbkBAIC0xNzkwLDYgJiM0MzsxODQ3LDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdC8qIDE4LiBVbnBvcHVsYXRlZCBwdGUgc2Nhbi1wYXRoIGNvbnNpc3RlbmN5ICovXG4gXHR1bnBvcHVsYXRlZF9zY2FuX3Rlc3QoKTtcbiYjNDM7XHR1bnBvcHVsYXRlZF90aHBfaG9sZV90ZXN0KCk7XG4gXG4gXHRjbG9zZShwYWdlbWFwX2ZkKTtcbiBcdGtzZnRfZmluaXNoZWQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX1BBR0VfTU9OSVRPUiYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VtYXBfc2Nhbl9wdGVfaG9sZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBvbiAvcHJvYy9waWQvcGFnZW1hcCB0byBjb3JyZWN0bHkgcmVwb3J0IHVucG9wdWxhdGVkIHJhbmdlcyAoUFRFIGhvbGVzKSBhcyB3cml0dGVuIHdoZW4gdGhlIFZNQSBoYXMgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBlbmFibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQvcHJvY2ZzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzEyMTdmZTEwNTJkMTBkNzYzOTAxYThiYmIzOWExYmFkMDQyMDljYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMjM6MDY6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmMKaW5kZXggZTQzMDJmY2YwMjI3ZDcuLmU0N2Y3MWNkMzBhNThhIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0zMDUwLDEyICYjNDM7MzA1MCwyOCBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogewogCXN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCA9IHdhbGstJmd0O3ByaXZhdGU7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLSZndDt2bWE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllczsKIAlpbnQgcmV0LCBlcnI7CiAKLQlpZiAoIXZtYSB8fCAhcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UocC0mZ3Q7Y3VyX3ZtYV9jYXRlZ29yeSwgcCkpCiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFuIHVucG9wdWxhdGVkIHJhbmdlIHdpdGggbm8gcGFnZSB0YWJsZSAtLSBlLmcuIGEgMk1CIGFub24gVEhQCiYjNDM7CSAqIGRyb3BwZWQgdmlhIE1BRFZfRE9OVE5FRUQsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXMKJiM0MzsJICogLS0gcmVhZHMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBtYXRjaGluZyB0aGUgcHRlX25vbmUgY2FzZQomIzQzOwkgKiB0aGVyZS4gUmVwb3J0aW5nIGl0IGFsc28gbGV0cyB0aGUgUE1fU0NBTl9XUF9NQVRDSElORyBhcm1pbmcgYmVsb3cKJiM0MzsJICogaW5zdGFsbCBtYXJrZXJzICh1ZmZkX3dwX3JhbmdlKCkgYWxsb2NhdGVzIHRoZSBwYWdlIHRhYmxlIHVuZGVyCiYjNDM7CSAqIFdQX1VOUE9QVUxBVEVEKSwgc28gdGhlIG5leHQgc2NhbiBzZWVzIGl0IGNsZWFuIHVudGlsIHJlLXdyaXR0ZW4uCiYjNDM7CSAqLwomIzQzOwljYXRlZ29yaWVzID0gcC0mZ3Q7Y3VyX3ZtYV9jYXRlZ29yeTsKJiM0MzsJaWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkpCiYjNDM7CQljYXRlZ29yaWVzIHw9IFBBR0VfSVNfV1JJVFRFTjsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtJmd0O2N1cl92bWFfY2F0ZWdvcnksIHAsIGFkZHIsICZhbXA7ZW5kKTsKJiM0MzsJcmV0ID0gcGFnZW1hcF9zY2FuX291dHB1dChjYXRlZ29yaWVzLCBwLCBhZGRyLCAmYW1wO2VuZCk7CiAJaWYgKGFkZHIgPT0gZW5kKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggZjliY2ZmOGU3OGZhYmIuLmE0ZThjYzhhZWE0YjdjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCkBAIC0yNSw2ICYjNDM7MjUsMTAgQEAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAomIzQzOyNpZm5kZWYgTUFEVl9DT0xMQVBTRQomIzQzOyNkZWZpbmUgTUFEVl9DT0xMQVBTRSAyNQomIzQzOyNlbmRpZgomIzQzOwogI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMCQkoUEFHRV9JU19XUEFMTE9XRUQgfCBQQUdFX0lTX1dSSVRURU4gfAlcCiAJCQkJCSBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfAlcCiAJCQkJCSBQQUdFX0lTX1NXQVBQRUQgfCBQQUdFX0lTX1BGTlpFUk8gfAlcCkBAIC0xMTAyLDYgJiM0MzsxMTA2LDU5IEBAIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKQogCW11bm1hcChtZW0sIG1lbV9zaXplKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSAyTUIgYW5vbiBUSFAgZHJvcHBlZCB3aXRoIE1BRFZfRE9OVE5FRUQgbGVhdmVzIGEgcG1kX25vbmUgaG9sZSB3aXRoIG5vCiYjNDM7ICogcGFnZSB0YWJsZSwgd2hpY2ggcGFnZW1hcF9wYWdlX2NhdGVnb3J5KCkgbmV2ZXIgc2Vlcy4gUEFHRU1BUF9TQ0FOIG11c3QKJiM0MzsgKiBzdGlsbCByZXBvcnQgaXQgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCB2aWEgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfdGhwX2hvbGVfdGVzdCh2b2lkKQomIzQzO3sKJiM0MzsJbG9uZyBucGFnZXMsIHdyaXR0ZW4gPSAwLCByZXQsIGk7CiYjNDM7CXN0cnVjdCBwYWdlX3JlZ2lvbiByZWdpb25zWzE2XTsKJiM0MzsJY2hhciAqYXJlYSwgKm1lbTsKJiM0MzsKJiM0MzsJaWYgKCFocGFnZV9zaXplKSB7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslcyBUSFAgbm90IHN1cHBvcnRlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlucGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZV9zaXplOwomIzQzOwomIzQzOwkvKiBHZXQgYSBQTUQtYWxpZ25lZCByYW5nZSBzbyB0aGUgcmFuZ2UgY2FuIGJlIGEgc2luZ2xlIFRIUC4gKi8KJiM0MzsJYXJlYSA9IG1tYXAoTlVMTCwgMiAqIGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiYjNDM7CWlmIChhcmVhID09IE1BUF9GQUlMRUQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBtbWFwIGZhaWxlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJbWVtID0gKGNoYXIgKikoKCh1bnNpZ25lZCBsb25nKWFyZWEgJiM0MzsgaHBhZ2Vfc2l6ZSAtIDEpICZhbXA7IH4oaHBhZ2Vfc2l6ZSAtIDEpKTsKJiM0MzsKJiM0MzsJbWVtc2V0KG1lbSwgMSwgaHBhZ2Vfc2l6ZSk7CiYjNDM7CWlmIChtYWR2aXNlKG1lbSwgaHBhZ2Vfc2l6ZSwgTUFEVl9DT0xMQVBTRSkgfHwKJiM0MzsJICAgICFjaGVja19odWdlX2Fub24obWVtLCAxLCBocGFnZV9zaXplKSkgewomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7JXMgY291bGQgbm90IGZvcm0gYSBUSFBcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQltdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdwX2luaXQobWVtLCBocGFnZV9zaXplKTsKJiM0MzsKJiM0MzsJLyogRHJvcCB0aGUgd2hvbGUgUE1EOiBpdCBpcyBjbGVhcmVkIHRvIGEgcG1kX25vbmUgaG9sZS4gKi8KJiM0MzsJaWYgKG1hZHZpc2UobWVtLCBocGFnZV9zaXplLCBNQURWX0RPTlRORUVEKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVzIE1BRFZfRE9OVE5FRUQgZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwomIzQzOwlyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgaHBhZ2Vfc2l6ZSwgcmVnaW9ucywgMTYsIDAsIDAsCiYjNDM7CQkJICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBzY2FuIGZhaWxlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHJldDsgaSYjNDM7JiM0MzspCiYjNDM7CQl3cml0dGVuICYjNDM7PSBMRU4ocmVnaW9uc1tpXSk7CiYjNDM7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQod3JpdHRlbiA9PSBucGFnZXMsCiYjNDM7CQkJICYjMzQ7JXMgcG1kLWhvbGUgcmVwb3J0ZWQgd3JpdHRlbiAoJWxkIG9mICVsZClcbiYjMzQ7LAomIzQzOwkJCSBfX2Z1bmNfXywgd3JpdHRlbiwgbnBhZ2VzKTsKJiM0MzsKJiM0MzsJd3BfZnJlZShtZW0sIGhwYWdlX3NpemUpOwomIzQzOwltdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKIGludCBzYW5pdHlfdGVzdHModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplOwpAQCAtMTYxMCw3ICYjNDM7MTY2Nyw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoNCkpCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7SHVnZVRMQiB0ZXN0IHdpbGwgYmUgc2tpcHBlZFxuJiMzNDspOwogCi0Ja3NmdF9zZXRfcGxhbigxMTgpOwomIzQzOwlrc2Z0X3NldF9wbGFuKDExOSk7CiAKIAlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOwogCWhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwpAQCAtMTc5MCw2ICYjNDM7MTg0Nyw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkvKiAxOC4gVW5wb3B1bGF0ZWQgcHRlIHNjYW4tcGF0aCBjb25zaXN0ZW5jeSAqLwogCXVucG9wdWxhdGVkX3NjYW5fdGVzdCgpOwomIzQzOwl1bnBvcHVsYXRlZF90aHBfaG9sZV90ZXN0KCk7CiAKIAljbG9zZShwYWdlbWFwX2ZkKTsKIAlrc2Z0X2ZpbmlzaGVkKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTW9kaWZpY2F0aW9ucyB0byBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQgc2VlbXMgdG8gdG91Y2ggdHdvIGFyZWFzOiBgZnMvcHJvYy90YXNrX21tdS5jYCBhbmQgYSBzZWxmdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jYC4gTXkgZm9jdXMgaXMgcHJpbWFyaWx5IG9uIHRoZSBjb3JlIGNoYW5nZSB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgdXNlcmZhdWx0ZmRfd3Aodm1hKWAgY2hlY2sgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGFsb25nIHdpdGggc2V0dGluZyBgUEFHRV9JU19XUklUVEVOYCBpbiBgY2F0ZWdvcmllc2AgaWYgdGhhdCBjaGVjayBwYXNzZXMuCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgc28gSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgZnMvcHJvYy90YXNrX21tdS5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGZ1bmN0aW9uLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgY29uZmlndXJhdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoaXMgYmVoYXZpb3IsIG9yIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHdyaXRlIHByb3RlY3Rpb24uIEkgdGhpbmsgdGhlIHF1aWNrZXN0IHdheSB0byB6ZXJvIGluIG9uIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGlzIHRvIHVzZSBgZ3JlcHBlcmAsIGFzIHRoYXQgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBjb25kaXRpb25hbHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgdGhlIGNvZGUgbWlnaHQgaGF2ZSwgb3Igb3RoZXIgY29kZSB1c2luZyB0aGVzZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlbWFwX3NjYW5fcHRlX2hvbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTMwNDE9c3RhdGljIGludCBwYWdlbWFwX3NjYW5faHVnZXRsYl9ob2xlX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ3LVxuZnMvcHJvYy90YXNrX21tdS5jOjMwNDg6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ5LVx0XHRcdFx0IGludCBkZXB0aCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTMwOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwYWdlbWFwX3NjYW5fb3BzID0ge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDkzLVx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5NDpcdC5wdGVfaG9sZSA9IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDk1LVx0Lmh1Z2V0bGJfZW50cnkgPSBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTc2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBmcy9wcm9jL3Rhc2tfbW11LmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBgZnMvcHJvYy90YXNrX21tdS5jYCBmaWxlLiBUaGlzIG1lYW5zIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcyDigJMgdGhlIEtjb25maWcgc3ltYm9scyB0aGF0LCB3aGVuIHNldCwgd2lsbCB1bHRpbWF0ZWx5IGNhdXNlIHRoaXMgcGFydGljdWxhciBzb3VyY2UgZmlsZSB0byBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIG1ldGhvZHMgZm9yIHRoaXMgc29ydCBvZiBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBgZmluZGAgYW5kIHRoZW4gYGdyZXBgIGNvbWJvIHRvIGxvb2sgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBvciBtYXliZSBkaXZlIHJpZ2h0IGludG8gYSBjcm9zcy1yZWZlcmVuY2VkIGJ1aWxkIHN5c3RlbSBvdXRwdXQuIERlcGVuZGluZyBvbiBob3cgdGhlIGJ1aWxkIHN5c3RlbSBpcyBzdHJ1Y3R1cmVkLCB0aGVyZSBtYXkgYmUgYSBzaG9ydGN1dCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIGRpcmVjdGx5LCBvciBJIG1pZ2h0IGhhdmUgdG8gZ28gdGhyb3VnaCBhIGNhc2NhZGUgb2YgaW5jbHVkZXMgYW5kIGRlcGVuZGVuY2llcy4gSXTigJlzIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBwcm9jZXNzIGluZm9ybWF0aW9uLCBvciBwb3NzaWJseSBldmVuIHNlY3VyaXR5IGZlYXR1cmVzIHRoYXQgdXNlIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0uIEkmIzM5O20gZXhwZWN0aW5nIGl0IHRvIGJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFzIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBmb2N1c2VkIGFyZWEgb2YgdGhlIGtlcm5lbC4gSG9wZWZ1bGx5LCBpdOKAmXMgbm90IHRvbyBkZWVwbHkgYnVyaWVkIGluIGEgY29tcGxleCBkZXBlbmRlbmN5IGNoYWluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rhc2tfbW11Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvTWFrZWZpbGU9Nj1vYmoteSAgICYjNDM7PSBwcm9jLm9cbmZzL3Byb2MvTWFrZWZpbGUtNy1cbmZzL3Byb2MvTWFrZWZpbGU6ODpDRkxBR1NfdGFza19tbXUub1x0JiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuZnMvcHJvYy9NYWtlZmlsZS05LXByb2MteVx0XHRcdDo9IG5vbW11Lm8gdGFza19ub21tdS5vXG5mcy9wcm9jL01ha2VmaWxlOjEwOnByb2MtJChDT05GSUdfTU1VKVx0Oj0gdGFza19tbXUub1xuZnMvcHJvYy9NYWtlZmlsZS0xMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjAxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBgQ09ORklHX01NVWAgaXMgdGhlIHRyaWdnZXIgaGVyZSwgYW5kIHRoYXQgcHVsbHMgaW4gYHRhc2tfbW11Lm9gLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gQnV0IHRoZSByZWFsIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9kaWZpY2F0aW9uIHRvIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgLiBBbmQgdGhhdCYjMzk7cyBwYXJ0IG9mIHRoZSBgcGFnZW1hcF9zY2FuX29wc2Agc3RydWN0dXJlLiBJbW1lZGlhdGVseSwgdGhhdCByaW5ncyBhbGFybSBiZWxsczogdGhpcyBpcyBjb25uZWN0ZWQgdG8gdGhlIGBQQUdFTUFQX1NDQU5gIGlvY3RsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHR3byBhcmUgaW50ZXJyZWxhdGVkIGFuZCB3aGF0IGNoYW5nZXMgdGhleSBhcmUgbWFraW5nIGFuZCB3aGF0IHRoYXQgbWVhbnMgZm9yIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZS4gVGltZSB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGB1c2VyZmF1bHRmZF93cGAuIEFuZCBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGNvbnRyb2wgdGhhdCBmdW5jdGlvbiBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgbWlnaHQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmZhdWx0ZmRfd3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU1NT1zdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYyLVx0LyogT25seSBjb3B5IFBURSBtYXJrZXJzIGlmIFVGRkQgcmVnaXN0ZXIgbWF0Y2hlcy4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYzOlx0aWYgKChzcmNtIFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1ApIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF93cChkc3Rfdm1hKSlcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTY0LVx0XHRkc3RtIHw9IFBURV9NQVJLRVJfVUZGRF9XUDtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU4Mj1wdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTkzLVx0LypcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTk0Olx0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2VzbiYjMzk7dCBuZWVkIHRoaXMgd2hvbGVcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTk1LVx0ICogdGhpbmcsIGJlY2F1c2Ugd2hlbiB6YXBwaW5nIGVpdGhlciBpdCBtZWFucyBpdCYjMzk7cyBkcm9wcGluZyB0aGVcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU5OC1cdCAqL1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1OTk6XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC02MDAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0xOTY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pc3Npbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjAwLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjAxOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIwMi17XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjExPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9wdGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjEzLXtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIxNDpcdHJldHVybiB1c2VyZmF1bHRmZF93cCh2bWEpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZF93cChwdGUpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMTc9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX2h1Z2VfcG1kX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIxOS17XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMjA6XHRyZXR1cm4gdXNlcmZhdWx0ZmRfd3Aodm1hKSBcdTAwMjZcdTAwMjYgcG1kX3VmZmRfd3AocG1kKTtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIyMS19XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjUyPWV4dGVybiB2b2lkIHVzZXJmYXVsdGZkX3VubWFwX2NvbXBsZXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjUzLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI1NDpleHRlcm4gYm9vbCB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNTU6ZXh0ZXJuIGJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjU2LVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjU3OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTI1OC17XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTktXHQvKiBPbmx5IHdyLXByb3RlY3QgbW9kZSB1c2VzIHB0ZSBtYXJrZXJzICovXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNjA6XHRpZiAoIXVzZXJmYXVsdGZkX3dwKHZtYSkpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNjEtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNzAtXHQgKi9cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI3MTpcdHJldHVybiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCh2bWEpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjcyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0zMTY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pc3Npbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzIwLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzIxOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTMyMi17XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9Mzk4PXN0YXRpYyBpbmxpbmUgYm9vbCB1ZmZkX2Rpc2FibGVfZmF1bHRfYXJvdW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwMi1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjQwMzpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDQte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwNy1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjQwODpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDkte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTQxMz1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc191ZmZkX3dpdGhvdXRfZXZlbnRfcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtNDE3LVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6NDE4OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQxOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBhIFBhZ2UgVGFibGUgU2NhbiBNb2RpZmljYXRpb24qKgoKQWxyaWdodCwgc28gc29tZW9uZSYjMzk7cyB0d2Vha2VkIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBncmFzcCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBub3cgY2hlY2tpbmcgYHVzZXJmYXVsdGZkX3dwKHZtYSlgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bC4gSXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlIGluIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGFuZCBgUEFHRU1BUF9TQ0FOYCBpb2N0bCBhcmUgY29ubmVjdGVkLiBOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFjdGl2YXRlIHRoaXMgYFBBR0VNQVBfU0NBTmAgZnVuY3Rpb25hbGl0eS4gSXMgaXQgYSBjb3JlIGZlYXR1cmUsIGEgZGVidWcgZmxhZywgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbiBpcyBjcnVjaWFsIGZvciBhc3Nlc3NpbmcgdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvZGUgY2hhbmdlLCBlc3BlY2lhbGx5IHdpdGhpbiBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIGFuZCBob3cgdGhvc2Ugc3Vic3lzdGVtcyBhcmUgY29uZmlndXJlZCB0byBvcGVyYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQUdFTUFQX1NDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MzI2OD1zdGF0aWMgbG9uZyBkb19wYWdlbWFwX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3My1cdHN3aXRjaCAoY21kKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI3NDpcdGNhc2UgUEFHRU1BUF9TQ0FOOlxuZnMvcHJvYy90YXNrX21tdS5jLTMyNzUtXHRcdHJldHVybiBkb19wYWdlbWFwX3NjYW4obW0sIGFyZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3OTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgUEFHRU1BUF9TQ0FOYCoqCgpBbHJpZ2h0LCBzbyBgUEFHRU1BUF9TQ0FOYOKApiB0aGF0JiMzOTtzIGFuIGBpb2N0bGAgc3BlY2lmaWNhbGx5IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBgL3Byb2MvJmx0O3BpZCZndDsvcGFnZW1hcGAgZmlsZSwgcmlnaHQ/IEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJJiMzOTt2ZSBkaXZlZCBpbnRvIHRoaXMgYXJlYSwgYnV0IHRoYXQgZmVlbHMgcmlnaHQuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQmIzM5O3MgdGhlIHByZXJlcXVpc2l0ZSBjb25maWd1cmF0aW9uPyBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIHRpZWQgdG8gYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAuIEJldHRlciBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYW5kIHZlcmlmeSB0aGF0IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzIGluZGVlZCB0aGUga2V5IGVuYWJsaW5nIGZhY3Rvci4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgbWFrZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAzNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IG9mIGEgUHJvY2VzcyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyBwYWdlIG1hcHBpbmcgZm9yIGEgc3BlY2lmaWMgdGFzay4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXI6IGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCB0aGUgcGFnZW1hcC4gVGhpcyBmaWxlIGlzIHdoZXJlIEkmIzM5O2QgYW50aWNpcGF0ZSB0aGUgY29yZSBsb2dpYyBmb3IgdHJhbnNsYXRpbmcgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIHBhcnRpY3VsYXIgcHJvY2VzcyDigJMgaXQmIzM5O3MgcHJhY3RpY2FsbHkgKmd1YXJhbnRlZWQqIHRvIGhvdXNlIHRoZSBgcGFnZW1hcGAgaW1wbGVtZW50YXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZnMvcHJvYy90YXNrX21tdS5jOjEyOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuZnMvcHJvYy90YXNrX21tdS5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTE5MzU9dHlwZWRlZiBzdHJ1Y3Qge1xuZnMvcHJvYy90YXNrX21tdS5jLTE5MzYtXHR1NjQgcG1lO1xuZnMvcHJvYy90YXNrX21tdS5jOjE5Mzc6fSBwYWdlbWFwX2VudHJ5X3Q7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTkzOC1cbmZzL3Byb2MvdGFza19tbXUuYzoxOTM5OnN0cnVjdCBwYWdlbWFwcmVhZCB7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk0MC1cdGludCBwb3MsIGxlbjtcdFx0LyogdW5pdHM6IFBNX0VOVFJZX0JZVEVTLCBub3QgYnl0ZXMgKi9cbmZzL3Byb2MvdGFza19tbXUuYzoxOTQxOlx0cGFnZW1hcF9lbnRyeV90ICpidWZmZXI7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk0Mi1cdGJvb2wgc2hvd19wZm47XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTE5NDctXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTk0ODojZGVmaW5lIFBNX0VOVFJZX0JZVEVTXHRcdHNpemVvZihwYWdlbWFwX2VudHJ5X3QpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk0OS0jZGVmaW5lIFBNX1BGUkFNRV9CSVRTXHRcdDU1XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTE5NjAtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTk2MTpzdGF0aWMgaW5saW5lIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncylcbmZzL3Byb2MvdGFza19tbXUuYy0xOTYyLXtcbmZzL3Byb2MvdGFza19tbXUuYzoxOTYzOlx0cmV0dXJuIChwYWdlbWFwX2VudHJ5X3QpIHsgLnBtZSA9IChmcmFtZSBcdTAwMjYgUE1fUEZSQU1FX01BU0spIHwgZmxhZ3MgfTtcbmZzL3Byb2MvdGFza19tbXUuYy0xOTY0LX1cbmZzL3Byb2MvdGFza19tbXUuYy0xOTY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjE5NjY6c3RhdGljIGludCBhZGRfdG9fcGFnZW1hcChwYWdlbWFwX2VudHJ5X3QgKnBtZSwgc3RydWN0IHBhZ2VtYXByZWFkICpwbSlcbmZzL3Byb2MvdGFza19tbXUuYy0xOTY3LXtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MTk3ND1zdGF0aWMgYm9vbCBfX2ZvbGlvX3BhZ2VfbWFwcGVkX2V4Y2x1c2l2ZWx5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xOTgwLVxuZnMvcHJvYy90YXNrX21tdS5jOjE5ODE6c3RhdGljIGludCBwYWdlbWFwX3B0ZV9ob2xlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuZnMvcHJvYy90YXNrX21tdS5jLTE5ODItXHRcdFx0ICAgIF9fYWx3YXlzX3VudXNlZCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuZnMvcHJvYy90YXNrX21tdS5jLTE5ODMte1xuZnMvcHJvYy90YXNrX21tdS5jOjE5ODQ6XHRzdHJ1Y3QgcGFnZW1hcHJlYWQgKnBtID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuZnMvcHJvYy90YXNrX21tdS5jLTE5ODUtXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydDtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk4OS1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBmaW5kX3ZtYSh3YWxrLVx1MDAzZW1tLCBhZGRyKTtcbmZzL3Byb2MvdGFza19tbXUuYzoxOTkwOlx0XHRwYWdlbWFwX2VudHJ5X3QgcG1lID0gbWFrZV9wbWUoMCwgMCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk5MS1cdFx0LyogRW5kIG9mIGFkZHJlc3Mgc3BhY2UgaG9sZSwgd2hpY2ggd2UgbWFyayBhcyBub24tcHJlc2VudC4gKi9cbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk5OS1cdFx0Zm9yICg7IGFkZHIgXHUwMDNjIGhvbGVfZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUpIHtcbmZzL3Byb2MvdGFza19tbXUuYzoyMDAwOlx0XHRcdGVyciA9IGFkZF90b19wYWdlbWFwKFx1MDAyNnBtZSwgcG0pO1xuZnMvcHJvYy90YXNrX21tdS5jLTIwMDEtXHRcdFx0aWYgKGVycilcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjAxMS1cdFx0Zm9yICg7IGFkZHIgXHUwMDNjIG1pbihlbmQsIHZtYS1cdTAwM2V2bV9lbmQpOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUpIHtcbmZzL3Byb2MvdGFza19tbXUuYzoyMDEyOlx0XHRcdGVyciA9IGFkZF90b19wYWdlbWFwKFx1MDAyNnBtZSwgcG0pO1xuZnMvcHJvYy90YXNrX21tdS5jLTIwMTMtXHRcdFx0aWYgKGVycilcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjAyMC1cbmZzL3Byb2MvdGFza19tbXUuYzoyMDIxOnN0YXRpYyBwYWdlbWFwX2VudHJ5X3QgcHRlX3RvX3BhZ2VtYXBfZW50cnkoc3RydWN0IHBhZ2VtYXByZWFkICpwbSxcbmZzL3Byb2MvdGFza19tbXUuYy0yMDIyLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIwODctI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuZnMvcHJvYy90YXNrX21tdS5jOjIwODg6c3RhdGljIGludCBwYWdlbWFwX3BtZF9yYW5nZV90aHAocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmZzL3Byb2MvdGFza19tbXUuYy0yMDg5LVx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjA5MDpcdFx0c3RydWN0IHBhZ2VtYXByZWFkICpwbSlcbmZzL3Byb2MvdGFza19tbXUuYy0yMDkxLXtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjEwMi1cdGlmIChwbWRfbm9uZShwbWQpKVxuZnMvcHJvYy90YXNrX21tdS5jOjIxMDM6XHRcdGdvdG8gcG9wdWxhdGVfcGFnZW1hcDtcbmZzL3Byb2MvdGFza19tbXUuYy0yMTA0LVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMTQxLVxuZnMvcHJvYy90YXNrX21tdS5jOjIxNDI6cG9wdWxhdGVfcGFnZW1hcDpcbmZzL3Byb2MvdGFza19tbXUuYy0yMTQzLVx0Zm9yICg7IGFkZHIgIT0gZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGlkeCYjNDM7JiM0MzspIHtcbmZzL3Byb2MvdGFza19tbXUuYy0yMTQ0LVx0XHR1NjQgY3VyX2ZsYWdzID0gZmxhZ3M7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE0NTpcdFx0cGFnZW1hcF9lbnRyeV90IHBtZTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMTQ2LVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMTUxLVx0XHRwbWUgPSBtYWtlX3BtZShmcmFtZSwgY3VyX2ZsYWdzKTtcbmZzL3Byb2MvdGFza19tbXUuYzoyMTUyOlx0XHRlcnIgPSBhZGRfdG9fcGFnZW1hcChcdTAwMjZwbWUsIHBtKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMTUzLVx0XHRpZiAoZXJyKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMTY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjIxNjY6c3RhdGljIGludCBwYWdlbWFwX3BtZF9yYW5nZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbmZzL3Byb2MvdGFza19tbXUuYy0yMTY3LVx0XHRcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIxNjktXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuZnMvcHJvYy90YXNrX21tdS5jOjIxNzA6XHRzdHJ1Y3QgcGFnZW1hcHJlYWQgKnBtID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuZnMvcHJvYy90YXNrX21tdS5jLTIxNzEtXHRzcGlubG9ja190ICpwdGw7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIxNzctXHRpZiAocHRsKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE3ODpcdFx0ZXJyID0gcGFnZW1hcF9wbWRfcmFuZ2VfdGhwKHBtZHAsIGFkZHIsIGVuZCwgdm1hLCBwbSk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE3OS1cdFx0c3Bpbl91bmxvY2socHRsKTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE5My1cdGZvciAoOyBhZGRyIFx1MDAzYyBlbmQ7IHB0ZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkge1xuZnMvcHJvYy90YXNrX21tdS5jOjIxOTQ6XHRcdHBhZ2VtYXBfZW50cnlfdCBwbWU7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE5NS1cbmZzL3Byb2MvdGFza19tbXUuYzoyMTk2Olx0XHRwbWUgPSBwdGVfdG9fcGFnZW1hcF9lbnRyeShwbSwgdm1hLCBhZGRyLCBwdGVwX2dldChwdGUpKTtcbmZzL3Byb2MvdGFza19tbXUuYzoyMTk3Olx0XHRlcnIgPSBhZGRfdG9fcGFnZW1hcChcdTAwMjZwbWUsIHBtKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMTk4LVx0XHRpZiAoZXJyKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMjA5LS8qIFRoaXMgZnVuY3Rpb24gd2Fsa3Mgd2l0aGluIG9uZSBodWdldGxiIGVudHJ5IGluIHRoZSBzaW5nbGUgY2FsbCAqL1xuZnMvcHJvYy90YXNrX21tdS5jOjIyMTA6c3RhdGljIGludCBwYWdlbWFwX2h1Z2V0bGJfcmFuZ2UocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjIxMS1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMjEzLXtcbmZzL3Byb2MvdGFza19tbXUuYzoyMjE0Olx0c3RydWN0IHBhZ2VtYXByZWFkICpwbSA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMjE1LVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVx1MDAzZXZtYTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI0Ny1cdGZvciAoOyBhZGRyICE9IGVuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjI0ODpcdFx0cGFnZW1hcF9lbnRyeV90IHBtZSA9IG1ha2VfcG1lKGZyYW1lLCBmbGFncyk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI0OS1cbmZzL3Byb2MvdGFza19tbXUuYzoyMjUwOlx0XHRlcnIgPSBhZGRfdG9fcGFnZW1hcChcdTAwMjZwbWUsIHBtKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMjUxLVx0XHRpZiAoZXJyKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMjYyLSNlbHNlXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjI2MzojZGVmaW5lIHBhZ2VtYXBfaHVnZXRsYl9yYW5nZVx0TlVMTFxuZnMvcHJvYy90YXNrX21tdS5jLTIyNjQtI2VuZGlmIC8qIEhVR0VUTEJfUEFHRSAqL1xuZnMvcHJvYy90YXNrX21tdS5jLTIyNjUtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjI2NjpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfb3BzID0ge1xuZnMvcHJvYy90YXNrX21tdS5jOjIyNjc6XHQucG1kX2VudHJ5XHQ9IHBhZ2VtYXBfcG1kX3JhbmdlLFxuZnMvcHJvYy90YXNrX21tdS5jOjIyNjg6XHQucHRlX2hvbGVcdD0gcGFnZW1hcF9wdGVfaG9sZSxcbmZzL3Byb2MvdGFza19tbXUuYzoyMjY5Olx0Lmh1Z2V0bGJfZW50cnlcdD0gcGFnZW1hcF9odWdldGxiX3JhbmdlLFxuZnMvcHJvYy90YXNrX21tdS5jLTIyNzAtXHQud2Fsa19sb2NrXHQ9IFBHV0FMS19SRExPQ0ssXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIyNzMtLypcbmZzL3Byb2MvdGFza19tbXUuYzoyMjc0OiAqIC9wcm9jL3BpZC9wYWdlbWFwIC0gYW4gYXJyYXkgbWFwcGluZyB2aXJ0dWFsIHBhZ2VzIHRvIHBmbnNcbmZzL3Byb2MvdGFza19tbXUuYy0yMjc1LSAqXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIzMDAtICovXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjMwMTpzdGF0aWMgc3NpemVfdCBwYWdlbWFwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjMwMi1cdFx0XHQgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIzMDQtXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZnMvcHJvYy90YXNrX21tdS5jOjIzMDU6XHRzdHJ1Y3QgcGFnZW1hcHJlYWQgcG07XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjMwNi1cdHVuc2lnbmVkIGxvbmcgc3JjO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMzY5LVx0XHRcdGdvdG8gb3V0X2ZyZWU7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjM3MDpcdFx0cmV0ID0gd2Fsa19wYWdlX3JhbmdlKG1tLCBzdGFydF92YWRkciwgZW5kLCBcdTAwMjZwYWdlbWFwX29wcywgXHUwMDI2cG0pO1xuZnMvcHJvYy90YXNrX21tdS5jLTIzNzEtXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMzk0LVxuZnMvcHJvYy90YXNrX21tdS5jOjIzOTU6c3RhdGljIGludCBwYWdlbWFwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjM5Ni17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI0MDUtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQwNjpzdGF0aWMgaW50IHBhZ2VtYXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL3Byb2MvdGFza19tbXUuYy0yNDA3LXtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQyMS1cbmZzL3Byb2MvdGFza19tbXUuYzoyNDIyOnN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSB7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQyMy1cdHN0cnVjdCBwbV9zY2FuX2FyZyBhcmc7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI0MjktXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQzMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxuZnMvcHJvYy90YXNrX21tdS5jLTI0MzEtXHRcdFx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNDQxLVx0XHQgKiB0b28gc28gdGhpcyBnZW5lcmljIHBhdGggYWdyZWVzIHdpdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQ0MjpcdFx0ICogcGF0aCBpbiBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5KCksIHdoaWNoIHJlcG9ydHMgcHRlX25vbmUgYXNcbmZzL3Byb2MvdGFza19tbXUuYy0yNDQzLVx0XHQgKiB3cml0dGVuIGFuZCwgdW5kZXIgUE1fU0NBTl9XUF9NQVRDSElORywgYXJtcyBhIG1hcmtlci4gVGhlXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTI0OTA9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjUwOC0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjUwOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3RocF9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjUxMC1cdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjU1ND1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNTcwLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjU3MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX2h1Z2V0bGJfY2F0ZWdvcnkocHRlX3QgcHRlKVxuZnMvcHJvYy90YXNrX21tdS5jLTI1NzIte1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNTc4LVx0LypcbmZzL3Byb2MvdGFza19tbXUuYzoyNTc5Olx0ICogQWNjb3JkaW5nIHRvIHBhZ2VtYXBfaHVnZXRsYl9yYW5nZSgpLCBmaWxlLWJhY2tlZCBIdWdlVExCXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjU4MC1cdCAqIHBhZ2UgY2Fubm90IGJlIHN3YXBwZWQuIFNvIFBBR0VfSVNfRklMRSBpcyBub3QgY2hlY2tlZCBmb3Jcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjYwNj1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfaHVnZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI2MzYtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSB8fCBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjYzNzpzdGF0aWMgdm9pZCBwYWdlbWFwX3NjYW5fYmFja291dF9yYW5nZShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjYzOC1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNjUzLVxuZnMvcHJvYy90YXNrX21tdS5jOjI2NTQ6c3RhdGljIGJvb2wgcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UodW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzLFxuZnMvcHJvYy90YXNrX21tdS5jOjI2NTU6XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwKVxuZnMvcHJvYy90YXNrX21tdS5jLTI2NTYte1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNjY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjI2NjY6c3RhdGljIGJvb2wgcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3ZtYSh1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY2NzpcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcClcbmZzL3Byb2MvdGFza19tbXUuYy0yNjY4LXtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY3Ny1cbmZzL3Byb2MvdGFza19tbXUuYzoyNjc4OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3Rlc3Rfd2Fsayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmZzL3Byb2MvdGFza19tbXUuYy0yNjc5LVx0XHRcdFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbmZzL3Byb2MvdGFza19tbXUuYy0yNjgwLXtcbmZzL3Byb2MvdGFza19tbXUuYzoyNjgxOlx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuZnMvcHJvYy90YXNrX21tdS5jLTI2ODItXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNzExLVxuZnMvcHJvYy90YXNrX21tdS5jOjI3MTI6XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ192bWEodm1hX2NhdGVnb3J5LCBwKSlcbmZzL3Byb2MvdGFza19tbXUuYy0yNzEzLVx0XHRyZXR1cm4gMTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjcxOS1cbmZzL3Byb2MvdGFza19tbXUuYzoyNzIwOnN0YXRpYyBib29sIHBhZ2VtYXBfc2Nhbl9wdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcyxcbmZzL3Byb2MvdGFza19tbXUuYzoyNzIxOlx0XHRcdFx0ICAgIHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCxcbmZzL3Byb2MvdGFza19tbXUuYy0yNzIyLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI3NDktXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjc1MDpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9vdXRwdXQodW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzLFxuZnMvcHJvYy90YXNrX21tdS5jOjI3NTE6XHRcdFx0ICAgICAgIHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCxcbmZzL3Byb2MvdGFza19tbXUuYy0yNzUyLVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgKmVuZClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc3MC1cbmZzL3Byb2MvdGFza19tbXUuYzoyNzcxOlx0aWYgKCFwYWdlbWFwX3NjYW5fcHVzaF9yYW5nZShjYXRlZ29yaWVzLCBwLCBhZGRyLCAqZW5kKSkge1xuZnMvcHJvYy90YXNrX21tdS5jLTI3NzItXHRcdCplbmQgPSBhZGRyO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNzgzLVxuZnMvcHJvYy90YXNrX21tdS5jOjI3ODQ6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fdGhwX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc4NS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNzg3LSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmZzL3Byb2MvdGFza19tbXUuYzoyNzg4Olx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuZnMvcHJvYy90YXNrX21tdS5jLTI3ODktXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNzk4LVx0Y2F0ZWdvcmllcyA9IHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8XG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjc5OTpcdFx0ICAgICBwYWdlbWFwX3RocF9jYXRlZ29yeShwLCB2bWEsIHN0YXJ0LCAqcG1kKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yODAwLVxuZnMvcHJvYy90YXNrX21tdS5jOjI4MDE6XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxuZnMvcHJvYy90YXNrX21tdS5jLTI4MDItXHRcdGdvdG8gb3V0X3VubG9jaztcbmZzL3Byb2MvdGFza19tbXUuYy0yODAzLVxuZnMvcHJvYy90YXNrX21tdS5jOjI4MDQ6XHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIHN0YXJ0LCBcdTAwMjZlbmQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4MDUtXHRpZiAoc3RhcnQgPT0gZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yODE5LVx0XHRzcGxpdF9odWdlX3BtZCh2bWEsIHBtZCwgc3RhcnQpO1xuZnMvcHJvYy90YXNrX21tdS5jOjI4MjA6XHRcdHBhZ2VtYXBfc2Nhbl9iYWNrb3V0X3JhbmdlKHAsIHN0YXJ0LCBlbmQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4MjEtXHRcdC8qIFJlcG9ydCBhcyBpZiB0aGVyZSB3YXMgbm8gVEhQICovXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI4MzQtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjgzNTpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmZzL3Byb2MvdGFza19tbXUuYy0yODM2LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzNy17XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjgzODpcdHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbmZzL3Byb2MvdGFza19tbXUuYy0yODM5LVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVx1MDAzZXZtYTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg0NC1cbmZzL3Byb2MvdGFza19tbXUuYzoyODQ1Olx0cmV0ID0gcGFnZW1hcF9zY2FuX3RocF9lbnRyeShwbWQsIHN0YXJ0LCBlbmQsIHdhbGspO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4NDYtXHRpZiAocmV0ICE9IC1FTk9FTlQpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI4ODMtXHRcdFx0XHRjb250aW51ZTtcbmZzL3Byb2MvdGFza19tbXUuYzoyODg0Olx0XHRcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQocC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHwgUEFHRV9JU19XUklUVEVOLFxuZnMvcHJvYy90YXNrX21tdS5jLTI4ODUtXHRcdFx0XHRcdFx0ICBwLCBhZGRyLCBcdTAwMjZuZXh0KTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMC1cdFx0dW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzID0gcC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTAxOlx0XHRcdFx0XHQgICBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkocCwgdm1hLCBhZGRyLCBwdGVudCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMi1cdFx0dW5zaWduZWQgbG9uZyBuZXh0ID0gYWRkciAmIzQzOyBQQUdFX1NJWkU7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMy1cbmZzL3Byb2MvdGFza19tbXUuYzoyOTA0Olx0XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxuZnMvcHJvYy90YXNrX21tdS5jLTI5MDUtXHRcdFx0Y29udGludWU7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwNi1cbmZzL3Byb2MvdGFza19tbXUuYzoyOTA3Olx0XHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIGFkZHIsIFx1MDAyNm5leHQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI5MDgtXHRcdGlmIChuZXh0ID09IGFkZHIpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI5MzMtI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmZzL3Byb2MvdGFza19tbXUuYzoyOTM0OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkzNS1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTM3LXtcbmZzL3Byb2MvdGFza19tbXUuYzoyOTM4Olx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuZnMvcHJvYy90YXNrX21tdS5jLTI5MzktXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTQ4LVx0XHRwdGUgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIHN0YXJ0LCBwdGVwKTtcbmZzL3Byb2MvdGFza19tbXUuYzoyOTQ5Olx0XHRjYXRlZ29yaWVzID0gcC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHwgcGFnZW1hcF9odWdldGxiX2NhdGVnb3J5KHB0ZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk1MC1cbmZzL3Byb2MvdGFza19tbXUuYzoyOTUxOlx0XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxuZnMvcHJvYy90YXNrX21tdS5jLTI5NTItXHRcdFx0cmV0dXJuIDA7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk1My1cbmZzL3Byb2MvdGFza19tbXUuYzoyOTU0Olx0XHRyZXR1cm4gcGFnZW1hcF9zY2FuX291dHB1dChjYXRlZ29yaWVzLCBwLCBzdGFydCwgXHUwMDI2ZW5kKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yOTU1LVx0fVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTYwLVx0cHRlID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBzdGFydCwgcHRlcCk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjk2MTpcdGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfCBwYWdlbWFwX2h1Z2V0bGJfY2F0ZWdvcnkocHRlKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yOTYyLVxuZnMvcHJvYy90YXNrX21tdS5jOjI5NjM6XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxuZnMvcHJvYy90YXNrX21tdS5jLTI5NjQtXHRcdGdvdG8gb3V0X3VubG9jaztcbmZzL3Byb2MvdGFza19tbXUuYy0yOTY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjI5NjY6XHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIHN0YXJ0LCBcdTAwMjZlbmQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI5NjctXHRpZiAoc3RhcnQgPT0gZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTc0LVx0XHQvKiBQYXJ0aWFsIEh1Z2VUTEIgcGFnZSBXUCBpc24mIzM5O3QgcG9zc2libGUuICovXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjk3NTpcdFx0cGFnZW1hcF9zY2FuX2JhY2tvdXRfcmFuZ2UocCwgc3RhcnQsIGVuZCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk3Ni1cdFx0cC1cdTAwM2Vhcmcud2Fsa19lbmQgPSBzdGFydDtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk5Mi0gKiBXcml0ZS1wcm90ZWN0IHRoZSB1bnBvcHVsYXRlZCBodWdldGxiIGVudHJpZXMgY292ZXJpbmcgW2FkZHIsIGVuZCkgYnlcbmZzL3Byb2MvdGFza19tbXUuYzoyOTkzOiAqIGluc3RhbGxpbmcgdWZmZC13cCBtYXJrZXJzIGlubGluZSwgZXhhY3RseSBhcyBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSgpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk5NC0gKiBkb2VzIGZvciBwb3B1bGF0ZWQgZW50cmllcy5cbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzAwNi0gKi9cbmZzL3Byb2MvdGFza19tbXUuYzozMDA3OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfaG9sZV93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDA4LVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDM5LSNlbHNlXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA0MDojZGVmaW5lIHBhZ2VtYXBfc2Nhbl9odWdldGxiX2VudHJ5IE5VTExcbmZzL3Byb2MvdGFza19tbXUuYzozMDQxOnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfaG9sZV93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQyLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ3LVxuZnMvcHJvYy90YXNrX21tdS5jOjMwNDg6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ5LVx0XHRcdFx0IGludCBkZXB0aCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA1MC17XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA1MTpcdHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMDUyLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVx1MDAzZXZtYTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA2MC1cdCAqIEFuIHVucG9wdWxhdGVkIHJhbmdlIHdpdGggbm8gcGFnZSB0YWJsZSAtLSBlLmcuIGEgMk1CIGFub24gVEhQXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA2MTpcdCAqIGRyb3BwZWQgdmlhIE1BRFZfRE9OVE5FRUQsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXNcbmZzL3Byb2MvdGFza19tbXUuYy0zMDYyLVx0ICogLS0gcmVhZHMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBtYXRjaGluZyB0aGUgcHRlX25vbmUgY2FzZVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDcwLVxuZnMvcHJvYy90YXNrX21tdS5jOjMwNzE6XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxuZnMvcHJvYy90YXNrX21tdS5jLTMwNzItXHRcdHJldHVybiAwO1xuZnMvcHJvYy90YXNrX21tdS5jLTMwNzMtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA3NDpcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgYWRkciwgXHUwMDI2ZW5kKTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMDc1LVx0aWYgKGFkZHIgPT0gZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDgxLVx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuZnMvcHJvYy90YXNrX21tdS5jOjMwODI6XHRcdGVyciA9IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aodm1hLCBhZGRyLCBlbmQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTMwODMtXHRlbHNlXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMwOTAtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5MTpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfc2Nhbl9vcHMgPSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5MjpcdC50ZXN0X3dhbGsgPSBwYWdlbWFwX3NjYW5fdGVzdF93YWxrLFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTM6XHQucG1kX2VudHJ5ID0gcGFnZW1hcF9zY2FuX3BtZF9lbnRyeSxcbmZzL3Byb2MvdGFza19tbXUuYzozMDk0Olx0LnB0ZV9ob2xlID0gcGFnZW1hcF9zY2FuX3B0ZV9ob2xlLFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTU6XHQuaHVnZXRsYl9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2VudHJ5LFxuZnMvcHJvYy90YXNrX21tdS5jLTMwOTYtfTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMDk3LVxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTg6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fZ2V0X2FyZ3Moc3RydWN0IHBtX3NjYW5fYXJnICphcmcsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5OS1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIHVhcmcpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMxMzktXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE0MDpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl93cml0ZWJhY2tfYXJncyhzdHJ1Y3QgcG1fc2Nhbl9hcmcgKmFyZyxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTQxLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgdWFyZ2wpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMxNTAtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE1MTpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9pbml0X2JvdW5jZV9idWZmZXIoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwKVxuZnMvcHJvYy90YXNrX21tdS5jLTMxNTIte1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMTY3LVxuZnMvcHJvYy90YXNrX21tdS5jOjMxNjg6c3RhdGljIGxvbmcgcGFnZW1hcF9zY2FuX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnApXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE2OS17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMxOTQtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE5NTpzdGF0aWMgbG9uZyBkb19wYWdlbWFwX3NjYW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdWFyZylcbmZzL3Byb2MvdGFza19tbXUuYy0zMTk2LXtcbmZzL3Byb2MvdGFza19tbXUuYzozMTk3Olx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlIHAgPSB7MH07XG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE5OC1cdHVuc2lnbmVkIGxvbmcgd2Fsa19zdGFydDtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzIwMS1cbmZzL3Byb2MvdGFza19tbXUuYzozMjAyOlx0cmV0ID0gcGFnZW1hcF9zY2FuX2dldF9hcmdzKFx1MDAyNnAuYXJnLCB1YXJnKTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMjAzLVx0aWYgKHJldClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzIwNy1cdFx0XHQgICAgICBwLmFyZy5yZXR1cm5fbWFzaztcbmZzL3Byb2MvdGFza19tbXUuYzozMjA4Olx0cmV0ID0gcGFnZW1hcF9zY2FuX2luaXRfYm91bmNlX2J1ZmZlcihcdTAwMjZwKTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMjA5LVx0aWYgKHJldClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzIzMy1cdFx0cmV0ID0gd2Fsa19wYWdlX3JhbmdlKG1tLCB3YWxrX3N0YXJ0LCBwLmFyZy5lbmQsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzIzNDpcdFx0XHRcdCAgICAgIFx1MDAyNnBhZ2VtYXBfc2Nhbl9vcHMsIFx1MDAyNnApO1xuZnMvcHJvYy90YXNrX21tdS5jLTMyMzUtXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMyNDAtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI0MTpcdFx0bl9vdXQgPSBwYWdlbWFwX3NjYW5fZmx1c2hfYnVmZmVyKFx1MDAyNnApO1xuZnMvcHJvYy90YXNrX21tdS5jLTMyNDItXHRcdGlmIChuX291dCBcdTAwM2MgMClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI2MC1cdFx0cC5hcmcud2Fsa19lbmQgPSBwLmFyZy5lbmQ7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI2MTpcdGlmIChwYWdlbWFwX3NjYW5fd3JpdGViYWNrX2FyZ3MoXHUwMDI2cC5hcmcsIHVhcmcpKVxuZnMvcHJvYy90YXNrX21tdS5jLTMyNjItXHRcdHJldCA9IC1FRkFVTFQ7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMyNjctXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI2ODpzdGF0aWMgbG9uZyBkb19wYWdlbWFwX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjY5LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMjc0LVx0Y2FzZSBQQUdFTUFQX1NDQU46XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI3NTpcdFx0cmV0dXJuIGRvX3BhZ2VtYXBfc2NhbihtbSwgYXJnKTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMjc2LVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMjgxLVxuZnMvcHJvYy90YXNrX21tdS5jOjMyODI6Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyA9IHtcbmZzL3Byb2MvdGFza19tbXUuYy0zMjgzLVx0Lmxsc2Vla1x0XHQ9IG1lbV9sc2VlaywgLyogYm9ycm93IHRoaXMgKi9cbmZzL3Byb2MvdGFza19tbXUuYzozMjg0Olx0LnJlYWRcdFx0PSBwYWdlbWFwX3JlYWQsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI4NTpcdC5vcGVuXHRcdD0gcGFnZW1hcF9vcGVuLFxuZnMvcHJvYy90YXNrX21tdS5jOjMyODY6XHQucmVsZWFzZVx0PSBwYWdlbWFwX3JlbGVhc2UsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI4NzpcdC51bmxvY2tlZF9pb2N0bCA9IGRvX3BhZ2VtYXBfY21kLFxuZnMvcHJvYy90YXNrX21tdS5jOjMyODg6XHQuY29tcGF0X2lvY3RsXHQ9IGRvX3BhZ2VtYXBfY21kLFxuZnMvcHJvYy90YXNrX21tdS5jLTMyODktfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYHByb2NfcGFnZW1hcF9vcGVyYXRpb25zYCBhbmQgYFBBR0VNQVBfU0NBTmAqKgoKQWxyaWdodCwgc28gdGhlIGBQQUdFTUFQX1NDQU5gIGlvY3RsIGlzIGhhbmdpbmcgb3V0IHRoZXJlIGluIGBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9uc2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoZXJlICplbHNlKiBkb2VzIHRoaXMgYHByb2NfcGFnZW1hcF9vcGVyYXRpb25zYCBzdHJ1Y3Qgc2hvdyB1cD8gV2hhdCBjb250ZXh0cyBhcmUgdXNpbmcgdGhpcyBmdW5jdGlvbmFsaXR5PyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wYWN0LiBLbm93aW5nICp3aGVyZSogaXQmIzM5O3MgZW1wbG95ZWQgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgdXNhZ2UgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfcGFnZW1hcF9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9MzI4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zMzI0LVx0UkVHKFwmIzM0O3NtYXBzX3JvbGx1cFwmIzM0OywgU19JUlVHTywgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMpLFxuZnMvcHJvYy9iYXNlLmM6MzMyNTpcdFJFRyhcJiMzNDtwYWdlbWFwXCYjMzQ7LCAgICBTX0lSVVNSLCBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zMzI2LSNlbmRpZlxuLS1cbmZzL3Byb2MvYmFzZS5jPTM2NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGlkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zNjc5LVx0UkVHKFwmIzM0O3NtYXBzX3JvbGx1cFwmIzM0OywgU19JUlVHTywgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMpLFxuZnMvcHJvYy9iYXNlLmM6MzY4MDpcdFJFRyhcJiMzNDtwYWdlbWFwXCYjMzQ7LCAgICBTX0lSVVNSLCBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zNjgxLSNlbmRpZlxuLS1cbmZzL3Byb2MvaW50ZXJuYWwuaD00MTE9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnM7XG5mcy9wcm9jL2ludGVybmFsLmg6NDEyOmV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGFnZW1hcF9vcGVyYXRpb25zO1xuZnMvcHJvYy9pbnRlcm5hbC5oLTQxMy1cbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzI2OD1zdGF0aWMgbG9uZyBkb19wYWdlbWFwX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI4MS1cbmZzL3Byb2MvdGFza19tbXUuYzozMjgyOmNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI4My1cdC5sbHNlZWtcdFx0PSBtZW1fbHNlZWssIC8qIGJvcnJvdyB0aGlzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjY1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkV4YW1pbmluZyB0aGUgYCNlbmRpZmAgaW4gYGZzL3Byb2MvYmFzZS5jYCBhcm91bmQgYHBhZ2VtYXBgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGZzL3Byb2MvYmFzZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IGAjZW5kaWZgIGlzIGRvaW5nLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSB0aGF0JiMzOTtzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYHBhZ2VtYXBgIGZ1bmN0aW9uYWxpdHkuIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCBpdCwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgbWF5YmUgaW52ZXN0aWdhdGUgYSBzdWJ0bGUgaW50ZXJhY3Rpb24uIFdoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgaXMgdGhpcyBjb2RlIHBvdGVudGlhbGx5IGRlcGVuZGVudCBvbj8gV2hhdCBmZWF0dXJlcyBtaWdodCBiZSBnZXR0aW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhpcz8gTXkgZ29hbCBpcyByZWFsbHkgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2Ygd2hhdCB0aGF0IGAjZW5kaWZgIGlzIGNvbnRyb2xsaW5nLiBJcyBpdCBhIGZ1bGwgZmVhdHVyZSwgb3IgYSBzbWFsbCBzdWJzZXQ/IElzIHRoaXMgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jayBiYXNlZCBvbiBzb21lIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbj8gTGV0IG1lIHRyYWNlIGJhY2sgYW5kIGlkZW50aWZ5IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmUgdGhhdCB0cmlnZ2VycyB0aGF0IGNsb3NpbmcgYCNlbmRpZmAsIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhlIGFzc29jaWF0ZWQgYCNpZmRlZmAgb3IgYCNpZmAgc3RhdGVtZW50IGlzIGNoZWNraW5nLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IG9yIHN5c3RlbSBzdGF0ZSBuZWVkcyB0byBiZSwgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoYXQgcG9ydGlvbiBvZiBjb2RlIGZyb20gdGhlIGZpbmFsIGNvbXBpbGVkIGJpbmFyeS4gQW5kIHRoYXQmIzM5O3MgY3JpdGljYWwgaW5mb3JtYXRpb24sIGJlY2F1c2UgSSBhbHdheXMgbmVlZCB0byBrbm93IHdoYXQgZmVhdHVyZXMgbXkgc3lzdGVtIGlzIGJ1aWxkaW5nIHdpdGgsIGFuZCBob3cgdGhleSBiZWhhdmUgaW4gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9MzI4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zMzIwLVx0UkVHKFwmIzM0O21vdW50c3RhdHNcJiMzNDssIFNfSVJVU1IsIHByb2NfbW91bnRzdGF0c19vcGVyYXRpb25zKSxcbmZzL3Byb2MvYmFzZS5jOjMzMjE6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxuZnMvcHJvYy9iYXNlLmMtMzMyMi1cdFJFRyhcJiMzNDtjbGVhcl9yZWZzXCYjMzQ7LCBTX0lXVVNSLCBwcm9jX2NsZWFyX3JlZnNfb3BlcmF0aW9ucyksXG4tLVxuZnMvcHJvYy9iYXNlLmM9MzY0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTM2NzUtXHRSRUcoXCYjMzQ7bW91bnRpbmZvXCYjMzQ7LCAgU19JUlVHTywgcHJvY19tb3VudGluZm9fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYzozNjc2OiNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcbmZzL3Byb2MvYmFzZS5jLTM2NzctXHRSRUcoXCYjMzQ7Y2xlYXJfcmVmc1wmIzM0OywgU19JV1VTUiwgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnMpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgY29uY2VybiBpcyBwcmV0dHkgY2xlYXI6IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLiBHb3QgaXQuIE5vdywgaG9sZCBvbiwgSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSBoZXJlLi4uIEkmIzM5O20gc2VlaW5nIGB1c2VyZmF1bHRmZF93cGAgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgLiBUaGlzIHRyaWdnZXJzIGEgcXVlc3Rpb246IGRvZXMgdGhpcyBpbXBseSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19VU0VSRkFVTFRGRGA/IE15IGd1dCBzYXlzIGl0IHByb2JhYmx5IGRvZXMsIGJ1dCBsZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBCZXN0IHRvIHZlcmlmeSBpdCBjb25jcmV0ZWx5LgoKU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gYW5kIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcyBmb3IgYHVzZXJmYXVsdGZkX3dwYC4gSSYjMzk7bGwgc2NhbiB0aGF0IGhlYWRlciBhbmQgZ2V0IGEgbXVjaCBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmZhdWx0ZmRfd3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0xOTY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pc3Npbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjAwLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjAxOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIwMi17XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjExPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9wdGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjEzLXtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIxNDpcdHJldHVybiB1c2VyZmF1bHRmZF93cCh2bWEpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZF93cChwdGUpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMTc9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX2h1Z2VfcG1kX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIxOS17XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMjA6XHRyZXR1cm4gdXNlcmZhdWx0ZmRfd3Aodm1hKSBcdTAwMjZcdTAwMjYgcG1kX3VmZmRfd3AocG1kKTtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIyMS19XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjUyPWV4dGVybiB2b2lkIHVzZXJmYXVsdGZkX3VubWFwX2NvbXBsZXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjUzLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI1NDpleHRlcm4gYm9vbCB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNTU6ZXh0ZXJuIGJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjU2LVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjU3OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTI1OC17XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTktXHQvKiBPbmx5IHdyLXByb3RlY3QgbW9kZSB1c2VzIHB0ZSBtYXJrZXJzICovXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNjA6XHRpZiAoIXVzZXJmYXVsdGZkX3dwKHZtYSkpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNjEtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNzAtXHQgKi9cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI3MTpcdHJldHVybiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCh2bWEpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjcyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0zMTY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pc3Npbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzIwLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzIxOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTMyMi17XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9Mzk4PXN0YXRpYyBpbmxpbmUgYm9vbCB1ZmZkX2Rpc2FibGVfZmF1bHRfYXJvdW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwMi1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjQwMzpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDQte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwNy1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjQwODpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDkte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTQxMz1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc191ZmZkX3dpdGhvdXRfZXZlbnRfcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtNDE3LVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6NDE4OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQxOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Njg1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBzcGVjaWZpYyBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBVc2VyZmF1bHRmZCBXcml0ZSBQcm90ZWN0aW9uIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhhdCBgI2lmZGVmYCBibG9jayBzdXJyb3VuZGluZyBgdXNlcmZhdWx0ZmRfd3BgLiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCBob3cgd3JpdGUgcHJvdGVjdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgYHVzZXJmYXVsdGZkYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoaXMgcHJvYmFibHkgY29udHJvbHMgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9mIHNvbWUgZmVhdHVyZSBvciBzb21lIGNvZGUgcGF0aCBiYXNlZCBvbiBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gd2hldGhlciB3cml0ZSBwcm90ZWN0aW9uIHZpYSB1c2VyZmF1bHRmZCBpcyBlbmFibGVkIGF0IGFsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IGNvbmZpZ3VyYXRpb24gZmxhZyBpcyBhbmQgd2hhdCBjb25zZXF1ZW5jZXMgaXQgaGFzIGlmIHRoZSBgI2lmZGVmYCBldmFsdWF0ZXMgdG8gdHJ1ZSB2ZXJzdXMgZmFsc2UuIFRoaXMgbWVhbnMgSSYjMzk7bGwgbmVlZCB0byBnbyBodW50aW5nIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IHByZXByb2Nlc3NvciBzeW1ib2wgYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyB1c2VkLiBUaGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGxpa2VseSB0aGVyZSBmb3IgYSByZWFzb24sIGxpa2VseSBkdWUgdG8gYW4gb3B0aW9uYWwgZmVhdHVyZSB0aGF0IGNvdWxkIGludHJvZHVjZSBjb21wbGV4aXR5IG9yIHBvc3NpYmxlIHBlcmZvcm1hbmNlIGltcGFjdHMgYW5kIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBpbXBhY3QgdGhpcyBjb25maWd1cmF0aW9uIGhhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmIENPTkZJR19VU0VSRkFVTFRGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTExLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MTI6I2lmZGVmIENPTkZJR19VU0VSRkFVTFRGRFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDQ1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGJlY29taW5nIGNsZWFyZXIuIEl0IHNlZW1zIHRoYXQgYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgdGhlIGtleSBwcmVyZXF1aXNpdGUgZm9yIGB1c2VyZmF1bHRmZF93cGAgdG8gYWN0dWFsbHkgcmV0dXJuIHRydWUuIElmIHRoYXQgY29uZmlnIG9wdGlvbiBpc24mIzM5O3Qgc2V0LCB0aGUgZnVuY3Rpb24ganVzdCByZXR1cm5zIGZhbHNlLCB3aGljaCBpcyBmaW5lIGZyb20gYSBjb21waWxhdGlvbiBzdGFuZHBvaW50LCBidXQgbWVhbnMgdGhlIGNyaXRpY2FsIGxpbmUgYGNhdGVnb3JpZXMgfD0gUEFHRV9JU19XUklUVEVOYCB3b24mIzM5O3QgZ2V0IGV4ZWN1dGVkLgoKVG8gcHJvcGVybHkgdGVzdCB0aGUgY2hhbmdlcywgSSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIGJvdGggYENPTkZJR19VU0VSRkFVTFRGRGAgYW5kIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLgoKSG1tLCB0aGlzIHBhdGNoIGFsc28gbWVudGlvbnMgYE1BRFZfRE9OVE5FRURgIGFuZCBgTUFEVl9DT0xMQVBTRWAgd2l0aGluIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5LiBUaGUgdGVzdCB1c2VzIGBtYWR2aXNlKG1lbSwgaHBhZ2Vfc2l6ZSwgTUFEVl9DT0xMQVBTRSlgLiBUaGF0IG1ha2VzIG1lIHRoaW5rLi4uIGlzIGBNQURWX0NPTExBUFNFYCB0aWVkIHRvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgPwoKWWVzLCB0aGUgdGVzdCBkb2N1bWVudGF0aW9uIGNvbmZpcm1zIGl0LiBJdCBleHBsYWlucyB0aGF0IGEgMk1CIGFub255bW91cyBUSFAgdGhhdCYjMzk7cyBiZWVuIGBNQURWX0RPTlRORUVEYCYjMzk7ZCByZXN1bHRzIGluIGEgYHBtZF9ub25lYCBob2xlIHdpdGggbm8gcGFnZSB0YWJsZSBlbnRyeSwgd2hpY2ggaXMgc29tZXRoaW5nIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoKWAgbmV2ZXIgc2Vlcy4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBgUEFHRU1BUF9TQ0FOYCBoYXMgdG8gcmVwb3J0IHRoaXMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBhbmQgaXQgd2lsbCBkbyBzbyB2aWEgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSgpYC4KClNvLCB0byBydW4gdGhlIHRlc3QgcHJvcGVybHksIEkgYWxzbyBuZWVkIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbHRob3VnaCB0aGUgcmVsZXZhbnQga2VybmVsIGNvZGUgaXRzZWxmIHNob3VsZCBhcHBseSB0byBhbnkgdW5wb3B1bGF0ZWQgbWVtb3J5IHJhbmdlLiBUaGUgY29yZSBjb2RlIEkgYW0gbG9va2luZyBhdCBpbiBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKClgIGxvb2tzIGxpa2UgdGhpczoKCmBgYGMKCWNhdGVnb3JpZXMgPSBwLSZndDtjdXJfdm1hX2NhdGVnb3J5OwoJaWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkpCgkJY2F0ZWdvcmllcyB8PSBQQUdFX0lTX1dSSVRURU47CgoJaWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSkKCQlyZXR1cm4gMDsKYGBgCgpUaGVyZWZvcmUsIHRvIHJlY2FwLCBJIG5lZWQgYENPTkZJR19VU0VSRkFVTFRGRGAsIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLCBhbmQgYmVjYXVzZSB0aGUgdGVzdGluZyByZWxpZXMgb24gaXQsIGFsc28gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYWxvbmdzaWRlIHRoZSB1c3VhbCBgQ09ORklHX01NVWAuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKWAgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9zY2FuX3B0ZV9ob2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0zMDQxPXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfaG9sZV93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA0Ny1cbmZzL3Byb2MvdGFza19tbXUuYzozMDQ4OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA0OS1cdFx0XHRcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0zMDkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcGFnZW1hcF9zY2FuX29wcyA9IHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5My1cdC5wbWRfZW50cnkgPSBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5LFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTQ6XHQucHRlX2hvbGUgPSBwYWdlbWFwX3NjYW5fcHRlX2hvbGUsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5NS1cdC5odWdldGxiX2VudHJ5ID0gcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzIwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBLZXJuZWwgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgY2F0Y2hlcyBteSBleWUuIEl0JiMzOTtzIGNhbGxlZCBieSBgd2Fsa19wYWdlX3JhbmdlYCBhbmQsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXQgZGVhbHMgd2l0aCB0aG9zZSBwZXNreSBob2xlcyBpbiB0aGUgcGFnZSB0YWJsZSDigJMgcGxhY2VzIHdoZXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IFBURXMgcHJlc2VudC4gVGhlIHBhdGNoJiMzOTtzIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgYWRkaW5nIHRoZSBgUEFHRV9JU19XUklUVEVOYCBmbGFnIGlmIGB1c2VyZmF1bHRmZF93cCh2bWEpYCByZXR1cm5zIHRydWUuIFRoYXQgc3VnZ2VzdHMgdGhpcyBwYXRjaCBpcyBzdWJ0bHkgY2hhbmdpbmcgaG93IHdlIHJlcG9ydCBwYWdlIHdyaXRlIHN0YXR1cyBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IGB1c2VyZmF1bHRmZF93cGAsIHNwZWNpZmljYWxseSBpbiB0aG9zZSB1bnBvcHVsYXRlZCBhcmVhcy4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgZmFjdCB0aGF0IGl0IG1vZGlmaWVzIHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bCBiZWhhdmlvciwgcGFydGljdWxhcmx5IGZvciBtZW1vcnkgcmVnaW9ucyB0aGF0IGFyZSBpbnRlbnRpb25hbGx5IHVucG9wdWxhdGVkIGJ1dCBtYW5hZ2VkIGJ5IGB1c2VyZmF1bHRmZF93cGAuLi4gdGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gaXMgZGVmaW5pdGVseSBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYC4KCk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgY29uZmlnIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4gSSBrbm93IGBQUk9DX1BBR0VfTU9OSVRPUmAgaXMgbmVjZXNzYXJ5LCBhbmQgb2YgY291cnNlLCBgVVNFUkZBVUxURkRgIGlzIGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgaXQgbW9kaWZpZXMuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzIHRoZSByaWdodCBvcHRpb24gZm9yIGVuYWJsaW5nIHRoZSBwcm9jIHBhZ2UgbW9uaXRvcmluZyBpbiB0aGUgYnVpbGQgY29uZmlnIHRvIGVuc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZz04Mz1jb25maWcgUFJPQ19TWVNDVExcbi0tXG5mcy9wcm9jL0tjb25maWctMTAxLVxuZnMvcHJvYy9LY29uZmlnOjEwMjpjb25maWcgUFJPQ19QQUdFX01PTklUT1JcbmZzL3Byb2MvS2NvbmZpZy0xMDMtIFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTU5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNvbmZpZ3VyYXRpb24gQ29udGV4dCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgY29uZmlndXJhdGlvbiBoZXJlLiBJJiMzOTttIGltbWVkaWF0ZWx5IHJlY29nbml6aW5nIHRoYXQgYFBST0NfUEFHRV9NT05JVE9SYCBpcyB0aGUga2V5IGZsYWcgZm9yIHRoZSBwYWdlIG1vbml0b3JpbmcgZnVuY3Rpb25hbGl0eS4gU3RyYWlnaHRmb3J3YXJkLiBBbmQsIGNpcmNsaW5nIGJhY2sgdG8gdGhlIGB1c2VyZmF1bHRmZF93cGAgZGlzY3Vzc2lvbiwgYFVTRVJGQVVMVEZEYCDigJMgdGhhdCYjMzk7cyB0aGUgc3BlY2lmaWMgY29uZmlnIHRoYXQgZW5hYmxlcyB0aGUgYHVzZXJmYXVsdGZkX3dwYCBmZWF0dXJlLiBHb29kLiBUaGF0IGNsYXJpZmllcyB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzIGZvciB0aG9zZSBmZWF0dXJlcy4gTm8gc3VycHJpc2VzIHRoZXJlLCBqdXN0IGNvbmZpcm1pbmcgdGhlIGV4cGVjdGVkIGFzc29jaWF0aW9ucyBpbiBteSBoZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0VSRkFVTFRGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTYwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYFVTRVJGQVVMVEZEYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgVVNFUkZBVUxURkRgLiBUaGlzIGlzIGxpa2VseSBhIG1hY3JvLCBwcm9iYWJseSBpbiBhIGhlYWRlciBmaWxlIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgZ2l2ZW4gaXRzIG5hbWluZyBjb252ZW50aW9uLiBJdCYjMzk7cyBhIHN5c3RlbSBjYWxsIG9yIGEgcmVsYXRlZCBjb25zdGFudC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdXNlIGBncmVwYCBvciBgZmluZGAgdG8gc2NhbiB0aHJvdWdoIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZCB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLCBsb29raW5nIGZvciAmIzM0O1VTRVJGQVVMVEZEJiMzNDsgYW5kICYjMzQ7dXNlcmZhdWx0ZmQmIzM0Oy4gTWF5YmUgSSBjYW4gbmFycm93IGl0IGRvd24gd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHMsIHN1Y2ggYXMgaW5jbHVkZS91YXBpIG9yIGluY2x1ZGUvbGludXguIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc28gSSBtaWdodCByZWZpbmUgdGhlIHNlYXJjaCB3aXRoIGtleXdvcmRzIGxpa2UgJiMzNDttbSYjMzQ7LCAmIzM0O2ZhdWx0JiMzNDssIG9yICYjMzQ7dXNlciBzcGFjZSYjMzQ7LiBUaGUga2VybmVsIGRvY3VtZW50YXRpb24gb24gdXNlcmZhdWx0ZmQgd291bGQgYmUgdmVyeSBoZWxwZnVsLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgbWFjcm8gaXMgaW1wb3J0YW50LiBJcyBpdCBhbiBpbnRlZ2VyIGNvbnN0YW50IHJlcHJlc2VudGluZyBhIHN5c3RlbSBjYWxsIG51bWJlciwgb3IgYSBmbGFnIGZvciBhbiBgaW9jdGxgIGNvbW1hbmQ/IFRoaXMgaW5pdGlhbCBzZWFyY2ggd2lsbCBoZWxwIG1lIG5hcnJvdyBkb3duIHRoZSBzcGVjaWZpYyBmaWxlIGFuZCBwdXJwb3NlLCBmcm9tIHRoZXJlIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJGQVVMVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4Mj1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG4tLVxubW0vS2NvbmZpZy0xMzg2LVxubW0vS2NvbmZpZzoxMzg3Om1lbnVjb25maWcgVVNFUkZBVUxURkRcbm1tL0tjb25maWctMTM4OC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MzEKCQkJCQkJCW91dHB1dDogMTM0CgkJCQkJCQl0aG91Z2h0czogNDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBVU0VSRkFVTFRGRGAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgYFVTRVJGQVVMVEZEYCBpcyBkZWZpbmVkIGluIGBtbS9LY29uZmlnYCwgdGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gbm90ZS4gTm93LCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudD8gVGhlIHRlc3QgdXNlcyBgTUFEVl9DT0xMQVBTRWAsIGBNQURWX0RPTlRORUVEYCwgYW5kIGBocGFnZV9zaXplYCB3aGljaCBpcyBpbmZvcm1hdGl2ZSwgYnV0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGNvdWxkIGJlIHVzZWZ1bCBoZXJlIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhhdCBUSFAgaG9sZSBzY2VuYXJpbywgYWx0aG91Z2ggdGhlIGNvcmUgY29kZSBhcHBsaWVzIHRvIGFueSBQVEUgaG9sZSwgcmlnaHQ/IEV2ZW4gdGhvc2UgY3JlYXRlZCBieSBkcm9wcGluZyBub3JtYWwgcGFnZXMgdXNpbmcgYE1BRFZfRE9OVE5FRURgLgoKSG9sZCBvbiwgdGhlIGNvbW1lbnQgY2xhcmlmaWVzIGl0OiBhbiB1bnBvcHVsYXRlZCByYW5nZSwgd2l0aG91dCBhbnkgcGFnZSB0YWJsZSwgbGlrZSBhIDJNQiBhbm9ueW1vdXMgVEhQIHRoYXQmIzM5O3MgYmVlbiBkcm9wcGVkIHZpYSBgTUFEVl9ET05UTkVFRGAgaXMgcmVhZCBhcyB3cml0dGVuIHVuZGVyIGEgdWZmZC13cCBWTUEuIFRoYXQgbWFrZXMgc2Vuc2UsIGl0JiMzOTtzIG1hdGNoaW5nIHRoZSBgcHRlX25vbmVgIGNhc2UuIFRoaXMgaXMgY3J1Y2lhbDogdGhlIHBhdGNoIGFsbG93cyB0aGUgUE1fU0NBTl9XUF9NQVRDSElORyBhcm1pbmcgYmVsb3cgdG8gaW5zdGFsbCBtYXJrZXJzIHdoZW4gd2UgZW5jb3VudGVyIHRoZXNlIHVucG9wdWxhdGVkIHJlZ2lvbnMsIHNvIHRoZSBuZXh0IHNjYW4gdHJlYXRzIGl0IGFzIGNsZWFuIHVudGlsIGl0IGlzIHJld3JpdHRlbi4gU28gaXQgaXNuJiMzOTt0IHNwZWNpZmljYWxseSAqb25seSogaHVnZSBwYWdlcy4gSXQgYXBwbGllcyB0byBhbnkgdW5wb3B1bGF0ZWQgcmFuZ2UsIGJ1dCBUSFAgaXMgYSBnb29kIGV4YW1wbGUgdG8gaGF2ZSBpbiBtaW5kLiBJIHRoaW5rIEkmIzM5O2xsIGFkZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRvIGJlIHNhZmUsIGp1c3QgdG8gY292ZXIgdGhhdCBiYXNlLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBkb19wYWdlbWFwX3NjYW5gIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gTGV0JiMzOTtzIHNlZS4uLiBgZG9fcGFnZW1hcF9zY2FuYCBpcyBjYWxsZWQgZnJvbSBgZG9fcGFnZW1hcF9jbWRgIHdoaWNoIGlzIGFuIGB1bmxvY2tlZF9pb2N0bGAgZm9yIGAvcHJvYy9waWQvcGFnZW1hcGAuIFl1cCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdXNlcnNwYWNlIGludGVyZmFjZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLiBIZXJlJiMzOTtzIG15IHN1bW1hcnk6CgoqICAgKipXb3J0aEZ1enppbmcqKjogKlRydWUqCiogICAqKkZvY3VzU3ltYm9scyoqOiBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYAoqICAgKipFbmFibGVDb25maWdzKio6IGBQUk9DX1BBR0VfTU9OSVRPUmAsIGBVU0VSRkFVTFRGRGAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIGBQQUdFTUFQX1NDQU5gIGlvY3RsIG9uIGAvcHJvYy9waWQvcGFnZW1hcGAsIGVuc3VyaW5nIGNvcnJlY3QgcmVwb3J0aW5nIG9mIHVucG9wdWxhdGVkIHJlZ2lvbnMgKFBURSBob2xlcykgYXMgd3JpdHRlbiB3aGVuIHRoZSBWTUEgdXRpbGl6ZXMgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgZXhwb3NlcyBhIG5ldyBiZWhhdmlvciB2aWEgdGhlIHByb2NmcyBpbnRlcmZhY2UuIFRoZSBjaGFuZ2UgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OywKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlbWFwX3NjYW5fcHRlX2hvbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAgdG8gY29ycmVjdGx5IHJlcG9ydCB1bnBvcHVsYXRlZCByYW5nZXMgKFBURSBob2xlcykgYXMgd3JpdHRlbiB3aGVuIHRoZSBWTUEgaGFzIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50L3Byb2NmcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZW1hcF9zY2FuX3B0ZV9ob2xlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIG9uIC9wcm9jL3BpZC9wYWdlbWFwIHRvIGNvcnJlY3RseSByZXBvcnQgdW5wb3B1bGF0ZWQgcmFuZ2VzIChQVEUgaG9sZXMpIGFzIHdyaXR0ZW4gd2hlbiB0aGUgVk1BIGhhcyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC9wcm9jZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6MzUuMjk2ODM3NDkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5NTA4MDExMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIixcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VtYXBfc2Nhbl9wdGVfaG9sZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIG9uIC9wcm9jL3BpZC9wYWdlbWFwIHRvIGNvcnJlY3RseSByZXBvcnQgdW5wb3B1bGF0ZWQgcmFuZ2VzIChQVEUgaG9sZXMpIGFzIHdyaXR0ZW4gd2hlbiB0aGUgVk1BIGhhcyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC9wcm9jZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNjozNS4yOTY4NDU3NzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTE3NTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMxMjE3ZmUxMDUyZDEwZDc2MzkwMWE4YmJiMzlhMWJhZDA0MjA5Y2FcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAyMzowNjozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcXG5pbmRleCBlNDMwMmZjZjAyMjdkNy4uZTQ3ZjcxY2QzMGE1OGEgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXFxuKysrIGIvZnMvcHJvYy90YXNrX21tdS5jXFxuQEAgLTMwNTAsMTIgKzMwNTAsMjggQEAgc3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4rXFx0dW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzO1xcbiBcXHRpbnQgcmV0LCBlcnI7XFxuIFxcbi1cXHRpZiAoIXZtYSB8fCAhcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UocC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCkpXFxuK1xcdGlmICghdm1hKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFuIHVucG9wdWxhdGVkIHJhbmdlIHdpdGggbm8gcGFnZSB0YWJsZSAtLSBlLmcuIGEgMk1CIGFub24gVEhQXFxuK1xcdCAqIGRyb3BwZWQgdmlhIE1BRFZfRE9OVE5FRUQsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXNcXG4rXFx0ICogLS0gcmVhZHMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBtYXRjaGluZyB0aGUgcHRlX25vbmUgY2FzZVxcbitcXHQgKiB0aGVyZS4gUmVwb3J0aW5nIGl0IGFsc28gbGV0cyB0aGUgUE1fU0NBTl9XUF9NQVRDSElORyBhcm1pbmcgYmVsb3dcXG4rXFx0ICogaW5zdGFsbCBtYXJrZXJzICh1ZmZkX3dwX3JhbmdlKCkgYWxsb2NhdGVzIHRoZSBwYWdlIHRhYmxlIHVuZGVyXFxuK1xcdCAqIFdQX1VOUE9QVUxBVEVEKSwgc28gdGhlIG5leHQgc2NhbiBzZWVzIGl0IGNsZWFuIHVudGlsIHJlLXdyaXR0ZW4uXFxuK1xcdCAqL1xcbitcXHRjYXRlZ29yaWVzID0gcC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeTtcXG4rXFx0aWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkpXFxuK1xcdFxcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19XUklUVEVOO1xcbitcXG4rXFx0aWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtXFx1MDAzZWN1cl92bWFfY2F0ZWdvcnksIHAsIGFkZHIsIFxcdTAwMjZlbmQpO1xcbitcXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIGFkZHIsIFxcdTAwMjZlbmQpO1xcbiBcXHRpZiAoYWRkciA9PSBlbmQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCBmOWJjZmY4ZTc4ZmFiYi4uYTRlOGNjOGFlYTRiN2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuQEAgLTI1LDYgKzI1LDEwIEBAXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbisjaWZuZGVmIE1BRFZfQ09MTEFQU0VcXG4rI2RlZmluZSBNQURWX0NPTExBUFNFIDI1XFxuKyNlbmRpZlxcbitcXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXFx0XFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IFBBR0VfSVNfU1dBUFBFRCB8IFBBR0VfSVNfUEZOWkVSTyB8XFx0XFxcXFxcbkBAIC0xMTAyLDYgKzExMDYsNTkgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KHZvaWQpXFxuIFxcdG11bm1hcChtZW0sIG1lbV9zaXplKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQSAyTUIgYW5vbiBUSFAgZHJvcHBlZCB3aXRoIE1BRFZfRE9OVE5FRUQgbGVhdmVzIGEgcG1kX25vbmUgaG9sZSB3aXRoIG5vXFxuKyAqIHBhZ2UgdGFibGUsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXMuIFBBR0VNQVBfU0NBTiBtdXN0XFxuKyAqIHN0aWxsIHJlcG9ydCBpdCBhcyB3cml0dGVuIG9uIGEgdWZmZC13cCBWTUEsIHZpYSBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3RocF9ob2xlX3Rlc3Qodm9pZClcXG4re1xcbitcXHRsb25nIG5wYWdlcywgd3JpdHRlbiA9IDAsIHJldCwgaTtcXG4rXFx0c3RydWN0IHBhZ2VfcmVnaW9uIHJlZ2lvbnNbMTZdO1xcbitcXHRjaGFyICphcmVhLCAqbWVtO1xcbitcXG4rXFx0aWYgKCFocGFnZV9zaXplKSB7XFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiJXMgVEhQIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdG5wYWdlcyA9IGhwYWdlX3NpemUgLyBwYWdlX3NpemU7XFxuK1xcbitcXHQvKiBHZXQgYSBQTUQtYWxpZ25lZCByYW5nZSBzbyB0aGUgcmFuZ2UgY2FuIGJlIGEgc2luZ2xlIFRIUC4gKi9cXG4rXFx0YXJlYSA9IG1tYXAoTlVMTCwgMiAqIGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcXG4rXFx0aWYgKGFyZWEgPT0gTUFQX0ZBSUxFRClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyBtbWFwIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRtZW0gPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpYXJlYSArIGhwYWdlX3NpemUgLSAxKSBcXHUwMDI2IH4oaHBhZ2Vfc2l6ZSAtIDEpKTtcXG4rXFxuK1xcdG1lbXNldChtZW0sIDEsIGhwYWdlX3NpemUpO1xcbitcXHRpZiAobWFkdmlzZShtZW0sIGhwYWdlX3NpemUsIE1BRFZfQ09MTEFQU0UpIHx8XFxuK1xcdCAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgMSwgaHBhZ2Vfc2l6ZSkpIHtcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCIlcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRtdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHdwX2luaXQobWVtLCBocGFnZV9zaXplKTtcXG4rXFxuK1xcdC8qIERyb3AgdGhlIHdob2xlIFBNRDogaXQgaXMgY2xlYXJlZCB0byBhIHBtZF9ub25lIGhvbGUuICovXFxuK1xcdGlmIChtYWR2aXNlKG1lbSwgaHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgTUFEVl9ET05UTkVFRCBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFxuK1xcdHJldCA9IHBhZ2VtYXBfaW9jdGwobWVtLCBocGFnZV9zaXplLCByZWdpb25zLCAxNiwgMCwgMCxcXG4rXFx0XFx0XFx0ICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgc2NhbiBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJldDsgaSsrKVxcbitcXHRcXHR3cml0dGVuICs9IExFTihyZWdpb25zW2ldKTtcXG4rXFxuK1xcdGtzZnRfdGVzdF9yZXN1bHQod3JpdHRlbiA9PSBucGFnZXMsXFxuK1xcdFxcdFxcdCBcXFwiJXMgcG1kLWhvbGUgcmVwb3J0ZWQgd3JpdHRlbiAoJWxkIG9mICVsZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBfX2Z1bmNfXywgd3JpdHRlbiwgbnBhZ2VzKTtcXG4rXFxuK1xcdHdwX2ZyZWUobWVtLCBocGFnZV9zaXplKTtcXG4rXFx0bXVubWFwKGFyZWEsIDIgKiBocGFnZV9zaXplKTtcXG4rfVxcbitcXG4gaW50IHNhbml0eV90ZXN0cyh2b2lkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgdmVjX3NpemU7XFxuQEAgLTE2MTAsNyArMTY2Nyw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KDQpKVxcbiBcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiSHVnZVRMQiB0ZXN0IHdpbGwgYmUgc2tpcHBlZFxcXFxuXFxcIik7XFxuIFxcbi1cXHRrc2Z0X3NldF9wbGFuKDExOCk7XFxuK1xcdGtzZnRfc2V0X3BsYW4oMTE5KTtcXG4gXFxuIFxcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XFxuIFxcdGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbkBAIC0xNzkwLDYgKzE4NDcsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXG4gXFx0LyogMTguIFVucG9wdWxhdGVkIHB0ZSBzY2FuLXBhdGggY29uc2lzdGVuY3kgKi9cXG4gXFx0dW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KCk7XFxuK1xcdHVucG9wdWxhdGVkX3RocF9ob2xlX3Rlc3QoKTtcXG4gXFxuIFxcdGNsb3NlKHBhZ2VtYXBfZmQpO1xcbiBcXHRrc2Z0X2ZpbmlzaGVkKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjM1Ljc4Njk5MDcxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0NjA2MzgzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIixcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VtYXBfc2Nhbl9wdGVfaG9sZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIG9uIC9wcm9jL3BpZC9wYWdlbWFwIHRvIGNvcnJlY3RseSByZXBvcnQgdW5wb3B1bGF0ZWQgcmFuZ2VzIChQVEUgaG9sZXMpIGFzIHdyaXR0ZW4gd2hlbiB0aGUgVk1BIGhhcyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC9wcm9jZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMxMjE3ZmUxMDUyZDEwZDc2MzkwMWE4YmJiMzlhMWJhZDA0MjA5Y2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDIzOjA2OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXG5pbmRleCBlNDMwMmZjZjAyMjdkNy4uZTQ3ZjcxY2QzMGE1OGEgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbisrKyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTMwNTAsMTIgKzMwNTAsMjggQEAgc3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuK1x0dW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzO1xuIFx0aW50IHJldCwgZXJyO1xuIFxuLVx0aWYgKCF2bWEgfHwgIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCkpXG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKlxuK1x0ICogQW4gdW5wb3B1bGF0ZWQgcmFuZ2Ugd2l0aCBubyBwYWdlIHRhYmxlIC0tIGUuZy4gYSAyTUIgYW5vbiBUSFBcbitcdCAqIGRyb3BwZWQgdmlhIE1BRFZfRE9OVE5FRUQsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXNcbitcdCAqIC0tIHJlYWRzIGFzIHdyaXR0ZW4gb24gYSB1ZmZkLXdwIFZNQSwgbWF0Y2hpbmcgdGhlIHB0ZV9ub25lIGNhc2VcbitcdCAqIHRoZXJlLiBSZXBvcnRpbmcgaXQgYWxzbyBsZXRzIHRoZSBQTV9TQ0FOX1dQX01BVENISU5HIGFybWluZyBiZWxvd1xuK1x0ICogaW5zdGFsbCBtYXJrZXJzICh1ZmZkX3dwX3JhbmdlKCkgYWxsb2NhdGVzIHRoZSBwYWdlIHRhYmxlIHVuZGVyXG4rXHQgKiBXUF9VTlBPUFVMQVRFRCksIHNvIHRoZSBuZXh0IHNjYW4gc2VlcyBpdCBjbGVhbiB1bnRpbCByZS13cml0dGVuLlxuK1x0ICovXG4rXHRjYXRlZ29yaWVzID0gcC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5O1xuK1x0aWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkpXG4rXHRcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19XUklUVEVOO1xuK1xuK1x0aWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCwgYWRkciwgXHUwMDI2ZW5kKTtcbitcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgYWRkciwgXHUwMDI2ZW5kKTtcbiBcdGlmIChhZGRyID09IGVuZClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbmluZGV4IGY5YmNmZjhlNzhmYWJiLi5hNGU4Y2M4YWVhNGI3YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjUsNiArMjUsMTAgQEBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuKyNpZm5kZWYgTUFEVl9DT0xMQVBTRVxuKyNkZWZpbmUgTUFEVl9DT0xMQVBTRSAyNVxuKyNlbmRpZlxuK1xuICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTFx0XHQoUEFHRV9JU19XUEFMTE9XRUQgfCBQQUdFX0lTX1dSSVRURU4gfFx0XFxcbiBcdFx0XHRcdFx0IFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8XHRcXFxuIFx0XHRcdFx0XHQgUEFHRV9JU19TV0FQUEVEIHwgUEFHRV9JU19QRk5aRVJPIHxcdFxcXG5AQCAtMTEwMiw2ICsxMTA2LDU5IEBAIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKVxuIFx0bXVubWFwKG1lbSwgbWVtX3NpemUpO1xuIH1cbiBcbisvKlxuKyAqIEEgMk1CIGFub24gVEhQIGRyb3BwZWQgd2l0aCBNQURWX0RPTlRORUVEIGxlYXZlcyBhIHBtZF9ub25lIGhvbGUgd2l0aCBub1xuKyAqIHBhZ2UgdGFibGUsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXMuIFBBR0VNQVBfU0NBTiBtdXN0XG4rICogc3RpbGwgcmVwb3J0IGl0IGFzIHdyaXR0ZW4gb24gYSB1ZmZkLXdwIFZNQSwgdmlhIHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSgpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3RocF9ob2xlX3Rlc3Qodm9pZClcbit7XG4rXHRsb25nIG5wYWdlcywgd3JpdHRlbiA9IDAsIHJldCwgaTtcbitcdHN0cnVjdCBwYWdlX3JlZ2lvbiByZWdpb25zWzE2XTtcbitcdGNoYXIgKmFyZWEsICptZW07XG4rXG4rXHRpZiAoIWhwYWdlX3NpemUpIHtcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiJXMgVEhQIG5vdCBzdXBwb3J0ZWRcXG5cIiwgX19mdW5jX18pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRucGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZV9zaXplO1xuK1xuK1x0LyogR2V0IGEgUE1ELWFsaWduZWQgcmFuZ2Ugc28gdGhlIHJhbmdlIGNhbiBiZSBhIHNpbmdsZSBUSFAuICovXG4rXHRhcmVhID0gbW1hcChOVUxMLCAyICogaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuK1x0aWYgKGFyZWEgPT0gTUFQX0ZBSUxFRClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgbW1hcCBmYWlsZWRcXG5cIiwgX19mdW5jX18pO1xuK1x0bWVtID0gKGNoYXIgKikoKCh1bnNpZ25lZCBsb25nKWFyZWEgKyBocGFnZV9zaXplIC0gMSkgXHUwMDI2IH4oaHBhZ2Vfc2l6ZSAtIDEpKTtcbitcbitcdG1lbXNldChtZW0sIDEsIGhwYWdlX3NpemUpO1xuK1x0aWYgKG1hZHZpc2UobWVtLCBocGFnZV9zaXplLCBNQURWX0NPTExBUFNFKSB8fFxuK1x0ICAgICFjaGVja19odWdlX2Fub24obWVtLCAxLCBocGFnZV9zaXplKSkge1xuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdG11bm1hcChhcmVhLCAyICogaHBhZ2Vfc2l6ZSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHdwX2luaXQobWVtLCBocGFnZV9zaXplKTtcbitcbitcdC8qIERyb3AgdGhlIHdob2xlIFBNRDogaXQgaXMgY2xlYXJlZCB0byBhIHBtZF9ub25lIGhvbGUuICovXG4rXHRpZiAobWFkdmlzZShtZW0sIGhwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyBNQURWX0RPTlRORUVEIGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4rXG4rXHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgaHBhZ2Vfc2l6ZSwgcmVnaW9ucywgMTYsIDAsIDAsXG4rXHRcdFx0ICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIHNjYW4gZmFpbGVkXFxuXCIsIF9fZnVuY19fKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJldDsgaSsrKVxuK1x0XHR3cml0dGVuICs9IExFTihyZWdpb25zW2ldKTtcbitcbitcdGtzZnRfdGVzdF9yZXN1bHQod3JpdHRlbiA9PSBucGFnZXMsXG4rXHRcdFx0IFwiJXMgcG1kLWhvbGUgcmVwb3J0ZWQgd3JpdHRlbiAoJWxkIG9mICVsZClcXG5cIixcbitcdFx0XHQgX19mdW5jX18sIHdyaXR0ZW4sIG5wYWdlcyk7XG4rXG4rXHR3cF9mcmVlKG1lbSwgaHBhZ2Vfc2l6ZSk7XG4rXHRtdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpO1xuK31cbitcbiBpbnQgc2FuaXR5X3Rlc3RzKHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCB2ZWNfc2l6ZTtcbkBAIC0xNjEwLDcgKzE2NjcsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoNCkpXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiSHVnZVRMQiB0ZXN0IHdpbGwgYmUgc2tpcHBlZFxcblwiKTtcbiBcbi1cdGtzZnRfc2V0X3BsYW4oMTE4KTtcbitcdGtzZnRfc2V0X3BsYW4oMTE5KTtcbiBcbiBcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHRocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbkBAIC0xNzkwLDYgKzE4NDcsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0LyogMTguIFVucG9wdWxhdGVkIHB0ZSBzY2FuLXBhdGggY29uc2lzdGVuY3kgKi9cbiBcdHVucG9wdWxhdGVkX3NjYW5fdGVzdCgpO1xuK1x0dW5wb3B1bGF0ZWRfdGhwX2hvbGVfdGVzdCgpO1xuIFxuIFx0Y2xvc2UocGFnZW1hcF9mZCk7XG4gXHRrc2Z0X2ZpbmlzaGVkKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNjozNS43ODY5OTMxODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTYyNDgxNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IE1vZGlmaWNhdGlvbnMgdG8gYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCBzZWVtcyB0byB0b3VjaCB0d28gYXJlYXM6IGBmcy9wcm9jL3Rhc2tfbW11LmNgIGFuZCBhIHNlbGZ0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNgLiBNeSBmb2N1cyBpcyBwcmltYXJpbHkgb24gdGhlIGNvcmUgY2hhbmdlIHdpdGhpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGEgYHVzZXJmYXVsdGZkX3dwKHZtYSlgIGNoZWNrIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBhbG9uZyB3aXRoIHNldHRpbmcgYFBBR0VfSVNfV1JJVFRFTmAgaW4gYGNhdGVnb3JpZXNgIGlmIHRoYXQgY2hlY2sgcGFzc2VzLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgc28gSSdsbCBkaXZlIGludG8gdGhlIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSB0aGUgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgZnVuY3Rpb24uIEknbGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24uIEknbGwgbmVlZCB0byBrbm93IHdoYXQgY29uZmlndXJhdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoaXMgYmVoYXZpb3IsIG9yIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHdyaXRlIHByb3RlY3Rpb24uIEkgdGhpbmsgdGhlIHF1aWNrZXN0IHdheSB0byB6ZXJvIGluIG9uIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGlzIHRvIHVzZSBgZ3JlcHBlcmAsIGFzIHRoYXQgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBjb25kaXRpb25hbHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgdGhlIGNvZGUgbWlnaHQgaGF2ZSwgb3Igb3RoZXIgY29kZSB1c2luZyB0aGVzZSBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjM5Ljk0OTQ3ODg0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQ0Njk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwX3NjYW5fcHRlX2hvbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0zMDQxPXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfaG9sZV93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ3LVxcbmZzL3Byb2MvdGFza19tbXUuYzozMDQ4OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwNDktXFx0XFx0XFx0XFx0IGludCBkZXB0aCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzA5MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfc2Nhbl9vcHMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5My1cXHQucG1kX2VudHJ5ID0gcGFnZW1hcF9zY2FuX3BtZF9lbnRyeSxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5NDpcXHQucHRlX2hvbGUgPSBwYWdlbWFwX3NjYW5fcHRlX2hvbGUsXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwOTUtXFx0Lmh1Z2V0bGJfZW50cnkgPSBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NDAuMDI3OTM0NjQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MjQxNjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBmcy9wcm9jL3Rhc2tfbW11LmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGZpbGUuIFRoaXMgbWVhbnMgSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMg4oCTIHRoZSBLY29uZmlnIHN5bWJvbHMgdGhhdCwgd2hlbiBzZXQsIHdpbGwgdWx0aW1hdGVseSBjYXVzZSB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUgdG8gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIG1ldGhvZHMgZm9yIHRoaXMgc29ydCBvZiBpbnZlc3RpZ2F0aW9uLiBJJ20gcHJvYmFibHkgZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGBmaW5kYCBhbmQgdGhlbiBgZ3JlcGAgY29tYm8gdG8gbG9vayB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIG9yIG1heWJlIGRpdmUgcmlnaHQgaW50byBhIGNyb3NzLXJlZmVyZW5jZWQgYnVpbGQgc3lzdGVtIG91dHB1dC4gRGVwZW5kaW5nIG9uIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGlzIHN0cnVjdHVyZWQsIHRoZXJlIG1heSBiZSBhIHNob3J0Y3V0IHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgZGlyZWN0bHksIG9yIEkgbWlnaHQgaGF2ZSB0byBnbyB0aHJvdWdoIGEgY2FzY2FkZSBvZiBpbmNsdWRlcyBhbmQgZGVwZW5kZW5jaWVzLiBJdOKAmXMgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHByb2Nlc3MgaW5mb3JtYXRpb24sIG9yIHBvc3NpYmx5IGV2ZW4gc2VjdXJpdHkgZmVhdHVyZXMgdGhhdCB1c2UgdGhlIGAvcHJvY2AgZmlsZXN5c3RlbS4gSSdtIGV4cGVjdGluZyBpdCB0byBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhcyBpdCdzIGEgcmVsYXRpdmVseSBmb2N1c2VkIGFyZWEgb2YgdGhlIGtlcm5lbC4gSG9wZWZ1bGx5LCBpdOKAmXMgbm90IHRvbyBkZWVwbHkgYnVyaWVkIGluIGEgY29tcGxleCBkZXBlbmRlbmN5IGNoYWluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NDMuNTEwMzU0Mzk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTU5MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRhc2tfbW11Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL01ha2VmaWxlPTY9b2JqLXkgICArPSBwcm9jLm9cXG5mcy9wcm9jL01ha2VmaWxlLTctXFxuZnMvcHJvYy9NYWtlZmlsZTo4OkNGTEFHU190YXNrX21tdS5vXFx0Kz0gLVduby1vdmVycmlkZS1pbml0XFxuZnMvcHJvYy9NYWtlZmlsZS05LXByb2MteVxcdFxcdFxcdDo9IG5vbW11Lm8gdGFza19ub21tdS5vXFxuZnMvcHJvYy9NYWtlZmlsZToxMDpwcm9jLSQoQ09ORklHX01NVSlcXHQ6PSB0YXNrX21tdS5vXFxuZnMvcHJvYy9NYWtlZmlsZS0xMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NDMuNTcwNTIyOTc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMDkzMjY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIENvbmZpZ3VyYXRpb24gQ2hhbmdlKipcblxuT2theSwgc28gYENPTkZJR19NTVVgIGlzIHRoZSB0cmlnZ2VyIGhlcmUsIGFuZCB0aGF0IHB1bGxzIGluIGB0YXNrX21tdS5vYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gQnV0IHRoZSByZWFsIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9kaWZpY2F0aW9uIHRvIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgLiBBbmQgdGhhdCdzIHBhcnQgb2YgdGhlIGBwYWdlbWFwX3NjYW5fb3BzYCBzdHJ1Y3R1cmUuIEltbWVkaWF0ZWx5LCB0aGF0IHJpbmdzIGFsYXJtIGJlbGxzOiB0aGlzIGlzIGNvbm5lY3RlZCB0byB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHdvIGFyZSBpbnRlcnJlbGF0ZWQgYW5kIHdoYXQgY2hhbmdlcyB0aGV5IGFyZSBtYWtpbmcgYW5kIHdoYXQgdGhhdCBtZWFucyBmb3IgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYHVzZXJmYXVsdGZkX3dwYC4gQW5kIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlnIG9wdGlvbnMgY29udHJvbCB0aGF0IGZ1bmN0aW9uIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSBtaWdodCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYwMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjQ2LjgwMTQ1ODUzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTc0ODIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF93cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU1NT1zdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01NjItXFx0LyogT25seSBjb3B5IFBURSBtYXJrZXJzIGlmIFVGRkQgcmVnaXN0ZXIgbWF0Y2hlcy4gKi9cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjU2MzpcXHRpZiAoKHNyY20gXFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1ApIFxcdTAwMjZcXHUwMDI2IHVzZXJmYXVsdGZkX3dwKGRzdF92bWEpKVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTY0LVxcdFxcdGRzdG0gfD0gUFRFX01BUktFUl9VRkZEX1dQO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD01ODI9cHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTkzLVxcdC8qXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1OTQ6XFx0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2Vzbid0IG5lZWQgdGhpcyB3aG9sZVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTk1LVxcdCAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQncyBkcm9wcGluZyB0aGVcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTk4LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTk5OlxcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC02MDAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MTk2PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9taXNzaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjAwLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIwMTpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjAyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTIxMT1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcHRlX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjEzLXtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMTQ6XFx0cmV0dXJuIHVzZXJmYXVsdGZkX3dwKHZtYSkgXFx1MDAyNlxcdTAwMjYgcHRlX3VmZmRfd3AocHRlKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMTUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjE3PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9odWdlX3BtZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIxOS17XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjIwOlxcdHJldHVybiB1c2VyZmF1bHRmZF93cCh2bWEpIFxcdTAwMjZcXHUwMDI2IHBtZF91ZmZkX3dwKHBtZCk7XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjIxLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTI1Mj1leHRlcm4gdm9pZCB1c2VyZmF1bHRmZF91bm1hcF9jb21wbGV0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNTQ6ZXh0ZXJuIGJvb2wgdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI1NTpleHRlcm4gYm9vbCB1c2VyZmF1bHRmZF93cF9hc3luYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjU2LVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI1NzpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfdXNlX21hcmtlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjU4LXtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTktXFx0LyogT25seSB3ci1wcm90ZWN0IG1vZGUgdXNlcyBwdGUgbWFya2VycyAqL1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI2MDpcXHRpZiAoIXVzZXJmYXVsdGZkX3dwKHZtYSkpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjYxLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTI3MC1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNzE6XFx0cmV0dXJuIHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKHZtYSk7XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjcyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTMxNj1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlzc2luZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTMyMC1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDozMjE6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTMyMi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0zOTg9c3RhdGljIGlubGluZSBib29sIHVmZmRfZGlzYWJsZV9mYXVsdF9hcm91bmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDItXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6NDAzOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDQte1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtNDA3LVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjQwODpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtNDA5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTQxMz1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc191ZmZkX3dpdGhvdXRfZXZlbnRfcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MTctXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6NDE4OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNjo0Ni44OTcyMTU0MjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIwOTYyMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYSBQYWdlIFRhYmxlIFNjYW4gTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gc29tZW9uZSdzIHR3ZWFrZWQgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGdyYXNwIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgbW9kaWZpY2F0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0J3Mgbm93IGNoZWNraW5nIGB1c2VyZmF1bHRmZF93cCh2bWEpYC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwuIEl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZSBpbiBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYCBhbmQgYFBBR0VNQVBfU0NBTmAgaW9jdGwgYXJlIGNvbm5lY3RlZC4gTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhY3RpdmF0ZSB0aGlzIGBQQUdFTUFQX1NDQU5gIGZ1bmN0aW9uYWxpdHkuIElzIGl0IGEgY29yZSBmZWF0dXJlLCBhIGRlYnVnIGZsYWcsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBVbmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb24gaXMgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIHRoZSBpbXBhY3QgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb2RlIGNoYW5nZSwgZXNwZWNpYWxseSB3aXRoaW4gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIGFuZCBob3cgdGhvc2Ugc3Vic3lzdGVtcyBhcmUgY29uZmlndXJlZCB0byBvcGVyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzU5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NTAuMjE4MTgxMzU3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTM1NDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQQUdFTUFQX1NDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTMyNjg9c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3My1cXHRzd2l0Y2ggKGNtZCkge1xcbmZzL3Byb2MvdGFza19tbXUuYzozMjc0OlxcdGNhc2UgUEFHRU1BUF9TQ0FOOlxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjc1LVxcdFxcdHJldHVybiBkb19wYWdlbWFwX3NjYW4obW0sIGFyZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjUwLjI3NzU0NTU0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzM3NjQ3NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBQQUdFTUFQX1NDQU5gKipcblxuQWxyaWdodCwgc28gYFBBR0VNQVBfU0NBTmDigKYgdGhhdCdzIGFuIGBpb2N0bGAgc3BlY2lmaWNhbGx5IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3BhZ2VtYXBgIGZpbGUsIHJpZ2h0PyBJdCdzIGJlZW4gYSB3aGlsZSBzaW5jZSBJJ3ZlIGRpdmVkIGludG8gdGhpcyBhcmVhLCBidXQgdGhhdCBmZWVscyByaWdodC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hhdCdzIHRoZSBwcmVyZXF1aXNpdGUgY29uZmlndXJhdGlvbj8gSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyB0aWVkIHRvIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLiBCZXR0ZXIgZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCB2ZXJpZnkgdGhhdCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBpcyBpbmRlZWQgdGhlIGtleSBlbmFibGluZyBmYWN0b3IuIExldCdzIGRpZyBpbiBhbmQgbWFrZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NTMuMDE1MTk2ODk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQxMzI4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZW1hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNjo1My4wNzM2MjE4MzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwNjYzOTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgb2YgYSBQcm9jZXNzKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgcGFnZSBtYXBwaW5nIGZvciBhIHNwZWNpZmljIHRhc2suIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiBgZnMvcHJvYy90YXNrX21tdS5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggdGhlIHBhZ2VtYXAuIFRoaXMgZmlsZSBpcyB3aGVyZSBJJ2QgYW50aWNpcGF0ZSB0aGUgY29yZSBsb2dpYyBmb3IgdHJhbnNsYXRpbmcgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIHBhcnRpY3VsYXIgcHJvY2VzcyDigJMgaXQncyBwcmFjdGljYWxseSAqZ3VhcmFudGVlZCogdG8gaG91c2UgdGhlIGBwYWdlbWFwYCBpbXBsZW1lbnRhdGlvbnMuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDM0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NTUuNzgwMjY2NTc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQwODI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXFx1MDAzZVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTE5MzU9dHlwZWRlZiBzdHJ1Y3Qge1xcbmZzL3Byb2MvdGFza19tbXUuYy0xOTM2LVxcdHU2NCBwbWU7XFxuZnMvcHJvYy90YXNrX21tdS5jOjE5Mzc6fSBwYWdlbWFwX2VudHJ5X3Q7XFxuZnMvcHJvYy90YXNrX21tdS5jLTE5MzgtXFxuZnMvcHJvYy90YXNrX21tdS5jOjE5Mzk6c3RydWN0IHBhZ2VtYXByZWFkIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk0MC1cXHRpbnQgcG9zLCBsZW47XFx0XFx0LyogdW5pdHM6IFBNX0VOVFJZX0JZVEVTLCBub3QgYnl0ZXMgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTk0MTpcXHRwYWdlbWFwX2VudHJ5X3QgKmJ1ZmZlcjtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk0Mi1cXHRib29sIHNob3dfcGZuO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTE5NDctXFxuZnMvcHJvYy90YXNrX21tdS5jOjE5NDg6I2RlZmluZSBQTV9FTlRSWV9CWVRFU1xcdFxcdHNpemVvZihwYWdlbWFwX2VudHJ5X3QpXFxuZnMvcHJvYy90YXNrX21tdS5jLTE5NDktI2RlZmluZSBQTV9QRlJBTUVfQklUU1xcdFxcdDU1XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk2MC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTk2MTpzdGF0aWMgaW5saW5lIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncylcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk2Mi17XFxuZnMvcHJvYy90YXNrX21tdS5jOjE5NjM6XFx0cmV0dXJuIChwYWdlbWFwX2VudHJ5X3QpIHsgLnBtZSA9IChmcmFtZSBcXHUwMDI2IFBNX1BGUkFNRV9NQVNLKSB8IGZsYWdzIH07XFxuZnMvcHJvYy90YXNrX21tdS5jLTE5NjQtfVxcbmZzL3Byb2MvdGFza19tbXUuYy0xOTY1LVxcbmZzL3Byb2MvdGFza19tbXUuYzoxOTY2OnN0YXRpYyBpbnQgYWRkX3RvX3BhZ2VtYXAocGFnZW1hcF9lbnRyeV90ICpwbWUsIHN0cnVjdCBwYWdlbWFwcmVhZCAqcG0pXFxuZnMvcHJvYy90YXNrX21tdS5jLTE5Njcte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTE5NzQ9c3RhdGljIGJvb2wgX19mb2xpb19wYWdlX21hcHBlZF9leGNsdXNpdmVseShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xOTgwLVxcbmZzL3Byb2MvdGFza19tbXUuYzoxOTgxOnN0YXRpYyBpbnQgcGFnZW1hcF9wdGVfaG9sZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk4Mi1cXHRcXHRcXHQgICAgX19hbHdheXNfdW51c2VkIGludCBkZXB0aCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuZnMvcHJvYy90YXNrX21tdS5jLTE5ODMte1xcbmZzL3Byb2MvdGFza19tbXUuYzoxOTg0OlxcdHN0cnVjdCBwYWdlbWFwcmVhZCAqcG0gPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbmZzL3Byb2MvdGFza19tbXUuYy0xOTg1LVxcdHVuc2lnbmVkIGxvbmcgYWRkciA9IHN0YXJ0O1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTE5ODktXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBmaW5kX3ZtYSh3YWxrLVxcdTAwM2VtbSwgYWRkcik7XFxuZnMvcHJvYy90YXNrX21tdS5jOjE5OTA6XFx0XFx0cGFnZW1hcF9lbnRyeV90IHBtZSA9IG1ha2VfcG1lKDAsIDApO1xcbmZzL3Byb2MvdGFza19tbXUuYy0xOTkxLVxcdFxcdC8qIEVuZCBvZiBhZGRyZXNzIHNwYWNlIGhvbGUsIHdoaWNoIHdlIG1hcmsgYXMgbm9uLXByZXNlbnQuICovXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk5OS1cXHRcXHRmb3IgKDsgYWRkciBcXHUwMDNjIGhvbGVfZW5kOyBhZGRyICs9IFBBR0VfU0laRSkge1xcbmZzL3Byb2MvdGFza19tbXUuYzoyMDAwOlxcdFxcdFxcdGVyciA9IGFkZF90b19wYWdlbWFwKFxcdTAwMjZwbWUsIHBtKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjAwMS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwMTEtXFx0XFx0Zm9yICg7IGFkZHIgXFx1MDAzYyBtaW4oZW5kLCB2bWEtXFx1MDAzZXZtX2VuZCk7IGFkZHIgKz0gUEFHRV9TSVpFKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIwMTI6XFx0XFx0XFx0ZXJyID0gYWRkX3RvX3BhZ2VtYXAoXFx1MDAyNnBtZSwgcG0pO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMDEzLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjAyMC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjAyMTpzdGF0aWMgcGFnZW1hcF9lbnRyeV90IHB0ZV90b19wYWdlbWFwX2VudHJ5KHN0cnVjdCBwYWdlbWFwcmVhZCAqcG0sXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwMjItXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwODctI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmZzL3Byb2MvdGFza19tbXUuYzoyMDg4OnN0YXRpYyBpbnQgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwODktXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmZzL3Byb2MvdGFza19tbXUuYzoyMDkwOlxcdFxcdHN0cnVjdCBwYWdlbWFwcmVhZCAqcG0pXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwOTEte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIxMDItXFx0aWYgKHBtZF9ub25lKHBtZCkpXFxuZnMvcHJvYy90YXNrX21tdS5jOjIxMDM6XFx0XFx0Z290byBwb3B1bGF0ZV9wYWdlbWFwO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMTA0LVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIxNDEtXFxuZnMvcHJvYy90YXNrX21tdS5jOjIxNDI6cG9wdWxhdGVfcGFnZW1hcDpcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE0My1cXHRmb3IgKDsgYWRkciAhPSBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFLCBpZHgrKykge1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMTQ0LVxcdFxcdHU2NCBjdXJfZmxhZ3MgPSBmbGFncztcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE0NTpcXHRcXHRwYWdlbWFwX2VudHJ5X3QgcG1lO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMTQ2LVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIxNTEtXFx0XFx0cG1lID0gbWFrZV9wbWUoZnJhbWUsIGN1cl9mbGFncyk7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIxNTI6XFx0XFx0ZXJyID0gYWRkX3RvX3BhZ2VtYXAoXFx1MDAyNnBtZSwgcG0pO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMTUzLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE2NS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE2NjpzdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yMTY3LVxcdFxcdFxcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE2OS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE3MDpcXHRzdHJ1Y3QgcGFnZW1hcHJlYWQgKnBtID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE3MS1cXHRzcGlubG9ja190ICpwdGw7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE3Ny1cXHRpZiAocHRsKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIxNzg6XFx0XFx0ZXJyID0gcGFnZW1hcF9wbWRfcmFuZ2VfdGhwKHBtZHAsIGFkZHIsIGVuZCwgdm1hLCBwbSk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIxNzktXFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMTkzLVxcdGZvciAoOyBhZGRyIFxcdTAwM2MgZW5kOyBwdGUrKywgYWRkciArPSBQQUdFX1NJWkUpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE5NDpcXHRcXHRwYWdlbWFwX2VudHJ5X3QgcG1lO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMTk1LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyMTk2OlxcdFxcdHBtZSA9IHB0ZV90b19wYWdlbWFwX2VudHJ5KHBtLCB2bWEsIGFkZHIsIHB0ZXBfZ2V0KHB0ZSkpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyMTk3OlxcdFxcdGVyciA9IGFkZF90b19wYWdlbWFwKFxcdTAwMjZwbWUsIHBtKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE5OC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIyMDktLyogVGhpcyBmdW5jdGlvbiB3YWxrcyB3aXRoaW4gb25lIGh1Z2V0bGIgZW50cnkgaW4gdGhlIHNpbmdsZSBjYWxsICovXFxuZnMvcHJvYy90YXNrX21tdS5jOjIyMTA6c3RhdGljIGludCBwYWdlbWFwX2h1Z2V0bGJfcmFuZ2UocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuZnMvcHJvYy90YXNrX21tdS5jLTIyMTEtXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjIxMy17XFxuZnMvcHJvYy90YXNrX21tdS5jOjIyMTQ6XFx0c3RydWN0IHBhZ2VtYXByZWFkICpwbSA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIyMTUtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVxcdTAwM2V2bWE7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI0Ny1cXHRmb3IgKDsgYWRkciAhPSBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIyNDg6XFx0XFx0cGFnZW1hcF9lbnRyeV90IHBtZSA9IG1ha2VfcG1lKGZyYW1lLCBmbGFncyk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIyNDktXFxuZnMvcHJvYy90YXNrX21tdS5jOjIyNTA6XFx0XFx0ZXJyID0gYWRkX3RvX3BhZ2VtYXAoXFx1MDAyNnBtZSwgcG0pO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMjUxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI2Mi0jZWxzZVxcbmZzL3Byb2MvdGFza19tbXUuYzoyMjYzOiNkZWZpbmUgcGFnZW1hcF9odWdldGxiX3JhbmdlXFx0TlVMTFxcbmZzL3Byb2MvdGFza19tbXUuYy0yMjY0LSNlbmRpZiAvKiBIVUdFVExCX1BBR0UgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI2NS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjI2NjpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfb3BzID0ge1xcbmZzL3Byb2MvdGFza19tbXUuYzoyMjY3OlxcdC5wbWRfZW50cnlcXHQ9IHBhZ2VtYXBfcG1kX3JhbmdlLFxcbmZzL3Byb2MvdGFza19tbXUuYzoyMjY4OlxcdC5wdGVfaG9sZVxcdD0gcGFnZW1hcF9wdGVfaG9sZSxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjI2OTpcXHQuaHVnZXRsYl9lbnRyeVxcdD0gcGFnZW1hcF9odWdldGxiX3JhbmdlLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yMjcwLVxcdC53YWxrX2xvY2tcXHQ9IFBHV0FMS19SRExPQ0ssXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI3My0vKlxcbmZzL3Byb2MvdGFza19tbXUuYzoyMjc0OiAqIC9wcm9jL3BpZC9wYWdlbWFwIC0gYW4gYXJyYXkgbWFwcGluZyB2aXJ0dWFsIHBhZ2VzIHRvIHBmbnNcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI3NS0gKlxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIzMDAtICovXFxuZnMvcHJvYy90YXNrX21tdS5jOjIzMDE6c3RhdGljIHNzaXplX3QgcGFnZW1hcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yMzAyLVxcdFxcdFxcdCAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMzA0LVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyMzA1OlxcdHN0cnVjdCBwYWdlbWFwcmVhZCBwbTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjMwNi1cXHR1bnNpZ25lZCBsb25nIHNyYztcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMzY5LVxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIzNzA6XFx0XFx0cmV0ID0gd2Fsa19wYWdlX3JhbmdlKG1tLCBzdGFydF92YWRkciwgZW5kLCBcXHUwMDI2cGFnZW1hcF9vcHMsIFxcdTAwMjZwbSk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIzNzEtXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjM5NC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjM5NTpzdGF0aWMgaW50IHBhZ2VtYXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjM5Ni17XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQwNS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQwNjpzdGF0aWMgaW50IHBhZ2VtYXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQwNy17XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQyMS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQyMjpzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUge1xcbmZzL3Byb2MvdGFza19tbXUuYy0yNDIzLVxcdHN0cnVjdCBwbV9zY2FuX2FyZyBhcmc7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQyOS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQzMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yNDMxLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI0NDEtXFx0XFx0ICogdG9vIHNvIHRoaXMgZ2VuZXJpYyBwYXRoIGFncmVlcyB3aXRoIHRoZSBQQUdFX0lTX1dSSVRURU4gZmFzdFxcbmZzL3Byb2MvdGFza19tbXUuYzoyNDQyOlxcdFxcdCAqIHBhdGggaW4gcGFnZW1hcF9zY2FuX3BtZF9lbnRyeSgpLCB3aGljaCByZXBvcnRzIHB0ZV9ub25lIGFzXFxuZnMvcHJvYy90YXNrX21tdS5jLTI0NDMtXFx0XFx0ICogd3JpdHRlbiBhbmQsIHVuZGVyIFBNX1NDQU5fV1BfTUFUQ0hJTkcsIGFybXMgYSBtYXJrZXIuIFRoZVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTI0OTA9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNTA4LSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjUwOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3RocF9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI1MTAtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0yNTU0PXN0YXRpYyB2b2lkIG1ha2VfdWZmZF93cF9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjU3MC0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmZzL3Byb2MvdGFza19tbXUuYzoyNTcxOnN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfaHVnZXRsYl9jYXRlZ29yeShwdGVfdCBwdGUpXFxuZnMvcHJvYy90YXNrX21tdS5jLTI1NzIte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI1NzgtXFx0LypcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjU3OTpcXHQgKiBBY2NvcmRpbmcgdG8gcGFnZW1hcF9odWdldGxiX3JhbmdlKCksIGZpbGUtYmFja2VkIEh1Z2VUTEJcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjU4MC1cXHQgKiBwYWdlIGNhbm5vdCBiZSBzd2FwcGVkLiBTbyBQQUdFX0lTX0ZJTEUgaXMgbm90IGNoZWNrZWQgZm9yXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjYwNj1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfaHVnZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjYzNi0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjYzNzpzdGF0aWMgdm9pZCBwYWdlbWFwX3NjYW5fYmFja291dF9yYW5nZShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI2MzgtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY1My1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY1NDpzdGF0aWMgYm9vbCBwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZSh1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMsXFxuZnMvcHJvYy90YXNrX21tdS5jOjI2NTU6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnApXFxuZnMvcHJvYy90YXNrX21tdS5jLTI2NTYte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI2NjUtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI2NjY6c3RhdGljIGJvb2wgcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3ZtYSh1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMsXFxuZnMvcHJvYy90YXNrX21tdS5jOjI2Njc6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcClcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY2OC17XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY3Ny1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY3ODpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl90ZXN0X3dhbGsodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI2NzktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY4MC17XFxuZnMvcHJvYy90YXNrX21tdS5jOjI2ODE6XFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY4Mi1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNzExLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyNzEyOlxcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3ZtYSh2bWFfY2F0ZWdvcnksIHApKVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNzEzLVxcdFxcdHJldHVybiAxO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3MTktXFxuZnMvcHJvYy90YXNrX21tdS5jOjI3MjA6c3RhdGljIGJvb2wgcGFnZW1hcF9zY2FuX3B1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzLFxcbmZzL3Byb2MvdGFza19tbXUuYzoyNzIxOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3MjItXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc0OS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjc1MDpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9vdXRwdXQodW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzLFxcbmZzL3Byb2MvdGFza19tbXUuYzoyNzUxOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3NTItXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3NzAtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI3NzE6XFx0aWYgKCFwYWdlbWFwX3NjYW5fcHVzaF9yYW5nZShjYXRlZ29yaWVzLCBwLCBhZGRyLCAqZW5kKSkge1xcbmZzL3Byb2MvdGFza19tbXUuYy0yNzcyLVxcdFxcdCplbmQgPSBhZGRyO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3ODMtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI3ODQ6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fdGhwX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3ODUtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc4Ny0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuZnMvcHJvYy90YXNrX21tdS5jOjI3ODg6XFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc4OS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNzk4LVxcdGNhdGVnb3JpZXMgPSBwLVxcdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjc5OTpcXHRcXHQgICAgIHBhZ2VtYXBfdGhwX2NhdGVnb3J5KHAsIHZtYSwgc3RhcnQsICpwbWQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODAwLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyODAxOlxcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTI4MDItXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODAzLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyODA0OlxcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgc3RhcnQsIFxcdTAwMjZlbmQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODA1LVxcdGlmIChzdGFydCA9PSBlbmQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgxOS1cXHRcXHRzcGxpdF9odWdlX3BtZCh2bWEsIHBtZCwgc3RhcnQpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyODIwOlxcdFxcdHBhZ2VtYXBfc2Nhbl9iYWNrb3V0X3JhbmdlKHAsIHN0YXJ0LCBlbmQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODIxLVxcdFxcdC8qIFJlcG9ydCBhcyBpZiB0aGVyZSB3YXMgbm8gVEhQICovXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzNC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjgzNTpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzNi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzNy17XFxuZnMvcHJvYy90YXNrX21tdS5jOjI4Mzg6XFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzOS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yODQ0LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyODQ1OlxcdHJldCA9IHBhZ2VtYXBfc2Nhbl90aHBfZW50cnkocG1kLCBzdGFydCwgZW5kLCB3YWxrKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg0Ni1cXHRpZiAocmV0ICE9IC1FTk9FTlQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg4My1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjg4NDpcXHRcXHRcXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtXFx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfCBQQUdFX0lTX1dSSVRURU4sXFxuZnMvcHJvYy90YXNrX21tdS5jLTI4ODUtXFx0XFx0XFx0XFx0XFx0XFx0ICBwLCBhZGRyLCBcXHUwMDI2bmV4dCk7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMC1cXHRcXHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBwLVxcdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjkwMTpcXHRcXHRcXHRcXHRcXHQgICBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkocCwgdm1hLCBhZGRyLCBwdGVudCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI5MDItXFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0ID0gYWRkciArIFBBR0VfU0laRTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMy1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjkwNDpcXHRcXHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTA1LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTA2LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTA3OlxcdFxcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgYWRkciwgXFx1MDAyNm5leHQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTA4LVxcdFxcdGlmIChuZXh0ID09IGFkZHIpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkzMy0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTM0OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuZnMvcHJvYy90YXNrX21tdS5jLTI5MzUtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkzNy17XFxuZnMvcHJvYy90YXNrX21tdS5jOjI5Mzg6XFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkzOS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTQ4LVxcdFxcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIHN0YXJ0LCBwdGVwKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjk0OTpcXHRcXHRjYXRlZ29yaWVzID0gcC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8IHBhZ2VtYXBfaHVnZXRsYl9jYXRlZ29yeShwdGUpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTUwLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTUxOlxcdFxcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTI5NTItXFx0XFx0XFx0cmV0dXJuIDA7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI5NTMtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI5NTQ6XFx0XFx0cmV0dXJuIHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgc3RhcnQsIFxcdTAwMjZlbmQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTU1LVxcdH1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTYwLVxcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIHN0YXJ0LCBwdGVwKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjk2MTpcXHRjYXRlZ29yaWVzID0gcC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8IHBhZ2VtYXBfaHVnZXRsYl9jYXRlZ29yeShwdGUpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTYyLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTYzOlxcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTI5NjQtXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTY1LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTY2OlxcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgc3RhcnQsIFxcdTAwMjZlbmQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTY3LVxcdGlmIChzdGFydCA9PSBlbmQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk3NC1cXHRcXHQvKiBQYXJ0aWFsIEh1Z2VUTEIgcGFnZSBXUCBpc24ndCBwb3NzaWJsZS4gKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjk3NTpcXHRcXHRwYWdlbWFwX3NjYW5fYmFja291dF9yYW5nZShwLCBzdGFydCwgZW5kKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk3Ni1cXHRcXHRwLVxcdTAwM2Vhcmcud2Fsa19lbmQgPSBzdGFydDtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTkyLSAqIFdyaXRlLXByb3RlY3QgdGhlIHVucG9wdWxhdGVkIGh1Z2V0bGIgZW50cmllcyBjb3ZlcmluZyBbYWRkciwgZW5kKSBieVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTkzOiAqIGluc3RhbGxpbmcgdWZmZC13cCBtYXJrZXJzIGlubGluZSwgZXhhY3RseSBhcyBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSgpXFxuZnMvcHJvYy90YXNrX21tdS5jLTI5OTQtICogZG9lcyBmb3IgcG9wdWxhdGVkIGVudHJpZXMuXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzAwNi0gKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzAwNzpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwMDgtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDM5LSNlbHNlXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwNDA6I2RlZmluZSBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSBOVUxMXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwNDE6c3RhdGljIGludCBwYWdlbWFwX3NjYW5faHVnZXRsYl9ob2xlX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQyLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA0Ny1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA0ODpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ5LVxcdFxcdFxcdFxcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDUwLXtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA1MTpcXHRzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbmZzL3Byb2MvdGFza19tbXUuYy0zMDUyLVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cXHUwMDNldm1hO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwNjAtXFx0ICogQW4gdW5wb3B1bGF0ZWQgcmFuZ2Ugd2l0aCBubyBwYWdlIHRhYmxlIC0tIGUuZy4gYSAyTUIgYW5vbiBUSFBcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA2MTpcXHQgKiBkcm9wcGVkIHZpYSBNQURWX0RPTlRORUVELCB3aGljaCBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoKSBuZXZlciBzZWVzXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwNjItXFx0ICogLS0gcmVhZHMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBtYXRjaGluZyB0aGUgcHRlX25vbmUgY2FzZVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwNzAtXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwNzE6XFx0aWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA3Mi1cXHRcXHRyZXR1cm4gMDtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA3My1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA3NDpcXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIGFkZHIsIFxcdTAwMjZlbmQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0zMDc1LVxcdGlmIChhZGRyID09IGVuZClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDgxLVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA4MjpcXHRcXHRlcnIgPSBwYWdlbWFwX3NjYW5faHVnZXRsYl9ob2xlX3dwKHZtYSwgYWRkciwgZW5kKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA4My1cXHRlbHNlXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5MC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5MTpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfc2Nhbl9vcHMgPSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTI6XFx0LnRlc3Rfd2FsayA9IHBhZ2VtYXBfc2Nhbl90ZXN0X3dhbGssXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTM6XFx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTQ6XFx0LnB0ZV9ob2xlID0gcGFnZW1hcF9zY2FuX3B0ZV9ob2xlLFxcbmZzL3Byb2MvdGFza19tbXUuYzozMDk1OlxcdC5odWdldGxiX2VudHJ5ID0gcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnksXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwOTYtfTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5Ny1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5ODpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9nZXRfYXJncyhzdHJ1Y3QgcG1fc2Nhbl9hcmcgKmFyZyxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5OS1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyB1YXJnKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMxMzktXFxuZnMvcHJvYy90YXNrX21tdS5jOjMxNDA6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fd3JpdGViYWNrX2FyZ3Moc3RydWN0IHBtX3NjYW5fYXJnICphcmcsXFxuZnMvcHJvYy90YXNrX21tdS5jLTMxNDEtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgdWFyZ2wpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE1MC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE1MTpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9pbml0X2JvdW5jZV9idWZmZXIoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTUyLXtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTY3LVxcbmZzL3Byb2MvdGFza19tbXUuYzozMTY4OnN0YXRpYyBsb25nIHBhZ2VtYXBfc2Nhbl9mbHVzaF9idWZmZXIoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTY5LXtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTk0LVxcbmZzL3Byb2MvdGFza19tbXUuYzozMTk1OnN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfc2NhbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB1YXJnKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTk2LXtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE5NzpcXHRzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgcCA9IHswfTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE5OC1cXHR1bnNpZ25lZCBsb25nIHdhbGtfc3RhcnQ7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzIwMS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzIwMjpcXHRyZXQgPSBwYWdlbWFwX3NjYW5fZ2V0X2FyZ3MoXFx1MDAyNnAuYXJnLCB1YXJnKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzIwMy1cXHRpZiAocmV0KVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyMDctXFx0XFx0XFx0ICAgICAgcC5hcmcucmV0dXJuX21hc2s7XFxuZnMvcHJvYy90YXNrX21tdS5jOjMyMDg6XFx0cmV0ID0gcGFnZW1hcF9zY2FuX2luaXRfYm91bmNlX2J1ZmZlcihcXHUwMDI2cCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTMyMDktXFx0aWYgKHJldClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjMzLVxcdFxcdHJldCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgd2Fsa19zdGFydCwgcC5hcmcuZW5kLFxcbmZzL3Byb2MvdGFza19tbXUuYzozMjM0OlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwYWdlbWFwX3NjYW5fb3BzLCBcXHUwMDI2cCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTMyMzUtXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI0MC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI0MTpcXHRcXHRuX291dCA9IHBhZ2VtYXBfc2Nhbl9mbHVzaF9idWZmZXIoXFx1MDAyNnApO1xcbmZzL3Byb2MvdGFza19tbXUuYy0zMjQyLVxcdFxcdGlmIChuX291dCBcXHUwMDNjIDApXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI2MC1cXHRcXHRwLmFyZy53YWxrX2VuZCA9IHAuYXJnLmVuZDtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI2MTpcXHRpZiAocGFnZW1hcF9zY2FuX3dyaXRlYmFja19hcmdzKFxcdTAwMjZwLmFyZywgdWFyZykpXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyNjItXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjY3LVxcbmZzL3Byb2MvdGFza19tbXUuYzozMjY4OnN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjY5LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyNzQtXFx0Y2FzZSBQQUdFTUFQX1NDQU46XFxuZnMvcHJvYy90YXNrX21tdS5jOjMyNzU6XFx0XFx0cmV0dXJuIGRvX3BhZ2VtYXBfc2NhbihtbSwgYXJnKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3Ni1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjgxLVxcbmZzL3Byb2MvdGFza19tbXUuYzozMjgyOmNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XFxuZnMvcHJvYy90YXNrX21tdS5jLTMyODMtXFx0Lmxsc2Vla1xcdFxcdD0gbWVtX2xzZWVrLCAvKiBib3Jyb3cgdGhpcyAqL1xcbmZzL3Byb2MvdGFza19tbXUuYzozMjg0OlxcdC5yZWFkXFx0XFx0PSBwYWdlbWFwX3JlYWQsXFxuZnMvcHJvYy90YXNrX21tdS5jOjMyODU6XFx0Lm9wZW5cXHRcXHQ9IHBhZ2VtYXBfb3BlbixcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI4NjpcXHQucmVsZWFzZVxcdD0gcGFnZW1hcF9yZWxlYXNlLFxcbmZzL3Byb2MvdGFza19tbXUuYzozMjg3OlxcdC51bmxvY2tlZF9pb2N0bCA9IGRvX3BhZ2VtYXBfY21kLFxcbmZzL3Byb2MvdGFza19tbXUuYzozMjg4OlxcdC5jb21wYXRfaW9jdGxcXHQ9IGRvX3BhZ2VtYXBfY21kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjg5LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjU1LjgzOTY4NTc3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY5MDgyMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gYHByb2NfcGFnZW1hcF9vcGVyYXRpb25zYCBhbmQgYFBBR0VNQVBfU0NBTmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwgaXMgaGFuZ2luZyBvdXQgdGhlcmUgaW4gYHByb2NfcGFnZW1hcF9vcGVyYXRpb25zYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2hlcmUgKmVsc2UqIGRvZXMgdGhpcyBgcHJvY19wYWdlbWFwX29wZXJhdGlvbnNgIHN0cnVjdCBzaG93IHVwPyBXaGF0IGNvbnRleHRzIGFyZSB1c2luZyB0aGlzIGZ1bmN0aW9uYWxpdHk/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuIEtub3dpbmcgKndoZXJlKiBpdCdzIGVtcGxveWVkIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgdXNhZ2UgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNjo1OC45MDg3NzEzNDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Nzk1MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfcGFnZW1hcF9vcGVyYXRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTMyODI9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGdpZF9iYXNlX3N0dWZmW10gPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zMzI0LVxcdFJFRyhcXFwic21hcHNfcm9sbHVwXFxcIiwgU19JUlVHTywgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jOjMzMjU6XFx0UkVHKFxcXCJwYWdlbWFwXFxcIiwgICAgU19JUlVTUiwgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTMzMjYtI2VuZGlmXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0zNjQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRpZF9iYXNlX3N0dWZmW10gPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zNjc5LVxcdFJFRyhcXFwic21hcHNfcm9sbHVwXFxcIiwgU19JUlVHTywgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jOjM2ODA6XFx0UkVHKFxcXCJwYWdlbWFwXFxcIiwgICAgU19JUlVTUiwgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTM2ODEtI2VuZGlmXFxuLS1cXG5mcy9wcm9jL2ludGVybmFsLmg9NDExPWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2xlYXJfcmVmc19vcGVyYXRpb25zO1xcbmZzL3Byb2MvaW50ZXJuYWwuaDo0MTI6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnM7XFxuZnMvcHJvYy9pbnRlcm5hbC5oLTQxMy1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zMjY4PXN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyODEtXFxuZnMvcHJvYy90YXNrX21tdS5jOjMyODI6Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyA9IHtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI4My1cXHQubGxzZWVrXFx0XFx0PSBtZW1fbHNlZWssIC8qIGJvcnJvdyB0aGlzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjU4Ljk2NjU3NDY3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY2NTgyNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRXhhbWluaW5nIHRoZSBgI2VuZGlmYCBpbiBgZnMvcHJvYy9iYXNlLmNgIGFyb3VuZCBgcGFnZW1hcGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYGZzL3Byb2MvYmFzZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IGAjZW5kaWZgIGlzIGRvaW5nLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBgcGFnZW1hcGAgZnVuY3Rpb25hbGl0eS4gSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGl0LCBhbmQgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBvciBtYXliZSBpbnZlc3RpZ2F0ZSBhIHN1YnRsZSBpbnRlcmFjdGlvbi4gV2hhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBpcyB0aGlzIGNvZGUgcG90ZW50aWFsbHkgZGVwZW5kZW50IG9uPyBXaGF0IGZlYXR1cmVzIG1pZ2h0IGJlIGdldHRpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGlzPyBNeSBnb2FsIGlzIHJlYWxseSB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB3aGF0IHRoYXQgYCNlbmRpZmAgaXMgY29udHJvbGxpbmcuIElzIGl0IGEgZnVsbCBmZWF0dXJlLCBvciBhIHNtYWxsIHN1YnNldD8gSXMgdGhpcyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrIGJhc2VkIG9uIHNvbWUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBMZXQgbWUgdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZSB0aGF0IHRyaWdnZXJzIHRoYXQgY2xvc2luZyBgI2VuZGlmYCwgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYXNzb2NpYXRlZCBgI2lmZGVmYCBvciBgI2lmYCBzdGF0ZW1lbnQgaXMgY2hlY2tpbmcuIEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgb3Igc3lzdGVtIHN0YXRlIG5lZWRzIHRvIGJlLCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhhdCBwb3J0aW9uIG9mIGNvZGUgZnJvbSB0aGUgZmluYWwgY29tcGlsZWQgYmluYXJ5LiBBbmQgdGhhdCdzIGNyaXRpY2FsIGluZm9ybWF0aW9uLCBiZWNhdXNlIEkgYWx3YXlzIG5lZWQgdG8ga25vdyB3aGF0IGZlYXR1cmVzIG15IHN5c3RlbSBpcyBidWlsZGluZyB3aXRoLCBhbmQgaG93IHRoZXkgYmVoYXZlIGluIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNzowMi42MzMxNjExOTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjQ2NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9iYXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9iYXNlLmM9MzI4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTMzMjAtXFx0UkVHKFxcXCJtb3VudHN0YXRzXFxcIiwgU19JUlVTUiwgcHJvY19tb3VudHN0YXRzX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jOjMzMjE6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxcbmZzL3Byb2MvYmFzZS5jLTMzMjItXFx0UkVHKFxcXCJjbGVhcl9yZWZzXFxcIiwgU19JV1VTUiwgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnMpLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzY0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzY3NS1cXHRSRUcoXFxcIm1vdW50aW5mb1xcXCIsICBTX0lSVUdPLCBwcm9jX21vdW50aW5mb19vcGVyYXRpb25zKSxcXG5mcy9wcm9jL2Jhc2UuYzozNjc2OiNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcXG5mcy9wcm9jL2Jhc2UuYy0zNjc3LVxcdFJFRyhcXFwiY2xlYXJfcmVmc1xcXCIsIFNfSVdVU1IsIHByb2NfY2xlYXJfcmVmc19vcGVyYXRpb25zKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MDIuNjk0ODE4ODEyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjQyNzY2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBjb25jZXJuIGlzIHByZXR0eSBjbGVhcjogYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAuIEdvdCBpdC4gTm93LCBob2xkIG9uLCBJJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgaGVyZS4uLiBJJ20gc2VlaW5nIGB1c2VyZmF1bHRmZF93cGAgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgLiBUaGlzIHRyaWdnZXJzIGEgcXVlc3Rpb246IGRvZXMgdGhpcyBpbXBseSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19VU0VSRkFVTFRGRGA/IE15IGd1dCBzYXlzIGl0IHByb2JhYmx5IGRvZXMsIGJ1dCBsZXQncyBub3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMuIEJlc3QgdG8gdmVyaWZ5IGl0IGNvbmNyZXRlbHkuXG5cblNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaGAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIGZvciBgdXNlcmZhdWx0ZmRfd3BgLiBJJ2xsIHNjYW4gdGhhdCBoZWFkZXIgYW5kIGdldCBhIG11Y2ggY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MDYuMDE5MDk4NTQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODcyNzk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF93cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0xOTY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pc3Npbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMDAtXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjAxOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMDIte1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjExPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9wdGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMTMte1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIxNDpcXHRyZXR1cm4gdXNlcmZhdWx0ZmRfd3Aodm1hKSBcXHUwMDI2XFx1MDAyNiBwdGVfdWZmZF93cChwdGUpO1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIxNS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMTc9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX2h1Z2VfcG1kX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE5LXtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMjA6XFx0cmV0dXJuIHVzZXJmYXVsdGZkX3dwKHZtYSkgXFx1MDAyNlxcdTAwMjYgcG1kX3VmZmRfd3AocG1kKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMjEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjUyPWV4dGVybiB2b2lkIHVzZXJmYXVsdGZkX3VubWFwX2NvbXBsZXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTI1My1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdWYpO1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI1NDpleHRlcm4gYm9vbCB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjU1OmV4dGVybiBib29sIHVzZXJmYXVsdGZkX3dwX2FzeW5jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTYtXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjU3OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTgte1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTI1OS1cXHQvKiBPbmx5IHdyLXByb3RlY3QgbW9kZSB1c2VzIHB0ZSBtYXJrZXJzICovXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjYwOlxcdGlmICghdXNlcmZhdWx0ZmRfd3Aodm1hKSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNjEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjcwLVxcdCAqL1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI3MTpcXHRyZXR1cm4gdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQodm1hKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNzItfVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MzE2PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9taXNzaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzIwLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjMyMTpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzIyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTM5OD1zdGF0aWMgaW5saW5lIGJvb2wgdWZmZF9kaXNhYmxlX2ZhdWx0X2Fyb3VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwMi1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDo0MDM6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwNC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDctXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6NDA4OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF9hc3luYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDkte1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9NDEzPXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3VmZmRfd2l0aG91dF9ldmVudF9yZW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQxNy1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDo0MTg6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwX3VzZV9tYXJrZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQxOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA3OjA2LjA3NzgzMjYyN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMwNjE4NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHNwZWNpZmljIGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byB0aGUgVXNlcmZhdWx0ZmQgV3JpdGUgUHJvdGVjdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmhgLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoYXQgYCNpZmRlZmAgYmxvY2sgc3Vycm91bmRpbmcgYHVzZXJmYXVsdGZkX3dwYC4gSXQncyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCBob3cgd3JpdGUgcHJvdGVjdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgYHVzZXJmYXVsdGZkYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoaXMgcHJvYmFibHkgY29udHJvbHMgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9mIHNvbWUgZmVhdHVyZSBvciBzb21lIGNvZGUgcGF0aCBiYXNlZCBvbiBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gd2hldGhlciB3cml0ZSBwcm90ZWN0aW9uIHZpYSB1c2VyZmF1bHRmZCBpcyBlbmFibGVkIGF0IGFsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IGNvbmZpZ3VyYXRpb24gZmxhZyBpcyBhbmQgd2hhdCBjb25zZXF1ZW5jZXMgaXQgaGFzIGlmIHRoZSBgI2lmZGVmYCBldmFsdWF0ZXMgdG8gdHJ1ZSB2ZXJzdXMgZmFsc2UuIFRoaXMgbWVhbnMgSSdsbCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgcHJlcHJvY2Vzc29yIHN5bWJvbCBhbmQgc2VlIHdoZXJlIGl0J3MgdXNlZC4gVGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBsaWtlbHkgdGhlcmUgZm9yIGEgcmVhc29uLCBsaWtlbHkgZHVlIHRvIGFuIG9wdGlvbmFsIGZlYXR1cmUgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgY29tcGxleGl0eSBvciBwb3NzaWJsZSBwZXJmb3JtYW5jZSBpbXBhY3RzIGFuZCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgaW1wYWN0IHRoaXMgY29uZmlndXJhdGlvbiBoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njg1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MDkuNzA4NDU0ODMyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgzNTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTExLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjEyOiNpZmRlZiBDT05GSUdfVVNFUkZBVUxURkRcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0xMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MDkuNzY4Mjk3NzkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NTQxMjA3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGl0J3MgYmVjb21pbmcgY2xlYXJlci4gSXQgc2VlbXMgdGhhdCBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUga2V5IHByZXJlcXVpc2l0ZSBmb3IgYHVzZXJmYXVsdGZkX3dwYCB0byBhY3R1YWxseSByZXR1cm4gdHJ1ZS4gSWYgdGhhdCBjb25maWcgb3B0aW9uIGlzbid0IHNldCwgdGhlIGZ1bmN0aW9uIGp1c3QgcmV0dXJucyBmYWxzZSwgd2hpY2ggaXMgZmluZSBmcm9tIGEgY29tcGlsYXRpb24gc3RhbmRwb2ludCwgYnV0IG1lYW5zIHRoZSBjcml0aWNhbCBsaW5lIGBjYXRlZ29yaWVzIHw9IFBBR0VfSVNfV1JJVFRFTmAgd29uJ3QgZ2V0IGV4ZWN1dGVkLlxuXG5UbyBwcm9wZXJseSB0ZXN0IHRoZSBjaGFuZ2VzLCBJJ2xsIGRlZmluaXRlbHkgbmVlZCBib3RoIGBDT05GSUdfVVNFUkZBVUxURkRgIGFuZCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYC5cblxuSG1tLCB0aGlzIHBhdGNoIGFsc28gbWVudGlvbnMgYE1BRFZfRE9OVE5FRURgIGFuZCBgTUFEVl9DT0xMQVBTRWAgd2l0aGluIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5LiBUaGUgdGVzdCB1c2VzIGBtYWR2aXNlKG1lbSwgaHBhZ2Vfc2l6ZSwgTUFEVl9DT0xMQVBTRSlgLiBUaGF0IG1ha2VzIG1lIHRoaW5rLi4uIGlzIGBNQURWX0NPTExBUFNFYCB0aWVkIHRvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgP1xuXG5ZZXMsIHRoZSB0ZXN0IGRvY3VtZW50YXRpb24gY29uZmlybXMgaXQuIEl0IGV4cGxhaW5zIHRoYXQgYSAyTUIgYW5vbnltb3VzIFRIUCB0aGF0J3MgYmVlbiBgTUFEVl9ET05UTkVFRGAnZCByZXN1bHRzIGluIGEgYHBtZF9ub25lYCBob2xlIHdpdGggbm8gcGFnZSB0YWJsZSBlbnRyeSwgd2hpY2ggaXMgc29tZXRoaW5nIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoKWAgbmV2ZXIgc2Vlcy4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBgUEFHRU1BUF9TQ0FOYCBoYXMgdG8gcmVwb3J0IHRoaXMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBhbmQgaXQgd2lsbCBkbyBzbyB2aWEgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSgpYC5cblxuU28sIHRvIHJ1biB0aGUgdGVzdCBwcm9wZXJseSwgSSBhbHNvIG5lZWQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFsdGhvdWdoIHRoZSByZWxldmFudCBrZXJuZWwgY29kZSBpdHNlbGYgc2hvdWxkIGFwcGx5IHRvIGFueSB1bnBvcHVsYXRlZCBtZW1vcnkgcmFuZ2UuIFRoZSBjb3JlIGNvZGUgSSBhbSBsb29raW5nIGF0IGluIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKWAgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnk7XG5cdGlmICh1c2VyZmF1bHRmZF93cCh2bWEpKVxuXHRcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19XUklUVEVOO1xuXG5cdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXG5cdFx0cmV0dXJuIDA7XG5gYGBcblxuVGhlcmVmb3JlLCB0byByZWNhcCwgSSBuZWVkIGBDT05GSUdfVVNFUkZBVUxURkRgLCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCwgYW5kIGJlY2F1c2UgdGhlIHRlc3RpbmcgcmVsaWVzIG9uIGl0LCBhbHNvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFsb25nc2lkZSB0aGUgdXN1YWwgYENPTkZJR19NTVVgLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKWAgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA0NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNzoxNi41MjI0MjMyNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExMTkzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZW1hcF9zY2FuX3B0ZV9ob2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MzA0MT1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA0Ny1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA0ODpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ5LVxcdFxcdFxcdFxcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTMwOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwYWdlbWFwX3NjYW5fb3BzID0ge1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwOTMtXFx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTQ6XFx0LnB0ZV9ob2xlID0gcGFnZW1hcF9zY2FuX3B0ZV9ob2xlLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDk1LVxcdC5odWdldGxiX2VudHJ5ID0gcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA3OjE2LjU4MzU1MDA3OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTk4NjY3MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN1YnRsZSBLZXJuZWwgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGNhdGNoZXMgbXkgZXllLiBJdCdzIGNhbGxlZCBieSBgd2Fsa19wYWdlX3JhbmdlYCBhbmQsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXQgZGVhbHMgd2l0aCB0aG9zZSBwZXNreSBob2xlcyBpbiB0aGUgcGFnZSB0YWJsZSDigJMgcGxhY2VzIHdoZXJlIHRoZXJlIGFyZW4ndCBhbnkgUFRFcyBwcmVzZW50LiBUaGUgcGF0Y2gncyBjb3JlIG1vZGlmaWNhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IGl0J3MgYWRkaW5nIHRoZSBgUEFHRV9JU19XUklUVEVOYCBmbGFnIGlmIGB1c2VyZmF1bHRmZF93cCh2bWEpYCByZXR1cm5zIHRydWUuIFRoYXQgc3VnZ2VzdHMgdGhpcyBwYXRjaCBpcyBzdWJ0bHkgY2hhbmdpbmcgaG93IHdlIHJlcG9ydCBwYWdlIHdyaXRlIHN0YXR1cyBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IGB1c2VyZmF1bHRmZF93cGAsIHNwZWNpZmljYWxseSBpbiB0aG9zZSB1bnBvcHVsYXRlZCBhcmVhcy4gSSdtIHNlZWluZyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGZhY3QgdGhhdCBpdCBtb2RpZmllcyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSBmb3IgbWVtb3J5IHJlZ2lvbnMgdGhhdCBhcmUgaW50ZW50aW9uYWxseSB1bnBvcHVsYXRlZCBidXQgbWFuYWdlZCBieSBgdXNlcmZhdWx0ZmRfd3BgLi4uIHRoYXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gaXMgZGVmaW5pdGVseSBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYC5cblxuTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBjb25maWcgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LiBJIGtub3cgYFBST0NfUEFHRV9NT05JVE9SYCBpcyBuZWNlc3NhcnksIGFuZCBvZiBjb3Vyc2UsIGBVU0VSRkFVTFRGRGAgaXMgZXNzZW50aWFsIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBpdCBtb2RpZmllcy4gSSdsbCBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBpcyB0aGUgcmlnaHQgb3B0aW9uIGZvciBlbmFibGluZyB0aGUgcHJvYyBwYWdlIG1vbml0b3JpbmcgaW4gdGhlIGJ1aWxkIGNvbmZpZyB0byBlbnN1cmUgSSBkb24ndCBtaXNzIGFueSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MjEuNTgyMjIxNTIyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTkyNTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPQ19QQUdFX01PTklUT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvS2NvbmZpZz04Mz1jb25maWcgUFJPQ19TWVNDVExcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy0xMDEtXFxuZnMvcHJvYy9LY29uZmlnOjEwMjpjb25maWcgUFJPQ19QQUdFX01PTklUT1JcXG5mcy9wcm9jL0tjb25maWctMTAzLSBcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MjEuNjQ0MTU5OTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NjEzNTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uZmlndXJhdGlvbiBDb250ZXh0KipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgY29uZmlndXJhdGlvbiBoZXJlLiBJJ20gaW1tZWRpYXRlbHkgcmVjb2duaXppbmcgdGhhdCBgUFJPQ19QQUdFX01PTklUT1JgIGlzIHRoZSBrZXkgZmxhZyBmb3IgdGhlIHBhZ2UgbW9uaXRvcmluZyBmdW5jdGlvbmFsaXR5LiBTdHJhaWdodGZvcndhcmQuIEFuZCwgY2lyY2xpbmcgYmFjayB0byB0aGUgYHVzZXJmYXVsdGZkX3dwYCBkaXNjdXNzaW9uLCBgVVNFUkZBVUxURkRgIOKAkyB0aGF0J3MgdGhlIHNwZWNpZmljIGNvbmZpZyB0aGF0IGVuYWJsZXMgdGhlIGB1c2VyZmF1bHRmZF93cGAgZmVhdHVyZS4gR29vZC4gVGhhdCBjbGFyaWZpZXMgdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncyBmb3IgdGhvc2UgZmVhdHVyZXMuIE5vIHN1cnByaXNlcyB0aGVyZSwganVzdCBjb25maXJtaW5nIHRoZSBleHBlY3RlZCBhc3NvY2lhdGlvbnMgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNzoyNC42MzAzMDExMjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDI0MzA3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNFUkZBVUxURkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNzoyNC42OTI3NDE5ODRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1NDg0NzE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYFVTRVJGQVVMVEZEYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBVU0VSRkFVTFRGRGAuIFRoaXMgaXMgbGlrZWx5IGEgbWFjcm8sIHByb2JhYmx5IGluIGEgaGVhZGVyIGZpbGUgc29tZXdoZXJlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSBjb2RlLCBnaXZlbiBpdHMgbmFtaW5nIGNvbnZlbnRpb24uIEl0J3MgYSBzeXN0ZW0gY2FsbCBvciBhIHJlbGF0ZWQgY29uc3RhbnQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAgb3IgYGZpbmRgIHRvIHNjYW4gdGhyb3VnaCB0aGUgc3RhbmRhcmQgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSdsbCBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLCBsb29raW5nIGZvciBcIlVTRVJGQVVMVEZEXCIgYW5kIFwidXNlcmZhdWx0ZmRcIi4gTWF5YmUgSSBjYW4gbmFycm93IGl0IGRvd24gd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHMsIHN1Y2ggYXMgaW5jbHVkZS91YXBpIG9yIGluY2x1ZGUvbGludXguIEl0J3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBJIG1pZ2h0IHJlZmluZSB0aGUgc2VhcmNoIHdpdGgga2V5d29yZHMgbGlrZSBcIm1tXCIsIFwiZmF1bHRcIiwgb3IgXCJ1c2VyIHNwYWNlXCIuIFRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBvbiB1c2VyZmF1bHRmZCB3b3VsZCBiZSB2ZXJ5IGhlbHBmdWwuIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBtYWNybyBpcyBpbXBvcnRhbnQuIElzIGl0IGFuIGludGVnZXIgY29uc3RhbnQgcmVwcmVzZW50aW5nIGEgc3lzdGVtIGNhbGwgbnVtYmVyLCBvciBhIGZsYWcgZm9yIGFuIGBpb2N0bGAgY29tbWFuZD8gVGhpcyBpbml0aWFsIHNlYXJjaCB3aWxsIGhlbHAgbWUgbmFycm93IGRvd24gdGhlIHNwZWNpZmljIGZpbGUgYW5kIHB1cnBvc2UsIGZyb20gdGhlcmUgSSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHVzZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHdob2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE2MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA3OjI4LjI0NzU5Mjc0MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NzM0NDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNFUkZBVUxURkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM4Mj1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuLS1cXG5tbS9LY29uZmlnLTEzODYtXFxubW0vS2NvbmZpZzoxMzg3Om1lbnVjb25maWcgVVNFUkZBVUxURkRcXG5tbS9LY29uZmlnLTEzODgtXFx0Ym9vbCBcXFwiRW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA3OjMwLjQxNDk0ODEyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTE3ODc0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYFVTRVJGQVVMVEZEYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgYFVTRVJGQVVMVEZEYCBpcyBkZWZpbmVkIGluIGBtbS9LY29uZmlnYCwgdGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBub3RlLiBOb3csIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50PyBUaGUgdGVzdCB1c2VzIGBNQURWX0NPTExBUFNFYCwgYE1BRFZfRE9OVE5FRURgLCBhbmQgYGhwYWdlX3NpemVgIHdoaWNoIGlzIGluZm9ybWF0aXZlLCBidXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgY291bGQgYmUgdXNlZnVsIGhlcmUgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGF0IFRIUCBob2xlIHNjZW5hcmlvLCBhbHRob3VnaCB0aGUgY29yZSBjb2RlIGFwcGxpZXMgdG8gYW55IFBURSBob2xlLCByaWdodD8gRXZlbiB0aG9zZSBjcmVhdGVkIGJ5IGRyb3BwaW5nIG5vcm1hbCBwYWdlcyB1c2luZyBgTUFEVl9ET05UTkVFRGAuXG5cbkhvbGQgb24sIHRoZSBjb21tZW50IGNsYXJpZmllcyBpdDogYW4gdW5wb3B1bGF0ZWQgcmFuZ2UsIHdpdGhvdXQgYW55IHBhZ2UgdGFibGUsIGxpa2UgYSAyTUIgYW5vbnltb3VzIFRIUCB0aGF0J3MgYmVlbiBkcm9wcGVkIHZpYSBgTUFEVl9ET05UTkVFRGAgaXMgcmVhZCBhcyB3cml0dGVuIHVuZGVyIGEgdWZmZC13cCBWTUEuIFRoYXQgbWFrZXMgc2Vuc2UsIGl0J3MgbWF0Y2hpbmcgdGhlIGBwdGVfbm9uZWAgY2FzZS4gVGhpcyBpcyBjcnVjaWFsOiB0aGUgcGF0Y2ggYWxsb3dzIHRoZSBQTV9TQ0FOX1dQX01BVENISU5HIGFybWluZyBiZWxvdyB0byBpbnN0YWxsIG1hcmtlcnMgd2hlbiB3ZSBlbmNvdW50ZXIgdGhlc2UgdW5wb3B1bGF0ZWQgcmVnaW9ucywgc28gdGhlIG5leHQgc2NhbiB0cmVhdHMgaXQgYXMgY2xlYW4gdW50aWwgaXQgaXMgcmV3cml0dGVuLiBTbyBpdCBpc24ndCBzcGVjaWZpY2FsbHkgKm9ubHkqIGh1Z2UgcGFnZXMuIEl0IGFwcGxpZXMgdG8gYW55IHVucG9wdWxhdGVkIHJhbmdlLCBidXQgVEhQIGlzIGEgZ29vZCBleGFtcGxlIHRvIGhhdmUgaW4gbWluZC4gSSB0aGluayBJJ2xsIGFkZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRvIGJlIHNhZmUsIGp1c3QgdG8gY292ZXIgdGhhdCBiYXNlLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGRvX3BhZ2VtYXBfc2NhbmAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBMZXQncyBzZWUuLi4gYGRvX3BhZ2VtYXBfc2NhbmAgaXMgY2FsbGVkIGZyb20gYGRvX3BhZ2VtYXBfY21kYCB3aGljaCBpcyBhbiBgdW5sb2NrZWRfaW9jdGxgIGZvciBgL3Byb2MvcGlkL3BhZ2VtYXBgLiBZdXAsIHRoYXQncyBkZWZpbml0ZWx5IGEgdXNlcnNwYWNlIGludGVyZmFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcuIEhlcmUncyBteSBzdW1tYXJ5OlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogKlRydWUqXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFBST0NfUEFHRV9NT05JVE9SYCwgYFVTRVJGQVVMVEZEYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWBcbiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIGBQQUdFTUFQX1NDQU5gIGlvY3RsIG9uIGAvcHJvYy9waWQvcGFnZW1hcGAsIGVuc3VyaW5nIGNvcnJlY3QgcmVwb3J0aW5nIG9mIHVucG9wdWxhdGVkIHJlZ2lvbnMgKFBURSBob2xlcykgYXMgd3JpdHRlbiB3aGVuIHRoZSBWTUEgdXRpbGl6ZXMgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgZXhwb3NlcyBhIG5ldyBiZWhhdmlvciB2aWEgdGhlIHByb2NmcyBpbnRlcmZhY2UuIFRoZSBjaGFuZ2UgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUzMSwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MzguMTY2NzM5MTg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4ODQxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfUEFHRV9NT05JVE9SXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlbWFwX3NjYW5fcHRlX2hvbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBvbiAvcHJvYy9waWQvcGFnZW1hcCB0byBjb3JyZWN0bHkgcmVwb3J0IHVucG9wdWxhdGVkIHJhbmdlcyAoUFRFIGhvbGVzKSBhcyB3cml0dGVuIHdoZW4gdGhlIFZNQSBoYXMgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBlbmFibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQvcHJvY2ZzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX1BBR0VfTU9OSVRPUlwiLFxuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZW1hcF9zY2FuX3B0ZV9ob2xlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAgdG8gY29ycmVjdGx5IHJlcG9ydCB1bnBvcHVsYXRlZCByYW5nZXMgKFBURSBob2xlcykgYXMgd3JpdHRlbiB3aGVuIHRoZSBWTUEgaGFzIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50L3Byb2NmcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow78nnx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 22:48:51 +0000 UTC FinishedAt: 2026-07-08 23:07:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_PAGE_MONITOR", "USERFAULTFD", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_PAGE_MONITOR", "USERFAULTFD", "TRANSPARENT_HUGEPAGE" ], "series_id": "43fe9f45-0a8c-4ae8-8831-d7847559ac91" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "pagemap_scan_pte_hole" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZW1hcF9zY2FuX3B0ZV9ob2xlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIG9uIC9wcm9jL3BpZC9wYWdlbWFwIHRvIGNvcnJlY3RseSByZXBvcnQgdW5wb3B1bGF0ZWQgcmFuZ2VzIChQVEUgaG9sZXMpIGFzIHdyaXR0ZW4gd2hlbiB0aGUgVk1BIGhhcyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC9wcm9jZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzEyMTdmZTEwNTJkMTBkNzYzOTAxYThiYmIzOWExYmFkMDQyMDljYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMjM6MDY6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXG5pbmRleCBlNDMwMmZjZjAyMjdkNy4uZTQ3ZjcxY2QzMGE1OGEgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTMwNTAsMTIgJiM0MzszMDUwLDI4IEBAIHN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVx1MDAzZXZtYTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXM7XG4gXHRpbnQgcmV0LCBlcnI7XG4gXG4tXHRpZiAoIXZtYSB8fCAhcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UocC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5LCBwKSlcbiYjNDM7XHRpZiAoIXZtYSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuIHVucG9wdWxhdGVkIHJhbmdlIHdpdGggbm8gcGFnZSB0YWJsZSAtLSBlLmcuIGEgMk1CIGFub24gVEhQXG4mIzQzO1x0ICogZHJvcHBlZCB2aWEgTUFEVl9ET05UTkVFRCwgd2hpY2ggcGFnZW1hcF9wYWdlX2NhdGVnb3J5KCkgbmV2ZXIgc2Vlc1xuJiM0MztcdCAqIC0tIHJlYWRzIGFzIHdyaXR0ZW4gb24gYSB1ZmZkLXdwIFZNQSwgbWF0Y2hpbmcgdGhlIHB0ZV9ub25lIGNhc2VcbiYjNDM7XHQgKiB0aGVyZS4gUmVwb3J0aW5nIGl0IGFsc28gbGV0cyB0aGUgUE1fU0NBTl9XUF9NQVRDSElORyBhcm1pbmcgYmVsb3dcbiYjNDM7XHQgKiBpbnN0YWxsIG1hcmtlcnMgKHVmZmRfd3BfcmFuZ2UoKSBhbGxvY2F0ZXMgdGhlIHBhZ2UgdGFibGUgdW5kZXJcbiYjNDM7XHQgKiBXUF9VTlBPUFVMQVRFRCksIHNvIHRoZSBuZXh0IHNjYW4gc2VlcyBpdCBjbGVhbiB1bnRpbCByZS13cml0dGVuLlxuJiM0MztcdCAqL1xuJiM0MztcdGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnk7XG4mIzQzO1x0aWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkpXG4mIzQzO1x0XHRjYXRlZ29yaWVzIHw9IFBBR0VfSVNfV1JJVFRFTjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCwgYWRkciwgXHUwMDI2ZW5kKTtcbiYjNDM7XHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIGFkZHIsIFx1MDAyNmVuZCk7XG4gXHRpZiAoYWRkciA9PSBlbmQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCBmOWJjZmY4ZTc4ZmFiYi4uYTRlOGNjOGFlYTRiN2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTI1LDYgJiM0MzsyNSwxMCBAQFxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuJiM0MzsjaWZuZGVmIE1BRFZfQ09MTEFQU0VcbiYjNDM7I2RlZmluZSBNQURWX0NPTExBUFNFIDI1XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTExcdFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcdFxcXG4gXHRcdFx0XHRcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFx0XFxcbiBcdFx0XHRcdFx0IFBBR0VfSVNfU1dBUFBFRCB8IFBBR0VfSVNfUEZOWkVSTyB8XHRcXFxuQEAgLTExMDIsNiAmIzQzOzExMDYsNTkgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KHZvaWQpXG4gXHRtdW5tYXAobWVtLCBtZW1fc2l6ZSk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBIDJNQiBhbm9uIFRIUCBkcm9wcGVkIHdpdGggTUFEVl9ET05UTkVFRCBsZWF2ZXMgYSBwbWRfbm9uZSBob2xlIHdpdGggbm9cbiYjNDM7ICogcGFnZSB0YWJsZSwgd2hpY2ggcGFnZW1hcF9wYWdlX2NhdGVnb3J5KCkgbmV2ZXIgc2Vlcy4gUEFHRU1BUF9TQ0FOIG11c3RcbiYjNDM7ICogc3RpbGwgcmVwb3J0IGl0IGFzIHdyaXR0ZW4gb24gYSB1ZmZkLXdwIFZNQSwgdmlhIHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfdGhwX2hvbGVfdGVzdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBucGFnZXMsIHdyaXR0ZW4gPSAwLCByZXQsIGk7XG4mIzQzO1x0c3RydWN0IHBhZ2VfcmVnaW9uIHJlZ2lvbnNbMTZdO1xuJiM0MztcdGNoYXIgKmFyZWEsICptZW07XG4mIzQzO1xuJiM0MztcdGlmICghaHBhZ2Vfc2l6ZSkge1xuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwmIzM0OyVzIFRIUCBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdG5wYWdlcyA9IGhwYWdlX3NpemUgLyBwYWdlX3NpemU7XG4mIzQzO1xuJiM0MztcdC8qIEdldCBhIFBNRC1hbGlnbmVkIHJhbmdlIHNvIHRoZSByYW5nZSBjYW4gYmUgYSBzaW5nbGUgVEhQLiAqL1xuJiM0MztcdGFyZWEgPSBtbWFwKE5VTEwsIDIgKiBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuJiM0MztcdGlmIChhcmVhID09IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXMgbW1hcCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRtZW0gPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpYXJlYSAmIzQzOyBocGFnZV9zaXplIC0gMSkgXHUwMDI2IH4oaHBhZ2Vfc2l6ZSAtIDEpKTtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KG1lbSwgMSwgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0aWYgKG1hZHZpc2UobWVtLCBocGFnZV9zaXplLCBNQURWX0NPTExBUFNFKSB8fFxuJiM0MztcdCAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgMSwgaHBhZ2Vfc2l6ZSkpIHtcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDslcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0bXVubWFwKGFyZWEsIDIgKiBocGFnZV9zaXplKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHdwX2luaXQobWVtLCBocGFnZV9zaXplKTtcbiYjNDM7XG4mIzQzO1x0LyogRHJvcCB0aGUgd2hvbGUgUE1EOiBpdCBpcyBjbGVhcmVkIHRvIGEgcG1kX25vbmUgaG9sZS4gKi9cbiYjNDM7XHRpZiAobWFkdmlzZShtZW0sIGhwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIE1BRFZfRE9OVE5FRUQgZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBhZ2VtYXBfaW9jdGwobWVtLCBocGFnZV9zaXplLCByZWdpb25zLCAxNiwgMCwgMCxcbiYjNDM7XHRcdFx0ICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIHNjYW4gZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmV0OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHdyaXR0ZW4gJiM0Mzs9IExFTihyZWdpb25zW2ldKTtcbiYjNDM7XG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdCh3cml0dGVuID09IG5wYWdlcyxcbiYjNDM7XHRcdFx0IFwmIzM0OyVzIHBtZC1ob2xlIHJlcG9ydGVkIHdyaXR0ZW4gKCVsZCBvZiAlbGQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgX19mdW5jX18sIHdyaXR0ZW4sIG5wYWdlcyk7XG4mIzQzO1xuJiM0MztcdHdwX2ZyZWUobWVtLCBocGFnZV9zaXplKTtcbiYjNDM7XHRtdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBzYW5pdHlfdGVzdHModm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplO1xuQEAgLTE2MTAsNyAmIzQzOzE2NjcsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoNCkpXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0h1Z2VUTEIgdGVzdCB3aWxsIGJlIHNraXBwZWRcXG5cJiMzNDspO1xuIFxuLVx0a3NmdF9zZXRfcGxhbigxMTgpO1xuJiM0MztcdGtzZnRfc2V0X3BsYW4oMTE5KTtcbiBcbiBcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHRocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbkBAIC0xNzkwLDYgJiM0MzsxODQ3LDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdC8qIDE4LiBVbnBvcHVsYXRlZCBwdGUgc2Nhbi1wYXRoIGNvbnNpc3RlbmN5ICovXG4gXHR1bnBvcHVsYXRlZF9zY2FuX3Rlc3QoKTtcbiYjNDM7XHR1bnBvcHVsYXRlZF90aHBfaG9sZV90ZXN0KCk7XG4gXG4gXHRjbG9zZShwYWdlbWFwX2ZkKTtcbiBcdGtzZnRfZmluaXNoZWQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX1BBR0VfTU9OSVRPUiYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VtYXBfc2Nhbl9wdGVfaG9sZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBvbiAvcHJvYy9waWQvcGFnZW1hcCB0byBjb3JyZWN0bHkgcmVwb3J0IHVucG9wdWxhdGVkIHJhbmdlcyAoUFRFIGhvbGVzKSBhcyB3cml0dGVuIHdoZW4gdGhlIFZNQSBoYXMgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBlbmFibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQvcHJvY2ZzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzEyMTdmZTEwNTJkMTBkNzYzOTAxYThiYmIzOWExYmFkMDQyMDljYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMjM6MDY6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmMKaW5kZXggZTQzMDJmY2YwMjI3ZDcuLmU0N2Y3MWNkMzBhNThhIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0zMDUwLDEyICYjNDM7MzA1MCwyOCBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogewogCXN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCA9IHdhbGstJmd0O3ByaXZhdGU7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLSZndDt2bWE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllczsKIAlpbnQgcmV0LCBlcnI7CiAKLQlpZiAoIXZtYSB8fCAhcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UocC0mZ3Q7Y3VyX3ZtYV9jYXRlZ29yeSwgcCkpCiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFuIHVucG9wdWxhdGVkIHJhbmdlIHdpdGggbm8gcGFnZSB0YWJsZSAtLSBlLmcuIGEgMk1CIGFub24gVEhQCiYjNDM7CSAqIGRyb3BwZWQgdmlhIE1BRFZfRE9OVE5FRUQsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXMKJiM0MzsJICogLS0gcmVhZHMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBtYXRjaGluZyB0aGUgcHRlX25vbmUgY2FzZQomIzQzOwkgKiB0aGVyZS4gUmVwb3J0aW5nIGl0IGFsc28gbGV0cyB0aGUgUE1fU0NBTl9XUF9NQVRDSElORyBhcm1pbmcgYmVsb3cKJiM0MzsJICogaW5zdGFsbCBtYXJrZXJzICh1ZmZkX3dwX3JhbmdlKCkgYWxsb2NhdGVzIHRoZSBwYWdlIHRhYmxlIHVuZGVyCiYjNDM7CSAqIFdQX1VOUE9QVUxBVEVEKSwgc28gdGhlIG5leHQgc2NhbiBzZWVzIGl0IGNsZWFuIHVudGlsIHJlLXdyaXR0ZW4uCiYjNDM7CSAqLwomIzQzOwljYXRlZ29yaWVzID0gcC0mZ3Q7Y3VyX3ZtYV9jYXRlZ29yeTsKJiM0MzsJaWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkpCiYjNDM7CQljYXRlZ29yaWVzIHw9IFBBR0VfSVNfV1JJVFRFTjsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtJmd0O2N1cl92bWFfY2F0ZWdvcnksIHAsIGFkZHIsICZhbXA7ZW5kKTsKJiM0MzsJcmV0ID0gcGFnZW1hcF9zY2FuX291dHB1dChjYXRlZ29yaWVzLCBwLCBhZGRyLCAmYW1wO2VuZCk7CiAJaWYgKGFkZHIgPT0gZW5kKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggZjliY2ZmOGU3OGZhYmIuLmE0ZThjYzhhZWE0YjdjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCkBAIC0yNSw2ICYjNDM7MjUsMTAgQEAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAomIzQzOyNpZm5kZWYgTUFEVl9DT0xMQVBTRQomIzQzOyNkZWZpbmUgTUFEVl9DT0xMQVBTRSAyNQomIzQzOyNlbmRpZgomIzQzOwogI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMCQkoUEFHRV9JU19XUEFMTE9XRUQgfCBQQUdFX0lTX1dSSVRURU4gfAlcCiAJCQkJCSBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfAlcCiAJCQkJCSBQQUdFX0lTX1NXQVBQRUQgfCBQQUdFX0lTX1BGTlpFUk8gfAlcCkBAIC0xMTAyLDYgJiM0MzsxMTA2LDU5IEBAIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKQogCW11bm1hcChtZW0sIG1lbV9zaXplKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSAyTUIgYW5vbiBUSFAgZHJvcHBlZCB3aXRoIE1BRFZfRE9OVE5FRUQgbGVhdmVzIGEgcG1kX25vbmUgaG9sZSB3aXRoIG5vCiYjNDM7ICogcGFnZSB0YWJsZSwgd2hpY2ggcGFnZW1hcF9wYWdlX2NhdGVnb3J5KCkgbmV2ZXIgc2Vlcy4gUEFHRU1BUF9TQ0FOIG11c3QKJiM0MzsgKiBzdGlsbCByZXBvcnQgaXQgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCB2aWEgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfdGhwX2hvbGVfdGVzdCh2b2lkKQomIzQzO3sKJiM0MzsJbG9uZyBucGFnZXMsIHdyaXR0ZW4gPSAwLCByZXQsIGk7CiYjNDM7CXN0cnVjdCBwYWdlX3JlZ2lvbiByZWdpb25zWzE2XTsKJiM0MzsJY2hhciAqYXJlYSwgKm1lbTsKJiM0MzsKJiM0MzsJaWYgKCFocGFnZV9zaXplKSB7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslcyBUSFAgbm90IHN1cHBvcnRlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlucGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZV9zaXplOwomIzQzOwomIzQzOwkvKiBHZXQgYSBQTUQtYWxpZ25lZCByYW5nZSBzbyB0aGUgcmFuZ2UgY2FuIGJlIGEgc2luZ2xlIFRIUC4gKi8KJiM0MzsJYXJlYSA9IG1tYXAoTlVMTCwgMiAqIGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiYjNDM7CWlmIChhcmVhID09IE1BUF9GQUlMRUQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBtbWFwIGZhaWxlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJbWVtID0gKGNoYXIgKikoKCh1bnNpZ25lZCBsb25nKWFyZWEgJiM0MzsgaHBhZ2Vfc2l6ZSAtIDEpICZhbXA7IH4oaHBhZ2Vfc2l6ZSAtIDEpKTsKJiM0MzsKJiM0MzsJbWVtc2V0KG1lbSwgMSwgaHBhZ2Vfc2l6ZSk7CiYjNDM7CWlmIChtYWR2aXNlKG1lbSwgaHBhZ2Vfc2l6ZSwgTUFEVl9DT0xMQVBTRSkgfHwKJiM0MzsJICAgICFjaGVja19odWdlX2Fub24obWVtLCAxLCBocGFnZV9zaXplKSkgewomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7JXMgY291bGQgbm90IGZvcm0gYSBUSFBcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQltdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdwX2luaXQobWVtLCBocGFnZV9zaXplKTsKJiM0MzsKJiM0MzsJLyogRHJvcCB0aGUgd2hvbGUgUE1EOiBpdCBpcyBjbGVhcmVkIHRvIGEgcG1kX25vbmUgaG9sZS4gKi8KJiM0MzsJaWYgKG1hZHZpc2UobWVtLCBocGFnZV9zaXplLCBNQURWX0RPTlRORUVEKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVzIE1BRFZfRE9OVE5FRUQgZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwomIzQzOwlyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgaHBhZ2Vfc2l6ZSwgcmVnaW9ucywgMTYsIDAsIDAsCiYjNDM7CQkJICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBzY2FuIGZhaWxlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHJldDsgaSYjNDM7JiM0MzspCiYjNDM7CQl3cml0dGVuICYjNDM7PSBMRU4ocmVnaW9uc1tpXSk7CiYjNDM7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQod3JpdHRlbiA9PSBucGFnZXMsCiYjNDM7CQkJICYjMzQ7JXMgcG1kLWhvbGUgcmVwb3J0ZWQgd3JpdHRlbiAoJWxkIG9mICVsZClcbiYjMzQ7LAomIzQzOwkJCSBfX2Z1bmNfXywgd3JpdHRlbiwgbnBhZ2VzKTsKJiM0MzsKJiM0MzsJd3BfZnJlZShtZW0sIGhwYWdlX3NpemUpOwomIzQzOwltdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKIGludCBzYW5pdHlfdGVzdHModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplOwpAQCAtMTYxMCw3ICYjNDM7MTY2Nyw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoNCkpCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7SHVnZVRMQiB0ZXN0IHdpbGwgYmUgc2tpcHBlZFxuJiMzNDspOwogCi0Ja3NmdF9zZXRfcGxhbigxMTgpOwomIzQzOwlrc2Z0X3NldF9wbGFuKDExOSk7CiAKIAlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOwogCWhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwpAQCAtMTc5MCw2ICYjNDM7MTg0Nyw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkvKiAxOC4gVW5wb3B1bGF0ZWQgcHRlIHNjYW4tcGF0aCBjb25zaXN0ZW5jeSAqLwogCXVucG9wdWxhdGVkX3NjYW5fdGVzdCgpOwomIzQzOwl1bnBvcHVsYXRlZF90aHBfaG9sZV90ZXN0KCk7CiAKIAljbG9zZShwYWdlbWFwX2ZkKTsKIAlrc2Z0X2ZpbmlzaGVkKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTW9kaWZpY2F0aW9ucyB0byBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQgc2VlbXMgdG8gdG91Y2ggdHdvIGFyZWFzOiBgZnMvcHJvYy90YXNrX21tdS5jYCBhbmQgYSBzZWxmdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jYC4gTXkgZm9jdXMgaXMgcHJpbWFyaWx5IG9uIHRoZSBjb3JlIGNoYW5nZSB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgdXNlcmZhdWx0ZmRfd3Aodm1hKWAgY2hlY2sgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGFsb25nIHdpdGggc2V0dGluZyBgUEFHRV9JU19XUklUVEVOYCBpbiBgY2F0ZWdvcmllc2AgaWYgdGhhdCBjaGVjayBwYXNzZXMuCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgc28gSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgZnMvcHJvYy90YXNrX21tdS5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGZ1bmN0aW9uLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgY29uZmlndXJhdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoaXMgYmVoYXZpb3IsIG9yIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHdyaXRlIHByb3RlY3Rpb24uIEkgdGhpbmsgdGhlIHF1aWNrZXN0IHdheSB0byB6ZXJvIGluIG9uIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGlzIHRvIHVzZSBgZ3JlcHBlcmAsIGFzIHRoYXQgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBjb25kaXRpb25hbHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgdGhlIGNvZGUgbWlnaHQgaGF2ZSwgb3Igb3RoZXIgY29kZSB1c2luZyB0aGVzZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlbWFwX3NjYW5fcHRlX2hvbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTMwNDE9c3RhdGljIGludCBwYWdlbWFwX3NjYW5faHVnZXRsYl9ob2xlX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ3LVxuZnMvcHJvYy90YXNrX21tdS5jOjMwNDg6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ5LVx0XHRcdFx0IGludCBkZXB0aCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTMwOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwYWdlbWFwX3NjYW5fb3BzID0ge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDkzLVx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5NDpcdC5wdGVfaG9sZSA9IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDk1LVx0Lmh1Z2V0bGJfZW50cnkgPSBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTc2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBmcy9wcm9jL3Rhc2tfbW11LmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBgZnMvcHJvYy90YXNrX21tdS5jYCBmaWxlLiBUaGlzIG1lYW5zIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcyDigJMgdGhlIEtjb25maWcgc3ltYm9scyB0aGF0LCB3aGVuIHNldCwgd2lsbCB1bHRpbWF0ZWx5IGNhdXNlIHRoaXMgcGFydGljdWxhciBzb3VyY2UgZmlsZSB0byBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIG1ldGhvZHMgZm9yIHRoaXMgc29ydCBvZiBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBgZmluZGAgYW5kIHRoZW4gYGdyZXBgIGNvbWJvIHRvIGxvb2sgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBvciBtYXliZSBkaXZlIHJpZ2h0IGludG8gYSBjcm9zcy1yZWZlcmVuY2VkIGJ1aWxkIHN5c3RlbSBvdXRwdXQuIERlcGVuZGluZyBvbiBob3cgdGhlIGJ1aWxkIHN5c3RlbSBpcyBzdHJ1Y3R1cmVkLCB0aGVyZSBtYXkgYmUgYSBzaG9ydGN1dCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIGRpcmVjdGx5LCBvciBJIG1pZ2h0IGhhdmUgdG8gZ28gdGhyb3VnaCBhIGNhc2NhZGUgb2YgaW5jbHVkZXMgYW5kIGRlcGVuZGVuY2llcy4gSXTigJlzIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBwcm9jZXNzIGluZm9ybWF0aW9uLCBvciBwb3NzaWJseSBldmVuIHNlY3VyaXR5IGZlYXR1cmVzIHRoYXQgdXNlIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0uIEkmIzM5O20gZXhwZWN0aW5nIGl0IHRvIGJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFzIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBmb2N1c2VkIGFyZWEgb2YgdGhlIGtlcm5lbC4gSG9wZWZ1bGx5LCBpdOKAmXMgbm90IHRvbyBkZWVwbHkgYnVyaWVkIGluIGEgY29tcGxleCBkZXBlbmRlbmN5IGNoYWluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rhc2tfbW11Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvTWFrZWZpbGU9Nj1vYmoteSAgICYjNDM7PSBwcm9jLm9cbmZzL3Byb2MvTWFrZWZpbGUtNy1cbmZzL3Byb2MvTWFrZWZpbGU6ODpDRkxBR1NfdGFza19tbXUub1x0JiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuZnMvcHJvYy9NYWtlZmlsZS05LXByb2MteVx0XHRcdDo9IG5vbW11Lm8gdGFza19ub21tdS5vXG5mcy9wcm9jL01ha2VmaWxlOjEwOnByb2MtJChDT05GSUdfTU1VKVx0Oj0gdGFza19tbXUub1xuZnMvcHJvYy9NYWtlZmlsZS0xMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjAxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBgQ09ORklHX01NVWAgaXMgdGhlIHRyaWdnZXIgaGVyZSwgYW5kIHRoYXQgcHVsbHMgaW4gYHRhc2tfbW11Lm9gLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gQnV0IHRoZSByZWFsIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9kaWZpY2F0aW9uIHRvIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgLiBBbmQgdGhhdCYjMzk7cyBwYXJ0IG9mIHRoZSBgcGFnZW1hcF9zY2FuX29wc2Agc3RydWN0dXJlLiBJbW1lZGlhdGVseSwgdGhhdCByaW5ncyBhbGFybSBiZWxsczogdGhpcyBpcyBjb25uZWN0ZWQgdG8gdGhlIGBQQUdFTUFQX1NDQU5gIGlvY3RsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHR3byBhcmUgaW50ZXJyZWxhdGVkIGFuZCB3aGF0IGNoYW5nZXMgdGhleSBhcmUgbWFraW5nIGFuZCB3aGF0IHRoYXQgbWVhbnMgZm9yIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZS4gVGltZSB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGB1c2VyZmF1bHRmZF93cGAuIEFuZCBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGNvbnRyb2wgdGhhdCBmdW5jdGlvbiBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgbWlnaHQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmZhdWx0ZmRfd3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU1NT1zdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYyLVx0LyogT25seSBjb3B5IFBURSBtYXJrZXJzIGlmIFVGRkQgcmVnaXN0ZXIgbWF0Y2hlcy4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYzOlx0aWYgKChzcmNtIFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1ApIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF93cChkc3Rfdm1hKSlcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTY0LVx0XHRkc3RtIHw9IFBURV9NQVJLRVJfVUZGRF9XUDtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU4Mj1wdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTkzLVx0LypcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTk0Olx0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2VzbiYjMzk7dCBuZWVkIHRoaXMgd2hvbGVcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTk1LVx0ICogdGhpbmcsIGJlY2F1c2Ugd2hlbiB6YXBwaW5nIGVpdGhlciBpdCBtZWFucyBpdCYjMzk7cyBkcm9wcGluZyB0aGVcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU5OC1cdCAqL1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1OTk6XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICF1c2VyZmF1bHRmZF93cCh2bWEpKVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC02MDAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0xOTY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pc3Npbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjAwLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjAxOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIwMi17XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjExPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9wdGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjEzLXtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIxNDpcdHJldHVybiB1c2VyZmF1bHRmZF93cCh2bWEpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZF93cChwdGUpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMTc9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX2h1Z2VfcG1kX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIxOS17XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMjA6XHRyZXR1cm4gdXNlcmZhdWx0ZmRfd3Aodm1hKSBcdTAwMjZcdTAwMjYgcG1kX3VmZmRfd3AocG1kKTtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIyMS19XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjUyPWV4dGVybiB2b2lkIHVzZXJmYXVsdGZkX3VubWFwX2NvbXBsZXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjUzLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI1NDpleHRlcm4gYm9vbCB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNTU6ZXh0ZXJuIGJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjU2LVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjU3OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTI1OC17XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTktXHQvKiBPbmx5IHdyLXByb3RlY3QgbW9kZSB1c2VzIHB0ZSBtYXJrZXJzICovXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNjA6XHRpZiAoIXVzZXJmYXVsdGZkX3dwKHZtYSkpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNjEtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNzAtXHQgKi9cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI3MTpcdHJldHVybiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCh2bWEpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjcyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0zMTY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pc3Npbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzIwLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzIxOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTMyMi17XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9Mzk4PXN0YXRpYyBpbmxpbmUgYm9vbCB1ZmZkX2Rpc2FibGVfZmF1bHRfYXJvdW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwMi1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjQwMzpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDQte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwNy1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjQwODpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDkte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTQxMz1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc191ZmZkX3dpdGhvdXRfZXZlbnRfcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtNDE3LVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6NDE4OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQxOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBhIFBhZ2UgVGFibGUgU2NhbiBNb2RpZmljYXRpb24qKgoKQWxyaWdodCwgc28gc29tZW9uZSYjMzk7cyB0d2Vha2VkIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBncmFzcCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBub3cgY2hlY2tpbmcgYHVzZXJmYXVsdGZkX3dwKHZtYSlgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bC4gSXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlIGluIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGFuZCBgUEFHRU1BUF9TQ0FOYCBpb2N0bCBhcmUgY29ubmVjdGVkLiBOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFjdGl2YXRlIHRoaXMgYFBBR0VNQVBfU0NBTmAgZnVuY3Rpb25hbGl0eS4gSXMgaXQgYSBjb3JlIGZlYXR1cmUsIGEgZGVidWcgZmxhZywgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbiBpcyBjcnVjaWFsIGZvciBhc3Nlc3NpbmcgdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvZGUgY2hhbmdlLCBlc3BlY2lhbGx5IHdpdGhpbiBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIGFuZCBob3cgdGhvc2Ugc3Vic3lzdGVtcyBhcmUgY29uZmlndXJlZCB0byBvcGVyYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQUdFTUFQX1NDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MzI2OD1zdGF0aWMgbG9uZyBkb19wYWdlbWFwX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3My1cdHN3aXRjaCAoY21kKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI3NDpcdGNhc2UgUEFHRU1BUF9TQ0FOOlxuZnMvcHJvYy90YXNrX21tdS5jLTMyNzUtXHRcdHJldHVybiBkb19wYWdlbWFwX3NjYW4obW0sIGFyZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3OTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgUEFHRU1BUF9TQ0FOYCoqCgpBbHJpZ2h0LCBzbyBgUEFHRU1BUF9TQ0FOYOKApiB0aGF0JiMzOTtzIGFuIGBpb2N0bGAgc3BlY2lmaWNhbGx5IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBgL3Byb2MvJmx0O3BpZCZndDsvcGFnZW1hcGAgZmlsZSwgcmlnaHQ/IEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJJiMzOTt2ZSBkaXZlZCBpbnRvIHRoaXMgYXJlYSwgYnV0IHRoYXQgZmVlbHMgcmlnaHQuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQmIzM5O3MgdGhlIHByZXJlcXVpc2l0ZSBjb25maWd1cmF0aW9uPyBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIHRpZWQgdG8gYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAuIEJldHRlciBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYW5kIHZlcmlmeSB0aGF0IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzIGluZGVlZCB0aGUga2V5IGVuYWJsaW5nIGZhY3Rvci4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgbWFrZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAzNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IG9mIGEgUHJvY2VzcyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyBwYWdlIG1hcHBpbmcgZm9yIGEgc3BlY2lmaWMgdGFzay4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXI6IGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCB0aGUgcGFnZW1hcC4gVGhpcyBmaWxlIGlzIHdoZXJlIEkmIzM5O2QgYW50aWNpcGF0ZSB0aGUgY29yZSBsb2dpYyBmb3IgdHJhbnNsYXRpbmcgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIHBhcnRpY3VsYXIgcHJvY2VzcyDigJMgaXQmIzM5O3MgcHJhY3RpY2FsbHkgKmd1YXJhbnRlZWQqIHRvIGhvdXNlIHRoZSBgcGFnZW1hcGAgaW1wbGVtZW50YXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZnMvcHJvYy90YXNrX21tdS5jOjEyOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuZnMvcHJvYy90YXNrX21tdS5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTE5MzU9dHlwZWRlZiBzdHJ1Y3Qge1xuZnMvcHJvYy90YXNrX21tdS5jLTE5MzYtXHR1NjQgcG1lO1xuZnMvcHJvYy90YXNrX21tdS5jOjE5Mzc6fSBwYWdlbWFwX2VudHJ5X3Q7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTkzOC1cbmZzL3Byb2MvdGFza19tbXUuYzoxOTM5OnN0cnVjdCBwYWdlbWFwcmVhZCB7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk0MC1cdGludCBwb3MsIGxlbjtcdFx0LyogdW5pdHM6IFBNX0VOVFJZX0JZVEVTLCBub3QgYnl0ZXMgKi9cbmZzL3Byb2MvdGFza19tbXUuYzoxOTQxOlx0cGFnZW1hcF9lbnRyeV90ICpidWZmZXI7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk0Mi1cdGJvb2wgc2hvd19wZm47XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTE5NDctXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTk0ODojZGVmaW5lIFBNX0VOVFJZX0JZVEVTXHRcdHNpemVvZihwYWdlbWFwX2VudHJ5X3QpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk0OS0jZGVmaW5lIFBNX1BGUkFNRV9CSVRTXHRcdDU1XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTE5NjAtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTk2MTpzdGF0aWMgaW5saW5lIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncylcbmZzL3Byb2MvdGFza19tbXUuYy0xOTYyLXtcbmZzL3Byb2MvdGFza19tbXUuYzoxOTYzOlx0cmV0dXJuIChwYWdlbWFwX2VudHJ5X3QpIHsgLnBtZSA9IChmcmFtZSBcdTAwMjYgUE1fUEZSQU1FX01BU0spIHwgZmxhZ3MgfTtcbmZzL3Byb2MvdGFza19tbXUuYy0xOTY0LX1cbmZzL3Byb2MvdGFza19tbXUuYy0xOTY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjE5NjY6c3RhdGljIGludCBhZGRfdG9fcGFnZW1hcChwYWdlbWFwX2VudHJ5X3QgKnBtZSwgc3RydWN0IHBhZ2VtYXByZWFkICpwbSlcbmZzL3Byb2MvdGFza19tbXUuYy0xOTY3LXtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MTk3ND1zdGF0aWMgYm9vbCBfX2ZvbGlvX3BhZ2VfbWFwcGVkX2V4Y2x1c2l2ZWx5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xOTgwLVxuZnMvcHJvYy90YXNrX21tdS5jOjE5ODE6c3RhdGljIGludCBwYWdlbWFwX3B0ZV9ob2xlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuZnMvcHJvYy90YXNrX21tdS5jLTE5ODItXHRcdFx0ICAgIF9fYWx3YXlzX3VudXNlZCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuZnMvcHJvYy90YXNrX21tdS5jLTE5ODMte1xuZnMvcHJvYy90YXNrX21tdS5jOjE5ODQ6XHRzdHJ1Y3QgcGFnZW1hcHJlYWQgKnBtID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuZnMvcHJvYy90YXNrX21tdS5jLTE5ODUtXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydDtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk4OS1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBmaW5kX3ZtYSh3YWxrLVx1MDAzZW1tLCBhZGRyKTtcbmZzL3Byb2MvdGFza19tbXUuYzoxOTkwOlx0XHRwYWdlbWFwX2VudHJ5X3QgcG1lID0gbWFrZV9wbWUoMCwgMCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk5MS1cdFx0LyogRW5kIG9mIGFkZHJlc3Mgc3BhY2UgaG9sZSwgd2hpY2ggd2UgbWFyayBhcyBub24tcHJlc2VudC4gKi9cbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk5OS1cdFx0Zm9yICg7IGFkZHIgXHUwMDNjIGhvbGVfZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUpIHtcbmZzL3Byb2MvdGFza19tbXUuYzoyMDAwOlx0XHRcdGVyciA9IGFkZF90b19wYWdlbWFwKFx1MDAyNnBtZSwgcG0pO1xuZnMvcHJvYy90YXNrX21tdS5jLTIwMDEtXHRcdFx0aWYgKGVycilcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjAxMS1cdFx0Zm9yICg7IGFkZHIgXHUwMDNjIG1pbihlbmQsIHZtYS1cdTAwM2V2bV9lbmQpOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUpIHtcbmZzL3Byb2MvdGFza19tbXUuYzoyMDEyOlx0XHRcdGVyciA9IGFkZF90b19wYWdlbWFwKFx1MDAyNnBtZSwgcG0pO1xuZnMvcHJvYy90YXNrX21tdS5jLTIwMTMtXHRcdFx0aWYgKGVycilcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjAyMC1cbmZzL3Byb2MvdGFza19tbXUuYzoyMDIxOnN0YXRpYyBwYWdlbWFwX2VudHJ5X3QgcHRlX3RvX3BhZ2VtYXBfZW50cnkoc3RydWN0IHBhZ2VtYXByZWFkICpwbSxcbmZzL3Byb2MvdGFza19tbXUuYy0yMDIyLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIwODctI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuZnMvcHJvYy90YXNrX21tdS5jOjIwODg6c3RhdGljIGludCBwYWdlbWFwX3BtZF9yYW5nZV90aHAocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmZzL3Byb2MvdGFza19tbXUuYy0yMDg5LVx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjA5MDpcdFx0c3RydWN0IHBhZ2VtYXByZWFkICpwbSlcbmZzL3Byb2MvdGFza19tbXUuYy0yMDkxLXtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjEwMi1cdGlmIChwbWRfbm9uZShwbWQpKVxuZnMvcHJvYy90YXNrX21tdS5jOjIxMDM6XHRcdGdvdG8gcG9wdWxhdGVfcGFnZW1hcDtcbmZzL3Byb2MvdGFza19tbXUuYy0yMTA0LVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMTQxLVxuZnMvcHJvYy90YXNrX21tdS5jOjIxNDI6cG9wdWxhdGVfcGFnZW1hcDpcbmZzL3Byb2MvdGFza19tbXUuYy0yMTQzLVx0Zm9yICg7IGFkZHIgIT0gZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGlkeCYjNDM7JiM0MzspIHtcbmZzL3Byb2MvdGFza19tbXUuYy0yMTQ0LVx0XHR1NjQgY3VyX2ZsYWdzID0gZmxhZ3M7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE0NTpcdFx0cGFnZW1hcF9lbnRyeV90IHBtZTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMTQ2LVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMTUxLVx0XHRwbWUgPSBtYWtlX3BtZShmcmFtZSwgY3VyX2ZsYWdzKTtcbmZzL3Byb2MvdGFza19tbXUuYzoyMTUyOlx0XHRlcnIgPSBhZGRfdG9fcGFnZW1hcChcdTAwMjZwbWUsIHBtKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMTUzLVx0XHRpZiAoZXJyKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMTY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjIxNjY6c3RhdGljIGludCBwYWdlbWFwX3BtZF9yYW5nZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbmZzL3Byb2MvdGFza19tbXUuYy0yMTY3LVx0XHRcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIxNjktXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuZnMvcHJvYy90YXNrX21tdS5jOjIxNzA6XHRzdHJ1Y3QgcGFnZW1hcHJlYWQgKnBtID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuZnMvcHJvYy90YXNrX21tdS5jLTIxNzEtXHRzcGlubG9ja190ICpwdGw7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIxNzctXHRpZiAocHRsKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE3ODpcdFx0ZXJyID0gcGFnZW1hcF9wbWRfcmFuZ2VfdGhwKHBtZHAsIGFkZHIsIGVuZCwgdm1hLCBwbSk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE3OS1cdFx0c3Bpbl91bmxvY2socHRsKTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE5My1cdGZvciAoOyBhZGRyIFx1MDAzYyBlbmQ7IHB0ZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkge1xuZnMvcHJvYy90YXNrX21tdS5jOjIxOTQ6XHRcdHBhZ2VtYXBfZW50cnlfdCBwbWU7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE5NS1cbmZzL3Byb2MvdGFza19tbXUuYzoyMTk2Olx0XHRwbWUgPSBwdGVfdG9fcGFnZW1hcF9lbnRyeShwbSwgdm1hLCBhZGRyLCBwdGVwX2dldChwdGUpKTtcbmZzL3Byb2MvdGFza19tbXUuYzoyMTk3Olx0XHRlcnIgPSBhZGRfdG9fcGFnZW1hcChcdTAwMjZwbWUsIHBtKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMTk4LVx0XHRpZiAoZXJyKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMjA5LS8qIFRoaXMgZnVuY3Rpb24gd2Fsa3Mgd2l0aGluIG9uZSBodWdldGxiIGVudHJ5IGluIHRoZSBzaW5nbGUgY2FsbCAqL1xuZnMvcHJvYy90YXNrX21tdS5jOjIyMTA6c3RhdGljIGludCBwYWdlbWFwX2h1Z2V0bGJfcmFuZ2UocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjIxMS1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMjEzLXtcbmZzL3Byb2MvdGFza19tbXUuYzoyMjE0Olx0c3RydWN0IHBhZ2VtYXByZWFkICpwbSA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMjE1LVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVx1MDAzZXZtYTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI0Ny1cdGZvciAoOyBhZGRyICE9IGVuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjI0ODpcdFx0cGFnZW1hcF9lbnRyeV90IHBtZSA9IG1ha2VfcG1lKGZyYW1lLCBmbGFncyk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI0OS1cbmZzL3Byb2MvdGFza19tbXUuYzoyMjUwOlx0XHRlcnIgPSBhZGRfdG9fcGFnZW1hcChcdTAwMjZwbWUsIHBtKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMjUxLVx0XHRpZiAoZXJyKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMjYyLSNlbHNlXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjI2MzojZGVmaW5lIHBhZ2VtYXBfaHVnZXRsYl9yYW5nZVx0TlVMTFxuZnMvcHJvYy90YXNrX21tdS5jLTIyNjQtI2VuZGlmIC8qIEhVR0VUTEJfUEFHRSAqL1xuZnMvcHJvYy90YXNrX21tdS5jLTIyNjUtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjI2NjpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfb3BzID0ge1xuZnMvcHJvYy90YXNrX21tdS5jOjIyNjc6XHQucG1kX2VudHJ5XHQ9IHBhZ2VtYXBfcG1kX3JhbmdlLFxuZnMvcHJvYy90YXNrX21tdS5jOjIyNjg6XHQucHRlX2hvbGVcdD0gcGFnZW1hcF9wdGVfaG9sZSxcbmZzL3Byb2MvdGFza19tbXUuYzoyMjY5Olx0Lmh1Z2V0bGJfZW50cnlcdD0gcGFnZW1hcF9odWdldGxiX3JhbmdlLFxuZnMvcHJvYy90YXNrX21tdS5jLTIyNzAtXHQud2Fsa19sb2NrXHQ9IFBHV0FMS19SRExPQ0ssXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIyNzMtLypcbmZzL3Byb2MvdGFza19tbXUuYzoyMjc0OiAqIC9wcm9jL3BpZC9wYWdlbWFwIC0gYW4gYXJyYXkgbWFwcGluZyB2aXJ0dWFsIHBhZ2VzIHRvIHBmbnNcbmZzL3Byb2MvdGFza19tbXUuYy0yMjc1LSAqXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIzMDAtICovXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjMwMTpzdGF0aWMgc3NpemVfdCBwYWdlbWFwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjMwMi1cdFx0XHQgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIzMDQtXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZnMvcHJvYy90YXNrX21tdS5jOjIzMDU6XHRzdHJ1Y3QgcGFnZW1hcHJlYWQgcG07XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjMwNi1cdHVuc2lnbmVkIGxvbmcgc3JjO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMzY5LVx0XHRcdGdvdG8gb3V0X2ZyZWU7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjM3MDpcdFx0cmV0ID0gd2Fsa19wYWdlX3JhbmdlKG1tLCBzdGFydF92YWRkciwgZW5kLCBcdTAwMjZwYWdlbWFwX29wcywgXHUwMDI2cG0pO1xuZnMvcHJvYy90YXNrX21tdS5jLTIzNzEtXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMzk0LVxuZnMvcHJvYy90YXNrX21tdS5jOjIzOTU6c3RhdGljIGludCBwYWdlbWFwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjM5Ni17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI0MDUtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQwNjpzdGF0aWMgaW50IHBhZ2VtYXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL3Byb2MvdGFza19tbXUuYy0yNDA3LXtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQyMS1cbmZzL3Byb2MvdGFza19tbXUuYzoyNDIyOnN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSB7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQyMy1cdHN0cnVjdCBwbV9zY2FuX2FyZyBhcmc7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI0MjktXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQzMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxuZnMvcHJvYy90YXNrX21tdS5jLTI0MzEtXHRcdFx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNDQxLVx0XHQgKiB0b28gc28gdGhpcyBnZW5lcmljIHBhdGggYWdyZWVzIHdpdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQ0MjpcdFx0ICogcGF0aCBpbiBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5KCksIHdoaWNoIHJlcG9ydHMgcHRlX25vbmUgYXNcbmZzL3Byb2MvdGFza19tbXUuYy0yNDQzLVx0XHQgKiB3cml0dGVuIGFuZCwgdW5kZXIgUE1fU0NBTl9XUF9NQVRDSElORywgYXJtcyBhIG1hcmtlci4gVGhlXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTI0OTA9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjUwOC0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjUwOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3RocF9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjUxMC1cdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjU1ND1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNTcwLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjU3MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX2h1Z2V0bGJfY2F0ZWdvcnkocHRlX3QgcHRlKVxuZnMvcHJvYy90YXNrX21tdS5jLTI1NzIte1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNTc4LVx0LypcbmZzL3Byb2MvdGFza19tbXUuYzoyNTc5Olx0ICogQWNjb3JkaW5nIHRvIHBhZ2VtYXBfaHVnZXRsYl9yYW5nZSgpLCBmaWxlLWJhY2tlZCBIdWdlVExCXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjU4MC1cdCAqIHBhZ2UgY2Fubm90IGJlIHN3YXBwZWQuIFNvIFBBR0VfSVNfRklMRSBpcyBub3QgY2hlY2tlZCBmb3Jcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjYwNj1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfaHVnZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI2MzYtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSB8fCBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjYzNzpzdGF0aWMgdm9pZCBwYWdlbWFwX3NjYW5fYmFja291dF9yYW5nZShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjYzOC1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNjUzLVxuZnMvcHJvYy90YXNrX21tdS5jOjI2NTQ6c3RhdGljIGJvb2wgcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UodW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzLFxuZnMvcHJvYy90YXNrX21tdS5jOjI2NTU6XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwKVxuZnMvcHJvYy90YXNrX21tdS5jLTI2NTYte1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNjY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjI2NjY6c3RhdGljIGJvb2wgcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3ZtYSh1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY2NzpcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcClcbmZzL3Byb2MvdGFza19tbXUuYy0yNjY4LXtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY3Ny1cbmZzL3Byb2MvdGFza19tbXUuYzoyNjc4OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3Rlc3Rfd2Fsayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmZzL3Byb2MvdGFza19tbXUuYy0yNjc5LVx0XHRcdFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbmZzL3Byb2MvdGFza19tbXUuYy0yNjgwLXtcbmZzL3Byb2MvdGFza19tbXUuYzoyNjgxOlx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuZnMvcHJvYy90YXNrX21tdS5jLTI2ODItXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNzExLVxuZnMvcHJvYy90YXNrX21tdS5jOjI3MTI6XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ192bWEodm1hX2NhdGVnb3J5LCBwKSlcbmZzL3Byb2MvdGFza19tbXUuYy0yNzEzLVx0XHRyZXR1cm4gMTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjcxOS1cbmZzL3Byb2MvdGFza19tbXUuYzoyNzIwOnN0YXRpYyBib29sIHBhZ2VtYXBfc2Nhbl9wdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcyxcbmZzL3Byb2MvdGFza19tbXUuYzoyNzIxOlx0XHRcdFx0ICAgIHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCxcbmZzL3Byb2MvdGFza19tbXUuYy0yNzIyLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI3NDktXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjc1MDpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9vdXRwdXQodW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzLFxuZnMvcHJvYy90YXNrX21tdS5jOjI3NTE6XHRcdFx0ICAgICAgIHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCxcbmZzL3Byb2MvdGFza19tbXUuYy0yNzUyLVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgKmVuZClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc3MC1cbmZzL3Byb2MvdGFza19tbXUuYzoyNzcxOlx0aWYgKCFwYWdlbWFwX3NjYW5fcHVzaF9yYW5nZShjYXRlZ29yaWVzLCBwLCBhZGRyLCAqZW5kKSkge1xuZnMvcHJvYy90YXNrX21tdS5jLTI3NzItXHRcdCplbmQgPSBhZGRyO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNzgzLVxuZnMvcHJvYy90YXNrX21tdS5jOjI3ODQ6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fdGhwX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc4NS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNzg3LSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmZzL3Byb2MvdGFza19tbXUuYzoyNzg4Olx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuZnMvcHJvYy90YXNrX21tdS5jLTI3ODktXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNzk4LVx0Y2F0ZWdvcmllcyA9IHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8XG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjc5OTpcdFx0ICAgICBwYWdlbWFwX3RocF9jYXRlZ29yeShwLCB2bWEsIHN0YXJ0LCAqcG1kKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yODAwLVxuZnMvcHJvYy90YXNrX21tdS5jOjI4MDE6XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxuZnMvcHJvYy90YXNrX21tdS5jLTI4MDItXHRcdGdvdG8gb3V0X3VubG9jaztcbmZzL3Byb2MvdGFza19tbXUuYy0yODAzLVxuZnMvcHJvYy90YXNrX21tdS5jOjI4MDQ6XHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIHN0YXJ0LCBcdTAwMjZlbmQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4MDUtXHRpZiAoc3RhcnQgPT0gZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yODE5LVx0XHRzcGxpdF9odWdlX3BtZCh2bWEsIHBtZCwgc3RhcnQpO1xuZnMvcHJvYy90YXNrX21tdS5jOjI4MjA6XHRcdHBhZ2VtYXBfc2Nhbl9iYWNrb3V0X3JhbmdlKHAsIHN0YXJ0LCBlbmQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4MjEtXHRcdC8qIFJlcG9ydCBhcyBpZiB0aGVyZSB3YXMgbm8gVEhQICovXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI4MzQtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjgzNTpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmZzL3Byb2MvdGFza19tbXUuYy0yODM2LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzNy17XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjgzODpcdHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbmZzL3Byb2MvdGFza19tbXUuYy0yODM5LVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVx1MDAzZXZtYTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg0NC1cbmZzL3Byb2MvdGFza19tbXUuYzoyODQ1Olx0cmV0ID0gcGFnZW1hcF9zY2FuX3RocF9lbnRyeShwbWQsIHN0YXJ0LCBlbmQsIHdhbGspO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4NDYtXHRpZiAocmV0ICE9IC1FTk9FTlQpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI4ODMtXHRcdFx0XHRjb250aW51ZTtcbmZzL3Byb2MvdGFza19tbXUuYzoyODg0Olx0XHRcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQocC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHwgUEFHRV9JU19XUklUVEVOLFxuZnMvcHJvYy90YXNrX21tdS5jLTI4ODUtXHRcdFx0XHRcdFx0ICBwLCBhZGRyLCBcdTAwMjZuZXh0KTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMC1cdFx0dW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzID0gcC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTAxOlx0XHRcdFx0XHQgICBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkocCwgdm1hLCBhZGRyLCBwdGVudCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMi1cdFx0dW5zaWduZWQgbG9uZyBuZXh0ID0gYWRkciAmIzQzOyBQQUdFX1NJWkU7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMy1cbmZzL3Byb2MvdGFza19tbXUuYzoyOTA0Olx0XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxuZnMvcHJvYy90YXNrX21tdS5jLTI5MDUtXHRcdFx0Y29udGludWU7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwNi1cbmZzL3Byb2MvdGFza19tbXUuYzoyOTA3Olx0XHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIGFkZHIsIFx1MDAyNm5leHQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI5MDgtXHRcdGlmIChuZXh0ID09IGFkZHIpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI5MzMtI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmZzL3Byb2MvdGFza19tbXUuYzoyOTM0OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkzNS1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTM3LXtcbmZzL3Byb2MvdGFza19tbXUuYzoyOTM4Olx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuZnMvcHJvYy90YXNrX21tdS5jLTI5MzktXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTQ4LVx0XHRwdGUgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIHN0YXJ0LCBwdGVwKTtcbmZzL3Byb2MvdGFza19tbXUuYzoyOTQ5Olx0XHRjYXRlZ29yaWVzID0gcC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHwgcGFnZW1hcF9odWdldGxiX2NhdGVnb3J5KHB0ZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk1MC1cbmZzL3Byb2MvdGFza19tbXUuYzoyOTUxOlx0XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxuZnMvcHJvYy90YXNrX21tdS5jLTI5NTItXHRcdFx0cmV0dXJuIDA7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk1My1cbmZzL3Byb2MvdGFza19tbXUuYzoyOTU0Olx0XHRyZXR1cm4gcGFnZW1hcF9zY2FuX291dHB1dChjYXRlZ29yaWVzLCBwLCBzdGFydCwgXHUwMDI2ZW5kKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yOTU1LVx0fVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTYwLVx0cHRlID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBzdGFydCwgcHRlcCk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjk2MTpcdGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfCBwYWdlbWFwX2h1Z2V0bGJfY2F0ZWdvcnkocHRlKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yOTYyLVxuZnMvcHJvYy90YXNrX21tdS5jOjI5NjM6XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxuZnMvcHJvYy90YXNrX21tdS5jLTI5NjQtXHRcdGdvdG8gb3V0X3VubG9jaztcbmZzL3Byb2MvdGFza19tbXUuYy0yOTY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjI5NjY6XHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIHN0YXJ0LCBcdTAwMjZlbmQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI5NjctXHRpZiAoc3RhcnQgPT0gZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTc0LVx0XHQvKiBQYXJ0aWFsIEh1Z2VUTEIgcGFnZSBXUCBpc24mIzM5O3QgcG9zc2libGUuICovXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjk3NTpcdFx0cGFnZW1hcF9zY2FuX2JhY2tvdXRfcmFuZ2UocCwgc3RhcnQsIGVuZCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk3Ni1cdFx0cC1cdTAwM2Vhcmcud2Fsa19lbmQgPSBzdGFydDtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk5Mi0gKiBXcml0ZS1wcm90ZWN0IHRoZSB1bnBvcHVsYXRlZCBodWdldGxiIGVudHJpZXMgY292ZXJpbmcgW2FkZHIsIGVuZCkgYnlcbmZzL3Byb2MvdGFza19tbXUuYzoyOTkzOiAqIGluc3RhbGxpbmcgdWZmZC13cCBtYXJrZXJzIGlubGluZSwgZXhhY3RseSBhcyBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSgpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk5NC0gKiBkb2VzIGZvciBwb3B1bGF0ZWQgZW50cmllcy5cbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzAwNi0gKi9cbmZzL3Byb2MvdGFza19tbXUuYzozMDA3OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfaG9sZV93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDA4LVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDM5LSNlbHNlXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA0MDojZGVmaW5lIHBhZ2VtYXBfc2Nhbl9odWdldGxiX2VudHJ5IE5VTExcbmZzL3Byb2MvdGFza19tbXUuYzozMDQxOnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfaG9sZV93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQyLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ3LVxuZnMvcHJvYy90YXNrX21tdS5jOjMwNDg6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ5LVx0XHRcdFx0IGludCBkZXB0aCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA1MC17XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA1MTpcdHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMDUyLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVx1MDAzZXZtYTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA2MC1cdCAqIEFuIHVucG9wdWxhdGVkIHJhbmdlIHdpdGggbm8gcGFnZSB0YWJsZSAtLSBlLmcuIGEgMk1CIGFub24gVEhQXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA2MTpcdCAqIGRyb3BwZWQgdmlhIE1BRFZfRE9OVE5FRUQsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXNcbmZzL3Byb2MvdGFza19tbXUuYy0zMDYyLVx0ICogLS0gcmVhZHMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBtYXRjaGluZyB0aGUgcHRlX25vbmUgY2FzZVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDcwLVxuZnMvcHJvYy90YXNrX21tdS5jOjMwNzE6XHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxuZnMvcHJvYy90YXNrX21tdS5jLTMwNzItXHRcdHJldHVybiAwO1xuZnMvcHJvYy90YXNrX21tdS5jLTMwNzMtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA3NDpcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgYWRkciwgXHUwMDI2ZW5kKTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMDc1LVx0aWYgKGFkZHIgPT0gZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDgxLVx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuZnMvcHJvYy90YXNrX21tdS5jOjMwODI6XHRcdGVyciA9IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aodm1hLCBhZGRyLCBlbmQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTMwODMtXHRlbHNlXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMwOTAtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5MTpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfc2Nhbl9vcHMgPSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5MjpcdC50ZXN0X3dhbGsgPSBwYWdlbWFwX3NjYW5fdGVzdF93YWxrLFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTM6XHQucG1kX2VudHJ5ID0gcGFnZW1hcF9zY2FuX3BtZF9lbnRyeSxcbmZzL3Byb2MvdGFza19tbXUuYzozMDk0Olx0LnB0ZV9ob2xlID0gcGFnZW1hcF9zY2FuX3B0ZV9ob2xlLFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTU6XHQuaHVnZXRsYl9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2VudHJ5LFxuZnMvcHJvYy90YXNrX21tdS5jLTMwOTYtfTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMDk3LVxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTg6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fZ2V0X2FyZ3Moc3RydWN0IHBtX3NjYW5fYXJnICphcmcsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5OS1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIHVhcmcpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMxMzktXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE0MDpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl93cml0ZWJhY2tfYXJncyhzdHJ1Y3QgcG1fc2Nhbl9hcmcgKmFyZyxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTQxLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgdWFyZ2wpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMxNTAtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE1MTpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9pbml0X2JvdW5jZV9idWZmZXIoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwKVxuZnMvcHJvYy90YXNrX21tdS5jLTMxNTIte1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMTY3LVxuZnMvcHJvYy90YXNrX21tdS5jOjMxNjg6c3RhdGljIGxvbmcgcGFnZW1hcF9zY2FuX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnApXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE2OS17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMxOTQtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE5NTpzdGF0aWMgbG9uZyBkb19wYWdlbWFwX3NjYW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdWFyZylcbmZzL3Byb2MvdGFza19tbXUuYy0zMTk2LXtcbmZzL3Byb2MvdGFza19tbXUuYzozMTk3Olx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlIHAgPSB7MH07XG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE5OC1cdHVuc2lnbmVkIGxvbmcgd2Fsa19zdGFydDtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzIwMS1cbmZzL3Byb2MvdGFza19tbXUuYzozMjAyOlx0cmV0ID0gcGFnZW1hcF9zY2FuX2dldF9hcmdzKFx1MDAyNnAuYXJnLCB1YXJnKTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMjAzLVx0aWYgKHJldClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzIwNy1cdFx0XHQgICAgICBwLmFyZy5yZXR1cm5fbWFzaztcbmZzL3Byb2MvdGFza19tbXUuYzozMjA4Olx0cmV0ID0gcGFnZW1hcF9zY2FuX2luaXRfYm91bmNlX2J1ZmZlcihcdTAwMjZwKTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMjA5LVx0aWYgKHJldClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzIzMy1cdFx0cmV0ID0gd2Fsa19wYWdlX3JhbmdlKG1tLCB3YWxrX3N0YXJ0LCBwLmFyZy5lbmQsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzIzNDpcdFx0XHRcdCAgICAgIFx1MDAyNnBhZ2VtYXBfc2Nhbl9vcHMsIFx1MDAyNnApO1xuZnMvcHJvYy90YXNrX21tdS5jLTMyMzUtXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMyNDAtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI0MTpcdFx0bl9vdXQgPSBwYWdlbWFwX3NjYW5fZmx1c2hfYnVmZmVyKFx1MDAyNnApO1xuZnMvcHJvYy90YXNrX21tdS5jLTMyNDItXHRcdGlmIChuX291dCBcdTAwM2MgMClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI2MC1cdFx0cC5hcmcud2Fsa19lbmQgPSBwLmFyZy5lbmQ7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI2MTpcdGlmIChwYWdlbWFwX3NjYW5fd3JpdGViYWNrX2FyZ3MoXHUwMDI2cC5hcmcsIHVhcmcpKVxuZnMvcHJvYy90YXNrX21tdS5jLTMyNjItXHRcdHJldCA9IC1FRkFVTFQ7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMyNjctXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI2ODpzdGF0aWMgbG9uZyBkb19wYWdlbWFwX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjY5LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMjc0LVx0Y2FzZSBQQUdFTUFQX1NDQU46XG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI3NTpcdFx0cmV0dXJuIGRvX3BhZ2VtYXBfc2NhbihtbSwgYXJnKTtcbmZzL3Byb2MvdGFza19tbXUuYy0zMjc2LVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMjgxLVxuZnMvcHJvYy90YXNrX21tdS5jOjMyODI6Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyA9IHtcbmZzL3Byb2MvdGFza19tbXUuYy0zMjgzLVx0Lmxsc2Vla1x0XHQ9IG1lbV9sc2VlaywgLyogYm9ycm93IHRoaXMgKi9cbmZzL3Byb2MvdGFza19tbXUuYzozMjg0Olx0LnJlYWRcdFx0PSBwYWdlbWFwX3JlYWQsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI4NTpcdC5vcGVuXHRcdD0gcGFnZW1hcF9vcGVuLFxuZnMvcHJvYy90YXNrX21tdS5jOjMyODY6XHQucmVsZWFzZVx0PSBwYWdlbWFwX3JlbGVhc2UsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI4NzpcdC51bmxvY2tlZF9pb2N0bCA9IGRvX3BhZ2VtYXBfY21kLFxuZnMvcHJvYy90YXNrX21tdS5jOjMyODg6XHQuY29tcGF0X2lvY3RsXHQ9IGRvX3BhZ2VtYXBfY21kLFxuZnMvcHJvYy90YXNrX21tdS5jLTMyODktfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYHByb2NfcGFnZW1hcF9vcGVyYXRpb25zYCBhbmQgYFBBR0VNQVBfU0NBTmAqKgoKQWxyaWdodCwgc28gdGhlIGBQQUdFTUFQX1NDQU5gIGlvY3RsIGlzIGhhbmdpbmcgb3V0IHRoZXJlIGluIGBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9uc2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoZXJlICplbHNlKiBkb2VzIHRoaXMgYHByb2NfcGFnZW1hcF9vcGVyYXRpb25zYCBzdHJ1Y3Qgc2hvdyB1cD8gV2hhdCBjb250ZXh0cyBhcmUgdXNpbmcgdGhpcyBmdW5jdGlvbmFsaXR5PyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wYWN0LiBLbm93aW5nICp3aGVyZSogaXQmIzM5O3MgZW1wbG95ZWQgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgdXNhZ2UgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfcGFnZW1hcF9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9MzI4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zMzI0LVx0UkVHKFwmIzM0O3NtYXBzX3JvbGx1cFwmIzM0OywgU19JUlVHTywgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMpLFxuZnMvcHJvYy9iYXNlLmM6MzMyNTpcdFJFRyhcJiMzNDtwYWdlbWFwXCYjMzQ7LCAgICBTX0lSVVNSLCBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zMzI2LSNlbmRpZlxuLS1cbmZzL3Byb2MvYmFzZS5jPTM2NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGlkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zNjc5LVx0UkVHKFwmIzM0O3NtYXBzX3JvbGx1cFwmIzM0OywgU19JUlVHTywgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMpLFxuZnMvcHJvYy9iYXNlLmM6MzY4MDpcdFJFRyhcJiMzNDtwYWdlbWFwXCYjMzQ7LCAgICBTX0lSVVNSLCBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zNjgxLSNlbmRpZlxuLS1cbmZzL3Byb2MvaW50ZXJuYWwuaD00MTE9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnM7XG5mcy9wcm9jL2ludGVybmFsLmg6NDEyOmV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGFnZW1hcF9vcGVyYXRpb25zO1xuZnMvcHJvYy9pbnRlcm5hbC5oLTQxMy1cbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzI2OD1zdGF0aWMgbG9uZyBkb19wYWdlbWFwX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI4MS1cbmZzL3Byb2MvdGFza19tbXUuYzozMjgyOmNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI4My1cdC5sbHNlZWtcdFx0PSBtZW1fbHNlZWssIC8qIGJvcnJvdyB0aGlzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjY1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkV4YW1pbmluZyB0aGUgYCNlbmRpZmAgaW4gYGZzL3Byb2MvYmFzZS5jYCBhcm91bmQgYHBhZ2VtYXBgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGZzL3Byb2MvYmFzZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IGAjZW5kaWZgIGlzIGRvaW5nLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSB0aGF0JiMzOTtzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYHBhZ2VtYXBgIGZ1bmN0aW9uYWxpdHkuIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCBpdCwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgbWF5YmUgaW52ZXN0aWdhdGUgYSBzdWJ0bGUgaW50ZXJhY3Rpb24uIFdoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgaXMgdGhpcyBjb2RlIHBvdGVudGlhbGx5IGRlcGVuZGVudCBvbj8gV2hhdCBmZWF0dXJlcyBtaWdodCBiZSBnZXR0aW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhpcz8gTXkgZ29hbCBpcyByZWFsbHkgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2Ygd2hhdCB0aGF0IGAjZW5kaWZgIGlzIGNvbnRyb2xsaW5nLiBJcyBpdCBhIGZ1bGwgZmVhdHVyZSwgb3IgYSBzbWFsbCBzdWJzZXQ/IElzIHRoaXMgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jayBiYXNlZCBvbiBzb21lIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbj8gTGV0IG1lIHRyYWNlIGJhY2sgYW5kIGlkZW50aWZ5IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmUgdGhhdCB0cmlnZ2VycyB0aGF0IGNsb3NpbmcgYCNlbmRpZmAsIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhlIGFzc29jaWF0ZWQgYCNpZmRlZmAgb3IgYCNpZmAgc3RhdGVtZW50IGlzIGNoZWNraW5nLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IG9yIHN5c3RlbSBzdGF0ZSBuZWVkcyB0byBiZSwgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoYXQgcG9ydGlvbiBvZiBjb2RlIGZyb20gdGhlIGZpbmFsIGNvbXBpbGVkIGJpbmFyeS4gQW5kIHRoYXQmIzM5O3MgY3JpdGljYWwgaW5mb3JtYXRpb24sIGJlY2F1c2UgSSBhbHdheXMgbmVlZCB0byBrbm93IHdoYXQgZmVhdHVyZXMgbXkgc3lzdGVtIGlzIGJ1aWxkaW5nIHdpdGgsIGFuZCBob3cgdGhleSBiZWhhdmUgaW4gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9MzI4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zMzIwLVx0UkVHKFwmIzM0O21vdW50c3RhdHNcJiMzNDssIFNfSVJVU1IsIHByb2NfbW91bnRzdGF0c19vcGVyYXRpb25zKSxcbmZzL3Byb2MvYmFzZS5jOjMzMjE6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxuZnMvcHJvYy9iYXNlLmMtMzMyMi1cdFJFRyhcJiMzNDtjbGVhcl9yZWZzXCYjMzQ7LCBTX0lXVVNSLCBwcm9jX2NsZWFyX3JlZnNfb3BlcmF0aW9ucyksXG4tLVxuZnMvcHJvYy9iYXNlLmM9MzY0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTM2NzUtXHRSRUcoXCYjMzQ7bW91bnRpbmZvXCYjMzQ7LCAgU19JUlVHTywgcHJvY19tb3VudGluZm9fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYzozNjc2OiNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcbmZzL3Byb2MvYmFzZS5jLTM2NzctXHRSRUcoXCYjMzQ7Y2xlYXJfcmVmc1wmIzM0OywgU19JV1VTUiwgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnMpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgY29uY2VybiBpcyBwcmV0dHkgY2xlYXI6IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLiBHb3QgaXQuIE5vdywgaG9sZCBvbiwgSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSBoZXJlLi4uIEkmIzM5O20gc2VlaW5nIGB1c2VyZmF1bHRmZF93cGAgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgLiBUaGlzIHRyaWdnZXJzIGEgcXVlc3Rpb246IGRvZXMgdGhpcyBpbXBseSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19VU0VSRkFVTFRGRGA/IE15IGd1dCBzYXlzIGl0IHByb2JhYmx5IGRvZXMsIGJ1dCBsZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBCZXN0IHRvIHZlcmlmeSBpdCBjb25jcmV0ZWx5LgoKU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gYW5kIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcyBmb3IgYHVzZXJmYXVsdGZkX3dwYC4gSSYjMzk7bGwgc2NhbiB0aGF0IGhlYWRlciBhbmQgZ2V0IGEgbXVjaCBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmZhdWx0ZmRfd3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0xOTY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pc3Npbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjAwLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjAxOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIwMi17XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjExPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9wdGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjEzLXtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIxNDpcdHJldHVybiB1c2VyZmF1bHRmZF93cCh2bWEpIFx1MDAyNlx1MDAyNiBwdGVfdWZmZF93cChwdGUpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMTc9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX2h1Z2VfcG1kX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIxOS17XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMjA6XHRyZXR1cm4gdXNlcmZhdWx0ZmRfd3Aodm1hKSBcdTAwMjZcdTAwMjYgcG1kX3VmZmRfd3AocG1kKTtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIyMS19XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjUyPWV4dGVybiB2b2lkIHVzZXJmYXVsdGZkX3VubWFwX2NvbXBsZXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjUzLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI1NDpleHRlcm4gYm9vbCB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNTU6ZXh0ZXJuIGJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjU2LVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjU3OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTI1OC17XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTktXHQvKiBPbmx5IHdyLXByb3RlY3QgbW9kZSB1c2VzIHB0ZSBtYXJrZXJzICovXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNjA6XHRpZiAoIXVzZXJmYXVsdGZkX3dwKHZtYSkpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNjEtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNzAtXHQgKi9cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI3MTpcdHJldHVybiB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZCh2bWEpO1xuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjcyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0zMTY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pc3Npbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzIwLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzIxOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTMyMi17XG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9Mzk4PXN0YXRpYyBpbmxpbmUgYm9vbCB1ZmZkX2Rpc2FibGVfZmF1bHRfYXJvdW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwMi1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjQwMzpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDQte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwNy1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjQwODpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDkte1xuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTQxMz1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc191ZmZkX3dpdGhvdXRfZXZlbnRfcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtNDE3LVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6NDE4OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQxOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Njg1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBzcGVjaWZpYyBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBVc2VyZmF1bHRmZCBXcml0ZSBQcm90ZWN0aW9uIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhhdCBgI2lmZGVmYCBibG9jayBzdXJyb3VuZGluZyBgdXNlcmZhdWx0ZmRfd3BgLiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCBob3cgd3JpdGUgcHJvdGVjdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgYHVzZXJmYXVsdGZkYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoaXMgcHJvYmFibHkgY29udHJvbHMgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9mIHNvbWUgZmVhdHVyZSBvciBzb21lIGNvZGUgcGF0aCBiYXNlZCBvbiBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gd2hldGhlciB3cml0ZSBwcm90ZWN0aW9uIHZpYSB1c2VyZmF1bHRmZCBpcyBlbmFibGVkIGF0IGFsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IGNvbmZpZ3VyYXRpb24gZmxhZyBpcyBhbmQgd2hhdCBjb25zZXF1ZW5jZXMgaXQgaGFzIGlmIHRoZSBgI2lmZGVmYCBldmFsdWF0ZXMgdG8gdHJ1ZSB2ZXJzdXMgZmFsc2UuIFRoaXMgbWVhbnMgSSYjMzk7bGwgbmVlZCB0byBnbyBodW50aW5nIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IHByZXByb2Nlc3NvciBzeW1ib2wgYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyB1c2VkLiBUaGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGxpa2VseSB0aGVyZSBmb3IgYSByZWFzb24sIGxpa2VseSBkdWUgdG8gYW4gb3B0aW9uYWwgZmVhdHVyZSB0aGF0IGNvdWxkIGludHJvZHVjZSBjb21wbGV4aXR5IG9yIHBvc3NpYmxlIHBlcmZvcm1hbmNlIGltcGFjdHMgYW5kIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBpbXBhY3QgdGhpcyBjb25maWd1cmF0aW9uIGhhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmIENPTkZJR19VU0VSRkFVTFRGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTExLVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MTI6I2lmZGVmIENPTkZJR19VU0VSRkFVTFRGRFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDQ1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGJlY29taW5nIGNsZWFyZXIuIEl0IHNlZW1zIHRoYXQgYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgdGhlIGtleSBwcmVyZXF1aXNpdGUgZm9yIGB1c2VyZmF1bHRmZF93cGAgdG8gYWN0dWFsbHkgcmV0dXJuIHRydWUuIElmIHRoYXQgY29uZmlnIG9wdGlvbiBpc24mIzM5O3Qgc2V0LCB0aGUgZnVuY3Rpb24ganVzdCByZXR1cm5zIGZhbHNlLCB3aGljaCBpcyBmaW5lIGZyb20gYSBjb21waWxhdGlvbiBzdGFuZHBvaW50LCBidXQgbWVhbnMgdGhlIGNyaXRpY2FsIGxpbmUgYGNhdGVnb3JpZXMgfD0gUEFHRV9JU19XUklUVEVOYCB3b24mIzM5O3QgZ2V0IGV4ZWN1dGVkLgoKVG8gcHJvcGVybHkgdGVzdCB0aGUgY2hhbmdlcywgSSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIGJvdGggYENPTkZJR19VU0VSRkFVTFRGRGAgYW5kIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLgoKSG1tLCB0aGlzIHBhdGNoIGFsc28gbWVudGlvbnMgYE1BRFZfRE9OVE5FRURgIGFuZCBgTUFEVl9DT0xMQVBTRWAgd2l0aGluIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5LiBUaGUgdGVzdCB1c2VzIGBtYWR2aXNlKG1lbSwgaHBhZ2Vfc2l6ZSwgTUFEVl9DT0xMQVBTRSlgLiBUaGF0IG1ha2VzIG1lIHRoaW5rLi4uIGlzIGBNQURWX0NPTExBUFNFYCB0aWVkIHRvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgPwoKWWVzLCB0aGUgdGVzdCBkb2N1bWVudGF0aW9uIGNvbmZpcm1zIGl0LiBJdCBleHBsYWlucyB0aGF0IGEgMk1CIGFub255bW91cyBUSFAgdGhhdCYjMzk7cyBiZWVuIGBNQURWX0RPTlRORUVEYCYjMzk7ZCByZXN1bHRzIGluIGEgYHBtZF9ub25lYCBob2xlIHdpdGggbm8gcGFnZSB0YWJsZSBlbnRyeSwgd2hpY2ggaXMgc29tZXRoaW5nIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoKWAgbmV2ZXIgc2Vlcy4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBgUEFHRU1BUF9TQ0FOYCBoYXMgdG8gcmVwb3J0IHRoaXMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBhbmQgaXQgd2lsbCBkbyBzbyB2aWEgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSgpYC4KClNvLCB0byBydW4gdGhlIHRlc3QgcHJvcGVybHksIEkgYWxzbyBuZWVkIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbHRob3VnaCB0aGUgcmVsZXZhbnQga2VybmVsIGNvZGUgaXRzZWxmIHNob3VsZCBhcHBseSB0byBhbnkgdW5wb3B1bGF0ZWQgbWVtb3J5IHJhbmdlLiBUaGUgY29yZSBjb2RlIEkgYW0gbG9va2luZyBhdCBpbiBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKClgIGxvb2tzIGxpa2UgdGhpczoKCmBgYGMKCWNhdGVnb3JpZXMgPSBwLSZndDtjdXJfdm1hX2NhdGVnb3J5OwoJaWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkpCgkJY2F0ZWdvcmllcyB8PSBQQUdFX0lTX1dSSVRURU47CgoJaWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSkKCQlyZXR1cm4gMDsKYGBgCgpUaGVyZWZvcmUsIHRvIHJlY2FwLCBJIG5lZWQgYENPTkZJR19VU0VSRkFVTFRGRGAsIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLCBhbmQgYmVjYXVzZSB0aGUgdGVzdGluZyByZWxpZXMgb24gaXQsIGFsc28gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYWxvbmdzaWRlIHRoZSB1c3VhbCBgQ09ORklHX01NVWAuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKWAgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9zY2FuX3B0ZV9ob2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0zMDQxPXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfaG9sZV93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA0Ny1cbmZzL3Byb2MvdGFza19tbXUuYzozMDQ4OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA0OS1cdFx0XHRcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0zMDkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcGFnZW1hcF9zY2FuX29wcyA9IHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5My1cdC5wbWRfZW50cnkgPSBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5LFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTQ6XHQucHRlX2hvbGUgPSBwYWdlbWFwX3NjYW5fcHRlX2hvbGUsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5NS1cdC5odWdldGxiX2VudHJ5ID0gcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzIwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBLZXJuZWwgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgY2F0Y2hlcyBteSBleWUuIEl0JiMzOTtzIGNhbGxlZCBieSBgd2Fsa19wYWdlX3JhbmdlYCBhbmQsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXQgZGVhbHMgd2l0aCB0aG9zZSBwZXNreSBob2xlcyBpbiB0aGUgcGFnZSB0YWJsZSDigJMgcGxhY2VzIHdoZXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IFBURXMgcHJlc2VudC4gVGhlIHBhdGNoJiMzOTtzIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgYWRkaW5nIHRoZSBgUEFHRV9JU19XUklUVEVOYCBmbGFnIGlmIGB1c2VyZmF1bHRmZF93cCh2bWEpYCByZXR1cm5zIHRydWUuIFRoYXQgc3VnZ2VzdHMgdGhpcyBwYXRjaCBpcyBzdWJ0bHkgY2hhbmdpbmcgaG93IHdlIHJlcG9ydCBwYWdlIHdyaXRlIHN0YXR1cyBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IGB1c2VyZmF1bHRmZF93cGAsIHNwZWNpZmljYWxseSBpbiB0aG9zZSB1bnBvcHVsYXRlZCBhcmVhcy4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgZmFjdCB0aGF0IGl0IG1vZGlmaWVzIHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bCBiZWhhdmlvciwgcGFydGljdWxhcmx5IGZvciBtZW1vcnkgcmVnaW9ucyB0aGF0IGFyZSBpbnRlbnRpb25hbGx5IHVucG9wdWxhdGVkIGJ1dCBtYW5hZ2VkIGJ5IGB1c2VyZmF1bHRmZF93cGAuLi4gdGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gaXMgZGVmaW5pdGVseSBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYC4KCk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgY29uZmlnIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4gSSBrbm93IGBQUk9DX1BBR0VfTU9OSVRPUmAgaXMgbmVjZXNzYXJ5LCBhbmQgb2YgY291cnNlLCBgVVNFUkZBVUxURkRgIGlzIGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgaXQgbW9kaWZpZXMuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzIHRoZSByaWdodCBvcHRpb24gZm9yIGVuYWJsaW5nIHRoZSBwcm9jIHBhZ2UgbW9uaXRvcmluZyBpbiB0aGUgYnVpbGQgY29uZmlnIHRvIGVuc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZz04Mz1jb25maWcgUFJPQ19TWVNDVExcbi0tXG5mcy9wcm9jL0tjb25maWctMTAxLVxuZnMvcHJvYy9LY29uZmlnOjEwMjpjb25maWcgUFJPQ19QQUdFX01PTklUT1JcbmZzL3Byb2MvS2NvbmZpZy0xMDMtIFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTU5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNvbmZpZ3VyYXRpb24gQ29udGV4dCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgY29uZmlndXJhdGlvbiBoZXJlLiBJJiMzOTttIGltbWVkaWF0ZWx5IHJlY29nbml6aW5nIHRoYXQgYFBST0NfUEFHRV9NT05JVE9SYCBpcyB0aGUga2V5IGZsYWcgZm9yIHRoZSBwYWdlIG1vbml0b3JpbmcgZnVuY3Rpb25hbGl0eS4gU3RyYWlnaHRmb3J3YXJkLiBBbmQsIGNpcmNsaW5nIGJhY2sgdG8gdGhlIGB1c2VyZmF1bHRmZF93cGAgZGlzY3Vzc2lvbiwgYFVTRVJGQVVMVEZEYCDigJMgdGhhdCYjMzk7cyB0aGUgc3BlY2lmaWMgY29uZmlnIHRoYXQgZW5hYmxlcyB0aGUgYHVzZXJmYXVsdGZkX3dwYCBmZWF0dXJlLiBHb29kLiBUaGF0IGNsYXJpZmllcyB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzIGZvciB0aG9zZSBmZWF0dXJlcy4gTm8gc3VycHJpc2VzIHRoZXJlLCBqdXN0IGNvbmZpcm1pbmcgdGhlIGV4cGVjdGVkIGFzc29jaWF0aW9ucyBpbiBteSBoZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0VSRkFVTFRGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTYwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYFVTRVJGQVVMVEZEYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgVVNFUkZBVUxURkRgLiBUaGlzIGlzIGxpa2VseSBhIG1hY3JvLCBwcm9iYWJseSBpbiBhIGhlYWRlciBmaWxlIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgZ2l2ZW4gaXRzIG5hbWluZyBjb252ZW50aW9uLiBJdCYjMzk7cyBhIHN5c3RlbSBjYWxsIG9yIGEgcmVsYXRlZCBjb25zdGFudC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdXNlIGBncmVwYCBvciBgZmluZGAgdG8gc2NhbiB0aHJvdWdoIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZCB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLCBsb29raW5nIGZvciAmIzM0O1VTRVJGQVVMVEZEJiMzNDsgYW5kICYjMzQ7dXNlcmZhdWx0ZmQmIzM0Oy4gTWF5YmUgSSBjYW4gbmFycm93IGl0IGRvd24gd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHMsIHN1Y2ggYXMgaW5jbHVkZS91YXBpIG9yIGluY2x1ZGUvbGludXguIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc28gSSBtaWdodCByZWZpbmUgdGhlIHNlYXJjaCB3aXRoIGtleXdvcmRzIGxpa2UgJiMzNDttbSYjMzQ7LCAmIzM0O2ZhdWx0JiMzNDssIG9yICYjMzQ7dXNlciBzcGFjZSYjMzQ7LiBUaGUga2VybmVsIGRvY3VtZW50YXRpb24gb24gdXNlcmZhdWx0ZmQgd291bGQgYmUgdmVyeSBoZWxwZnVsLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgbWFjcm8gaXMgaW1wb3J0YW50LiBJcyBpdCBhbiBpbnRlZ2VyIGNvbnN0YW50IHJlcHJlc2VudGluZyBhIHN5c3RlbSBjYWxsIG51bWJlciwgb3IgYSBmbGFnIGZvciBhbiBgaW9jdGxgIGNvbW1hbmQ/IFRoaXMgaW5pdGlhbCBzZWFyY2ggd2lsbCBoZWxwIG1lIG5hcnJvdyBkb3duIHRoZSBzcGVjaWZpYyBmaWxlIGFuZCBwdXJwb3NlLCBmcm9tIHRoZXJlIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJGQVVMVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4Mj1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG4tLVxubW0vS2NvbmZpZy0xMzg2LVxubW0vS2NvbmZpZzoxMzg3Om1lbnVjb25maWcgVVNFUkZBVUxURkRcbm1tL0tjb25maWctMTM4OC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MzEKCQkJCQkJCW91dHB1dDogMTM0CgkJCQkJCQl0aG91Z2h0czogNDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBVU0VSRkFVTFRGRGAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgYFVTRVJGQVVMVEZEYCBpcyBkZWZpbmVkIGluIGBtbS9LY29uZmlnYCwgdGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gbm90ZS4gTm93LCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudD8gVGhlIHRlc3QgdXNlcyBgTUFEVl9DT0xMQVBTRWAsIGBNQURWX0RPTlRORUVEYCwgYW5kIGBocGFnZV9zaXplYCB3aGljaCBpcyBpbmZvcm1hdGl2ZSwgYnV0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGNvdWxkIGJlIHVzZWZ1bCBoZXJlIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhhdCBUSFAgaG9sZSBzY2VuYXJpbywgYWx0aG91Z2ggdGhlIGNvcmUgY29kZSBhcHBsaWVzIHRvIGFueSBQVEUgaG9sZSwgcmlnaHQ/IEV2ZW4gdGhvc2UgY3JlYXRlZCBieSBkcm9wcGluZyBub3JtYWwgcGFnZXMgdXNpbmcgYE1BRFZfRE9OVE5FRURgLgoKSG9sZCBvbiwgdGhlIGNvbW1lbnQgY2xhcmlmaWVzIGl0OiBhbiB1bnBvcHVsYXRlZCByYW5nZSwgd2l0aG91dCBhbnkgcGFnZSB0YWJsZSwgbGlrZSBhIDJNQiBhbm9ueW1vdXMgVEhQIHRoYXQmIzM5O3MgYmVlbiBkcm9wcGVkIHZpYSBgTUFEVl9ET05UTkVFRGAgaXMgcmVhZCBhcyB3cml0dGVuIHVuZGVyIGEgdWZmZC13cCBWTUEuIFRoYXQgbWFrZXMgc2Vuc2UsIGl0JiMzOTtzIG1hdGNoaW5nIHRoZSBgcHRlX25vbmVgIGNhc2UuIFRoaXMgaXMgY3J1Y2lhbDogdGhlIHBhdGNoIGFsbG93cyB0aGUgUE1fU0NBTl9XUF9NQVRDSElORyBhcm1pbmcgYmVsb3cgdG8gaW5zdGFsbCBtYXJrZXJzIHdoZW4gd2UgZW5jb3VudGVyIHRoZXNlIHVucG9wdWxhdGVkIHJlZ2lvbnMsIHNvIHRoZSBuZXh0IHNjYW4gdHJlYXRzIGl0IGFzIGNsZWFuIHVudGlsIGl0IGlzIHJld3JpdHRlbi4gU28gaXQgaXNuJiMzOTt0IHNwZWNpZmljYWxseSAqb25seSogaHVnZSBwYWdlcy4gSXQgYXBwbGllcyB0byBhbnkgdW5wb3B1bGF0ZWQgcmFuZ2UsIGJ1dCBUSFAgaXMgYSBnb29kIGV4YW1wbGUgdG8gaGF2ZSBpbiBtaW5kLiBJIHRoaW5rIEkmIzM5O2xsIGFkZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRvIGJlIHNhZmUsIGp1c3QgdG8gY292ZXIgdGhhdCBiYXNlLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBkb19wYWdlbWFwX3NjYW5gIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gTGV0JiMzOTtzIHNlZS4uLiBgZG9fcGFnZW1hcF9zY2FuYCBpcyBjYWxsZWQgZnJvbSBgZG9fcGFnZW1hcF9jbWRgIHdoaWNoIGlzIGFuIGB1bmxvY2tlZF9pb2N0bGAgZm9yIGAvcHJvYy9waWQvcGFnZW1hcGAuIFl1cCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdXNlcnNwYWNlIGludGVyZmFjZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLiBIZXJlJiMzOTtzIG15IHN1bW1hcnk6CgoqICAgKipXb3J0aEZ1enppbmcqKjogKlRydWUqCiogICAqKkZvY3VzU3ltYm9scyoqOiBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYAoqICAgKipFbmFibGVDb25maWdzKio6IGBQUk9DX1BBR0VfTU9OSVRPUmAsIGBVU0VSRkFVTFRGRGAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIGBQQUdFTUFQX1NDQU5gIGlvY3RsIG9uIGAvcHJvYy9waWQvcGFnZW1hcGAsIGVuc3VyaW5nIGNvcnJlY3QgcmVwb3J0aW5nIG9mIHVucG9wdWxhdGVkIHJlZ2lvbnMgKFBURSBob2xlcykgYXMgd3JpdHRlbiB3aGVuIHRoZSBWTUEgdXRpbGl6ZXMgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgZXhwb3NlcyBhIG5ldyBiZWhhdmlvciB2aWEgdGhlIHByb2NmcyBpbnRlcmZhY2UuIFRoZSBjaGFuZ2UgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OywKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlbWFwX3NjYW5fcHRlX2hvbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAgdG8gY29ycmVjdGx5IHJlcG9ydCB1bnBvcHVsYXRlZCByYW5nZXMgKFBURSBob2xlcykgYXMgd3JpdHRlbiB3aGVuIHRoZSBWTUEgaGFzIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50L3Byb2NmcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZW1hcF9zY2FuX3B0ZV9ob2xlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIG9uIC9wcm9jL3BpZC9wYWdlbWFwIHRvIGNvcnJlY3RseSByZXBvcnQgdW5wb3B1bGF0ZWQgcmFuZ2VzIChQVEUgaG9sZXMpIGFzIHdyaXR0ZW4gd2hlbiB0aGUgVk1BIGhhcyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC9wcm9jZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6MzUuMjk2ODM3NDkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5NTA4MDExMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIixcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VtYXBfc2Nhbl9wdGVfaG9sZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIG9uIC9wcm9jL3BpZC9wYWdlbWFwIHRvIGNvcnJlY3RseSByZXBvcnQgdW5wb3B1bGF0ZWQgcmFuZ2VzIChQVEUgaG9sZXMpIGFzIHdyaXR0ZW4gd2hlbiB0aGUgVk1BIGhhcyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC9wcm9jZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNjozNS4yOTY4NDU3NzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTE3NTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMxMjE3ZmUxMDUyZDEwZDc2MzkwMWE4YmJiMzlhMWJhZDA0MjA5Y2FcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAyMzowNjozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcXG5pbmRleCBlNDMwMmZjZjAyMjdkNy4uZTQ3ZjcxY2QzMGE1OGEgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXFxuKysrIGIvZnMvcHJvYy90YXNrX21tdS5jXFxuQEAgLTMwNTAsMTIgKzMwNTAsMjggQEAgc3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4rXFx0dW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzO1xcbiBcXHRpbnQgcmV0LCBlcnI7XFxuIFxcbi1cXHRpZiAoIXZtYSB8fCAhcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UocC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCkpXFxuK1xcdGlmICghdm1hKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFuIHVucG9wdWxhdGVkIHJhbmdlIHdpdGggbm8gcGFnZSB0YWJsZSAtLSBlLmcuIGEgMk1CIGFub24gVEhQXFxuK1xcdCAqIGRyb3BwZWQgdmlhIE1BRFZfRE9OVE5FRUQsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXNcXG4rXFx0ICogLS0gcmVhZHMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBtYXRjaGluZyB0aGUgcHRlX25vbmUgY2FzZVxcbitcXHQgKiB0aGVyZS4gUmVwb3J0aW5nIGl0IGFsc28gbGV0cyB0aGUgUE1fU0NBTl9XUF9NQVRDSElORyBhcm1pbmcgYmVsb3dcXG4rXFx0ICogaW5zdGFsbCBtYXJrZXJzICh1ZmZkX3dwX3JhbmdlKCkgYWxsb2NhdGVzIHRoZSBwYWdlIHRhYmxlIHVuZGVyXFxuK1xcdCAqIFdQX1VOUE9QVUxBVEVEKSwgc28gdGhlIG5leHQgc2NhbiBzZWVzIGl0IGNsZWFuIHVudGlsIHJlLXdyaXR0ZW4uXFxuK1xcdCAqL1xcbitcXHRjYXRlZ29yaWVzID0gcC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeTtcXG4rXFx0aWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkpXFxuK1xcdFxcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19XUklUVEVOO1xcbitcXG4rXFx0aWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtXFx1MDAzZWN1cl92bWFfY2F0ZWdvcnksIHAsIGFkZHIsIFxcdTAwMjZlbmQpO1xcbitcXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIGFkZHIsIFxcdTAwMjZlbmQpO1xcbiBcXHRpZiAoYWRkciA9PSBlbmQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCBmOWJjZmY4ZTc4ZmFiYi4uYTRlOGNjOGFlYTRiN2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuQEAgLTI1LDYgKzI1LDEwIEBAXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbisjaWZuZGVmIE1BRFZfQ09MTEFQU0VcXG4rI2RlZmluZSBNQURWX0NPTExBUFNFIDI1XFxuKyNlbmRpZlxcbitcXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXFx0XFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IFBBR0VfSVNfU1dBUFBFRCB8IFBBR0VfSVNfUEZOWkVSTyB8XFx0XFxcXFxcbkBAIC0xMTAyLDYgKzExMDYsNTkgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KHZvaWQpXFxuIFxcdG11bm1hcChtZW0sIG1lbV9zaXplKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQSAyTUIgYW5vbiBUSFAgZHJvcHBlZCB3aXRoIE1BRFZfRE9OVE5FRUQgbGVhdmVzIGEgcG1kX25vbmUgaG9sZSB3aXRoIG5vXFxuKyAqIHBhZ2UgdGFibGUsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXMuIFBBR0VNQVBfU0NBTiBtdXN0XFxuKyAqIHN0aWxsIHJlcG9ydCBpdCBhcyB3cml0dGVuIG9uIGEgdWZmZC13cCBWTUEsIHZpYSBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3RocF9ob2xlX3Rlc3Qodm9pZClcXG4re1xcbitcXHRsb25nIG5wYWdlcywgd3JpdHRlbiA9IDAsIHJldCwgaTtcXG4rXFx0c3RydWN0IHBhZ2VfcmVnaW9uIHJlZ2lvbnNbMTZdO1xcbitcXHRjaGFyICphcmVhLCAqbWVtO1xcbitcXG4rXFx0aWYgKCFocGFnZV9zaXplKSB7XFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiJXMgVEhQIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdG5wYWdlcyA9IGhwYWdlX3NpemUgLyBwYWdlX3NpemU7XFxuK1xcbitcXHQvKiBHZXQgYSBQTUQtYWxpZ25lZCByYW5nZSBzbyB0aGUgcmFuZ2UgY2FuIGJlIGEgc2luZ2xlIFRIUC4gKi9cXG4rXFx0YXJlYSA9IG1tYXAoTlVMTCwgMiAqIGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcXG4rXFx0aWYgKGFyZWEgPT0gTUFQX0ZBSUxFRClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyBtbWFwIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRtZW0gPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpYXJlYSArIGhwYWdlX3NpemUgLSAxKSBcXHUwMDI2IH4oaHBhZ2Vfc2l6ZSAtIDEpKTtcXG4rXFxuK1xcdG1lbXNldChtZW0sIDEsIGhwYWdlX3NpemUpO1xcbitcXHRpZiAobWFkdmlzZShtZW0sIGhwYWdlX3NpemUsIE1BRFZfQ09MTEFQU0UpIHx8XFxuK1xcdCAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgMSwgaHBhZ2Vfc2l6ZSkpIHtcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCIlcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRtdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHdwX2luaXQobWVtLCBocGFnZV9zaXplKTtcXG4rXFxuK1xcdC8qIERyb3AgdGhlIHdob2xlIFBNRDogaXQgaXMgY2xlYXJlZCB0byBhIHBtZF9ub25lIGhvbGUuICovXFxuK1xcdGlmIChtYWR2aXNlKG1lbSwgaHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgTUFEVl9ET05UTkVFRCBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFxuK1xcdHJldCA9IHBhZ2VtYXBfaW9jdGwobWVtLCBocGFnZV9zaXplLCByZWdpb25zLCAxNiwgMCwgMCxcXG4rXFx0XFx0XFx0ICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgc2NhbiBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJldDsgaSsrKVxcbitcXHRcXHR3cml0dGVuICs9IExFTihyZWdpb25zW2ldKTtcXG4rXFxuK1xcdGtzZnRfdGVzdF9yZXN1bHQod3JpdHRlbiA9PSBucGFnZXMsXFxuK1xcdFxcdFxcdCBcXFwiJXMgcG1kLWhvbGUgcmVwb3J0ZWQgd3JpdHRlbiAoJWxkIG9mICVsZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBfX2Z1bmNfXywgd3JpdHRlbiwgbnBhZ2VzKTtcXG4rXFxuK1xcdHdwX2ZyZWUobWVtLCBocGFnZV9zaXplKTtcXG4rXFx0bXVubWFwKGFyZWEsIDIgKiBocGFnZV9zaXplKTtcXG4rfVxcbitcXG4gaW50IHNhbml0eV90ZXN0cyh2b2lkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgdmVjX3NpemU7XFxuQEAgLTE2MTAsNyArMTY2Nyw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KDQpKVxcbiBcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiSHVnZVRMQiB0ZXN0IHdpbGwgYmUgc2tpcHBlZFxcXFxuXFxcIik7XFxuIFxcbi1cXHRrc2Z0X3NldF9wbGFuKDExOCk7XFxuK1xcdGtzZnRfc2V0X3BsYW4oMTE5KTtcXG4gXFxuIFxcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XFxuIFxcdGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbkBAIC0xNzkwLDYgKzE4NDcsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXG4gXFx0LyogMTguIFVucG9wdWxhdGVkIHB0ZSBzY2FuLXBhdGggY29uc2lzdGVuY3kgKi9cXG4gXFx0dW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KCk7XFxuK1xcdHVucG9wdWxhdGVkX3RocF9ob2xlX3Rlc3QoKTtcXG4gXFxuIFxcdGNsb3NlKHBhZ2VtYXBfZmQpO1xcbiBcXHRrc2Z0X2ZpbmlzaGVkKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjM1Ljc4Njk5MDcxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0NjA2MzgzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIixcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VtYXBfc2Nhbl9wdGVfaG9sZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIG9uIC9wcm9jL3BpZC9wYWdlbWFwIHRvIGNvcnJlY3RseSByZXBvcnQgdW5wb3B1bGF0ZWQgcmFuZ2VzIChQVEUgaG9sZXMpIGFzIHdyaXR0ZW4gd2hlbiB0aGUgVk1BIGhhcyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0aW9uIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC9wcm9jZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMxMjE3ZmUxMDUyZDEwZDc2MzkwMWE4YmJiMzlhMWJhZDA0MjA5Y2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDIzOjA2OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXG5pbmRleCBlNDMwMmZjZjAyMjdkNy4uZTQ3ZjcxY2QzMGE1OGEgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbisrKyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTMwNTAsMTIgKzMwNTAsMjggQEAgc3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuK1x0dW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzO1xuIFx0aW50IHJldCwgZXJyO1xuIFxuLVx0aWYgKCF2bWEgfHwgIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCkpXG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKlxuK1x0ICogQW4gdW5wb3B1bGF0ZWQgcmFuZ2Ugd2l0aCBubyBwYWdlIHRhYmxlIC0tIGUuZy4gYSAyTUIgYW5vbiBUSFBcbitcdCAqIGRyb3BwZWQgdmlhIE1BRFZfRE9OVE5FRUQsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXNcbitcdCAqIC0tIHJlYWRzIGFzIHdyaXR0ZW4gb24gYSB1ZmZkLXdwIFZNQSwgbWF0Y2hpbmcgdGhlIHB0ZV9ub25lIGNhc2VcbitcdCAqIHRoZXJlLiBSZXBvcnRpbmcgaXQgYWxzbyBsZXRzIHRoZSBQTV9TQ0FOX1dQX01BVENISU5HIGFybWluZyBiZWxvd1xuK1x0ICogaW5zdGFsbCBtYXJrZXJzICh1ZmZkX3dwX3JhbmdlKCkgYWxsb2NhdGVzIHRoZSBwYWdlIHRhYmxlIHVuZGVyXG4rXHQgKiBXUF9VTlBPUFVMQVRFRCksIHNvIHRoZSBuZXh0IHNjYW4gc2VlcyBpdCBjbGVhbiB1bnRpbCByZS13cml0dGVuLlxuK1x0ICovXG4rXHRjYXRlZ29yaWVzID0gcC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5O1xuK1x0aWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkpXG4rXHRcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19XUklUVEVOO1xuK1xuK1x0aWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCwgYWRkciwgXHUwMDI2ZW5kKTtcbitcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgYWRkciwgXHUwMDI2ZW5kKTtcbiBcdGlmIChhZGRyID09IGVuZClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbmluZGV4IGY5YmNmZjhlNzhmYWJiLi5hNGU4Y2M4YWVhNGI3YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjUsNiArMjUsMTAgQEBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuKyNpZm5kZWYgTUFEVl9DT0xMQVBTRVxuKyNkZWZpbmUgTUFEVl9DT0xMQVBTRSAyNVxuKyNlbmRpZlxuK1xuICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTFx0XHQoUEFHRV9JU19XUEFMTE9XRUQgfCBQQUdFX0lTX1dSSVRURU4gfFx0XFxcbiBcdFx0XHRcdFx0IFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8XHRcXFxuIFx0XHRcdFx0XHQgUEFHRV9JU19TV0FQUEVEIHwgUEFHRV9JU19QRk5aRVJPIHxcdFxcXG5AQCAtMTEwMiw2ICsxMTA2LDU5IEBAIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKVxuIFx0bXVubWFwKG1lbSwgbWVtX3NpemUpO1xuIH1cbiBcbisvKlxuKyAqIEEgMk1CIGFub24gVEhQIGRyb3BwZWQgd2l0aCBNQURWX0RPTlRORUVEIGxlYXZlcyBhIHBtZF9ub25lIGhvbGUgd2l0aCBub1xuKyAqIHBhZ2UgdGFibGUsIHdoaWNoIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeSgpIG5ldmVyIHNlZXMuIFBBR0VNQVBfU0NBTiBtdXN0XG4rICogc3RpbGwgcmVwb3J0IGl0IGFzIHdyaXR0ZW4gb24gYSB1ZmZkLXdwIFZNQSwgdmlhIHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSgpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3RocF9ob2xlX3Rlc3Qodm9pZClcbit7XG4rXHRsb25nIG5wYWdlcywgd3JpdHRlbiA9IDAsIHJldCwgaTtcbitcdHN0cnVjdCBwYWdlX3JlZ2lvbiByZWdpb25zWzE2XTtcbitcdGNoYXIgKmFyZWEsICptZW07XG4rXG4rXHRpZiAoIWhwYWdlX3NpemUpIHtcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiJXMgVEhQIG5vdCBzdXBwb3J0ZWRcXG5cIiwgX19mdW5jX18pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRucGFnZXMgPSBocGFnZV9zaXplIC8gcGFnZV9zaXplO1xuK1xuK1x0LyogR2V0IGEgUE1ELWFsaWduZWQgcmFuZ2Ugc28gdGhlIHJhbmdlIGNhbiBiZSBhIHNpbmdsZSBUSFAuICovXG4rXHRhcmVhID0gbW1hcChOVUxMLCAyICogaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuK1x0aWYgKGFyZWEgPT0gTUFQX0ZBSUxFRClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgbW1hcCBmYWlsZWRcXG5cIiwgX19mdW5jX18pO1xuK1x0bWVtID0gKGNoYXIgKikoKCh1bnNpZ25lZCBsb25nKWFyZWEgKyBocGFnZV9zaXplIC0gMSkgXHUwMDI2IH4oaHBhZ2Vfc2l6ZSAtIDEpKTtcbitcbitcdG1lbXNldChtZW0sIDEsIGhwYWdlX3NpemUpO1xuK1x0aWYgKG1hZHZpc2UobWVtLCBocGFnZV9zaXplLCBNQURWX0NPTExBUFNFKSB8fFxuK1x0ICAgICFjaGVja19odWdlX2Fub24obWVtLCAxLCBocGFnZV9zaXplKSkge1xuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdG11bm1hcChhcmVhLCAyICogaHBhZ2Vfc2l6ZSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHdwX2luaXQobWVtLCBocGFnZV9zaXplKTtcbitcbitcdC8qIERyb3AgdGhlIHdob2xlIFBNRDogaXQgaXMgY2xlYXJlZCB0byBhIHBtZF9ub25lIGhvbGUuICovXG4rXHRpZiAobWFkdmlzZShtZW0sIGhwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyBNQURWX0RPTlRORUVEIGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4rXG4rXHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgaHBhZ2Vfc2l6ZSwgcmVnaW9ucywgMTYsIDAsIDAsXG4rXHRcdFx0ICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIHNjYW4gZmFpbGVkXFxuXCIsIF9fZnVuY19fKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJldDsgaSsrKVxuK1x0XHR3cml0dGVuICs9IExFTihyZWdpb25zW2ldKTtcbitcbitcdGtzZnRfdGVzdF9yZXN1bHQod3JpdHRlbiA9PSBucGFnZXMsXG4rXHRcdFx0IFwiJXMgcG1kLWhvbGUgcmVwb3J0ZWQgd3JpdHRlbiAoJWxkIG9mICVsZClcXG5cIixcbitcdFx0XHQgX19mdW5jX18sIHdyaXR0ZW4sIG5wYWdlcyk7XG4rXG4rXHR3cF9mcmVlKG1lbSwgaHBhZ2Vfc2l6ZSk7XG4rXHRtdW5tYXAoYXJlYSwgMiAqIGhwYWdlX3NpemUpO1xuK31cbitcbiBpbnQgc2FuaXR5X3Rlc3RzKHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCB2ZWNfc2l6ZTtcbkBAIC0xNjEwLDcgKzE2NjcsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoNCkpXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiSHVnZVRMQiB0ZXN0IHdpbGwgYmUgc2tpcHBlZFxcblwiKTtcbiBcbi1cdGtzZnRfc2V0X3BsYW4oMTE4KTtcbitcdGtzZnRfc2V0X3BsYW4oMTE5KTtcbiBcbiBcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHRocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbkBAIC0xNzkwLDYgKzE4NDcsNyBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0LyogMTguIFVucG9wdWxhdGVkIHB0ZSBzY2FuLXBhdGggY29uc2lzdGVuY3kgKi9cbiBcdHVucG9wdWxhdGVkX3NjYW5fdGVzdCgpO1xuK1x0dW5wb3B1bGF0ZWRfdGhwX2hvbGVfdGVzdCgpO1xuIFxuIFx0Y2xvc2UocGFnZW1hcF9mZCk7XG4gXHRrc2Z0X2ZpbmlzaGVkKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNjozNS43ODY5OTMxODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTYyNDgxNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IE1vZGlmaWNhdGlvbnMgdG8gYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCBzZWVtcyB0byB0b3VjaCB0d28gYXJlYXM6IGBmcy9wcm9jL3Rhc2tfbW11LmNgIGFuZCBhIHNlbGZ0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNgLiBNeSBmb2N1cyBpcyBwcmltYXJpbHkgb24gdGhlIGNvcmUgY2hhbmdlIHdpdGhpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGEgYHVzZXJmYXVsdGZkX3dwKHZtYSlgIGNoZWNrIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBhbG9uZyB3aXRoIHNldHRpbmcgYFBBR0VfSVNfV1JJVFRFTmAgaW4gYGNhdGVnb3JpZXNgIGlmIHRoYXQgY2hlY2sgcGFzc2VzLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgc28gSSdsbCBkaXZlIGludG8gdGhlIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSB0aGUgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgZnVuY3Rpb24uIEknbGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24uIEknbGwgbmVlZCB0byBrbm93IHdoYXQgY29uZmlndXJhdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoaXMgYmVoYXZpb3IsIG9yIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHdyaXRlIHByb3RlY3Rpb24uIEkgdGhpbmsgdGhlIHF1aWNrZXN0IHdheSB0byB6ZXJvIGluIG9uIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGlzIHRvIHVzZSBgZ3JlcHBlcmAsIGFzIHRoYXQgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBjb25kaXRpb25hbHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgdGhlIGNvZGUgbWlnaHQgaGF2ZSwgb3Igb3RoZXIgY29kZSB1c2luZyB0aGVzZSBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjM5Ljk0OTQ3ODg0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQ0Njk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwX3NjYW5fcHRlX2hvbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0zMDQxPXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfaG9sZV93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ3LVxcbmZzL3Byb2MvdGFza19tbXUuYzozMDQ4OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwNDktXFx0XFx0XFx0XFx0IGludCBkZXB0aCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzA5MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfc2Nhbl9vcHMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5My1cXHQucG1kX2VudHJ5ID0gcGFnZW1hcF9zY2FuX3BtZF9lbnRyeSxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5NDpcXHQucHRlX2hvbGUgPSBwYWdlbWFwX3NjYW5fcHRlX2hvbGUsXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwOTUtXFx0Lmh1Z2V0bGJfZW50cnkgPSBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NDAuMDI3OTM0NjQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MjQxNjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBmcy9wcm9jL3Rhc2tfbW11LmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGZpbGUuIFRoaXMgbWVhbnMgSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMg4oCTIHRoZSBLY29uZmlnIHN5bWJvbHMgdGhhdCwgd2hlbiBzZXQsIHdpbGwgdWx0aW1hdGVseSBjYXVzZSB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUgdG8gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIG1ldGhvZHMgZm9yIHRoaXMgc29ydCBvZiBpbnZlc3RpZ2F0aW9uLiBJJ20gcHJvYmFibHkgZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGBmaW5kYCBhbmQgdGhlbiBgZ3JlcGAgY29tYm8gdG8gbG9vayB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIG9yIG1heWJlIGRpdmUgcmlnaHQgaW50byBhIGNyb3NzLXJlZmVyZW5jZWQgYnVpbGQgc3lzdGVtIG91dHB1dC4gRGVwZW5kaW5nIG9uIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGlzIHN0cnVjdHVyZWQsIHRoZXJlIG1heSBiZSBhIHNob3J0Y3V0IHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgZGlyZWN0bHksIG9yIEkgbWlnaHQgaGF2ZSB0byBnbyB0aHJvdWdoIGEgY2FzY2FkZSBvZiBpbmNsdWRlcyBhbmQgZGVwZW5kZW5jaWVzLiBJdOKAmXMgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHByb2Nlc3MgaW5mb3JtYXRpb24sIG9yIHBvc3NpYmx5IGV2ZW4gc2VjdXJpdHkgZmVhdHVyZXMgdGhhdCB1c2UgdGhlIGAvcHJvY2AgZmlsZXN5c3RlbS4gSSdtIGV4cGVjdGluZyBpdCB0byBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhcyBpdCdzIGEgcmVsYXRpdmVseSBmb2N1c2VkIGFyZWEgb2YgdGhlIGtlcm5lbC4gSG9wZWZ1bGx5LCBpdOKAmXMgbm90IHRvbyBkZWVwbHkgYnVyaWVkIGluIGEgY29tcGxleCBkZXBlbmRlbmN5IGNoYWluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NDMuNTEwMzU0Mzk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTU5MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRhc2tfbW11Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL01ha2VmaWxlPTY9b2JqLXkgICArPSBwcm9jLm9cXG5mcy9wcm9jL01ha2VmaWxlLTctXFxuZnMvcHJvYy9NYWtlZmlsZTo4OkNGTEFHU190YXNrX21tdS5vXFx0Kz0gLVduby1vdmVycmlkZS1pbml0XFxuZnMvcHJvYy9NYWtlZmlsZS05LXByb2MteVxcdFxcdFxcdDo9IG5vbW11Lm8gdGFza19ub21tdS5vXFxuZnMvcHJvYy9NYWtlZmlsZToxMDpwcm9jLSQoQ09ORklHX01NVSlcXHQ6PSB0YXNrX21tdS5vXFxuZnMvcHJvYy9NYWtlZmlsZS0xMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NDMuNTcwNTIyOTc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMDkzMjY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIENvbmZpZ3VyYXRpb24gQ2hhbmdlKipcblxuT2theSwgc28gYENPTkZJR19NTVVgIGlzIHRoZSB0cmlnZ2VyIGhlcmUsIGFuZCB0aGF0IHB1bGxzIGluIGB0YXNrX21tdS5vYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gQnV0IHRoZSByZWFsIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9kaWZpY2F0aW9uIHRvIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgLiBBbmQgdGhhdCdzIHBhcnQgb2YgdGhlIGBwYWdlbWFwX3NjYW5fb3BzYCBzdHJ1Y3R1cmUuIEltbWVkaWF0ZWx5LCB0aGF0IHJpbmdzIGFsYXJtIGJlbGxzOiB0aGlzIGlzIGNvbm5lY3RlZCB0byB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHdvIGFyZSBpbnRlcnJlbGF0ZWQgYW5kIHdoYXQgY2hhbmdlcyB0aGV5IGFyZSBtYWtpbmcgYW5kIHdoYXQgdGhhdCBtZWFucyBmb3IgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYHVzZXJmYXVsdGZkX3dwYC4gQW5kIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlnIG9wdGlvbnMgY29udHJvbCB0aGF0IGZ1bmN0aW9uIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSBtaWdodCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYwMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjQ2LjgwMTQ1ODUzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTc0ODIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF93cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU1NT1zdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01NjItXFx0LyogT25seSBjb3B5IFBURSBtYXJrZXJzIGlmIFVGRkQgcmVnaXN0ZXIgbWF0Y2hlcy4gKi9cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjU2MzpcXHRpZiAoKHNyY20gXFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1ApIFxcdTAwMjZcXHUwMDI2IHVzZXJmYXVsdGZkX3dwKGRzdF92bWEpKVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTY0LVxcdFxcdGRzdG0gfD0gUFRFX01BUktFUl9VRkZEX1dQO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD01ODI9cHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTkzLVxcdC8qXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1OTQ6XFx0ICogTk9URTogdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoKSBkb2Vzbid0IG5lZWQgdGhpcyB3aG9sZVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTk1LVxcdCAqIHRoaW5nLCBiZWNhdXNlIHdoZW4gemFwcGluZyBlaXRoZXIgaXQgbWVhbnMgaXQncyBkcm9wcGluZyB0aGVcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTk4LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTk5OlxcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgIXVzZXJmYXVsdGZkX3dwKHZtYSkpXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC02MDAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MTk2PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9taXNzaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjAwLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIwMTpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjAyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTIxMT1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcHRlX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjEzLXtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMTQ6XFx0cmV0dXJuIHVzZXJmYXVsdGZkX3dwKHZtYSkgXFx1MDAyNlxcdTAwMjYgcHRlX3VmZmRfd3AocHRlKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMTUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjE3PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9odWdlX3BtZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIxOS17XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjIwOlxcdHJldHVybiB1c2VyZmF1bHRmZF93cCh2bWEpIFxcdTAwMjZcXHUwMDI2IHBtZF91ZmZkX3dwKHBtZCk7XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjIxLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTI1Mj1leHRlcm4gdm9pZCB1c2VyZmF1bHRmZF91bm1hcF9jb21wbGV0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNTQ6ZXh0ZXJuIGJvb2wgdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI1NTpleHRlcm4gYm9vbCB1c2VyZmF1bHRmZF93cF9hc3luYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjU2LVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI1NzpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfdXNlX21hcmtlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjU4LXtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTktXFx0LyogT25seSB3ci1wcm90ZWN0IG1vZGUgdXNlcyBwdGUgbWFya2VycyAqL1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI2MDpcXHRpZiAoIXVzZXJmYXVsdGZkX3dwKHZtYSkpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjYxLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTI3MC1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyNzE6XFx0cmV0dXJuIHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKHZtYSk7XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjcyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTMxNj1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlzc2luZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTMyMC1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDozMjE6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTMyMi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0zOTg9c3RhdGljIGlubGluZSBib29sIHVmZmRfZGlzYWJsZV9mYXVsdF9hcm91bmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDItXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6NDAzOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDQte1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtNDA3LVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjQwODpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtNDA5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTQxMz1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc191ZmZkX3dpdGhvdXRfZXZlbnRfcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MTctXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6NDE4OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNjo0Ni44OTcyMTU0MjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIwOTYyMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYSBQYWdlIFRhYmxlIFNjYW4gTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gc29tZW9uZSdzIHR3ZWFrZWQgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGdyYXNwIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgbW9kaWZpY2F0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0J3Mgbm93IGNoZWNraW5nIGB1c2VyZmF1bHRmZF93cCh2bWEpYC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwuIEl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZSBpbiBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYCBhbmQgYFBBR0VNQVBfU0NBTmAgaW9jdGwgYXJlIGNvbm5lY3RlZC4gTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhY3RpdmF0ZSB0aGlzIGBQQUdFTUFQX1NDQU5gIGZ1bmN0aW9uYWxpdHkuIElzIGl0IGEgY29yZSBmZWF0dXJlLCBhIGRlYnVnIGZsYWcsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBVbmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb24gaXMgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIHRoZSBpbXBhY3QgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb2RlIGNoYW5nZSwgZXNwZWNpYWxseSB3aXRoaW4gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIGFuZCBob3cgdGhvc2Ugc3Vic3lzdGVtcyBhcmUgY29uZmlndXJlZCB0byBvcGVyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzU5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NTAuMjE4MTgxMzU3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTM1NDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQQUdFTUFQX1NDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTMyNjg9c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3My1cXHRzd2l0Y2ggKGNtZCkge1xcbmZzL3Byb2MvdGFza19tbXUuYzozMjc0OlxcdGNhc2UgUEFHRU1BUF9TQ0FOOlxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjc1LVxcdFxcdHJldHVybiBkb19wYWdlbWFwX3NjYW4obW0sIGFyZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjUwLjI3NzU0NTU0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzM3NjQ3NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBQQUdFTUFQX1NDQU5gKipcblxuQWxyaWdodCwgc28gYFBBR0VNQVBfU0NBTmDigKYgdGhhdCdzIGFuIGBpb2N0bGAgc3BlY2lmaWNhbGx5IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3BhZ2VtYXBgIGZpbGUsIHJpZ2h0PyBJdCdzIGJlZW4gYSB3aGlsZSBzaW5jZSBJJ3ZlIGRpdmVkIGludG8gdGhpcyBhcmVhLCBidXQgdGhhdCBmZWVscyByaWdodC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hhdCdzIHRoZSBwcmVyZXF1aXNpdGUgY29uZmlndXJhdGlvbj8gSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyB0aWVkIHRvIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLiBCZXR0ZXIgZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCB2ZXJpZnkgdGhhdCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBpcyBpbmRlZWQgdGhlIGtleSBlbmFibGluZyBmYWN0b3IuIExldCdzIGRpZyBpbiBhbmQgbWFrZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NTMuMDE1MTk2ODk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQxMzI4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZW1hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNjo1My4wNzM2MjE4MzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwNjYzOTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgb2YgYSBQcm9jZXNzKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgcGFnZSBtYXBwaW5nIGZvciBhIHNwZWNpZmljIHRhc2suIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiBgZnMvcHJvYy90YXNrX21tdS5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggdGhlIHBhZ2VtYXAuIFRoaXMgZmlsZSBpcyB3aGVyZSBJJ2QgYW50aWNpcGF0ZSB0aGUgY29yZSBsb2dpYyBmb3IgdHJhbnNsYXRpbmcgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIHBhcnRpY3VsYXIgcHJvY2VzcyDigJMgaXQncyBwcmFjdGljYWxseSAqZ3VhcmFudGVlZCogdG8gaG91c2UgdGhlIGBwYWdlbWFwYCBpbXBsZW1lbnRhdGlvbnMuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDM0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDY6NTUuNzgwMjY2NTc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQwODI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXFx1MDAzZVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTE5MzU9dHlwZWRlZiBzdHJ1Y3Qge1xcbmZzL3Byb2MvdGFza19tbXUuYy0xOTM2LVxcdHU2NCBwbWU7XFxuZnMvcHJvYy90YXNrX21tdS5jOjE5Mzc6fSBwYWdlbWFwX2VudHJ5X3Q7XFxuZnMvcHJvYy90YXNrX21tdS5jLTE5MzgtXFxuZnMvcHJvYy90YXNrX21tdS5jOjE5Mzk6c3RydWN0IHBhZ2VtYXByZWFkIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk0MC1cXHRpbnQgcG9zLCBsZW47XFx0XFx0LyogdW5pdHM6IFBNX0VOVFJZX0JZVEVTLCBub3QgYnl0ZXMgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTk0MTpcXHRwYWdlbWFwX2VudHJ5X3QgKmJ1ZmZlcjtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk0Mi1cXHRib29sIHNob3dfcGZuO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTE5NDctXFxuZnMvcHJvYy90YXNrX21tdS5jOjE5NDg6I2RlZmluZSBQTV9FTlRSWV9CWVRFU1xcdFxcdHNpemVvZihwYWdlbWFwX2VudHJ5X3QpXFxuZnMvcHJvYy90YXNrX21tdS5jLTE5NDktI2RlZmluZSBQTV9QRlJBTUVfQklUU1xcdFxcdDU1XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk2MC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTk2MTpzdGF0aWMgaW5saW5lIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncylcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk2Mi17XFxuZnMvcHJvYy90YXNrX21tdS5jOjE5NjM6XFx0cmV0dXJuIChwYWdlbWFwX2VudHJ5X3QpIHsgLnBtZSA9IChmcmFtZSBcXHUwMDI2IFBNX1BGUkFNRV9NQVNLKSB8IGZsYWdzIH07XFxuZnMvcHJvYy90YXNrX21tdS5jLTE5NjQtfVxcbmZzL3Byb2MvdGFza19tbXUuYy0xOTY1LVxcbmZzL3Byb2MvdGFza19tbXUuYzoxOTY2OnN0YXRpYyBpbnQgYWRkX3RvX3BhZ2VtYXAocGFnZW1hcF9lbnRyeV90ICpwbWUsIHN0cnVjdCBwYWdlbWFwcmVhZCAqcG0pXFxuZnMvcHJvYy90YXNrX21tdS5jLTE5Njcte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTE5NzQ9c3RhdGljIGJvb2wgX19mb2xpb19wYWdlX21hcHBlZF9leGNsdXNpdmVseShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xOTgwLVxcbmZzL3Byb2MvdGFza19tbXUuYzoxOTgxOnN0YXRpYyBpbnQgcGFnZW1hcF9wdGVfaG9sZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk4Mi1cXHRcXHRcXHQgICAgX19hbHdheXNfdW51c2VkIGludCBkZXB0aCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuZnMvcHJvYy90YXNrX21tdS5jLTE5ODMte1xcbmZzL3Byb2MvdGFza19tbXUuYzoxOTg0OlxcdHN0cnVjdCBwYWdlbWFwcmVhZCAqcG0gPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbmZzL3Byb2MvdGFza19tbXUuYy0xOTg1LVxcdHVuc2lnbmVkIGxvbmcgYWRkciA9IHN0YXJ0O1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTE5ODktXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBmaW5kX3ZtYSh3YWxrLVxcdTAwM2VtbSwgYWRkcik7XFxuZnMvcHJvYy90YXNrX21tdS5jOjE5OTA6XFx0XFx0cGFnZW1hcF9lbnRyeV90IHBtZSA9IG1ha2VfcG1lKDAsIDApO1xcbmZzL3Byb2MvdGFza19tbXUuYy0xOTkxLVxcdFxcdC8qIEVuZCBvZiBhZGRyZXNzIHNwYWNlIGhvbGUsIHdoaWNoIHdlIG1hcmsgYXMgbm9uLXByZXNlbnQuICovXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTk5OS1cXHRcXHRmb3IgKDsgYWRkciBcXHUwMDNjIGhvbGVfZW5kOyBhZGRyICs9IFBBR0VfU0laRSkge1xcbmZzL3Byb2MvdGFza19tbXUuYzoyMDAwOlxcdFxcdFxcdGVyciA9IGFkZF90b19wYWdlbWFwKFxcdTAwMjZwbWUsIHBtKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjAwMS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwMTEtXFx0XFx0Zm9yICg7IGFkZHIgXFx1MDAzYyBtaW4oZW5kLCB2bWEtXFx1MDAzZXZtX2VuZCk7IGFkZHIgKz0gUEFHRV9TSVpFKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIwMTI6XFx0XFx0XFx0ZXJyID0gYWRkX3RvX3BhZ2VtYXAoXFx1MDAyNnBtZSwgcG0pO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMDEzLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjAyMC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjAyMTpzdGF0aWMgcGFnZW1hcF9lbnRyeV90IHB0ZV90b19wYWdlbWFwX2VudHJ5KHN0cnVjdCBwYWdlbWFwcmVhZCAqcG0sXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwMjItXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwODctI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmZzL3Byb2MvdGFza19tbXUuYzoyMDg4OnN0YXRpYyBpbnQgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwODktXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmZzL3Byb2MvdGFza19tbXUuYzoyMDkwOlxcdFxcdHN0cnVjdCBwYWdlbWFwcmVhZCAqcG0pXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwOTEte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIxMDItXFx0aWYgKHBtZF9ub25lKHBtZCkpXFxuZnMvcHJvYy90YXNrX21tdS5jOjIxMDM6XFx0XFx0Z290byBwb3B1bGF0ZV9wYWdlbWFwO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMTA0LVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIxNDEtXFxuZnMvcHJvYy90YXNrX21tdS5jOjIxNDI6cG9wdWxhdGVfcGFnZW1hcDpcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE0My1cXHRmb3IgKDsgYWRkciAhPSBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFLCBpZHgrKykge1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMTQ0LVxcdFxcdHU2NCBjdXJfZmxhZ3MgPSBmbGFncztcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE0NTpcXHRcXHRwYWdlbWFwX2VudHJ5X3QgcG1lO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMTQ2LVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIxNTEtXFx0XFx0cG1lID0gbWFrZV9wbWUoZnJhbWUsIGN1cl9mbGFncyk7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIxNTI6XFx0XFx0ZXJyID0gYWRkX3RvX3BhZ2VtYXAoXFx1MDAyNnBtZSwgcG0pO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMTUzLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE2NS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE2NjpzdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yMTY3LVxcdFxcdFxcdCAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE2OS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE3MDpcXHRzdHJ1Y3QgcGFnZW1hcHJlYWQgKnBtID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE3MS1cXHRzcGlubG9ja190ICpwdGw7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE3Ny1cXHRpZiAocHRsKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIxNzg6XFx0XFx0ZXJyID0gcGFnZW1hcF9wbWRfcmFuZ2VfdGhwKHBtZHAsIGFkZHIsIGVuZCwgdm1hLCBwbSk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIxNzktXFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMTkzLVxcdGZvciAoOyBhZGRyIFxcdTAwM2MgZW5kOyBwdGUrKywgYWRkciArPSBQQUdFX1NJWkUpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE5NDpcXHRcXHRwYWdlbWFwX2VudHJ5X3QgcG1lO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMTk1LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyMTk2OlxcdFxcdHBtZSA9IHB0ZV90b19wYWdlbWFwX2VudHJ5KHBtLCB2bWEsIGFkZHIsIHB0ZXBfZ2V0KHB0ZSkpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyMTk3OlxcdFxcdGVyciA9IGFkZF90b19wYWdlbWFwKFxcdTAwMjZwbWUsIHBtKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE5OC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIyMDktLyogVGhpcyBmdW5jdGlvbiB3YWxrcyB3aXRoaW4gb25lIGh1Z2V0bGIgZW50cnkgaW4gdGhlIHNpbmdsZSBjYWxsICovXFxuZnMvcHJvYy90YXNrX21tdS5jOjIyMTA6c3RhdGljIGludCBwYWdlbWFwX2h1Z2V0bGJfcmFuZ2UocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuZnMvcHJvYy90YXNrX21tdS5jLTIyMTEtXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjIxMy17XFxuZnMvcHJvYy90YXNrX21tdS5jOjIyMTQ6XFx0c3RydWN0IHBhZ2VtYXByZWFkICpwbSA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIyMTUtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVxcdTAwM2V2bWE7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI0Ny1cXHRmb3IgKDsgYWRkciAhPSBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIyNDg6XFx0XFx0cGFnZW1hcF9lbnRyeV90IHBtZSA9IG1ha2VfcG1lKGZyYW1lLCBmbGFncyk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIyNDktXFxuZnMvcHJvYy90YXNrX21tdS5jOjIyNTA6XFx0XFx0ZXJyID0gYWRkX3RvX3BhZ2VtYXAoXFx1MDAyNnBtZSwgcG0pO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yMjUxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI2Mi0jZWxzZVxcbmZzL3Byb2MvdGFza19tbXUuYzoyMjYzOiNkZWZpbmUgcGFnZW1hcF9odWdldGxiX3JhbmdlXFx0TlVMTFxcbmZzL3Byb2MvdGFza19tbXUuYy0yMjY0LSNlbmRpZiAvKiBIVUdFVExCX1BBR0UgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI2NS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjI2NjpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfb3BzID0ge1xcbmZzL3Byb2MvdGFza19tbXUuYzoyMjY3OlxcdC5wbWRfZW50cnlcXHQ9IHBhZ2VtYXBfcG1kX3JhbmdlLFxcbmZzL3Byb2MvdGFza19tbXUuYzoyMjY4OlxcdC5wdGVfaG9sZVxcdD0gcGFnZW1hcF9wdGVfaG9sZSxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjI2OTpcXHQuaHVnZXRsYl9lbnRyeVxcdD0gcGFnZW1hcF9odWdldGxiX3JhbmdlLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yMjcwLVxcdC53YWxrX2xvY2tcXHQ9IFBHV0FMS19SRExPQ0ssXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI3My0vKlxcbmZzL3Byb2MvdGFza19tbXUuYzoyMjc0OiAqIC9wcm9jL3BpZC9wYWdlbWFwIC0gYW4gYXJyYXkgbWFwcGluZyB2aXJ0dWFsIHBhZ2VzIHRvIHBmbnNcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjI3NS0gKlxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIzMDAtICovXFxuZnMvcHJvYy90YXNrX21tdS5jOjIzMDE6c3RhdGljIHNzaXplX3QgcGFnZW1hcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yMzAyLVxcdFxcdFxcdCAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMzA0LVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyMzA1OlxcdHN0cnVjdCBwYWdlbWFwcmVhZCBwbTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjMwNi1cXHR1bnNpZ25lZCBsb25nIHNyYztcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMzY5LVxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIzNzA6XFx0XFx0cmV0ID0gd2Fsa19wYWdlX3JhbmdlKG1tLCBzdGFydF92YWRkciwgZW5kLCBcXHUwMDI2cGFnZW1hcF9vcHMsIFxcdTAwMjZwbSk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIzNzEtXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjM5NC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjM5NTpzdGF0aWMgaW50IHBhZ2VtYXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjM5Ni17XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQwNS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQwNjpzdGF0aWMgaW50IHBhZ2VtYXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQwNy17XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQyMS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQyMjpzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUge1xcbmZzL3Byb2MvdGFza19tbXUuYy0yNDIzLVxcdHN0cnVjdCBwbV9zY2FuX2FyZyBhcmc7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQyOS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQzMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yNDMxLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI0NDEtXFx0XFx0ICogdG9vIHNvIHRoaXMgZ2VuZXJpYyBwYXRoIGFncmVlcyB3aXRoIHRoZSBQQUdFX0lTX1dSSVRURU4gZmFzdFxcbmZzL3Byb2MvdGFza19tbXUuYzoyNDQyOlxcdFxcdCAqIHBhdGggaW4gcGFnZW1hcF9zY2FuX3BtZF9lbnRyeSgpLCB3aGljaCByZXBvcnRzIHB0ZV9ub25lIGFzXFxuZnMvcHJvYy90YXNrX21tdS5jLTI0NDMtXFx0XFx0ICogd3JpdHRlbiBhbmQsIHVuZGVyIFBNX1NDQU5fV1BfTUFUQ0hJTkcsIGFybXMgYSBtYXJrZXIuIFRoZVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTI0OTA9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNTA4LSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjUwOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3RocF9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI1MTAtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0yNTU0PXN0YXRpYyB2b2lkIG1ha2VfdWZmZF93cF9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjU3MC0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmZzL3Byb2MvdGFza19tbXUuYzoyNTcxOnN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfaHVnZXRsYl9jYXRlZ29yeShwdGVfdCBwdGUpXFxuZnMvcHJvYy90YXNrX21tdS5jLTI1NzIte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI1NzgtXFx0LypcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjU3OTpcXHQgKiBBY2NvcmRpbmcgdG8gcGFnZW1hcF9odWdldGxiX3JhbmdlKCksIGZpbGUtYmFja2VkIEh1Z2VUTEJcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjU4MC1cXHQgKiBwYWdlIGNhbm5vdCBiZSBzd2FwcGVkLiBTbyBQQUdFX0lTX0ZJTEUgaXMgbm90IGNoZWNrZWQgZm9yXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjYwNj1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfaHVnZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjYzNi0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSlcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjYzNzpzdGF0aWMgdm9pZCBwYWdlbWFwX3NjYW5fYmFja291dF9yYW5nZShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI2MzgtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY1My1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY1NDpzdGF0aWMgYm9vbCBwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZSh1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMsXFxuZnMvcHJvYy90YXNrX21tdS5jOjI2NTU6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnApXFxuZnMvcHJvYy90YXNrX21tdS5jLTI2NTYte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI2NjUtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI2NjY6c3RhdGljIGJvb2wgcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3ZtYSh1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMsXFxuZnMvcHJvYy90YXNrX21tdS5jOjI2Njc6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcClcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY2OC17XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY3Ny1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY3ODpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl90ZXN0X3dhbGsodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI2NzktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY4MC17XFxuZnMvcHJvYy90YXNrX21tdS5jOjI2ODE6XFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY4Mi1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNzExLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyNzEyOlxcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3ZtYSh2bWFfY2F0ZWdvcnksIHApKVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNzEzLVxcdFxcdHJldHVybiAxO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3MTktXFxuZnMvcHJvYy90YXNrX21tdS5jOjI3MjA6c3RhdGljIGJvb2wgcGFnZW1hcF9zY2FuX3B1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzLFxcbmZzL3Byb2MvdGFza19tbXUuYzoyNzIxOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3MjItXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc0OS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjc1MDpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9vdXRwdXQodW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzLFxcbmZzL3Byb2MvdGFza19tbXUuYzoyNzUxOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3NTItXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3NzAtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI3NzE6XFx0aWYgKCFwYWdlbWFwX3NjYW5fcHVzaF9yYW5nZShjYXRlZ29yaWVzLCBwLCBhZGRyLCAqZW5kKSkge1xcbmZzL3Byb2MvdGFza19tbXUuYy0yNzcyLVxcdFxcdCplbmQgPSBhZGRyO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3ODMtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI3ODQ6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fdGhwX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI3ODUtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc4Ny0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuZnMvcHJvYy90YXNrX21tdS5jOjI3ODg6XFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc4OS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNzk4LVxcdGNhdGVnb3JpZXMgPSBwLVxcdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjc5OTpcXHRcXHQgICAgIHBhZ2VtYXBfdGhwX2NhdGVnb3J5KHAsIHZtYSwgc3RhcnQsICpwbWQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODAwLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyODAxOlxcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTI4MDItXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODAzLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyODA0OlxcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgc3RhcnQsIFxcdTAwMjZlbmQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODA1LVxcdGlmIChzdGFydCA9PSBlbmQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgxOS1cXHRcXHRzcGxpdF9odWdlX3BtZCh2bWEsIHBtZCwgc3RhcnQpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyODIwOlxcdFxcdHBhZ2VtYXBfc2Nhbl9iYWNrb3V0X3JhbmdlKHAsIHN0YXJ0LCBlbmQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODIxLVxcdFxcdC8qIFJlcG9ydCBhcyBpZiB0aGVyZSB3YXMgbm8gVEhQICovXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzNC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjgzNTpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzNi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzNy17XFxuZnMvcHJvYy90YXNrX21tdS5jOjI4Mzg6XFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzOS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yODQ0LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyODQ1OlxcdHJldCA9IHBhZ2VtYXBfc2Nhbl90aHBfZW50cnkocG1kLCBzdGFydCwgZW5kLCB3YWxrKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg0Ni1cXHRpZiAocmV0ICE9IC1FTk9FTlQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg4My1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjg4NDpcXHRcXHRcXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtXFx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfCBQQUdFX0lTX1dSSVRURU4sXFxuZnMvcHJvYy90YXNrX21tdS5jLTI4ODUtXFx0XFx0XFx0XFx0XFx0XFx0ICBwLCBhZGRyLCBcXHUwMDI2bmV4dCk7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMC1cXHRcXHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBwLVxcdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjkwMTpcXHRcXHRcXHRcXHRcXHQgICBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkocCwgdm1hLCBhZGRyLCBwdGVudCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI5MDItXFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0ID0gYWRkciArIFBBR0VfU0laRTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMy1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjkwNDpcXHRcXHRpZiAoIXBhZ2VtYXBfc2Nhbl9pc19pbnRlcmVzdGluZ19wYWdlKGNhdGVnb3JpZXMsIHApKVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTA1LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTA2LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTA3OlxcdFxcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgYWRkciwgXFx1MDAyNm5leHQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTA4LVxcdFxcdGlmIChuZXh0ID09IGFkZHIpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkzMy0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTM0OnN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuZnMvcHJvYy90YXNrX21tdS5jLTI5MzUtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkzNy17XFxuZnMvcHJvYy90YXNrX21tdS5jOjI5Mzg6XFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkzOS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTQ4LVxcdFxcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIHN0YXJ0LCBwdGVwKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjk0OTpcXHRcXHRjYXRlZ29yaWVzID0gcC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8IHBhZ2VtYXBfaHVnZXRsYl9jYXRlZ29yeShwdGUpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTUwLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTUxOlxcdFxcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTI5NTItXFx0XFx0XFx0cmV0dXJuIDA7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI5NTMtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI5NTQ6XFx0XFx0cmV0dXJuIHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgc3RhcnQsIFxcdTAwMjZlbmQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTU1LVxcdH1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTYwLVxcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIHN0YXJ0LCBwdGVwKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjk2MTpcXHRjYXRlZ29yaWVzID0gcC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8IHBhZ2VtYXBfaHVnZXRsYl9jYXRlZ29yeShwdGUpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTYyLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTYzOlxcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTI5NjQtXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTY1LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTY2OlxcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgc3RhcnQsIFxcdTAwMjZlbmQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTY3LVxcdGlmIChzdGFydCA9PSBlbmQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk3NC1cXHRcXHQvKiBQYXJ0aWFsIEh1Z2VUTEIgcGFnZSBXUCBpc24ndCBwb3NzaWJsZS4gKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjk3NTpcXHRcXHRwYWdlbWFwX3NjYW5fYmFja291dF9yYW5nZShwLCBzdGFydCwgZW5kKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk3Ni1cXHRcXHRwLVxcdTAwM2Vhcmcud2Fsa19lbmQgPSBzdGFydDtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTkyLSAqIFdyaXRlLXByb3RlY3QgdGhlIHVucG9wdWxhdGVkIGh1Z2V0bGIgZW50cmllcyBjb3ZlcmluZyBbYWRkciwgZW5kKSBieVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTkzOiAqIGluc3RhbGxpbmcgdWZmZC13cCBtYXJrZXJzIGlubGluZSwgZXhhY3RseSBhcyBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSgpXFxuZnMvcHJvYy90YXNrX21tdS5jLTI5OTQtICogZG9lcyBmb3IgcG9wdWxhdGVkIGVudHJpZXMuXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzAwNi0gKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzAwNzpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwMDgtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDM5LSNlbHNlXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwNDA6I2RlZmluZSBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSBOVUxMXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwNDE6c3RhdGljIGludCBwYWdlbWFwX3NjYW5faHVnZXRsYl9ob2xlX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQyLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA0Ny1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA0ODpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ5LVxcdFxcdFxcdFxcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDUwLXtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA1MTpcXHRzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbmZzL3Byb2MvdGFza19tbXUuYy0zMDUyLVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cXHUwMDNldm1hO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwNjAtXFx0ICogQW4gdW5wb3B1bGF0ZWQgcmFuZ2Ugd2l0aCBubyBwYWdlIHRhYmxlIC0tIGUuZy4gYSAyTUIgYW5vbiBUSFBcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA2MTpcXHQgKiBkcm9wcGVkIHZpYSBNQURWX0RPTlRORUVELCB3aGljaCBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoKSBuZXZlciBzZWVzXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwNjItXFx0ICogLS0gcmVhZHMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBtYXRjaGluZyB0aGUgcHRlX25vbmUgY2FzZVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwNzAtXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwNzE6XFx0aWYgKCFwYWdlbWFwX3NjYW5faXNfaW50ZXJlc3RpbmdfcGFnZShjYXRlZ29yaWVzLCBwKSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA3Mi1cXHRcXHRyZXR1cm4gMDtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA3My1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA3NDpcXHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KGNhdGVnb3JpZXMsIHAsIGFkZHIsIFxcdTAwMjZlbmQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0zMDc1LVxcdGlmIChhZGRyID09IGVuZClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDgxLVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA4MjpcXHRcXHRlcnIgPSBwYWdlbWFwX3NjYW5faHVnZXRsYl9ob2xlX3dwKHZtYSwgYWRkciwgZW5kKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA4My1cXHRlbHNlXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5MC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5MTpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfc2Nhbl9vcHMgPSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTI6XFx0LnRlc3Rfd2FsayA9IHBhZ2VtYXBfc2Nhbl90ZXN0X3dhbGssXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTM6XFx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTQ6XFx0LnB0ZV9ob2xlID0gcGFnZW1hcF9zY2FuX3B0ZV9ob2xlLFxcbmZzL3Byb2MvdGFza19tbXUuYzozMDk1OlxcdC5odWdldGxiX2VudHJ5ID0gcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnksXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwOTYtfTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5Ny1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA5ODpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9nZXRfYXJncyhzdHJ1Y3QgcG1fc2Nhbl9hcmcgKmFyZyxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA5OS1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyB1YXJnKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMxMzktXFxuZnMvcHJvYy90YXNrX21tdS5jOjMxNDA6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fd3JpdGViYWNrX2FyZ3Moc3RydWN0IHBtX3NjYW5fYXJnICphcmcsXFxuZnMvcHJvYy90YXNrX21tdS5jLTMxNDEtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgdWFyZ2wpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE1MC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE1MTpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9pbml0X2JvdW5jZV9idWZmZXIoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTUyLXtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTY3LVxcbmZzL3Byb2MvdGFza19tbXUuYzozMTY4OnN0YXRpYyBsb25nIHBhZ2VtYXBfc2Nhbl9mbHVzaF9idWZmZXIoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTY5LXtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTk0LVxcbmZzL3Byb2MvdGFza19tbXUuYzozMTk1OnN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfc2NhbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB1YXJnKVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMTk2LXtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE5NzpcXHRzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgcCA9IHswfTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE5OC1cXHR1bnNpZ25lZCBsb25nIHdhbGtfc3RhcnQ7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzIwMS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzIwMjpcXHRyZXQgPSBwYWdlbWFwX3NjYW5fZ2V0X2FyZ3MoXFx1MDAyNnAuYXJnLCB1YXJnKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzIwMy1cXHRpZiAocmV0KVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyMDctXFx0XFx0XFx0ICAgICAgcC5hcmcucmV0dXJuX21hc2s7XFxuZnMvcHJvYy90YXNrX21tdS5jOjMyMDg6XFx0cmV0ID0gcGFnZW1hcF9zY2FuX2luaXRfYm91bmNlX2J1ZmZlcihcXHUwMDI2cCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTMyMDktXFx0aWYgKHJldClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjMzLVxcdFxcdHJldCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgd2Fsa19zdGFydCwgcC5hcmcuZW5kLFxcbmZzL3Byb2MvdGFza19tbXUuYzozMjM0OlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwYWdlbWFwX3NjYW5fb3BzLCBcXHUwMDI2cCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTMyMzUtXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI0MC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI0MTpcXHRcXHRuX291dCA9IHBhZ2VtYXBfc2Nhbl9mbHVzaF9idWZmZXIoXFx1MDAyNnApO1xcbmZzL3Byb2MvdGFza19tbXUuYy0zMjQyLVxcdFxcdGlmIChuX291dCBcXHUwMDNjIDApXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI2MC1cXHRcXHRwLmFyZy53YWxrX2VuZCA9IHAuYXJnLmVuZDtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI2MTpcXHRpZiAocGFnZW1hcF9zY2FuX3dyaXRlYmFja19hcmdzKFxcdTAwMjZwLmFyZywgdWFyZykpXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyNjItXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjY3LVxcbmZzL3Byb2MvdGFza19tbXUuYzozMjY4OnN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjY5LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyNzQtXFx0Y2FzZSBQQUdFTUFQX1NDQU46XFxuZnMvcHJvYy90YXNrX21tdS5jOjMyNzU6XFx0XFx0cmV0dXJuIGRvX3BhZ2VtYXBfc2NhbihtbSwgYXJnKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3Ni1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjgxLVxcbmZzL3Byb2MvdGFza19tbXUuYzozMjgyOmNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XFxuZnMvcHJvYy90YXNrX21tdS5jLTMyODMtXFx0Lmxsc2Vla1xcdFxcdD0gbWVtX2xzZWVrLCAvKiBib3Jyb3cgdGhpcyAqL1xcbmZzL3Byb2MvdGFza19tbXUuYzozMjg0OlxcdC5yZWFkXFx0XFx0PSBwYWdlbWFwX3JlYWQsXFxuZnMvcHJvYy90YXNrX21tdS5jOjMyODU6XFx0Lm9wZW5cXHRcXHQ9IHBhZ2VtYXBfb3BlbixcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI4NjpcXHQucmVsZWFzZVxcdD0gcGFnZW1hcF9yZWxlYXNlLFxcbmZzL3Byb2MvdGFza19tbXUuYzozMjg3OlxcdC51bmxvY2tlZF9pb2N0bCA9IGRvX3BhZ2VtYXBfY21kLFxcbmZzL3Byb2MvdGFza19tbXUuYzozMjg4OlxcdC5jb21wYXRfaW9jdGxcXHQ9IGRvX3BhZ2VtYXBfY21kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjg5LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjU1LjgzOTY4NTc3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY5MDgyMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gYHByb2NfcGFnZW1hcF9vcGVyYXRpb25zYCBhbmQgYFBBR0VNQVBfU0NBTmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwgaXMgaGFuZ2luZyBvdXQgdGhlcmUgaW4gYHByb2NfcGFnZW1hcF9vcGVyYXRpb25zYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2hlcmUgKmVsc2UqIGRvZXMgdGhpcyBgcHJvY19wYWdlbWFwX29wZXJhdGlvbnNgIHN0cnVjdCBzaG93IHVwPyBXaGF0IGNvbnRleHRzIGFyZSB1c2luZyB0aGlzIGZ1bmN0aW9uYWxpdHk/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuIEtub3dpbmcgKndoZXJlKiBpdCdzIGVtcGxveWVkIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgdXNhZ2UgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNjo1OC45MDg3NzEzNDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Nzk1MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfcGFnZW1hcF9vcGVyYXRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTMyODI9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGdpZF9iYXNlX3N0dWZmW10gPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zMzI0LVxcdFJFRyhcXFwic21hcHNfcm9sbHVwXFxcIiwgU19JUlVHTywgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jOjMzMjU6XFx0UkVHKFxcXCJwYWdlbWFwXFxcIiwgICAgU19JUlVTUiwgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTMzMjYtI2VuZGlmXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0zNjQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRpZF9iYXNlX3N0dWZmW10gPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zNjc5LVxcdFJFRyhcXFwic21hcHNfcm9sbHVwXFxcIiwgU19JUlVHTywgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jOjM2ODA6XFx0UkVHKFxcXCJwYWdlbWFwXFxcIiwgICAgU19JUlVTUiwgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTM2ODEtI2VuZGlmXFxuLS1cXG5mcy9wcm9jL2ludGVybmFsLmg9NDExPWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2xlYXJfcmVmc19vcGVyYXRpb25zO1xcbmZzL3Byb2MvaW50ZXJuYWwuaDo0MTI6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnM7XFxuZnMvcHJvYy9pbnRlcm5hbC5oLTQxMy1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zMjY4PXN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyODEtXFxuZnMvcHJvYy90YXNrX21tdS5jOjMyODI6Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyA9IHtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI4My1cXHQubGxzZWVrXFx0XFx0PSBtZW1fbHNlZWssIC8qIGJvcnJvdyB0aGlzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA2OjU4Ljk2NjU3NDY3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY2NTgyNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRXhhbWluaW5nIHRoZSBgI2VuZGlmYCBpbiBgZnMvcHJvYy9iYXNlLmNgIGFyb3VuZCBgcGFnZW1hcGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYGZzL3Byb2MvYmFzZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IGAjZW5kaWZgIGlzIGRvaW5nLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBgcGFnZW1hcGAgZnVuY3Rpb25hbGl0eS4gSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGl0LCBhbmQgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBvciBtYXliZSBpbnZlc3RpZ2F0ZSBhIHN1YnRsZSBpbnRlcmFjdGlvbi4gV2hhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBpcyB0aGlzIGNvZGUgcG90ZW50aWFsbHkgZGVwZW5kZW50IG9uPyBXaGF0IGZlYXR1cmVzIG1pZ2h0IGJlIGdldHRpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGlzPyBNeSBnb2FsIGlzIHJlYWxseSB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB3aGF0IHRoYXQgYCNlbmRpZmAgaXMgY29udHJvbGxpbmcuIElzIGl0IGEgZnVsbCBmZWF0dXJlLCBvciBhIHNtYWxsIHN1YnNldD8gSXMgdGhpcyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrIGJhc2VkIG9uIHNvbWUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBMZXQgbWUgdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZSB0aGF0IHRyaWdnZXJzIHRoYXQgY2xvc2luZyBgI2VuZGlmYCwgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYXNzb2NpYXRlZCBgI2lmZGVmYCBvciBgI2lmYCBzdGF0ZW1lbnQgaXMgY2hlY2tpbmcuIEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgb3Igc3lzdGVtIHN0YXRlIG5lZWRzIHRvIGJlLCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhhdCBwb3J0aW9uIG9mIGNvZGUgZnJvbSB0aGUgZmluYWwgY29tcGlsZWQgYmluYXJ5LiBBbmQgdGhhdCdzIGNyaXRpY2FsIGluZm9ybWF0aW9uLCBiZWNhdXNlIEkgYWx3YXlzIG5lZWQgdG8ga25vdyB3aGF0IGZlYXR1cmVzIG15IHN5c3RlbSBpcyBidWlsZGluZyB3aXRoLCBhbmQgaG93IHRoZXkgYmVoYXZlIGluIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNzowMi42MzMxNjExOTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjQ2NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9iYXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9iYXNlLmM9MzI4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTMzMjAtXFx0UkVHKFxcXCJtb3VudHN0YXRzXFxcIiwgU19JUlVTUiwgcHJvY19tb3VudHN0YXRzX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jOjMzMjE6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxcbmZzL3Byb2MvYmFzZS5jLTMzMjItXFx0UkVHKFxcXCJjbGVhcl9yZWZzXFxcIiwgU19JV1VTUiwgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnMpLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzY0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzY3NS1cXHRSRUcoXFxcIm1vdW50aW5mb1xcXCIsICBTX0lSVUdPLCBwcm9jX21vdW50aW5mb19vcGVyYXRpb25zKSxcXG5mcy9wcm9jL2Jhc2UuYzozNjc2OiNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcXG5mcy9wcm9jL2Jhc2UuYy0zNjc3LVxcdFJFRyhcXFwiY2xlYXJfcmVmc1xcXCIsIFNfSVdVU1IsIHByb2NfY2xlYXJfcmVmc19vcGVyYXRpb25zKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MDIuNjk0ODE4ODEyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjQyNzY2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBjb25jZXJuIGlzIHByZXR0eSBjbGVhcjogYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAuIEdvdCBpdC4gTm93LCBob2xkIG9uLCBJJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgaGVyZS4uLiBJJ20gc2VlaW5nIGB1c2VyZmF1bHRmZF93cGAgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgLiBUaGlzIHRyaWdnZXJzIGEgcXVlc3Rpb246IGRvZXMgdGhpcyBpbXBseSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19VU0VSRkFVTFRGRGA/IE15IGd1dCBzYXlzIGl0IHByb2JhYmx5IGRvZXMsIGJ1dCBsZXQncyBub3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMuIEJlc3QgdG8gdmVyaWZ5IGl0IGNvbmNyZXRlbHkuXG5cblNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaGAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIGZvciBgdXNlcmZhdWx0ZmRfd3BgLiBJJ2xsIHNjYW4gdGhhdCBoZWFkZXIgYW5kIGdldCBhIG11Y2ggY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MDYuMDE5MDk4NTQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODcyNzk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF93cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0xOTY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pc3Npbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMDAtXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjAxOnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMDIte1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjExPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9wdGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMTMte1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIxNDpcXHRyZXR1cm4gdXNlcmZhdWx0ZmRfd3Aodm1hKSBcXHUwMDI2XFx1MDAyNiBwdGVfdWZmZF93cChwdGUpO1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTIxNS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMTc9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX2h1Z2VfcG1kX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE5LXtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMjA6XFx0cmV0dXJuIHVzZXJmYXVsdGZkX3dwKHZtYSkgXFx1MDAyNlxcdTAwMjYgcG1kX3VmZmRfd3AocG1kKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMjEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjUyPWV4dGVybiB2b2lkIHVzZXJmYXVsdGZkX3VubWFwX2NvbXBsZXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTI1My1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdWYpO1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI1NDpleHRlcm4gYm9vbCB1c2VyZmF1bHRmZF93cF91bnBvcHVsYXRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjU1OmV4dGVybiBib29sIHVzZXJmYXVsdGZkX3dwX2FzeW5jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTYtXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjU3OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF91c2VfbWFya2VycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNTgte1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTI1OS1cXHQvKiBPbmx5IHdyLXByb3RlY3QgbW9kZSB1c2VzIHB0ZSBtYXJrZXJzICovXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MjYwOlxcdGlmICghdXNlcmZhdWx0ZmRfd3Aodm1hKSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNjEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjcwLVxcdCAqL1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjI3MTpcXHRyZXR1cm4gdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQodm1hKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yNzItfVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MzE2PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9taXNzaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzIwLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjMyMTpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMzIyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTM5OD1zdGF0aWMgaW5saW5lIGJvb2wgdWZmZF9kaXNhYmxlX2ZhdWx0X2Fyb3VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwMi1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDo0MDM6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQwNC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDctXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6NDA4OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cF9hc3luYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC00MDkte1xcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9NDEzPXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3VmZmRfd2l0aG91dF9ldmVudF9yZW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQxNy1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDo0MTg6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwX3VzZV9tYXJrZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTQxOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA3OjA2LjA3NzgzMjYyN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMwNjE4NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHNwZWNpZmljIGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byB0aGUgVXNlcmZhdWx0ZmQgV3JpdGUgUHJvdGVjdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmhgLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoYXQgYCNpZmRlZmAgYmxvY2sgc3Vycm91bmRpbmcgYHVzZXJmYXVsdGZkX3dwYC4gSXQncyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCBob3cgd3JpdGUgcHJvdGVjdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgYHVzZXJmYXVsdGZkYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoaXMgcHJvYmFibHkgY29udHJvbHMgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9mIHNvbWUgZmVhdHVyZSBvciBzb21lIGNvZGUgcGF0aCBiYXNlZCBvbiBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gd2hldGhlciB3cml0ZSBwcm90ZWN0aW9uIHZpYSB1c2VyZmF1bHRmZCBpcyBlbmFibGVkIGF0IGFsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IGNvbmZpZ3VyYXRpb24gZmxhZyBpcyBhbmQgd2hhdCBjb25zZXF1ZW5jZXMgaXQgaGFzIGlmIHRoZSBgI2lmZGVmYCBldmFsdWF0ZXMgdG8gdHJ1ZSB2ZXJzdXMgZmFsc2UuIFRoaXMgbWVhbnMgSSdsbCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgcHJlcHJvY2Vzc29yIHN5bWJvbCBhbmQgc2VlIHdoZXJlIGl0J3MgdXNlZC4gVGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBsaWtlbHkgdGhlcmUgZm9yIGEgcmVhc29uLCBsaWtlbHkgZHVlIHRvIGFuIG9wdGlvbmFsIGZlYXR1cmUgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgY29tcGxleGl0eSBvciBwb3NzaWJsZSBwZXJmb3JtYW5jZSBpbXBhY3RzIGFuZCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgaW1wYWN0IHRoaXMgY29uZmlndXJhdGlvbiBoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njg1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MDkuNzA4NDU0ODMyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgzNTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTExLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjEyOiNpZmRlZiBDT05GSUdfVVNFUkZBVUxURkRcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0xMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MDkuNzY4Mjk3NzkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NTQxMjA3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGl0J3MgYmVjb21pbmcgY2xlYXJlci4gSXQgc2VlbXMgdGhhdCBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUga2V5IHByZXJlcXVpc2l0ZSBmb3IgYHVzZXJmYXVsdGZkX3dwYCB0byBhY3R1YWxseSByZXR1cm4gdHJ1ZS4gSWYgdGhhdCBjb25maWcgb3B0aW9uIGlzbid0IHNldCwgdGhlIGZ1bmN0aW9uIGp1c3QgcmV0dXJucyBmYWxzZSwgd2hpY2ggaXMgZmluZSBmcm9tIGEgY29tcGlsYXRpb24gc3RhbmRwb2ludCwgYnV0IG1lYW5zIHRoZSBjcml0aWNhbCBsaW5lIGBjYXRlZ29yaWVzIHw9IFBBR0VfSVNfV1JJVFRFTmAgd29uJ3QgZ2V0IGV4ZWN1dGVkLlxuXG5UbyBwcm9wZXJseSB0ZXN0IHRoZSBjaGFuZ2VzLCBJJ2xsIGRlZmluaXRlbHkgbmVlZCBib3RoIGBDT05GSUdfVVNFUkZBVUxURkRgIGFuZCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYC5cblxuSG1tLCB0aGlzIHBhdGNoIGFsc28gbWVudGlvbnMgYE1BRFZfRE9OVE5FRURgIGFuZCBgTUFEVl9DT0xMQVBTRWAgd2l0aGluIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5LiBUaGUgdGVzdCB1c2VzIGBtYWR2aXNlKG1lbSwgaHBhZ2Vfc2l6ZSwgTUFEVl9DT0xMQVBTRSlgLiBUaGF0IG1ha2VzIG1lIHRoaW5rLi4uIGlzIGBNQURWX0NPTExBUFNFYCB0aWVkIHRvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgP1xuXG5ZZXMsIHRoZSB0ZXN0IGRvY3VtZW50YXRpb24gY29uZmlybXMgaXQuIEl0IGV4cGxhaW5zIHRoYXQgYSAyTUIgYW5vbnltb3VzIFRIUCB0aGF0J3MgYmVlbiBgTUFEVl9ET05UTkVFRGAnZCByZXN1bHRzIGluIGEgYHBtZF9ub25lYCBob2xlIHdpdGggbm8gcGFnZSB0YWJsZSBlbnRyeSwgd2hpY2ggaXMgc29tZXRoaW5nIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoKWAgbmV2ZXIgc2Vlcy4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBgUEFHRU1BUF9TQ0FOYCBoYXMgdG8gcmVwb3J0IHRoaXMgYXMgd3JpdHRlbiBvbiBhIHVmZmQtd3AgVk1BLCBhbmQgaXQgd2lsbCBkbyBzbyB2aWEgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSgpYC5cblxuU28sIHRvIHJ1biB0aGUgdGVzdCBwcm9wZXJseSwgSSBhbHNvIG5lZWQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFsdGhvdWdoIHRoZSByZWxldmFudCBrZXJuZWwgY29kZSBpdHNlbGYgc2hvdWxkIGFwcGx5IHRvIGFueSB1bnBvcHVsYXRlZCBtZW1vcnkgcmFuZ2UuIFRoZSBjb3JlIGNvZGUgSSBhbSBsb29raW5nIGF0IGluIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKWAgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnk7XG5cdGlmICh1c2VyZmF1bHRmZF93cCh2bWEpKVxuXHRcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19XUklUVEVOO1xuXG5cdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXG5cdFx0cmV0dXJuIDA7XG5gYGBcblxuVGhlcmVmb3JlLCB0byByZWNhcCwgSSBuZWVkIGBDT05GSUdfVVNFUkZBVUxURkRgLCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCwgYW5kIGJlY2F1c2UgdGhlIHRlc3RpbmcgcmVsaWVzIG9uIGl0LCBhbHNvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFsb25nc2lkZSB0aGUgdXN1YWwgYENPTkZJR19NTVVgLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwYWdlbWFwX3NjYW5fcHRlX2hvbGUoKWAgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA0NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNzoxNi41MjI0MjMyNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExMTkzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZW1hcF9zY2FuX3B0ZV9ob2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MzA0MT1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA0Ny1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA0ODpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ5LVxcdFxcdFxcdFxcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTMwOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwYWdlbWFwX3NjYW5fb3BzID0ge1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwOTMtXFx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwOTQ6XFx0LnB0ZV9ob2xlID0gcGFnZW1hcF9zY2FuX3B0ZV9ob2xlLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDk1LVxcdC5odWdldGxiX2VudHJ5ID0gcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA3OjE2LjU4MzU1MDA3OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTk4NjY3MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN1YnRsZSBLZXJuZWwgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGNhdGNoZXMgbXkgZXllLiBJdCdzIGNhbGxlZCBieSBgd2Fsa19wYWdlX3JhbmdlYCBhbmQsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXQgZGVhbHMgd2l0aCB0aG9zZSBwZXNreSBob2xlcyBpbiB0aGUgcGFnZSB0YWJsZSDigJMgcGxhY2VzIHdoZXJlIHRoZXJlIGFyZW4ndCBhbnkgUFRFcyBwcmVzZW50LiBUaGUgcGF0Y2gncyBjb3JlIG1vZGlmaWNhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IGl0J3MgYWRkaW5nIHRoZSBgUEFHRV9JU19XUklUVEVOYCBmbGFnIGlmIGB1c2VyZmF1bHRmZF93cCh2bWEpYCByZXR1cm5zIHRydWUuIFRoYXQgc3VnZ2VzdHMgdGhpcyBwYXRjaCBpcyBzdWJ0bHkgY2hhbmdpbmcgaG93IHdlIHJlcG9ydCBwYWdlIHdyaXRlIHN0YXR1cyBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IGB1c2VyZmF1bHRmZF93cGAsIHNwZWNpZmljYWxseSBpbiB0aG9zZSB1bnBvcHVsYXRlZCBhcmVhcy4gSSdtIHNlZWluZyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGZhY3QgdGhhdCBpdCBtb2RpZmllcyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSBmb3IgbWVtb3J5IHJlZ2lvbnMgdGhhdCBhcmUgaW50ZW50aW9uYWxseSB1bnBvcHVsYXRlZCBidXQgbWFuYWdlZCBieSBgdXNlcmZhdWx0ZmRfd3BgLi4uIHRoYXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gaXMgZGVmaW5pdGVseSBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYC5cblxuTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBjb25maWcgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LiBJIGtub3cgYFBST0NfUEFHRV9NT05JVE9SYCBpcyBuZWNlc3NhcnksIGFuZCBvZiBjb3Vyc2UsIGBVU0VSRkFVTFRGRGAgaXMgZXNzZW50aWFsIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBpdCBtb2RpZmllcy4gSSdsbCBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBpcyB0aGUgcmlnaHQgb3B0aW9uIGZvciBlbmFibGluZyB0aGUgcHJvYyBwYWdlIG1vbml0b3JpbmcgaW4gdGhlIGJ1aWxkIGNvbmZpZyB0byBlbnN1cmUgSSBkb24ndCBtaXNzIGFueSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MjEuNTgyMjIxNTIyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTkyNTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPQ19QQUdFX01PTklUT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvS2NvbmZpZz04Mz1jb25maWcgUFJPQ19TWVNDVExcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy0xMDEtXFxuZnMvcHJvYy9LY29uZmlnOjEwMjpjb25maWcgUFJPQ19QQUdFX01PTklUT1JcXG5mcy9wcm9jL0tjb25maWctMTAzLSBcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MjEuNjQ0MTU5OTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NjEzNTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uZmlndXJhdGlvbiBDb250ZXh0KipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgY29uZmlndXJhdGlvbiBoZXJlLiBJJ20gaW1tZWRpYXRlbHkgcmVjb2duaXppbmcgdGhhdCBgUFJPQ19QQUdFX01PTklUT1JgIGlzIHRoZSBrZXkgZmxhZyBmb3IgdGhlIHBhZ2UgbW9uaXRvcmluZyBmdW5jdGlvbmFsaXR5LiBTdHJhaWdodGZvcndhcmQuIEFuZCwgY2lyY2xpbmcgYmFjayB0byB0aGUgYHVzZXJmYXVsdGZkX3dwYCBkaXNjdXNzaW9uLCBgVVNFUkZBVUxURkRgIOKAkyB0aGF0J3MgdGhlIHNwZWNpZmljIGNvbmZpZyB0aGF0IGVuYWJsZXMgdGhlIGB1c2VyZmF1bHRmZF93cGAgZmVhdHVyZS4gR29vZC4gVGhhdCBjbGFyaWZpZXMgdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncyBmb3IgdGhvc2UgZmVhdHVyZXMuIE5vIHN1cnByaXNlcyB0aGVyZSwganVzdCBjb25maXJtaW5nIHRoZSBleHBlY3RlZCBhc3NvY2lhdGlvbnMgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNzoyNC42MzAzMDExMjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDI0MzA3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNFUkZBVUxURkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMzowNzoyNC42OTI3NDE5ODRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1NDg0NzE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYFVTRVJGQVVMVEZEYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBVU0VSRkFVTFRGRGAuIFRoaXMgaXMgbGlrZWx5IGEgbWFjcm8sIHByb2JhYmx5IGluIGEgaGVhZGVyIGZpbGUgc29tZXdoZXJlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSBjb2RlLCBnaXZlbiBpdHMgbmFtaW5nIGNvbnZlbnRpb24uIEl0J3MgYSBzeXN0ZW0gY2FsbCBvciBhIHJlbGF0ZWQgY29uc3RhbnQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAgb3IgYGZpbmRgIHRvIHNjYW4gdGhyb3VnaCB0aGUgc3RhbmRhcmQgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSdsbCBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLCBsb29raW5nIGZvciBcIlVTRVJGQVVMVEZEXCIgYW5kIFwidXNlcmZhdWx0ZmRcIi4gTWF5YmUgSSBjYW4gbmFycm93IGl0IGRvd24gd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHMsIHN1Y2ggYXMgaW5jbHVkZS91YXBpIG9yIGluY2x1ZGUvbGludXguIEl0J3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBJIG1pZ2h0IHJlZmluZSB0aGUgc2VhcmNoIHdpdGgga2V5d29yZHMgbGlrZSBcIm1tXCIsIFwiZmF1bHRcIiwgb3IgXCJ1c2VyIHNwYWNlXCIuIFRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBvbiB1c2VyZmF1bHRmZCB3b3VsZCBiZSB2ZXJ5IGhlbHBmdWwuIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBtYWNybyBpcyBpbXBvcnRhbnQuIElzIGl0IGFuIGludGVnZXIgY29uc3RhbnQgcmVwcmVzZW50aW5nIGEgc3lzdGVtIGNhbGwgbnVtYmVyLCBvciBhIGZsYWcgZm9yIGFuIGBpb2N0bGAgY29tbWFuZD8gVGhpcyBpbml0aWFsIHNlYXJjaCB3aWxsIGhlbHAgbWUgbmFycm93IGRvd24gdGhlIHNwZWNpZmljIGZpbGUgYW5kIHB1cnBvc2UsIGZyb20gdGhlcmUgSSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHVzZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHdob2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE2MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA3OjI4LjI0NzU5Mjc0MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NzM0NDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNFUkZBVUxURkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM4Mj1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuLS1cXG5tbS9LY29uZmlnLTEzODYtXFxubW0vS2NvbmZpZzoxMzg3Om1lbnVjb25maWcgVVNFUkZBVUxURkRcXG5tbS9LY29uZmlnLTEzODgtXFx0Ym9vbCBcXFwiRW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIzOjA3OjMwLjQxNDk0ODEyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTE3ODc0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYFVTRVJGQVVMVEZEYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgYFVTRVJGQVVMVEZEYCBpcyBkZWZpbmVkIGluIGBtbS9LY29uZmlnYCwgdGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBub3RlLiBOb3csIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50PyBUaGUgdGVzdCB1c2VzIGBNQURWX0NPTExBUFNFYCwgYE1BRFZfRE9OVE5FRURgLCBhbmQgYGhwYWdlX3NpemVgIHdoaWNoIGlzIGluZm9ybWF0aXZlLCBidXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgY291bGQgYmUgdXNlZnVsIGhlcmUgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGF0IFRIUCBob2xlIHNjZW5hcmlvLCBhbHRob3VnaCB0aGUgY29yZSBjb2RlIGFwcGxpZXMgdG8gYW55IFBURSBob2xlLCByaWdodD8gRXZlbiB0aG9zZSBjcmVhdGVkIGJ5IGRyb3BwaW5nIG5vcm1hbCBwYWdlcyB1c2luZyBgTUFEVl9ET05UTkVFRGAuXG5cbkhvbGQgb24sIHRoZSBjb21tZW50IGNsYXJpZmllcyBpdDogYW4gdW5wb3B1bGF0ZWQgcmFuZ2UsIHdpdGhvdXQgYW55IHBhZ2UgdGFibGUsIGxpa2UgYSAyTUIgYW5vbnltb3VzIFRIUCB0aGF0J3MgYmVlbiBkcm9wcGVkIHZpYSBgTUFEVl9ET05UTkVFRGAgaXMgcmVhZCBhcyB3cml0dGVuIHVuZGVyIGEgdWZmZC13cCBWTUEuIFRoYXQgbWFrZXMgc2Vuc2UsIGl0J3MgbWF0Y2hpbmcgdGhlIGBwdGVfbm9uZWAgY2FzZS4gVGhpcyBpcyBjcnVjaWFsOiB0aGUgcGF0Y2ggYWxsb3dzIHRoZSBQTV9TQ0FOX1dQX01BVENISU5HIGFybWluZyBiZWxvdyB0byBpbnN0YWxsIG1hcmtlcnMgd2hlbiB3ZSBlbmNvdW50ZXIgdGhlc2UgdW5wb3B1bGF0ZWQgcmVnaW9ucywgc28gdGhlIG5leHQgc2NhbiB0cmVhdHMgaXQgYXMgY2xlYW4gdW50aWwgaXQgaXMgcmV3cml0dGVuLiBTbyBpdCBpc24ndCBzcGVjaWZpY2FsbHkgKm9ubHkqIGh1Z2UgcGFnZXMuIEl0IGFwcGxpZXMgdG8gYW55IHVucG9wdWxhdGVkIHJhbmdlLCBidXQgVEhQIGlzIGEgZ29vZCBleGFtcGxlIHRvIGhhdmUgaW4gbWluZC4gSSB0aGluayBJJ2xsIGFkZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRvIGJlIHNhZmUsIGp1c3QgdG8gY292ZXIgdGhhdCBiYXNlLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGRvX3BhZ2VtYXBfc2NhbmAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBMZXQncyBzZWUuLi4gYGRvX3BhZ2VtYXBfc2NhbmAgaXMgY2FsbGVkIGZyb20gYGRvX3BhZ2VtYXBfY21kYCB3aGljaCBpcyBhbiBgdW5sb2NrZWRfaW9jdGxgIGZvciBgL3Byb2MvcGlkL3BhZ2VtYXBgLiBZdXAsIHRoYXQncyBkZWZpbml0ZWx5IGEgdXNlcnNwYWNlIGludGVyZmFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcuIEhlcmUncyBteSBzdW1tYXJ5OlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogKlRydWUqXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFBST0NfUEFHRV9NT05JVE9SYCwgYFVTRVJGQVVMVEZEYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWBcbiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIGBQQUdFTUFQX1NDQU5gIGlvY3RsIG9uIGAvcHJvYy9waWQvcGFnZW1hcGAsIGVuc3VyaW5nIGNvcnJlY3QgcmVwb3J0aW5nIG9mIHVucG9wdWxhdGVkIHJlZ2lvbnMgKFBURSBob2xlcykgYXMgd3JpdHRlbiB3aGVuIHRoZSBWTUEgdXRpbGl6ZXMgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgZXhwb3NlcyBhIG5ldyBiZWhhdmlvciB2aWEgdGhlIHByb2NmcyBpbnRlcmZhY2UuIFRoZSBjaGFuZ2UgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUzMSwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjM6MDc6MzguMTY2NzM5MTg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4ODQxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfUEFHRV9NT05JVE9SXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlbWFwX3NjYW5fcHRlX2hvbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBvbiAvcHJvYy9waWQvcGFnZW1hcCB0byBjb3JyZWN0bHkgcmVwb3J0IHVucG9wdWxhdGVkIHJhbmdlcyAoUFRFIGhvbGVzKSBhcyB3cml0dGVuIHdoZW4gdGhlIFZNQSBoYXMgdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdGlvbiBlbmFibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQvcHJvY2ZzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX1BBR0VfTU9OSVRPUlwiLFxuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZW1hcF9zY2FuX3B0ZV9ob2xlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAgdG8gY29ycmVjdGx5IHJlcG9ydCB1bnBvcHVsYXRlZCByYW5nZXMgKFBURSBob2xlcykgYXMgd3JpdHRlbiB3aGVuIHRoZSBWTUEgaGFzIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3Rpb24gZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50L3Byb2NmcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow78nnx[1] Phase: Succeeded StartedAt: 2026-07-08 23:07:50 +0000 UTC FinishedAt: 2026-07-08 23:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 23:07:50 +0000 UTC FinishedAt: 2026-07-08 23:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2] Phase: Succeeded StartedAt: 2026-07-08 23:07:50 +0000 UTC FinishedAt: 2026-07-09 03:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 23:07:50 +0000 UTC FinishedAt: 2026-07-09 03:15:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 23:07:50 +0000 UTC FinishedAt: 2026-07-08 23:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 23:07:50 +0000 UTC FinishedAt: 2026-07-08 23:07:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow78nnx/series-workflow78nnx-convert-artifact-1863803757/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 23:08:00 +0000 UTC FinishedAt: 2026-07-08 23:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 23:08:00 +0000 UTC FinishedAt: 2026-07-08 23:42: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:*0e8bbb96-9808-4d03-b52b-03847a3ce901,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-workflow78nnx/series-workflow78nnx-convert-artifact-1863803757/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": "cacad713-06f5-440b-8871-72d92ca13918", "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-workflow78nnx/series-workflow78nnx-build-action-3852193123/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 23:08:00 +0000 UTC FinishedAt: 2026-07-08 23:42: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:*0e8bbb96-9808-4d03-b52b-03847a3ce901,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-workflow78nnx/series-workflow78nnx-convert-artifact-1863803757/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": "cacad713-06f5-440b-8871-72d92ca13918", "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-workflow78nnx/series-workflow78nnx-build-action-3852193123/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 23:42:30 +0000 UTC FinishedAt: 2026-07-08 23:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 23:42:30 +0000 UTC FinishedAt: 2026-07-08 23:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 23:42:30 +0000 UTC FinishedAt: 2026-07-08 23:42:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 23:42:30 +0000 UTC FinishedAt: 2026-07-08 23:42:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow78nnx/series-workflow78nnx-convert-artifact-2109029320/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 23:42:40 +0000 UTC FinishedAt: 2026-07-08 23:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 23:42:40 +0000 UTC FinishedAt: 2026-07-08 23:44:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cacad713-06f5-440b-8871-72d92ca13918,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-workflow78nnx/series-workflow78nnx-build-action-3852193123/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-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 23:44:57 +0000 UTC FinishedAt: 2026-07-08 23:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 23:44:57 +0000 UTC FinishedAt: 2026-07-08 23:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 23:44:57 +0000 UTC FinishedAt: 2026-07-09 00:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 23:44:57 +0000 UTC FinishedAt: 2026-07-09 00:09:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0e8bbb96-9808-4d03-b52b-03847a3ce901,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-workflow78nnx/series-workflow78nnx-convert-artifact-2109029320/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": "af080f57-39b8-496d-bb0e-101e445ec2ff", "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-workflow78nnx/series-workflow78nnx-build-action-27160692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 23:44:57 +0000 UTC FinishedAt: 2026-07-09 00:09:26 +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:*0e8bbb96-9808-4d03-b52b-03847a3ce901,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-workflow78nnx/series-workflow78nnx-convert-artifact-2109029320/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": "af080f57-39b8-496d-bb0e-101e445ec2ff", "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-workflow78nnx/series-workflow78nnx-build-action-27160692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-09 00:09:36 +0000 UTC FinishedAt: 2026-07-09 00:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-09 00:09:36 +0000 UTC FinishedAt: 2026-07-09 00:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-09 00:09:36 +0000 UTC FinishedAt: 2026-07-09 00:11:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-09 00:09:36 +0000 UTC FinishedAt: 2026-07-09 00:11:28 +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:*af080f57-39b8-496d-bb0e-101e445ec2ff,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-workflow78nnx/series-workflow78nnx-build-action-27160692/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-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-09 00:11:37 +0000 UTC FinishedAt: 2026-07-09 03:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-09 00:11:37 +0000 UTC FinishedAt: 2026-07-09 03:15:02 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*cacad713-06f5-440b-8871-72d92ca13918,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*af080f57-39b8-496d-bb0e-101e445ec2ff,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-workflow78nnx/series-workflow78nnx-build-action-3852193123/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-workflow78nnx/series-workflow78nnx-build-action-27160692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-09 00:11:37 +0000 UTC FinishedAt: 2026-07-09 00:11:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-09 00:11:37 +0000 UTC FinishedAt: 2026-07-09 00:11:44 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow78nnx/series-workflow78nnx-convert-artifact-738296705/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-09 00:11:37 +0000 UTC FinishedAt: 2026-07-09 00:11:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-09 00:11:37 +0000 UTC FinishedAt: 2026-07-09 00:11:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-09 00:11:37 +0000 UTC FinishedAt: 2026-07-09 00:11:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-09 00:11:47 +0000 UTC FinishedAt: 2026-07-09 03:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78nnx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_scan_pte_hole"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR","USERFAULTFD","TRANSPARENT_HUGEPAGE"],"series_id":"43fe9f45-0a8c-4ae8-8831-d7847559ac91","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-09 00:11:47 +0000 UTC FinishedAt: 2026-07-09 03:14:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cacad713-06f5-440b-8871-72d92ca13918,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*af080f57-39b8-496d-bb0e-101e445ec2ff,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-workflow78nnx/series-workflow78nnx-build-action-3852193123/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-workflow78nnx/series-workflow78nnx-build-action-27160692/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-workflow78nnx/series-workflow78nnx-convert-artifact-738296705/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,}