Name: series-workflowkwl55 Phase: Succeeded StartedAt: 2026-08-06 22:31:41 +0000 UTC FinishedAt: 2026-08-07 02:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[0] Phase: Succeeded StartedAt: 2026-08-06 22:31:41 +0000 UTC FinishedAt: 2026-08-06 22:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 22:31:41 +0000 UTC FinishedAt: 2026-08-06 22:52:35 +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": "1fb556c523f6c18b43b1f52fb366f61c9963ce06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HIBERNATION", "SWAP" ], "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": "1fb556c523f6c18b43b1f52fb366f61c9963ce06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HIBERNATION", "SWAP" ], "series_id": "1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_alloc_hibernation_slot", "swap_free_hibernation_slot", "swap_cache_alloc_folio", "__swap_cluster_free_entries" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hJQkVSTkFUSU9OJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QmIzM0OywKICAgICYjMzQ7c3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3QmIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTV1BfVEJfSElCIHN0YXRlIGZvciBoaWJlcm5hdGlvbiBzbG90cyBpbiB0aGUgc3dhcCB0YWJsZSB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUgYnkgY2x1c3RlciByZWFkYWhlYWQuIEl0IG1vZGlmaWVzIHN3YXAgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYyBmb3IgaGliZXJuYXRpb24gc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBoaWJlcm5hdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YTEwY2IzNWYzMmM3M2RhZTUzMDU0ZjFkNTRmYTc5NjYxZGI0YTQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAyMjo1MDo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDViZTgyNTkxMWU2NDUuLjlmMmNjNTkxODcxM2QgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTE4MCw5ICYjNDM7MTgwLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdGlmIChzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBhIHN3YXBwZWQtb3V0IHNsb3QgbWF5IGJlIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZS5cbiYjNDM7XHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cbiYjNDM7XHQgKiBzbG90cyB0aGF0IGFyZSBmcmVlLCBiYWQsIG9yIG93bmVkIGJ5IGhpYmVybmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXHRpZiAoc2hhZG93cCBcdTAwMjZcdTAwMjYgc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpKVxuJiM0MztcdGlmIChzaGFkb3dwKVxuIFx0XHQqc2hhZG93cCA9IHN3cF90Yl90b19zaGFkb3cob2xkX3RiKTtcbiBcdGlmIChtZW1jZ19pZClcbiBcdFx0Km1lbWNnX2lkID0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZik7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF90YWJsZS5oIGIvbW0vc3dhcF90YWJsZS5oXG5pbmRleCBlNjYxM2U2MmY4ZDBmLi5jMWM1MTZiY2MxN2U2IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF90YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3RhYmxlLmhcbkBAIC0zMCw2ICYjNDM7MzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gICogUEZOOiAgICAgIHxTV0FQX0NPVU5UfFp8LS0tLS0tIFBGTiAtLS0tLS0tfDEwfCAtIENhY2hlZCBzbG90XG4gICogUG9pbnRlcjogIHwtLS0tLS0tLS0tLSBQb2ludGVyIC0tLS0tLS0tLS18MTAwfCAtIChVbnVzZWQpXG4gICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90XG4mIzQzOyAqIEhpYmVybjogICB8LS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XG4gICpcbiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxuQEAgLTU0LDYgJiM0Mzs1NSw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcbiAgKiAgIGFsaWduZWQgcG9pbnRlcnMuXG4gICpcbiAgKiAtIEJhZDogU3dhcCBzbG90IGlzIHJlc2VydmVkLCBwcm90ZWN0cyBzd2FwIGhlYWRlciBvciBob2xlcyBvbiBzd2FwIGRldmljZXMuXG4mIzQzOyAqXG4mIzQzOyAqIC0gSGliZXJuOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQgYnkgaGliZXJuYXRpb24gZm9yIHRoZSBzdXNwZW5kIGltYWdlLCBhbmRcbiYjNDM7ICogICBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlLlxuICAqL1xuIFxuIC8qIE5VTEwgRW50cnksIGFsbCAwICovXG5AQCAtODEsNiAmIzQzOzg1LDkgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xuIC8qIEJhZCBzbG90OiBlbmRzIHdpdGggMGIxMDAwIGFuZCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqL1xuICNkZWZpbmUgU1dQX1RCX0JBRFx0XHQoKH4wVUwpIFx1MDAzY1x1MDAzYyAzKVxuIFxuJiM0MzsvKiBIaWJlcm5hdGlvbiBzbG90OiBlbmRzIHdpdGggMGIxMDAwMCBhbmQgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi9cbiYjNDM7I2RlZmluZSBTV1BfVEJfSElCXHRcdCgofjBVTCkgXHUwMDNjXHUwMDNjIDQpXG4mIzQzO1xuIC8qIE1hY3JvIGZvciBzaGFkb3cgb2Zmc2V0IGNhbGN1bGF0aW9uICovXG4gI2RlZmluZSBTV0FQX0NPVU5UX1NISUZUXHRTV1BfVEJfRkxBR1NfQklUU1xuIFxuQEAgLTE2Niw2ICYjNDM7MTczLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuIFx0cmV0dXJuIHN3cF90YiA9PSBTV1BfVEJfQkFEO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19oaWJlcm5hdGlvbih1bnNpZ25lZCBsb25nIHN3cF90YilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0hJQjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2NvdW50YWJsZSh1bnNpZ25lZCBsb25nIHN3cF90YilcbiB7XG4gXHRyZXR1cm4gKHN3cF90Yl9pc19zaGFkb3coc3dwX3RiKSB8fCBzd3BfdGJfaXNfZm9saW8oc3dwX3RiKSB8fFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCBkZWEyZDNiMzZlMDZmLi40ZmJhMTc3MGNlNjE2IDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuY1xuQEAgLTkyOCw3ICYjNDM7OTI4LDcgQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHQgKiB1cG9uIGZvbGlvIHVubWFwLlxuIFx0ICpcbiBcdCAqIEVsc2UsIGl0JiMzOTtzIGEgZXhjbHVzaXZlIG9yZGVyIDAgYWxsb2NhdGlvbiBmb3IgaGliZXJuYXRpb24uXG4tXHQgKiBUaGUgc2xvdCBzdGFydHMgd2l0aCBjb3VudCA9PSAxIGFuZCBuZXZlciBpbmNyZWFzZXMuXG4mIzQzO1x0ICogVGhlIHNsb3QgY2FycmllcyBubyBzd2FwIGNvdW50IGFuZCBpcyBmcmVlZCBieSBvZmZzZXQuXG4gXHQgKi9cbiBcdGlmIChsaWtlbHkoZm9saW8pKSB7XG4gXHRcdG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuQEAgLTk0MCw4ICYjNDM7OTQwLDggQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdG9yZGVyID0gMDtcbiBcdFx0bnJfcGFnZXMgPSAxO1xuIFx0XHRzd2FwX2NsdXN0ZXJfYXNzZXJ0X2VtcHR5KGNpLCBjaV9vZmYsIDEsIGZhbHNlKTtcbi1cdFx0LyogRmFrZSBzaGFkb3cgcGxhY2Vob2xkZXIgd2l0aCBubyBmbGFnLCBoaWJlcm5hdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHplcm9tYXAgKi9cbi1cdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBfX3N3cF90Yl9ta19jb3VudChzaGFkb3dfdG9fc3dwX3RiKE5VTEwsIDApLCAxKSk7XG4mIzQzO1x0XHQvKiBFeGNsdXNpdmVseSBvd25lZCBieSBoaWJlcm5hdGlvbiwgbXVzdCBuZXZlciBlbnRlciB0aGUgc3dhcCBjYWNoZSAqL1xuJiM0MztcdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBTV1BfVEJfSElCKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIEFsbG9jYXRpb24gd2l0aG91dCBmb2xpbyBpcyBvbmx5IHBvc3NpYmxlIHdpdGggaGliZXJuYXRpb24gKi9cbiBcdFx0V0FSTl9PTl9PTkNFKDEpO1xuQEAgLTE5MjksOSAmIzQzOzE5MjksMTEgQEAgdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xuIFx0XHQvKlxuIFx0XHQgKiBGcmVlaW5nIGlzIGRvbmUgYWZ0ZXIgcmVsZWFzZSBvZiB0aGUgbGFzdCBzd2FwIGNvdW50XG4tXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkXG4mIzQzO1x0XHQgKiByZWYsIG9yIGFmdGVyIHN3YXAgY2FjaGUgaXMgZHJvcHBlZC4gQSBoaWJlcm5hdGlvbiBzbG90XG4mIzQzO1x0XHQgKiBoYXMgbm8gY291bnQgYW5kIGlzIGZyZWVkIGRpcmVjdGx5IGJ5IGl0cyBvd25lci5cbiBcdFx0ICovXG4tXHRcdFZNX1dBUk5fT04oIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fCBfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSBcdTAwM2UgMSk7XG4mIzQzO1x0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXHUwMDNlIDEpKTtcbiBcbiBcdFx0LyogUmVzZXR0aW5nIHRoZSBzbG90IHRvIE5VTEwgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBmbGFncy4gKi9cbiBcdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTtcbkBAIC0yMjAxLDEyICYjNDM7MjIwMyw4IEBAIHZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXG4gXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTtcbi1cdF9fc3dhcF9jbHVzdGVyX3B1dF9lbnRyeShjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUik7XG4gXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSLCAxKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuLVxuLVx0LyogSW4gdGhlb3J5IHJlYWRhaGVhZCBtaWdodCBhZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYnkgYWNjaWRlbnQgKi9cbi1cdF9fdHJ5X3RvX3JlY2xhaW1fc3dhcChzaSwgb2Zmc2V0LCBUVFJTX0FOWVdBWSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19maW5kX2hpYmVybmF0aW9uX3N3YXBfdHlwZShkZXZfdCBkZXZpY2UsIHNlY3Rvcl90IG9mZnNldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SElCRVJOQVRJT04mIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFNXUF9UQl9ISUIgc3RhdGUgZm9yIGhpYmVybmF0aW9uIHNsb3RzIGluIHRoZSBzd2FwIHRhYmxlIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZSBieSBjbHVzdGVyIHJlYWRhaGVhZC4gSXQgbW9kaWZpZXMgc3dhcCBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhpYmVybmF0aW9uIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlhMTBjYjM1ZjMyYzczZGFlNTMwNTRmMWQ1NGZhNzk2NjFkYjRhNDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjUwOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDViZTgyNTkxMWU2NDUuLjlmMmNjNTkxODcxM2QgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTE4MCw5ICYjNDM7MTgwLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7CiAJaWYgKHN3cF90Yl9pc19mb2xpbyhvbGRfdGIpKQogCQlyZXR1cm4gLUVFWElTVDsKLQlpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKQomIzQzOwkvKgomIzQzOwkgKiBPbmx5IGEgc3dhcHBlZC1vdXQgc2xvdCBtYXkgYmUgYnJvdWdodCBpbnRvIHRoZSBzd2FwIGNhY2hlLgomIzQzOwkgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb24KJiM0MzsJICogc2xvdHMgdGhhdCBhcmUgZnJlZSwgYmFkLCBvciBvd25lZCBieSBoaWJlcm5hdGlvbi4KJiM0MzsJICovCiYjNDM7CWlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JaWYgKHNoYWRvd3AgJmFtcDsmYW1wOyBzd3BfdGJfaXNfc2hhZG93KG9sZF90YikpCiYjNDM7CWlmIChzaGFkb3dwKQogCQkqc2hhZG93cCA9IHN3cF90Yl90b19zaGFkb3cob2xkX3RiKTsKIAlpZiAobWVtY2dfaWQpCiAJCSptZW1jZ19pZCA9IF9fc3dhcF9jZ3JvdXBfZ2V0KGNpLCBjaV9vZmYpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcF90YWJsZS5oIGIvbW0vc3dhcF90YWJsZS5oCmluZGV4IGU2NjEzZTYyZjhkMGYuLmMxYzUxNmJjYzE3ZTYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3RhYmxlLmgKQEAgLTMwLDYgJiM0MzszMCw3IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHsKICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdAogICogUG9pbnRlcjogIHwtLS0tLS0tLS0tLSBQb2ludGVyIC0tLS0tLS0tLS18MTAwfCAtIChVbnVzZWQpCiAgKiBCYWQ6ICAgICAgfC0tLS0tLS0tLS0tLS0gMSAtLS0tLS0tLS0tLS0tfDEwMDB8IC0gQmFkIHNsb3QKJiM0MzsgKiBIaWJlcm46ICAgfC0tLS0tLS0tLS0tLSAxIC0tLS0tLS0tLS0tLS18MTAwMDB8IC0gSGliZXJuYXRpb24gc2xvdAogICoKICAqIENPVU5UIGlzIGBTV1BfVEJfQ09VTlRfQklUU2AgbG9uZywgWiBpcyB0aGUgYFNXUF9UQl9aRVJPX0ZMQUdgIGJpdCwKICAqIGFuZCB0b2dldGhlciB0aGV5IGZvcm0gdGhlIGBTV1BfVEJfRkxBR1NfQklUU2Agd2lkZSBmbGFncyBmaWVsZC4KQEAgLTU0LDYgJiM0Mzs1NSw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHsKICAqICAgYWxpZ25lZCBwb2ludGVycy4KICAqCiAgKiAtIEJhZDogU3dhcCBzbG90IGlzIHJlc2VydmVkLCBwcm90ZWN0cyBzd2FwIGhlYWRlciBvciBob2xlcyBvbiBzd2FwIGRldmljZXMuCiYjNDM7ICoKJiM0MzsgKiAtIEhpYmVybjogU3dhcCBzbG90IGlzIHJlc2VydmVkIGJ5IGhpYmVybmF0aW9uIGZvciB0aGUgc3VzcGVuZCBpbWFnZSwgYW5kCiYjNDM7ICogICBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlLgogICovCiAKIC8qIE5VTEwgRW50cnksIGFsbCAwICovCkBAIC04MSw2ICYjNDM7ODUsOSBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7CiAvKiBCYWQgc2xvdDogZW5kcyB3aXRoIDBiMTAwMCBhbmQgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi8KICNkZWZpbmUgU1dQX1RCX0JBRAkJKCh+MFVMKSAmbHQ7Jmx0OyAzKQogCiYjNDM7LyogSGliZXJuYXRpb24gc2xvdDogZW5kcyB3aXRoIDBiMTAwMDAgYW5kIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovCiYjNDM7I2RlZmluZSBTV1BfVEJfSElCCQkoKH4wVUwpICZsdDsmbHQ7IDQpCiYjNDM7CiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqLwogI2RlZmluZSBTV0FQX0NPVU5UX1NISUZUCVNXUF9UQl9GTEFHU19CSVRTCiAKQEAgLTE2Niw2ICYjNDM7MTczLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKQogCXJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0JBRDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfaGliZXJuYXRpb24odW5zaWduZWQgbG9uZyBzd3BfdGIpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9ISUI7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpCiB7CiAJcmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHwKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGRlYTJkM2IzNmUwNmYuLjRmYmExNzcwY2U2MTYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtOTI4LDcgJiM0Mzs5MjgsNyBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkgKiB1cG9uIGZvbGlvIHVubWFwLgogCSAqCiAJICogRWxzZSwgaXQmIzM5O3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi4KLQkgKiBUaGUgc2xvdCBzdGFydHMgd2l0aCBjb3VudCA9PSAxIGFuZCBuZXZlciBpbmNyZWFzZXMuCiYjNDM7CSAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LgogCSAqLwogCWlmIChsaWtlbHkoZm9saW8pKSB7CiAJCW9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwpAQCAtOTQwLDggJiM0Mzs5NDAsOCBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkJb3JkZXIgPSAwOwogCQlucl9wYWdlcyA9IDE7CiAJCXN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoY2ksIGNpX29mZiwgMSwgZmFsc2UpOwotCQkvKiBGYWtlIHNoYWRvdyBwbGFjZWhvbGRlciB3aXRoIG5vIGZsYWcsIGhpYmVybmF0aW9uIGRvZXMgbm90IHVzZSB0aGUgemVyb21hcCAqLwotCQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIF9fc3dwX3RiX21rX2NvdW50KHNoYWRvd190b19zd3BfdGIoTlVMTCwgMCksIDEpKTsKJiM0MzsJCS8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovCiYjNDM7CQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIFNXUF9UQl9ISUIpOwogCX0gZWxzZSB7CiAJCS8qIEFsbG9jYXRpb24gd2l0aG91dCBmb2xpbyBpcyBvbmx5IHBvc3NpYmxlIHdpdGggaGliZXJuYXRpb24gKi8KIAkJV0FSTl9PTl9PTkNFKDEpOwpAQCAtMTkyOSw5ICYjNDM7MTkyOSwxMSBAQCB2b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7CiAJCS8qCiAJCSAqIEZyZWVpbmcgaXMgZG9uZSBhZnRlciByZWxlYXNlIG9mIHRoZSBsYXN0IHN3YXAgY291bnQKLQkJICogcmVmLCBvciBhZnRlciBzd2FwIGNhY2hlIGlzIGRyb3BwZWQKJiM0MzsJCSAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3QKJiM0MzsJCSAqIGhhcyBubyBjb3VudCBhbmQgaXMgZnJlZWQgZGlyZWN0bHkgYnkgaXRzIG93bmVyLgogCQkgKi8KLQkJVk1fV0FSTl9PTighc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpICZndDsgMSk7CiYjNDM7CQlWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgJmd0OyAxKSk7CiAKIAkJLyogUmVzZXR0aW5nIHRoZSBzbG90IHRvIE5VTEwgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBmbGFncy4gKi8KIAkJX19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTsKQEAgLTIyMDEsMTIgJiM0MzsyMjAzLDggQEAgdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSkKIAlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTsKLQlfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpOwogCV9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIsIDEpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwotCi0JLyogSW4gdGhlb3J5IHJlYWRhaGVhZCBtaWdodCBhZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYnkgYWNjaWRlbnQgKi8KLQlfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpOwogfQogCiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MjIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBTd2FwL0hpYmVybmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgY2xlYXJseSBwbGF5aW5nIHdpdGggdGhlIGhpYmVybmF0aW9uIHN3YXAgc2xvdCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLiBJdCYjMzk7cyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIGZpbGVzOiBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBfdGFibGUuaGAsIGFuZCBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZS4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgbWVhbmluZyBpdCYjMzk7cyByZWFjaGFibGUgYW5kIGxpa2VseSB1c2VkIGJ5IHRoZSBrZXJuZWwsIGFuZCB0aGUgZ29hbCBzZWVtcyB0byBiZSB0byByZWZpbmUgaG93IGhpYmVybmF0aW9uIHN3YXAgc2xvdHMgYXJlIGhhbmRsZWQgaW4gdGhlIHN3YXAgdGFibGUuCgpTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgdGhpcyBuZXcgYFNXUF9UQl9ISUJgIHN0YXRlLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3Igb2YgdGhlIGRpcmVjdGlvbiB0aGlzIHBhdGNoIGlzIHRha2luZy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgZmxhZyBmb3IgaGliZXJuYXRpb24gc2xvdHMuIFRoaXMgbG9va3MgbGlrZSBhIGRlZmluaXRlIGltcHJvdmVtZW50IG92ZXIgdGhlIHByZXZpb3VzIG1lY2hhbmlzbSBpbnZvbHZpbmcgYSAmIzM0O3NoYWRvdyBwbGFjZWhvbGRlci4mIzM0OyBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGluIGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCB3aGVyZSBpdCYjMzk7cyBub3cgc2V0dGluZyB0aGUgYFNXUF9UQl9ISUJgIHN0YXRlLCBhbmQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2Agbm93IGhhcyB0aGUgY2FwYWJpbGl0eSBvZiBmcmVlaW5nIHRoZSBoaWJlcm5hdGlvbiBzbG90cyBkaXJlY3RseSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgdG8gaW1wcm92ZSB0aGUgZWZmaWNpZW5jeS4KClRoZSBtb3N0IGludGVyZXN0aW5nIG1vZGlmaWNhdGlvbiwgdGhvdWdoLCBoYXMgdG8gYmUgdGhlIG9uZSBpbiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIEl0IHNlZW1zIHRoYXQgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSBwcmV2ZW50aW5nIG5vbi1zaGFkb3cgc2xvdHMgZnJvbSBiZWluZyBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9ucy4gYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZSwgc28gaXQmIzM5O3MgcHJvYmFibHkgY2FsbGVkIGZyb20gYSBoYW5kZnVsIG9mIHBsYWNlcyB3aXRoaW4gdGhlIHNhbWUgbW9kdWxlLCB3aGljaCBpcyBnb29kLiBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGlzIGV4cG9ydGVkL25vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGxpa2VseSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBUEksIG1lYW5pbmcgaXQmIzM5O3MgcHJvYmFibHkgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzIGluIHRoZSBrZXJuZWwuIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGFwcGVhcnMgdG8gYmUgbm9uLXN0YXRpYy4gRmluYWxseSwgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgIGlzIHN0YXRpYy4gVGhhdCBzaG91bGQgaW5mb3JtIG15IGZvY3VzLgoKVGltZSB0byBsZXZlcmFnZSBgZ3JlcHBlcmAgYW5kIHNlZSB3aG8mIzM5O3MgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgYW5kIHdoZXJlIHRoZXkmIzM5O3JlIGRlZmluZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaD00MDI9c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTtcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQwMzp2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwNC1cbi0tXG5rZXJuZWwvcG93ZXIvc3dhcC5jPTE2OT1zZWN0b3JfdCBhbGxvY19zd2FwZGV2X2Jsb2NrKGludCBzd2FwKVxuLS1cbmtlcm5lbC9wb3dlci9zd2FwLmMtMTc5LVx0XHRpZiAoc3dzdXNwX2V4dGVudHNfaW5zZXJ0KG9mZnNldCkpXG5rZXJuZWwvcG93ZXIvc3dhcC5jOjE4MDpcdFx0XHRzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnkoc3dhcCwgb2Zmc2V0KSk7XG5rZXJuZWwvcG93ZXIvc3dhcC5jLTE4MS1cdFx0ZWxzZVxuLS1cbmtlcm5lbC9wb3dlci9zd2FwLmM9MTg3PXZvaWQgZnJlZV9hbGxfc3dhcF9wYWdlcyhpbnQgc3dhcClcbi0tXG5rZXJuZWwvcG93ZXIvc3dhcC5jLTIwMi1cdFx0Zm9yIChvZmZzZXQgPSBleHQtXHUwMDNlc3RhcnQ7IG9mZnNldCBcdTAwM2M9IGV4dC1cdTAwM2VlbmQ7IG9mZnNldCYjNDM7JiM0MzspXG5rZXJuZWwvcG93ZXIvc3dhcC5jOjIwMzpcdFx0XHRzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnkoc3dhcCwgb2Zmc2V0KSk7XG5rZXJuZWwvcG93ZXIvc3dhcC5jLTIwNC1cbi0tXG5tbS9zd2FwZmlsZS5jPTIxNTk9c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjE5My0vKipcbm1tL3N3YXBmaWxlLmM6MjE5NDogKiBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCgpIC0gRnJlZSBhIHN3YXAgc2xvdCBhbGxvY2F0ZWQgZm9yIGhpYmVybmF0aW9uLlxubW0vc3dhcGZpbGUuYy0yMTk1LSAqIEBlbnRyeTogc3dhcCBlbnRyeSB0byBmcmVlLlxuLS1cbm1tL3N3YXBmaWxlLmMtMjE5OC0gKi9cbm1tL3N3YXBmaWxlLmM6MjE5OTp2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxubW0vc3dhcGZpbGUuYy0yMjAwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTczCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBIaWJlcm5hdGlvbiBTd2FwIFNsb3QgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGlzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGgsIGFuZCBpdHMgY2FsbCBjb250ZXh0IGlzIGNsZWFybHkgd2l0aGluIGBrZXJuZWwvcG93ZXIvc3dhcC5jYC4gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgcGxhY2UsIG1hbmFnaW5nIHN3YXAgb3BlcmF0aW9ucyBkdXJpbmcgaGliZXJuYXRpb24uIE5vdywgdGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IHNsb3QgaXMgYWN0dWFsbHkgZnJlZWQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGRlYWxsb2NhdGluZyBzd2FwIGNsdXN0ZXJzIGxpa2VseSByZXNpZGVzLiBJdCYjMzk7cyB0aGUgYnVpbGRpbmcgYmxvY2sgb2YgbWFraW5nIGEgc3dhcCBlbnRyeSB1c2FibGUgYWdhaW4uIFdlJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVudHJpZXMgYXJlIGZsYWdnZWQgYXMgZnJlZSB3aXRoaW4gdGhlIGNsdXN0ZXIuIEtub3dpbmcgaG93IHRoZSBmcmVlIGxpc3QgaXMgY29uc3RydWN0ZWQgYW5kIG1haW50YWluZWQgd2l0aGluIHRoZSBzd2FwIHNwYWNlIGlzIHRoZSBjcml0aWNhbCBsaW5rIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5oPTI2OT12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKTtcbi0tXG5tbS9zd2FwLmgtMjcxLS8qIEZvciBpbnRlcm5hbCB1c2UgKi9cbm1tL3N3YXAuaDoyNzI6ZXh0ZXJuIHZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXAuaC0yNzMtXHRcdFx0XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTI2MT1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTI5Ni1cdGlmICghZm9saW9fc3dhcHBlZCkge1xubW0vc3dhcF9zdGF0ZS5jOjI5NzpcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfc3RhcnQsIG5yX3BhZ2VzKTtcbm1tL3N3YXBfc3RhdGUuYy0yOTgtXHR9IGVsc2UgaWYgKG5lZWRfZnJlZSkge1xuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMDEtXHRcdFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQoX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKSkpXG5tbS9zd2FwX3N0YXRlLmM6MzAyOlx0XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcbm1tL3N3YXBfc3RhdGUuYy0zMDMtXHRcdH0gd2hpbGUgKCYjNDM7JiM0MztjaV9vZmYgXHUwMDNjIGNpX2VuZCk7XG4tLVxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNjIyLVx0XHRpZiAoY2lfYmF0Y2ggIT0gLTEpIHtcbm1tL3N3YXBmaWxlLmM6MTYyMzpcdFx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9iYXRjaCwgY2lfb2ZmIC0gY2lfYmF0Y2gpO1xubW0vc3dhcGZpbGUuYy0xNjI0LVx0XHRcdGNpX2JhdGNoID0gLTE7XG4tLVxubW0vc3dhcGZpbGUuYy0xNjI4LVx0aWYgKGNpX2JhdGNoICE9IC0xKVxubW0vc3dhcGZpbGUuYzoxNjI5Olx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9iYXRjaCwgY2lfb2ZmIC0gY2lfYmF0Y2gpO1xubW0vc3dhcGZpbGUuYy0xNjMwLVx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4tLVxubW0vc3dhcGZpbGUuYz0xODg0PXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcGZpbGUuYy0xOTE0LSAqL1xubW0vc3dhcGZpbGUuYzoxOTE1OnZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtMTkxNi1cdFx0XHRcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBmaWxlLmM9MjE5OT12b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMjIwNS1cdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XG5tbS9zd2FwZmlsZS5jOjIyMDY6XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSLCAxKTtcbm1tL3N3YXBmaWxlLmMtMjIwNy1cdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqSW50ZXJuYWwgU3dhcCBGdW5jdGlvbiBDb25mdXNpb24qKgoKSG1tLCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYC4gVGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBvbmUuIEl0JiMzOTtzIGV4cG9ydGVkIHRvIGBtbS9zd2FwLmhgLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsIHNpbmNlIGl0IHNlZW1zIGluaGVyZW50bHkgaW50ZXJuYWwgdG8gdGhlIHN3YXAgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIHdvcnRoIGRpZ2dpbmcgaW50byB3aHkgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBzd2FwIGNvZGUgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGFydCBieSBpZGVudGlmeWluZyB0aGUgY2FsbGVycyBvZiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5lZWQgdG8gZXhwb3J0IHRoZSBmaXJzdCBmdW5jdGlvbi4gT25jZSBJIGhhdmUgdGhlIGNhbGwgc2l0ZXMgbWFwcGVkIG91dCwgSSB3aWxsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGdhdWdlIGlmIHRoZSBleHRlcm5hbCB2aXNpYmlsaXR5IGlzIGNvcnJlY3QsIG9yIGp1c3QgYW4gYXJ0aWZhY3Qgb2YgYW4gb2xkZXIgZGVzaWduLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgd2h5IHRoYXQgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZXhwb3NlZCwgb3IgaWYgdGhhdCBpcyBldmVuIHRoZSBjb3JyZWN0IHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9hZGRfY2hlY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jPTEzND12b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTE0NS0vKipcbm1tL3N3YXBfc3RhdGUuYzoxNDY6ICogX19zd2FwX2NhY2hlX2FkZF9jaGVjayAtIENoZWNrIGlmIGEgcmFuZ2UgaXMgc3VpdGFibGUgZm9yIGFkZGluZyBhIGZvbGlvLlxubW0vc3dhcF9zdGF0ZS5jLTE0Ny0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTE2MC0gKi9cbm1tL3N3YXBfc3RhdGUuYzoxNjE6c3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwX3N0YXRlLmMtMTYyLVx0XHRcdFx0ICBzd3BfZW50cnlfdCB0YXJnX2VudHJ5LFxuLS1cbm1tL3N3YXBfc3RhdGUuYz00MTM9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTQzMC1cdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0MzE6XHRlcnIgPSBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKGNpLCB0YXJnX2VudHJ5LCBucl9wYWdlcywgTlVMTCwgTlVMTCk7XG5tbS9zd2FwX3N0YXRlLmMtNDMyLVx0c3Bpbl91bmxvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTQ1My1cdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0NTQ6XHRlcnIgPSBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKGNpLCB0YXJnX2VudHJ5LCBucl9wYWdlcywgXHUwMDI2c2hhZG93LCBcdTAwMjZtZW1jZ19pZCk7XG5tbS9zd2FwX3N0YXRlLmMtNDU1LVx0aWYgKHVubGlrZWx5KGVycikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjM2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgU3dhcCBDYWNoZSBBbGxvY2F0aW9uKioKCkFscmlnaHQsIHNvIGBfX3N3YXBfY2FjaGVfYWxsb2NgIGlzIGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLiBUaGF0JiMzOTtzIHRoZSBrZXkgcmVsYXRpb25zaGlwIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYF9fc3dhcF9jYWNoZV9hbGxvY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIGNhbGwuIFRoZSBhbGxvY2F0aW9uIGxvZ2ljIGlzIGNyaXRpY2FsLCBidXQgdGhlIGNhbGxlcnMgYXJlIGdvaW5nIHRvIGdpdmUgbWUgdGhlIGJpZyBwaWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBkaXJlY3Rpb24gSSYjMzk7bSB0YWtpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYz0zNjY9dm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy00MTItICovXG5tbS9zd2FwX3N0YXRlLmM6NDEzOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcF9zdGF0ZS5jLTQxNC1cdFx0XHRcdFx0c3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz01MTg9c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNTMzLVx0ZG8ge1xubW0vc3dhcF9zdGF0ZS5jOjUzNDpcdFx0cmV0ID0gX19zd2FwX2NhY2hlX2FsbG9jKGNpLCB0YXJnX2VudHJ5LCBnZnAsIG9yZGVyLFxubW0vc3dhcF9zdGF0ZS5jLTUzNS1cdFx0XHRcdFx0IHZtZiwgbXBvbCwgaWx4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA4MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIENhbGwgQ2hhaW4qKgoKUmlnaHQsIHNvIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpcyB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMgKndoeSo/IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gSXMgdGhpcyBhIGNvbW1vbiBwYXRoIGZvciBhbGxvY2F0aW9uPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGx1cmtpbmcgd2l0aGluIHRob3NlIGNhbGxzPwoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEkmIzM5O2xsIHVzZSB3aGF0ZXZlciB0b29scyBhcmUgYXQgbXkgZGlzcG9zYWwgLSBgZ3JlcGAsIGBvYmpkdW1wYCwgbWF5YmUgZXZlbiBhIHN0YXRpYyBhbmFseXNpcyB0b29sIOKAkyB0byBnZXQgYSBsaXN0IG9mIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW52b2tlIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGNydWNpYWwuIEFyZSB0aGVzZSBjYWxscyBjb21pbmcgZnJvbSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzd2FwIGluL291dCByb3V0aW5lcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgc2l0ZXMgd2lsbCBnaXZlIG1lIGFuIGltbWVkaWF0ZSBzZW5zZSBvZiB0aGUgKnB1cnBvc2UqIGJlaGluZCB0aGUgYWxsb2NhdGlvbi4gVGhpcyB3aWxsIGhvcGVmdWxseSBpbGx1bWluYXRlIHRoZSByYXRpb25hbGUgZm9yIHRoZSBkZXNpZ24gb2YgdGhlIGZ1bmN0aW9uLCBhbmQgaG9wZWZ1bGx5IGV4cG9zZSBhbnkgb3Bwb3J0dW5pdGllcyB0byBpbXByb3ZlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXAuaD0zMzU9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL3N3YXAuaDozMzY6c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9zd2FwLmgtMzM3LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTQxMz1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNTAxLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjUwMjogKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbm1tL3N3YXBfc3RhdGUuYy01MDMtICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3Rcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNTE3LSAqL1xubW0vc3dhcF9zdGF0ZS5jOjUxODpzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxubW0vc3dhcF9zdGF0ZS5jLTUxOS1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz02NDY9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxuLS1cbm1tL3N3YXBfc3RhdGUuYy02NTUtXHRcdFx0cmV0dXJuIGZvbGlvO1xubW0vc3dhcF9zdGF0ZS5jOjY1NjpcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbm1tL3N3YXBfc3RhdGUuYy02NTctXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9Njg3PXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY5Ni1cdFx0XHRyZXR1cm4gZm9saW87XG5tbS9zd2FwX3N0YXRlLmM6Njk3Olx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG5tbS9zd2FwX3N0YXRlLmMtNjk4LVx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4tLVxubW0vc3dhcGZpbGUuYz0xODMwPXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vc3dhcGZpbGUuYy0xODcyLSAqICAgICAuLi5cdFx0XHRcdHN3YXBvZmYmIzQzO3N3YXBvblxubW0vc3dhcGZpbGUuYzoxODczOiAqICAgICBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbm1tL3N3YXBmaWxlLmMtMTg3NC0gKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxuLS1cbm1tL3pzd2FwLmM9OTg3PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4tLVxubW0venN3YXAuYy0xMDAzLVx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbm1tL3pzd2FwLmM6MTAwNDpcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxubW0venN3YXAuYy0xMDA1LVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTY1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBDYWxsZXJzKioKCkFscmlnaHQsIHNvIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpcyBjcnVjaWFsLiBJdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBwb2ludCBmb3Igc3dhcCBjYWNoZSBmb2xpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZSBwYXR0ZXJucy4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gVGhhdCBzZWVtcyByZWFzb25hYmxlIOKAkyB0aG9zZSBhbGwgbWFrZSBzZW5zZSBhcyBwbGFjZXMgd2hlcmUgd2UmIzM5O2QgbmVlZCB0byBicmluZyBkYXRhIGludG8gdGhlIHN3YXAgY2FjaGUgb3Igd3JpdGUgaXQgYmFjay4gTm8gb2J2aW91cyByZWQgZmxhZ3MgdGhlcmUsIGFuZCB0aGV5JiMzOTtyZSBhbGwgcmVhY2hhYmxlOyB0aGUgY2FsbCBmbG93IHNlZW1zIGNvaGVyZW50IHNvIGZhci4KCk5vdywgSSByZWFsbHkgd2FudCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFsbG9jYXRpb24gaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCBzaW5jZSB0aGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBhY3R1YWwgYWxsb2NhdGlvbiBsb2dpYyByZXNpZGVzIHdpdGhpbiB0aGUgY2x1c3Rlci4gVW5kZXJzdGFuZGluZyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBrZXkgdG8gb3B0aW1pemluZyB0aGlzLCBhbmQgdHJhY2luZyB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGV4cG9zZSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50IGluIG91ciBzd2FwIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz04ODQ9c3RhdGljIGJvb2wgY2x1c3Rlcl9zY2FuX3JhbmdlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTkxMC1cbm1tL3N3YXBmaWxlLmM6OTExOnN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy05MTItXHRcdFx0XHRcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBmaWxlLmM9OTY0PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtOTk0LVx0XHR9XG5tbS9zd2FwZmlsZS5jOjk5NTpcdFx0aWYgKCFfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHNpLCBjaSwgZm9saW8sIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpKVxubW0vc3dhcGZpbGUuYy05OTYtXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXAgQ2x1c3RlciBBbGxvY2F0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhlIGFsbG9jYXRpb24gb2Ygc3dhcCBjbHVzdGVyIGVudHJpZXMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBzeXN0ZW0uIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXJgIGFuZCBsb29rIGF0IGl0cyBjYWxsaW5nIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBob3cgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYCBpcyBiZWluZyB1c2VkIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzd2FwIGFsbG9jYXRpb24gc3RyYXRlZ3kuIEZyb20gdGhlcmUsIEkgd2lsbCBpbnZlc3RpZ2F0ZSBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AsIHRvIGRpc2NvdmVyIGhvdyB0aGUgZW50cmllcyBhcmUgYWxsb2NhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zd2FwX3NjYW5fY2x1c3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTkxMT1zdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTk2My0vKiBUcnkgdXNlIGEgbmV3IGNsdXN0ZXIgZm9yIGN1cnJlbnQgQ1BVIGFuZCBhbGxvY2F0ZSBmcm9tIGl0LiAqL1xubW0vc3dhcGZpbGUuYzo5NjQ6c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG5tbS9zd2FwZmlsZS5jLTk2NS1cdFx0XHRcdFx0ICAgIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcGZpbGUuYz0xMDE1PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTAyOC1cdFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcbm1tL3N3YXBmaWxlLmM6MTAyOTpcdFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzaSwgY2ksIGZvbGlvLCBvZmZzZXQpO1xubW0vc3dhcGZpbGUuYy0xMDMwLVx0XHRpZiAoZm91bmQpXG4tLVxubW0vc3dhcGZpbGUuYz0xMDk4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsdXN0ZXJfYWxsb2Nfc3dhcF9lbnRyeShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xMTIzLVx0XHRcdFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcbm1tL3N3YXBmaWxlLmM6MTEyNDpcdFx0XHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgZm9saW8sIG9mZnNldCk7XG5tbS9zd2FwZmlsZS5jLTExMjUtXHRcdH0gZWxzZSB7XG4tLVxubW0vc3dhcGZpbGUuYz0xMzY3PXN0YXRpYyBib29sIHN3YXBfYWxsb2NfZmFzdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTM4Ni1cdFx0XHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xubW0vc3dhcGZpbGUuYzoxMzg3Olx0XHRhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzaSwgY2ksIGZvbGlvLCBvZmZzZXQpO1xubW0vc3dhcGZpbGUuYy0xMzg4LVx0fSBlbHNlIHtcbi0tXG5tbS9zd2FwZmlsZS5jPTIxNTk9c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjE3OC1cdFx0aWYgKGNsdXN0ZXJfaXNfdXNhYmxlKGNpLCAwKSlcbm1tL3N3YXBmaWxlLmM6MjE3OTpcdFx0XHRvZmZzZXQgPSBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzaSwgY2ksIE5VTEwsIHBjcF9vZmZzZXQpO1xubW0vc3dhcGZpbGUuYy0yMTgwLVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFN3YXAgYW5kIEhpYmVybmF0aW9uIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgc3dhcCBhbmQgaGliZXJuYXRpb24gY29kZS4gRmlyc3QsIGl0JiMzOTtzIGNsZWFyIGBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcmAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYXMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYSBidW5jaCBvZiBwbGFjZXMsIGluY2x1ZGluZyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHJvdXRpbmVzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSYjMzk7ZCBleHBlY3QuIFNvIHRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgYSBsb3Qgb2Ygc2NydXRpbnkuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIG5ldyBgU1dQX1RCX0hJQmAgc3RhdGUsIHNwZWNpZmljYWxseSBmb3IgaGliZXJuYXRpb24gc2xvdHMuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBoZXJlLiBJIHNlZSB0aGV5JiMzOTt2ZSBhZGp1c3RlZCBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgdG8gYXNzaWduIHRoaXMgbmV3IHN0YXRlIHdoZW4gYWxsb2NhdGluZyBmb3IgaGliZXJuYXRpb24uIE1ha2VzIHNlbnNlOyB3ZSBuZWVkIGEgZGlzdGluY3QgbWFya2VyLiBUaGV5JiMzOTt2ZSBhbHNvIHVwZGF0ZWQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgdG8gaGFuZGxlIGRpcmVjdGx5IGZyZWVpbmcgdGhlc2UgaGliZXJuYXRpb24gc2xvdHMuIEludGVyZXN0aW5nIOKAkyBza2lwcGluZyBhIHN0ZXAuIEFuZCwgYXMgZXhwZWN0ZWQsIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gaGFuZGxlIHRoZSBkaXJlY3QgZnJlZWluZyBhbmQgc2tpcHMgcmVjbGFpbSBhdHRlbXB0cy4gSXQgbWFrZXMgc2Vuc2UgdG8gYXZvaWQgcmVjbGFpbWluZyBhIHNsb3QgdGhhdCYjMzk7cyBqdXN0IGJlZW4gZnJlZWQuIEkgdW5kZXJzdGFuZCB0aGUgbG9naWMuIEZpbmFsbHksIHRoZSBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgaXMgYmVpbmcgdHdlYWtlZCB0byBwcmV2ZW50IG5vbi1zaGFkb3cgc2xvdHMgZnJvbSBwb2xsdXRpbmcgdGhlIHN3YXAgY2FjaGUsIHdoaWNoIGlzIHNlbnNpYmxlLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHJlYWxseSBkcmlsbCBkb3duIG9uIGFyZSBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcGluX3N5bmNgLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgdG91Y2ggcG9pbnRzLgoKSSBzaG91bGQgdmVyaWZ5IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGhpYmVybmF0aW9uIG5lZWRzIGBDT05GSUdfSElCRVJOQVRJT05gIGFuZCBzd2FwIG5lZWRzIGBDT05GSUdfU1dBUGAuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgYGtlcm5lbC9wb3dlci9LY29uZmlnYCBmb3IgdGhlIGBISUJFUk5BVElPTmAgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyBhIHNhbml0eSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhJQkVSTkFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9LY29uZmlnPTM1PWNvbmZpZyBISUJFUk5BVEVfQ0FMTEJBQ0tTXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMzctXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzozODpjb25maWcgSElCRVJOQVRJT05cbmtlcm5lbC9wb3dlci9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtIaWJlcm5hdGlvbiAoYWthICYjMzk7c3VzcGVuZCB0byBkaXNrJiMzOTspXCYjMzQ7XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctODMtXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzo4NDpjb25maWcgSElCRVJOQVRJT05fU05BUFNIT1RfREVWXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy04NS1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIHNuYXBzaG90IGRldmljZVwmIzM0O1xuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnPTk2PWNob2ljZVxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjEwMTpjb25maWcgSElCRVJOQVRJT05fQ09NUF9MWk9cbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMTA0LVxua2VybmVsL3Bvd2VyL0tjb25maWc6MTA1OmNvbmZpZyBISUJFUk5BVElPTl9DT01QX0xaNFxua2VybmVsL3Bvd2VyL0tjb25maWctMTA2LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0xMDk9ZW5kY2hvaWNlXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTAtXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMTE6Y29uZmlnIEhJQkVSTkFUSU9OX0RFRl9DT01QXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTItXHRzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIaWJlcm5hdGlvbiBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBxdWVzdGlvbiBpcyBzZXR0bGVkOiB5ZXAsIHdlICphYnNvbHV0ZWx5KiBuZWVkIGBDT05GSUdfSElCRVJOQVRJT05gLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBob29rcyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGhvdyBgU1dBUGAgaXMgZGVmaW5lZCwgb3IgaWYgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24sIGxpa2UgYENPTkZJR19TV0FQYCwgaXMgZXZlbiBkZWZpbmVkLiBUaGF0JiMzOTtsbCBiZSB0aGUgY3J1Y2lhbCBsaW5rIHRvIHNlZSBob3cgaGliZXJuYXRpb24gaW50ZXJhY3RzIHdpdGggdGhlIHN3YXAgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXBlbmRlbmN5IGlzIGRpcmVjdCwgb3IgaW5kaXJlY3QsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY1LVxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9taXBzL0tjb25maWctMTI2Ny1cdGJvb2xcbi0tXG5hcmNoL3NoL0tjb25maWc9MTI2PWNvbmZpZyBJT19UUkFQUEVEXG4tLVxuYXJjaC9zaC9LY29uZmlnLTEyOC1cbmFyY2gvc2gvS2NvbmZpZzoxMjk6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvc2gvS2NvbmZpZy0xMzAtXHRib29sXG4tLVxubW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcbi0tXG5tbS9LY29uZmlnLTExLVxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipTd2FwIGFuZCBIaWJlcm5hdGlvbjogRGVlcCBEaXZlKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHN3YXAgYW5kIGhpYmVybmF0aW9uIGNvbmZpZ3VyYXRpb25zIOKAkyBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX0hJQkVSTkFUSU9OYCBhcmUgdGhlIGNvcmUgdGhpbmdzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHJldmlzaXQgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCBzbyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBCdXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBfX3N3YXBfY2FjaGVfYWxsb2NgLCBhbmQgKnRoYXQqIGZ1bmN0aW9uLCBgX19zd2FwX2NhY2hlX2FsbG9jYCwgaXMgY2FsbGVkIGJ5IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gTm93LCBpcyBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgZXhwb3J0ZWQ/IEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgdGhpbmdzIGludGVycmVsYXRlIGluIGEgbGFyZ2VyIGNvbnRleHQuIExldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGl0cyB2aXNpYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIwMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBWaXNpYmlsaXR5IElzc3VlcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIHNvbWV0aGluZyBtaWdodCBiZSBhbWlzcyB3aXRoIHRoZSBmdW5jdGlvbiB2aXNpYmlsaXR5LiBJIHNlZSB0aGVzZSBmdW5jdGlvbnMsIGBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RgIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLCBhbmQgdGhleSYjMzk7cmUgZGVmaW5pdGVseSBub3QgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBOb3csIGJlY2F1c2UgdGhleSYjMzk7cmUgKm5vdCogc3RhdGljLCB0aGV5IHNob3VsZCwgaW4gdGhlb3J5LCBiZSB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgcmlnaHQ/IEJ1dCBJJiMzOTttIGp1c3QgZ2V0dGluZyBhIGh1bmNoIGhlcmUgYW5kIGNhbiYjMzk7dCBmaW5kIGhvdyB0aGV5IGFyZSBleHBvcnRlZC4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIHdoZXRoZXIgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyBleHBvcnRlZCwgZXZlbiBpZiB0aGV5IGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgc3RhdGljLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBsaW5rZXIgaXMgbWFraW5nIHRoZW0gYXZhaWxhYmxlLCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIG90aGVyIGFjY2VzcyBpc3N1ZSBnb2luZyBvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWN0dWFsbHkgYWNjZXNzaWJsZSB3aGVyZSB0aGV5IG5lZWQgdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MDIKCQkJCQkJCW91dHB1dDogMTQ4CgkJCQkJCQl0aG91Z2h0czogNjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIaWJlcm5hdGlvbiBTbG90IEhhbmRsaW5nIGluIHRoZSBTd2FwIENhY2hlKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgd2FzIHdyb25nLCB0aGVzZSBhcmVuJiMzOTt0IGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBMZXQmIzM5O3MgZGlnIGluLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBoZXJlLiBGaXJzdCwgSSYjMzk7bSBjaGVja2luZyB0aGUgc3RhdGljIGRlY2xhcmF0aW9uczsgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgIGlzIHN0YXRpYywgd2hpY2ggaXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGlzICpub3QqIHN0YXRpYywgc28gSSYjMzk7bGwga2VlcCBhbiBleWUgb24gdGhhdC4KCkkmIzM5O3ZlIGxpc3RlZCB0aGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gcmV2aWV3OiBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBhbmQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuIEhtbSwgd2FpdC4gYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgaXNuJiMzOTt0IHN0YXRpYywgYnV0IGl0ICppcyogaW50ZXJuYWwgdG8gdGhlIHN3YXAgaW1wbGVtZW50YXRpb24sIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIG5vdGUuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlaXIgbG9jYXRpb25zIHRvIGJlIGNlcnRhaW4uIENvbmZpcm1lZCwgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAgYW5kIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgYXJlIGluIGBtbS9zd2FwZmlsZS5jYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGluIGBtbS9zd2FwX3N0YXRlLmNgLiBGaW5hbGx5LCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBpcyBhbHNvIGluIGBtbS9zd2FwZmlsZS5jYC4KCkJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlLiBIaWJlcm5hdGlvbiBzbG90cyB3ZXJlIGJlaW5nIG1pc3Rha2VubHkgdHJlYXRlZCBhcyBzaGFkb3cgc2xvdHMsIGFuZCBjbHVzdGVyIHJlYWRhaGVhZCB3YXMgcG90ZW50aWFsbHkgYnJpbmdpbmcgdGhlbSBpbnRvIHRoZSBzd2FwIGNhY2hlLiBUaGUgc29sdXRpb24gaW50cm9kdWNlcyBhIG5ldyBgU1dQX1RCX0hJQmAgc3RhdGUsIHdoaWNoIGlzIGtleSB0byBkaXN0aW5ndWlzaCB0aGVtLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIHRvIHByZXZlbnQgbm9uLXNoYWRvdyBzbG90cyBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBjYWNoZS4gQWxzbywgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBoYXMgYmVlbiBtb2RpZmllZCB0byByZW1vdmUgYSByZWNsYWltIGNhbGwgc2luY2UgaGliZXJuYXRpb24gc2xvdHMgYXJlIG5vIGxvbmdlciByZWxldmFudCB0byB0aGUgY2FjaGUuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBmdXp6IHRoaXMgdGhvcm91Z2hseS4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBhbmQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuCgpUaGUgY29uZmlndXJhdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBISUJFUk5BVElPTmAgYW5kIGBTV0FQYCwgbmF0dXJhbGx5LgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIG5vbi1zdGF0aWMgZGVjbGFyYXRpb25zOiBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBpcyBkZWNsYXJlZCBpbiBgbW0vc3dhcC5oYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGFsc28gaW4gYG1tL3N3YXAuaGAuIEFuZCBmaW5hbGx5LCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhbmQgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBhcmUgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gQWxsIGNvbmZpcm1lZC4KCkxldCYjMzk7cyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gT2gsIGBzd2FwaW5fc3luY2AsIHdoaWNoIGNhbGxzIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gQnV0LCBzaW5jZSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgYWxyZWFkeSBhIGZvY3VzIHN5bWJvbCwgSSB0aGluayB3ZSYjMzk7cmUgY292ZXJlZCB0aGVyZS4KCkFscmlnaHQsIHRoYXQmIzM5O3MgZXZlcnl0aGluZyBJIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtISUJFUk5BVElPTiYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1dQX1RCX0hJQiBzdGF0ZSBmb3IgaGliZXJuYXRpb24gc2xvdHMgaW4gdGhlIHN3YXAgdGFibGUgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgYnJvdWdodCBpbnRvIHRoZSBzd2FwIGNhY2hlIGJ5IGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBtb2RpZmllcyBzd2FwIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgZm9yIGhpYmVybmF0aW9uIHNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaGliZXJuYXRpb24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtISUJFUk5BVElPTiYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1dQX1RCX0hJQiBzdGF0ZSBmb3IgaGliZXJuYXRpb24gc2xvdHMgaW4gdGhlIHN3YXAgdGFibGUgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgYnJvdWdodCBpbnRvIHRoZSBzd2FwIGNhY2hlIGJ5IGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBtb2RpZmllcyBzd2FwIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgZm9yIGhpYmVybmF0aW9uIHNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaGliZXJuYXRpb24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTA6NDEuMTY1MTgzNTQxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA3NDU5NzE4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSElCRVJOQVRJT05cIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RcIixcbiAgICBcInN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFNXUF9UQl9ISUIgc3RhdGUgZm9yIGhpYmVybmF0aW9uIHNsb3RzIGluIHRoZSBzd2FwIHRhYmxlIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZSBieSBjbHVzdGVyIHJlYWRhaGVhZC4gSXQgbW9kaWZpZXMgc3dhcCBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhpYmVybmF0aW9uIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTA6NDEuMTY1MTk1MjgxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ0NzIwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YTEwY2IzNWYzMmM3M2RhZTUzMDU0ZjFkNTRmYTc5NjYxZGI0YTQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMjI6NTA6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXFxuaW5kZXggNWJlODI1OTExZTY0NS4uOWYyY2M1OTE4NzEzZCAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcXG5AQCAtMTgwLDkgKzE4MCwxNCBAQCBzdGF0aWMgaW50IF9fc3dhcF9jYWNoZV9hZGRfY2hlY2soc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcXG4gXFx0aWYgKHN3cF90Yl9pc19mb2xpbyhvbGRfdGIpKVxcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4tXFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcXG4rXFx0LypcXG4rXFx0ICogT25seSBhIHN3YXBwZWQtb3V0IHNsb3QgbWF5IGJlIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZS5cXG4rXFx0ICogQ2x1c3RlciByZWFkYWhlYWQgd2Fsa3MgcmF3IG9mZnNldCByYW5nZXMsIHNvIGl0IGNhbiBsYW5kIG9uXFxuK1xcdCAqIHNsb3RzIHRoYXQgYXJlIGZyZWUsIGJhZCwgb3Igb3duZWQgYnkgaGliZXJuYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fCAhX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi1cXHRpZiAoc2hhZG93cCBcXHUwMDI2XFx1MDAyNiBzd3BfdGJfaXNfc2hhZG93KG9sZF90YikpXFxuK1xcdGlmIChzaGFkb3dwKVxcbiBcXHRcXHQqc2hhZG93cCA9IHN3cF90Yl90b19zaGFkb3cob2xkX3RiKTtcXG4gXFx0aWYgKG1lbWNnX2lkKVxcbiBcXHRcXHQqbWVtY2dfaWQgPSBfX3N3YXBfY2dyb3VwX2dldChjaSwgY2lfb2ZmKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF90YWJsZS5oIGIvbW0vc3dhcF90YWJsZS5oXFxuaW5kZXggZTY2MTNlNjJmOGQwZi4uYzFjNTE2YmNjMTdlNiAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwX3RhYmxlLmhcXG4rKysgYi9tbS9zd2FwX3RhYmxlLmhcXG5AQCAtMzAsNiArMzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XFxuICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdFxcbiAgKiBQb2ludGVyOiAgfC0tLS0tLS0tLS0tIFBvaW50ZXIgLS0tLS0tLS0tLXwxMDB8IC0gKFVudXNlZClcXG4gICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90XFxuKyAqIEhpYmVybjogICB8LS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XFxuICAqXFxuICAqIENPVU5UIGlzIGBTV1BfVEJfQ09VTlRfQklUU2AgbG9uZywgWiBpcyB0aGUgYFNXUF9UQl9aRVJPX0ZMQUdgIGJpdCxcXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxcbkBAIC01NCw2ICs1NSw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcXG4gICogICBhbGlnbmVkIHBvaW50ZXJzLlxcbiAgKlxcbiAgKiAtIEJhZDogU3dhcCBzbG90IGlzIHJlc2VydmVkLCBwcm90ZWN0cyBzd2FwIGhlYWRlciBvciBob2xlcyBvbiBzd2FwIGRldmljZXMuXFxuKyAqXFxuKyAqIC0gSGliZXJuOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQgYnkgaGliZXJuYXRpb24gZm9yIHRoZSBzdXNwZW5kIGltYWdlLCBhbmRcXG4rICogICBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlLlxcbiAgKi9cXG4gXFxuIC8qIE5VTEwgRW50cnksIGFsbCAwICovXFxuQEAgLTgxLDYgKzg1LDkgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xcbiAvKiBCYWQgc2xvdDogZW5kcyB3aXRoIDBiMTAwMCBhbmQgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi9cXG4gI2RlZmluZSBTV1BfVEJfQkFEXFx0XFx0KCh+MFVMKSBcXHUwMDNjXFx1MDAzYyAzKVxcbiBcXG4rLyogSGliZXJuYXRpb24gc2xvdDogZW5kcyB3aXRoIDBiMTAwMDAgYW5kIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovXFxuKyNkZWZpbmUgU1dQX1RCX0hJQlxcdFxcdCgofjBVTCkgXFx1MDAzY1xcdTAwM2MgNClcXG4rXFxuIC8qIE1hY3JvIGZvciBzaGFkb3cgb2Zmc2V0IGNhbGN1bGF0aW9uICovXFxuICNkZWZpbmUgU1dBUF9DT1VOVF9TSElGVFxcdFNXUF9UQl9GTEFHU19CSVRTXFxuIFxcbkBAIC0xNjYsNiArMTczLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxcbiBcXHRyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9CQUQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfaGliZXJuYXRpb24odW5zaWduZWQgbG9uZyBzd3BfdGIpXFxuK3tcXG4rXFx0cmV0dXJuIHN3cF90YiA9PSBTV1BfVEJfSElCO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2NvdW50YWJsZSh1bnNpZ25lZCBsb25nIHN3cF90YilcXG4ge1xcbiBcXHRyZXR1cm4gKHN3cF90Yl9pc19zaGFkb3coc3dwX3RiKSB8fCBzd3BfdGJfaXNfZm9saW8oc3dwX3RiKSB8fFxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IGRlYTJkM2IzNmUwNmYuLjRmYmExNzcwY2U2MTYgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtOTI4LDcgKzkyOCw3IEBAIHN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHQgKiB1cG9uIGZvbGlvIHVubWFwLlxcbiBcXHQgKlxcbiBcXHQgKiBFbHNlLCBpdCdzIGEgZXhjbHVzaXZlIG9yZGVyIDAgYWxsb2NhdGlvbiBmb3IgaGliZXJuYXRpb24uXFxuLVxcdCAqIFRoZSBzbG90IHN0YXJ0cyB3aXRoIGNvdW50ID09IDEgYW5kIG5ldmVyIGluY3JlYXNlcy5cXG4rXFx0ICogVGhlIHNsb3QgY2FycmllcyBubyBzd2FwIGNvdW50IGFuZCBpcyBmcmVlZCBieSBvZmZzZXQuXFxuIFxcdCAqL1xcbiBcXHRpZiAobGlrZWx5KGZvbGlvKSkge1xcbiBcXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcXG5AQCAtOTQwLDggKzk0MCw4IEBAIHN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHRcXHRvcmRlciA9IDA7XFxuIFxcdFxcdG5yX3BhZ2VzID0gMTtcXG4gXFx0XFx0c3dhcF9jbHVzdGVyX2Fzc2VydF9lbXB0eShjaSwgY2lfb2ZmLCAxLCBmYWxzZSk7XFxuLVxcdFxcdC8qIEZha2Ugc2hhZG93IHBsYWNlaG9sZGVyIHdpdGggbm8gZmxhZywgaGliZXJuYXRpb24gZG9lcyBub3QgdXNlIHRoZSB6ZXJvbWFwICovXFxuLVxcdFxcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgX19zd3BfdGJfbWtfY291bnQoc2hhZG93X3RvX3N3cF90YihOVUxMLCAwKSwgMSkpO1xcbitcXHRcXHQvKiBFeGNsdXNpdmVseSBvd25lZCBieSBoaWJlcm5hdGlvbiwgbXVzdCBuZXZlciBlbnRlciB0aGUgc3dhcCBjYWNoZSAqL1xcbitcXHRcXHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIFNXUF9UQl9ISUIpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBBbGxvY2F0aW9uIHdpdGhvdXQgZm9saW8gaXMgb25seSBwb3NzaWJsZSB3aXRoIGhpYmVybmF0aW9uICovXFxuIFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG5AQCAtMTkyOSw5ICsxOTI5LDExIEBAIHZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4gXFx0XFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogRnJlZWluZyBpcyBkb25lIGFmdGVyIHJlbGVhc2Ugb2YgdGhlIGxhc3Qgc3dhcCBjb3VudFxcbi1cXHRcXHQgKiByZWYsIG9yIGFmdGVyIHN3YXAgY2FjaGUgaXMgZHJvcHBlZFxcbitcXHRcXHQgKiByZWYsIG9yIGFmdGVyIHN3YXAgY2FjaGUgaXMgZHJvcHBlZC4gQSBoaWJlcm5hdGlvbiBzbG90XFxuK1xcdFxcdCAqIGhhcyBubyBjb3VudCBhbmQgaXMgZnJlZWQgZGlyZWN0bHkgYnkgaXRzIG93bmVyLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0Vk1fV0FSTl9PTighc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIFxcdTAwM2UgMSk7XFxuK1xcdFxcdFZNX1dBUk5fT04oIXN3cF90Yl9pc19oaWJlcm5hdGlvbihvbGRfdGIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIFxcdTAwM2UgMSkpO1xcbiBcXG4gXFx0XFx0LyogUmVzZXR0aW5nIHRoZSBzbG90IHRvIE5VTEwgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBmbGFncy4gKi9cXG4gXFx0XFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTtcXG5AQCAtMjIwMSwxMiArMjIwMyw4IEBAIHZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXFxuIFxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7XFxuIFxcbiBcXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBvZmZzZXQpO1xcbi1cXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpO1xcbiBcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSLCAxKTtcXG4gXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuLVxcbi1cXHQvKiBJbiB0aGVvcnkgcmVhZGFoZWFkIG1pZ2h0IGFkZCBpdCB0byB0aGUgc3dhcCBjYWNoZSBieSBhY2NpZGVudCAqL1xcbi1cXHRfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUwOjQxLjc5MDgwNTAyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwMTIwMzM5NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhJQkVSTkFUSU9OXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwiX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTV1BfVEJfSElCIHN0YXRlIGZvciBoaWJlcm5hdGlvbiBzbG90cyBpbiB0aGUgc3dhcCB0YWJsZSB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUgYnkgY2x1c3RlciByZWFkYWhlYWQuIEl0IG1vZGlmaWVzIHN3YXAgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYyBmb3IgaGliZXJuYXRpb24gc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBoaWJlcm5hdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlhMTBjYjM1ZjMyYzczZGFlNTMwNTRmMWQ1NGZhNzk2NjFkYjRhNDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjUwOjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA1YmU4MjU5MTFlNjQ1Li45ZjJjYzU5MTg3MTNkIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0xODAsOSArMTgwLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdGlmIChzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxuK1x0LypcbitcdCAqIE9ubHkgYSBzd2FwcGVkLW91dCBzbG90IG1heSBiZSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuXG4rXHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cbitcdCAqIHNsb3RzIHRoYXQgYXJlIGZyZWUsIGJhZCwgb3Igb3duZWQgYnkgaGliZXJuYXRpb24uXG4rXHQgKi9cbitcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXHRpZiAoc2hhZG93cCBcdTAwMjZcdTAwMjYgc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpKVxuK1x0aWYgKHNoYWRvd3ApXG4gXHRcdCpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpO1xuIFx0aWYgKG1lbWNnX2lkKVxuIFx0XHQqbWVtY2dfaWQgPSBfX3N3YXBfY2dyb3VwX2dldChjaSwgY2lfb2ZmKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3RhYmxlLmggYi9tbS9zd2FwX3RhYmxlLmhcbmluZGV4IGU2NjEzZTYyZjhkMGYuLmMxYzUxNmJjYzE3ZTYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3RhYmxlLmhcbisrKyBiL21tL3N3YXBfdGFibGUuaFxuQEAgLTMwLDYgKzMwLDcgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xuICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdFxuICAqIFBvaW50ZXI6ICB8LS0tLS0tLS0tLS0gUG9pbnRlciAtLS0tLS0tLS0tfDEwMHwgLSAoVW51c2VkKVxuICAqIEJhZDogICAgICB8LS0tLS0tLS0tLS0tLSAxIC0tLS0tLS0tLS0tLS18MTAwMHwgLSBCYWQgc2xvdFxuKyAqIEhpYmVybjogICB8LS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XG4gICpcbiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxuQEAgLTU0LDYgKzU1LDkgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xuICAqICAgYWxpZ25lZCBwb2ludGVycy5cbiAgKlxuICAqIC0gQmFkOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQsIHByb3RlY3RzIHN3YXAgaGVhZGVyIG9yIGhvbGVzIG9uIHN3YXAgZGV2aWNlcy5cbisgKlxuKyAqIC0gSGliZXJuOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQgYnkgaGliZXJuYXRpb24gZm9yIHRoZSBzdXNwZW5kIGltYWdlLCBhbmRcbisgKiAgIG11c3QgbmV2ZXIgZW50ZXIgdGhlIHN3YXAgY2FjaGUuXG4gICovXG4gXG4gLyogTlVMTCBFbnRyeSwgYWxsIDAgKi9cbkBAIC04MSw2ICs4NSw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcbiAvKiBCYWQgc2xvdDogZW5kcyB3aXRoIDBiMTAwMCBhbmQgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi9cbiAjZGVmaW5lIFNXUF9UQl9CQURcdFx0KCh+MFVMKSBcdTAwM2NcdTAwM2MgMylcbiBcbisvKiBIaWJlcm5hdGlvbiBzbG90OiBlbmRzIHdpdGggMGIxMDAwMCBhbmQgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi9cbisjZGVmaW5lIFNXUF9UQl9ISUJcdFx0KCh+MFVMKSBcdTAwM2NcdTAwM2MgNClcbitcbiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqL1xuICNkZWZpbmUgU1dBUF9DT1VOVF9TSElGVFx0U1dQX1RCX0ZMQUdTX0JJVFNcbiBcbkBAIC0xNjYsNiArMTczLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuIFx0cmV0dXJuIHN3cF90YiA9PSBTV1BfVEJfQkFEO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2hpYmVybmF0aW9uKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuK3tcbitcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0hJQjtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpXG4ge1xuIFx0cmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uNGZiYTE3NzBjZTYxNiAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC05MjgsNyArOTI4LDcgQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHQgKiB1cG9uIGZvbGlvIHVubWFwLlxuIFx0ICpcbiBcdCAqIEVsc2UsIGl0J3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi5cbi1cdCAqIFRoZSBzbG90IHN0YXJ0cyB3aXRoIGNvdW50ID09IDEgYW5kIG5ldmVyIGluY3JlYXNlcy5cbitcdCAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KGZvbGlvKSkge1xuIFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbkBAIC05NDAsOCArOTQwLDggQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdG9yZGVyID0gMDtcbiBcdFx0bnJfcGFnZXMgPSAxO1xuIFx0XHRzd2FwX2NsdXN0ZXJfYXNzZXJ0X2VtcHR5KGNpLCBjaV9vZmYsIDEsIGZhbHNlKTtcbi1cdFx0LyogRmFrZSBzaGFkb3cgcGxhY2Vob2xkZXIgd2l0aCBubyBmbGFnLCBoaWJlcm5hdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHplcm9tYXAgKi9cbi1cdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBfX3N3cF90Yl9ta19jb3VudChzaGFkb3dfdG9fc3dwX3RiKE5VTEwsIDApLCAxKSk7XG4rXHRcdC8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovXG4rXHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgU1dQX1RCX0hJQik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBBbGxvY2F0aW9uIHdpdGhvdXQgZm9saW8gaXMgb25seSBwb3NzaWJsZSB3aXRoIGhpYmVybmF0aW9uICovXG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbkBAIC0xOTI5LDkgKzE5MjksMTEgQEAgdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xuIFx0XHQvKlxuIFx0XHQgKiBGcmVlaW5nIGlzIGRvbmUgYWZ0ZXIgcmVsZWFzZSBvZiB0aGUgbGFzdCBzd2FwIGNvdW50XG4tXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkXG4rXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3RcbitcdFx0ICogaGFzIG5vIGNvdW50IGFuZCBpcyBmcmVlZCBkaXJlY3RseSBieSBpdHMgb3duZXIuXG4gXHRcdCAqL1xuLVx0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXHUwMDNlIDEpO1xuK1x0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fCBfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSBcdTAwM2UgMSkpO1xuIFxuIFx0XHQvKiBSZXNldHRpbmcgdGhlIHNsb3QgdG8gTlVMTCBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGZsYWdzLiAqL1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIG51bGxfdG9fc3dwX3RiKCkpO1xuQEAgLTIyMDEsMTIgKzIyMDMsOCBAQCB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XG4tXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpO1xuIFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi1cbi1cdC8qIEluIHRoZW9yeSByZWFkYWhlYWQgbWlnaHQgYWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGJ5IGFjY2lkZW50ICovXG4tXHRfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MDo0MS43OTA4MDkxMzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTEyMDc5NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgU3dhcC9IaWJlcm5hdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGNsZWFybHkgcGxheWluZyB3aXRoIHRoZSBoaWJlcm5hdGlvbiBzd2FwIHNsb3QgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIGZpbGVzOiBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBfdGFibGUuaGAsIGFuZCBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZS4gSXQncyBmdW5jdGlvbmFsLCBtZWFuaW5nIGl0J3MgcmVhY2hhYmxlIGFuZCBsaWtlbHkgdXNlZCBieSB0aGUga2VybmVsLCBhbmQgdGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gcmVmaW5lIGhvdyBoaWJlcm5hdGlvbiBzd2FwIHNsb3RzIGFyZSBoYW5kbGVkIGluIHRoZSBzd2FwIHRhYmxlLlxuXG5TcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgdGhpcyBuZXcgYFNXUF9UQl9ISUJgIHN0YXRlLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3Igb2YgdGhlIGRpcmVjdGlvbiB0aGlzIHBhdGNoIGlzIHRha2luZy4gSXQncyBlc3NlbnRpYWxseSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBmbGFnIGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhpcyBsb29rcyBsaWtlIGEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgb3ZlciB0aGUgcHJldmlvdXMgbWVjaGFuaXNtIGludm9sdmluZyBhIFwic2hhZG93IHBsYWNlaG9sZGVyLlwiIEknbSBzZWVpbmcgY2hhbmdlcyBpbiBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2Agd2hlcmUgaXQncyBub3cgc2V0dGluZyB0aGUgYFNXUF9UQl9ISUJgIHN0YXRlLCBhbmQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2Agbm93IGhhcyB0aGUgY2FwYWJpbGl0eSBvZiBmcmVlaW5nIHRoZSBoaWJlcm5hdGlvbiBzbG90cyBkaXJlY3RseSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgdG8gaW1wcm92ZSB0aGUgZWZmaWNpZW5jeS5cblxuVGhlIG1vc3QgaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9uLCB0aG91Z2gsIGhhcyB0byBiZSB0aGUgb25lIGluIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYC4gSXQgc2VlbXMgdGhhdCB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHByZXZlbnRpbmcgbm9uLXNoYWRvdyBzbG90cyBmcm9tIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZS5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zLiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIHNjb3BlLCBzbyBpdCdzIHByb2JhYmx5IGNhbGxlZCBmcm9tIGEgaGFuZGZ1bCBvZiBwbGFjZXMgd2l0aGluIHRoZSBzYW1lIG1vZHVsZSwgd2hpY2ggaXMgZ29vZC4gYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBpcyBleHBvcnRlZC9ub24tc3RhdGljLCBzbyBpdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBUEksIG1lYW5pbmcgaXQncyBwcm9iYWJseSBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMgaW4gdGhlIGtlcm5lbC4gYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgYXBwZWFycyB0byBiZSBub24tc3RhdGljLiBGaW5hbGx5LCBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgaXMgc3RhdGljLiBUaGF0IHNob3VsZCBpbmZvcm0gbXkgZm9jdXMuXG5cblRpbWUgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgIGFuZCBzZWUgd2hvJ3MgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgYW5kIHdoZXJlIHRoZXkncmUgZGVmaW5lZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTA6NDcuOTAyODkzNTE2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjg0MTQzMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9NDAyPXN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDAzOnZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwNC1cXG4tLVxcbmtlcm5lbC9wb3dlci9zd2FwLmM9MTY5PXNlY3Rvcl90IGFsbG9jX3N3YXBkZXZfYmxvY2soaW50IHN3YXApXFxuLS1cXG5rZXJuZWwvcG93ZXIvc3dhcC5jLTE3OS1cXHRcXHRpZiAoc3dzdXNwX2V4dGVudHNfaW5zZXJ0KG9mZnNldCkpXFxua2VybmVsL3Bvd2VyL3N3YXAuYzoxODA6XFx0XFx0XFx0c3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5KHN3YXAsIG9mZnNldCkpO1xcbmtlcm5lbC9wb3dlci9zd2FwLmMtMTgxLVxcdFxcdGVsc2VcXG4tLVxcbmtlcm5lbC9wb3dlci9zd2FwLmM9MTg3PXZvaWQgZnJlZV9hbGxfc3dhcF9wYWdlcyhpbnQgc3dhcClcXG4tLVxcbmtlcm5lbC9wb3dlci9zd2FwLmMtMjAyLVxcdFxcdGZvciAob2Zmc2V0ID0gZXh0LVxcdTAwM2VzdGFydDsgb2Zmc2V0IFxcdTAwM2M9IGV4dC1cXHUwMDNlZW5kOyBvZmZzZXQrKylcXG5rZXJuZWwvcG93ZXIvc3dhcC5jOjIwMzpcXHRcXHRcXHRzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnkoc3dhcCwgb2Zmc2V0KSk7XFxua2VybmVsL3Bvd2VyL3N3YXAuYy0yMDQtXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTIxNTk9c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTkzLS8qKlxcbm1tL3N3YXBmaWxlLmM6MjE5NDogKiBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCgpIC0gRnJlZSBhIHN3YXAgc2xvdCBhbGxvY2F0ZWQgZm9yIGhpYmVybmF0aW9uLlxcbm1tL3N3YXBmaWxlLmMtMjE5NS0gKiBAZW50cnk6IHN3YXAgZW50cnkgdG8gZnJlZS5cXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjE5OC0gKi9cXG5tbS9zd2FwZmlsZS5jOjIxOTk6dm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSlcXG5tbS9zd2FwZmlsZS5jLTIyMDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MDo1My4yNzEzMTU1NDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcxNDg2NDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEhpYmVybmF0aW9uIFN3YXAgU2xvdCBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgc28gYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBpcyB0aGUgZnVuY3Rpb24gd2UncmUgY29uY2VybmVkIHdpdGgsIGFuZCBpdHMgY2FsbCBjb250ZXh0IGlzIGNsZWFybHkgd2l0aGluIGBrZXJuZWwvcG93ZXIvc3dhcC5jYC4gVGhhdCdzIHRoZSBleHBlY3RlZCBwbGFjZSwgbWFuYWdpbmcgc3dhcCBvcGVyYXRpb25zIGR1cmluZyBoaWJlcm5hdGlvbi4gTm93LCB0aGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgc2xvdCBpcyBhY3R1YWxseSBmcmVlZC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgZGVhbGxvY2F0aW5nIHN3YXAgY2x1c3RlcnMgbGlrZWx5IHJlc2lkZXMuIEl0J3MgdGhlIGJ1aWxkaW5nIGJsb2NrIG9mIG1ha2luZyBhIHN3YXAgZW50cnkgdXNhYmxlIGFnYWluLiBXZSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVudHJpZXMgYXJlIGZsYWdnZWQgYXMgZnJlZSB3aXRoaW4gdGhlIGNsdXN0ZXIuIEtub3dpbmcgaG93IHRoZSBmcmVlIGxpc3QgaXMgY29uc3RydWN0ZWQgYW5kIG1haW50YWluZWQgd2l0aGluIHRoZSBzd2FwIHNwYWNlIGlzIHRoZSBjcml0aWNhbCBsaW5rIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUwOjU2LjQ0MjgwNzAwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1NDEzMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmg9MjY5PXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi0tXFxubW0vc3dhcC5oLTI3MS0vKiBGb3IgaW50ZXJuYWwgdXNlICovXFxubW0vc3dhcC5oOjI3MjpleHRlcm4gdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXAuaC0yNzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0yNjE9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTI5Ni1cXHRpZiAoIWZvbGlvX3N3YXBwZWQpIHtcXG5tbS9zd2FwX3N0YXRlLmM6Mjk3OlxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX3N0YXJ0LCBucl9wYWdlcyk7XFxubW0vc3dhcF9zdGF0ZS5jLTI5OC1cXHR9IGVsc2UgaWYgKG5lZWRfZnJlZSkge1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMwMS1cXHRcXHRcXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpKSlcXG5tbS9zd2FwX3N0YXRlLmM6MzAyOlxcdFxcdFxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX29mZiwgMSk7XFxubW0vc3dhcF9zdGF0ZS5jLTMwMy1cXHRcXHR9IHdoaWxlICgrK2NpX29mZiBcXHUwMDNjIGNpX2VuZCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTYyMi1cXHRcXHRpZiAoY2lfYmF0Y2ggIT0gLTEpIHtcXG5tbS9zd2FwZmlsZS5jOjE2MjM6XFx0XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfYmF0Y2gsIGNpX29mZiAtIGNpX2JhdGNoKTtcXG5tbS9zd2FwZmlsZS5jLTE2MjQtXFx0XFx0XFx0Y2lfYmF0Y2ggPSAtMTtcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTYyOC1cXHRpZiAoY2lfYmF0Y2ggIT0gLTEpXFxubW0vc3dhcGZpbGUuYzoxNjI5OlxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XFxubW0vc3dhcGZpbGUuYy0xNjMwLVxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xODg0PXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE5MTQtICovXFxubW0vc3dhcGZpbGUuYzoxOTE1OnZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG5tbS9zd2FwZmlsZS5jLTE5MTYtXFx0XFx0XFx0XFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTIxOTk9dm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjIwNS1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBvZmZzZXQpO1xcbm1tL3N3YXBmaWxlLmM6MjIwNjpcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSLCAxKTtcXG5tbS9zd2FwZmlsZS5jLTIyMDctXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUxOjAxLjAwODIyODQ4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTAxMTM1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipJbnRlcm5hbCBTd2FwIEZ1bmN0aW9uIENvbmZ1c2lvbioqXG5cbkhtbSwgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuIFRoYXQncyBhbiBpbnRlcmVzdGluZyBvbmUuIEl0J3MgZXhwb3J0ZWQgdG8gYG1tL3N3YXAuaGAsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwgc2luY2UgaXQgc2VlbXMgaW5oZXJlbnRseSBpbnRlcm5hbCB0byB0aGUgc3dhcCBpbXBsZW1lbnRhdGlvbi4gSXQncyB3b3J0aCBkaWdnaW5nIGludG8gd2h5IGl0J3MgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBzd2FwIGNvZGUgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGFydCBieSBpZGVudGlmeWluZyB0aGUgY2FsbGVycyBvZiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5lZWQgdG8gZXhwb3J0IHRoZSBmaXJzdCBmdW5jdGlvbi4gT25jZSBJIGhhdmUgdGhlIGNhbGwgc2l0ZXMgbWFwcGVkIG91dCwgSSB3aWxsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGdhdWdlIGlmIHRoZSBleHRlcm5hbCB2aXNpYmlsaXR5IGlzIGNvcnJlY3QsIG9yIGp1c3QgYW4gYXJ0aWZhY3Qgb2YgYW4gb2xkZXIgZGVzaWduLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgd2h5IHRoYXQgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZXhwb3NlZCwgb3IgaWYgdGhhdCBpcyBldmVuIHRoZSBjb3JyZWN0IHNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTcyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6MDQuNDU4MzQ1NTg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODgyNDI4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX2NhY2hlX2FkZF9jaGVja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwX3N0YXRlLmM9MTM0PXZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0xNDUtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjE0NjogKiBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrIC0gQ2hlY2sgaWYgYSByYW5nZSBpcyBzdWl0YWJsZSBmb3IgYWRkaW5nIGEgZm9saW8uXFxubW0vc3dhcF9zdGF0ZS5jLTE0Ny0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMTYwLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzoxNjE6c3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcF9zdGF0ZS5jLTE2Mi1cXHRcXHRcXHRcXHQgIHN3cF9lbnRyeV90IHRhcmdfZW50cnksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDEzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTQzMC1cXHRzcGluX2xvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG5tbS9zd2FwX3N0YXRlLmM6NDMxOlxcdGVyciA9IF9fc3dhcF9jYWNoZV9hZGRfY2hlY2soY2ksIHRhcmdfZW50cnksIG5yX3BhZ2VzLCBOVUxMLCBOVUxMKTtcXG5tbS9zd2FwX3N0YXRlLmMtNDMyLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNDUzLVxcdHNwaW5fbG9jayhcXHUwMDI2Y2ktXFx1MDAzZWxvY2spO1xcbm1tL3N3YXBfc3RhdGUuYzo0NTQ6XFx0ZXJyID0gX19zd2FwX2NhY2hlX2FkZF9jaGVjayhjaSwgdGFyZ19lbnRyeSwgbnJfcGFnZXMsIFxcdTAwMjZzaGFkb3csIFxcdTAwMjZtZW1jZ19pZCk7XFxubW0vc3dhcF9zdGF0ZS5jLTQ1NS1cXHRpZiAodW5saWtlbHkoZXJyKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MTowNy40NDY1OTQyOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDE1MTY1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBDYWNoZSBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgc28gYF9fc3dhcF9jYWNoZV9hbGxvY2AgaXMgY2FsbGluZyBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIFRoYXQncyB0aGUga2V5IHJlbGF0aW9uc2hpcCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCBmcm9tIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCBjYWxsLiBUaGUgYWxsb2NhdGlvbiBsb2dpYyBpcyBjcml0aWNhbCwgYnV0IHRoZSBjYWxsZXJzIGFyZSBnb2luZyB0byBnaXZlIG1lIHRoZSBiaWcgcGljdHVyZS4gVGhhdCdzIHRoZSBkaXJlY3Rpb24gSSdtIHRha2luZyB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjM2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6MTAuMzg4MTEzNDc3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ3NTU2NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwX3N0YXRlLmM9MzY2PXZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy00MTItICovXFxubW0vc3dhcF9zdGF0ZS5jOjQxMzpzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwX3N0YXRlLmMtNDE0LVxcdFxcdFxcdFxcdFxcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz01MTg9c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MzMtXFx0ZG8ge1xcbm1tL3N3YXBfc3RhdGUuYzo1MzQ6XFx0XFx0cmV0ID0gX19zd2FwX2NhY2hlX2FsbG9jKGNpLCB0YXJnX2VudHJ5LCBnZnAsIG9yZGVyLFxcbm1tL3N3YXBfc3RhdGUuYy01MzUtXFx0XFx0XFx0XFx0XFx0IHZtZiwgbXBvbCwgaWx4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6MTQuMDM1Njk0NDUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mzc2MzI5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIENhbGwgQ2hhaW4qKlxuXG5SaWdodCwgc28gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0J3MgY2FsbGluZyBgX19zd2FwX2NhY2hlX2FsbG9jYC4gVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kIGlzICp3aHkqPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIElzIHRoaXMgYSBjb21tb24gcGF0aCBmb3IgYWxsb2NhdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBsdXJraW5nIHdpdGhpbiB0aG9zZSBjYWxscz9cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEknbGwgdXNlIHdoYXRldmVyIHRvb2xzIGFyZSBhdCBteSBkaXNwb3NhbCAtIGBncmVwYCwgYG9iamR1bXBgLCBtYXliZSBldmVuIGEgc3RhdGljIGFuYWx5c2lzIHRvb2wg4oCTIHRvIGdldCBhIGxpc3Qgb2YgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBpbnZva2UgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgY3J1Y2lhbC4gQXJlIHRoZXNlIGNhbGxzIGNvbWluZyBmcm9tIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHN3YXAgaW4vb3V0IHJvdXRpbmVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBzaXRlcyB3aWxsIGdpdmUgbWUgYW4gaW1tZWRpYXRlIHNlbnNlIG9mIHRoZSAqcHVycG9zZSogYmVoaW5kIHRoZSBhbGxvY2F0aW9uLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgdGhlIHJhdGlvbmFsZSBmb3IgdGhlIGRlc2lnbiBvZiB0aGUgZnVuY3Rpb24sIGFuZCBob3BlZnVsbHkgZXhwb3NlIGFueSBvcHBvcnR1bml0aWVzIHRvIGltcHJvdmUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MToxNy44NzMzMzA5MzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTQ0NDQyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmg9MzM1PXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oOjMzNjpzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG5tbS9zd2FwLmgtMzM3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTQxMz1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MDEtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjUwMjogKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtNTAzLSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTE3LSAqL1xcbm1tL3N3YXBfc3RhdGUuYzo1MTg6c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG5tbS9zd2FwX3N0YXRlLmMtNTE5LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY0Nj1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjU1LVxcdFxcdFxcdHJldHVybiBmb2xpbztcXG5tbS9zd2FwX3N0YXRlLmM6NjU2OlxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XFxubW0vc3dhcF9zdGF0ZS5jLTY1Ny1cXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz02ODc9c3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy02OTYtXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbm1tL3N3YXBfc3RhdGUuYzo2OTc6XFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy02OTgtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE4MzA9dm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTg3Mi0gKiAgICAgLi4uXFx0XFx0XFx0XFx0c3dhcG9mZitzd2Fwb25cXG5tbS9zd2FwZmlsZS5jOjE4NzM6ICogICAgIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oKVxcbm1tL3N3YXBmaWxlLmMtMTg3NC0gKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxcbi0tXFxubW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtMTAwMy1cXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbm1tL3pzd2FwLmM6MTAwNDpcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG5tbS96c3dhcC5jLTEwMDUtXFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MToyMC42ODc3ODA5MzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NjYyMzEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBDYWxsZXJzKipcblxuQWxyaWdodCwgc28gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGNydWNpYWwuIEl0J3MgdGhlIGFsbG9jYXRpb24gcG9pbnQgZm9yIHN3YXAgY2FjaGUgZm9saW9zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UgcGF0dGVybnMuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gVGhhdCBzZWVtcyByZWFzb25hYmxlIOKAkyB0aG9zZSBhbGwgbWFrZSBzZW5zZSBhcyBwbGFjZXMgd2hlcmUgd2UnZCBuZWVkIHRvIGJyaW5nIGRhdGEgaW50byB0aGUgc3dhcCBjYWNoZSBvciB3cml0ZSBpdCBiYWNrLiBObyBvYnZpb3VzIHJlZCBmbGFncyB0aGVyZSwgYW5kIHRoZXkncmUgYWxsIHJlYWNoYWJsZTsgdGhlIGNhbGwgZmxvdyBzZWVtcyBjb2hlcmVudCBzbyBmYXIuXG5cbk5vdywgSSByZWFsbHkgd2FudCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFsbG9jYXRpb24gaXRzZWxmLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgIHNpbmNlIHRoYXQncyBwcm9iYWJseSB3aGVyZSB0aGUgYWN0dWFsIGFsbG9jYXRpb24gbG9naWMgcmVzaWRlcyB3aXRoaW4gdGhlIGNsdXN0ZXIuIFVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMga2V5IHRvIG9wdGltaXppbmcgdGhpcywgYW5kIHRyYWNpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBtaWdodCBleHBvc2UgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBpbXByb3ZlbWVudCBpbiBvdXIgc3dhcCBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTY1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6MjQuMjM0NDA5NTM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjcyNjE4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz04ODQ9c3RhdGljIGJvb2wgY2x1c3Rlcl9zY2FuX3JhbmdlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtOTEwLVxcbm1tL3N3YXBmaWxlLmM6OTExOnN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtOTEyLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYz05NjQ9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTk5NC1cXHRcXHR9XFxubW0vc3dhcGZpbGUuYzo5OTU6XFx0XFx0aWYgKCFfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHNpLCBjaSwgZm9saW8sIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpKVxcbm1tL3N3YXBmaWxlLmMtOTk2LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MToyNi45MDcwMzIzNDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MTQ4OTcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXAgQ2x1c3RlciBBbGxvY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBgYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXJgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGluaXRpYXRlcyB0aGUgYWxsb2NhdGlvbiBvZiBzd2FwIGNsdXN0ZXIgZW50cmllcy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYCBhbmQgbG9vayBhdCBpdHMgY2FsbGluZyBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaG93IGBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcmAgaXMgYmVpbmcgdXNlZCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3dhcCBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBGcm9tIHRoZXJlLCBJIHdpbGwgaW52ZXN0aWdhdGUgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgLCB0byBkaXNjb3ZlciBob3cgdGhlIGVudHJpZXMgYXJlIGFsbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUxOjI5Ljg1ODUyNjUyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMDgxOTEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zd2FwX3NjYW5fY2x1c3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTkxMT1zdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtOTYzLS8qIFRyeSB1c2UgYSBuZXcgY2x1c3RlciBmb3IgY3VycmVudCBDUFUgYW5kIGFsbG9jYXRlIGZyb20gaXQuICovXFxubW0vc3dhcGZpbGUuYzo5NjQ6c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy05NjUtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEwMTU9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fbGlzdChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEwMjgtXFx0XFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcXG5tbS9zd2FwZmlsZS5jOjEwMjk6XFx0XFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzaSwgY2ksIGZvbGlvLCBvZmZzZXQpO1xcbm1tL3N3YXBmaWxlLmMtMTAzMC1cXHRcXHRpZiAoZm91bmQpXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEwOTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTEyMy1cXHRcXHRcXHRcXHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xcbm1tL3N3YXBmaWxlLmM6MTEyNDpcXHRcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgZm9saW8sIG9mZnNldCk7XFxubW0vc3dhcGZpbGUuYy0xMTI1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEzNjc9c3RhdGljIGJvb2wgc3dhcF9hbGxvY19mYXN0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEzODYtXFx0XFx0XFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcXG5tbS9zd2FwZmlsZS5jOjEzODc6XFx0XFx0YWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc2ksIGNpLCBmb2xpbywgb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jLTEzODgtXFx0fSBlbHNlIHtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjE1OT1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxNzgtXFx0XFx0aWYgKGNsdXN0ZXJfaXNfdXNhYmxlKGNpLCAwKSlcXG5tbS9zd2FwZmlsZS5jOjIxNzk6XFx0XFx0XFx0b2Zmc2V0ID0gYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc2ksIGNpLCBOVUxMLCBwY3Bfb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jLTIxODAtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MTozMi42ODkzNTAxMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ1MDAzMDE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU3dhcCBhbmQgSGliZXJuYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlc2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgc3dhcCBhbmQgaGliZXJuYXRpb24gY29kZS4gRmlyc3QsIGl0J3MgY2xlYXIgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYCBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBhcyBpdCdzIGNhbGxlZCBmcm9tIGEgYnVuY2ggb2YgcGxhY2VzLCBpbmNsdWRpbmcgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyByb3V0aW5lcywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknZCBleHBlY3QuIFNvIHRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgYSBsb3Qgb2Ygc2NydXRpbnkuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGBTV1BfVEJfSElCYCBzdGF0ZSwgc3BlY2lmaWNhbGx5IGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaGVyZS4gSSBzZWUgdGhleSd2ZSBhZGp1c3RlZCBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgdG8gYXNzaWduIHRoaXMgbmV3IHN0YXRlIHdoZW4gYWxsb2NhdGluZyBmb3IgaGliZXJuYXRpb24uIE1ha2VzIHNlbnNlOyB3ZSBuZWVkIGEgZGlzdGluY3QgbWFya2VyLiBUaGV5J3ZlIGFsc28gdXBkYXRlZCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCB0byBoYW5kbGUgZGlyZWN0bHkgZnJlZWluZyB0aGVzZSBoaWJlcm5hdGlvbiBzbG90cy4gSW50ZXJlc3Rpbmcg4oCTIHNraXBwaW5nIGEgc3RlcC4gQW5kLCBhcyBleHBlY3RlZCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBoYXMgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgdGhlIGRpcmVjdCBmcmVlaW5nIGFuZCBza2lwcyByZWNsYWltIGF0dGVtcHRzLiBJdCBtYWtlcyBzZW5zZSB0byBhdm9pZCByZWNsYWltaW5nIGEgc2xvdCB0aGF0J3MganVzdCBiZWVuIGZyZWVkLiBJIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLiBGaW5hbGx5LCB0aGUgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIGlzIGJlaW5nIHR3ZWFrZWQgdG8gcHJldmVudCBub24tc2hhZG93IHNsb3RzIGZyb20gcG9sbHV0aW5nIHRoZSBzd2FwIGNhY2hlLCB3aGljaCBpcyBzZW5zaWJsZS5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHJlYWxseSBkcmlsbCBkb3duIG9uIGFyZSBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcGluX3N5bmNgLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgdG91Y2ggcG9pbnRzLlxuXG5JIHNob3VsZCB2ZXJpZnkgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJJ20gYXNzdW1pbmcgdGhhdCBoaWJlcm5hdGlvbiBuZWVkcyBgQ09ORklHX0hJQkVSTkFUSU9OYCBhbmQgc3dhcCBuZWVkcyBgQ09ORklHX1NXQVBgLiBMZXQncyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgYGtlcm5lbC9wb3dlci9LY29uZmlnYCBmb3IgdGhlIGBISUJFUk5BVElPTmAgY29uZmlndXJhdGlvbi4gVGhhdCdzIGEgc2FuaXR5IGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDMyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUxOjM4LjEzOTM4MzQ0NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3NTI3NDAzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSElCRVJOQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3Bvd2VyL0tjb25maWc9MzU9Y29uZmlnIEhJQkVSTkFURV9DQUxMQkFDS1NcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTM3LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjM4OmNvbmZpZyBISUJFUk5BVElPTlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkhpYmVybmF0aW9uIChha2EgJ3N1c3BlbmQgdG8gZGlzaycpXFxcIlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctODMtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6ODQ6Y29uZmlnIEhJQkVSTkFUSU9OX1NOQVBTSE9UX0RFVlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTg1LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBzbmFwc2hvdCBkZXZpY2VcXFwiXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz05Nj1jaG9pY2VcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMC1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMDE6Y29uZmlnIEhJQkVSTkFUSU9OX0NPTVBfTFpPXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTAyLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwNC1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMDU6Y29uZmlnIEhJQkVSTkFUSU9OX0NPTVBfTFo0XFxua2VybmVsL3Bvd2VyL0tjb25maWctMTA2LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnPTEwOT1lbmRjaG9pY2VcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTAtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6MTExOmNvbmZpZyBISUJFUk5BVElPTl9ERUZfQ09NUFxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTExMi1cXHRzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6NDEuMTE0NjcyNTA4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDI2OTgyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkhpYmVybmF0aW9uIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgcXVlc3Rpb24gaXMgc2V0dGxlZDogeWVwLCB3ZSAqYWJzb2x1dGVseSogbmVlZCBgQ09ORklHX0hJQkVSTkFUSU9OYC4gVGhhdCdzIGEgZ2l2ZW4uIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBob29rcyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBvbiBob3cgYFNXQVBgIGlzIGRlZmluZWQsIG9yIGlmIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uLCBsaWtlIGBDT05GSUdfU1dBUGAsIGlzIGV2ZW4gZGVmaW5lZC4gVGhhdCdsbCBiZSB0aGUgY3J1Y2lhbCBsaW5rIHRvIHNlZSBob3cgaGliZXJuYXRpb24gaW50ZXJhY3RzIHdpdGggdGhlIHN3YXAgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXBlbmRlbmN5IGlzIGRpcmVjdCwgb3IgaW5kaXJlY3QsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDU4LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6NDQuNTU3Mzc0NDAzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODI1NTY3NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjUtXFxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXFx0Ym9vbFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTEyOC1cXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9zaC9LY29uZmlnLTEzMC1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0xMS1cXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MTo0Ny4zODI5NTI1MjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4MTQ1NTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlN3YXAgYW5kIEhpYmVybmF0aW9uOiBEZWVwIERpdmUqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHN3YXAgYW5kIGhpYmVybmF0aW9uIGNvbmZpZ3VyYXRpb25zIOKAkyBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX0hJQkVSTkFUSU9OYCBhcmUgdGhlIGNvcmUgdGhpbmdzIEknbSBpbnRlcmVzdGVkIGluIGhlcmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcmV2aXNpdCBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIEl0J3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgc28gaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBCdXQgaXQncyBjYWxsZWQgYnkgYF9fc3dhcF9jYWNoZV9hbGxvY2AsIGFuZCAqdGhhdCogZnVuY3Rpb24sIGBfX3N3YXBfY2FjaGVfYWxsb2NgLCBpcyBjYWxsZWQgYnkgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBOb3csIGlzIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBleHBvcnRlZD8gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgdGhpbmdzIGludGVycmVsYXRlIGluIGEgbGFyZ2VyIGNvbnRleHQuIExldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGl0cyB2aXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg4NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUxOjUxLjQ2NDQxMzc5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3MDI2ODc0MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6NTUuMDM0NjkzOTEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjAxNTUxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFZpc2liaWxpdHkgSXNzdWVzKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIHNvbWV0aGluZyBtaWdodCBiZSBhbWlzcyB3aXRoIHRoZSBmdW5jdGlvbiB2aXNpYmlsaXR5LiBJIHNlZSB0aGVzZSBmdW5jdGlvbnMsIGBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RgIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLCBhbmQgdGhleSdyZSBkZWZpbml0ZWx5IG5vdCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gTm93LCBiZWNhdXNlIHRoZXkncmUgKm5vdCogc3RhdGljLCB0aGV5IHNob3VsZCwgaW4gdGhlb3J5LCBiZSB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgcmlnaHQ/IEJ1dCBJJ20ganVzdCBnZXR0aW5nIGEgaHVuY2ggaGVyZSBhbmQgY2FuJ3QgZmluZCBob3cgdGhleSBhcmUgZXhwb3J0ZWQuIEl0J3MgdGltZSB0byBjb25maXJtIHdoZXRoZXIgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyBleHBvcnRlZCwgZXZlbiBpZiB0aGV5IGFyZW4ndCBkZWNsYXJlZCBhcyBzdGF0aWMuIExldCdzIHNlZSBpZiB0aGUgbGlua2VyIGlzIG1ha2luZyB0aGVtIGF2YWlsYWJsZSwgb3IgaWYgdGhlcmUncyBzb21lIG90aGVyIGFjY2VzcyBpc3N1ZSBnb2luZyBvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWN0dWFsbHkgYWNjZXNzaWJsZSB3aGVyZSB0aGV5IG5lZWQgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjAxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6NTguMjU0ODUzMzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NDg0NzU3NDQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTI6MDEuODAzMzM4ODI0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NzQ0MDU3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEhpYmVybmF0aW9uIFNsb3QgSGFuZGxpbmcgaW4gdGhlIFN3YXAgQ2FjaGUqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IHdhcyB3cm9uZywgdGhlc2UgYXJlbid0IGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBMZXQncyBkaWcgaW4uIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGhlcmUuIEZpcnN0LCBJJ20gY2hlY2tpbmcgdGhlIHN0YXRpYyBkZWNsYXJhdGlvbnM7IGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGV4cGVjdGVkLiBIb3dldmVyLCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBpcyAqbm90KiBzdGF0aWMsIHNvIEknbGwga2VlcCBhbiBleWUgb24gdGhhdC5cblxuSSd2ZSBsaXN0ZWQgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIHJldmlldzogYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAsIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAsIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBIbW0sIHdhaXQuIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGlzbid0IHN0YXRpYywgYnV0IGl0ICppcyogaW50ZXJuYWwgdG8gdGhlIHN3YXAgaW1wbGVtZW50YXRpb24sIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gbm90ZS5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlaXIgbG9jYXRpb25zIHRvIGJlIGNlcnRhaW4uIENvbmZpcm1lZCwgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAgYW5kIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgYXJlIGluIGBtbS9zd2FwZmlsZS5jYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGluIGBtbS9zd2FwX3N0YXRlLmNgLiBGaW5hbGx5LCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBpcyBhbHNvIGluIGBtbS9zd2FwZmlsZS5jYC5cblxuQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYW4gaXNzdWUuIEhpYmVybmF0aW9uIHNsb3RzIHdlcmUgYmVpbmcgbWlzdGFrZW5seSB0cmVhdGVkIGFzIHNoYWRvdyBzbG90cywgYW5kIGNsdXN0ZXIgcmVhZGFoZWFkIHdhcyBwb3RlbnRpYWxseSBicmluZ2luZyB0aGVtIGludG8gdGhlIHN3YXAgY2FjaGUuIFRoZSBzb2x1dGlvbiBpbnRyb2R1Y2VzIGEgbmV3IGBTV1BfVEJfSElCYCBzdGF0ZSwgd2hpY2ggaXMga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZW0uIFRoZSBwYXRjaCBtb2RpZmllcyBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgdG8gcHJldmVudCBub24tc2hhZG93IHNsb3RzIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIGNhY2hlLiBBbHNvLCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHJlbW92ZSBhIHJlY2xhaW0gY2FsbCBzaW5jZSBoaWJlcm5hdGlvbiBzbG90cyBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50IHRvIHRoZSBjYWNoZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBmdXp6IHRoaXMgdGhvcm91Z2hseS4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBhbmQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuXG5cblRoZSBjb25maWd1cmF0aW9ucyB0byBmb2N1cyBvbiBhcmUgYEhJQkVSTkFUSU9OYCBhbmQgYFNXQVBgLCBuYXR1cmFsbHkuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIG5vbi1zdGF0aWMgZGVjbGFyYXRpb25zOiBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBpcyBkZWNsYXJlZCBpbiBgbW0vc3dhcC5oYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGFsc28gaW4gYG1tL3N3YXAuaGAuIEFuZCBmaW5hbGx5LCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhbmQgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBhcmUgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gQWxsIGNvbmZpcm1lZC5cblxuTGV0J3MgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIE9oLCBgc3dhcGluX3N5bmNgLCB3aGljaCBjYWxscyBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEJ1dCwgc2luY2UgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGFscmVhZHkgYSBmb2N1cyBzeW1ib2wsIEkgdGhpbmsgd2UncmUgY292ZXJlZCB0aGVyZS5cblxuQWxyaWdodCwgdGhhdCdzIGV2ZXJ5dGhpbmcgSSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUwMiwiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTI6MTEuNzc3NzUwNjE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMzg4NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJISUJFUk5BVElPTlwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwic3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RcIixcbiAgICBcInN3YXBfY2FjaGVfYWxsb2NfZm9saW9cIixcbiAgICBcIl9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1dQX1RCX0hJQiBzdGF0ZSBmb3IgaGliZXJuYXRpb24gc2xvdHMgaW4gdGhlIHN3YXAgdGFibGUgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgYnJvdWdodCBpbnRvIHRoZSBzd2FwIGNhY2hlIGJ5IGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBtb2RpZmllcyBzd2FwIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgZm9yIGhpYmVybmF0aW9uIHNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaGliZXJuYXRpb24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhJQkVSTkFUSU9OXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwiX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTV1BfVEJfSElCIHN0YXRlIGZvciBoaWJlcm5hdGlvbiBzbG90cyBpbiB0aGUgc3dhcCB0YWJsZSB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUgYnkgY2x1c3RlciByZWFkYWhlYWQuIEl0IG1vZGlmaWVzIHN3YXAgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYyBmb3IgaGliZXJuYXRpb24gc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBoaWJlcm5hdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowkwl55[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 22:31:41 +0000 UTC FinishedAt: 2026-08-06 22:52:14 +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": "1fb556c523f6c18b43b1f52fb366f61c9963ce06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HIBERNATION", "SWAP" ], "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": "1fb556c523f6c18b43b1f52fb366f61c9963ce06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HIBERNATION", "SWAP" ], "series_id": "1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_alloc_hibernation_slot", "swap_free_hibernation_slot", "swap_cache_alloc_folio", "__swap_cluster_free_entries" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hJQkVSTkFUSU9OJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QmIzM0OywKICAgICYjMzQ7c3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3QmIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTV1BfVEJfSElCIHN0YXRlIGZvciBoaWJlcm5hdGlvbiBzbG90cyBpbiB0aGUgc3dhcCB0YWJsZSB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUgYnkgY2x1c3RlciByZWFkYWhlYWQuIEl0IG1vZGlmaWVzIHN3YXAgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYyBmb3IgaGliZXJuYXRpb24gc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBoaWJlcm5hdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YTEwY2IzNWYzMmM3M2RhZTUzMDU0ZjFkNTRmYTc5NjYxZGI0YTQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAyMjo1MDo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDViZTgyNTkxMWU2NDUuLjlmMmNjNTkxODcxM2QgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTE4MCw5ICYjNDM7MTgwLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdGlmIChzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBhIHN3YXBwZWQtb3V0IHNsb3QgbWF5IGJlIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZS5cbiYjNDM7XHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cbiYjNDM7XHQgKiBzbG90cyB0aGF0IGFyZSBmcmVlLCBiYWQsIG9yIG93bmVkIGJ5IGhpYmVybmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXHRpZiAoc2hhZG93cCBcdTAwMjZcdTAwMjYgc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpKVxuJiM0MztcdGlmIChzaGFkb3dwKVxuIFx0XHQqc2hhZG93cCA9IHN3cF90Yl90b19zaGFkb3cob2xkX3RiKTtcbiBcdGlmIChtZW1jZ19pZClcbiBcdFx0Km1lbWNnX2lkID0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZik7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF90YWJsZS5oIGIvbW0vc3dhcF90YWJsZS5oXG5pbmRleCBlNjYxM2U2MmY4ZDBmLi5jMWM1MTZiY2MxN2U2IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF90YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3RhYmxlLmhcbkBAIC0zMCw2ICYjNDM7MzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gICogUEZOOiAgICAgIHxTV0FQX0NPVU5UfFp8LS0tLS0tIFBGTiAtLS0tLS0tfDEwfCAtIENhY2hlZCBzbG90XG4gICogUG9pbnRlcjogIHwtLS0tLS0tLS0tLSBQb2ludGVyIC0tLS0tLS0tLS18MTAwfCAtIChVbnVzZWQpXG4gICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90XG4mIzQzOyAqIEhpYmVybjogICB8LS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XG4gICpcbiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxuQEAgLTU0LDYgJiM0Mzs1NSw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcbiAgKiAgIGFsaWduZWQgcG9pbnRlcnMuXG4gICpcbiAgKiAtIEJhZDogU3dhcCBzbG90IGlzIHJlc2VydmVkLCBwcm90ZWN0cyBzd2FwIGhlYWRlciBvciBob2xlcyBvbiBzd2FwIGRldmljZXMuXG4mIzQzOyAqXG4mIzQzOyAqIC0gSGliZXJuOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQgYnkgaGliZXJuYXRpb24gZm9yIHRoZSBzdXNwZW5kIGltYWdlLCBhbmRcbiYjNDM7ICogICBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlLlxuICAqL1xuIFxuIC8qIE5VTEwgRW50cnksIGFsbCAwICovXG5AQCAtODEsNiAmIzQzOzg1LDkgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xuIC8qIEJhZCBzbG90OiBlbmRzIHdpdGggMGIxMDAwIGFuZCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqL1xuICNkZWZpbmUgU1dQX1RCX0JBRFx0XHQoKH4wVUwpIFx1MDAzY1x1MDAzYyAzKVxuIFxuJiM0MzsvKiBIaWJlcm5hdGlvbiBzbG90OiBlbmRzIHdpdGggMGIxMDAwMCBhbmQgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi9cbiYjNDM7I2RlZmluZSBTV1BfVEJfSElCXHRcdCgofjBVTCkgXHUwMDNjXHUwMDNjIDQpXG4mIzQzO1xuIC8qIE1hY3JvIGZvciBzaGFkb3cgb2Zmc2V0IGNhbGN1bGF0aW9uICovXG4gI2RlZmluZSBTV0FQX0NPVU5UX1NISUZUXHRTV1BfVEJfRkxBR1NfQklUU1xuIFxuQEAgLTE2Niw2ICYjNDM7MTczLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuIFx0cmV0dXJuIHN3cF90YiA9PSBTV1BfVEJfQkFEO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19oaWJlcm5hdGlvbih1bnNpZ25lZCBsb25nIHN3cF90YilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0hJQjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2NvdW50YWJsZSh1bnNpZ25lZCBsb25nIHN3cF90YilcbiB7XG4gXHRyZXR1cm4gKHN3cF90Yl9pc19zaGFkb3coc3dwX3RiKSB8fCBzd3BfdGJfaXNfZm9saW8oc3dwX3RiKSB8fFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCBkZWEyZDNiMzZlMDZmLi40ZmJhMTc3MGNlNjE2IDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuY1xuQEAgLTkyOCw3ICYjNDM7OTI4LDcgQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHQgKiB1cG9uIGZvbGlvIHVubWFwLlxuIFx0ICpcbiBcdCAqIEVsc2UsIGl0JiMzOTtzIGEgZXhjbHVzaXZlIG9yZGVyIDAgYWxsb2NhdGlvbiBmb3IgaGliZXJuYXRpb24uXG4tXHQgKiBUaGUgc2xvdCBzdGFydHMgd2l0aCBjb3VudCA9PSAxIGFuZCBuZXZlciBpbmNyZWFzZXMuXG4mIzQzO1x0ICogVGhlIHNsb3QgY2FycmllcyBubyBzd2FwIGNvdW50IGFuZCBpcyBmcmVlZCBieSBvZmZzZXQuXG4gXHQgKi9cbiBcdGlmIChsaWtlbHkoZm9saW8pKSB7XG4gXHRcdG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuQEAgLTk0MCw4ICYjNDM7OTQwLDggQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdG9yZGVyID0gMDtcbiBcdFx0bnJfcGFnZXMgPSAxO1xuIFx0XHRzd2FwX2NsdXN0ZXJfYXNzZXJ0X2VtcHR5KGNpLCBjaV9vZmYsIDEsIGZhbHNlKTtcbi1cdFx0LyogRmFrZSBzaGFkb3cgcGxhY2Vob2xkZXIgd2l0aCBubyBmbGFnLCBoaWJlcm5hdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHplcm9tYXAgKi9cbi1cdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBfX3N3cF90Yl9ta19jb3VudChzaGFkb3dfdG9fc3dwX3RiKE5VTEwsIDApLCAxKSk7XG4mIzQzO1x0XHQvKiBFeGNsdXNpdmVseSBvd25lZCBieSBoaWJlcm5hdGlvbiwgbXVzdCBuZXZlciBlbnRlciB0aGUgc3dhcCBjYWNoZSAqL1xuJiM0MztcdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBTV1BfVEJfSElCKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIEFsbG9jYXRpb24gd2l0aG91dCBmb2xpbyBpcyBvbmx5IHBvc3NpYmxlIHdpdGggaGliZXJuYXRpb24gKi9cbiBcdFx0V0FSTl9PTl9PTkNFKDEpO1xuQEAgLTE5MjksOSAmIzQzOzE5MjksMTEgQEAgdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xuIFx0XHQvKlxuIFx0XHQgKiBGcmVlaW5nIGlzIGRvbmUgYWZ0ZXIgcmVsZWFzZSBvZiB0aGUgbGFzdCBzd2FwIGNvdW50XG4tXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkXG4mIzQzO1x0XHQgKiByZWYsIG9yIGFmdGVyIHN3YXAgY2FjaGUgaXMgZHJvcHBlZC4gQSBoaWJlcm5hdGlvbiBzbG90XG4mIzQzO1x0XHQgKiBoYXMgbm8gY291bnQgYW5kIGlzIGZyZWVkIGRpcmVjdGx5IGJ5IGl0cyBvd25lci5cbiBcdFx0ICovXG4tXHRcdFZNX1dBUk5fT04oIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fCBfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSBcdTAwM2UgMSk7XG4mIzQzO1x0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXHUwMDNlIDEpKTtcbiBcbiBcdFx0LyogUmVzZXR0aW5nIHRoZSBzbG90IHRvIE5VTEwgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBmbGFncy4gKi9cbiBcdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTtcbkBAIC0yMjAxLDEyICYjNDM7MjIwMyw4IEBAIHZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXG4gXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTtcbi1cdF9fc3dhcF9jbHVzdGVyX3B1dF9lbnRyeShjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUik7XG4gXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSLCAxKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuLVxuLVx0LyogSW4gdGhlb3J5IHJlYWRhaGVhZCBtaWdodCBhZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYnkgYWNjaWRlbnQgKi9cbi1cdF9fdHJ5X3RvX3JlY2xhaW1fc3dhcChzaSwgb2Zmc2V0LCBUVFJTX0FOWVdBWSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19maW5kX2hpYmVybmF0aW9uX3N3YXBfdHlwZShkZXZfdCBkZXZpY2UsIHNlY3Rvcl90IG9mZnNldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SElCRVJOQVRJT04mIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFNXUF9UQl9ISUIgc3RhdGUgZm9yIGhpYmVybmF0aW9uIHNsb3RzIGluIHRoZSBzd2FwIHRhYmxlIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZSBieSBjbHVzdGVyIHJlYWRhaGVhZC4gSXQgbW9kaWZpZXMgc3dhcCBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhpYmVybmF0aW9uIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlhMTBjYjM1ZjMyYzczZGFlNTMwNTRmMWQ1NGZhNzk2NjFkYjRhNDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjUwOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDViZTgyNTkxMWU2NDUuLjlmMmNjNTkxODcxM2QgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTE4MCw5ICYjNDM7MTgwLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7CiAJaWYgKHN3cF90Yl9pc19mb2xpbyhvbGRfdGIpKQogCQlyZXR1cm4gLUVFWElTVDsKLQlpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKQomIzQzOwkvKgomIzQzOwkgKiBPbmx5IGEgc3dhcHBlZC1vdXQgc2xvdCBtYXkgYmUgYnJvdWdodCBpbnRvIHRoZSBzd2FwIGNhY2hlLgomIzQzOwkgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb24KJiM0MzsJICogc2xvdHMgdGhhdCBhcmUgZnJlZSwgYmFkLCBvciBvd25lZCBieSBoaWJlcm5hdGlvbi4KJiM0MzsJICovCiYjNDM7CWlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JaWYgKHNoYWRvd3AgJmFtcDsmYW1wOyBzd3BfdGJfaXNfc2hhZG93KG9sZF90YikpCiYjNDM7CWlmIChzaGFkb3dwKQogCQkqc2hhZG93cCA9IHN3cF90Yl90b19zaGFkb3cob2xkX3RiKTsKIAlpZiAobWVtY2dfaWQpCiAJCSptZW1jZ19pZCA9IF9fc3dhcF9jZ3JvdXBfZ2V0KGNpLCBjaV9vZmYpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcF90YWJsZS5oIGIvbW0vc3dhcF90YWJsZS5oCmluZGV4IGU2NjEzZTYyZjhkMGYuLmMxYzUxNmJjYzE3ZTYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3RhYmxlLmgKQEAgLTMwLDYgJiM0MzszMCw3IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHsKICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdAogICogUG9pbnRlcjogIHwtLS0tLS0tLS0tLSBQb2ludGVyIC0tLS0tLS0tLS18MTAwfCAtIChVbnVzZWQpCiAgKiBCYWQ6ICAgICAgfC0tLS0tLS0tLS0tLS0gMSAtLS0tLS0tLS0tLS0tfDEwMDB8IC0gQmFkIHNsb3QKJiM0MzsgKiBIaWJlcm46ICAgfC0tLS0tLS0tLS0tLSAxIC0tLS0tLS0tLS0tLS18MTAwMDB8IC0gSGliZXJuYXRpb24gc2xvdAogICoKICAqIENPVU5UIGlzIGBTV1BfVEJfQ09VTlRfQklUU2AgbG9uZywgWiBpcyB0aGUgYFNXUF9UQl9aRVJPX0ZMQUdgIGJpdCwKICAqIGFuZCB0b2dldGhlciB0aGV5IGZvcm0gdGhlIGBTV1BfVEJfRkxBR1NfQklUU2Agd2lkZSBmbGFncyBmaWVsZC4KQEAgLTU0LDYgJiM0Mzs1NSw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHsKICAqICAgYWxpZ25lZCBwb2ludGVycy4KICAqCiAgKiAtIEJhZDogU3dhcCBzbG90IGlzIHJlc2VydmVkLCBwcm90ZWN0cyBzd2FwIGhlYWRlciBvciBob2xlcyBvbiBzd2FwIGRldmljZXMuCiYjNDM7ICoKJiM0MzsgKiAtIEhpYmVybjogU3dhcCBzbG90IGlzIHJlc2VydmVkIGJ5IGhpYmVybmF0aW9uIGZvciB0aGUgc3VzcGVuZCBpbWFnZSwgYW5kCiYjNDM7ICogICBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlLgogICovCiAKIC8qIE5VTEwgRW50cnksIGFsbCAwICovCkBAIC04MSw2ICYjNDM7ODUsOSBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7CiAvKiBCYWQgc2xvdDogZW5kcyB3aXRoIDBiMTAwMCBhbmQgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi8KICNkZWZpbmUgU1dQX1RCX0JBRAkJKCh+MFVMKSAmbHQ7Jmx0OyAzKQogCiYjNDM7LyogSGliZXJuYXRpb24gc2xvdDogZW5kcyB3aXRoIDBiMTAwMDAgYW5kIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovCiYjNDM7I2RlZmluZSBTV1BfVEJfSElCCQkoKH4wVUwpICZsdDsmbHQ7IDQpCiYjNDM7CiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqLwogI2RlZmluZSBTV0FQX0NPVU5UX1NISUZUCVNXUF9UQl9GTEFHU19CSVRTCiAKQEAgLTE2Niw2ICYjNDM7MTczLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKQogCXJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0JBRDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfaGliZXJuYXRpb24odW5zaWduZWQgbG9uZyBzd3BfdGIpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9ISUI7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpCiB7CiAJcmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHwKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGRlYTJkM2IzNmUwNmYuLjRmYmExNzcwY2U2MTYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtOTI4LDcgJiM0Mzs5MjgsNyBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkgKiB1cG9uIGZvbGlvIHVubWFwLgogCSAqCiAJICogRWxzZSwgaXQmIzM5O3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi4KLQkgKiBUaGUgc2xvdCBzdGFydHMgd2l0aCBjb3VudCA9PSAxIGFuZCBuZXZlciBpbmNyZWFzZXMuCiYjNDM7CSAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LgogCSAqLwogCWlmIChsaWtlbHkoZm9saW8pKSB7CiAJCW9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwpAQCAtOTQwLDggJiM0Mzs5NDAsOCBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkJb3JkZXIgPSAwOwogCQlucl9wYWdlcyA9IDE7CiAJCXN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoY2ksIGNpX29mZiwgMSwgZmFsc2UpOwotCQkvKiBGYWtlIHNoYWRvdyBwbGFjZWhvbGRlciB3aXRoIG5vIGZsYWcsIGhpYmVybmF0aW9uIGRvZXMgbm90IHVzZSB0aGUgemVyb21hcCAqLwotCQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIF9fc3dwX3RiX21rX2NvdW50KHNoYWRvd190b19zd3BfdGIoTlVMTCwgMCksIDEpKTsKJiM0MzsJCS8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovCiYjNDM7CQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIFNXUF9UQl9ISUIpOwogCX0gZWxzZSB7CiAJCS8qIEFsbG9jYXRpb24gd2l0aG91dCBmb2xpbyBpcyBvbmx5IHBvc3NpYmxlIHdpdGggaGliZXJuYXRpb24gKi8KIAkJV0FSTl9PTl9PTkNFKDEpOwpAQCAtMTkyOSw5ICYjNDM7MTkyOSwxMSBAQCB2b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7CiAJCS8qCiAJCSAqIEZyZWVpbmcgaXMgZG9uZSBhZnRlciByZWxlYXNlIG9mIHRoZSBsYXN0IHN3YXAgY291bnQKLQkJICogcmVmLCBvciBhZnRlciBzd2FwIGNhY2hlIGlzIGRyb3BwZWQKJiM0MzsJCSAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3QKJiM0MzsJCSAqIGhhcyBubyBjb3VudCBhbmQgaXMgZnJlZWQgZGlyZWN0bHkgYnkgaXRzIG93bmVyLgogCQkgKi8KLQkJVk1fV0FSTl9PTighc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpICZndDsgMSk7CiYjNDM7CQlWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgJmd0OyAxKSk7CiAKIAkJLyogUmVzZXR0aW5nIHRoZSBzbG90IHRvIE5VTEwgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBmbGFncy4gKi8KIAkJX19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTsKQEAgLTIyMDEsMTIgJiM0MzsyMjAzLDggQEAgdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSkKIAlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTsKLQlfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpOwogCV9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIsIDEpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwotCi0JLyogSW4gdGhlb3J5IHJlYWRhaGVhZCBtaWdodCBhZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYnkgYWNjaWRlbnQgKi8KLQlfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpOwogfQogCiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MjIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBTd2FwL0hpYmVybmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgY2xlYXJseSBwbGF5aW5nIHdpdGggdGhlIGhpYmVybmF0aW9uIHN3YXAgc2xvdCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLiBJdCYjMzk7cyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIGZpbGVzOiBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBfdGFibGUuaGAsIGFuZCBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZS4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgbWVhbmluZyBpdCYjMzk7cyByZWFjaGFibGUgYW5kIGxpa2VseSB1c2VkIGJ5IHRoZSBrZXJuZWwsIGFuZCB0aGUgZ29hbCBzZWVtcyB0byBiZSB0byByZWZpbmUgaG93IGhpYmVybmF0aW9uIHN3YXAgc2xvdHMgYXJlIGhhbmRsZWQgaW4gdGhlIHN3YXAgdGFibGUuCgpTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgdGhpcyBuZXcgYFNXUF9UQl9ISUJgIHN0YXRlLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3Igb2YgdGhlIGRpcmVjdGlvbiB0aGlzIHBhdGNoIGlzIHRha2luZy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgZmxhZyBmb3IgaGliZXJuYXRpb24gc2xvdHMuIFRoaXMgbG9va3MgbGlrZSBhIGRlZmluaXRlIGltcHJvdmVtZW50IG92ZXIgdGhlIHByZXZpb3VzIG1lY2hhbmlzbSBpbnZvbHZpbmcgYSAmIzM0O3NoYWRvdyBwbGFjZWhvbGRlci4mIzM0OyBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGluIGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCB3aGVyZSBpdCYjMzk7cyBub3cgc2V0dGluZyB0aGUgYFNXUF9UQl9ISUJgIHN0YXRlLCBhbmQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2Agbm93IGhhcyB0aGUgY2FwYWJpbGl0eSBvZiBmcmVlaW5nIHRoZSBoaWJlcm5hdGlvbiBzbG90cyBkaXJlY3RseSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgdG8gaW1wcm92ZSB0aGUgZWZmaWNpZW5jeS4KClRoZSBtb3N0IGludGVyZXN0aW5nIG1vZGlmaWNhdGlvbiwgdGhvdWdoLCBoYXMgdG8gYmUgdGhlIG9uZSBpbiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIEl0IHNlZW1zIHRoYXQgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSBwcmV2ZW50aW5nIG5vbi1zaGFkb3cgc2xvdHMgZnJvbSBiZWluZyBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9ucy4gYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZSwgc28gaXQmIzM5O3MgcHJvYmFibHkgY2FsbGVkIGZyb20gYSBoYW5kZnVsIG9mIHBsYWNlcyB3aXRoaW4gdGhlIHNhbWUgbW9kdWxlLCB3aGljaCBpcyBnb29kLiBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGlzIGV4cG9ydGVkL25vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGxpa2VseSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBUEksIG1lYW5pbmcgaXQmIzM5O3MgcHJvYmFibHkgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzIGluIHRoZSBrZXJuZWwuIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGFwcGVhcnMgdG8gYmUgbm9uLXN0YXRpYy4gRmluYWxseSwgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgIGlzIHN0YXRpYy4gVGhhdCBzaG91bGQgaW5mb3JtIG15IGZvY3VzLgoKVGltZSB0byBsZXZlcmFnZSBgZ3JlcHBlcmAgYW5kIHNlZSB3aG8mIzM5O3MgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgYW5kIHdoZXJlIHRoZXkmIzM5O3JlIGRlZmluZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaD00MDI9c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTtcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQwMzp2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwNC1cbi0tXG5rZXJuZWwvcG93ZXIvc3dhcC5jPTE2OT1zZWN0b3JfdCBhbGxvY19zd2FwZGV2X2Jsb2NrKGludCBzd2FwKVxuLS1cbmtlcm5lbC9wb3dlci9zd2FwLmMtMTc5LVx0XHRpZiAoc3dzdXNwX2V4dGVudHNfaW5zZXJ0KG9mZnNldCkpXG5rZXJuZWwvcG93ZXIvc3dhcC5jOjE4MDpcdFx0XHRzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnkoc3dhcCwgb2Zmc2V0KSk7XG5rZXJuZWwvcG93ZXIvc3dhcC5jLTE4MS1cdFx0ZWxzZVxuLS1cbmtlcm5lbC9wb3dlci9zd2FwLmM9MTg3PXZvaWQgZnJlZV9hbGxfc3dhcF9wYWdlcyhpbnQgc3dhcClcbi0tXG5rZXJuZWwvcG93ZXIvc3dhcC5jLTIwMi1cdFx0Zm9yIChvZmZzZXQgPSBleHQtXHUwMDNlc3RhcnQ7IG9mZnNldCBcdTAwM2M9IGV4dC1cdTAwM2VlbmQ7IG9mZnNldCYjNDM7JiM0MzspXG5rZXJuZWwvcG93ZXIvc3dhcC5jOjIwMzpcdFx0XHRzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnkoc3dhcCwgb2Zmc2V0KSk7XG5rZXJuZWwvcG93ZXIvc3dhcC5jLTIwNC1cbi0tXG5tbS9zd2FwZmlsZS5jPTIxNTk9c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjE5My0vKipcbm1tL3N3YXBmaWxlLmM6MjE5NDogKiBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCgpIC0gRnJlZSBhIHN3YXAgc2xvdCBhbGxvY2F0ZWQgZm9yIGhpYmVybmF0aW9uLlxubW0vc3dhcGZpbGUuYy0yMTk1LSAqIEBlbnRyeTogc3dhcCBlbnRyeSB0byBmcmVlLlxuLS1cbm1tL3N3YXBmaWxlLmMtMjE5OC0gKi9cbm1tL3N3YXBmaWxlLmM6MjE5OTp2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxubW0vc3dhcGZpbGUuYy0yMjAwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTczCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBIaWJlcm5hdGlvbiBTd2FwIFNsb3QgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGlzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGgsIGFuZCBpdHMgY2FsbCBjb250ZXh0IGlzIGNsZWFybHkgd2l0aGluIGBrZXJuZWwvcG93ZXIvc3dhcC5jYC4gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgcGxhY2UsIG1hbmFnaW5nIHN3YXAgb3BlcmF0aW9ucyBkdXJpbmcgaGliZXJuYXRpb24uIE5vdywgdGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IHNsb3QgaXMgYWN0dWFsbHkgZnJlZWQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGRlYWxsb2NhdGluZyBzd2FwIGNsdXN0ZXJzIGxpa2VseSByZXNpZGVzLiBJdCYjMzk7cyB0aGUgYnVpbGRpbmcgYmxvY2sgb2YgbWFraW5nIGEgc3dhcCBlbnRyeSB1c2FibGUgYWdhaW4uIFdlJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVudHJpZXMgYXJlIGZsYWdnZWQgYXMgZnJlZSB3aXRoaW4gdGhlIGNsdXN0ZXIuIEtub3dpbmcgaG93IHRoZSBmcmVlIGxpc3QgaXMgY29uc3RydWN0ZWQgYW5kIG1haW50YWluZWQgd2l0aGluIHRoZSBzd2FwIHNwYWNlIGlzIHRoZSBjcml0aWNhbCBsaW5rIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5oPTI2OT12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKTtcbi0tXG5tbS9zd2FwLmgtMjcxLS8qIEZvciBpbnRlcm5hbCB1c2UgKi9cbm1tL3N3YXAuaDoyNzI6ZXh0ZXJuIHZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXAuaC0yNzMtXHRcdFx0XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTI2MT1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTI5Ni1cdGlmICghZm9saW9fc3dhcHBlZCkge1xubW0vc3dhcF9zdGF0ZS5jOjI5NzpcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfc3RhcnQsIG5yX3BhZ2VzKTtcbm1tL3N3YXBfc3RhdGUuYy0yOTgtXHR9IGVsc2UgaWYgKG5lZWRfZnJlZSkge1xuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMDEtXHRcdFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQoX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKSkpXG5tbS9zd2FwX3N0YXRlLmM6MzAyOlx0XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcbm1tL3N3YXBfc3RhdGUuYy0zMDMtXHRcdH0gd2hpbGUgKCYjNDM7JiM0MztjaV9vZmYgXHUwMDNjIGNpX2VuZCk7XG4tLVxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNjIyLVx0XHRpZiAoY2lfYmF0Y2ggIT0gLTEpIHtcbm1tL3N3YXBmaWxlLmM6MTYyMzpcdFx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9iYXRjaCwgY2lfb2ZmIC0gY2lfYmF0Y2gpO1xubW0vc3dhcGZpbGUuYy0xNjI0LVx0XHRcdGNpX2JhdGNoID0gLTE7XG4tLVxubW0vc3dhcGZpbGUuYy0xNjI4LVx0aWYgKGNpX2JhdGNoICE9IC0xKVxubW0vc3dhcGZpbGUuYzoxNjI5Olx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9iYXRjaCwgY2lfb2ZmIC0gY2lfYmF0Y2gpO1xubW0vc3dhcGZpbGUuYy0xNjMwLVx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4tLVxubW0vc3dhcGZpbGUuYz0xODg0PXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcGZpbGUuYy0xOTE0LSAqL1xubW0vc3dhcGZpbGUuYzoxOTE1OnZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtMTkxNi1cdFx0XHRcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBmaWxlLmM9MjE5OT12b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMjIwNS1cdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XG5tbS9zd2FwZmlsZS5jOjIyMDY6XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSLCAxKTtcbm1tL3N3YXBmaWxlLmMtMjIwNy1cdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqSW50ZXJuYWwgU3dhcCBGdW5jdGlvbiBDb25mdXNpb24qKgoKSG1tLCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYC4gVGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBvbmUuIEl0JiMzOTtzIGV4cG9ydGVkIHRvIGBtbS9zd2FwLmhgLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsIHNpbmNlIGl0IHNlZW1zIGluaGVyZW50bHkgaW50ZXJuYWwgdG8gdGhlIHN3YXAgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIHdvcnRoIGRpZ2dpbmcgaW50byB3aHkgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBzd2FwIGNvZGUgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGFydCBieSBpZGVudGlmeWluZyB0aGUgY2FsbGVycyBvZiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5lZWQgdG8gZXhwb3J0IHRoZSBmaXJzdCBmdW5jdGlvbi4gT25jZSBJIGhhdmUgdGhlIGNhbGwgc2l0ZXMgbWFwcGVkIG91dCwgSSB3aWxsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGdhdWdlIGlmIHRoZSBleHRlcm5hbCB2aXNpYmlsaXR5IGlzIGNvcnJlY3QsIG9yIGp1c3QgYW4gYXJ0aWZhY3Qgb2YgYW4gb2xkZXIgZGVzaWduLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgd2h5IHRoYXQgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZXhwb3NlZCwgb3IgaWYgdGhhdCBpcyBldmVuIHRoZSBjb3JyZWN0IHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9hZGRfY2hlY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jPTEzND12b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTE0NS0vKipcbm1tL3N3YXBfc3RhdGUuYzoxNDY6ICogX19zd2FwX2NhY2hlX2FkZF9jaGVjayAtIENoZWNrIGlmIGEgcmFuZ2UgaXMgc3VpdGFibGUgZm9yIGFkZGluZyBhIGZvbGlvLlxubW0vc3dhcF9zdGF0ZS5jLTE0Ny0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTE2MC0gKi9cbm1tL3N3YXBfc3RhdGUuYzoxNjE6c3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwX3N0YXRlLmMtMTYyLVx0XHRcdFx0ICBzd3BfZW50cnlfdCB0YXJnX2VudHJ5LFxuLS1cbm1tL3N3YXBfc3RhdGUuYz00MTM9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTQzMC1cdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0MzE6XHRlcnIgPSBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKGNpLCB0YXJnX2VudHJ5LCBucl9wYWdlcywgTlVMTCwgTlVMTCk7XG5tbS9zd2FwX3N0YXRlLmMtNDMyLVx0c3Bpbl91bmxvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTQ1My1cdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0NTQ6XHRlcnIgPSBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKGNpLCB0YXJnX2VudHJ5LCBucl9wYWdlcywgXHUwMDI2c2hhZG93LCBcdTAwMjZtZW1jZ19pZCk7XG5tbS9zd2FwX3N0YXRlLmMtNDU1LVx0aWYgKHVubGlrZWx5KGVycikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjM2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgU3dhcCBDYWNoZSBBbGxvY2F0aW9uKioKCkFscmlnaHQsIHNvIGBfX3N3YXBfY2FjaGVfYWxsb2NgIGlzIGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLiBUaGF0JiMzOTtzIHRoZSBrZXkgcmVsYXRpb25zaGlwIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYF9fc3dhcF9jYWNoZV9hbGxvY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIGNhbGwuIFRoZSBhbGxvY2F0aW9uIGxvZ2ljIGlzIGNyaXRpY2FsLCBidXQgdGhlIGNhbGxlcnMgYXJlIGdvaW5nIHRvIGdpdmUgbWUgdGhlIGJpZyBwaWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBkaXJlY3Rpb24gSSYjMzk7bSB0YWtpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYz0zNjY9dm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy00MTItICovXG5tbS9zd2FwX3N0YXRlLmM6NDEzOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcF9zdGF0ZS5jLTQxNC1cdFx0XHRcdFx0c3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz01MTg9c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNTMzLVx0ZG8ge1xubW0vc3dhcF9zdGF0ZS5jOjUzNDpcdFx0cmV0ID0gX19zd2FwX2NhY2hlX2FsbG9jKGNpLCB0YXJnX2VudHJ5LCBnZnAsIG9yZGVyLFxubW0vc3dhcF9zdGF0ZS5jLTUzNS1cdFx0XHRcdFx0IHZtZiwgbXBvbCwgaWx4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA4MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIENhbGwgQ2hhaW4qKgoKUmlnaHQsIHNvIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpcyB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMgKndoeSo/IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gSXMgdGhpcyBhIGNvbW1vbiBwYXRoIGZvciBhbGxvY2F0aW9uPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGx1cmtpbmcgd2l0aGluIHRob3NlIGNhbGxzPwoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEkmIzM5O2xsIHVzZSB3aGF0ZXZlciB0b29scyBhcmUgYXQgbXkgZGlzcG9zYWwgLSBgZ3JlcGAsIGBvYmpkdW1wYCwgbWF5YmUgZXZlbiBhIHN0YXRpYyBhbmFseXNpcyB0b29sIOKAkyB0byBnZXQgYSBsaXN0IG9mIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW52b2tlIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGNydWNpYWwuIEFyZSB0aGVzZSBjYWxscyBjb21pbmcgZnJvbSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzd2FwIGluL291dCByb3V0aW5lcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgc2l0ZXMgd2lsbCBnaXZlIG1lIGFuIGltbWVkaWF0ZSBzZW5zZSBvZiB0aGUgKnB1cnBvc2UqIGJlaGluZCB0aGUgYWxsb2NhdGlvbi4gVGhpcyB3aWxsIGhvcGVmdWxseSBpbGx1bWluYXRlIHRoZSByYXRpb25hbGUgZm9yIHRoZSBkZXNpZ24gb2YgdGhlIGZ1bmN0aW9uLCBhbmQgaG9wZWZ1bGx5IGV4cG9zZSBhbnkgb3Bwb3J0dW5pdGllcyB0byBpbXByb3ZlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXAuaD0zMzU9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL3N3YXAuaDozMzY6c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9zd2FwLmgtMzM3LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTQxMz1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNTAxLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjUwMjogKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbm1tL3N3YXBfc3RhdGUuYy01MDMtICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3Rcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNTE3LSAqL1xubW0vc3dhcF9zdGF0ZS5jOjUxODpzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxubW0vc3dhcF9zdGF0ZS5jLTUxOS1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz02NDY9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxuLS1cbm1tL3N3YXBfc3RhdGUuYy02NTUtXHRcdFx0cmV0dXJuIGZvbGlvO1xubW0vc3dhcF9zdGF0ZS5jOjY1NjpcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbm1tL3N3YXBfc3RhdGUuYy02NTctXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9Njg3PXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY5Ni1cdFx0XHRyZXR1cm4gZm9saW87XG5tbS9zd2FwX3N0YXRlLmM6Njk3Olx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG5tbS9zd2FwX3N0YXRlLmMtNjk4LVx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4tLVxubW0vc3dhcGZpbGUuYz0xODMwPXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vc3dhcGZpbGUuYy0xODcyLSAqICAgICAuLi5cdFx0XHRcdHN3YXBvZmYmIzQzO3N3YXBvblxubW0vc3dhcGZpbGUuYzoxODczOiAqICAgICBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcbm1tL3N3YXBmaWxlLmMtMTg3NC0gKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxuLS1cbm1tL3pzd2FwLmM9OTg3PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4tLVxubW0venN3YXAuYy0xMDAzLVx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbm1tL3pzd2FwLmM6MTAwNDpcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxubW0venN3YXAuYy0xMDA1LVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTY1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBDYWxsZXJzKioKCkFscmlnaHQsIHNvIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpcyBjcnVjaWFsLiBJdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBwb2ludCBmb3Igc3dhcCBjYWNoZSBmb2xpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZSBwYXR0ZXJucy4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gVGhhdCBzZWVtcyByZWFzb25hYmxlIOKAkyB0aG9zZSBhbGwgbWFrZSBzZW5zZSBhcyBwbGFjZXMgd2hlcmUgd2UmIzM5O2QgbmVlZCB0byBicmluZyBkYXRhIGludG8gdGhlIHN3YXAgY2FjaGUgb3Igd3JpdGUgaXQgYmFjay4gTm8gb2J2aW91cyByZWQgZmxhZ3MgdGhlcmUsIGFuZCB0aGV5JiMzOTtyZSBhbGwgcmVhY2hhYmxlOyB0aGUgY2FsbCBmbG93IHNlZW1zIGNvaGVyZW50IHNvIGZhci4KCk5vdywgSSByZWFsbHkgd2FudCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFsbG9jYXRpb24gaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCBzaW5jZSB0aGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBhY3R1YWwgYWxsb2NhdGlvbiBsb2dpYyByZXNpZGVzIHdpdGhpbiB0aGUgY2x1c3Rlci4gVW5kZXJzdGFuZGluZyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBrZXkgdG8gb3B0aW1pemluZyB0aGlzLCBhbmQgdHJhY2luZyB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGV4cG9zZSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50IGluIG91ciBzd2FwIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz04ODQ9c3RhdGljIGJvb2wgY2x1c3Rlcl9zY2FuX3JhbmdlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTkxMC1cbm1tL3N3YXBmaWxlLmM6OTExOnN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy05MTItXHRcdFx0XHRcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBmaWxlLmM9OTY0PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtOTk0LVx0XHR9XG5tbS9zd2FwZmlsZS5jOjk5NTpcdFx0aWYgKCFfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHNpLCBjaSwgZm9saW8sIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpKVxubW0vc3dhcGZpbGUuYy05OTYtXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXAgQ2x1c3RlciBBbGxvY2F0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhlIGFsbG9jYXRpb24gb2Ygc3dhcCBjbHVzdGVyIGVudHJpZXMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBzeXN0ZW0uIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXJgIGFuZCBsb29rIGF0IGl0cyBjYWxsaW5nIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBob3cgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYCBpcyBiZWluZyB1c2VkIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzd2FwIGFsbG9jYXRpb24gc3RyYXRlZ3kuIEZyb20gdGhlcmUsIEkgd2lsbCBpbnZlc3RpZ2F0ZSBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AsIHRvIGRpc2NvdmVyIGhvdyB0aGUgZW50cmllcyBhcmUgYWxsb2NhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zd2FwX3NjYW5fY2x1c3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTkxMT1zdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTk2My0vKiBUcnkgdXNlIGEgbmV3IGNsdXN0ZXIgZm9yIGN1cnJlbnQgQ1BVIGFuZCBhbGxvY2F0ZSBmcm9tIGl0LiAqL1xubW0vc3dhcGZpbGUuYzo5NjQ6c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG5tbS9zd2FwZmlsZS5jLTk2NS1cdFx0XHRcdFx0ICAgIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcGZpbGUuYz0xMDE1PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTAyOC1cdFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcbm1tL3N3YXBmaWxlLmM6MTAyOTpcdFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzaSwgY2ksIGZvbGlvLCBvZmZzZXQpO1xubW0vc3dhcGZpbGUuYy0xMDMwLVx0XHRpZiAoZm91bmQpXG4tLVxubW0vc3dhcGZpbGUuYz0xMDk4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsdXN0ZXJfYWxsb2Nfc3dhcF9lbnRyeShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xMTIzLVx0XHRcdFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcbm1tL3N3YXBmaWxlLmM6MTEyNDpcdFx0XHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgZm9saW8sIG9mZnNldCk7XG5tbS9zd2FwZmlsZS5jLTExMjUtXHRcdH0gZWxzZSB7XG4tLVxubW0vc3dhcGZpbGUuYz0xMzY3PXN0YXRpYyBib29sIHN3YXBfYWxsb2NfZmFzdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTM4Ni1cdFx0XHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xubW0vc3dhcGZpbGUuYzoxMzg3Olx0XHRhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzaSwgY2ksIGZvbGlvLCBvZmZzZXQpO1xubW0vc3dhcGZpbGUuYy0xMzg4LVx0fSBlbHNlIHtcbi0tXG5tbS9zd2FwZmlsZS5jPTIxNTk9c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjE3OC1cdFx0aWYgKGNsdXN0ZXJfaXNfdXNhYmxlKGNpLCAwKSlcbm1tL3N3YXBmaWxlLmM6MjE3OTpcdFx0XHRvZmZzZXQgPSBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzaSwgY2ksIE5VTEwsIHBjcF9vZmZzZXQpO1xubW0vc3dhcGZpbGUuYy0yMTgwLVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFN3YXAgYW5kIEhpYmVybmF0aW9uIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgc3dhcCBhbmQgaGliZXJuYXRpb24gY29kZS4gRmlyc3QsIGl0JiMzOTtzIGNsZWFyIGBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcmAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYXMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYSBidW5jaCBvZiBwbGFjZXMsIGluY2x1ZGluZyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHJvdXRpbmVzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSYjMzk7ZCBleHBlY3QuIFNvIHRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgYSBsb3Qgb2Ygc2NydXRpbnkuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIG5ldyBgU1dQX1RCX0hJQmAgc3RhdGUsIHNwZWNpZmljYWxseSBmb3IgaGliZXJuYXRpb24gc2xvdHMuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBoZXJlLiBJIHNlZSB0aGV5JiMzOTt2ZSBhZGp1c3RlZCBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgdG8gYXNzaWduIHRoaXMgbmV3IHN0YXRlIHdoZW4gYWxsb2NhdGluZyBmb3IgaGliZXJuYXRpb24uIE1ha2VzIHNlbnNlOyB3ZSBuZWVkIGEgZGlzdGluY3QgbWFya2VyLiBUaGV5JiMzOTt2ZSBhbHNvIHVwZGF0ZWQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgdG8gaGFuZGxlIGRpcmVjdGx5IGZyZWVpbmcgdGhlc2UgaGliZXJuYXRpb24gc2xvdHMuIEludGVyZXN0aW5nIOKAkyBza2lwcGluZyBhIHN0ZXAuIEFuZCwgYXMgZXhwZWN0ZWQsIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gaGFuZGxlIHRoZSBkaXJlY3QgZnJlZWluZyBhbmQgc2tpcHMgcmVjbGFpbSBhdHRlbXB0cy4gSXQgbWFrZXMgc2Vuc2UgdG8gYXZvaWQgcmVjbGFpbWluZyBhIHNsb3QgdGhhdCYjMzk7cyBqdXN0IGJlZW4gZnJlZWQuIEkgdW5kZXJzdGFuZCB0aGUgbG9naWMuIEZpbmFsbHksIHRoZSBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgaXMgYmVpbmcgdHdlYWtlZCB0byBwcmV2ZW50IG5vbi1zaGFkb3cgc2xvdHMgZnJvbSBwb2xsdXRpbmcgdGhlIHN3YXAgY2FjaGUsIHdoaWNoIGlzIHNlbnNpYmxlLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHJlYWxseSBkcmlsbCBkb3duIG9uIGFyZSBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcGluX3N5bmNgLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgdG91Y2ggcG9pbnRzLgoKSSBzaG91bGQgdmVyaWZ5IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGhpYmVybmF0aW9uIG5lZWRzIGBDT05GSUdfSElCRVJOQVRJT05gIGFuZCBzd2FwIG5lZWRzIGBDT05GSUdfU1dBUGAuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgYGtlcm5lbC9wb3dlci9LY29uZmlnYCBmb3IgdGhlIGBISUJFUk5BVElPTmAgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyBhIHNhbml0eSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhJQkVSTkFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9LY29uZmlnPTM1PWNvbmZpZyBISUJFUk5BVEVfQ0FMTEJBQ0tTXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMzctXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzozODpjb25maWcgSElCRVJOQVRJT05cbmtlcm5lbC9wb3dlci9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtIaWJlcm5hdGlvbiAoYWthICYjMzk7c3VzcGVuZCB0byBkaXNrJiMzOTspXCYjMzQ7XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctODMtXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzo4NDpjb25maWcgSElCRVJOQVRJT05fU05BUFNIT1RfREVWXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy04NS1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIHNuYXBzaG90IGRldmljZVwmIzM0O1xuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnPTk2PWNob2ljZVxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjEwMTpjb25maWcgSElCRVJOQVRJT05fQ09NUF9MWk9cbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMTA0LVxua2VybmVsL3Bvd2VyL0tjb25maWc6MTA1OmNvbmZpZyBISUJFUk5BVElPTl9DT01QX0xaNFxua2VybmVsL3Bvd2VyL0tjb25maWctMTA2LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0xMDk9ZW5kY2hvaWNlXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTAtXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMTE6Y29uZmlnIEhJQkVSTkFUSU9OX0RFRl9DT01QXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTItXHRzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIaWJlcm5hdGlvbiBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBxdWVzdGlvbiBpcyBzZXR0bGVkOiB5ZXAsIHdlICphYnNvbHV0ZWx5KiBuZWVkIGBDT05GSUdfSElCRVJOQVRJT05gLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBob29rcyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGhvdyBgU1dBUGAgaXMgZGVmaW5lZCwgb3IgaWYgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24sIGxpa2UgYENPTkZJR19TV0FQYCwgaXMgZXZlbiBkZWZpbmVkLiBUaGF0JiMzOTtsbCBiZSB0aGUgY3J1Y2lhbCBsaW5rIHRvIHNlZSBob3cgaGliZXJuYXRpb24gaW50ZXJhY3RzIHdpdGggdGhlIHN3YXAgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXBlbmRlbmN5IGlzIGRpcmVjdCwgb3IgaW5kaXJlY3QsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY1LVxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9taXBzL0tjb25maWctMTI2Ny1cdGJvb2xcbi0tXG5hcmNoL3NoL0tjb25maWc9MTI2PWNvbmZpZyBJT19UUkFQUEVEXG4tLVxuYXJjaC9zaC9LY29uZmlnLTEyOC1cbmFyY2gvc2gvS2NvbmZpZzoxMjk6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvc2gvS2NvbmZpZy0xMzAtXHRib29sXG4tLVxubW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcbi0tXG5tbS9LY29uZmlnLTExLVxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipTd2FwIGFuZCBIaWJlcm5hdGlvbjogRGVlcCBEaXZlKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHN3YXAgYW5kIGhpYmVybmF0aW9uIGNvbmZpZ3VyYXRpb25zIOKAkyBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX0hJQkVSTkFUSU9OYCBhcmUgdGhlIGNvcmUgdGhpbmdzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHJldmlzaXQgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCBzbyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBCdXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBfX3N3YXBfY2FjaGVfYWxsb2NgLCBhbmQgKnRoYXQqIGZ1bmN0aW9uLCBgX19zd2FwX2NhY2hlX2FsbG9jYCwgaXMgY2FsbGVkIGJ5IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gTm93LCBpcyBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgZXhwb3J0ZWQ/IEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgdGhpbmdzIGludGVycmVsYXRlIGluIGEgbGFyZ2VyIGNvbnRleHQuIExldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGl0cyB2aXNpYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIwMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBWaXNpYmlsaXR5IElzc3VlcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIHNvbWV0aGluZyBtaWdodCBiZSBhbWlzcyB3aXRoIHRoZSBmdW5jdGlvbiB2aXNpYmlsaXR5LiBJIHNlZSB0aGVzZSBmdW5jdGlvbnMsIGBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RgIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLCBhbmQgdGhleSYjMzk7cmUgZGVmaW5pdGVseSBub3QgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBOb3csIGJlY2F1c2UgdGhleSYjMzk7cmUgKm5vdCogc3RhdGljLCB0aGV5IHNob3VsZCwgaW4gdGhlb3J5LCBiZSB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgcmlnaHQ/IEJ1dCBJJiMzOTttIGp1c3QgZ2V0dGluZyBhIGh1bmNoIGhlcmUgYW5kIGNhbiYjMzk7dCBmaW5kIGhvdyB0aGV5IGFyZSBleHBvcnRlZC4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIHdoZXRoZXIgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyBleHBvcnRlZCwgZXZlbiBpZiB0aGV5IGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgc3RhdGljLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBsaW5rZXIgaXMgbWFraW5nIHRoZW0gYXZhaWxhYmxlLCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIG90aGVyIGFjY2VzcyBpc3N1ZSBnb2luZyBvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWN0dWFsbHkgYWNjZXNzaWJsZSB3aGVyZSB0aGV5IG5lZWQgdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MDIKCQkJCQkJCW91dHB1dDogMTQ4CgkJCQkJCQl0aG91Z2h0czogNjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIaWJlcm5hdGlvbiBTbG90IEhhbmRsaW5nIGluIHRoZSBTd2FwIENhY2hlKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgd2FzIHdyb25nLCB0aGVzZSBhcmVuJiMzOTt0IGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBMZXQmIzM5O3MgZGlnIGluLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBoZXJlLiBGaXJzdCwgSSYjMzk7bSBjaGVja2luZyB0aGUgc3RhdGljIGRlY2xhcmF0aW9uczsgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgIGlzIHN0YXRpYywgd2hpY2ggaXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGlzICpub3QqIHN0YXRpYywgc28gSSYjMzk7bGwga2VlcCBhbiBleWUgb24gdGhhdC4KCkkmIzM5O3ZlIGxpc3RlZCB0aGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gcmV2aWV3OiBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBhbmQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuIEhtbSwgd2FpdC4gYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgaXNuJiMzOTt0IHN0YXRpYywgYnV0IGl0ICppcyogaW50ZXJuYWwgdG8gdGhlIHN3YXAgaW1wbGVtZW50YXRpb24sIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIG5vdGUuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlaXIgbG9jYXRpb25zIHRvIGJlIGNlcnRhaW4uIENvbmZpcm1lZCwgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAgYW5kIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgYXJlIGluIGBtbS9zd2FwZmlsZS5jYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGluIGBtbS9zd2FwX3N0YXRlLmNgLiBGaW5hbGx5LCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBpcyBhbHNvIGluIGBtbS9zd2FwZmlsZS5jYC4KCkJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlLiBIaWJlcm5hdGlvbiBzbG90cyB3ZXJlIGJlaW5nIG1pc3Rha2VubHkgdHJlYXRlZCBhcyBzaGFkb3cgc2xvdHMsIGFuZCBjbHVzdGVyIHJlYWRhaGVhZCB3YXMgcG90ZW50aWFsbHkgYnJpbmdpbmcgdGhlbSBpbnRvIHRoZSBzd2FwIGNhY2hlLiBUaGUgc29sdXRpb24gaW50cm9kdWNlcyBhIG5ldyBgU1dQX1RCX0hJQmAgc3RhdGUsIHdoaWNoIGlzIGtleSB0byBkaXN0aW5ndWlzaCB0aGVtLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIHRvIHByZXZlbnQgbm9uLXNoYWRvdyBzbG90cyBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBjYWNoZS4gQWxzbywgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBoYXMgYmVlbiBtb2RpZmllZCB0byByZW1vdmUgYSByZWNsYWltIGNhbGwgc2luY2UgaGliZXJuYXRpb24gc2xvdHMgYXJlIG5vIGxvbmdlciByZWxldmFudCB0byB0aGUgY2FjaGUuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBmdXp6IHRoaXMgdGhvcm91Z2hseS4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBhbmQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuCgpUaGUgY29uZmlndXJhdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBISUJFUk5BVElPTmAgYW5kIGBTV0FQYCwgbmF0dXJhbGx5LgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIG5vbi1zdGF0aWMgZGVjbGFyYXRpb25zOiBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBpcyBkZWNsYXJlZCBpbiBgbW0vc3dhcC5oYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGFsc28gaW4gYG1tL3N3YXAuaGAuIEFuZCBmaW5hbGx5LCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhbmQgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBhcmUgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gQWxsIGNvbmZpcm1lZC4KCkxldCYjMzk7cyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gT2gsIGBzd2FwaW5fc3luY2AsIHdoaWNoIGNhbGxzIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gQnV0LCBzaW5jZSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgYWxyZWFkeSBhIGZvY3VzIHN5bWJvbCwgSSB0aGluayB3ZSYjMzk7cmUgY292ZXJlZCB0aGVyZS4KCkFscmlnaHQsIHRoYXQmIzM5O3MgZXZlcnl0aGluZyBJIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtISUJFUk5BVElPTiYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1dQX1RCX0hJQiBzdGF0ZSBmb3IgaGliZXJuYXRpb24gc2xvdHMgaW4gdGhlIHN3YXAgdGFibGUgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgYnJvdWdodCBpbnRvIHRoZSBzd2FwIGNhY2hlIGJ5IGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBtb2RpZmllcyBzd2FwIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgZm9yIGhpYmVybmF0aW9uIHNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaGliZXJuYXRpb24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtISUJFUk5BVElPTiYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1dQX1RCX0hJQiBzdGF0ZSBmb3IgaGliZXJuYXRpb24gc2xvdHMgaW4gdGhlIHN3YXAgdGFibGUgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgYnJvdWdodCBpbnRvIHRoZSBzd2FwIGNhY2hlIGJ5IGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBtb2RpZmllcyBzd2FwIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgZm9yIGhpYmVybmF0aW9uIHNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaGliZXJuYXRpb24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTA6NDEuMTY1MTgzNTQxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA3NDU5NzE4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSElCRVJOQVRJT05cIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RcIixcbiAgICBcInN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFNXUF9UQl9ISUIgc3RhdGUgZm9yIGhpYmVybmF0aW9uIHNsb3RzIGluIHRoZSBzd2FwIHRhYmxlIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZSBieSBjbHVzdGVyIHJlYWRhaGVhZC4gSXQgbW9kaWZpZXMgc3dhcCBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhpYmVybmF0aW9uIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTA6NDEuMTY1MTk1MjgxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ0NzIwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YTEwY2IzNWYzMmM3M2RhZTUzMDU0ZjFkNTRmYTc5NjYxZGI0YTQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMjI6NTA6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXFxuaW5kZXggNWJlODI1OTExZTY0NS4uOWYyY2M1OTE4NzEzZCAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcXG5AQCAtMTgwLDkgKzE4MCwxNCBAQCBzdGF0aWMgaW50IF9fc3dhcF9jYWNoZV9hZGRfY2hlY2soc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcXG4gXFx0aWYgKHN3cF90Yl9pc19mb2xpbyhvbGRfdGIpKVxcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4tXFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcXG4rXFx0LypcXG4rXFx0ICogT25seSBhIHN3YXBwZWQtb3V0IHNsb3QgbWF5IGJlIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZS5cXG4rXFx0ICogQ2x1c3RlciByZWFkYWhlYWQgd2Fsa3MgcmF3IG9mZnNldCByYW5nZXMsIHNvIGl0IGNhbiBsYW5kIG9uXFxuK1xcdCAqIHNsb3RzIHRoYXQgYXJlIGZyZWUsIGJhZCwgb3Igb3duZWQgYnkgaGliZXJuYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fCAhX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi1cXHRpZiAoc2hhZG93cCBcXHUwMDI2XFx1MDAyNiBzd3BfdGJfaXNfc2hhZG93KG9sZF90YikpXFxuK1xcdGlmIChzaGFkb3dwKVxcbiBcXHRcXHQqc2hhZG93cCA9IHN3cF90Yl90b19zaGFkb3cob2xkX3RiKTtcXG4gXFx0aWYgKG1lbWNnX2lkKVxcbiBcXHRcXHQqbWVtY2dfaWQgPSBfX3N3YXBfY2dyb3VwX2dldChjaSwgY2lfb2ZmKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF90YWJsZS5oIGIvbW0vc3dhcF90YWJsZS5oXFxuaW5kZXggZTY2MTNlNjJmOGQwZi4uYzFjNTE2YmNjMTdlNiAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwX3RhYmxlLmhcXG4rKysgYi9tbS9zd2FwX3RhYmxlLmhcXG5AQCAtMzAsNiArMzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XFxuICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdFxcbiAgKiBQb2ludGVyOiAgfC0tLS0tLS0tLS0tIFBvaW50ZXIgLS0tLS0tLS0tLXwxMDB8IC0gKFVudXNlZClcXG4gICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90XFxuKyAqIEhpYmVybjogICB8LS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XFxuICAqXFxuICAqIENPVU5UIGlzIGBTV1BfVEJfQ09VTlRfQklUU2AgbG9uZywgWiBpcyB0aGUgYFNXUF9UQl9aRVJPX0ZMQUdgIGJpdCxcXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxcbkBAIC01NCw2ICs1NSw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcXG4gICogICBhbGlnbmVkIHBvaW50ZXJzLlxcbiAgKlxcbiAgKiAtIEJhZDogU3dhcCBzbG90IGlzIHJlc2VydmVkLCBwcm90ZWN0cyBzd2FwIGhlYWRlciBvciBob2xlcyBvbiBzd2FwIGRldmljZXMuXFxuKyAqXFxuKyAqIC0gSGliZXJuOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQgYnkgaGliZXJuYXRpb24gZm9yIHRoZSBzdXNwZW5kIGltYWdlLCBhbmRcXG4rICogICBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlLlxcbiAgKi9cXG4gXFxuIC8qIE5VTEwgRW50cnksIGFsbCAwICovXFxuQEAgLTgxLDYgKzg1LDkgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xcbiAvKiBCYWQgc2xvdDogZW5kcyB3aXRoIDBiMTAwMCBhbmQgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi9cXG4gI2RlZmluZSBTV1BfVEJfQkFEXFx0XFx0KCh+MFVMKSBcXHUwMDNjXFx1MDAzYyAzKVxcbiBcXG4rLyogSGliZXJuYXRpb24gc2xvdDogZW5kcyB3aXRoIDBiMTAwMDAgYW5kIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovXFxuKyNkZWZpbmUgU1dQX1RCX0hJQlxcdFxcdCgofjBVTCkgXFx1MDAzY1xcdTAwM2MgNClcXG4rXFxuIC8qIE1hY3JvIGZvciBzaGFkb3cgb2Zmc2V0IGNhbGN1bGF0aW9uICovXFxuICNkZWZpbmUgU1dBUF9DT1VOVF9TSElGVFxcdFNXUF9UQl9GTEFHU19CSVRTXFxuIFxcbkBAIC0xNjYsNiArMTczLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxcbiBcXHRyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9CQUQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfaGliZXJuYXRpb24odW5zaWduZWQgbG9uZyBzd3BfdGIpXFxuK3tcXG4rXFx0cmV0dXJuIHN3cF90YiA9PSBTV1BfVEJfSElCO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2NvdW50YWJsZSh1bnNpZ25lZCBsb25nIHN3cF90YilcXG4ge1xcbiBcXHRyZXR1cm4gKHN3cF90Yl9pc19zaGFkb3coc3dwX3RiKSB8fCBzd3BfdGJfaXNfZm9saW8oc3dwX3RiKSB8fFxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IGRlYTJkM2IzNmUwNmYuLjRmYmExNzcwY2U2MTYgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtOTI4LDcgKzkyOCw3IEBAIHN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHQgKiB1cG9uIGZvbGlvIHVubWFwLlxcbiBcXHQgKlxcbiBcXHQgKiBFbHNlLCBpdCdzIGEgZXhjbHVzaXZlIG9yZGVyIDAgYWxsb2NhdGlvbiBmb3IgaGliZXJuYXRpb24uXFxuLVxcdCAqIFRoZSBzbG90IHN0YXJ0cyB3aXRoIGNvdW50ID09IDEgYW5kIG5ldmVyIGluY3JlYXNlcy5cXG4rXFx0ICogVGhlIHNsb3QgY2FycmllcyBubyBzd2FwIGNvdW50IGFuZCBpcyBmcmVlZCBieSBvZmZzZXQuXFxuIFxcdCAqL1xcbiBcXHRpZiAobGlrZWx5KGZvbGlvKSkge1xcbiBcXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcXG5AQCAtOTQwLDggKzk0MCw4IEBAIHN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHRcXHRvcmRlciA9IDA7XFxuIFxcdFxcdG5yX3BhZ2VzID0gMTtcXG4gXFx0XFx0c3dhcF9jbHVzdGVyX2Fzc2VydF9lbXB0eShjaSwgY2lfb2ZmLCAxLCBmYWxzZSk7XFxuLVxcdFxcdC8qIEZha2Ugc2hhZG93IHBsYWNlaG9sZGVyIHdpdGggbm8gZmxhZywgaGliZXJuYXRpb24gZG9lcyBub3QgdXNlIHRoZSB6ZXJvbWFwICovXFxuLVxcdFxcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgX19zd3BfdGJfbWtfY291bnQoc2hhZG93X3RvX3N3cF90YihOVUxMLCAwKSwgMSkpO1xcbitcXHRcXHQvKiBFeGNsdXNpdmVseSBvd25lZCBieSBoaWJlcm5hdGlvbiwgbXVzdCBuZXZlciBlbnRlciB0aGUgc3dhcCBjYWNoZSAqL1xcbitcXHRcXHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIFNXUF9UQl9ISUIpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBBbGxvY2F0aW9uIHdpdGhvdXQgZm9saW8gaXMgb25seSBwb3NzaWJsZSB3aXRoIGhpYmVybmF0aW9uICovXFxuIFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG5AQCAtMTkyOSw5ICsxOTI5LDExIEBAIHZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4gXFx0XFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogRnJlZWluZyBpcyBkb25lIGFmdGVyIHJlbGVhc2Ugb2YgdGhlIGxhc3Qgc3dhcCBjb3VudFxcbi1cXHRcXHQgKiByZWYsIG9yIGFmdGVyIHN3YXAgY2FjaGUgaXMgZHJvcHBlZFxcbitcXHRcXHQgKiByZWYsIG9yIGFmdGVyIHN3YXAgY2FjaGUgaXMgZHJvcHBlZC4gQSBoaWJlcm5hdGlvbiBzbG90XFxuK1xcdFxcdCAqIGhhcyBubyBjb3VudCBhbmQgaXMgZnJlZWQgZGlyZWN0bHkgYnkgaXRzIG93bmVyLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0Vk1fV0FSTl9PTighc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIFxcdTAwM2UgMSk7XFxuK1xcdFxcdFZNX1dBUk5fT04oIXN3cF90Yl9pc19oaWJlcm5hdGlvbihvbGRfdGIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIFxcdTAwM2UgMSkpO1xcbiBcXG4gXFx0XFx0LyogUmVzZXR0aW5nIHRoZSBzbG90IHRvIE5VTEwgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBmbGFncy4gKi9cXG4gXFx0XFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTtcXG5AQCAtMjIwMSwxMiArMjIwMyw4IEBAIHZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXFxuIFxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7XFxuIFxcbiBcXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBvZmZzZXQpO1xcbi1cXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpO1xcbiBcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSLCAxKTtcXG4gXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuLVxcbi1cXHQvKiBJbiB0aGVvcnkgcmVhZGFoZWFkIG1pZ2h0IGFkZCBpdCB0byB0aGUgc3dhcCBjYWNoZSBieSBhY2NpZGVudCAqL1xcbi1cXHRfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUwOjQxLjc5MDgwNTAyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwMTIwMzM5NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhJQkVSTkFUSU9OXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwiX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTV1BfVEJfSElCIHN0YXRlIGZvciBoaWJlcm5hdGlvbiBzbG90cyBpbiB0aGUgc3dhcCB0YWJsZSB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUgYnkgY2x1c3RlciByZWFkYWhlYWQuIEl0IG1vZGlmaWVzIHN3YXAgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYyBmb3IgaGliZXJuYXRpb24gc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBoaWJlcm5hdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlhMTBjYjM1ZjMyYzczZGFlNTMwNTRmMWQ1NGZhNzk2NjFkYjRhNDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjUwOjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA1YmU4MjU5MTFlNjQ1Li45ZjJjYzU5MTg3MTNkIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0xODAsOSArMTgwLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdGlmIChzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxuK1x0LypcbitcdCAqIE9ubHkgYSBzd2FwcGVkLW91dCBzbG90IG1heSBiZSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuXG4rXHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cbitcdCAqIHNsb3RzIHRoYXQgYXJlIGZyZWUsIGJhZCwgb3Igb3duZWQgYnkgaGliZXJuYXRpb24uXG4rXHQgKi9cbitcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXHRpZiAoc2hhZG93cCBcdTAwMjZcdTAwMjYgc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpKVxuK1x0aWYgKHNoYWRvd3ApXG4gXHRcdCpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpO1xuIFx0aWYgKG1lbWNnX2lkKVxuIFx0XHQqbWVtY2dfaWQgPSBfX3N3YXBfY2dyb3VwX2dldChjaSwgY2lfb2ZmKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3RhYmxlLmggYi9tbS9zd2FwX3RhYmxlLmhcbmluZGV4IGU2NjEzZTYyZjhkMGYuLmMxYzUxNmJjYzE3ZTYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3RhYmxlLmhcbisrKyBiL21tL3N3YXBfdGFibGUuaFxuQEAgLTMwLDYgKzMwLDcgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xuICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdFxuICAqIFBvaW50ZXI6ICB8LS0tLS0tLS0tLS0gUG9pbnRlciAtLS0tLS0tLS0tfDEwMHwgLSAoVW51c2VkKVxuICAqIEJhZDogICAgICB8LS0tLS0tLS0tLS0tLSAxIC0tLS0tLS0tLS0tLS18MTAwMHwgLSBCYWQgc2xvdFxuKyAqIEhpYmVybjogICB8LS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XG4gICpcbiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxuQEAgLTU0LDYgKzU1LDkgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xuICAqICAgYWxpZ25lZCBwb2ludGVycy5cbiAgKlxuICAqIC0gQmFkOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQsIHByb3RlY3RzIHN3YXAgaGVhZGVyIG9yIGhvbGVzIG9uIHN3YXAgZGV2aWNlcy5cbisgKlxuKyAqIC0gSGliZXJuOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQgYnkgaGliZXJuYXRpb24gZm9yIHRoZSBzdXNwZW5kIGltYWdlLCBhbmRcbisgKiAgIG11c3QgbmV2ZXIgZW50ZXIgdGhlIHN3YXAgY2FjaGUuXG4gICovXG4gXG4gLyogTlVMTCBFbnRyeSwgYWxsIDAgKi9cbkBAIC04MSw2ICs4NSw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcbiAvKiBCYWQgc2xvdDogZW5kcyB3aXRoIDBiMTAwMCBhbmQgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi9cbiAjZGVmaW5lIFNXUF9UQl9CQURcdFx0KCh+MFVMKSBcdTAwM2NcdTAwM2MgMylcbiBcbisvKiBIaWJlcm5hdGlvbiBzbG90OiBlbmRzIHdpdGggMGIxMDAwMCBhbmQgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi9cbisjZGVmaW5lIFNXUF9UQl9ISUJcdFx0KCh+MFVMKSBcdTAwM2NcdTAwM2MgNClcbitcbiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqL1xuICNkZWZpbmUgU1dBUF9DT1VOVF9TSElGVFx0U1dQX1RCX0ZMQUdTX0JJVFNcbiBcbkBAIC0xNjYsNiArMTczLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuIFx0cmV0dXJuIHN3cF90YiA9PSBTV1BfVEJfQkFEO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2hpYmVybmF0aW9uKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuK3tcbitcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0hJQjtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpXG4ge1xuIFx0cmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uNGZiYTE3NzBjZTYxNiAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC05MjgsNyArOTI4LDcgQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHQgKiB1cG9uIGZvbGlvIHVubWFwLlxuIFx0ICpcbiBcdCAqIEVsc2UsIGl0J3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi5cbi1cdCAqIFRoZSBzbG90IHN0YXJ0cyB3aXRoIGNvdW50ID09IDEgYW5kIG5ldmVyIGluY3JlYXNlcy5cbitcdCAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KGZvbGlvKSkge1xuIFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbkBAIC05NDAsOCArOTQwLDggQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdG9yZGVyID0gMDtcbiBcdFx0bnJfcGFnZXMgPSAxO1xuIFx0XHRzd2FwX2NsdXN0ZXJfYXNzZXJ0X2VtcHR5KGNpLCBjaV9vZmYsIDEsIGZhbHNlKTtcbi1cdFx0LyogRmFrZSBzaGFkb3cgcGxhY2Vob2xkZXIgd2l0aCBubyBmbGFnLCBoaWJlcm5hdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHplcm9tYXAgKi9cbi1cdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBfX3N3cF90Yl9ta19jb3VudChzaGFkb3dfdG9fc3dwX3RiKE5VTEwsIDApLCAxKSk7XG4rXHRcdC8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovXG4rXHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgU1dQX1RCX0hJQik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBBbGxvY2F0aW9uIHdpdGhvdXQgZm9saW8gaXMgb25seSBwb3NzaWJsZSB3aXRoIGhpYmVybmF0aW9uICovXG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbkBAIC0xOTI5LDkgKzE5MjksMTEgQEAgdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xuIFx0XHQvKlxuIFx0XHQgKiBGcmVlaW5nIGlzIGRvbmUgYWZ0ZXIgcmVsZWFzZSBvZiB0aGUgbGFzdCBzd2FwIGNvdW50XG4tXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkXG4rXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3RcbitcdFx0ICogaGFzIG5vIGNvdW50IGFuZCBpcyBmcmVlZCBkaXJlY3RseSBieSBpdHMgb3duZXIuXG4gXHRcdCAqL1xuLVx0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXHUwMDNlIDEpO1xuK1x0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fCBfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSBcdTAwM2UgMSkpO1xuIFxuIFx0XHQvKiBSZXNldHRpbmcgdGhlIHNsb3QgdG8gTlVMTCBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGZsYWdzLiAqL1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIG51bGxfdG9fc3dwX3RiKCkpO1xuQEAgLTIyMDEsMTIgKzIyMDMsOCBAQCB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XG4tXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpO1xuIFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi1cbi1cdC8qIEluIHRoZW9yeSByZWFkYWhlYWQgbWlnaHQgYWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGJ5IGFjY2lkZW50ICovXG4tXHRfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MDo0MS43OTA4MDkxMzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTEyMDc5NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgU3dhcC9IaWJlcm5hdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGNsZWFybHkgcGxheWluZyB3aXRoIHRoZSBoaWJlcm5hdGlvbiBzd2FwIHNsb3QgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIGZpbGVzOiBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBfdGFibGUuaGAsIGFuZCBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZS4gSXQncyBmdW5jdGlvbmFsLCBtZWFuaW5nIGl0J3MgcmVhY2hhYmxlIGFuZCBsaWtlbHkgdXNlZCBieSB0aGUga2VybmVsLCBhbmQgdGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gcmVmaW5lIGhvdyBoaWJlcm5hdGlvbiBzd2FwIHNsb3RzIGFyZSBoYW5kbGVkIGluIHRoZSBzd2FwIHRhYmxlLlxuXG5TcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgdGhpcyBuZXcgYFNXUF9UQl9ISUJgIHN0YXRlLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3Igb2YgdGhlIGRpcmVjdGlvbiB0aGlzIHBhdGNoIGlzIHRha2luZy4gSXQncyBlc3NlbnRpYWxseSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBmbGFnIGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhpcyBsb29rcyBsaWtlIGEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgb3ZlciB0aGUgcHJldmlvdXMgbWVjaGFuaXNtIGludm9sdmluZyBhIFwic2hhZG93IHBsYWNlaG9sZGVyLlwiIEknbSBzZWVpbmcgY2hhbmdlcyBpbiBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2Agd2hlcmUgaXQncyBub3cgc2V0dGluZyB0aGUgYFNXUF9UQl9ISUJgIHN0YXRlLCBhbmQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2Agbm93IGhhcyB0aGUgY2FwYWJpbGl0eSBvZiBmcmVlaW5nIHRoZSBoaWJlcm5hdGlvbiBzbG90cyBkaXJlY3RseSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgdG8gaW1wcm92ZSB0aGUgZWZmaWNpZW5jeS5cblxuVGhlIG1vc3QgaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9uLCB0aG91Z2gsIGhhcyB0byBiZSB0aGUgb25lIGluIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYC4gSXQgc2VlbXMgdGhhdCB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHByZXZlbnRpbmcgbm9uLXNoYWRvdyBzbG90cyBmcm9tIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZS5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zLiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIHNjb3BlLCBzbyBpdCdzIHByb2JhYmx5IGNhbGxlZCBmcm9tIGEgaGFuZGZ1bCBvZiBwbGFjZXMgd2l0aGluIHRoZSBzYW1lIG1vZHVsZSwgd2hpY2ggaXMgZ29vZC4gYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBpcyBleHBvcnRlZC9ub24tc3RhdGljLCBzbyBpdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBUEksIG1lYW5pbmcgaXQncyBwcm9iYWJseSBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMgaW4gdGhlIGtlcm5lbC4gYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgYXBwZWFycyB0byBiZSBub24tc3RhdGljLiBGaW5hbGx5LCBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgaXMgc3RhdGljLiBUaGF0IHNob3VsZCBpbmZvcm0gbXkgZm9jdXMuXG5cblRpbWUgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgIGFuZCBzZWUgd2hvJ3MgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgYW5kIHdoZXJlIHRoZXkncmUgZGVmaW5lZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTA6NDcuOTAyODkzNTE2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjg0MTQzMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9NDAyPXN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDAzOnZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwNC1cXG4tLVxcbmtlcm5lbC9wb3dlci9zd2FwLmM9MTY5PXNlY3Rvcl90IGFsbG9jX3N3YXBkZXZfYmxvY2soaW50IHN3YXApXFxuLS1cXG5rZXJuZWwvcG93ZXIvc3dhcC5jLTE3OS1cXHRcXHRpZiAoc3dzdXNwX2V4dGVudHNfaW5zZXJ0KG9mZnNldCkpXFxua2VybmVsL3Bvd2VyL3N3YXAuYzoxODA6XFx0XFx0XFx0c3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5KHN3YXAsIG9mZnNldCkpO1xcbmtlcm5lbC9wb3dlci9zd2FwLmMtMTgxLVxcdFxcdGVsc2VcXG4tLVxcbmtlcm5lbC9wb3dlci9zd2FwLmM9MTg3PXZvaWQgZnJlZV9hbGxfc3dhcF9wYWdlcyhpbnQgc3dhcClcXG4tLVxcbmtlcm5lbC9wb3dlci9zd2FwLmMtMjAyLVxcdFxcdGZvciAob2Zmc2V0ID0gZXh0LVxcdTAwM2VzdGFydDsgb2Zmc2V0IFxcdTAwM2M9IGV4dC1cXHUwMDNlZW5kOyBvZmZzZXQrKylcXG5rZXJuZWwvcG93ZXIvc3dhcC5jOjIwMzpcXHRcXHRcXHRzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnkoc3dhcCwgb2Zmc2V0KSk7XFxua2VybmVsL3Bvd2VyL3N3YXAuYy0yMDQtXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTIxNTk9c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTkzLS8qKlxcbm1tL3N3YXBmaWxlLmM6MjE5NDogKiBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCgpIC0gRnJlZSBhIHN3YXAgc2xvdCBhbGxvY2F0ZWQgZm9yIGhpYmVybmF0aW9uLlxcbm1tL3N3YXBmaWxlLmMtMjE5NS0gKiBAZW50cnk6IHN3YXAgZW50cnkgdG8gZnJlZS5cXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjE5OC0gKi9cXG5tbS9zd2FwZmlsZS5jOjIxOTk6dm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSlcXG5tbS9zd2FwZmlsZS5jLTIyMDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MDo1My4yNzEzMTU1NDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcxNDg2NDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEhpYmVybmF0aW9uIFN3YXAgU2xvdCBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgc28gYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBpcyB0aGUgZnVuY3Rpb24gd2UncmUgY29uY2VybmVkIHdpdGgsIGFuZCBpdHMgY2FsbCBjb250ZXh0IGlzIGNsZWFybHkgd2l0aGluIGBrZXJuZWwvcG93ZXIvc3dhcC5jYC4gVGhhdCdzIHRoZSBleHBlY3RlZCBwbGFjZSwgbWFuYWdpbmcgc3dhcCBvcGVyYXRpb25zIGR1cmluZyBoaWJlcm5hdGlvbi4gTm93LCB0aGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgc2xvdCBpcyBhY3R1YWxseSBmcmVlZC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgZGVhbGxvY2F0aW5nIHN3YXAgY2x1c3RlcnMgbGlrZWx5IHJlc2lkZXMuIEl0J3MgdGhlIGJ1aWxkaW5nIGJsb2NrIG9mIG1ha2luZyBhIHN3YXAgZW50cnkgdXNhYmxlIGFnYWluLiBXZSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVudHJpZXMgYXJlIGZsYWdnZWQgYXMgZnJlZSB3aXRoaW4gdGhlIGNsdXN0ZXIuIEtub3dpbmcgaG93IHRoZSBmcmVlIGxpc3QgaXMgY29uc3RydWN0ZWQgYW5kIG1haW50YWluZWQgd2l0aGluIHRoZSBzd2FwIHNwYWNlIGlzIHRoZSBjcml0aWNhbCBsaW5rIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUwOjU2LjQ0MjgwNzAwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1NDEzMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmg9MjY5PXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi0tXFxubW0vc3dhcC5oLTI3MS0vKiBGb3IgaW50ZXJuYWwgdXNlICovXFxubW0vc3dhcC5oOjI3MjpleHRlcm4gdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXAuaC0yNzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0yNjE9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTI5Ni1cXHRpZiAoIWZvbGlvX3N3YXBwZWQpIHtcXG5tbS9zd2FwX3N0YXRlLmM6Mjk3OlxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX3N0YXJ0LCBucl9wYWdlcyk7XFxubW0vc3dhcF9zdGF0ZS5jLTI5OC1cXHR9IGVsc2UgaWYgKG5lZWRfZnJlZSkge1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMwMS1cXHRcXHRcXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpKSlcXG5tbS9zd2FwX3N0YXRlLmM6MzAyOlxcdFxcdFxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX29mZiwgMSk7XFxubW0vc3dhcF9zdGF0ZS5jLTMwMy1cXHRcXHR9IHdoaWxlICgrK2NpX29mZiBcXHUwMDNjIGNpX2VuZCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTYyMi1cXHRcXHRpZiAoY2lfYmF0Y2ggIT0gLTEpIHtcXG5tbS9zd2FwZmlsZS5jOjE2MjM6XFx0XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfYmF0Y2gsIGNpX29mZiAtIGNpX2JhdGNoKTtcXG5tbS9zd2FwZmlsZS5jLTE2MjQtXFx0XFx0XFx0Y2lfYmF0Y2ggPSAtMTtcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTYyOC1cXHRpZiAoY2lfYmF0Y2ggIT0gLTEpXFxubW0vc3dhcGZpbGUuYzoxNjI5OlxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XFxubW0vc3dhcGZpbGUuYy0xNjMwLVxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xODg0PXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE5MTQtICovXFxubW0vc3dhcGZpbGUuYzoxOTE1OnZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG5tbS9zd2FwZmlsZS5jLTE5MTYtXFx0XFx0XFx0XFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTIxOTk9dm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjIwNS1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBvZmZzZXQpO1xcbm1tL3N3YXBmaWxlLmM6MjIwNjpcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSLCAxKTtcXG5tbS9zd2FwZmlsZS5jLTIyMDctXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUxOjAxLjAwODIyODQ4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTAxMTM1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipJbnRlcm5hbCBTd2FwIEZ1bmN0aW9uIENvbmZ1c2lvbioqXG5cbkhtbSwgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuIFRoYXQncyBhbiBpbnRlcmVzdGluZyBvbmUuIEl0J3MgZXhwb3J0ZWQgdG8gYG1tL3N3YXAuaGAsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwgc2luY2UgaXQgc2VlbXMgaW5oZXJlbnRseSBpbnRlcm5hbCB0byB0aGUgc3dhcCBpbXBsZW1lbnRhdGlvbi4gSXQncyB3b3J0aCBkaWdnaW5nIGludG8gd2h5IGl0J3MgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBzd2FwIGNvZGUgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGFydCBieSBpZGVudGlmeWluZyB0aGUgY2FsbGVycyBvZiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5lZWQgdG8gZXhwb3J0IHRoZSBmaXJzdCBmdW5jdGlvbi4gT25jZSBJIGhhdmUgdGhlIGNhbGwgc2l0ZXMgbWFwcGVkIG91dCwgSSB3aWxsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGdhdWdlIGlmIHRoZSBleHRlcm5hbCB2aXNpYmlsaXR5IGlzIGNvcnJlY3QsIG9yIGp1c3QgYW4gYXJ0aWZhY3Qgb2YgYW4gb2xkZXIgZGVzaWduLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgd2h5IHRoYXQgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZXhwb3NlZCwgb3IgaWYgdGhhdCBpcyBldmVuIHRoZSBjb3JyZWN0IHNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTcyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6MDQuNDU4MzQ1NTg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODgyNDI4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX2NhY2hlX2FkZF9jaGVja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwX3N0YXRlLmM9MTM0PXZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0xNDUtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjE0NjogKiBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrIC0gQ2hlY2sgaWYgYSByYW5nZSBpcyBzdWl0YWJsZSBmb3IgYWRkaW5nIGEgZm9saW8uXFxubW0vc3dhcF9zdGF0ZS5jLTE0Ny0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMTYwLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzoxNjE6c3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcF9zdGF0ZS5jLTE2Mi1cXHRcXHRcXHRcXHQgIHN3cF9lbnRyeV90IHRhcmdfZW50cnksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDEzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTQzMC1cXHRzcGluX2xvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG5tbS9zd2FwX3N0YXRlLmM6NDMxOlxcdGVyciA9IF9fc3dhcF9jYWNoZV9hZGRfY2hlY2soY2ksIHRhcmdfZW50cnksIG5yX3BhZ2VzLCBOVUxMLCBOVUxMKTtcXG5tbS9zd2FwX3N0YXRlLmMtNDMyLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNDUzLVxcdHNwaW5fbG9jayhcXHUwMDI2Y2ktXFx1MDAzZWxvY2spO1xcbm1tL3N3YXBfc3RhdGUuYzo0NTQ6XFx0ZXJyID0gX19zd2FwX2NhY2hlX2FkZF9jaGVjayhjaSwgdGFyZ19lbnRyeSwgbnJfcGFnZXMsIFxcdTAwMjZzaGFkb3csIFxcdTAwMjZtZW1jZ19pZCk7XFxubW0vc3dhcF9zdGF0ZS5jLTQ1NS1cXHRpZiAodW5saWtlbHkoZXJyKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MTowNy40NDY1OTQyOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDE1MTY1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBDYWNoZSBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgc28gYF9fc3dhcF9jYWNoZV9hbGxvY2AgaXMgY2FsbGluZyBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIFRoYXQncyB0aGUga2V5IHJlbGF0aW9uc2hpcCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCBmcm9tIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCBjYWxsLiBUaGUgYWxsb2NhdGlvbiBsb2dpYyBpcyBjcml0aWNhbCwgYnV0IHRoZSBjYWxsZXJzIGFyZSBnb2luZyB0byBnaXZlIG1lIHRoZSBiaWcgcGljdHVyZS4gVGhhdCdzIHRoZSBkaXJlY3Rpb24gSSdtIHRha2luZyB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjM2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6MTAuMzg4MTEzNDc3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ3NTU2NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwX3N0YXRlLmM9MzY2PXZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy00MTItICovXFxubW0vc3dhcF9zdGF0ZS5jOjQxMzpzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwX3N0YXRlLmMtNDE0LVxcdFxcdFxcdFxcdFxcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz01MTg9c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MzMtXFx0ZG8ge1xcbm1tL3N3YXBfc3RhdGUuYzo1MzQ6XFx0XFx0cmV0ID0gX19zd2FwX2NhY2hlX2FsbG9jKGNpLCB0YXJnX2VudHJ5LCBnZnAsIG9yZGVyLFxcbm1tL3N3YXBfc3RhdGUuYy01MzUtXFx0XFx0XFx0XFx0XFx0IHZtZiwgbXBvbCwgaWx4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6MTQuMDM1Njk0NDUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mzc2MzI5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIENhbGwgQ2hhaW4qKlxuXG5SaWdodCwgc28gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0J3MgY2FsbGluZyBgX19zd2FwX2NhY2hlX2FsbG9jYC4gVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kIGlzICp3aHkqPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIElzIHRoaXMgYSBjb21tb24gcGF0aCBmb3IgYWxsb2NhdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBsdXJraW5nIHdpdGhpbiB0aG9zZSBjYWxscz9cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEknbGwgdXNlIHdoYXRldmVyIHRvb2xzIGFyZSBhdCBteSBkaXNwb3NhbCAtIGBncmVwYCwgYG9iamR1bXBgLCBtYXliZSBldmVuIGEgc3RhdGljIGFuYWx5c2lzIHRvb2wg4oCTIHRvIGdldCBhIGxpc3Qgb2YgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBpbnZva2UgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgY3J1Y2lhbC4gQXJlIHRoZXNlIGNhbGxzIGNvbWluZyBmcm9tIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHN3YXAgaW4vb3V0IHJvdXRpbmVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBzaXRlcyB3aWxsIGdpdmUgbWUgYW4gaW1tZWRpYXRlIHNlbnNlIG9mIHRoZSAqcHVycG9zZSogYmVoaW5kIHRoZSBhbGxvY2F0aW9uLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgdGhlIHJhdGlvbmFsZSBmb3IgdGhlIGRlc2lnbiBvZiB0aGUgZnVuY3Rpb24sIGFuZCBob3BlZnVsbHkgZXhwb3NlIGFueSBvcHBvcnR1bml0aWVzIHRvIGltcHJvdmUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MToxNy44NzMzMzA5MzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTQ0NDQyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmg9MzM1PXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oOjMzNjpzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG5tbS9zd2FwLmgtMzM3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTQxMz1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MDEtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjUwMjogKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtNTAzLSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTE3LSAqL1xcbm1tL3N3YXBfc3RhdGUuYzo1MTg6c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG5tbS9zd2FwX3N0YXRlLmMtNTE5LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY0Nj1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjU1LVxcdFxcdFxcdHJldHVybiBmb2xpbztcXG5tbS9zd2FwX3N0YXRlLmM6NjU2OlxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XFxubW0vc3dhcF9zdGF0ZS5jLTY1Ny1cXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz02ODc9c3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy02OTYtXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbm1tL3N3YXBfc3RhdGUuYzo2OTc6XFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy02OTgtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE4MzA9dm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTg3Mi0gKiAgICAgLi4uXFx0XFx0XFx0XFx0c3dhcG9mZitzd2Fwb25cXG5tbS9zd2FwZmlsZS5jOjE4NzM6ICogICAgIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oKVxcbm1tL3N3YXBmaWxlLmMtMTg3NC0gKiAgICAgICAvLyBjaGVjayBzd2FwX21hcFxcbi0tXFxubW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtMTAwMy1cXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbm1tL3pzd2FwLmM6MTAwNDpcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG5tbS96c3dhcC5jLTEwMDUtXFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MToyMC42ODc3ODA5MzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NjYyMzEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBDYWxsZXJzKipcblxuQWxyaWdodCwgc28gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGNydWNpYWwuIEl0J3MgdGhlIGFsbG9jYXRpb24gcG9pbnQgZm9yIHN3YXAgY2FjaGUgZm9saW9zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UgcGF0dGVybnMuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gVGhhdCBzZWVtcyByZWFzb25hYmxlIOKAkyB0aG9zZSBhbGwgbWFrZSBzZW5zZSBhcyBwbGFjZXMgd2hlcmUgd2UnZCBuZWVkIHRvIGJyaW5nIGRhdGEgaW50byB0aGUgc3dhcCBjYWNoZSBvciB3cml0ZSBpdCBiYWNrLiBObyBvYnZpb3VzIHJlZCBmbGFncyB0aGVyZSwgYW5kIHRoZXkncmUgYWxsIHJlYWNoYWJsZTsgdGhlIGNhbGwgZmxvdyBzZWVtcyBjb2hlcmVudCBzbyBmYXIuXG5cbk5vdywgSSByZWFsbHkgd2FudCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFsbG9jYXRpb24gaXRzZWxmLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgIHNpbmNlIHRoYXQncyBwcm9iYWJseSB3aGVyZSB0aGUgYWN0dWFsIGFsbG9jYXRpb24gbG9naWMgcmVzaWRlcyB3aXRoaW4gdGhlIGNsdXN0ZXIuIFVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMga2V5IHRvIG9wdGltaXppbmcgdGhpcywgYW5kIHRyYWNpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBtaWdodCBleHBvc2UgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBpbXByb3ZlbWVudCBpbiBvdXIgc3dhcCBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTY1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6MjQuMjM0NDA5NTM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjcyNjE4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz04ODQ9c3RhdGljIGJvb2wgY2x1c3Rlcl9zY2FuX3JhbmdlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtOTEwLVxcbm1tL3N3YXBmaWxlLmM6OTExOnN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtOTEyLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYz05NjQ9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTk5NC1cXHRcXHR9XFxubW0vc3dhcGZpbGUuYzo5OTU6XFx0XFx0aWYgKCFfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHNpLCBjaSwgZm9saW8sIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpKVxcbm1tL3N3YXBmaWxlLmMtOTk2LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MToyNi45MDcwMzIzNDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MTQ4OTcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXAgQ2x1c3RlciBBbGxvY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBgYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXJgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGluaXRpYXRlcyB0aGUgYWxsb2NhdGlvbiBvZiBzd2FwIGNsdXN0ZXIgZW50cmllcy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYCBhbmQgbG9vayBhdCBpdHMgY2FsbGluZyBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaG93IGBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcmAgaXMgYmVpbmcgdXNlZCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3dhcCBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBGcm9tIHRoZXJlLCBJIHdpbGwgaW52ZXN0aWdhdGUgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgLCB0byBkaXNjb3ZlciBob3cgdGhlIGVudHJpZXMgYXJlIGFsbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUxOjI5Ljg1ODUyNjUyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMDgxOTEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zd2FwX3NjYW5fY2x1c3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTkxMT1zdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtOTYzLS8qIFRyeSB1c2UgYSBuZXcgY2x1c3RlciBmb3IgY3VycmVudCBDUFUgYW5kIGFsbG9jYXRlIGZyb20gaXQuICovXFxubW0vc3dhcGZpbGUuYzo5NjQ6c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy05NjUtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEwMTU9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fbGlzdChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEwMjgtXFx0XFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcXG5tbS9zd2FwZmlsZS5jOjEwMjk6XFx0XFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzaSwgY2ksIGZvbGlvLCBvZmZzZXQpO1xcbm1tL3N3YXBmaWxlLmMtMTAzMC1cXHRcXHRpZiAoZm91bmQpXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEwOTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTEyMy1cXHRcXHRcXHRcXHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xcbm1tL3N3YXBmaWxlLmM6MTEyNDpcXHRcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgZm9saW8sIG9mZnNldCk7XFxubW0vc3dhcGZpbGUuYy0xMTI1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEzNjc9c3RhdGljIGJvb2wgc3dhcF9hbGxvY19mYXN0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEzODYtXFx0XFx0XFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcXG5tbS9zd2FwZmlsZS5jOjEzODc6XFx0XFx0YWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc2ksIGNpLCBmb2xpbywgb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jLTEzODgtXFx0fSBlbHNlIHtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjE1OT1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxNzgtXFx0XFx0aWYgKGNsdXN0ZXJfaXNfdXNhYmxlKGNpLCAwKSlcXG5tbS9zd2FwZmlsZS5jOjIxNzk6XFx0XFx0XFx0b2Zmc2V0ID0gYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc2ksIGNpLCBOVUxMLCBwY3Bfb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jLTIxODAtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MTozMi42ODkzNTAxMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ1MDAzMDE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU3dhcCBhbmQgSGliZXJuYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlc2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgc3dhcCBhbmQgaGliZXJuYXRpb24gY29kZS4gRmlyc3QsIGl0J3MgY2xlYXIgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYCBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBhcyBpdCdzIGNhbGxlZCBmcm9tIGEgYnVuY2ggb2YgcGxhY2VzLCBpbmNsdWRpbmcgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyByb3V0aW5lcywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknZCBleHBlY3QuIFNvIHRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgYSBsb3Qgb2Ygc2NydXRpbnkuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGBTV1BfVEJfSElCYCBzdGF0ZSwgc3BlY2lmaWNhbGx5IGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaGVyZS4gSSBzZWUgdGhleSd2ZSBhZGp1c3RlZCBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgdG8gYXNzaWduIHRoaXMgbmV3IHN0YXRlIHdoZW4gYWxsb2NhdGluZyBmb3IgaGliZXJuYXRpb24uIE1ha2VzIHNlbnNlOyB3ZSBuZWVkIGEgZGlzdGluY3QgbWFya2VyLiBUaGV5J3ZlIGFsc28gdXBkYXRlZCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCB0byBoYW5kbGUgZGlyZWN0bHkgZnJlZWluZyB0aGVzZSBoaWJlcm5hdGlvbiBzbG90cy4gSW50ZXJlc3Rpbmcg4oCTIHNraXBwaW5nIGEgc3RlcC4gQW5kLCBhcyBleHBlY3RlZCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBoYXMgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgdGhlIGRpcmVjdCBmcmVlaW5nIGFuZCBza2lwcyByZWNsYWltIGF0dGVtcHRzLiBJdCBtYWtlcyBzZW5zZSB0byBhdm9pZCByZWNsYWltaW5nIGEgc2xvdCB0aGF0J3MganVzdCBiZWVuIGZyZWVkLiBJIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLiBGaW5hbGx5LCB0aGUgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIGlzIGJlaW5nIHR3ZWFrZWQgdG8gcHJldmVudCBub24tc2hhZG93IHNsb3RzIGZyb20gcG9sbHV0aW5nIHRoZSBzd2FwIGNhY2hlLCB3aGljaCBpcyBzZW5zaWJsZS5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHJlYWxseSBkcmlsbCBkb3duIG9uIGFyZSBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcGluX3N5bmNgLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgdG91Y2ggcG9pbnRzLlxuXG5JIHNob3VsZCB2ZXJpZnkgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJJ20gYXNzdW1pbmcgdGhhdCBoaWJlcm5hdGlvbiBuZWVkcyBgQ09ORklHX0hJQkVSTkFUSU9OYCBhbmQgc3dhcCBuZWVkcyBgQ09ORklHX1NXQVBgLiBMZXQncyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgYGtlcm5lbC9wb3dlci9LY29uZmlnYCBmb3IgdGhlIGBISUJFUk5BVElPTmAgY29uZmlndXJhdGlvbi4gVGhhdCdzIGEgc2FuaXR5IGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDMyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUxOjM4LjEzOTM4MzQ0NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3NTI3NDAzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSElCRVJOQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3Bvd2VyL0tjb25maWc9MzU9Y29uZmlnIEhJQkVSTkFURV9DQUxMQkFDS1NcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTM3LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjM4OmNvbmZpZyBISUJFUk5BVElPTlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkhpYmVybmF0aW9uIChha2EgJ3N1c3BlbmQgdG8gZGlzaycpXFxcIlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctODMtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6ODQ6Y29uZmlnIEhJQkVSTkFUSU9OX1NOQVBTSE9UX0RFVlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTg1LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBzbmFwc2hvdCBkZXZpY2VcXFwiXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz05Nj1jaG9pY2VcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMC1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMDE6Y29uZmlnIEhJQkVSTkFUSU9OX0NPTVBfTFpPXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTAyLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwNC1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMDU6Y29uZmlnIEhJQkVSTkFUSU9OX0NPTVBfTFo0XFxua2VybmVsL3Bvd2VyL0tjb25maWctMTA2LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnPTEwOT1lbmRjaG9pY2VcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTAtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6MTExOmNvbmZpZyBISUJFUk5BVElPTl9ERUZfQ09NUFxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTExMi1cXHRzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6NDEuMTE0NjcyNTA4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDI2OTgyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkhpYmVybmF0aW9uIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgcXVlc3Rpb24gaXMgc2V0dGxlZDogeWVwLCB3ZSAqYWJzb2x1dGVseSogbmVlZCBgQ09ORklHX0hJQkVSTkFUSU9OYC4gVGhhdCdzIGEgZ2l2ZW4uIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBob29rcyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBvbiBob3cgYFNXQVBgIGlzIGRlZmluZWQsIG9yIGlmIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uLCBsaWtlIGBDT05GSUdfU1dBUGAsIGlzIGV2ZW4gZGVmaW5lZC4gVGhhdCdsbCBiZSB0aGUgY3J1Y2lhbCBsaW5rIHRvIHNlZSBob3cgaGliZXJuYXRpb24gaW50ZXJhY3RzIHdpdGggdGhlIHN3YXAgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXBlbmRlbmN5IGlzIGRpcmVjdCwgb3IgaW5kaXJlY3QsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDU4LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6NDQuNTU3Mzc0NDAzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODI1NTY3NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjUtXFxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXFx0Ym9vbFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTEyOC1cXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9zaC9LY29uZmlnLTEzMC1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0xMS1cXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjo1MTo0Ny4zODI5NTI1MjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4MTQ1NTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlN3YXAgYW5kIEhpYmVybmF0aW9uOiBEZWVwIERpdmUqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHN3YXAgYW5kIGhpYmVybmF0aW9uIGNvbmZpZ3VyYXRpb25zIOKAkyBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX0hJQkVSTkFUSU9OYCBhcmUgdGhlIGNvcmUgdGhpbmdzIEknbSBpbnRlcmVzdGVkIGluIGhlcmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcmV2aXNpdCBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIEl0J3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgc28gaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBCdXQgaXQncyBjYWxsZWQgYnkgYF9fc3dhcF9jYWNoZV9hbGxvY2AsIGFuZCAqdGhhdCogZnVuY3Rpb24sIGBfX3N3YXBfY2FjaGVfYWxsb2NgLCBpcyBjYWxsZWQgYnkgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBOb3csIGlzIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBleHBvcnRlZD8gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgdGhpbmdzIGludGVycmVsYXRlIGluIGEgbGFyZ2VyIGNvbnRleHQuIExldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGl0cyB2aXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg4NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjUxOjUxLjQ2NDQxMzc5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3MDI2ODc0MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6NTUuMDM0NjkzOTEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjAxNTUxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFZpc2liaWxpdHkgSXNzdWVzKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIHNvbWV0aGluZyBtaWdodCBiZSBhbWlzcyB3aXRoIHRoZSBmdW5jdGlvbiB2aXNpYmlsaXR5LiBJIHNlZSB0aGVzZSBmdW5jdGlvbnMsIGBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RgIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLCBhbmQgdGhleSdyZSBkZWZpbml0ZWx5IG5vdCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gTm93LCBiZWNhdXNlIHRoZXkncmUgKm5vdCogc3RhdGljLCB0aGV5IHNob3VsZCwgaW4gdGhlb3J5LCBiZSB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgcmlnaHQ/IEJ1dCBJJ20ganVzdCBnZXR0aW5nIGEgaHVuY2ggaGVyZSBhbmQgY2FuJ3QgZmluZCBob3cgdGhleSBhcmUgZXhwb3J0ZWQuIEl0J3MgdGltZSB0byBjb25maXJtIHdoZXRoZXIgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyBleHBvcnRlZCwgZXZlbiBpZiB0aGV5IGFyZW4ndCBkZWNsYXJlZCBhcyBzdGF0aWMuIExldCdzIHNlZSBpZiB0aGUgbGlua2VyIGlzIG1ha2luZyB0aGVtIGF2YWlsYWJsZSwgb3IgaWYgdGhlcmUncyBzb21lIG90aGVyIGFjY2VzcyBpc3N1ZSBnb2luZyBvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgYWN0dWFsbHkgYWNjZXNzaWJsZSB3aGVyZSB0aGV5IG5lZWQgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjAxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTE6NTguMjU0ODUzMzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NDg0NzU3NDQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTI6MDEuODAzMzM4ODI0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NzQ0MDU3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEhpYmVybmF0aW9uIFNsb3QgSGFuZGxpbmcgaW4gdGhlIFN3YXAgQ2FjaGUqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IHdhcyB3cm9uZywgdGhlc2UgYXJlbid0IGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBMZXQncyBkaWcgaW4uIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGhlcmUuIEZpcnN0LCBJJ20gY2hlY2tpbmcgdGhlIHN0YXRpYyBkZWNsYXJhdGlvbnM7IGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGV4cGVjdGVkLiBIb3dldmVyLCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBpcyAqbm90KiBzdGF0aWMsIHNvIEknbGwga2VlcCBhbiBleWUgb24gdGhhdC5cblxuSSd2ZSBsaXN0ZWQgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIHJldmlldzogYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAsIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAsIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBIbW0sIHdhaXQuIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGlzbid0IHN0YXRpYywgYnV0IGl0ICppcyogaW50ZXJuYWwgdG8gdGhlIHN3YXAgaW1wbGVtZW50YXRpb24sIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gbm90ZS5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlaXIgbG9jYXRpb25zIHRvIGJlIGNlcnRhaW4uIENvbmZpcm1lZCwgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAgYW5kIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgYXJlIGluIGBtbS9zd2FwZmlsZS5jYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGluIGBtbS9zd2FwX3N0YXRlLmNgLiBGaW5hbGx5LCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBpcyBhbHNvIGluIGBtbS9zd2FwZmlsZS5jYC5cblxuQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYW4gaXNzdWUuIEhpYmVybmF0aW9uIHNsb3RzIHdlcmUgYmVpbmcgbWlzdGFrZW5seSB0cmVhdGVkIGFzIHNoYWRvdyBzbG90cywgYW5kIGNsdXN0ZXIgcmVhZGFoZWFkIHdhcyBwb3RlbnRpYWxseSBicmluZ2luZyB0aGVtIGludG8gdGhlIHN3YXAgY2FjaGUuIFRoZSBzb2x1dGlvbiBpbnRyb2R1Y2VzIGEgbmV3IGBTV1BfVEJfSElCYCBzdGF0ZSwgd2hpY2ggaXMga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZW0uIFRoZSBwYXRjaCBtb2RpZmllcyBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgdG8gcHJldmVudCBub24tc2hhZG93IHNsb3RzIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIGNhY2hlLiBBbHNvLCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHJlbW92ZSBhIHJlY2xhaW0gY2FsbCBzaW5jZSBoaWJlcm5hdGlvbiBzbG90cyBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50IHRvIHRoZSBjYWNoZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBmdXp6IHRoaXMgdGhvcm91Z2hseS4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBhbmQgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AuXG5cblRoZSBjb25maWd1cmF0aW9ucyB0byBmb2N1cyBvbiBhcmUgYEhJQkVSTkFUSU9OYCBhbmQgYFNXQVBgLCBuYXR1cmFsbHkuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIG5vbi1zdGF0aWMgZGVjbGFyYXRpb25zOiBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCBpcyBkZWNsYXJlZCBpbiBgbW0vc3dhcC5oYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGFsc28gaW4gYG1tL3N3YXAuaGAuIEFuZCBmaW5hbGx5LCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhbmQgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBhcmUgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gQWxsIGNvbmZpcm1lZC5cblxuTGV0J3MgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIE9oLCBgc3dhcGluX3N5bmNgLCB3aGljaCBjYWxscyBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEJ1dCwgc2luY2UgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGFscmVhZHkgYSBmb2N1cyBzeW1ib2wsIEkgdGhpbmsgd2UncmUgY292ZXJlZCB0aGVyZS5cblxuQWxyaWdodCwgdGhhdCdzIGV2ZXJ5dGhpbmcgSSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUwMiwiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6NTI6MTEuNzc3NzUwNjE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMzg4NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJISUJFUk5BVElPTlwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwic3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RcIixcbiAgICBcInN3YXBfY2FjaGVfYWxsb2NfZm9saW9cIixcbiAgICBcIl9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1dQX1RCX0hJQiBzdGF0ZSBmb3IgaGliZXJuYXRpb24gc2xvdHMgaW4gdGhlIHN3YXAgdGFibGUgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgYnJvdWdodCBpbnRvIHRoZSBzd2FwIGNhY2hlIGJ5IGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBtb2RpZmllcyBzd2FwIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgZm9yIGhpYmVybmF0aW9uIHNsb3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaGliZXJuYXRpb24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhJQkVSTkFUSU9OXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwiX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTV1BfVEJfSElCIHN0YXRlIGZvciBoaWJlcm5hdGlvbiBzbG90cyBpbiB0aGUgc3dhcCB0YWJsZSB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUgYnkgY2x1c3RlciByZWFkYWhlYWQuIEl0IG1vZGlmaWVzIHN3YXAgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYyBmb3IgaGliZXJuYXRpb24gc2xvdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBoaWJlcm5hdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowkwl55[1] Phase: Succeeded StartedAt: 2026-08-06 22:52:35 +0000 UTC FinishedAt: 2026-08-06 22:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 22:52:35 +0000 UTC FinishedAt: 2026-08-06 22:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2] Phase: Succeeded StartedAt: 2026-08-06 22:52:35 +0000 UTC FinishedAt: 2026-08-07 02:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 22:52:36 +0000 UTC FinishedAt: 2026-08-07 02:34:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","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-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 22:52:36 +0000 UTC FinishedAt: 2026-08-06 22:53:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 22:52:36 +0000 UTC FinishedAt: 2026-08-06 22:52:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"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-workflowkwl55/series-workflowkwl55-convert-artifact-3493000399/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 22:53:00 +0000 UTC FinishedAt: 2026-08-06 23:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 22:53:00 +0000 UTC FinishedAt: 2026-08-06 23:12:48 +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:*8e475027-9f72-48b4-aa94-d39e54d95978,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-workflowkwl55/series-workflowkwl55-convert-artifact-3493000399/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": "9e92f127-de83-49d6-ba81-62379b999cd9", "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-workflowkwl55/series-workflowkwl55-build-action-2444608533/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 22:53:00 +0000 UTC FinishedAt: 2026-08-06 23:12:37 +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:*8e475027-9f72-48b4-aa94-d39e54d95978,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-workflowkwl55/series-workflowkwl55-convert-artifact-3493000399/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": "9e92f127-de83-49d6-ba81-62379b999cd9", "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-workflowkwl55/series-workflowkwl55-build-action-2444608533/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 23:12:48 +0000 UTC FinishedAt: 2026-08-06 23:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 23:12:48 +0000 UTC FinishedAt: 2026-08-06 23:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 23:12:48 +0000 UTC FinishedAt: 2026-08-06 23:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 23:12:48 +0000 UTC FinishedAt: 2026-08-06 23:12:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","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-workflowkwl55/series-workflowkwl55-convert-artifact-4065542430/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 23:12:59 +0000 UTC FinishedAt: 2026-08-06 23:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 23:12:59 +0000 UTC FinishedAt: 2026-08-06 23:14:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e92f127-de83-49d6-ba81-62379b999cd9,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-workflowkwl55/series-workflowkwl55-build-action-2444608533/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-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 23:15:01 +0000 UTC FinishedAt: 2026-08-06 23:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 23:15:01 +0000 UTC FinishedAt: 2026-08-06 23:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 23:15:01 +0000 UTC FinishedAt: 2026-08-06 23:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 23:15:01 +0000 UTC FinishedAt: 2026-08-06 23:31:11 +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:*8e475027-9f72-48b4-aa94-d39e54d95978,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-workflowkwl55/series-workflowkwl55-convert-artifact-4065542430/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": "c0ec9f76-f84a-484f-a4ce-289b9f836ac7", "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-workflowkwl55/series-workflowkwl55-build-action-4199345906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 23:15:01 +0000 UTC FinishedAt: 2026-08-06 23:31:01 +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:*8e475027-9f72-48b4-aa94-d39e54d95978,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-workflowkwl55/series-workflowkwl55-convert-artifact-4065542430/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": "c0ec9f76-f84a-484f-a4ce-289b9f836ac7", "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-workflowkwl55/series-workflowkwl55-build-action-4199345906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 23:31:11 +0000 UTC FinishedAt: 2026-08-06 23:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 23:31:11 +0000 UTC FinishedAt: 2026-08-06 23:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 23:31:11 +0000 UTC FinishedAt: 2026-08-06 23:33:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 23:31:11 +0000 UTC FinishedAt: 2026-08-06 23:33:07 +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:*c0ec9f76-f84a-484f-a4ce-289b9f836ac7,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-workflowkwl55/series-workflowkwl55-build-action-4199345906/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-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 23:33:16 +0000 UTC FinishedAt: 2026-08-07 02:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 23:33:16 +0000 UTC FinishedAt: 2026-08-07 02:34:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"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:*9e92f127-de83-49d6-ba81-62379b999cd9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c0ec9f76-f84a-484f-a4ce-289b9f836ac7,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-workflowkwl55/series-workflowkwl55-build-action-2444608533/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-workflowkwl55/series-workflowkwl55-build-action-4199345906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 23:33:16 +0000 UTC FinishedAt: 2026-08-06 23:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 23:33:16 +0000 UTC FinishedAt: 2026-08-06 23:33:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"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-workflowkwl55/series-workflowkwl55-convert-artifact-3389083427/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 23:33:16 +0000 UTC FinishedAt: 2026-08-06 23:33:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 23:33:16 +0000 UTC FinishedAt: 2026-08-06 23:33:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 23:33:16 +0000 UTC FinishedAt: 2026-08-06 23:33:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 23:33:26 +0000 UTC FinishedAt: 2026-08-07 02:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkwl55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_alloc_hibernation_slot","swap_free_hibernation_slot","swap_cache_alloc_folio","__swap_cluster_free_entries"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["HIBERNATION","SWAP"],"series_id":"1ff8dd0e-6b87-41e3-8c6e-66da9a02e4c2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 23:33:26 +0000 UTC FinishedAt: 2026-08-07 02:34:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e92f127-de83-49d6-ba81-62379b999cd9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c0ec9f76-f84a-484f-a4ce-289b9f836ac7,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-workflowkwl55/series-workflowkwl55-build-action-2444608533/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-workflowkwl55/series-workflowkwl55-build-action-4199345906/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-workflowkwl55/series-workflowkwl55-convert-artifact-3389083427/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,}